MCP架构
原文:架构总览
一句话
MCP是一种基于JSON-RPC 2.0的协议,通过Host-Client-Server三层架构连接AI应用与外部工具,提供工具、资源和提示三种核心原语实现上下文交换。
什么时候翻这页
当你需要理解MCP的整体架构、实现原理或开发MCP客户端/服务器时;当你想了解MCP如何与Claude Code等AI应用集成时;当你需要解决MCP连接或通信问题时。
核心概念
参与者
- MCP Host: AI应用程序(如Claude Code、Claude Desktop),协调和管理一个或多个MCP客户端
- MCP Client: 维护与MCP服务器连接的组件,从服务器获取上下文供Host使用
- MCP Server: 提供上下文数据的程序,可本地或远程运行
层次结构
- 数据层: 基于JSON-RPC 2.0的协议层,定义客户端-服务器通信的消息结构和语义
- 生命周期管理:连接初始化、能力协商、连接终止
- 服务器特性:工具、资源、提示
- 客户端特性:采样、征询、日志
- 实用特性:通知、任务
- 传输层: 定义通信机制和通道,处理连接建立、消息帧和授权
- Stdio传输:本地进程间通信,无网络开销
- Streamable HTTP传输:支持远程服务器和标准HTTP认证
核心原语
- Tools: AI应用可调用的可执行函数(如文件操作、API调用)
- Resources: 为AI应用提供上下文数据源(如文件内容、数据库记录)
- Prompts: 可重用的交互模板(如系统提示、少样本示例)
怎么做
实现MCP服务器
- 选择传输协议(STDIO或HTTP)
- 实现数据层协议(JSON-RPC 2.0)
- 定义并实现核心原语(tools、resources、prompts)
- 处理生命周期管理(初始化、能力协商、终止)
实现MCP客户端
- 建立与MCP服务器的连接
- 处理初始化握手和能力协商
- 发现和使用服务器提供的原语
- 处理服务器发送的通知
集成到AI应用
- 在AI应用中实现MCP Host功能
- 管理多个MCP客户端连接
- 将服务器提供的原语暴露给语言模型
- 处理工具调用和结果返回
命令 / 配置速查
初始化请求
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {
"elicitation": {}
},
"clientInfo": {
"name": "example-client",
"version": "1.0.0"
}
}
}
工具发现
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}
工具调用
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "weather_current",
"arguments": {
"location": "San Francisco",
"units": "imperial"
}
}
}
通知
{
"jsonrpc": "2.0",
"method": "notifications/tools/list_changed"
}
与 Claude Code / Hello-Agents 的联系
在Claude Code中,MCP作为连接外部工具的桥梁,使Claude能够访问文件系统、数据库等外部资源。这与Hello-Agents第10章中讨论的agent工具调用概念相似,但MCP提供了更标准化的协议和更丰富的上下文交换能力。Claude Code中的MCP集成展示了如何将协议层实现与AI应用无缝结合。
初学者易错点
- 混淆Host与Client角色: Host是AI应用,Client是Host与Server之间的中介组件,不是直接等同
- 忽略传输层选择: 根据使用场景选择合适的传输协议(本地使用STDIO,远程使用HTTP)
- 错误处理不完整: MCP是状态协议,必须正确处理生命周期管理和错误情况
- 能力声明不一致: 初始化时声明的capabilities必须与实际实现的功能匹配
- 忽视通知机制: 通知是MCP实现实时更新的关键,不应忽略其实现