LSPTool:语言服务接入
LSPTool:语言服务接入它让 Claude Code 获得 IDE 级代码智能LSPTool 的意义不在于“又多了一个搜索工具”,而在于: Claude Code 不再只依赖文本搜索,而是能调用语言服务器做语义级理解。 这让它可以做: go to definition find references hover document symbol call hierarchy 也就是说,它已经接近 IDE 里的“代码智能”层。 关键源码tools/LSPTool/LSPTool.ts: 12345678910111213141516const inputSchema = z.strictObject({ operation: z.enum([ 'goToDefinition', 'findReferences', 'hover', 'documentSymbol', 'workspaceSymbol', 'goToI...
ReadMcpResourceTool:读取 MCP 资源
ReadMcpResourceTool:读取 MCP 资源它是 MCP 世界里的远程 ReadReadMcpResourceTool 的职责非常明确:给定 server + uri,把远程 MCP 资源正文读回来。 关键源码输入定义: 1234export const inputSchema = z.object({ server: z.string().describe('The MCP server name'), uri: z.string().describe('The resource URI to read'),}) 实际读取走 MCP SDK: 1234567const result = await connectedClient.client.request( { method: 'resources/read', params: { uri }, }, ReadResourceResultSchema,) 二进制资源也...
ListMcpResourcesTool:列出 MCP 资源
ListMcpResourcesTool:列出 MCP 资源它让模型先获得“资源发现能力”ListMcpResourcesTool 的职责很像远程世界里的目录浏览。如果模型已经接上了 MCP server,但不知道那边具体暴露了哪些资源,第一步就应该用它先列出来。 关键源码tools/ListMcpResourcesTool/ListMcpResourcesTool.ts: 123const inputSchema = z.object({ server: z.string().optional().describe('Optional server name to filter resources by'),}) 核心逻辑是: 123456const results = await Promise.all( clientsToProcess.map(async client => { const fresh = await ensureConnectedClient(client) return awai...
SendMessageTool:Agent 通信
SendMessageTool:Agent 通信它是多 Agent 模式下的通信总线在 Claude Code 的多 Agent 体系里,普通文本不会自动被其他 teammate 看见。所以如果一个 Agent 想通知另一个 Agent、广播消息、回复审批,它必须走 SendMessageTool。 这意味着这个工具不是辅助功能,而是多 Agent 系统真正成立的基础设施。 关键源码tools/SendMessageTool/SendMessageTool.ts: 12345const inputSchema = z.object({ to: z.string(), summary: z.string().optional(), message: z.union([z.string(), StructuredMessage()]),}) 而 StructuredMessage 又支持几类特殊消息: 123type: 'shutdown_request'type: 'shutdown_response'type: ...
TaskOutputTool:读取任务输出
TaskOutputTool:读取任务输出它把后台任务输出统一成同一种可读结果TaskOutputTool 用来读取后台任务的输出。它最重要的价值是统一: shell 任务输出 本地 agent 输出 远程 agent 输出 所以主线程不需要关心底层任务类型差异,只要关心统一返回结构。 关键源码输入定义: 12345const inputSchema = z.strictObject({ task_id: z.string(), block: z.boolean().default(true), timeout: z.number().min(0).max(600000).default(30000),}) 统一输出对象: 1234567type TaskOutput = { task_id: string; task_type: TaskType; status: string; description: string; output: string;} 它还有一个很有意思的现状源码 prompt 明写了: DE...
TaskStopTool:停止任务
TaskStopTool:停止任务它负责中断后台执行,不是删除任务记录TaskStopTool 的目标很明确:停止一个正在运行的后台任务。 这通常对应两类来源: BashTool 启动的后台 shell AgentTool 启动的后台 agent 关键源码1234const result = await stopTask(id, { getAppState, setAppState,}) 在此之前它会先校验: 任务存在 任务当前确实是 running 调用链小结TaskStopTool 给 Claude Code 的后台执行链补上了“中断”能力,这是正式任务系统不可缺的一环。
TaskListTool:列出任务
TaskListTool:列出任务它给主线程提供全局任务视图TaskListTool 的作用是让模型重新看到“现在有哪些任务、谁卡住了谁、哪些还没完成”。在多步流程中,它相当于任务系统的总览面板。 关键源码123const allTasks = (await listTasks(taskListId)).filter( t => !t.metadata?._internal,) 它还会过滤已解决阻塞项,让输出更贴近“当前可行动状态”。 调用链小结TaskListTool 让 Claude Code 在复杂任务流里具备了“抬头看全局”的能力。
TaskUpdateTool:更新任务
TaskUpdateTool:更新任务它是任务系统的主写入口TaskUpdateTool 负责修改任务对象本身。如果说 TaskCreateTool 是创建节点,那 TaskUpdateTool 就是任务流真正推进的主干工具。 关键源码它支持更新的字段非常多: 1234567891011const inputSchema = z.strictObject({ taskId: z.string(), subject: z.string().optional(), description: z.string().optional(), activeForm: z.string().optional(), status: TaskUpdateStatusSchema.optional(), addBlocks: z.array(z.string()).optional(), addBlockedBy: z.array(z.string()).optional(), owner: z.string().optional(), metadata: z.recor...
TaskGetTool:读取任务
TaskGetTool:读取任务它是任务系统里的单点查询入口TaskGetTool 的职责很纯粹:按 ID 读取单个任务。但它的重要性在于,它让主线程可以在复杂任务流里随时检查某个任务当前的真实状态,而不是只看 UI 记忆。 关键源码1const task = await getTask(taskListId, taskId) 返回内容除了标题和状态,还包括: description blocks blockedBy 这说明它查询的不是“列表项”,而是带依赖关系的任务对象。 调用链小结TaskGetTool 让任务系统具备了正式对象查询能力,而不是只能看列表摘要。
TaskCreateTool:创建任务
TaskCreateTool:创建任务它把待办项升级成正式任务对象TaskCreateTool 不是简单往列表里插一行文本,而是把一个工作项创建成正式任务对象: 有 id 有 subject 有 description 有状态 可被后续更新、阻塞、归属 这说明 Claude Code 的任务系统已经不是展示层小功能,而是真正的运行时对象系统。 关键源码12345678910const taskId = await createTask(getTaskListId(), { subject, description, activeForm, status: 'pending', owner: undefined, blocks: [], blockedBy: [], metadata,}) 随后它还会执行 hook: 1const generator = executeTaskCreatedHooks(...) 调用链小结TaskCreateTool 代表的是 Claude Code 从“todo 文本”到“正式任务对...