问题描述
MetaMCP Inspector(MCP 工具测试界面)在 OAuth 授权成功、tools/list 能正常列出工具后,直接点击「调用工具」仍会失败,返回 MCP error -32602: Input validation error。
复现环境:
- MetaMCP 部署:
mcp.zerodotsix.top(do-us-002)
- 测试工具:
notion-search(Notion MCP,经 MetaMCP 聚合)
- 现象:授权与工具列表均正常,但首次调用即报参数校验错误
复现步骤
- 在 MetaMCP Inspector 中连接已授权且包含 Notion MCP 的 endpoint/namespace
- 点击「列出工具」,确认
notion-search 出现在列表中
- 选中
notion-search,不修改任何参数字段
- 点击「调用工具」
实际结果
请求参数为:
{
"query": "",
"query_type": "",
"content_search_mode": "",
"page_size": 0,
"max_highlight_length": 0,
"filters": {}
}
返回错误(节选):
MCP error -32602: Input validation error: Invalid arguments for tool notion-search
- query: too_small (expected >= 1 characters)
- query_type: invalid_value (expected "internal" | "user")
- content_search_mode: invalid_value (expected "workspace_search" | "ai_search")
- page_size: too_small (expected >= 1)
Inspector 界面显示绿色成功图标,但结果区实际为校验错误(成功/失败判定不准确)。
预期结果
- 未填写的可选参数不应出现在
tools/call 请求中
- 必填参数未填写时,应在客户端阻止提交并提示用户
- 若 MCP 返回
isError: true 或 error content,UI 应标记为失败而非成功
根因分析
问题位于 apps/frontend/app/[locale]/(sidebar)/mcp-inspector/components/inspector/inspector-tools.tsx:
1. 为所有 schema 属性生成无效默认值
useEffect 在选中工具时为每个 inputSchema.properties 生成输入框默认值:
string → ""
number/integer → "0"
- 未区分 required / optional
2. 执行时无条件提交全部字段
executeTool() 遍历所有 argumentInputs,将全部键写入 arguments_obj:
- 空字符串仍会发送给 enum 字段(
"" 不是合法 enum 值)
- 空数字字段发送
0(违反 minimum: 1 约束)
- 可选字段本可省略,却被强制包含
3. 成功状态判定不准确
makeRequest 未抛异常即标记 status: "success",但 MCP 工具可在 result 内返回 -32602 等业务错误,导致 UI 误报成功。
建议修复
- 仅提交用户显式填写的字段;可选且为空的字段从
arguments 中 omit
- 客户端校验:提交前检查
required 字段;enum 空值不发送
- 更合理的默认值:required string 用 placeholder 提示而非空提交;number 不默认
0
- 解析 MCP 错误响应:检查
result.isError 或 content 中的 error,正确展示失败状态
验证方式
修复后,对 notion-search 仅填写 query: "test" 调用应成功;不填 query 应在 UI 层拦截,而非发送到服务端。
参考
- 上游文件:
metatool-ai/metamcp → inspector-tools.tsx
- 已在 meta-mcp gateway 侧用相同空参数复现相同
-32602 错误
问题描述
MetaMCP Inspector(MCP 工具测试界面)在 OAuth 授权成功、
tools/list能正常列出工具后,直接点击「调用工具」仍会失败,返回MCP error -32602: Input validation error。复现环境:
mcp.zerodotsix.top(do-us-002)notion-search(Notion MCP,经 MetaMCP 聚合)复现步骤
notion-search出现在列表中notion-search,不修改任何参数字段实际结果
请求参数为:
{ "query": "", "query_type": "", "content_search_mode": "", "page_size": 0, "max_highlight_length": 0, "filters": {} }返回错误(节选):
Inspector 界面显示绿色成功图标,但结果区实际为校验错误(成功/失败判定不准确)。
预期结果
tools/call请求中isError: true或 error content,UI 应标记为失败而非成功根因分析
问题位于
apps/frontend/app/[locale]/(sidebar)/mcp-inspector/components/inspector/inspector-tools.tsx:1. 为所有 schema 属性生成无效默认值
useEffect在选中工具时为每个inputSchema.properties生成输入框默认值:string→""number/integer→"0"2. 执行时无条件提交全部字段
executeTool()遍历所有argumentInputs,将全部键写入arguments_obj:""不是合法 enum 值)0(违反minimum: 1约束)3. 成功状态判定不准确
makeRequest未抛异常即标记status: "success",但 MCP 工具可在 result 内返回-32602等业务错误,导致 UI 误报成功。建议修复
arguments中 omitrequired字段;enum 空值不发送0result.isError或 content 中的 error,正确展示失败状态验证方式
修复后,对
notion-search仅填写query: "test"调用应成功;不填query应在 UI 层拦截,而非发送到服务端。参考
metatool-ai/metamcp→inspector-tools.tsx-32602错误