为什么你需要关心 MCP2026 年AI Agent 的核心能力不再是能不能推理而是能接多少工具。但每个 API 有自己的鉴权方式、数据格式、错误处理——接入成本随工具数量指数增长。MCPModel Context Protocol就是解决这个问题的。它由 Anthropic 在 2024 年底开源2025-2026 年被整个行业接受为标准。一句话概括MCP 是 AI 工具调用的 USB-C 接口——一套协议所有工具统一接入。MCP 核心架构三原语模型MCP 的设计极其简洁只有三个核心概念原语用途类比ToolAI 可以调用的函数REST API 的 POSTResourceAI 可以读取的数据REST API 的 GETPrompt预定义的提示词模板快捷指令三者都通过统一的 JSON-RPC 2.0 协议通信传输层可以是 stdio本地进程或 HTTPSSE远程服务。一个 Tool 的定义示例{ name: search_knowledge_base, description: 搜索公司内部知识库返回相关文档摘要, inputSchema: { type: object, properties: { query: {type: string, description: 搜索关键词}, top_k: {type: integer, default: 5, minimum: 1, maximum: 20}, category: {type: string, enum: [技术文档, 产品手册, 运维指南]} }, required: [query] } }Agent 看到这个 schema就知道何时调用、传什么参数。实战用 Python 写一个 MCP Server以下是一个完整的 MCP Server暴露一个get_stock_priceToolimport asyncio import json from mcp.server import Server, NotificationOptions from mcp.server.models import InitializationCapabilities from mcp.server.stdio import stdio_server from mcp.types import Tool, TextContent import httpx server Server(stock-server) server.list_tools() async def list_tools() - list[Tool]: return [ Tool( nameget_stock_price, description获取美股实时股价输入股票代码如 AAPL返回当前价格和涨跌幅, inputSchema{ type: object, properties: { symbol: { type: string, description: 美股股票代码大写如 AAPL、TSLA、MSFT } }, required: [symbol] } ) ] server.call_tool() async def call_tool(name: str, arguments: dict) - list[TextContent]: if name get_stock_price: symbol arguments[symbol] async with httpx.AsyncClient() as client: # 以 Alpha Vantage 免费 API 为例 resp await client.get( fhttps://www.alphavantage.co/query, params{function: GLOBAL_QUOTE, symbol: symbol, apikey: YOUR_KEY} ) data resp.json()[Global Quote] result f{symbol} 当前价格: ${data[05. price]}, 涨跌幅: {data[10. change percent]} return [TextContent(typetext, textresult)] async def main(): async with stdio_server() as (read, write): await server.run( read, write, InitializationCapabilities( sampling{}, experimental{} ) ) if __name__ __main__: asyncio.run(main())配置让 Claude Desktop 使用你的 MCP Server在你的claude_desktop_config.json中{ mcpServers: { stock-server: { command: python, args: [path/to/stock_server.py] } } }重启 Claude Desktop你的股票查询工具就自动注册了。在对话中说查一下 AAPL 股价Claude 自动调用你的 Tool。MCP 进阶Resource 和 PromptResource让 Agent 能读取静态或动态数据而不需要用户手动粘贴server.list_resources() async def list_resources(): return [ Resource( uriconfig://api-limits, nameAPI调用限额, description当前API剩余调用次数和速率限制, mimeTypeapplication/json ) ] server.read_resource() async def read_resource(uri: str): if uri config://api-limits: data {remaining: 823, limit: 1000, reset_at: 2026-05-19T00:00:00Z} return [TextContent(typetext, textjson.dumps(data))]Prompt提供可复用的提示模板server.list_prompts() async def list_prompts(): return [ Prompt( namecode_review, description代码审查模板, arguments[ PromptArgument(namelanguage, description编程语言, requiredTrue), PromptArgument(namecode, description待审查代码, requiredTrue) ] ) ] server.get_prompt() async def get_prompt(name: str, arguments: dict): if name code_review: return GetPromptResult( messages[{ role: user, content: { type: text, text: f请审查以下{arguments[language]}代码关注安全性、性能和可读性\n\n{arguments[code]} } }] )远程 MCP ServerHTTP SSE 传输本地 stdio 适合个人开发团队共用需要远程部署from mcp.server.sse import SseServerTransport from starlette.applications import Starlette from starlette.routing import Route transport SseServerTransport(/messages) async def handle_sse(request): async with transport.connect_sse(request.scope, request.receive, request._send) as streams: await server.run(streams[0], streams[1], InitializationCapabilities(sampling{}, experimental{}), NotificationOptions() ) app Starlette(routes[ Route(/sse, endpointhandle_sse), Route(/messages, endpointtransport.handle_post_message, methods[POST]), ])部署后团队成员只需在配置中填入url: https://your-server.com/sse即可共用。生产环境注意事项踩过三个坑① 鉴权必须外挂。MCP 协议本身不带鉴权生产环境用 API Gateway如 Kong、Nginx在前面做 Token 校验。别在 Tool 里实现鉴权逻辑。② Tool 描述要像写文档。Agent 选工具的准确率完全依赖 description。写具体不要写抽象——查询订单不如根据订单号格式 ORD-YYYY-XXXXX查询订单状态、金额、创建时间。③ 超时和重试。远程 MCP 调用可能超时。在 Tool 实现里加asyncio.wait_for()超时后返回结构化错误信息而不是抛异常Agent 才能优雅降级。小结MCP 的价值在于标准化。2026 年MCP 生态已经从 Anthropic 一家推广到全行业——OpenAI、Google、DeepSeek 都在以不同形式支持。早点把团队的工具链 MCP 化后续换模型就像换充电头一样简单。下一篇预告MCP Agent 多工具编排——如何让 Claude 同时查数据库、搜文档、发 Slack 通知。
MCP 协议实战:手把手构建 AI 工具调用标准接口,打通 Claude 与任意 API
为什么你需要关心 MCP2026 年AI Agent 的核心能力不再是能不能推理而是能接多少工具。但每个 API 有自己的鉴权方式、数据格式、错误处理——接入成本随工具数量指数增长。MCPModel Context Protocol就是解决这个问题的。它由 Anthropic 在 2024 年底开源2025-2026 年被整个行业接受为标准。一句话概括MCP 是 AI 工具调用的 USB-C 接口——一套协议所有工具统一接入。MCP 核心架构三原语模型MCP 的设计极其简洁只有三个核心概念原语用途类比ToolAI 可以调用的函数REST API 的 POSTResourceAI 可以读取的数据REST API 的 GETPrompt预定义的提示词模板快捷指令三者都通过统一的 JSON-RPC 2.0 协议通信传输层可以是 stdio本地进程或 HTTPSSE远程服务。一个 Tool 的定义示例{ name: search_knowledge_base, description: 搜索公司内部知识库返回相关文档摘要, inputSchema: { type: object, properties: { query: {type: string, description: 搜索关键词}, top_k: {type: integer, default: 5, minimum: 1, maximum: 20}, category: {type: string, enum: [技术文档, 产品手册, 运维指南]} }, required: [query] } }Agent 看到这个 schema就知道何时调用、传什么参数。实战用 Python 写一个 MCP Server以下是一个完整的 MCP Server暴露一个get_stock_priceToolimport asyncio import json from mcp.server import Server, NotificationOptions from mcp.server.models import InitializationCapabilities from mcp.server.stdio import stdio_server from mcp.types import Tool, TextContent import httpx server Server(stock-server) server.list_tools() async def list_tools() - list[Tool]: return [ Tool( nameget_stock_price, description获取美股实时股价输入股票代码如 AAPL返回当前价格和涨跌幅, inputSchema{ type: object, properties: { symbol: { type: string, description: 美股股票代码大写如 AAPL、TSLA、MSFT } }, required: [symbol] } ) ] server.call_tool() async def call_tool(name: str, arguments: dict) - list[TextContent]: if name get_stock_price: symbol arguments[symbol] async with httpx.AsyncClient() as client: # 以 Alpha Vantage 免费 API 为例 resp await client.get( fhttps://www.alphavantage.co/query, params{function: GLOBAL_QUOTE, symbol: symbol, apikey: YOUR_KEY} ) data resp.json()[Global Quote] result f{symbol} 当前价格: ${data[05. price]}, 涨跌幅: {data[10. change percent]} return [TextContent(typetext, textresult)] async def main(): async with stdio_server() as (read, write): await server.run( read, write, InitializationCapabilities( sampling{}, experimental{} ) ) if __name__ __main__: asyncio.run(main())配置让 Claude Desktop 使用你的 MCP Server在你的claude_desktop_config.json中{ mcpServers: { stock-server: { command: python, args: [path/to/stock_server.py] } } }重启 Claude Desktop你的股票查询工具就自动注册了。在对话中说查一下 AAPL 股价Claude 自动调用你的 Tool。MCP 进阶Resource 和 PromptResource让 Agent 能读取静态或动态数据而不需要用户手动粘贴server.list_resources() async def list_resources(): return [ Resource( uriconfig://api-limits, nameAPI调用限额, description当前API剩余调用次数和速率限制, mimeTypeapplication/json ) ] server.read_resource() async def read_resource(uri: str): if uri config://api-limits: data {remaining: 823, limit: 1000, reset_at: 2026-05-19T00:00:00Z} return [TextContent(typetext, textjson.dumps(data))]Prompt提供可复用的提示模板server.list_prompts() async def list_prompts(): return [ Prompt( namecode_review, description代码审查模板, arguments[ PromptArgument(namelanguage, description编程语言, requiredTrue), PromptArgument(namecode, description待审查代码, requiredTrue) ] ) ] server.get_prompt() async def get_prompt(name: str, arguments: dict): if name code_review: return GetPromptResult( messages[{ role: user, content: { type: text, text: f请审查以下{arguments[language]}代码关注安全性、性能和可读性\n\n{arguments[code]} } }] )远程 MCP ServerHTTP SSE 传输本地 stdio 适合个人开发团队共用需要远程部署from mcp.server.sse import SseServerTransport from starlette.applications import Starlette from starlette.routing import Route transport SseServerTransport(/messages) async def handle_sse(request): async with transport.connect_sse(request.scope, request.receive, request._send) as streams: await server.run(streams[0], streams[1], InitializationCapabilities(sampling{}, experimental{}), NotificationOptions() ) app Starlette(routes[ Route(/sse, endpointhandle_sse), Route(/messages, endpointtransport.handle_post_message, methods[POST]), ])部署后团队成员只需在配置中填入url: https://your-server.com/sse即可共用。生产环境注意事项踩过三个坑① 鉴权必须外挂。MCP 协议本身不带鉴权生产环境用 API Gateway如 Kong、Nginx在前面做 Token 校验。别在 Tool 里实现鉴权逻辑。② Tool 描述要像写文档。Agent 选工具的准确率完全依赖 description。写具体不要写抽象——查询订单不如根据订单号格式 ORD-YYYY-XXXXX查询订单状态、金额、创建时间。③ 超时和重试。远程 MCP 调用可能超时。在 Tool 实现里加asyncio.wait_for()超时后返回结构化错误信息而不是抛异常Agent 才能优雅降级。小结MCP 的价值在于标准化。2026 年MCP 生态已经从 Anthropic 一家推广到全行业——OpenAI、Google、DeepSeek 都在以不同形式支持。早点把团队的工具链 MCP 化后续换模型就像换充电头一样简单。下一篇预告MCP Agent 多工具编排——如何让 Claude 同时查数据库、搜文档、发 Slack 通知。