在大型语言模型(LLM)应用开发中,如何让模型安全、高效地与外部工具和数据源交互,是一个核心挑战。模型上下文协议(Model Context Protocol, MCP)正为此而生,它旨在为 LLM 与外部世界之间建立一套标准的通信规范。本文将首先解析 MCP
的核心原理,然后深入探讨在开源 LLM 应用开发平台 Dify
中,如何利用其丰富的 MCP
插件生态构建强大的 AI 应用。
理解基石:MCP 与 FastMCP
在深入 Dify
插件之前,我们首先需要理解 MCP
是什么,以及 FastMCP
如何简化了它的实现。
MCP 服务实现原理
MCP
是一种基于客户端-服务器架构的协议,它通过标准化的消息格式,让大语言模型能够发现并调用外部工具。其核心架构包含三部分:
- MCP Host: 用户的 AI 应用,如
Claude Desktop
或Cursor IDE
,负责接收用户指令并协调 LLM。 - MCP Client: 内嵌于
Host
中的中间件,负责与MCP Server
建立连接和通信。 - MCP Server: 提供具体功能的轻量级服务,它连接着数据库、API 等真实世界的数据和工具。
通信层面,MCP
协议基于 JSON-RPC 2.0
封装消息,并支持多种传输模式,如用于本地进程通信的 Stdio
,以及用于远程通信的 HTTP with SSE
和 Streamable HTTP
。目前,Streamable HTTP
因其灵活性和对现代网络协议的良好兼容性,成为推荐的主流传输方式。
功能上,MCP
服务器主要提供三类能力:
- 工具 (Tools): 可被调用的函数,如文件操作或 API 请求。
- 资源 (Resources): 类文件形式的数据,如数据库记录,通过 URI 标识。
- 提示 (Prompts): 预设的交互模板,用于规范 LLM 的输出。
FastMCP:Pythonic 的 MCP 框架
FastMCP
是一个高效的 MCP
协议 Python 实现框架。它将底层的 JSON-RPC
细节、Schema 构造和通信管理进行了高度抽象和封装。开发者无需关心复杂的协议细节,只需通过简单的 Python 装饰器,就能快速构建 MCP
服务。
例如,使用 @mcp.tool
装饰器可以轻松定义一个工具:
@mcp.tool
def multiply(a: float, b: float) -> float:
"""This tool multiplies two numbers."""
return a * b
FastMCP
还支持服务组合、中间件等高级特性,极大地简化了 AI 工具链的开发。
Dify 中的 MCP 插件生态
Dify
是一个开源的 LLM 应用开发平台,它深度集成了 MCP
协议,提供了一系列插件来连接和构建 MCP
服务。这些插件大致可以分为服务器端、客户端和 Agent
策略三类。
插件 | 介绍 | 类型 | GitHub 仓库 |
---|---|---|---|
Agent 策略(支持 MCP 工具) | 提供 Function Calling 和 ReAct 策略,支持 MCP 工具发现和调用。 |
基础 | dify-plugin-agent-mcp_sse |
MCP SSE / StreamableHTTP | 作为 MCP 客户端,通过 HTTP with SSE 或 Streamable HTTP 发现和调用工具。 |
基础 | – |
MCP Agent 策略 | 仅支持 Function Calling 策略的 Agent ,用于调用 MCP 工具。 |
基础 | – |
MCP server | 将 Dify 的工作流或对话流发布为一个 MCP 服务器。 |
基础 | dify-plugin-mcp_server |
MCP Compatible Dify Tools | 将 Dify 内置工具的 API 转换为 MCP 兼容的 API。 |
基础 | dify-plugin-mcp_compat_dify_tools |
使用时配置的 MCP 工具 | 一个 MCP 客户端,其服务地址在使用时动态配置。 |
基础 | – |
Nacos MCP | 从 Nacos 注册中心发现并调用 MCP 服务。 |
应用 | nacos-dify-plugins |
AntV 可视化图表 | 基于 AntV 的图表生成 MCP 服务。 |
应用 | mcp-server-chart |
HelloDB | 数据库查询助手,将数据库能力封装为 MCP 服务。 |
应用 | HelloDB Wiki |
DataFocus | 提供幻觉可控的 Text2SQL 和 ChatBI 插件。 |
应用 | – |
核心插件使用指南
插件类型一:将 Dify 应用发布为 MCP 服务
这类插件的目标是将你在 Dify
中创建好的能力(如工作流、对话流或单个工具)暴露为标准的 MCP
服务,供其他 MCP
客户端调用。
- MCP server: 这个插件可以将一个完整的
Dify
工作流或对话流封装成一个MCP
服务器。配置端点后,外部应用就能像调用一个原生MCP
服务一样,与你的Dify
应用交互。
- MCP Compatible Dify Tools: 如果你不想暴露整个工作流,只想将
Dify
的某个原生工具(如获取当前时间)发布为MCP
服务,这个插件是最佳选择。
插件类型二:在 Dify 中调用外部 MCP 服务
这类插件扮演 MCP
客户端的角色,让你的 Dify
应用能够调用外部的 MCP
服务。
- MCP SSE / StreamableHTTP: 这是一个标准的
MCP
客户端工具。你只需提供MCP
服务的地址,它就能自动发现该服务提供的所有工具,并在Dify
工作流中直接调用。 - 使用时配置的 MCP 工具: 与上一个插件功能类似,但它提供了更高的灵活性,允许在每次调用时动态配置
MCP
服务地址。
插件类型三:Agent 策略
Agent
是 Dify
工作流中的大脑,它决定了如何规划和执行多步任务。MCP
策略插件赋予了 Agent
调用 MCP
工具的能力。
- Agent 策略(支持 MCP 工具): 这是功能最全面的
Agent
策略插件。它同时支持Function Calling
和ReAct
两种模式。- Function Calling: 模型直接决定调用哪个工具并执行。
- ReAct: 模型会进行“思考-行动-观察”的循环,更适合处理复杂、需要多步推理的任务。
- MCP Agent 策略: 这是一个更轻量级的
Agent
策略,它仅支持Function Calling
模式。如果你的任务逻辑相对简单,直接调用工具即可完成,那么这个插件是更高效的选择。
技术细节:SSE 与 Streamable HTTP 的抉择
MCP
协议支持多种传输方式,其中 HTTP with SSE
和 Streamable HTTP
是远程通信的两种主要选择。
比较维度 | HTTP with SSE (Server-Sent Events) | Streamable HTTP (可流式传输的普通 HTTP/Fetch) |
---|---|---|
协议层 | 基于 HTTP/1.1 长连接,封装了事件帧语法。 | 标准 HTTP,依赖分块传输编码,无固定帧格式。 |
通信方向 | 单向(服务器 → 客户端)。 | 可双向。 |
浏览器 API | EventSource 对象,内置自动重连。 |
fetch() + ReadableStream ,重连需自写逻辑。 |
帧/消息格式 | 文本格式,支持事件分组与 ID。 | 格式自由,可传 NDJSON 、二进制分片等。 |
心跳与重连 | 内部支持。 | 需自行实现。 |
典型场景 | 实时通知、日志推送。 | AI token 流式返回、大文件下载。 |
优劣概括 | 实现简单,但仅单向/纯文本。 | 灵活高效,但需自行处理错误恢复。 |
选择建议: 除非需要兼容旧版实现,否则应优先选择 Streamable HTTP。它更灵活,能更好地利用 HTTP/2
和 HTTP/3
的多路复用优势,是现代 MCP
应用的首选传输方案。
MCP 生态系统:服务与平台
MCP
的价值在于其生态。除了 Dify
,还有许多平台和服务为 MCP
提供了支持。
阿里云与 ModelScope
阿里云和其 ModelScope
社区提供了丰富的 MCP
资源,包括:
- ModeScope MCP 广场: 聚合了大量优质的
MCP
资源,拓展模型的能力边界。
- ModelScope MCP 实验场: 提供了在线环境,用于探索开源模型与
MCP Server
的自由组合。
- 百炼 MCP 服务: 阿里云百炼平台提供全周期的
MCP
托管与市场服务。
第三方 MCP 托管平台
如果你不想自己部署和维护 MCP
服务器,可以考虑使用第三方托管平台。
平台名称 | 介绍 | 链接 |
---|---|---|
Composio | 面向开发者的专业 MCP 托管平台,提供上百种预集成工具和企业级功能。 |
https://mcp.composio.dev/ |
Zapier MCP | 将 MCP 接入其庞大的 7000+ 应用生态,适合快速连接各类办公和企业软件。 |
https://zapier.com/mcp |
MCP.so | 社区驱动的 MCP 聚合平台,提供大量示例和 Playground,适合学习和实验。 |
https://mcp.so/playground |
这三者定位各不相同:Composio
强调专业托管与生产级应用;Zapier MCP
侧重于连接其庞大的应用生态,实现低代码自动化;而 MCP.so
则是学习和原型验证的绝佳社区资源。