Appearance
MCP Adapter
精确调用链
text
HTTP POST /mcp/<secret>
↓
JSON-RPC method
├─ initialize
├─ tools/list
│ ↓
│ deps.listTools()
│ ↓
│ validate internal identity
│ ↓
│ cache Map<name, Tool>
│ ↓
│ project inputSchema + annotations
│
└─ tools/call
↓
Map lookup
↓
deps.callTool({ identity, args, toolCallId })
↓
mcpResult()
↓
JSON-RPC resultSymbol 边界
| Symbol | 负责什么 | 不负责什么 |
|---|---|---|
createRoutedMcpBridge() | transport/protocol adaptation | Agent Loop |
isReadOnly() | annotation heuristic | authorization |
tools Map | discovery→call identity continuity | durable registry |
tools/list | schema projection | tool execution |
tools/call | lookup + internal dispatch | semantic task success |
mcpResult() | result shape normalization | business reconciliation |
deps.callTool() | internal executor injection point | MCP protocol semantics |
源码还限制 request body 大小、绑定 localhost、用随机 secret path。这些属于 bridge transport hardening,不等于 MCP 的全部安全模型。
本地定位
bash
rg -n "createRoutedMcpBridge|isReadOnly|mcpResult|notifications/initialized|tools/list|tools/call|callTool" source/node-agent-coordinator/routed-mcp-bridge.ts固定源码
关联知识文章
- 不可信输入怎样限制权限:Tool Result、Permission 与 Capability Security — Result Adapter 只转换数据形状,不授予 capability;
mcpResult() - 外部能力适配:MCP 与 Workspace / Sandbox — MCP 只做 Internal Tool ↔ Protocol 的转换;
createRoutedMcpBridge()→tools/list branch→tools/call branch - 模型计划如何变成真实执行:ToolExecutor、Planner 与 GraphCompiler — 内部 Tool Executor 不应依赖 MCP request 类型;
tools/call branch→deps.callTool() - MCP 如何发现能力:Self-describing Request、Discovery 与 Tools — MCP Discovery 如何投影到 Harness Tool Registry;
tools/list branch→tools Map - MCP 如何接入现有 Harness:Gateway、Conformance 与 Adapter — MCP Bridge 不拥有业务执行,只做协议适配;
createRoutedMcpBridge()→tools/list branch→tools/call branch→mcpResult()