MCP 架构与核心概念
本节定位
上一节我们已经知道 MCP 是“工具接入层的统一协议”。
这一节要继续往里走一步,回答:
一个 MCP 系统在结构上到底长什么样?
你会看到,这一章的重点不是抽象口号,而是:
- 消息怎么流
- 谁负责什么
- 系统怎样从“发现工具”走到“真正执行工具”
学习目标
- 理解 MCP 系统里的核心角色分工
- 看懂一条完整的工具发现与调用链路
- 理解 transport 在架构里的位置
- 建立对“协议流”而不是“单个接口”的理解
一、先把整张架构图看清楚
这张图里最值得记的不是节点名字,而是:
Client 不直接操作底层世界,而是通过 MCP Server 这个统一入口拿能力。
二、Client 到底在做什么?
Client 的职责通常包括:
- 建立连接
- 发现 server 暴露了哪些能力
- 根据当前任务决定要不要调用
- 发起请求并接收结果
你可以把 client 理解成“使用者”。
在真实系统里,它可能是:
- IDE 插件
- 聊天助手
- 桌面 Agent
- 工作流引擎
它最核心的价值不是“自己会做事”,而是:
知道什么时候该向 server 要什么能力。
三、Server 到底在做什么?
Server 的职责通常包括:
- 描述和暴露能力
- 接收 client 请求
- 调用本地或外部工具
- 返回结构化结果
换句话说,server 更像“能力提供方”。
它相当于对外说:
- 我有什么工具
- 每个工具怎么调用
- 我支持怎样的上下文对象
所以 server 是整个协议落地的核心承载体。
四、Transport 为什么不能忽略?
很多初学者会只盯着:
- client
- server
但真正让两者能沟通的,是 transport。
4.1 它在解决什么问题?
简单说,它决定:
这些协议消息到底通过什么通道传来传去。
例如:
- 本地进程间通信
- 标准输入输出
- 网络连接
4.2 为什么 transport 很重要?
因 为它会影响:
- 延迟
- 可靠性
- 部署形态
- 调试方式
所以 transport 不是“顺手一选”的小细节,而是架构层的一部分。
五、MCP 系统里最常见的三类能力
虽然大家经常说“工具”,但更完整一点看,常见暴露内容可以理解成三类:
5.1 Tools
能被调用执行的能力。
例如:
- 搜索
- 读文件
- 查天气
5.2 Resources
更偏“可读取的信息源”。
例如:
- 文档内容
- 配置数据
- 数据表快照
5.3 Prompts
更偏“可复用的提示模板”。
这三类东西并不完全一样,但都属于“对外暴露可用能力”的范畴。
六、一条完整消息流长什么样?
6.1 先发现工具
list_request = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
list_response = {
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{"name": "search_docs", "description": "搜索课程文档"},
{"name": "get_weather", "description": "查询天气"}
]
}
}
print(list_request)
print(list_response)