模型上下文协议(MCP)完全指南:从AI代理痛点到实战开发
🔍 MCP基础与核心价值(背景)
(一) AI代理的局限性
- LLM原生能力边界 :大型语言模型(LLM)仅能生成文本/图像等内容,无法直接执行外部操作(如预订航班、调用API)。
-
- 传统工具集成痛点 :第三方平台API接口标准不一(如航班查询接口可能为
API/flights、flights/list或list-flights),需手动编写适配代码,扩展性极低。

- 传统工具集成痛点 :第三方平台API接口标准不一(如航班查询接口可能为
(二) MCP的定义与定位
- 全称 :模型上下文协议(Model Context Protocol)
- 核心功能 :为AI代理提供与第三方平台交互的标准化上下文,定义工具调用、数据格式及通信规则。
- 类比 :可视为AI代理与外部系统交互的"API使用说明书 ",解决跨平台兼容性问题。

🤖 AI代理与MCP的关系(原理)
(一) AI代理工作流
- 用户输入解析:AI代理调用LLM识别用户意图(如"飞往伦敦"→提取目的地、日期等参数)。
- 工具选择:LLM协助确定需调用的第三方服务(如航班API、酒店数据库)。
- 数据交互:代理通过工具获取外部数据(如航班列表),结合用户偏好(如低价优先)。
- 决策执行:LLM分析数据后生成决策,代理执行操作(如预订航班)并反馈结果。
(二) MCP的解决痛点
| 无MCP场景 | 有MCP场景 |
|---|---|
| 需为每个API编写定制化适配代码 | 统一遵循MCP标准,代理自动适配各类服务 |
| 工具调用格式混乱(参数/响应不统一) | 标准化工具定义(输入输出schema、描述) |
| 无法动态发现第三方服务能力 | MCP服务器暴露工具列表,支持自动发现 |
🏗️ MCP架构与核心组件(技术细节)
(一) 架构 overview
- 客户端-服务器模型:
- MCP客户端:嵌入AI代理(如IDE插件Cursor、Windsurf),发起工具调用请求。
- MCP服务器:提供标准化接口,封装第三方服务能力,响应客户端请求。
- 传输协议 :支持HTTP (远程通信)和标准IO(本地进程通信)。
(二) 三大核心组件
| 组件 | 定义 | 示例 |
|---|---|---|
| 资源(Resources) | 静态数据或元信息,供AI决策参考 | 机场代码列表、退改签政策、城市天气数据 |
| 工具(Tools) | 可执行操作接口,封装第三方API调用 | 航班搜索(输入:起止地/日期;输出:航班列表)、座位选择 |
| 提示(Prompts) | 预定义指令模板,优化LLM交互效果 | "作为旅行助手,调用search_flights工具时需指定origin/destination/date参数,日期格式为YYYY-MM-DD" |
📋 MCP规范与通信协议(标准)
(一) 核心规范要求
- 通信格式 :采用JSON RPC 2.0协议,请求需包含:
jsonrpc: "2.0"(固定版本)method: 调用的工具名称(如"search_flights")params: 输入参数(如{"origin":"LAX","destination":"JFK"})id: 请求唯一标识- 状态要求 :连接必须有状态(Stateful),支持上下文保持(如长对话中的用户偏好记忆)。
(二) 客户端-服务器交互
- 能力发现 :客户端请求MCP服务器暴露资源/工具列表(如
list_tools())。 - 工具调用 :客户端发送标准化请求(如调用
search_flights工具)。 - 上下文传递:服务器返回结构化响应,客户端结合LLM分析结果执行下一步操作。
🛠️ MCP实战开发(操作指南)
(一) 环境准备-
开发工具 :Python + fast-mcp SDK(官方推荐)
- 依赖安装 :
uv add mcp(通过uv包管理器安装MCP核心库) - Lab环境:提供VS Code服务器、Root Code AI助手及预配置API密钥(如OpenAI兼容接口)。
(二) 服务器开发步骤
1. 初始化服务器
python
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(transport="stdio") # 传输方式:标准IO(本地)或HTTP(远程)
- 定义资源(Resource)
python
@mcp.resource(type="file", name="airports")
def get_airport_info():
return {"LAX": "洛杉矶国际机场", "JFK": "肯尼迪国际机场"}
- 定义工具(Tool)
python
@mcp.tool(name="search_flights", description="查询航班信息")
def search_flights(origin: str, destination: str, date: str):
# 调用第三方API逻辑
return [{"flight_no": "CA987", "price": 500}]
- 定义提示(Prompt)
python
@mcp.prompt(name="find_best_flight", title="最优航班推荐")
def find_best_flight_prompt(preferences: dict):
return f"根据用户偏好{preferences},从工具返回结果中选择最低价航班"
- 启动服务器
python
mcp.run() # 默认监听标准IO,HTTP模式需指定端口:mcp.run(transport="http", port=8080)
(三) 客户端配置
- IDE集成:通过mcp.json文件配置服务器连接信息,示例:
python
{
"mcp_servers": [
{
"id": "flight-booking",
"command": "uv run python server.py",
"env": {"API_KEY": "xxx"}
}
]
}
- 核心功能:支持资源读取(read_resource("airports"))、工具调用(call_tool("search_flights", params))及提示获取(get_prompt("find_best_flight"))。
💡 MCP高级特性(进阶)
(一) 客户端三大核心能力
| 能力 | 定义 | 应用场景 |
|---|---|---|
| Roots(根目录共享) | 客户端向服务器暴露本地文件系统路径 | AI代理读取项目代码(如Git历史、日志文件)进行调试 |
| Sampling(采样) | 服务器请求客户端调用LLM处理数据 | 服务器将航班列表发送给LLM,由其生成自然语言总结 |
| Elicitation(启发) | 服务器通过客户端向用户请求补充信息 | 航班预订时询问用户"是否需要购买行李额" |
(二) 典型应用场景
- 前端开发调试:MCP服务器提供浏览器控制台日志、HTML元素访问能力,AI代理自动定位UI bug。
- 数据工程:连接Stride/BigQuery等工具,AI代理分析缺失数据并生成清洗建议。
- 自动化运维:通过MCP访问监控系统,自动识别异常指标并执行恢复操作。
动手实践
MCP Labs for Free: https://kode.wiki/4lFwf5p
可以看到右手边已经起来配置远程的MCP

输入: Search for flights from LAX to JFK using the flight-booking server

点击VSCode 左下角的Approve就开始执行MCP

📝 补充细节
- MCP与LangChain的关系:MCP专注于外部系统交互标准化,可与LangChain等框架结合,增强代理的工具调用能力。
- 安全考量:远程MCP服务器需配置认证机制(如API密钥),客户端通过roots限制文件系统访问范围。
参考
- https://www.youtube.com/watch?v=RhTiAOGwbYE
- MCP Labs for Free: https://kode.wiki/4lFwf5p