什么是 MCP
MCP(Model Context Protocol,模型上下文协议)是一套连接 AI 应用与外部系统的开放协议。它通过统一的消息格式、能力协商和传输方式,让 AI 应用可以发现并使用外部服务器提供的工具、资源与提示模板。
本文依据 MCP 2026-07-28 规范和 MCP Python SDK v2 整理。MCP 仍在持续演进,运行旧项目时应先确认协议版本和 SDK 主版本。
官方资料:
可以把 MCP 类比为 AI 应用的“USB-C 接口”:它统一的是连接方式和交互协议,而不是替代模型、Agent、业务 API 或权限系统。

MCP 不是什么
理解 MCP 时,要避免几个常见误区:
| 误区 | 更准确的理解 |
|---|---|
| MCP 是一种模型 | MCP 与模型无关,不提供推理能力。 |
| MCP 就是工具调用 | 工具只是 MCP 服务端能力之一,MCP 还定义资源和提示模板等能力。 |
| MCP 可以替代 API | MCP Server 通常仍需调用数据库、HTTP API、文件系统或其他底层接口。 |
| 接入 MCP 后 Agent 就安全了 | MCP 统一通信,但权限、认证、参数校验、审计和人工确认仍需应用负责。 |
| 模型直接连接 MCP Server | 通常是 AI 应用中的 MCP Client 与 Server 通信,模型只看到宿主应用选择后提供的能力。 |
MCP 的核心架构

MCP 采用 Host—Client—Server 架构:
| 角色 | 职责 | 示例 |
|---|---|---|
| Host | 面向用户的 AI 应用,负责模型调用、权限策略、上下文管理和用户交互。 | IDE、桌面助手、Agent 应用 |
| Client | Host 内部与某个 MCP Server 建立会话的协议组件。通常一个 Client 对应一个 Server 连接。 | MCP SDK Client、LangChain MCP Adapter |
| Server | 对外暴露工具、资源、提示模板等能力。 | 文件系统服务、数据库服务、地图服务 |
| 外部系统 | MCP Server 实际访问的数据源或业务系统。 | 数据库、HTTP API、文件系统、浏览器 |
graph LR
U[用户] --> H[MCP Host / AI 应用]
H --> L[LLM]
H --> C1[MCP Client A]
H --> C2[MCP Client B]
C1 <-->|MCP| S1[MCP Server A]
C2 <-->|MCP| S2[MCP Server B]
S1 --> D1[文件系统 / 数据库]
S2 --> D2[地图 / 搜索 / 业务 API]
需要特别注意:MCP Host 才是安全与控制边界。Host 决定连接哪些 Server、向模型展示哪些能力、是否执行调用,以及是否需要用户确认。
MCP Server 提供的核心能力

