工具系统
工具系统是 SDK 的核心能力之一,允许 Claude 调用外部工具来完成任务。
工具注册
import { ToolRegistry, createTool, BaseTool } from 'claude-code-sdk-ts'
import { z } from 'zod'
// 通过工厂函数创建工具
const myTool = createTool({
name: 'my_tool',
description: '我的自定义工具',
schema: z.object({
input: z.string().describe('输入参数'),
}),
execute: async (input) => {
return { result: `处理: ${input.input}` }
},
})
// 注册到注册表
const registry = new ToolRegistry()
registry.register(myTool)
继承 BaseTool
更复杂的工具可以通过继承 BaseTool 实现:
import { BaseTool } from 'claude-code-sdk-ts'
import { z } from 'zod'
class CalculatorTool extends BaseTool {
name = 'calculator'
description = '执行数学计算'
schema = z.object({
expression: z.string().describe('数学表达式'),
})
async execute(input: { expression: string }) {
try {
const result = Function(`'use strict'; return (${input.expression})`)()
return { result: String(result) }
} catch (err) {
return { error: `计算失败: ${(err as Error).message}` }
}
}
}
// 注册
registry.register(new CalculatorTool())
内置工具
SDK 提供 8 个内置工具,通过 registerAllBuiltInTools() 批量注册:
import { registerAllBuiltInTools } from 'claude-code-sdk-ts'
const registry = new ToolRegistry()
registerAllBuiltInTools(registry)
// 注册: BashTool, FileReadTool, FileWriteTool, FileEditTool,
// GlobTool, GrepTool, WebFetchTool, WebSearchTool
工具调用流程
用户请求
│
▼
LLM 分析 → 决定调用工具
│
▼
权限系统检查 (auto/manual/bypass/plan)
│
▼
工具执行
│
▼
结果返回给 LLM
│
▼
LLM 生成最终回复
MCP 协议工具
通过 MCP 协议集成外部工具服务器:
import { MCPServerManager, adaptMCPTool } from 'claude-code-sdk-ts'
const manager = new MCPServerManager()
// 添加 MCP 服务器
await manager.addServer({
name: 'my-server',
transport: 'stdio',
command: 'node',
args: ['./mcp-server.js'],
})
// 获取所有可用的 MCP 工具
const mcpTools = manager.getTools()
for (const mcpTool of mcpTools) {
const adapted = adaptMCPTool(mcpTool)
registry.register(adapted)
}