工具系统

工具系统是 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)
}