Skip to content

fix(mcp): anonymous prompts/list 401s and hangs Claude Desktop (mcp-remote) — advertised capabilities must be anon-servable #4937

Description

@koala73

Customer report

Claude Desktop via [email protected]https://worldmonitor.app/mcp: initialize + tools/list + resources/list respond ~500ms, but prompts/list (id=2) never gets a response; after the 30s timeout the client sends notifications/cancelled, marks the server unstable, and refuses all subsequent tools/call.

Root cause (reproduced live + E2E via [email protected])

  • initialize is public and succeeds anonymously → mcp-remote never receives a 401 challenge at connect → never runs OAuth → session stays anonymous.
  • initialize advertises prompts + logging capabilities to that anonymous session.
  • prompts/list is NOT in PUBLIC_MCP_METHODS (api/mcp/handler.ts) → HTTP 401 with JSON-RPC id:null. The MCP SDK transport cannot correlate a non-200/id:null response to the pending request → the request hangs until the client's 30s timeout → server marked unstable.
  • Same class: ping, prompts/get, logging/setLevel all 401 anonymously. ping is the worst sibling — SDK keepalive pings hang the same way.

Evidence

  • Live: anon prompts/list → 401 {"id":null,"error":{"code":-32001,...}}; anon ping/prompts/get/logging/setLevel identical.
  • E2E repro with [email protected]: id 0/1/3 responded, id=2 NO RESPONSE (hang) — identical to customer log.
  • Axiom wm_api_usage last 24h: 548 anon 401s on POST /mcp, UAs include node (mcp-remote), claude-code/2.1.197 (claude-desktop), Claude-User.

Fix

Add ping, prompts/list, prompts/get, logging/setLevel to PUBLIC_MCP_METHODS. All four are metadata/no-op class: prompts are static workflow templates (no data, no quota), logging/setLevel is a no-op ack, ping is a spec-mandated liveness check. Anonymous traffic on them stays behind applyAnonDiscoveryLimit (60/min/IP). Update docs/mcp-overview.mdx §Discovery + handler comment; add anon wire-contract tests.

Related: #4719 (resources/list made anon), #4698 (public discovery). Sibling issue: OAuth DCR dead on apex (filed separately).

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High priority, fix soonarea: APIBackend API, sidecar, keysbugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions