工具系统与 MCP 协议2026 年 Agent 工具调用标准全景工具是 Agent 的手。MCP 是让这些手标准化、可互操作的协议。2026 年不懂 MCP 的 Agent 开发就像不懂 HTTP 的 Web 开发。前言工具系统的演进Agent 的工具系统经历了三个阶段阶段 1硬编码工具2023 工具代码写在 Agent 代码里耦合度高 阶段 2插件化工具2024 工具通过接口注册可动态加载 阶段 3MCP 协议2025-2026 工具通过标准协议定义跨平台、跨框架一、工具系统的架构1.1 核心组件classToolSystem:Agent 工具系统def__init__(self):self.registryToolRegistry()# 工具注册中心self.executorToolExecutor()# 工具执行器self.validatorToolValidator()# 工具验证器self.cacheToolCache()# 工具结果缓存defregister_tool(self,tool):self.registry.register(tool)defexecute(self,tool_call):# 1. 验证ifnotself.validator.validate(tool_call):return{error:工具调用验证失败}# 2. 检查缓存cachedself.cache.get(tool_call)ifcached:returncached# 3. 执行toolself.registry.get(tool_call.name)resultself.executor.execute(tool,tool_call.args)# 4. 缓存结果self.cache.set(tool_call,result)returnresult1.2 工具注册中心classToolRegistry:工具注册中心def__init__(self):self.tools{}self.categories{}defregister(self,tool,categorygeneral):self.tools[tool.name]toolifcategorynotinself.categories:self.categories[category][]self.categories[category].append(tool.name)defget_by_category(self,category):return[self.tools[name]fornameinself.categories.get(category,[])]defget_tools_for_agent(self,agent_context):根据 Agent 上下文选择工具relevant[]fortoolinself.tools.values():ifself._is_relevant(tool,agent_context):relevant.append(tool)returnrelevant二、MCP 协议2.1 什么是 MCPMCPModel Context Protocol是 2025 年由 Anthropic 提出的标准工具协议2025年12月捐赠给Linux Foundation后成为开放标准。目标是让工具的定义和调用在不同模型、框架、语言之间互通。MCP 的核心思想 工具 远程过程调用RPC 模型 客户端 工具服务器 服务端 MCP 协议定义 1. 工具如何定义Schema 2. 工具如何调用Request/Response 3. 工具如何发现List 4. 错误如何处理Error Codes 5. 传输方式stdio / SSE / Streamable HTTP!-- 2026-07 更新新增传输方式 --MCP 的三大核心能力能力说明示例ToolsAI 可调用的函数查数据库、发HTTP请求、操作文件ResourcesAI 可读取的数据源文件内容、API响应、数据库表结构Prompts预定义的提示词模板标准化的任务描述2.2 MCP 工具定义# MCP 格式的工具定义MCP_TOOL_SCHEMA{name:get_weather,# 工具名description:查询天气信息,# 描述inputSchema:{# 输入模式type:object,properties:{city:{type:string,description:城市名,}},required:[city],},outputSchema:{# 输出模式type:object,properties:{temperature:{type:number},condition:{type:string},},},}2.3 MCP 客户端classMCPClient:MCP 协议客户端def__init__(self,server_url):self.server_urlserver_url self.tools_cacheNonedeflist_tools(self):发现可用的工具ifself.tools_cache:returnself.tools_cache responserequests.post(f{self.server_url}/tools/list)self.tools_cacheresponse.json()[tools]returnself.tools_cachedefcall_tool(self,tool_name,arguments):调用工具responserequests.post(f{self.server_url}/tools/call,json{name:tool_name,arguments:arguments,},)resultresponse.json()ifresult.get(isError):raiseToolError(result[content][0][text])returnresult[content][0][text]defget_openai_format(self):转换为 OpenAI 兼容格式toolsself.list_tools()return[{type:function,function:{name:t[name],description:t[description],parameters:t[inputSchema],},}fortintools]2.4 MCP 服务器# 2026-07 更新推荐使用 FastMCP 创建服务器更简洁frommcp.server.fastmcpimportFastMCP# 初始化 ServermcpFastMCP(weather-assistant)mcp.tool()defget_weather(city:str)-str:查询指定城市的当前天气。 Args: city: 城市名称支持中文 # 实际实现returnf{city}今天晴25°Cmcp.resource(weather://{city})defget_weather_data(city:str)-str:提供天气数据资源returnfetch_weather(city)if__name____main__:mcp.run()# 默认使用 stdio 传输# 原始 Server API 方式更灵活但代码更多frommcp.serverimportServerfrommcp.server.stdioimportstdio_serverclassWeatherMCPServer:MCP 工具服务器示例def__init__(self):self.serverServer(weather-server)self._register_tools()def_register_tools(self):self.server.list_tools()asyncdeflist_tools():return[{name:get_weather,description:查询天气,inputSchema:{type:object,properties:{city:{type:string},},required:[city],},},]self.server.call_tool()asyncdefcall_tool(name,arguments):ifnameget_weather:resultawaitself._get_weather(arguments[city])return{content:[{type:text,text:result}]}asyncdefrun(self):asyncwithstdio_server()as(read,write):awaitself.server.run(read,write)三、工具链设计3.1 工具链模式classToolChain:工具链多个工具按顺序组合def__init__(self):self.steps[]defadd_step(self,tool_name,param_mapping): 添加工具链步骤 param_mapping: 如何将上一步的结果映射到当前步骤的参数 self.steps.append({tool:tool_name,param_mapping:param_mapping,})defexecute(self,initial_params,registry):执行整个工具链current_paramsinitial_params results[]forstepinself.steps:toolregistry.get(step[tool])# 参数映射mapped_paramsstep[param_mapping](current_params,results)# 执行resulttool.execute(mapped_params)results.append(result)current_paramsresultreturnresults[-1]3.2 工具组合模式# 模式 1顺序链# 搜索 → 提取 → 总结search_chainToolChain()search_chain.add_step(search_web,lambdap,r:{query:p[query]})search_chain.add_step(extract_content,lambdap,r:{url:r[0][url]})search_chain.add_step(summarize,lambdap,r:{text:r[1][content]})# 模式 2并行组合# 同时查天气和新闻parallel_tools[get_weather,get_news]resultsasyncio.gather(*[execute(t,p)fortinparallel_tools])# 模式 3条件路由# 根据结果选择下一步ifresult[type]weather:next_toolrecommend_outfitelse:next_toolgeneral_response四、工具缓存4.1 缓存策略classToolCache:工具结果缓存def__init__(self,ttl300):self.cache{}self.ttlttldefget(self,tool_call):keyself._make_key(tool_call)ifkeyinself.cache:entryself.cache[key]iftime.time()-entry[timestamp]self.ttl:returnentry[result]else:delself.cache[key]returnNonedefset(self,tool_call,result):keyself._make_key(tool_call)self.cache[key]{result:result,timestamp:time.time(),}def_make_key(self,tool_call):生成缓存键returnf{tool_call.name}:{hash(json.dumps(tool_call.args,sort_keysTrue))}五、工具安全5.1 权限控制classToolPermissionManager:工具权限管理def__init__(self):self.permissions{read_file:{level:read,allowed_paths:[/data/]},write_file:{level:write,allowed_paths:[/tmp/]},execute_code:{level:dangerous,sandbox:True},send_email:{level:write,max_recipients:1},delete_file:{level:dangerous,require_confirm:True},}defcheck_permission(self,tool_name,args,user_role):configself.permissions.get(tool_name)ifnotconfig:returnFalse,未知工具ifconfig[level]dangerousanduser_role!admin:returnFalse,需要管理员权限ifconfig.get(require_confirm):returnconfirm,f确认执行{tool_name}returnTrue,None5.2 沙箱执行classSandboxExecutor:沙箱执行工具defexecute_code(self,code,timeout5):在沙箱中执行代码importsubprocess resultsubprocess.run([python3,-c,code],capture_outputTrue,textTrue,timeouttimeout,cwd/tmp/sandbox/,env{PATH:/usr/bin},)returnresult.stdoutorresult.stderr六、2026 年工具系统趋势6.1 MCP 成为事实标准2026年MCP 已成为 Agent 工具的事实标准协议MCP 生态全景2026年7月 客户端支持 Claude Desktop / Claude Code Cursor / VS Code / JetBrains Continue / Codex OpenAI / Google / Microsoft 均已采纳 传输协议 stdio本地进程通信 SSEServer-Sent Events服务器推送 Streamable HTTP2025Q4新增支持流式响应 开发工具 MCP Inspector官方浏览器端调试工具 MCP CLI命令行管理工具 FastMCPPython快速开发框架6.2 工具市场Agent 可以从工具市场发现和安装工具工具市场 → 搜索天气 → 安装天气 MCP 服务器 → 搜索邮件 → 安装邮件 MCP 服务器 → 工具自动注册到 Agent6.3 工具即服务工具不再是代码而是服务工具 MCP 服务器 Agent → MCP 协议 → 工具服务器云端/本地6.4 MCP 安全治理2026年MCP安全治理成为独立领域安全工具链 MCP Inspector → 调试和验证MCP Server Agent Firewall → 审计MCP流量检测exfiltration/SSRF/injection Action Receipts → mediator-signed审计证据 Package Hallucination Detection → 检测虚假工具包4.3M包库总结概念说明工具系统Agent 的工具注册、执行、缓存、验证MCP 协议工具定义和调用的标准协议2026年事实标准工具链多个工具按顺序/并行组合工具缓存缓存工具结果避免重复调用工具安全权限控制、沙箱执行、流量审计MCP 让 Agent 的工具系统从私有 API走向标准协议。下一篇文章我们将深入Agent 规划与推理。思考题你的 Agent 现在支持 MCP 吗如果不支持迁移成本高吗工具缓存对哪些类型的工具最有价值哪些工具不适合缓存如果工具超过了 50 个你怎么管理和组织上一篇[31] Agent 记忆系统深度解析下一篇[33] Agent 规划与推理