一、MCP 解决的两个根本问题
大模型有两个结构性缺陷:训练数据有截止日期(如 GPT-3.5 Turbo 截止 2021 年 9 月),以及无法主动与外部系统交互------不能调用 API、查询数据库、执行状态变更操作。
MCP(Model Context Protocol)是 Anthropic 在 2024 年推出的开放协议,专门为解决这两个问题而设计。它在大模型与外部数据源、服务之间建立了标准化的通信通道,让静态的语言模型具备动态调用外部能力的基础设施。
二、MCP 的三个核心组件
MCP 架构由三个角色组成,各自职责清晰:
MCP Server 是能力提供方。每个 Server 封装一类资源或服务(本地文件系统、数据库、远程 API 等),通过 MCP 协议对外暴露工具列表。类比 HTTP 服务:Server 封装业务逻辑,通过协议提供访问入口。
MCP Client 是协议翻译层。负责将 MCP 协议的消息格式转换为 Host 应用可以理解的内容。类比各语言的 HTTP Client 库(Java 的 HttpClient、Python 的 requests),Client 屏蔽了协议细节,让 Host 专注于业务逻辑。
MCP Host 是使用方。任何集成了 MCP Client 的应用都可以作为 Host,例如 Claude Desktop、Cursor、Cline(VS Code 插件)。Host 负责将 Server 提供的工具列表格式化为 LLM 可理解的 prompt,接收 LLM 返回的 tool_calls 指令,再调用对应的 MCP Server 执行操作。
整个调用链路:Host 从 Server 获取工具列表 → 将工具列表注入 LLM prompt → LLM 返回 tool_calls JSON → Host 调用 Server 执行 → 返回结果给 LLM。
三、传输方式与消息格式
传输层有两种模式:
- STDIO:用于本地资源,MCP Server 作为子进程运行,通过标准输入输出通信。延迟低,适合访问本地文件系统、本地数据库等场景。
- SSE / Streamable HTTP:用于远程服务,通过 HTTP 长连接传输。MCP 协议 2025-03-26 版本起推荐用 Streamable HTTP 替代 SSE。
消息格式采用 JSON-RPC 2.0,定义三种消息类型:
request:Client 发给 Server 的操作请求,包含唯一id、方法名(如tools/call)和参数。response:Server 返回给 Client 的结果,包含与 request 相同的id及处理结果或错误信息。notification:单向通知,无需回应,通常由 Server 发给 Client,用于事件推送。
JSON-RPC 2.0 的优势在于语言无关、规范清晰、易于调试,这也是 MCP 能快速获得多语言生态支持的原因之一。
四、MCP vs Function Call:标准化的价值
Function Calling 是 OpenAI 提出的机制,允许开发者定义函数供 LLM 调用。两者目标相同,但实现层面有本质差异:
| 维度 | Function Call | MCP |
|---|---|---|
| 标准化程度 | 各模型平台自定义,实现不统一 | 开放协议,跨模型、跨平台通用 |
| 集成方式 | 每个模型平台单独对接 | 一次实现,多处复用 |
| 生态复用 | 无法跨平台共享 | 开源 Server 可直接复用 |
| 上下文保持 | 单次调用 | 支持跨应用/服务保持上下文 |
MCP 的类比是 USB Type-C:不同设备(模型)和不同外设(服务)通过同一标准接口互联。Function Call 则类似各厂商自定义的私有接口------功能相同,但无法互换。
OpenAI 后来也宣布支持 MCP,印证了统一标准的价值。
五、本地 MCP Server 配置实践
以 Claude Desktop 接入本地文件系统 MCP Server 为例,展示完整配置流程。
前置条件:安装 Node.js 环境。
配置文件 (claude_desktop_config.json):
json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/Users/username/Downloads"
]
}
}
}
将 username 替换为本机用户名,配置允许 MCP Server 访问桌面和下载文件夹。
操作路径:Claude Desktop → Settings → Developer → Edit Config → 写入上述配置 → 重启应用。
重启后点击锤子图标可查看 Server 提供的工具列表(list_allowed_directories、get_file_info、create_directory 等)。
使用示例:在 Claude Desktop 输入「把桌面上的所有图片移到新文件夹 picture」,LLM 会自动识别可用工具,依次调用文件系统操作完成任务。执行过程中会请求权限授权,需手动允许。
六、对测试工程师的实际意义
MCP 对测试开发工程师的价值在于低成本接入大模型能力:
从零训练或微调一个测试专用模型需要大量算力、人力和时间,并非个人或小团队能承担的。但开发一个 MCP Server,将测试服务、测试数据、测试工具暴露给大模型,成本极低------只需掌握 MCP Server 的开发方式。
具体场景:将接口测试框架封装为 MCP Server,让 LLM 直接调用执行测试;将测试数据库接入 MCP,让 LLM 查询历史缺陷数据辅助分析;将 CI/CD 系统接入 MCP,让 LLM 触发构建和部署流程。
现有支持 MCP 的 Host(Claude Desktop、Cursor、Cline 等)可以直接复用,无需重复开发 Host 层,专注于 Server 侧的业务封装即可。