Appearance
Tool Runtime
两层不要混在一起
text
具体 capability implementation
source/host/runner/tools/*
↓ 注册 / 暴露 / 协议投影
Tool runtime / adapter
routed-mcp-bridge.ts + runner/tool ownersRouted MCP Bridge 的 Tool 链
| Symbol / branch | 作用 | 不是它的职责 |
|---|---|---|
Tool type | 保存 internal identity (providerIdentifier, toolName) | 不定义完整 Runtime policy |
tools/list | discovery + validation + registry projection | 不执行工具 |
tools Map | 将 list 时发现的 identity 延续到 call | 不做 durable state |
tools/call | name lookup → internal dispatch | 不判断任务语义成功 |
mcpResult() | internal result → MCP result normalization | 不做 authorization |
isReadOnly() | 生成 risk annotation heuristic | 不能作为 security enforcement |
调用关系
text
deps.listTools()
↓
validate name/providerIdentifier/toolName
↓
Map<publicName, InternalTool>
↓
project description + inputSchema + annotations
MCP tools/call
↓
Map lookup
↓
deps.callTool({ identity, args, toolCallId })
↓
mcpResult()
↓
protocol response本地定位
bash
rg -n "type Tool|isReadOnly|mcpResult|tools/list|tools/call|callTool" source/node-agent-coordinator/routed-mcp-bridge.ts
find source/host/runner/tools -maxdepth 1 -type f | sort固定源码
关联知识文章
- Tool 如何撑爆 Context:Definition Cost 与 Result Management — Tool Definition 本身就是模型 Context;
createRoutedMcpBridge()→tools/list branch→isReadOnly() - Tool 如何撑爆 Context:Definition Cost 与 Result Management — Tool Result 先归一化,再决定如何进入下一轮;
mcpResult()→tools/call branch - 从发现 Tool 到可回灌结果:Search、Execution、Normalization 与 Result Budget — Tool Call 如何从协议层进入内部 Executor;
tools/call branch→deps.callTool()→mcpResult() - 从发现 Tool 到可回灌结果:Search、Execution、Normalization 与 Result Budget — Result Normalization 是单独的 Adapter 边界;
mcpResult() - 什么才是好 Tool:Contract、Granularity 与 Naming — 协议 Tool 只是内部能力的投影;
Tool→tools/list branch - Tool 太多时怎么暴露:Metadata、Dynamic Exposure 与 Discovery — Tool metadata 能提示风险,但不执行权限;
isReadOnly()→tools/list branch - 让模型稳定调用 Tool:Schema、Examples 与 Registry — Discovery 后先形成稳定 Registry,再允许 Call;
tools/list branch→tools Map→tools/call branch