模型上下文协议 (MCP)
为 AI 应用构建的通用接口标准 —— AI 世界中的 "USB-C 端口"
什么是 MCP?
模型上下文协议(Model Context Protocol,简称 MCP)是一种开放标准,旨在标准化应用程序如何向大型语言模型(LLM)提供上下文信息。MCP 由 Anthropic 公司倡导并开发,为 AI 与外部数据源和工具之间建立安全、无缝的双向通信提供了框架。
本质上,MCP 是连接 AI 助手与数据所在系统的桥梁,可以类比为 AI 应用的 "USB-C 接口" —— 一个通用标准,允许不同系统轻松互连。
MCP 的关键作用是使 AI 系统能够:
- 动态访问外部数据源
- 调用外部工具和服务
- 在会话过程中实时交换信息
- 遵循统一的交互模式
MCP 的优势
简化集成
MCP 作为标准化连接器,只需集成一次即可潜在访问多个工具和服务,无需为每个 API 单独编写代码。
促进互操作性
通过定义 AI 应用程序如何交互和交换数据,MCP 为构建 AI 应用设置了统一标准。
动态发现
AI 模型可以动态发现可用工具并与之交互,无需硬编码每个集成的信息。
双向通信
支持持久的实时双向通信,类似于 WebSockets,AI 模型可以检索信息并动态触发操作。
降低复杂性
通过为 AI 服务创建通用协议,减少了开发人员的集成复杂性,并标准化了开发模式。
面向未来
随着新的 AI 工具和服务不断涌现,标准化协议有助于确保应用程序能够适应新技术,无需大规模重写。
MCP 如何工作
MCP 协议定义了一组标准的通信模式和数据结构,使 AI 模型能够与外部系统进行交互。以下是 MCP 的工作流程:
- 注册工具:开发者向 AI 系统注册工具和服务,包括它们的功能、参数和用途描述。
- 动态发现:AI 模型可以查询和发现可用的工具,了解它们的功能。
- 调用请求:AI 可以构造请求来调用特定工具,提供必要的参数。
- 执行操作:外部系统执行请求的操作并返回结果。
- 结果处理:AI 模型接收结果并将其整合到响应或后续操作中。
MCP 的通信格式基于结构化 JSON,包含元数据、参数和上下文信息,确保信息交换的一致性和可靠性。
MCP 使用示例
基础 MCP 工具定义示例
以下是一个简单的 MCP 工具定义,展示了如何创建一个能够获取当前天气信息的工具:
{
"tools": [
{
"name": "get_weather",
"description": "获取指定城市的当前天气信息",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
},
"output_schema": {
"type": "object",
"properties": {
"temperature": {
"type": "number",
"description": "当前温度(摄氏度)"
},
"conditions": {
"type": "string",
"description": "天气状况描述"
}
}
}
}
]
}
在这个基础示例中:
- 我们定义了一个名为
get_weather
的工具 - 指定了它需要一个城市名称作为输入
- 定义了它将返回包含温度和天气状况的对象
AI 模型可以通过这个定义了解工具的用途和如何调用它。
应用案例:简单天气查询机器人
这个基本工具可以构建一个天气查询机器人,用户只需询问特定城市的天气,AI 就会通过 MCP 调用天气 API 并返回结果。
中级 MCP 调用示例
下面是一个更复杂的示例,展示了 AI 如何调用已注册的工具并处理返回结果:
// 客户端发送给 AI 的消息
const userMessage = "我想了解上海明天的天气如何?";
// AI 检测到需要天气信息,构造 MCP 工具调用
const toolCallRequest = {
"id": "call_01",
"tool": "get_weather_forecast",
"parameters": {
"city": "上海",
"date": "2023-10-15"
}
};
// 工具执行并返回结果
const toolCallResponse = {
"id": "call_01",
"status": "success",
"result": {
"city": "上海",
"date": "2023-10-15",
"forecast": {
"temperature": {
"min": 18,
"max": 24
},
"conditions": "多云转晴",
"humidity": 65,
"wind": {
"speed": 12,
"direction": "东北"
}
}
}
};
// AI 处理结果并回复用户
const aiResponse = "根据最新预报,上海明天天气多云转晴,温度在18°C到24°C之间,湿度65%,东北风,风速12公里/小时。是个不错的天气!";
// 这整个流程遵循 MCP 协议完成
在这个中级示例中:
- AI 模型分析用户请求,识别需要天气预报信息
- 构造符合 MCP 格式的工具调用请求,包含必要参数
- 外部工具执行请求并返回结构化结果
- AI 将获取的信息整合到自然语言回复中
应用案例:旅行规划助手
这个中级示例可以用于构建旅行规划助手,协助用户基于天气预报做出旅行决策。
高级 MCP 应用示例
以下是一个高级示例,展示了多工具链式调用和复杂交互:
// 复杂业务场景:用户要求AI协助预订旅行
async function handleComplexTravelBooking() {
const userRequest = "我希望下周五从北京飞往上海,需要预订经济舱机票和一家靠近外滩的酒店,预算3000元以内";
// AI 使用 MCP 协议分析请求并规划任务链
const taskPlan = [
{ type: "search_flights", params: { from: "北京", to: "上海", date: "2023-10-20", class: "economy" } },
{ type: "search_hotels", params: { location: "上海外滩", check_in: "2023-10-20", check_out: "2023-10-22", max_price: 1500 } },
{ type: "prepare_booking_options", params: { combine_results: true } }
];
// 执行第一个任务:搜索航班
const flightSearch = await mcp.callTool("search_flights", taskPlan[0].params);
console.log("Flight search completed");
// 根据航班结果调整酒店搜索参数
if (flightSearch.results.length > 0) {
const selectedFlight = flightSearch.results[0];
taskPlan[1].params.check_in = selectedFlight.arrival_date;
// 执行第二个任务:搜索酒店
const hotelSearch = await mcp.callTool("search_hotels", taskPlan[1].params);
console.log("Hotel search completed");
if (hotelSearch.results.length > 0) {
// 执行第三个任务:准备预订选项
const bookingOptions = await mcp.callTool("prepare_booking_options", {
flights: flightSearch.results.slice(0, 3),
hotels: hotelSearch.results.slice(0, 3),
combine_results: true
});
// AI 生成综合建议
const recommendation = await mcp.callTool("generate_travel_recommendation", {
user_request: userRequest,
booking_options: bookingOptions.results,
budget_constraint: 3000
});
return {
status: "success",
recommendation: recommendation.text,
options: bookingOptions.results
};
}
}
return {
status: "error",
message: "无法找到满足您需求的旅行选项"
};
}
这个高级示例展示了:
- AI 如何将复杂用户需求分解为多步骤任务计划
- 基于前序调用结果动态调整后续任务参数
- 工具之间的数据传递和任务链执行
- 根据所有收集信息生成综合推荐
应用案例:企业智能助手
这个高级示例可以用于构建企业级智能助手,连接多个内部系统协助复杂业务流程。
高级 MCP 实现指南
最佳实践
- 精确定义工具功能:提供详细的工具描述和参数说明,帮助 AI 正确理解和使用工具。
- 实现错误处理:添加健壮的错误处理机制,确保工具调用失败时能够提供有用的反馈。
- 适当分解复杂功能:将复杂功能分解为简单的原子操作,可以提高复用性和可维护性。
- 设置合理的超时:对长时间运行的操作设置合理的超时时间,避免请求无限等待。
- 实现事务支持:对于需要多步操作的任务,考虑添加事务支持,确保操作的原子性。
安全考虑
- 权限管理:为工具设置细粒度的权限控制,限制 AI 可以访问的资源范围。
- 输入验证:严格验证所有工具输入参数,防止注入攻击和不安全的操作。
- 敏感数据处理:谨慎处理个人信息等敏感数据,确保符合隐私保护要求。
- 审计日志:记录所有工具调用操作,便于问题排查和安全审计。
- 资源限制:设置资源使用限制,防止恶意请求耗尽系统资源。
集成架构示例
MCP 在企业系统中的典型集成架构
交互式 MCP 构建器
使用下面的构建器创建你自己的 MCP 工具定义,了解 MCP 的结构和工作原理。