HTTP MCP servers returning 405 on GET health check fail to load tools at session startup

Resolved 💬 3 comments Opened Apr 21, 2026 by creag0 Closed Apr 25, 2026

Summary

HTTP MCP servers that return 405 Method Not Allowed on GET requests have their tools silently skipped during session initialization. The health check failure (cosmetic per docs) is actually blocking tool loading entirely.

Environment

  • Claude Code version: 2.1.104
  • Transport: HTTP (type: http)
  • MCP server: Datadog (https://mcp.datadoghq.com/api/unstable/mcp-server/mcp)

Steps to Reproduce

  1. Add an HTTP MCP server that only accepts POST (not GET) — e.g. the official Datadog MCP server:

``
claude mcp add --transport http datadog-mcp "https://mcp.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=all" \
-H "DD-API-KEY: <key>" -H "DD-APPLICATION-KEY: <app-key>"
``

  1. Run claude mcp list — shows ✗ Failed to connect
  2. Start a fresh claude session
  3. The Datadog MCP tools are not available in the session

Expected Behavior

The health check result should be cosmetic only. Session startup should independently attempt MCP initialization via POST, and if that succeeds (200 OK + mcp-session-id), tools should be loaded.

Actual Behavior

Tools from the server are not loaded into the session. The health check failure (GET → 405) appears to gate tool initialization entirely.

Evidence the Server Works

A manual POST initialize request to the Datadog MCP server returns 200 OK with a valid MCP response and session ID:

HTTP/1.1 200 OK
mcp-session-id: mcp-session-1cb3828c-2381-448b-b175-7859318d3323
content-type: application/json

{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{"listChanged":true}},...}}

The server is fully compliant with the MCP Streamable HTTP transport spec — it just doesn't respond to GET (which is not required by the spec).

Root Cause Hypothesis

Claude Code's session startup either:

  1. Uses the health check result to decide whether to attempt initialization, OR
  2. Uses GET for the initialization request itself (same as the health check)

Either way, a server that is spec-compliant but GET-unfriendly never gets its tools loaded.

Workaround

None currently. claude mcp add has no --skip-health-check flag.

View original on GitHub ↗

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