{"version":"2.1.300","anchor":"api-refused-mcp-tool-schemas-are-now-replaced-with-an-empty","canonical_anchor":"api-rejected-mcp-tool-schema-is-replaced-instead-of-failing","heading":"An MCP tool schema the API refuses is now replaced, and the request retried","tier":"notice","area":"MCP","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.300\/e\/api-refused-mcp-tool-schemas-are-now-replaced-with-an-empty","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.300","markdown":"### An MCP tool schema the API refuses is now replaced, and the request retried\n\nWhen the API rejects one MCP tool's input schema, Claude Code swaps in an empty schema and retries instead of failing the request\n\n**What**\n\nMCP servers are outside programs that give Claude Code extra tools. Each tool comes with an input schema, a description of the parameters it accepts. Sometimes the API refuses one of these schemas and rejects the request with an error (a 400 error whose message names `tools.N.input_schema`, where N is the tool's position in the list). Claude Code now recovers from this instead of failing:\n\n- It checks that the tool at that position is an MCP tool, then records that tool's schema as refused.\n\n- Later requests send a plain empty schema, `{type:\"object\"}`, for that tool and leave out `eager_input_streaming` for it.\n\n- The request is then retried.\n\n- You see a warning that says: \"the API refused this tool's input schema. Claude can still call the tool in this conversation, but does not see its parameters.\"\n\n- The number of schemas replaced this way in one conversation is capped.\n\n**Why**\n\nOne MCP server with a broken tool schema no longer has to stop the whole conversation. The trade-off is that Claude can still call the affected tool but no longer knows what parameters it takes, so calls to that tool may be less accurate. If you see the warning, the MCP server's tool definition is worth fixing. This behaviour is linked to the gate `tengu_calm_crescent`. A gate is a switch Anthropic can turn on or off remotely. Nothing has been read about whether this gate is on.\n\n- Flag `tengu_calm_crescent`: Not enough to say (read for one account on one subscription tier against v2.1.300; this account: no value returned, anonymous baseline: no value returned, compiled default: on) 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- Area: MCP\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 2\/5\n- Scope: individual\n- Heads-up: no"}