Model Context Protocol (MCP)
模型上下文协议 (MCP) 是一种开放标准,通过统一接口将 AI 应用连接到工具和数据。了解其架构、用途和代码。
模型上下文协议 (MCP) 是一种开放标准,用于将 AI 应用连接到外部工具、数据源和工作流。在 MCP 出现之前,每个 AI 应用都需要为使用的每项服务单独定制集成,因此 10 个助手和 10 项服务最多意味着 100 个独立连接器。借助 MCP,一项服务只需封装一次成为 MCP 服务器,任何兼容 MCP 的应用都可以使用它。Anthropic 于 2024 年 11 月推出该协议,并于 2025 年 12 月将其捐赠给 Agentic AI Foundation;该基金会隶属于 Linux Foundation,由 Anthropic 与 Block 和 OpenAI 共同创立。Claude、ChatGPT、VS Code、Cursor 和 Gemini CLI 等宿主均支持 MCP;它已成为AI 智能体和大语言模型 (LLMs)连接外部世界的标准方式。
MCP 的工作原理#
MCP 规范定义了三个通过 JSON-RPC 2.0 消息进行通信的角色。宿主是用户使用的 AI 应用,例如聊天机器人、IDE 或智能体。在宿主内部,一个客户端负责管理与每台服务器的连接,而每台服务器都会提供一组功能。本地服务器以子进程运行,通过标准输入和输出 (stdio) 通信;远程服务器则使用 Streamable HTTP。自 2026-07-28 版本起,核心协议已无状态:每个请求都携带自己的协议版本和客户端功能;旧的 initialize 握手和会话 ID 已取消;负载均衡器后面的任何服务器实例都可以响应任何请求。
服务器提供三种功能:
- 工具:模型可以调用的函数,每个工具都通过名称、描述以及用于定义参数的 JSON Schema 进行说明,例如
create_issue或run_query。工具可以返回文本、图像或结构化数据。 - 资源:通过 URI 标识的只读上下文,例如文件、数据库架构或日志摘录;应用可以将这些内容附加到模型的上下文中。
- 提示:可重复使用的消息模板,供用户显式选择,通常以斜杠命令的形式提供。
服务器还可以在任务进行过程中通过 elicitation 向用户询问缺失的信息。可选扩展还提供更多功能:Tasks 负责处理客户端通过轮询获取结果的长时间运行操作;MCP Apps 则允许工具返回交互式界面,这是生成式 UI的一种实现方式,可在对话中呈现图表和表单。
构建 MCP 服务器#
官方 MCP Python SDK 可将带类型标注的 Python 函数转换为工具,并根据类型提示生成其 JSON Schema。以这种方式封装 Ultralytics YOLO26 预测功能后,任何 MCP 宿主都能使用目标检测:该工具会返回 Results.summary(),这是一个包含每个对象的类别名称、置信度和边界框坐标的列表,供模型进行推理。下面的示例中,进程内客户端以宿主相同的方式发现并调用该工具:
import asyncio
from mcp import Client
from mcp.server.mcpserver import MCPServer
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
server = MCPServer("vision")
@server.tool()
def detect(image_url: str) -> list[dict]:
"""Detect objects in an image and return each object's class, confidence, and box."""
results = model(image_url)
return results[0].summary()
async def main():
"""Discover the server's tools and call one, as an MCP host does."""
async with Client(server) as client:
tools = await client.list_tools()
print(tools.tools[0].name, tools.tools[0].input_schema)
result = await client.call_tool("detect", {"image_url": "https://ultralytics.com/images/bus.jpg"})
print(result.structured_content)
asyncio.run(main())第一个 print 展示了工具名称和宿主模型看到的输入架构,其中要求提供一个字符串参数 image_url;第二个则展示了作为结构化内容返回的检测列表。
MCP 与相关概念的比较#
- 函数调用:模型生成结构化工具请求的能力。MCP 标准化了跨应用的工具发现、描述和执行方式,而宿主会将 MCP 工具定义转换为模型原生的函数调用格式。
- API:REST 或 GraphQL API 为某项服务的客户端提供服务。MCP 服务器通常会封装这类 API,并补充模型无需定制代码即可使用它所需的名称、描述和架构。
- 检索增强生成 (RAG):一种基于检索到的文档生成可靠答案的技术。MCP 可以通过搜索工具或附加资源来提供这种检索能力。
- Agent2Agent (A2A) 协议:连接智能体与其他智能体,使它们能够委派完整任务。MCP 则将智能体连接到它直接使用的工具和数据。
- 智能体技能:智能体在任务需要时加载到上下文中的指令和脚本文件夹。技能教会智能体如何执行任务,而 MCP 服务器则让它实时访问相关系统,因此智能体通常会同时使用两者。
实际应用#
- 智能体编程:编程智能体通过 MCP 服务器连接到 GitHub、问题跟踪系统、数据库和浏览器,因此当你询问登录失败的原因时,智能体可以在一次会话中提取错误日志、读取身份验证代码并检查未解决的问题。
- 企业助手:连接文档存储、聊天、工单和 CRM 系统的连接器,让助手能够根据公司数据回答问题,并代替用户提交更新。
- 视觉检查:智能体会对相机图像调用检测工具;发现部件损坏时,会向库存服务器查询替换零件并起草维护工单,从而将一次预测转化为完整的自动化工作流。
- 数据分析:数据库服务器提供只读查询工具,因此分析师可以用日常语言提问,并获得基于实时数据表计算出的答案。
安全注意事项#
MCP 工具可以使用用户凭据运行任意代码,因此每个连接都会扩展模型的能力,也会扩大攻击者可触及的范围。工具结果和资源可能包含提示注入,即试图诱使模型调用其他工具或泄露数据的文本;恶意服务器还可能在自己的工具描述中隐藏指令,这种攻击称为工具投毒。远程服务器使用基于 OAuth 的授权对用户进行身份验证;谨慎的宿主会限制每台服务器仅使用所需权限,在沙箱中运行本地服务器,并添加防护机制,例如在敏感操作前要求批准。规范要求宿主在调用任何工具前获得用户明确同意,并将工具描述视为不可信内容,除非它们来自可信服务器。










