MCP Server Trigger: tool outputSchema declares JSON Schema draft-07 – all tools silently rejected by Claude Desktop/Claude Code (2020-12-onl

这个报错通常发生在把 n8n 自托管的 MCP Server 端点( /mcp-server/http )接入 2026 年 8 月中旬更新后的 Claude Desktop / Claude Code 时。由于 n8n 在 2.34.x 中给每个工具的 outputSchema (以及 input

快速结论:这个报错通常发生在把 n8n 自托管的 MCP Server 端点(/mcp-server/http)接入 2026 年 8 月中旬更新后的 Claude Desktop / Claude Code 时。由于 n8n 在 2.34.x 中给每个工具的 outputSchema(以及 inputSchema)打上了 draft-07 的 $schema 标记,而受影响的客户端只支持 JSON Schema 2020-12,导致所有工具被静默拒绝、聊天里看不到任何工具。优先排查 n8n 版本与客户端内置校验器版本。

适用环境:n8n 2.34.x(含 2.34.0、2.34.1、2.34.3、2.34.5、2.34.6),自托管于 Windows,通过 Node.js 运行;客户端为 Claude Desktop 1.30096.1(Windows);连接方式为 npx mcp-remote http://localhost:5678/mcp-server/http。Issue 中提到的客户端校验器来自 @modelcontextprotocol/server 的 2.0.0-alpha.4 至 2.0.0-beta.5 构建。

最快修复方案:Issue 中暂无确认的一步修复方案。已确认的两条路线是:一是把 n8n 升级到 2.35.0 及以上(该版本在 tool-schema.util.ts 中执行了 delete jsonSchema.$schema,但 Issue 关闭时 2.35.x 尚未进入 stable,仅在 beta 通道);二是客户端侧升级到 @modelcontextprotocol/server 稳定版 2.0.0,该版本已能识别 draft-07 方言。若两者都暂时无法落地,可使用 Issue 中已验证的本地 stdio 代理,删除 $schema 字段。

注意事项:删除 $schema 会把文档重新解释为 2020-12,而 draft-07 与 2020-12 在少数关键字上语义不同(例如 draft-07 的 items: [A, B] 是位置元组校验,2020-12 需要 prefixItems;draft-07 忽略 $ref 的兄弟关键字,2020-12 会应用)。Issue 中对全部 34 个工具扫描后未发现这类结构,但该结论仅在 2.34.6 实例上验证过。代理只应删除 $schema,不要删除 outputSchema,否则会丢掉输出校验。2.35.x 上的行为尚未被实际运行验证。

问题场景

用户在 n8n 2.34.x 自托管实例上启用实例级 MCP Server 端点,并通过 npx mcp-remote 将其连接到更新后的 Claude Desktop 或 Claude Code 后,调用工具列表(tools/list)时所有工具被拒绝。MCP 连接器在 Claude 的本地 MCP 设置里显示为“running”,但聊天中一个工具都看不到,也没有可见错误提示,用户感知上属于静默失效。

报错原文

Tool 'X' has an invalid outputSchema: JSON Schema declares an unsupported dialect ("$schema": "http://json-schema.org/draft-07/schema#")
The default validator supports JSON Schema 2020-12 only

原因分析

n8n 实例级 MCP 端点 /mcp-server/http 在返回工具定义时,为每个工具的 outputSchema 声明了 "$schema": "http://json-schema.org/draft-07/schema#"。受影响客户端的校验器只接受 JSON Schema 2020-12,因此拒绝该方言声明,进而拒绝整个工具。

Issue 中已定位到校验器所在位置为 @modelcontextprotocol/server。其 2.0.0-alpha.4 至 2.0.0-beta.5 的报错文案为“只支持 2020-12”;而稳定版 2.0.0 的文案已扩展为支持 2020-12、2019-09、draft-07 和 draft-06,并在解析时去掉尾部 # 后判断 URI 是否属于 draft-07 集合。n8n 发出的正是 http://json-schema.org/draft-07/schema#,去掉 # 后正好命中该集合,因此稳定版客户端可以原样编译 n8n 的 schema。据此推断,受影响客户端运行的是 2.0.0-beta.x 构建。

此外,Issue 中还修正了原报告的一点:inputSchema 同样带有该 $schema 标记。在线上 2.34.6 实例中,34 个工具的 34 个 inputSchema 和 34 个 outputSchema 全都带标记;当前客户端在输入路径接受它、在输出路径失败,所以只有输出路径表现出症状。

环境排查

  • 确认 n8n 版本:2.34.0、2.34.1、2.34.3、2.34.5、2.34.6 均不含修复;2.35.0、2.35.3 含修复。Issue 关闭时(2026-08-16 前后)dist-tag 为 stable = 2.34.6、beta = 2.35.3。
  • 确认客户端校验器版本:查你的 MCP 客户端所依赖的 @modelcontextprotocol/server 是否为 2.0.0-beta.x;稳定版 2.0.0 已能接受 draft-07。
  • 确认 Claude Desktop 版本:Issue 中为 1.30096.1(Windows)。
  • 确认连接方式与鉴权头是否正确(Authorization: Bearer),以确保请求确实到达 n8n MCP 端点。
  • 用下方复现命令数一下端点返回中 draft-07 出现的次数,判断服务端是否仍在打标。

解决步骤

  1. 先用 Issue 提供的命令确认服务端确实在输出 draft-07 标记:
    curl -s -X POST "$N8N_URL/mcp-server/http" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json, text/event-stream" \
      -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
      | sed -n 's/^data: //p' | grep -o 'json-schema.org/draft-07' | wc -l

    在 2.34.6 上输出为 68(34 个 inputSchema + 34 个 outputSchema);如果按源码推断正确,在 2.35.x 上应为 0。Issue 作者未实际在 2.35.x 上运行验证。

  2. 如果服务端仍在打标,选择下列任一方向(Issue 将其描述为用户在“升级”和“本地绕过”之间的取舍):
    • 服务端路线:升级到 n8n 2.35.x。修复来自 packages/cli/src/modules/mcp/tool-schema.util.ts,由 #35467 引入,核心改动为 delete jsonSchema.$schema;;在 tag 2.35.0 中 mcp.service.ts:347-348 会让 inputSchema 与 outputSchema 都经过该函数。2.35.0 还包含 #35610。
    • 客户端路线:让客户端厂商把 @modelcontextprotocol/server 升级到稳定版 2.0.0,该版本已支持 draft-07 方言解析。
  3. 如果两条路线都无法立即落地,Issue 中已验证的临时方案是部署一个本地 stdio 代理,在转发 MCP 消息时删除 $schema 字段。Issue 明确给出可用提示词,可直接粘贴到 Claude Code、Cursor 等编码代理中生成一个无依赖的单文件 .mjs 代理。其要点:
    • 只删除 $schema,保留 outputSchema 本体,这样输出校验仍然生效,行为与 2.35.0 保持一致。
    • 代理需要处理 MCP stdio 的按行分隔 JSON-RPC 帧,并从 tools/list 响应中剥离标记。
    • 该代理在线上 2.34.6 实例上验证过:34 个被剥离 schema 的输出在 Ajv 2020-12 下全部可编译,8 个只读工具返回的真实 structuredContent 也能通过剥离后的 schema 校验。
  4. 升级或代理落地后,建议对全部工具做一次扫描,确认没有依赖 draft-07 专有语义的结构(如 items 数组形式的元组校验、$ref 旁挂兄弟关键字)。Issue 指出其扫描的 34 个工具中未出现这类构造,但若你的工具集包含它们,删除 $schema 会改变校验语义。

验证方法

重跑上面的 tools/list 命令,确认输出中 json-schema.org/draft-07 的计数为 0。然后在 Claude Desktop / Claude Code 中重新连接该 MCP 连接器,确认聊天中可以列出并使用工具,而非连接器仍显示 running 却无任何工具;对只读工具执行一次调用,确认返回内容与 structuredContent 正常,并且没有再出现 has an invalid outputSchema 报错。

参考来源

n8n-io/n8n #36361

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25796

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注