模型上下文协议(MCP)完全指南:从AI代理痛点到实战开发

模型上下文协议(MCP)完全指南:从AI代理痛点到实战开发

🔍 MCP基础与核心价值(背景)

(一) AI代理的局限性

  • LLM原生能力边界 :大型语言模型(LLM)仅能生成文本/图像等内容,无法直接执行外部操作(如预订航班、调用API)。
    • 传统工具集成痛点 :第三方平台API接口标准不一(如航班查询接口可能为API/flightsflights/listlist-flights),需手动编写适配代码,扩展性极低。

(二) MCP的定义与定位

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

🤖 AI代理与MCP的关系(原理)

(一) AI代理工作流

  1. 用户输入解析:AI代理调用LLM识别用户意图(如"飞往伦敦"→提取目的地、日期等参数)。
  2. 工具选择:LLM协助确定需调用的第三方服务(如航班API、酒店数据库)。
  3. 数据交互:代理通过工具获取外部数据(如航班列表),结合用户偏好(如低价优先)。
  4. 决策执行: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),支持上下文保持(如长对话中的用户偏好记忆)。

(二) 客户端-服务器交互

  1. 能力发现 :客户端请求MCP服务器暴露资源/工具列表(如list_tools())。
  2. 工具调用 :客户端发送标准化请求(如调用search_flights工具)。
  3. 上下文传递:服务器返回结构化响应,客户端结合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(远程)
  1. 定义资源(Resource)
python 复制代码
@mcp.resource(type="file", name="airports")
def get_airport_info():
    return {"LAX": "洛杉矶国际机场", "JFK": "肯尼迪国际机场"}
  1. 定义工具(Tool)
python 复制代码
@mcp.tool(name="search_flights", description="查询航班信息")
def search_flights(origin: str, destination: str, date: str): 
     # 调用第三方API逻辑
     return [{"flight_no": "CA987", "price": 500}]
  1. 定义提示(Prompt)
python 复制代码
@mcp.prompt(name="find_best_flight", title="最优航班推荐")
def find_best_flight_prompt(preferences: dict):
    return f"根据用户偏好{preferences},从工具返回结果中选择最低价航班"
  1. 启动服务器
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(启发) 服务器通过客户端向用户请求补充信息 航班预订时询问用户"是否需要购买行李额"

(二) 典型应用场景

  1. 前端开发调试:MCP服务器提供浏览器控制台日志、HTML元素访问能力,AI代理自动定位UI bug。
  2. 数据工程:连接Stride/BigQuery等工具,AI代理分析缺失数据并生成清洗建议。
  3. 自动化运维:通过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限制文件系统访问范围。

参考

相关推荐
NAGNIP8 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab9 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab10 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP13 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年13 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼14 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS14 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
warm3snow14 小时前
Claude Code 黑客马拉松:5 个获奖项目,没有一个是"纯码农"做的
ai·大模型·llm·agent·skill·mcp
天翼云开发者社区15 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈15 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能