HTTP MCP server tools not exposed to model despite successful connection

Resolved 💬 3 comments Opened Mar 15, 2026 by jgoad Closed Mar 18, 2026

Description

Claude Code connects to an HTTP MCP server (Streamable HTTP transport) successfully — resources load and work correctly — but tools are not exposed to the model. The /mcp UI shows Capabilities: resources with no mention of tools, even though the server advertises "tools": {"listChanged": true} in its capabilities and returns valid tools from tools/list.

Environment

  • Claude Code: 2.1.72 and 2.1.76 (tested both)
  • macOS Darwin 25.3.0
  • MCP server: Custom Streamable HTTP server (FastAPI-based, Python)

Reproduction

  1. Configure .mcp.json with an HTTP MCP server:
{
  "mcpServers": {
    "myserver": {
      "type": "http",
      "url": "http://myserver.api.localhost/mcp"
    }
  }
}
  1. Server responds correctly to all MCP methods:
  • initialize → returns {"capabilities": {"tools": {"listChanged": true}, "resources": {...}}, ...}
  • tools/list → returns 38 valid tools with proper JSON Schema inputSchema
  • resources/list → returns 10 resources
  1. Launch Claude Code — server connects (confirmed via server logs showing POST /mcp requests)
  1. Expected: Tools appear as mcp__myserver__* in the model's available tools
  2. Actual: No tools are exposed. ToolSearch returns nothing. Direct tool calls fail with "No such tool available". /mcp UI shows Capabilities: resources only.

Key observations

  • Resources always workListMcpResourcesTool and ReadMcpResourceTool successfully read from the server
  • Tools work intermittently — in ~1 out of 10 fresh sessions, tools load correctly and work perfectly (including mutations). The other 9 times, they don't appear at all.
  • MCP Inspector confirms server is correctnpx @modelcontextprotocol/inspector connects via Streamable HTTP and sees all 38 tools, can invoke them successfully
  • Not a tool count issue — tested with 2 tools and 38 tools, same behavior
  • Not a transport issue — also tested with stdio proxy, same behavior
  • Not a version issue — reproduced on both 2.1.72 and 2.1.76
  • Not an auth issue — server has no auth requirements, no OAuth endpoints

Server logs during connection

Successful connection pattern (tools don't load):

POST /mcp HTTP/1.1  200 OK    # initialize
POST /mcp HTTP/1.1  204       # initialized (notification)
POST /mcp HTTP/1.1  200 OK    # tools/list (returns 38 tools!)
POST /mcp HTTP/1.1  200 OK    # resources/list
POST /mcp HTTP/1.1  204       # initialized
POST /mcp HTTP/1.1  200 OK    # (another request)

The server returns valid tools in the tools/list response, but Claude Code doesn't surface them.

Possibly related

  • #4118 — notifications/tools/list_changed support
  • #13646 — MCP tool list not refreshed on list_changed
  • #27142 — Stale session ID caching

View original on GitHub ↗

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