为 Claude Code 创建自定义插件的详细指南——扩展工具和能力。
插件架构
Claude Code 支持多种扩展方式:
- MCP 服务器:通过 Model Context Protocol 连接外部服务
- 自定义工具:使用 Agent SDK 构建的工具
- 技能:通过指令集扩展工作流
创建 MCP 服务器
基础结构
MCP 服务器是一个独立运行的进程,通过标准输入/输出与 Claude 通信:
// 使用 @modelcontextprotocol/sdk
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({
name: "my-plugin",
version: "1.0.0"
});
// 注册工具
server.tool("search-docs", { query: z.string() }, async ({ query }) => {
const results = await searchDocumentation(query);
return { content: [{ type: "text", text: results }] };
});
// 启动服务器
const transport = new StdioServerTransport();
await server.connect(transport);
注册工具
每个工具需要定义:
- 名称:工具的标识符
- 描述:工具的功能说明
- 输入 Schema:使用 JSON Schema 定义参数
- 处理函数:执行工具逻辑并返回结果
配置
在 .claude/mcp.json 中配置启动方式:
{
"mcpServers": {
"my-plugin": {
"command": "node",
"args": ["/path/to/my-plugin/server.js"]
}
}
}
创建自定义工具(Agent SDK)
使用 Agent SDK 可以构建更复杂的工具:
from anthropic import Anthropic
from claude_code_sdk import Tool, ClaudeCode
class MyCustomTool(Tool):
name = "search_database"
description = "搜索项目数据库中的记录"
def execute(self, **kwargs):
# 实现工具逻辑
return search_db(kwargs["query"])
cc = ClaudeCode(tools=[MyCustomTool()])
发布插件
- 将 MCP 服务器发布为 npm 包
- 创建技能文件并分享到社区
- 编写文档和使用示例
最佳实践
- 保持工具专注:每个工具做一件事并做好
- 清晰的描述:帮助 Claude 理解何时使用工具
- 错误处理:返回清晰的错误信息
- 安全考虑:不要暴露敏感操作