模型上下文协议(MCP) 是一个开放标准,旨在统一人工智能模型与数据源、工具及外部系统之间的通信方式。
MCP 提出了一种通用协议,定义了模型如何能够发现、查询和执行资源,以一种一致且安全的方式。其主要目的是减少人工智能生态系统中的碎片化,促进模型、服务和应用程序之间的互操作性。MCP借鉴了软件工程的经典原则——如抽象、模块化和解耦——但将其应用于生成式模型的新背景中。
在MCP之前,人工智能模型通过临时集成与外部数据交互:定制的API、特定的SDK和专有的格式。这种方法产生了多个问题:
MCP作为一层抽象,标准化了人工智能模型与外部世界的通信,就像HTTP标准化了客户端与Web服务器之间的通信一样。
MCP定义了一组结构概念和约定,允许模型通过统一接口访问信息或执行动作。
MCP服务器是该协议的核心。它向模型暴露三种类型的实体:
服务器可以实现这些组件中的任何一个,并通过模型可读的JSON描述符声明它们。
基本服务器描述示例:
{
"name": "演示MCP服务器",
"author": "John Doe",
"tools": ["get_weather", "say_hello", "fetch_resources"],
"resources": ["weather://{city}", "articles://{slug}"]
}
这样,模型可以动态地发现服务器的能力并决定如何使用它们。
工具是模型可以执行的动作。 每个工具都有一个标识符、描述以及输入/输出模式。
示例:
{
"name": "get_weather",
"description": "获取特定城市的天气预报",
"input": { "city": "string" },
"output": { "temperature": "number", "conditions": "string" }
}
工具允许模型超越文本,通过协议调用实际函数。
资源代表模型可以访问的结构化数据源。 遵循类似URI的格式,这有助于明确识别其来源和类型。
示例:
weather://medellin
greetings://juan
articles://model-context-protocol
每个资源由服务器定义了一个模式,并可以根据设定的权限被模型查询或操作。
提示是封装交互模式的预定义模板。 它们允许标准化复杂输入、共享配置或定义预期行为。
示例:
{
"id": "summarize_emails",
"description": "生成用户最近100封电子邮件的摘要",
"template": "给我一个我最近110封邮件的摘要。"
}
这种机制允许模型基于版本化、可重用且有文档记录的提示工作,从而提高响应的一致性。
MCP可以被视为位于人工智能模型和外部系统之间的一个中间层:
[ 人工智能模型 ]
│
▼
┌──────────────┐
│ MCP服务器 │
├──────────────┤
│ 工具 │ → 动作
│ 资源 │ → 结构化数据
│ 提示 │ → 模板和指南
└──────────────┘
│
▼
[ 外部来源:Outlook、GitHub、本地文件、API等 ]
模型发送一个标准化请求给服务器,后者将其转换为对特定资源或工具的具体调用,并返回一个与底层来源无关的一致响应。
MCP基于几个原则,使其与自由软件和开放协议的理念相一致:
MCP自然融入了新兴的AI代理和情境计算范式,其中模型需要安全访问动态信息。 其设计使模型能够:
换句话说,MCP成为人工智能的“通用API”。
模型上下文协议标志着人工智能系统演进的一个转折点。 正如HTTP促进了网络上的互操作性,MCP可能成为新一代开放和模块化智能应用的基础。 其力量不在于复杂性,而在于其概念对称性:一个模型可以在同一标准语言下理解并利用工具、数据和提示。