一、MCP
1. 什么是MCP?
MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 在 2024 年底推出的一种开放协议,被誉为 AI 领域的“USB 接口”。
它标准化了人工智能模型(LLM)与外部数据源、工具、开发环境(如本地文件、数据库、GitHub)的连接方式,旨在解决碎片化集成痛点,让 AI Agent 能像人类一样通过“手脚”访问和操作数据。
核心概览:
- 定义: 一种开放通信协议,旨在统一 AI 大模型与外部环境的对接标准。
- 类比:
- USB接口: 一种通用的“插口”,让 LLM 轻松连接不同的软件和数据源。
- AI 的手脚: 将 LLM 仅作为“说话的机器”提升为可以操作外界的 Agent。
- 应用场景:
- 读取私有数据: 安全访问个人或企业的本地文档、数据库。
- 工具调用: 执行编写代码、预订航班、更新 CRM 等具体动作。
- 上下文增强: 使模型获得最新的实时数据或深入的背景信息。
- 优势: 相比碎片化的集成,MCP 更安全(数据可保留在本地)、标准统一、减少适配成本。
MCP 的关键优势在于它提供了一种安全且标准化的一对多解决方案,连接起 Claude、GPT 等大模型与数百个外部服务
2. MCP底层原理
1 2 3 4 5 6 7 8 9
| 用户提问 → agent节点 ↓ LLM 分析意图(ReAct 推理) ↓ 判断是否需要调用工具 → 是 → 调用 MCP 工具 → 返回结果 ↓ 否 直接回答用户 ↓ 再次推理 → 判断是否需要更多工具 → 循环直到完成回答
|
ReAct = Reasoning + Acting(推理 + 行动),是 LLM 在面对复杂任务时的一种思维模式,能够在回答过程中不断分析和执行工具调用。
3. 案例
1. 安装 mcp 库
2. 实例化一个mcp服务
mcp = FastMCP(host=”172.24.112.1”, port=8001, name=”天气查询服务”)
3. 添加装饰器,将某个函数变成MCP工具
函数中的描述非常重要, 大模型会根据 描述 查找MCP工具
1 2 3 4 5
| @mcp.tool(name="weather_server") def query_weather(city: str) -> str: """获取指定地点的天气信息。参数为地点名称,例如:北京、上海""" return f"{city}的天气是晴朗,温度25度。"
|
4. 以 SSE 格式启动MCP服务
1
| mcp.run(transport="sse")
|
5. 在 Dify 中接入 MCP 服务
安装 MCP SSE / StreamableHTTP 工具, 配置 MCP 服务地址, 即可在 Dify 中调用 MCP 工具

- URL 为我们开发的 天气查询 MCP 工具
- 如果有多个 MCP 工具, 可以在 Dify 中添加多个 MCP 工具, 每个工具配置不同的 URL
1 2 3 4 5 6 7 8 9
| { "weather_server": { "transport": "sse", "url": "http://192.168.1.4:8001/sse", "headers": {}, "timeout": 150, "sse_read_timeout": 150 } }
|
6. 服务源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| import httpx from loguru import logger from mcp.server.fastmcp import FastMCP
QWEATHER_KEY = "07a3e395dxxxxxxxxxxxxxx8f1568656"
_BASE_GEO = "https://geoapi.qweather.com/v2/city/lookup" _BASE_NOW = "https://devapi.qweather.com/v7/weather/now"
mcp = FastMCP(host="192.168.1.4", port=8001, name="天气查询服务")
def _http_get(url: str, params: dict) -> dict | None: try: response = httpx.get(url, params=params, timeout=10) response.raise_for_status() return response.json() except httpx.TimeoutException: logger.error(f"请求超时:{url}") except httpx.HTTPStatusError as e: logger.error(f"HTTP 错误 {e.response.status_code}:{url}") except httpx.RequestError as e: logger.error(f"网络异常:{e}") except Exception as e: logger.error(f"响应解析失败:{e}") return None
@mcp.tool(name="weather_server") def get_weather(location: str) -> str: """获取指定地点的天气信息。参数为地点名称,例如:北京、上海""" location = location.strip() if not location: return "地点不能为空"
logger.info(f"查询天气:{location}")
geo_data = _http_get(_BASE_GEO, {"location": location, "key": QWEATHER_KEY}) if geo_data is None: return "请求失败,请稍后重试" if geo_data.get("code") != "200" or not geo_data.get("location"): logger.warning(f"未找到地点:{location},code={geo_data.get('code')}") return "没找到该位置的信息"
loc = geo_data["location"][0] location_id = loc["id"] location_name = loc["name"] logger.debug(f"匹配到地点:{location_name},id={location_id}")
weather_data = _http_get(_BASE_NOW, {"location": location_id, "key": QWEATHER_KEY}) if weather_data is None: return "请求失败,请稍后重试" if weather_data.get("code") != "200": logger.warning(f"天气接口错误码:{weather_data.get('code')}") return "天气服务返回数据异常"
now = weather_data["now"] logger.info(f"成功获取 {location_name} 天气数据") return ( f"{location_name} 当前天气:{now['text']}," f"气温 {now['temp']}°C,体感 {now['feelsLike']}°C," f"湿度 {now['humidity']}%,风向 {now['windDir']} {now['windScale']} 级," f"能见度 {now['vis']} km" )
if __name__ == "__main__": mcp.run(transport="sse")
|
二、 MCP 与 SKILL 的区别
MCP(Model Context Protocol)与 Skill 的核心区别在于 定位与职责。
- MCP 是 AI 的“手”,负责连接外部世界;
- Skill 是 AI 的“技能书”,告诉 AI 怎么处理业务
- 两者在 AI Agent 架构中是互补的,MCP 提供“触达”能力,Skill 提供“理解和执行”能力。
1. 本质定位
- MCP (模型上下文协议): 是一种通信协议和标准。它解决的是“如何连接”的问题,让 AI 能以统一的方式触达数据库、本地文件或远程 API。
- Skill (技能): 是一种高级 Prompt 或业务逻辑封装。它解决的是“如何思考/执行”的问题,是教模型在特定场景下按什么步骤去完成任务。
2. 核心差异对比
| 维度 |
MCP (模型上下文协议) |
Skill (智能体技能) |
| 主要功能 |
连接外部工具与数据:提供访问权限、标准化接口 |
封装业务流程:教模型逻辑思维和任务拆解 |
| 存在形式 |
通常需要运行一个 MCP 服务器进程 |
通常是 Prompt 集合或代码文件 的打包 |
| 比喻 |
AI 的“感官”和“手”,让它能看见并操作外部数据 |
AI 的“大脑认知”和“工作手册”,提升专业性 |
| 部署难度 |
较高,涉及服务器、安全策略和协议对接 |
较低,通常通过文件分发或配置导入即可使用 |
3. 二者的协同关系
在实际应用中,MCP 和 Skill 通常是 互补关系 而非替代关系 :
- Skill 调用 MCP:一个处理财务报表的 Skill(技能),会调用 MCP 协议去读取你的本地 Excel 文件(连接)。
- 分工合作:MCP 负责“触达”数据,Skill 负责“理解”数据并输出结果 。