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
- Add a custom MCP connector on claude.ai (web) — tools appear correctly with all parameters
- Open the same account on Claude mobile/desktop app — tools appear correctly (same as web)
- Update the MCP server: add a new required parameter to a tool, remove an old tool, or change descriptions
- On web: start a new conversation → sees updated tools ✅
- 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
- Handle
notifications/tools/list_changed: When received in a POST response SSE stream, re-fetch tools/list
- Cache TTL: Refresh tools periodically (e.g., every 1 hour or at conversation start)
- Manual refresh: Add a "Refresh tools" button in connector settings
Related Issues
Description
Claude.ai mobile app (iOS/Android) and desktop app cache the MCP
tools/listresponse 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/liston each new conversation or session.Steps to Reproduce
Expected Behavior
Apps should fetch fresh
tools/listat minimum when:notifications/tools/list_changednotification from the serverActual Behavior
Apps use the cached
tools/listfrom when the connector was first added. Specific symptoms observed:intent(required) tooctodock_doanddifficulty(required) tooctodock_help. Web version shows them correctly. App versions don't show these parameters at all → AI doesn't fill them → degraded functionalityoctodock_soptool months ago (consolidated into 2 tools). App still shows 3 tools including the removed one → AI tries to call non-existent tool → errorsServer-Side Verification
The MCP server correctly returns updated
tools/list(verified via curl):Returns 2 tools with correct required fields. ✅
Server also:
"tools": { "listChanged": true }in capabilities ✅notifications/tools/list_changedin POST response SSE streams ✅Workaround
Delete the connector in app settings and re-add it. This forces a fresh
tools/listfetch. However, users shouldn't need to do this after every server update.Environment
sessionIdGenerator: undefined)Suggestion
notifications/tools/list_changed: When received in a POST response SSE stream, re-fetchtools/listRelated Issues