Skip to content

工具注册与发现

概述

Claude Code 的工具系统是一个模块化的插件架构,管理着 60+ 内置工具和动态加载的 MCP 工具。工具注册在 tools.ts 中完成。

Source: src/tools.ts

工具组装流程

getAllBaseTools()

Source: src/tools.ts:193-251

主工具列表,按条件组装:

始终加载

工具功能
AgentTool生成子代理执行任务
BashTool执行 Shell 命令
FileReadTool读取文件内容
FileEditTool编辑文件(行级 diff)
FileWriteTool创建新文件
GlobTool文件模式匹配
GrepTool正则搜索文件内容
WebFetchTool抓取 URL 内容
WebSearchTool网络搜索
TodoWriteTool管理 Todo 列表
AskUserQuestionTool向用户提问
SkillTool调用技能
NotebookEditTool编辑 Jupyter Notebook
EnterPlanModeTool进入计划模式
ExitPlanModeV2Tool退出计划模式
TaskOutputTool获取后台任务输出
TaskStopTool停止后台任务
BriefTool简报工具

条件加载

typescript
// Source: src/tools.ts:201-249

// 嵌入式搜索工具(替代 GlobTool/GrepTool)
if (hasEmbeddedSearchTools()) {
  // 使用 bfs/ugrep 替代
}

// Ant 内部专用
if (USER_TYPE === 'ant') {
  tools.push(ConfigTool, TungstenTool);
}

// feature() 门控(反编译版全部禁用)
if (feature('WEB_BROWSER_TOOL')) tools.push(WebBrowserTool);
if (isTodoV2Enabled()) tools.push(TaskCreateTool, TaskUpdateTool, ...);
if (feature('PROACTIVE')) tools.push(REPLTool);
if (isToolSearchEnabled()) tools.push(ToolSearchTool);

getTools() — 权限过滤

Source: src/tools.ts:271-327

Simple 模式

CLAUDE_CODE_SIMPLE=1--bare 标志)时,只提供最小工具集:

typescript
if (isSimpleMode()) {
  return [BashTool, FileReadTool, FileEditTool];
}

正常模式

  1. 移除特殊工具(ListMcpResourcesTool 等)
  2. 应用 filterToolsByDenyRules() — 根据权限规则过滤
  3. 应用 tool.isEnabled() 检查

assembleToolPool() — 合并内置与 MCP 工具

Source: src/tools.ts:345-367

typescript
export function assembleToolPool(
  permissionContext: ToolPermissionContext,
  mcpTools: Tool[],
): Tool[] {
  const builtIns = getTools(permissionContext);
  const filteredMcp = filterToolsByDenyRules(mcpTools, permissionContext);
  
  // 分别排序以保持缓存稳定性
  const sortedBuiltIns = builtIns.sort(byName);
  const sortedMcp = filteredMcp.sort(byName);
  
  // 去重:内置工具优先
  return uniqBy([...sortedBuiltIns, ...sortedMcp], t => t.name);
}

工具延迟加载 (Deferred Tools)

部分工具标记为 shouldDefer: true,不会在初始提示中发送给 API。用户需要通过 ToolSearchTool 搜索并加载这些工具:

typescript
// 工具定义中
{
  name: 'NotebookEditTool',
  shouldDefer: true,  // 不在初始工具列表中
  searchHint: 'edit jupyter notebook cells',  // 搜索关键词
}

ToolSearchTool 允许 Claude 按需发现和加载延迟工具,减少初始 token 开销。

工具目录一览

src/tools/
├── AgentTool/          # 69KB — 子代理生成
├── BashTool/           # 46KB + bashPermissions.ts (98KB)
│                       #      + bashSecurity.ts (102KB)
├── FileEditTool/       # 20KB — 文件编辑
├── FileReadTool/       # 读取文件
├── FileWriteTool/      # 创建文件
├── GlobTool/           # 文件模式匹配
├── GrepTool/           # 20KB — 正则搜索 (ripgrep)
├── WebFetchTool/       # URL 抓取
├── WebSearchTool/      # 网络搜索
├── SkillTool/          # 技能调用
├── AskUserQuestionTool/  # 用户交互
├── NotebookEditTool/   # Jupyter Notebook
├── ToolSearchTool/     # 工具搜索
├── EnterPlanModeTool/  # 计划模式
├── ExitPlanModeV2Tool/ # 退出计划
├── TaskCreateTool/     # 任务创建
├── TaskUpdateTool/     # 任务更新
├── TaskGetTool/        # 任务查询
├── TaskListTool/       # 任务列表
├── SendMessageTool/    # 多代理消息
├── TeamCreateTool/     # 团队创建
├── TeamDeleteTool/     # 团队删除
├── PowerShellTool/     # PowerShell
├── SleepTool/          # 延时
├── CronCreateTool/     # 定时任务
├── RemoteTriggerTool/  # 远程触发
└── ... (共 58 个工具目录)

下一步