
| # MCP协议集成Claude Code如何扩展AI Agent的能力边界【Claude Code源码分析·第20篇】如果说大语言模型是大脑那么MCP协议就是让AI Agent拥有四肢的关键——让它能够调用外部工具、访问实时数据、操作真实世界。一、MCP协议让AI与工具说同一种语言MCPModel Context Protocol是由Anthropic主导推出的开放协议旨在为AI模型与外部工具之间建立统一、标准、双向的通信桥梁。传统的AI Agent调用工具需要为每个工具单独开发适配代码导致 集成成本极高每增加一个工具需要写大量胶水代码 依赖爆炸每个工具都有自己的SDK、认证方式、错误处理 安全风险分散的集成难以统一管控权限MCP通过定义统一的通信协议解决了以上所有问题。MCP的核心设计理念主机(Claude Code) ←→ MCP Server ←→ 外部工具/数据源Claude Code作为MCPHost通过标准化的MCP协议与一个或多个MCP Server通信每个Server可以连接多个外部工具或数据源。二、Claude Code的MCP实现架构2.1 核心组件Claude Code源码中的MCP实现由以下核心模块组成1. McpManager - 全局管理器// 位置: src/tools/mcp/index.tsexportclassMcpManager{privateservers:Mapstring,McpServernewMap();privatetoolAdapters:Mapstring,McpToolAdapternewMap();// 启动MCP服务器asyncstartServer(name:string,config:McpServerConfig):Promisevoid;// 停止所有服务器asyncstopAll():Promisevoid;// 获取可用的MCP工具列表getAvailableTools():Tool[];}2. McpClient - 协议客户端McpClient负责与MCP Server建立连接并进行JSON-RPC 2.0通信classMcpClient{privateconnection:MessagePort|WebSocket;privatependingRequests:Mapstring,{resolve,reject,timeout}newMap();// 发送JSON-RPC请求asyncsendRequest(method:string,params:object):Promiseany;// 发送JSON-RPC通知无响应sendNotification(method:string,params:object):void;// 接收服务器响应privatehandleResponse(message:JsonRpcResponse):void;}3. McpToolAdapter - 工具适配器将MCP工具适配为Claude Code内部统一的Tool格式classMcpToolAdapter{constructor(privatemcpClient:McpClient,privatetoolDefinition:ToolDefinition){}// 将Claude Code的工具调用请求转换为MCP格式asyncinvoke(input:ToolInput):PromiseToolResult{constmcpRequestthis.toMcpRequest(input);constresponseawaitthis.mcpClient.sendRequest(tools/call,mcpRequest);returnthis.fromMcpResponse(response);}}2.2 通信协议JSON-RPC 2.0MCP使用JSON-RPC 2.0作为底层通信协议。请求示例// 工具调用请求{jsonrpc:2.0,id:1,method:tools/call,params:{name:filesystem_read,arguments:{path:/project/src/main.ts}}}// 响应{jsonrpc:2.0,id:1,result:{content:[{type:text,text:export class Main { ... }}]}}三、安全设计Claude Code如何保护你的系统3.1 进程隔离每个MCP Server运行在独立的子进程中// MCP Server以独立进程启动constserverProcessspawn(node,[serverScriptPath],{stdio:[pipe,pipe,pipe,ipc],env:{...filteredEnv},cwd:workspacePath});这样做的好处 MCP Server崩溃不会影响Claude Code主进程️ 可以通过进程级别的权限控制限制Server能力 独立的stdout/stderr便于日志记录3.2 权限层级MCP支持声明式权限控制{name:filesystem_server,command:npx,args:[-y,modelcontextprotocol/server-filesystem],allowedDirectories:[/project/src,/project/tests],env:{READ_ONLY:true}}Claude Code会根据配置的allowedDirectories在调用前校验路径防止工具访问未授权区域。3.3 确认机制对于高风险操作Claude Code会要求用户确认asyncfunctioninvokeWithConfirmation(tool:McpTool,args:object):PromiseToolResult{if(tool.requiresConfirmation){constconfirmedawaitpromptUser(允许执行${tool.name}?,参数:${JSON.stringify(args)});if(!confirmed){thrownewError(操作已取消);}}returninvokeTool(tool,args);}四、实战配置MCP Server4.1 安装MCP Server通过npm安装官方Servernpminstall-gmodelcontextprotocol/server-filesystemnpminstall-gmodelcontextprotocol/server-githubnpminstall-gmodelcontextprotocol/server-brave-search4.2 在Claude Code中配置在项目根目录创建.claude/mcp.json{mcpServers:{filesystem:{command:npx,args:[-y,modelcontextprotocol/server-filesystem,/project],env:{READ_ONLY:false}},github:{command:npx,args:[-y,modelcontextprotocol/server-github],env:{GITHUB_PERSONAL_ACCESS_TOKEN:${GITHUB_TOKEN}}},brave-search:{command:npx,args:[-y,modelcontextprotocol/server-brave-search],env:{BRAVE_API_KEY:${BRAVE_SEARCH_KEY}}}}}4.3 验证配置claude mcp list输出示例MCP Servers: ✓ filesystem (running) - 文件系统操作 ✓ github (running) - GitHub API集成 ✓ brave-search (running) - 网页搜索 Available Tools: - filesystem_read(path: string) → string - filesystem_write(path: string, content: string) → boolean - filesystem_list_directory(path: string) → FileInfo[] - github_get_issue(owner: string, repo: string, number: number) → Issue - brave_web_search(query: string, count?: number) → SearchResult[]五、MCP与Function Calling的对比很多人分不清MCP和Function Calling的区别维度Function CallingMCP定义方AI模型如GPT-4、ClaudeAnthropic/社区通信方式模型输出的结构化JSON标准JSON-RPC 2.0注册方式每次请求传入持久化配置工具发现手动注册自动发现适用场景简单函数调用复杂工具生态Function Calling是模型级别的能力而MCP是协议级别的标准。两者可以结合使用MCP Server内部可以暴露Function Calling接口。六、源码核心逻辑分析6.1 工具注册流程// src/tools/mcp/registry.tsexportclassMcpToolRegistry{asyncregisterServer(serverConfig:McpServerConfig):Promisevoid{// 1. 启动服务器进程constserverawaitMcpServer.start(serverConfig);// 2. 获取服务器提供的工具列表consttoolsawaitserver.listTools();// 3. 为每个工具创建适配器for(consttooloftools){constadapternewMcpToolAdapter(server.client,tool);this.adapters.set(tool.name,adapter);}// 4. 注册到全局工具管理器toolManager.registerBulk(this.adapters.values());}}6.2 工具调用流程用户请求 → Loop解析意图 → 工具选择 → ↓ McpToolAdapter.invoke() → McpClient.sendRequest() ↓ MCP Server处理 → 返回JSON-RPC响应 ↓ McpToolAdapter.fromMcpResponse() → ToolResult ↓ Loop接收结果 → 整合到响应中 → 返回用户七、总结与展望MCP协议代表了AI Agent工具集成的新范式——从烟囱式集成到标准化协议的飞跃。Claude Code通过MCP获得了生态扩展可接入任何遵循MCP标准的工具安全可控进程隔离权限控制动态发现无需重启即可发现新工具开箱即用丰富的官方Server支持未来随着MCP生态的壮大Claude Code的工具箱将越来越丰富真正成为开发者的AI超级助手。往期精选从循环开始理解Claude Code的Loop机制Context ManagementClaude Code的上下文管理艺术Permission Model安全与灵活的权限体系Bash Executor安全运行Shell命令