The -32601 method not found error means your MCP client successfully reached a server, but sent a JSON-RPC method name the server does not recognize. The connection is healthy — the problem is a mismatch between what the client asked for and what the server implements.
The short answer: This is almost always a protocol version mismatch or a transport type mismatch. The client sends tools/list but the server only knows an older method set, or the client sends HTTP requests to an SSE-only endpoint.
The fastest way to isolate this error is to bypass the IDE entirely and send a direct JSON-RPC request:
bash# Send a minimal MCP initialize handshake curl -s -X POST https://your-server-url/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": { "name": "test-client", "version": "1.0" } } }'
If the response contains -32601: The server doesn't implement the initialize method, meaning it's either not an MCP server at all, or it implements a different protocol version.
If initialize succeeds but tools/list returns -32601: The server is an MCP server but doesn't implement tool discovery. Check the capabilities object in the initialize response — if tools is missing, the server intentionally doesn't expose tools.
The MCP specification has evolved through several versions. If your client sends "protocolVersion": "2024-11-05" but the server only implements an older version, specific methods may not exist.
How to verify:
Check the protocolVersion field in the server's initialize response. If it returns a different version than what your client sent, that's the mismatch.
How to fix:
If your IDE is configured for HTTP but the server implements SSE (or vice versa), the connection establishes but method routing fails.
Common scenarios:
json// Client config expects HTTP — but server only handles SSE { "servers": { "my-server": { "type": "http", "url": "https://example.com/sse" } } }
The server receives what looks like a malformed SSE subscription and returns -32601 because the HTTP POST body isn't routed to a JSON-RPC handler.
How to fix:
Check the server's documentation for the correct transport type and endpoint path. Many servers expose both /mcp (HTTP) and /sse (SSE) on different routes.
For VS Code, the type field must match: "http" for HTTP JSON-RPC servers, omit it for stdio servers. Using the wrong type causes VS Code to attempt the wrong transport.
JSON-RPC method names in MCP are case-sensitive and use a specific namespace format:
json{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }
If the server expects tools/list but receives toolsList or list_tools, it returns -32601. This happens when:
How to verify:
Use the MCP Playground to probe the server. It sends the standard method names and shows exactly what the server responds to.
Reverse proxies (nginx, Cloudflare, AWS ALB) can strip, truncate, or rewrite JSON-RPC request bodies. If the method field is removed or altered, the server can't route the request.
How to check:
bash# Compare what you send vs what the server receives # Add verbose output to see the full request/response curl -v -X POST https://your-server-url/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
Look at the response headers for proxy indicators (via, x-cache, server). If the response Content-Type isn't application/json, something is intercepting.
Common proxy fixes:
Content-Type: application/json is preserved through the proxyproxy_pass_request_body on in nginxproxy_buffer_size if the request body is being truncatedSome IDE extensions cache the server's method catalog from a previous connection. If the server was updated and methods changed, the client may still send old method names.
How to fix:
| Symptom | Most likely cause | Fix |
|---|---|---|
-32601 on initialize | Not an MCP server, or wrong endpoint URL | Verify the URL points to the MCP endpoint, not the web UI |
-32601 on tools/list | Server doesn't expose tools, or old protocol version | Check capabilities in initialize response |
-32601 intermittently | Proxy rewriting bodies, or load balancer routing to different backends | Check proxy config; ensure sticky sessions |
-32601 after server update | Method names changed between versions | Restart IDE; remove and re-add server config |
-32601 in one IDE but not another | IDEs use different transports or protocol versions | Match transport type to what works |
is_mcp: true and tool_count > 0npx @modelcontextprotocol/inspector node your-server.jsFor a complete testing workflow, see How to Test MCP Servers.
IDE setup guides: VS Code · Cursor · Claude Desktop · Windsurf