{"version":"2.1.238","anchor":"mcp-discovery-cache-evicts-on-repeated-connection-failures-w","canonical_anchor":"mcp-discovery-cache-evicts-on-repeated-connection-failures-w","heading":"MCP discovery cache evicts on repeated connection failures, with a hard cap on lifetime","tier":"notice","area":"MCP","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.238\/e\/mcp-discovery-cache-evicts-on-repeated-connection-failures-w","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.238","markdown":"### MCP discovery cache evicts on repeated connection failures, with a hard cap on lifetime\n\nCached MCP server discovery is dropped after repeated connection failures instead of only on age.\n\n**What**\n\nCached results of discovering MCP servers (the external tool servers Claude Code connects to over the Model Context Protocol) are now dropped based on how often a server fails to answer, rather than purely on how old the entry is. A separate ceiling still bounds how long any entry can live, so a generous cache lifetime cannot keep a stale entry around indefinitely.\n\n**Details**\n\n- The number of failed connections tolerated before an entry is discarded comes from the environment variable `MCP_DISCOVERY_CACHE_STRIKES`, which defaults to 1 when unset or set to a value that is not positive, so out of the box a single failed dial drops the entry.\n- `MCP_DISCOVERY_CACHE_MAX_STALE_S` no longer ages entries out on its own; it now serves as an upper bound on the cache lifetime configured by `MCP_DISCOVERY_CACHE_TTL_S`, and is itself clamped to a built-in ceiling, so a very large TTL is silently reduced to that bound.\n- A failed-dial signal is emitted alongside the existing cache-adopt signal, so a cached server that cannot be reached is reported rather than quietly expiring.\n\n**Evidence**\n\n`MCP_DISCOVERY_CACHE_STRIKES`, `MCP_DISCOVERY_CACHE_MAX_STALE_S`\n\n- Area: MCP\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 2\/5"}