Skip to content

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

Description

@chaosmibu-blip

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    invalidIssue doesn't seem to be related to Claude Code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions