| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
Add SEP proposing to loosen inputSchema, outputSchema, and structuredContent restrictions to enable full JSON Schema 2020-12 compliance. This allows array responses and schema composition keywords (anyOf, oneOf, allOf). Relates to modelcontextprotocol#834 Co-Authored-By: John McBride <jpmmcbride@gmail.com> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… support - inputSchema: Allow any valid JSON Schema (enables oneOf/anyOf/allOf at root) - outputSchema: Allow any valid JSON Schema (enables array schemas) - structuredContent: Allow any JSON value (enables array responses) - Update tools.mdx documentation - Add example files demonstrating new capabilities Reference: modelcontextprotocol#834 Co-Authored-By: John McBride <jpmmcbride@gmail.com> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Updated inputSchema spec to allow any valid JSON Schema (full 2020-12 compliance) - Replaced get-array-content with get-weather-forecast tool - Weather forecast matches the exact example from Motivation section - Updated npm package references to latest versions: - SDK: @olaservo/mcp-sdk@1.25.2-sep834.3 - Server: @olaservo/mcp-server-everything-sep834@1.1.0 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Renamed 0000-json-schema-2020-12.md to 2106-json-schema-2020-12.md - Updated SEP number to 2106 - Updated PR link to modelcontextprotocol#2106 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update title to match original: "Tools inputSchema & outputSchema Conform to JSON Schema 2020-12" - inputSchema: Keep type: "object" required, but allow additional JSON Schema properties - outputSchema: Fully flexible (any valid JSON Schema) - structuredContent: Any JSON value (unknown) - Update examples to show composition with type: "object" Co-Authored-By: John McBride <jpmmcbride@gmail.com> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Aligns schema.ts with John's original PR modelcontextprotocol#881: - inputSchema: Keep type: "object" required, allow additional properties - outputSchema: Any valid JSON Schema (with $schema field) - Regenerate schema.json and schema.mdx Co-Authored-By: John McBride <jpmmcbride@gmail.com> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Maintainer Activity CheckHi @olaservo! You're assigned to this SEP but there hasn't been any activity from you in 14 days. Please provide an update on:
If you're no longer able to sponsor this SEP, please let us know so we can find another maintainer. This is an automated message from the SEP lifecycle bot. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Summary
Note: This PR converts John McBride's original SEP proposal (PR #881) from issue #834 to the new SEP format established by SEP-1850. The original proposal and community discussion remain in PR #881—this PR formalizes it under the new process with a reference implementation.
Motivation
The current MCP specification restricts tool schemas in ways that conflict with full JSON Schema support and create real friction in the ecosystem.
The Problem: A weather API tool that returns hourly forecasts cannot return the natural response:
[ { "hour": "09:00", "temp": 68, "conditions": "sunny" }, { "hour": "10:00", "temp": 72, "conditions": "partly cloudy" } ]Instead, developers must wrap arrays in unnecessary container objects—conflicting with common REST API patterns (GitHub Events API, AccuWeather, standard collection endpoints).
SDK Evidence: This isn't theoretical friction. FastMCP, one of the most popular Python SDKs, has implemented extensive workarounds with error messages that explicitly cite "MCP spec limitations." These workarounds have caused real bugs:
Industry Precedent: OpenAPI went through this same evolution. OpenAPI 3.0's "extended subset" of JSON Schema caused years of tooling confusion. OpenAPI 3.1 made the strategic decision to fully align with JSON Schema 2020-12—MCP can learn from this rather than repeating the same journey.
Backward Compatibility
The change is wire-format backward compatible, but compatibility is directional:
To stay interoperable with old clients, servers using array or primitive structuredContent MUST also emit a TextContent block with the serialized JSON.
Source-breaking for typed SDKs: Widening structuredContent from { [key: string]: unknown } to unknown breaks property access on typed consumers without narrowing guards. The SEP includes migration guidance for SDK maintainers.
Security Implications
Allowing the full JSON Schema 2020-12 vocabulary surfaces two areas covered explicitly in the SEP:
Reference Implementation
Testing
Reference implementation tested with demo tools demonstrating:
AI disclosure
This PR was written with assistance from Claude. Recent revisions addressing review feedback (asymmetric compat matrix, TypeScript migration guidance, $ref SSRF / composition-DoS security implications, and the reference example fix) were paired with 🦉 Claude Opus 4.7 (1M context).
Related issue: #834
Original proposal: #881