{"version":"2.1.238","anchor":"the-mcp-discovery-cache-is-now-off-unless-explicitly-turned-","canonical_anchor":"the-mcp-discovery-cache-is-now-off-unless-explicitly-turned-","heading":"The MCP discovery cache is now off unless explicitly turned on","tier":"notice","area":"MCP","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.238\/e\/the-mcp-discovery-cache-is-now-off-unless-explicitly-turned-","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.238","markdown":"### The MCP discovery cache is now off unless explicitly turned on\n\nThe MCP discovery cache flipped from on-by-default to off unless the server or you enable it.\n\n**What**\n\nThe cache that remembers MCP server discovery between runs was previously armed with a kill switch defaulting to on. It is now controlled by `tengu_mcp_discovery_cache_enable`, whose built-in fallback is null, so it reports \"not-enabled\" unless the server returns true or `MCP_DISCOVERY_CACHE` is set to exactly true. Everything else in this release's MCP account-switch rework hangs off the same check and is therefore dark on a default build.\n\n**Details**\n\n- With the cache off, the process-wide account epoch never advances, so every abort path that compares it is inert, along with cached-connection reuse, the background refresh tracking, the disabled-server check and the identity-purge helper.\n- When enabled, the cache now records settled cached-dial failures and refused rows, emits a \"strike\" on revalidation failure, and tracks in-flight refresh dials so a server is not reported connected while its refresh is pending.\n- An entry is dropped when the server negotiates a different protocol era on revalidation.\n- Two new ineligibility reasons: \"identity-changed\" for an account switch during the process, and \"ambient-credential\" for servers whose URL implies an ambient credential.\n- Corrupt or oversize entries now report telemetry under `mcp_discovery_cache` \/ `corrupt_entry`, and the log line names the entry's own reason instead of always saying \"oversize\".\n\n**Evidence**\n\n`tengu_mcp_discovery_cache_enable`, `if (V.MCP_DISCOVERY_CACHE !== !0 && e !== !0) return \"not-enabled\";`, `Discovery cache entry dropped: server negotiated a different protocol era on revalidation`\n\n- Flag `tengu_mcp_discovery_cache_enable`: Not enough to say (read for one account on one subscription tier against v2.1.238; this account: no value returned, anonymous baseline: no value returned, compiled default: not a boolean we can read)\n- Area: MCP\n- Names: `MCP_DISCOVERY_CACHE`\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 4\/5\n- Present in the build but not switched on"}