模型上下文协议(MCP)建立在灵活、可扩展的架构之上,该架构使LLM应用程序和集成之间能够实现无缝通信。本文件涵盖了核心架构组件和概念。
Core Architecture
MCP 遵循客户端-服务器架构
Client 1: 1 Server Connect

CleanShot 2025-03-06 at 10.02.18@2x.png
Core Components
Protocol Layer
Transport layer
传输层处理客户端和服务器之间的实际通信。MCP 支持多种传输机制:
- Stdio transport 标准 I/O 传输
- 使用标准输入/输出进行通信
- 非常适合本地进程
- HTTP with SSE transport
- 使用服务器发送事件进行服务器到客户端的消息
- HTTP POST 用于客户端到服务器的消息
所有传输都使用 JSON-RPC 2.0 进行消息交换。请参阅规范以获取有关模型上下文协议消息格式的详细信息。
Message types
- Requests
- Response
- Errors
- Notifycations 单向消息,不需要响应
Connection Lifecycle
Initialization 初始化

CleanShot 2025-03-06 at 10.09.25@2x.png
- 客户端发送带有协议版本和功能的
initialize请求 - 服务器响应其协议版本和功能
- 客户端发送
initialized通知作为确认 - 普通消息交换开始
Message exchange
初始化后,支持以下模式
- Request-Response: 客户端或服务器发送请求,另一方响应
- Notifications: 任一方发送单向消息
Termination
任何一方都可以终止连接:
- 通过
close()关闭 - 运输断开
- 错误条件
Error Handling
SDKs 和应用程序可以定义自己的错误代码,其值大于-32000。
Errors通过以下方式传播:
- 错误响应请求
- 传输上的错误事件
- 协议级错误处理器
Example
Resources
Resources是模型上下文协议(MCP)中的核心基本元素,允许服务器暴露客户端可以读取并用作LLM交互上下文的数据和内容。
Resources代表 MCP 服务器希望向客户端提供任何类型的数据。这可以包括:
- File contents 文件内容
- Database records 数据库记录
- API responses API 响应
- Live system data 实时系统数据
- Screenshots and images 截图和图像
- Log files 日志文件
- And more
Resource URIs
[protocol]://[host]/[path]
例如:
file:///home/user/documents/report.pdfpostgres://database/customers/schemascreen://localhost/display1
Client discover Resource
Direct resources
Resource templates
Reading Resources
Response
读取资源时,客户端使用资源 URI 发起一个 resources/read 请求。
服务器响应一个资源内容的列表:
Resource updates
- List changes
服务器可以通过notifications/resources/list_changed通知向客户端通知其可用资源列表的更改。 - Content changes
客户可以订阅特定资源的更新:- 客户端发送
resources/subscribe与资源 URI - 服务器在资源发生变化时发送
notifications/resources/updated - 客户端可以使用
resources/read获取最新内容 - 客户端可以使用
resources/unsubscribe进行退订
- 客户端发送
Example
Prompts
Prompts使服务器能够定义可重用的提示模板和工作流程,客户端可以轻松地呈现给用户和LLMs。它们提供了一种强大的方式来标准化和共享常见的LLM交互。
MCP 中的提示是预定义的模板,可以:
- Accept dynamic arguments 接受动态参数
- Include context from resources 包含资源上下文
- Chain multiple interactions 链式多个交互
- Guide specific workflows 指南特定工作流程
- Surface as UI elements (like slash commands) 表面为 UI 元素(如斜杠命令)
Structure
Example
Tools
Tools是模型上下文协议(MCP)中的一个强大原始功能,它使服务器能够向客户端暴露可执行功能。通过工具,LLMs可以与外部系统交互,执行计算并在现实世界中采取行动。
MCP 中的工具允许服务器暴露可由客户端调用并由LLMs执行操作的执行函数。工具的关键方面包括:
- Discovery: 客户端可以通过
tools/list端点列出可用的工具 - Invocation: 使用
tools/call端点调用工具,服务器执行请求的操作并返回结果 - Flexibility: 工具可以从简单的计算到复杂的 API 交互
Structure
Example
Roots
Roots是 MCP 中的一个概念,定义了服务器可以操作的范围。它们提供了一种方式,让客户端向服务器告知相关资源及其位置。
Roots是一个客户端建议服务器应关注的 URI。当客户端连接到服务器时,它会声明服务器应与哪些Roots一起工作。虽然主要用于文件系统路径,但根可以是任何有效的 URI,包括 HTTP URL。
file:///home/user/projects/myapp
https://api.example.com/v1
根节点具有几个重要功能:
- Guidance: 它们向服务器通知相关资源和位置
- Clarity: 根资源明确哪些资源属于您的工作空间
- Organization: 多个根让您可以同时处理不同的资源