MCP概念与运行机制
# MCP概念与运行机制
先分清协议、工具、服务和进程,再理解 AI 应用如何调用外部能力。
# 1. 一句话理解 MCP
MCP(Model Context Protocol,模型上下文协议)是一套连接 AI 应用与外部工具、数据源的标准协议,让 AI 应用能够通过统一接口获取上下文并调用工具。
面试时可以直接用这句话。继续展开时,重点解释:MCP 统一的是连接与调用方式,真正执行工作的仍是开发者编写的业务代码。
# MCP 等于函数吗?类似说明书吗?
一个 MCP 工具可以对应一个函数,但 MCP 本身是协议。
| 概念 | 做什么 | 例子 |
|---|---|---|
| 业务函数 | 实际干活 | read_temperature(device_id) |
| 工具定义 | 描述工具名称、用途和输入结构 | 读取温度,需要设备编号 |
| MCP 协议 | 规定能力发现、请求和结果如何交换 | 列出工具、调用工具 |
| MCP Server | 提供这些能力的程序 | 包含多个设备查询工具的服务 |
“说明书”只对应工具描述这一部分。真正可用还需要通信处理、业务函数和执行结果。
# MCP 的主要价值
原本不同 AI 应用可能各写一套外部工具接入逻辑。MCP 提供统一标准,使兼容的客户端能够复用同一套工具服务。
AI 应用可以发现有哪些工具,读取参数说明,发送调用,接收数据或错误。MCP 不保证所有客户端支持完全相同的功能,也不替代业务系统自身的权限校验。
# 2. MCP 有哪些组成?
从架构看有三个角色:
- Host(宿主):用户使用的 AI 应用,协调模型、上下文和工具使用。
- Client(客户端):宿主内部负责连接某个 MCP 服务的组件。
- Server(服务端):对外提供工具、数据等能力的程序,可以本地运行,也可以远程部署。
用户 → AI 应用(Host,内部包含 Client)
↓ MCP 通信
MCP Server
↓
业务函数 → 文件 / 数据库 / 设备 / API
2
3
4
5
开发一个工具服务时,可以按四部分理解实现:
| 部分 | 作用 |
|---|---|
| 工具定义 | 名称、说明、输入参数结构 |
| 通信层 | 用 SDK 接收和处理 MCP 请求 |
| 业务实现 | 调用库、系统命令、设备接口等 |
| 结果处理 | 返回数据、文本或错误 |
这个划分是开发视角,不是协议正式规定的“四个模块”。MCP 也不只有工具:服务端还可以提供 **Resources(上下文数据)**和 Prompts(可复用提示模板)。详见 MCP 架构说明 (opens new window)。
# 3. GitHub 上的 MCP 项目是干什么的?
很多项目是 MCP Server 的具体实现:把文件系统、数据库、画图软件等能力封装成标准工具。也有 SDK、客户端、示例和插件项目,不能只看名字判断。
以 npm 包 @drawio/mcp 为例,它提供可执行的 JavaScript 程序。安装包包含工具定义和执行代码,并不包含一个负责思考的大模型。
# 为什么需要 npm 或 npx?
因为要先获得并启动那段程序:
# 全局安装,之后可以通过命令启动
npm install -g @drawio/mcp
# 获取包并执行;已有缓存时通常可以复用
npx -y @drawio/mcp
2
3
4
5
npm install 是安装,npx 是执行包里的命令。使用 npx 不代表已全局安装。生产或隔离环境应固定版本,并提前准备依赖,避免运行时临时访问包仓库。
本次检查的客户端配置是:
[mcp_servers.drawio]
command = "npx"
args = ["-y", "@drawio/mcp"]
2
3
这是客户端的配置格式,不是 MCP 协议要求所有客户端使用的格式。建立连接时,客户端按配置启动程序。
# 它是进程,还是服务?
两者都是。进程描述程序如何运行,服务描述它向调用方提供什么能力。
本地 draw.io MCP 使用 stdio,通过标准输入和标准输出通信,没有启动一个 HTTP 接口端口:
AI 客户端 ⇄ stdin / stdout ⇄ 本地 Node.js MCP 进程
远程 MCP 服务通常使用 Streamable HTTP,客户端连接服务地址。启动时机、连接复用和退出管理由具体客户端决定。