{"version":"2.1.216","anchor":"mcp-tool-schema-validation-upgraded-to-json-schema-draft-202","canonical_anchor":"mcp-tool-schema-validation-upgraded-to-json-schema-draft-202","heading":"MCP Tool Schema Validation Upgraded to JSON Schema Draft 2020-12","tier":null,"area":null,"scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.216\/e\/mcp-tool-schema-validation-upgraded-to-json-schema-draft-202","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.216","markdown":"### MCP Tool Schema Validation Upgraded to JSON Schema Draft 2020-12\n\n**What**\n\nMCP tool input schemas are now validated against JSON Schema draft 2020-12. Tools with schemas that violate Anthropic API requirements are excluded when the server's tools are loaded; a system message lists which tools were dropped.\n\n**Details**\n\n- Added `$dynamicAnchor` and `$dynamicRef` (replacing the deprecated `$recursiveAnchor`\/`$recursiveRef`)\n- Added `dependentRequired` and `dependentSchemas` (splitting the old `dependencies` keyword)\n- Added `maxContains` and `minContains`\n- Added complete draft 2020-12 meta-schemas for core, validation, meta-data, format-annotation, content, applicator, and unevaluated vocabularies\n- `tengu_mcp_normalize_root_combinators` is a per-server-URL feature flag (configured as a list of hostnames, or `\"*\"` for all servers): when enabled for a server, tools whose input schema has a top-level `anyOf`, `oneOf`, or `allOf` keyword are flattened \u2014 properties are merged from all combinator branches into a single flat `properties` object, required fields are collected from every branch, and a plain-text constraint note summarising the original branches is prepended to the tool's description. Without this flag, tools with top-level combinators are skipped entirely and logged as `tool_schema_normalize_gated`.\n- `tengu_mcp_drop_invalid_tool_schemas` is a per-server-URL feature flag: when enabled, tools whose input schema fails draft 2020-12 meta-validation (checked via an Ajv2020 meta-validator) or whose property keys do not match `\/^[a-zA-Z0-9_.-]{1,64}$\/` are excluded from the tool list and added to a `droppedTools` list that feeds the \"Unavailable MCP Tools\" system reminder. Without this flag, such tools are kept but a debug warning is logged that API requests including them may fail.\n- A system-reminder block titled \"Unavailable MCP Tools\" lists each excluded tool and its rejection reason\n\n**Evidence**\n\nNew validator module (search for `\"https:\/\/json-schema.org\/draft\/2020-12\/meta\/core\"` or `\"$dynamicAnchor\"`). Exclusion message (search for `\"# Unavailable MCP Tools\"`).\n\n- Flag `tengu_mcp_normalize_root_combinators`: Not enough to say (read for one account on one subscription tier against v2.1.216; this account: no value returned, anonymous baseline: no value returned, compiled default: not a boolean we can read) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.\n- Flag `tengu_mcp_drop_invalid_tool_schemas`: Not enough to say (read for one account on one subscription tier against v2.1.216; this account: no value returned, anonymous baseline: no value returned, compiled default: not a boolean we can read) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release."}