MCP 概览与实践
MCP(Model Context Protocol,模型上下文协议) 是 Anthropic 发起、社区维护的开放标准,用统一方式把 LLM 应用 接到 外部数据与工具。本篇建立最小心智模型:它和 Agent 内置工具有什么不同、架构长什么样、何时该用。Agent 循环见 Agent 核心概念与架构;多 Agent 协作见 A2A 概览与协议。
MCP 解决什么问题
| 痛点 | 没有 MCP | 有 MCP |
|---|---|---|
| 接 Git / DB / API | 每个宿主各写一套 adapter | Server 一次实现,多宿主复用 |
| 工具 schema | 各家格式不一 | 统一 Tools / Resources / Prompts 原语 |
| 权限与边界 | 散落各处 | Host 管控连接与用户确认;远程鉴权走 Web 标准(OAuth / API Key 等) |
| 生态 | N×M 集成 | Server 生态 + Client 生态解耦 |
一句话:MCP 是「模型应用 ↔ 外部世界」的标准插头,不是 Agent 框架本身。
架构:Host / Client / Server
┌─────────────────────────────────────────────┐
│ Host(Cursor、Claude Desktop、自研 App) │
│ ├─ Client 1 ──JSON-RPC──→ MCP Server A │
│ ├─ Client 2 ──JSON-RPC──→ MCP Server B │
│ └─ Client 3 ──JSON-RPC──→ MCP Server C │
└─────────────────────────────────────────────┘
│
▼
各 Server 访问真实资源(文件 / DB / HTTP)
| 角色 | 职责 |
|---|---|
| Host | 跑 LLM 的应用进程;管理 Client 生命周期、权限、用户确认 |
| Client | Host 内 1:1 连一个 Server 的连接器;维护会话、转发请求 |
| Server | 暴露能力的一方:工具、资源、提示模板等 |
典型流程(有状态版本):initialize 协商版本与能力 → 正常请求/响应 → 可选通知(如资源变更)→ 结束会话。较新的规范在向 无会话握手的 stateless 模型演进——面试答「有 initialize 协商」仍常见,提一句版本在变即可。
三大 Server 原语
| 原语 | 是什么 | 谁控制 | 典型例子 |
|---|---|---|---|
| Tools | 可调用的函数(带 JSON Schema),可有副作用 | 模型(发现并决定何时调用;Host 可要求用户确认) | search_docs、run_sql、create_issue |
| Resources | 只读数据(URI 标识),供应用拉取后塞进上下文 | 应用 / Host | 文件内容、表结构、配置片段 |
| Prompts | 可复用提示 / 工作流模板(可带参数) | 用户(显式选用,如 slash command) | 「按团队规范写 PR 描述」 |
Client 侧还可提供 Elicitation(Server 向用户追问)。历史上还有 Sampling(Server 反向请 Host 调模型)、Roots(声明文件系统边界)——规范 2026-07-28 已将二者标为 deprecated,面试点到「曾有、正在淘汰」即可。
与 Agent 内置工具的关系
| 维度 | Agent 内手写 Tool Registry | MCP |
|---|---|---|
| 边界 | 同进程 / 同代码库 | 跨进程、跨语言、可独立部署 |
| 复用 | 绑死在当前项目 | Server 可被 Cursor、Claude、自研 Host 共用 |
| 适合 | 业务强耦合、极低延迟 | 通用能力(文件、Git、DB、SaaS) |
| 组合 | 常与 MCP 并存 | MCP Tool 可注册进 Agent 的 tool list |
实践上常见:核心业务工具自研 + 通用集成走 MCP Server。
传输与安全
| 传输 | 场景 |
|---|---|
| stdio | 本地子进程 Server(CLI 工具包装) |
| Streamable HTTP | 远程 Server、多客户端 |
| (历史)HTTP+SSE | 旧版远程传输,已被 Streamable HTTP 取代 |
安全要点(生产必谈):
- Host 控制 连哪些 Server、用户是否批准敏感操作
- Server 最小权限:只暴露必要 Tools/Resources
- 远程 Server 走 HTTPS + OAuth / API Key 等标准 Web 鉴权(鉴权在传输/应用层,不只靠 Host)
- 日志脱敏:工具参数里常有 PII
最小配置直觉(以 Cursor 为例)
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed"]
}
}
}
command+args:启动本地 stdio Server- 也可配置 URL 连接远程 HTTP Server
- 上例末尾路径是 Server 启动参数里的目录白名单(别把整盘放开);勿与已弃用的协议能力 Roots 混为一谈
vs A2A:别混层
| MCP | A2A | |
|---|---|---|
| 连接谁 | 应用(Host)↔ 工具/数据 Server | Agent ↔ Agent |
| 抽象 | Tools、Resources、Prompts | Task、Message、Agent Card |
| 类比 | USB 设备协议 | 同事之间派活、对进度 |
二者 互补:Agent 用 MCP 拿工具,用 A2A 找别的 Agent 协作。详见 A2A 概览与协议。
何时用 / 不用
| 信号 | 建议 |
|---|---|
| 要接 Git、DB、Issue 跟踪等通用系统 | 优先找现成 MCP Server |
| 工具逻辑与业务域强绑定、毫秒级同进程 | 自研函数工具即可 |
| 多产品要共用同一套集成 | 抽成 MCP Server |
| 只是单次 HTTP 调用、无复用 | 不必为 MCP 而 MCP |
| 需要 Agent 之间分工 | 看 A2A,不是 MCP |
常见误解
- 「MCP = Agent」——MCP 只管 上下文与工具接入,不管规划循环
- 「上了 MCP 就不用写工具」——仍要设计 schema、鉴权、错误语义
- 「MCP 和 function calling 冲突」——MCP 是 交付工具的方式,function calling 是 模型选工具的机制,常一起用
- 「所有 Server 都可信」——Host 必须当 零信任客户端,审 Server 来源与权限
面试速记
- MCP 是什么? 开放协议,标准化 LLM 应用连接外部数据与工具;基于 JSON-RPC,角色为 Host / Client / Server。
- 三大原语? Tools(模型调用)、Resources(应用拉取的只读上下文)、Prompts(用户选用的模板);控制方不同是常考点。
- 和 Agent 工具的区别? MCP 强调 跨宿主复用与进程边界;Agent 内置工具适合强耦合业务逻辑。
- 和 A2A 的关系? 互补:MCP 连工具与数据,A2A 连 Agent 与 Agent。
- 生产要注意什么? 权限白名单、鉴权、敏感操作确认、日志脱敏、Server 供应链可信。