MCP Server 最常见的三类能力是 Tools、Resources 和 Prompts。
| 能力 | 控制方 | 用途 | 例子 |
|---|---|---|---|
| Tools | 通常由模型选择、Host 批准并执行 | 执行计算或产生外部操作 | 查询天气、写文件、创建工单 |
| Resources | 通常由应用选择并读取 | 向上下文提供可寻址的数据 | 文档、配置、数据库 Schema |
| Prompts | 通常由用户或应用显式选择 | 提供可复用的消息模板和工作流入口 | 代码审查模板、周报模板 |
此外,协议还包含日志、进度通知、能力协商等机制;Client 侧还可选择支持采样(Sampling)、用户信息征询(Elicitation)等能力。是否支持某项能力,应以初始化阶段协商出的 capabilities 为准,不能默认对端全部支持。
MCP 与 Function Calling、API、Agent 的关系
graph TD
A[Agent / AI 应用] --> B[大模型 LLM]
A --> C[运行时与权限控制]
C --> D[本地函数 / LangChain Tool]
C --> E[MCP Client]
E --> F[MCP Server]
F --> G[数据库 / API / 文件系统]
四者处于不同层级:
- Function Calling / Tool Calling:模型输出“调用哪个工具及参数”的结构化决策;
- MCP:Host 与外部能力提供方之间的标准协议;
- API:真实业务系统提供的底层接口;
- Agent:把模型、上下文、工具、状态和执行循环组织起来的完整系统。
一次典型调用过程是:
1 | 用户提出目标 |
因此,MCP 标准化的是能力发现与调用链路,并不让模型绕过 Host 直接操作外部系统。
MCP 的价值与边界
主要价值
- 统一接入方式:不同 Host 可以使用同一种协议连接不同 Server;
- 动态能力发现:Client 可查询 Server 当前提供的工具、资源和提示模板;
- 关注点分离:Agent 负责决策,Server 负责对接具体外部系统;
- 跨语言与跨进程:协议不绑定单一编程语言,可用于本地进程或远程服务;
- 生态复用:同一个 Server 可以被多个兼容 MCP 的 Host 使用。
常见的“M×N 降为 M+N”是一种帮助理解的理想化比喻。实际项目仍可能需要处理认证、数据模型、版本兼容、错误语义和厂商扩展,因此不能把 MCP 理解成完全零适配的“即插即用”。
不适合强行使用 MCP 的情况
- 应用只调用一两个稳定的内部函数;
- Client 与能力实现位于同一进程,并且没有复用需求;
- 现有 REST / gRPC API 已能很好地满足确定性系统调用;
- 业务要求极低延迟,而额外的协议层没有带来足够收益。
MCP 的优势主要体现在:需要让多个 AI Host 以统一方式发现和调用可复用能力时。
本地 Server 与远程 Server
| 类型 | 常用传输 | 适用场景 | 注意事项 |
|---|---|---|---|
| 本地 MCP Server | stdio | 访问本机文件、命令行、IDE 或本地数据库 | Host 通常负责启动子进程;stdout 只能传协议消息 |
| 远程 MCP Server | Streamable HTTP | 云服务、团队共享能力、远程数据源 | 必须使用 HTTPS,并做好认证、授权和 Origin 校验 |
“访问本地资源只能运行本地 Server”并不是绝对规则:远程 Server 也可以访问它所在机器或网络中的资源。真正的区别是资源位于哪里、Server 运行在哪里,以及 Host 是否允许访问。
Python 快速开始
安装依赖
1 | pip install "mcp[cli]" |
MCP Python SDK v2 与 v1 的部分导入路径和 API 不兼容。旧项目升级前应阅读官方迁移指南,不要只修改版本号。
创建一个最小 MCP Server
1 | from mcp.server import MCPServer |
在 stdio 模式下,通常不需要手动提前启动 Server。Host / Client 会根据 command 和 args 创建子进程。
在 LangChain Agent 中加载 MCP 工具
1 | import asyncio |
langchain-mcp-adapters 的主要作用是把 MCP Server 暴露的工具转换为 LangChain Tool,并提供连接多个 Server 的客户端封装。它不是 MCP 协议本身。
安全建议
连接 MCP Server 相当于为 AI 应用增加外部能力,至少应做到:
- 只连接可信 Server,不直接运行来源不明的本地命令;
- 对文件、网络、数据库和命令执行采用最小权限;
- 在删除、付款、发布、发送等不可逆操作前要求人工确认;
- 不要把密钥写进提示词、日志或工具描述;
- 验证工具参数和返回值,不把工具输出自动视为可信内容;
- 远程 Server 使用 HTTPS、认证、授权和审计;
- 对工具调用设置超时、费用预算和最大重试次数。
小结
MCP 的核心不是“让模型拥有更多工具”,而是为 AI 应用与外部能力之间建立一个标准化、可协商的连接层:
Host 负责用户体验与安全控制,Client 负责协议通信,Server 负责暴露能力,模型负责推理与决策。
下一篇将介绍 MCP 的消息基础以及 stdio、Streamable HTTP 两种标准传输方式。