工具调用完整参考

6 阅读8分钟

工具调用完整参考

Claude Code 在执行任务时会调用内置工具。了解每个工具的完整参数,能帮你写出更精准的指令,也能理解 Claude 在做什么。

何时明确指定工具

大多数时候让 Claude 自己选择工具即可。以下场景值得明确指定:

场景明确指定工具原因
找函数/类定义ide_find_definition语义跳转,比 Grep 更准确
分析大文件Read(offset, limit)避免读整个大文件浪费 token
查找关键词Grep比让 Claude 自由搜索更快
全局重命名ide_refactor_rename比文本替换安全,处理作用域
查代码错误ide_diagnostics实时 IDE 诊断,比手动运行快

工具一览

工具分类核心用途
Read文件操作读取文件内容
Write文件操作创建或完全覆写文件
Edit文件操作精确替换文件中的字符串片段
Glob搜索按文件名模式查找文件
Grep搜索在文件内容中搜索文本
Bash执行运行 shell 命令
Agent子任务启动子 Agent 处理独立任务
WebFetch网络获取网页内容
WebSearch网络搜索互联网
TodoWrite任务写入 todo 列表(轻量任务追踪)
TaskCreate任务创建结构化任务
TaskUpdate任务更新任务状态
TaskGet任务获取任务详情
TaskList任务列出所有任务
ExitPlanMode规划完成规划,请求用户批准
AskUserQuestion交互向用户提问(多选/单选)

文件操作工具

Read — 读取文件

参数:
  file_path   必填  文件绝对路径
  offset      可选  从第几行开始读取(从 1 计)
  limit       可选  最多读取多少行
  pages       可选  PDF 专用,指定页码范围如 "1-5"

使用示例

# 读取整个文件
> 读一下 src/auth.ts

# 精确读取(节省 token 的关键技巧)
> 读一下 src/auth.ts 的第 80-130 行

# 读取 PDF 的特定页
> 读一下 API文档.pdf 的第 3-5 页

支持的文件类型

  • 所有文本文件(.ts、.java、.md 等)
  • 图片文件(.png、.jpg 等)—— 以视觉方式呈现
  • PDF 文件(需要指定页码范围)
  • Jupyter Notebook(.ipynb)

注意:每行超过 2000 字符会被截断。


Write — 创建/覆写文件

参数:
  file_path   必填  文件绝对路径
  content     必填  写入的完整内容

重要规则

  • Write 完全覆盖文件内容
  • 修改现有文件时,Claude 会优先用 Edit(更安全)
  • 创建新文件时使用 Write
# 触发场景
> 帮我创建一个 src/utils/format.ts 工具文件
(Claude 用 Write 创建新文件)

> 把这个文件完全重写为 TypeScript 版本
(Claude 可能用 Write 覆写)

Edit — 精确修改文件片段

