{"version":"2.1.221","anchor":"mcp-retroactive-approval-retry-check-consolidated","canonical_anchor":"mcp-retroactive-approval-retry-check-consolidated","heading":"MCP retroactive-approval retry check consolidated","tier":"internal","area":"MCP","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.221\/e\/mcp-retroactive-approval-retry-check-consolidated","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.221","markdown":"### MCP retroactive-approval retry check consolidated\n\nRetrying MCP calls that need approval now uses one shared rule, so behaviour is consistent.\n\n**What**\n\nThe condition that decides whether a -32003 needs_approval response should be retried is now one predicate shared by both places that used it.\n\n**Details**\n\n- The predicate covers the error code, presence of args_sha256 in data, the retry not yet being used, and the gate check.\n- It is reused by the isExpectedError classifier and by the retry branch.\n- The tool name interpolated into the log line is type-checked before use instead of being read off an untyped object.\n- Gated on `tengu_mcp_proxy_needs_approval_retry` with fallback true.\n\n**Evidence**\n\n`tengu_mcp_proxy_needs_approval_retry`\n\n- Flag `tengu_mcp_proxy_needs_approval_retry`: Not enough to say (read for one account on one subscription tier against v2.1.221; 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: Under the hood\n- Useful: 2\/5\n- Signal: 0\/5"}