什么是 MCP,什么时候使用 MCP
什么是 MCP
MCP(Model Context Protocol)是一个开放协议,用来标准化 AI 应用和外部系统之间的连接方式。它把“模型可以调用什么工具、读取什么数据、使用什么提示模板”定义成统一接口,让不同的 AI 客户端可以复用同一套服务。
可以把 MCP 理解成 AI 世界的“USB 接口”:
- MCP Server:暴露工具、资源和提示模板,例如 GitHub、数据库、Jira、监控平台。
- MCP Client:AI 应用或 Agent,负责发现并调用 Server 提供的能力。
- 传输层:常见有 stdio(本地进程)和 HTTP/SSE(远程服务)。
- 消息格式:JSON-RPC 2.0。
MCP 的核心能力
| 能力 | 作用 | 例子 |
|---|---|---|
| Tools | 可调用的函数 | run_test、query_database、create_issue |
| Resources | 可读取的数据 | 文件、日志、数据库表、文档 |
| Prompts | 可复用的提示模板 | 代码审查、故障排查、测试计划 |
| Sampling | 服务端请求模型生成 | 让 Agent 参与多步推理 |
| Roots | 限定可访问的目录或资源范围 | 只允许访问某个仓库 |
什么时候使用 MCP
适合使用 MCP 的场景:
多个 AI 客户端要复用同一套集成 例如公司内部有 Jira、测试平台、日志平台,希望 Claude、Cursor、ZCode 等客户端都能用同一套连接。
需要标准化工具发现和调用 工具有明确的输入输出 schema、权限和错误约定,而不是每个 Agent 写一套临时脚本。
需要访问外部系统 数据库、对象存储、监控、CI/CD、工单系统、知识库。
需要权限和审计 MCP Server 可以统一做鉴权、限流、审计和敏感操作控制。
需要长期运行的服务 远程 MCP Server 可以持续提供能力,而不是每次启动一个脚本。
什么时候不需要 MCP
- 一次性任务,用 CLI 或脚本更简单。
- 纯文本生成,不需要访问外部系统。
- 直接调用一个简单 HTTP API 就够,没必要增加协议层。
- 安全或合规不允许外部服务接入。
- 对延迟极其敏感,额外的协议层没有收益。
MCP 和 Function Calling 的区别
- Function Calling 是模型调用工具的一种机制:模型输出一个函数名和参数,由宿主执行。
- MCP 是工具和数据的接入协议:它解决的是“工具从哪里来、如何发现、如何鉴权、如何复用”。
两者可以配合:MCP Server 提供工具,宿主把工具暴露给模型,模型通过 function calling 调用。
设计一个 MCP Server 的要点
工具粒度 一个工具做一件事,参数清晰,避免“万能工具”。
Schema 用 JSON Schema 定义参数和返回值,必填项、类型、枚举写清楚。
幂等和副作用 查询类工具必须只读;写操作要支持幂等键或确认机制。
鉴权 使用最小权限,区分读写;敏感操作二次确认。
错误契约 区分参数错误、权限错误、业务错误和系统错误,返回可读信息。
可观测性 记录调用方、参数摘要、耗时、结果状态,避免记录密钥和敏感数据。
版本管理 工具名和参数变更要兼容,废弃要有过渡期。
示例:测试平台 MCP Server
可以暴露这些工具:
list_test_cases(project, module):查询用例run_test_case(case_id, env):执行用例get_run_report(run_id):获取报告query_logs(service, trace_id, start, end):查询日志create_bug(title, severity, evidence):创建缺陷
Agent 可以在一次排查中依次调用:查用例 → 执行 → 看报告 → 查日志 → 建缺陷。
在 ZCode 中搭建和检测 MCP
先分清 / 菜单和 MCP
ZCode 的 / 菜单主要展示:
- 命令,例如
/init - 计划模式
- 技能,例如
$brainstorming、$computer-use - 子智能体
MCP 工具通常不会在 / 菜单里逐条出现,而是以工具形式提供给 Agent,命名一般类似:
mcp__<server-name>__<tool-name>
所以:
- 看“用了什么 Skill”:输入
/,看“技能”分组。 - 看“用了什么 MCP”:看 MCP 服务器配置、连接状态和工具列表,或者看 Agent 实际调用的
mcp__...工具名。
如果某个 MCP Server 同时提供了 prompt 或 command,宿主可能会把它显示在 / 菜单里;但这不是 MCP 工具本身的常规入口。
如何搭建一个 MCP Server
准备 Server
可以是本地 stdio 进程,也可以是远程 HTTP/SSE 服务。Server 需要声明工具、资源或 prompt。
在 ZCode 中配置
典型配置是
mcpServers:{ "mcpServers": { "my-server": { "command": "node", "args": ["F:/path/to/server.mjs"], "env": { "TOKEN": "your-token" } } } }远程服务则使用 URL 和鉴权头。
重启或重新连接
在 ZCode 的 MCP 设置里确认 server 状态为 connected。
确认工具出现
工具列表中应出现
mcp__my-server__*,例如:mcp__my-server__health mcp__my-server__list_items mcp__my-server__run_task调用只读工具验证
先调用
health、list这类无副作用工具,确认参数、返回和错误处理正常,再测试写操作。
如何检测 MCP 是否接入成功
| 检查项 | 方法 |
|---|---|
| 配置是否生效 | 查看 ZCode MCP 设置或 mcpServers 配置 |
| 连接是否正常 | 看 server 状态是否为 connected |
| 工具是否注册 | 看工具列表是否有 mcp__<server>__ 前缀 |
| 参数是否正确 | 调用只读工具,检查 schema 和返回 |
| 鉴权是否通过 | 看 401/403、token、header 配置 |
| 是否有副作用 | 写操作先确认幂等和权限 |
| 日志是否报错 | 看启动、连接、超时、stderr |
| 是否被实际调用 | 看会话中的工具调用名和结果 |
如果工具没有出现:
- 检查
command是否可执行、args路径是否正确。 - 本地 stdio 模式要确认 Node/Python 路径和环境变量。
- 检查 Server 启动日志和 stderr,很多问题会在启动阶段直接报错。
- 远程模式检查 URL、证书、鉴权头和网络连通性。
- 修改配置后需要重启或重新连接 MCP。
Skill、MCP、Command 的检测入口
| 类型 | 怎么发现 | 怎么确认生效 |
|---|---|---|
| Skill | 输入 /,看“技能”分组 | 出现 $skill-name,来源和描述正确 |
| Command | 输入 /,看“命令”分组 | 选中后能执行对应动作 |
| MCP | 看 MCP 设置和工具列表 | 出现 mcp__server__tool,只读调用成功 |
一个实际检查顺序
- 输入
/,确认 Skill 和 Command 是否加载。 - 打开 MCP 设置,确认 server 是否 connected。
- 看工具列表是否有
mcp__...工具。 - 调用一个只读工具,确认鉴权和返回。
- 再看 Agent 的执行轨迹,确认它实际调用了哪个 Skill 或 MCP 工具。
面试回答模板
MCP 是一个标准化 AI 与外部系统连接方式的协议,包含工具、资源、提示模板等能力,常见传输是 stdio 和 HTTP。它适合多客户端复用、需要统一鉴权和工具发现的场景,比如测试平台、数据库、日志平台和工单系统。一次性脚本或简单 API 调用不需要 MCP。设计时重点考虑工具粒度、schema、幂等、权限、错误契约和可观测性。