Grok Build · 工具执行架构
实现族、注册表与动态 MCP
xai-grok-tools 同时容纳多套内置工具实现与运行时 MCP 工具。ToolBridge 把 registry 接入会话层,SearchTool 与 UseTool 提供发现和调用入口。
课程目标能从 namespace 找到对应实现族,说明工具定义如何进入 registry 并由
ToolBridge 执行,同时准确写出两个 MCP 元工具的真实输入字段。
核心视觉 · 从定义到执行的数据流
教学化结构图:类型与方法来自源码,布局用于课堂解释。
源码中的实现族
grok_build主要产品工具族,包含 ReadFile、SearchReplace、Bash、Task 等实现。
grok_build_concise精简工具族,目录中包含 read_file、search_replace 与 bash。
grok_build_hashline带 hashline 语义的 read_file、edit 与 grep 实现。
codex包含 apply_patch、read_file、list_dir、grep_files 等兼容实现。
opencode包含 read、write、edit、bash、glob、grep、skill 与 todowrite。
memory / lsp / skills按能力拆出的实现模块。namespace 枚举还包含 MCP,用于运行时外部工具。
动态 MCP 的两个稳定入口
SearchTool
在 ToolIndex 中按 BM25 搜索 MCP 工具。结果按 server 分组,并返回工具描述与 input_schema。
query: String关键词limit: Option<u8>默认 5UseTool
接收发现后的合格工具名,通过 InnerDispatch 或 managed gateway 调用 MCP。这个固定入口让模型工具列表跨轮次保持稳定。
tool_name: String通常为 server__tooltool_input: Value按发现到的 schema 构造真实源码证据
crates/codegen/xai-grok-tools/src/bridge.rs 与 implementations/use_tool/mod.rs
pub struct ToolBridge {
registry: Arc<FinalizedToolset>,
terminal: Option<Arc<dyn TerminalBackend>>,
}
pub async fn register_mcp_tools<T>(
&self,
mcp_name: String,
tool: T,
input_schema: Option<serde_json::Value>,
) -> Result<(), xai_tool_runtime::ToolError> {
self.registry.register_tool(mcp_name, tool, input_schema)?;
Ok(())
}
pub struct UseToolInput {
pub tool_name: String,
pub tool_input: serde_json::Value,
}
源码快照说明:依据本地仓库
grok-build-main,重点核对 xai-grok-tools/src/implementations/mod.rs、types/tool.rs、bridge.rs、registry/types.rs、implementations/search_tool 与 implementations/use_tool,核对日期 2026-07-17。课堂练习
03
追踪一次外部工具调用
从模型先调用 search_tool 开始,写出查询字段、返回中需要读取的 schema、随后传给 use_tool 的两个字段,以及最终由哪个桥接类型把结果交回会话。
Takeaway:实现族解决多套工具协议的代码组织,registry 负责组合与运行时注册,
ToolBridge 连接会话。动态 MCP 通过 SearchTool 发现 schema,再由 UseTool 按 schema 分发执行。