You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Summary
dsh-mcp-client对上游 MCP 工具的outputSchema做了优雅降级,但inputSchema原样透传;同时ToolRuntime.register()只断言output.schema,parameters在整个 harness 中从不做子集校验,直接进入模型请求。两者处理方式不对称,属于潜在缺陷。需要说明的是:这不是任何一次会话创建/恢复失败的根因(见下方「实际影响」中的实测结论),而是一处尚未被触发的边界不一致。
证据
1. 消费侧不对称 ——
packages/mcp/mcp-client/src/tools.ts:185的注释写明该分支的意图:/** Keep a supported advertised schema; unsupported MCP vocabulary falls back to JsonValue. */2. 校验侧不对称 ——
packages/core/tools/src/index.ts:1051register()只做assertSupportedJsonSchema(output.schema);parameters不校验。:1262–:1272schemaOf()对parameters只做 lossless JSON 检查(snapshotJsonValue),不检查 schema 子集。:1804执行期只对tool.output.schema调validateJsonSchemaValue。3. 越界词汇确实会到达模型 provider
packages/llm/llm-deepseek/src/protocols/chat-completions/serialize.ts:346→parameters: tool.parameterspackages/llm/llm-deepseek/src/protocols/messages/serialize.ts:134→input_schema: tool.parameters4. 真实越界样本(
@playwright/mcp@0.0.80,browser-use-playwright-mcp/package.json:31精确 pin)实际拉起该 stdio server 并读取
tools/list,24 个工具的inputSchema24/24 落在assertSupportedJsonSchema(packages/core/tools/src/json-schema.ts:385)子集之外:$schemabrowser_drop:额外propertyNames,以及非布尔的additionalProperties: { "type": "string" }browser_network_request:额外minimum/maximum实际影响
实测(未打任何临时补丁的 master 源码):
failOnStartupError: true+ 生产参数--browser chromium --isolated --headless挂载:24 个工具全部注册成功。packages/experimental/browser-use-playwright-mcp/tests/upstream.e2e.ts全链路(Loader → Sessions → Agents → AgentLoop → provider → mcp-client,真实 agent 创建 + 真实浏览器导航):2/2 通过。因此当前影响仅限于:
Deliverables(建议方向)
packages/core/tools/src/json-schema.ts导出一个规范化工具(例如sanitizeJsonSchema),由 mcp-client 等消费方共用,而不是在 mcp-client 内硬编码。$schema、$id、$defs、$ref、propertyNames);additionalProperties非布尔时归为true;properties/items/oneOf递归处理;数值约束(minimum/maximum等)是否折进description待维护者裁定。tools.ts:234接入该规范化,使 input 与:235的 output 处理对称。$schema的inputSchema,断言failOnStartupError: true时工具仍能注册。All reactions