Grok Build · 工具執行架構

實現族、註冊表與動態 MCP

xai-grok-tools 同時容納多套內建工具實現與執行時 MCP 工具。ToolBridge 把 registry 接入會話層,SearchToolUseTool 提供發現和呼叫入口。

課程目標能從 namespace 找到對應實現族,說明工具定義如何進入 registry 並由 ToolBridge 執行,同時準確寫出兩個 MCP 元工具的真實輸入欄位。
核心視覺 · 從定義到執行的資料流
實現族grok_build · codex · opencode 動態 MCP執行時註冊 ToolRegistryBuilder選擇 · 參數重新命名finalize(config, context) FinalizedToolsetdefinitions · resourcesdispatch ToolBridge會話適配呼叫與結果 tool definitions 提供給模型 ToolOutput / prompt_text
教學化結構圖:型別與方法來自原始碼,佈局用於課堂解釋。
原始碼中的實現族
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>預設 5

UseTool

接收發現後的合格工具名,透過 InnerDispatch 或 managed gateway 呼叫 MCP。這個固定入口讓模型工具列表跨輪次保持穩定。

tool_name: String通常為 server__tool
tool_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.rstypes/tool.rsbridge.rsregistry/types.rsimplementations/search_toolimplementations/use_tool,核對日期 2026-07-17。
課堂練習
03

追蹤一次外部工具呼叫

從模型先呼叫 search_tool 開始,寫出查詢欄位、返回中需要讀取的 schema、隨後傳給 use_tool 的兩個欄位,以及最終由哪個橋接型別把結果交回會話。

Takeaway:實現族解決多套工具協議的程式碼組織,registry 負責組合與執行時註冊,ToolBridge 連線會話。動態 MCP 透過 SearchTool 發現 schema,再由 UseTool 按 schema 分發執行。