[BUG] Claude.ai mobile/desktop app caches MCP tools/list indefinitely — server-side tool schema updates never reflected without manual reconnect

Resolved 💬 2 comments Opened Mar 24, 2026 by chaosmibu-blip Closed Mar 27, 2026

Description

Claude.ai mobile app (iOS/Android) and desktop app cache the MCP tools/list response from when the connector was first added. After the MCP server updates tool definitions (adding/removing required parameters, changing descriptions, or removing tools entirely), these apps continue to show the stale cached schema indefinitely.

Claude.ai web version and Claude Code do NOT have this issue — they fetch fresh tools/list on each new conversation or session.

Steps to Reproduce

  1. Add a custom MCP connector on claude.ai (web) — tools appear correctly with all parameters
  2. Open the same account on Claude mobile/desktop app — tools appear correctly (same as web)
  3. Update the MCP server: add a new required parameter to a tool, remove an old tool, or change descriptions
  4. On web: start a new conversation → sees updated tools ✅
  5. On mobile/desktop app: start a new conversation → still shows old tools/schema ❌

Expected Behavior

Apps should fetch fresh tools/list at minimum when:

  • Starting a new conversation
  • Receiving a notifications/tools/list_changed notification from the server
  • After a reasonable cache TTL (e.g., 1 hour)

Actual Behavior

Apps use the cached tools/list from when the connector was first added. Specific symptoms observed:

  • New required parameters not visible: Server added intent (required) to octodock_do and difficulty (required) to octodock_help. Web version shows them correctly. App versions don't show these parameters at all → AI doesn't fill them → degraded functionality
  • Removed tools still visible: Server removed octodock_sop tool months ago (consolidated into 2 tools). App still shows 3 tools including the removed one → AI tries to call non-existent tool → errors
  • Updated descriptions not reflected: Tool descriptions were updated with version tags and improved guidance. App still shows old descriptions

Server-Side Verification

The MCP server correctly returns updated tools/list (verified via curl):

curl -X POST "https://example.com/mcp/{key}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Returns 2 tools with correct required fields. ✅

Server also:

  • Declares "tools": { "listChanged": true } in capabilities ✅
  • Sends notifications/tools/list_changed in POST response SSE streams ✅

Workaround

Delete the connector in app settings and re-add it. This forces a fresh tools/list fetch. However, users shouldn't need to do this after every server update.

Environment

  • Claude.ai iOS app (latest version as of 2026-03-24)
  • Claude.ai desktop app (also affected)
  • Claude.ai web version (NOT affected — works correctly)
  • Claude Code CLI (NOT affected — works correctly)
  • MCP server: Streamable HTTP, stateless (sessionIdGenerator: undefined)
  • Server framework: @modelcontextprotocol/sdk + Next.js

Suggestion

  1. Handle notifications/tools/list_changed: When received in a POST response SSE stream, re-fetch tools/list
  2. Cache TTL: Refresh tools periodically (e.g., every 1 hour or at conversation start)
  3. Manual refresh: Add a "Refresh tools" button in connector settings

Related Issues

  • #7519 — Claude Desktop MCP client caches manifest/tools
  • #17975 — Feature Request: MCP Tool Caching and Hot-Reload Support
  • #13646 — MCP tool list not refreshed on notifications/tools/list_changed event

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