Skip to content

Inspector sends invalid default values for optional tool arguments causing -32602 validation errors #333

Description

@cursor

问题描述

MetaMCP Inspector(MCP 工具测试界面)在 OAuth 授权成功、tools/list 能正常列出工具后,直接点击「调用工具」仍会失败,返回 MCP error -32602: Input validation error

复现环境:

  • MetaMCP 部署:mcp.zerodotsix.top(do-us-002)
  • 测试工具:notion-search(Notion MCP,经 MetaMCP 聚合)
  • 现象:授权与工具列表均正常,但首次调用即报参数校验错误

复现步骤

  1. 在 MetaMCP Inspector 中连接已授权且包含 Notion MCP 的 endpoint/namespace
  2. 点击「列出工具」,确认 notion-search 出现在列表中
  3. 选中 notion-search,不修改任何参数字段
  4. 点击「调用工具」

实际结果

请求参数为:

{
  "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 误报成功。

建议修复

  1. 仅提交用户显式填写的字段;可选且为空的字段从 arguments 中 omit
  2. 客户端校验:提交前检查 required 字段;enum 空值不发送
  3. 更合理的默认值:required string 用 placeholder 提示而非空提交;number 不默认 0
  4. 解析 MCP 错误响应:检查 result.isError 或 content 中的 error,正确展示失败状态

验证方式

修复后,对 notion-search 仅填写 query: "test" 调用应成功;不填 query 应在 UI 层拦截,而非发送到服务端。

参考

  • 上游文件:metatool-ai/metamcpinspector-tools.tsx
  • 已在 meta-mcp gateway 侧用相同空参数复现相同 -32602 错误

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions