
This fix is part of MCP troubleshooting, within The MCP Guide. Still stuck? Request a free MCP readiness review.
MCP error -32602 means "Invalid params": the server understood the method but rejected what was sent with it. In MCP it covers several cases: an unknown tool name, a request that fails the schema, a 2026-07-28 request missing its required _meta fields, and a resource that does not exist. The fastest fix is to read the error message, list the server's tools again, and resend with the exact tool name and arguments that match its input schema.
Checked against: the JSON-RPC 2.0 specification, the Tools and base protocol pages of the 2026-07-28 MCP spec, and the Inspector protocol eras page on 2 November 2026 (Python mcp 2.3.0, TypeScript @modelcontextprotocol/server 2.4.0). eSEOspace did not run these steps.
Key Takeaways
- JSON-RPC 2.0 defines
-32602as "Invalid params: Invalid method parameter(s)." - The MCP Tools spec returns
-32602for an unknown tool, with a message such asUnknown tool: invalid_tool_name. - A 2026-07-28 request missing a required
_metafield is malformed and gets-32602(HTTP 400 on Streamable HTTP). - Since 2026-07-28, "resource not found" is also
-32602(it was-32002). - Bad argument values that a model could correct should come back as a tool result with
isError: true, not as-32602.
What this error means
The JSON-RPC 2.0 spec reserves -32602 for invalid method parameters. MCP reuses it in four places:
| Situation | Where the spec says so | Typical message |
|---|---|---|
Unknown tool name in tools/call | Tools page | Unknown tool: <name> |
Request fails the CallToolRequest schema | Tools page ("Malformed requests") | Varies by SDK |
Missing io.modelcontextprotocol/protocolVersion or clientCapabilities in _meta | Base protocol page | Varies; HTTP 400 |
| Resource URI does not exist | Resources page | Resource not found |
The Tools page separates two kinds of failure. Protocol errors, like an unknown tool, are JSON-RPC errors that "models are less likely to be able to fix." Tool execution errors, including "Input validation errors (e.g., date in wrong format, value out of range)," go back as a normal result with isError: true so the model can retry. Our tool errors guide explains the split.
SDKs differ on where schema failures land. The Python SDK troubleshooting page says an unknown tool and a bad argument both come back to its client as a result with is_error set, not as an exception. The Inspector reads the message to label a -32602 as Unknown Tool or Invalid Parameters, since both share one code.
Quick fix
- Read the message. "Unknown tool" and "Resource not found" each have their own fix below.
- For unknown tool: call
tools/listand compare the name exactly. Names are case-sensitive, and clients may prefix them (Claude Code showsmcp__<server>__<tool>; the server only knows<tool>). - For bad arguments: compare your arguments with the tool's
inputSchema: required fields, types, enums, formats. - For missing
_meta: update the client or SDK. Hand-written HTTP clients must add the per-request fields on 2026-07-28. - For resources: see resource not found.
- Reconnect if the server renamed or removed a tool since your client cached the list.
Fix by client / OS
Claude Code
Reconnect the server from /mcp to refresh its tool list. Claude Code's MCP docs note that if the API rejects a tool's input schema, the debug log says the API refused this tool's input schema and Claude Code resends the tool declared without parameters. That makes calls with arguments fail, so fix the schema on the server side.
Cursor and VS Code
Restart the server so the client fetches a fresh tool list. In VS Code, MCP: List Servers > Show Output shows the raw error, per the manage and troubleshoot page. If the tool was renamed, start a new chat so the model stops using the old name.
MCP Inspector
Call the tool directly and look at the error panel:
npx @modelcontextprotocol/inspector --cli node path/to/server.js --method tools/call --tool-name get_weather --tool-arg city=Boston
If this succeeds, the server is fine and the client or model is sending different arguments.
Your own server
- Return
isError: trueresults for argument problems a model can fix, with a clear message ("date must be in the future"). - Keep
-32602for unknown tools and malformed requests. - Write strict, clear schemas. The 2026-07-28 spec allows any JSON Schema 2020-12 keywords, but a client or API may reject unusual ones. See our input schema guide.
Where to find the logs
- Claude Code:
claude --debug-file /tmp/claude-debug.log, then search for the tool name. - VS Code: MCP: List Servers > Show Output.
- Claude Desktop:
~/Library/Logs/Claude/mcp*.log(macOS) or%APPDATA%\Claude\logs(Windows), per the MCP debugging guide. - Your server: log incoming
paramson errors, minus secrets.
If it still fails
- Same call works in the Inspector. Compare the raw JSON your client sends. See server works in Inspector but not Claude.
- HTTP 400 with
-32020. That is a header mismatch, not invalid params: theMcp-Nameheader does not match the tool name in the body. - HTTP 400 with
-32022. Wrong protocol version; see protocol version mismatch. - Look up any code in our MCP error code lookup.
Next step
If your server's tools keep confusing models, eSEOspace's MCP development team can review naming, schemas and error messages.
More in the MCP Guide
Free tools: MCP Error Code Lookup · MCP Config Generator
Latest research: State of MCP: October 2026
Frequently asked questions
What does -32602 mean in MCP?
It is the standard JSON-RPC "Invalid params" code. MCP uses it for unknown tools, malformed requests, missing per-request _meta fields in 2026-07-28, and missing resources.
Why does the model keep calling a tool that does not exist?
It may be using a name from an older tool list or a different server. Reconnect the server, start a fresh conversation, and check that tool names are distinct across your connected servers.
Should my server return -32602 for a bad date format?
The Tools spec lists input validation errors such as "date in wrong format" under tool execution errors, returned with isError: true. That lets the model read the message and retry.
Is -32602 the same as a tool call failure?
Not quite. A tool call can fail with -32602 before the tool runs, or run and return isError: true. See MCP tool call failed for the second case.











