{"version":"2.1.195","anchor":"mcp-tool-schema-normalization","canonical_anchor":"mcp-tool-schema-normalization","heading":"MCP Tool Schema Normalization","tier":null,"area":null,"scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.195\/e\/mcp-tool-schema-normalization","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.195","markdown":"### MCP Tool Schema Normalization\n\n**What**\n\nMCP tools whose input schemas use top-level `anyOf`, `oneOf`, or `allOf` can now be normalized into a flat object schema, making them usable in Claude Code without being dropped.\n\n**Details**\n\n- Controlled by the `tengu_mcp_normalize_root_combinators` feature flag. Set to `[\"*\"]` for all MCP servers, or a list of hostnames to target specific ones. Hostname entries support subdomain matching: `\"example.com\"` also matches `api.example.com`.\n- Only URL-based MCP servers (those with a `url` property) are eligible. stdio and sdk-type servers have no `url` and are never normalized regardless of flag value.\n- The injected note in the tool description differs by combinator type:\n- `allOf` only: `\"Input constraint: all listed parameters apply together (flattened from a JSON Schema allOf).\"`\n- `oneOf`: `\"Input constraint: Provide parameters for exactly one of: (param_a, param_b) or (param_c).\"`\n- `anyOf`: `\"Input constraint: Provide parameters for at least one of: (param_a, param_b) or (param_c).\"`\n- If parameter groups cannot be extracted from the schema branches, the note falls back to: `\"Input constraint: Provide parameters for exactly one of the documented parameter groups (flattened from a JSON Schema oneOf).\"`\n- Only property names matching `\/^[a-zA-Z0-9_.-]{1,64}$\/` are included in the flattened schema; others are silently excluded.\n- Top-level schema fields preserved through normalization: `$defs`, `definitions`, `$schema`, `additionalProperties`, `description`, `title`.\n- If normalization fails for any reason, the tool is dropped with a logged reason (e.g., `\"input schema has top-level anyOf that is not an array\"`) rather than silently accepted with a broken schema.\n\n**Evidence**\n\nSchema normalization (search for `\"Input constraint: all listed parameters apply together\"`, `\"Provide parameters for exactly one of\"`, `\"Provide parameters for at least one of\"`, `Mxp`, `tengu_mcp_normalize_root_combinators`)\n\n- Flag `tengu_mcp_normalize_root_combinators`: Not enough to say (read for one account on one subscription tier against v2.1.195; 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."}