参数:
  file_path    必填  文件绝对路径
  old_string   必填  要替换的原始文本(必须在文件中唯一存在)
  new_string   必填  替换后的新文本
  replace_all  可选  是否替换所有匹配项(默认 false

工作原理:Edit 做的是精确字符串替换,不是按行号替换:

文件原内容:
function validateToken(token: string) {
  return token.length > 0;
}

Edit 操作:
old_string = "return token.length > 0;"
new_string = "return token.length >= 32 && token.startsWith('Bearer ');"

文件新内容:
function validateToken(token: string) {
  return token.length >= 32 && token.startsWith('Bearer ');
}

关键约束old_string 必须在文件中唯一,否则 Edit 失败(避免歧义)。如果有多处相同代码,需要提供更多上下文使其唯一。


搜索工具

Glob — 按文件名模式查找

参数:
  pattern   必填  glob 模式(支持 * 和 **)
  path      可选  搜索的起始目录(默认为工作目录)

常用模式

"**/*.ts"          所有 TypeScript 文件(递归)
"src/**/*.test.ts" src 下的所有测试文件
"*.json"           当前目录下的 JSON 文件
"src/components/*" components 目录下的所有直接子项
# 触发场景
> 有哪些测试文件?
(Claude 用 Glob("**/*.test.ts"))

> src/pages 下有哪些页面组件?
(Claude 用 Glob("src/pages/**/*"))

Grep — 在文件内容中搜索

参数:
  pattern        必填  正则表达式或文本
  path           可选  搜索目录(默认工作目录)
  glob           可选  文件类型过滤,如 "*.ts"
  type           可选  文件类型,如 "js""py"
  output_mode    可选  "files_with_matches"(默认)| "content" | "count"
  -i             可选  是否忽略大小写
  -n             可选  是否显示行号(仅 content 模式)
  context        可选  显示匹配行前后各 N 行
  -A             可选  匹配行后 N 行
  -B             可选  匹配行前 N 行
  head_limit     可选  限制返回的结果数量

使用示例

# 查找函数定义(返回文件列表)
> 找一下 getUserById 函数在哪里定义的

# 查找并显示上下文(content 模式)
> 找一下所有 TODO 注释,显示每条注释的前后各 2 行

# 查找并计数
> 项目里一共用了多少次 console.log?

output_mode 对比

files_with_matches  → 返回包含匹配的文件路径列表(默认,最省 token)
content             → 返回匹配的具体行内容(需要看上下文时用)
count               → 返回每个文件的匹配次数

执行工具

Bash — 执行 shell 命令

参数:
  command      必填  要执行的 shell 命令
  description  必填  命令用途说明(给用户看)
  timeout      可选  超时时间(毫秒,最大 600000)
  run_in_background  可选  是否后台运行

执行前会显示命令(根据权限设置,可能需要你确认)。

常见用途

git status
git diff HEAD~1
npm test
pnpm lint
curl http://localhost:3000/health
ls -la src/

注意:Bash 命令不跨调用保持状态(每次都是新 shell),但工作目录会保持。


搜索/网络工具

WebFetch — 获取网页内容

参数:
  url     必填  完整 URL
  prompt  必填  告诉 Claude 从页面中提取什么信息

注意:公司内网环境可能无法访问外部 URL。如需访问内部系统,使用 Chrome DevTools MCP。


WebSearch — 互联网搜索

参数:
  query            必填  搜索关键词
  allowed_domains  可选  仅返回这些域名的结果
  blocked_domains  可选  排除这些域名的结果

注意:公司网络通常屏蔽外部访问,此工具在内网环境下可能无法使用。


任务管理工具

任务管理工具用于在复杂的多步骤任务中追踪进度,Claude 会在需要时主动使用。

TaskCreate — 创建任务

参数:
  subject      必填  任务标题(简洁的行动描述)
  description  必填  详细说明(包含接收标准)
  activeForm   可选  进行中时显示的动词形式(如"正在分析代码"

TaskUpdate — 更新任务状态

参数:
  taskId        必填  任务 ID
  status        可选  "pending" | "in_progress" | "completed" | "deleted"
  subject       可选  修改标题
  description   可选  修改描述
  addBlocks     可选  添加被此任务阻塞的任务 ID 列表
  addBlockedBy  可选  添加阻塞此任务的前置任务 ID 列表

任务状态流转

pending → in_progress → completed
    ↘ deleted(任何时候都可以删除)

TaskGet / TaskList

  • TaskGet(taskId) — 获取单个任务详情
  • TaskList() — 列出所有任务及其状态

规划与交互工具

ExitPlanMode — 完成规划请求批准

在规划模式(Plan Mode)完成后,Claude 调用此工具请求你审阅并批准计划。

AskUserQuestion — 向用户提问

Claude 用此工具在需要你做选择时弹出交互式问题,支持单选和多选。


工具调用的 Token 消耗估算

工具              平均 Token 消耗(每次调用)

Glob              低(仅返回文件路径列表)
Grep(files)       低(仅返回匹配文件名)
Grep(content)     中(返回匹配内容,依结果数量)
Read(精确)        中(依读取行数,约 4 token/行)
Read(整文件)      高(大文件可达数千 token)
Bash              中(依输出内容长度)
Write             中(依文件大小)
Edit              低(仅替换片段)
WebFetch          高(整个网页转 Markdown)
Agent             高(子 Agent 完整上下文)

实用原则:优先用 Glob/Grep 定位,再用 Read(offset+limit) 精确读取,避免直接 Read 大文件。


Agent 工具(委派子任务)

参数:
  subagent_type     可选  子 Agent 类型("general-purpose"/"Explore" 等)
  prompt            必填  子任务描述
  description       必填  简短描述(3-5个词)
  run_in_background 可选  是否后台运行
  isolation         可选  "worktree" 表示在独立 worktree 中运行
  resume            可选  恢复之前的子 Agent(传入 agentId)

常用 subagent_type

general-purpose   通用,适合复杂研究和多步骤任务
Explore           快速代码库探索(only read tools)
Plan              架构规划和方案设计

何时用 Agent

  • 需要大量读取文件(3+ 个)做探索性分析
  • 多个独立子任务可以并行执行
  • 任务明确独立,不需要主 Agent 参与中间步骤

何时不用 Agent

  • 任务简单(1-2 个文件),子 Agent 启动开销反而更慢
  • 步骤之间有强依赖,必须顺序执行
  • 需要精确控制每一步的输出

工具组合使用的最佳实践

组合一:安全的代码探索(低 token 消耗)

Glob → 找到相关文件列表
Grep → 在文件中定位关键行号
Read(offset+limit) → 精确读取目标代码段

组合二:安全的代码修改

Grep → 确认函数存在且唯一
Read → 阅读完整上下文(避免改错地方)
Edit → 精确替换(不是 Write 整个文件)
Bash("验证命令") → 确认修改没有引入错误

组合三:影响范围分析(修改公共函数前)

ide_find_references → 找所有调用方
ide_call_hierarchy → 追踪调用链
Grep → 验证搜索结果完整性