错误
MCP 客户端可能遇到三类错误。它们出现的位置各不相同,请在各自出现的地方分别处理。
HTTP 错误
请求没有到达工具。响应体是错误码为 -32000 的 JSON-RPC 错误。
| 状态码 | 触发条件 | 处理方法 |
|---|---|---|
401 | 没有令牌,或令牌无效、已过期 | 按 WWW-Authenticate 质询重新授权,见授权 |
405 | 对端点发送了 GET 或 DELETE | 改用 POST。该端点没有 SSE 流,也没有会话 |
429 | 超出配额上限 | 等待 Retry-After 秒,见配额 |
工具错误
工具运行后失败,或在运行前被拒绝。无论哪种情况,响应都是正常的 200,其中 tools/call 结果带有 isError: true,并以文本给出原因。MCP SDK 在工具自身代码运行前抛出的错误——参数不符合输入 schema,或工具名不存在——也以同样的方式返回,文本以 MCP error -32602: 开头。它们仍然是工具结果,而不是 JSON-RPC error 对象,所以客户端要检查的是 result.isError,而不是 error.code。
工具自身报错的示例,对 check_availability 传入 { "domains": ["!!!"] }:
{
"result": {
"content": [{ "type": "text", "text": "Invalid domain format" }],
"isError": true
},
"jsonrpc": "2.0",
"id": 4
}
输入校验报错的示例,对 compare_prices 传入 { "domain": "kettlory" }:
{
"result": {
"content": [
{
"type": "text",
"text": "MCP error -32602: Input validation error: Invalid arguments for tool compare_prices: A full domain name is required at domain"
}
],
"isError": true
},
"jsonrpc": "2.0",
"id": 1
}
| 消息 | 原因 |
|---|---|
MCP error -32602: Input validation error: Invalid arguments for tool <name>: … | 参数不符合工具的输入 schema——缺少字段、值超出范围、域名中没有点号等。文本末尾会指出具体字段,例如 Too big: expected array to have <=20 items at domains |
Invalid domain format | 去掉域名中不允许出现的字符后输入已为空,或名称的 TLD 不在 NameBeta 的支持范围内。其他多余字符会被静默去掉,而不是报错;见 check_availability |
MCP error -32602: Tool <name> not found | 工具名拼写错误或不存在 |
| 其他任何消息 | 工具背后的查询失败,例如某个 WHOIS 或 DNS 服务器没有响应;稍后重试可能会成功 |
各工具特有的错误列在各自的页面中。失败的调用是否仍计入配额,见调用如何计数。
格式错误的请求
MCP 传输层无法接受的请求,会在任何工具运行之前以 4xx 状态码拒绝——例如 Accept 请求头没有同时列出 application/json 和 text/event-stream 时返回 406,请求体不是合法的 JSON-RPC 时返回 JSON-RPC 解析错误(-32700)。批量(数组形式的)JSON-RPC 请求会被拒绝,返回 400 和 JSON-RPC 错误 -32600,因为 MCP 规范在 2025-06-18 修订版中已移除批量请求;请每个 POST 只发送一个请求。遇到这类错误应修正请求,而不是重试。端点接受的请求格式见端点与传输。