微信扫码
添加专属顾问
我要投稿
深入解析Dify平台中MCP插件的核心功能与实现原理,助你快速掌握AI工具集成技巧。 核心内容: 1. Dify平台四大MCP插件类型详解 2. Function Calling与ReAct两种Agent策略对比 3. FastMCP服务的协议实现与工具转换机制
本文使用dify v1.5.0版本,主要介绍了Dify中的MCP相关插件及FastMCP服务实现原理。Dify中的MCP相关插件主要包括4类:(1)扩展插件类型:将Dify应用(工作流、对话流或工具)发布为MCP服务;(2)工具插件类型:通过HTTP with SSE
或Streamable HTTP
方式来调用MCP服务;(3)Agent策略插件类型:Dify工作流中有个Agent节点,不同的Agent策略决定了系统如何规划和执行多步工具调用。(4)工具插件类型:偏向垂直领域的应用(如Text2SQL
等)。
注解:
FunctionCalling
(MCP工具):Function Calling
是一个基本的Agent
策略,模型将使用提供的Dify和MCP工具来执行任务。
ReAct
(支持MCP工具):ReAct
是一个基本的Agent策略,模型将使用提供的Dify 和MCP工具来执行任务。
提供 Function Calling
和 ReAct
的 Agent 策略集合(支持通过 HTTP with SSE
或 Streamable HTTP
传输方式使用 MCP
协议来发现和调用工具
)。简单理解,该插件的功能是在Agent节点中支持MCP工具调用,包括Function Calling
和 ReAct
这2种 Agent 策略。
(1)选择Agent策略
(2)配置工具列表和MCP服务
说明:MCP服务配置JSON格式以官方文档为准。
通过 HTTP with SSE
或 Streamable HTTP
传输方式使用 MCP 协议来发现和调用工具。简单理解,该插件功能相当于一个MCP客户端,使用 MCP 协议来发现和调用工具。
支持 MCP 工具调用和普通 function call 的 Agent 策略。简单理解,该插件的功能是在Agent节点中支持MCP工具调用,仅支持Function Calling这种 Agent 策略(不支持ReAct)。
使Dify工作流或对话流成为一个MCP服务器。简单理解,该插件功能是把Dify的工作流或对话流发布为MCP服务。
(1)配置端点
(2)Cherry Studio配置MCP服务
该插件的作用是将Dify工具的API转换为MCP兼容API,比如把当前时间工具转换为MCP兼容的API。简单理解,该插件功能是把Dify工具发布为MCP服务。
(1)配置端点
(2)Cherry Studio配置MCP服务
通过HTTP with SSE传输使用MCP协议来发现和调用工具,使用时配置。简单理解,该插件功能相当于一个MCP客户端,使用 MCP 协议来发现和调用工具。
比较维度 | HTTP with SSE(Server-Sent Events) | Streamable HTTP(可流式传输的普通 HTTP/Fetch) |
---|---|---|
如果只需要从服务器向浏览器单向推送小型文本事件(例如实时日志、股票行情、简单进度条),希望最小化客户端代码、享受自动重连,SSE 是“拿来就能用”的方案。
当需要传输二进制或大批量数据(AI 推理逐 token、音视频分片、长文档增量渲染),或者想在 HTTP/2/3 单连接里同时复用多条流、并可能在同一会话内回传数据,则常规流式 HTTP(可配合 ReadableStream
、WebTransport、gRPC-Web 等)更合适。
总结:除非为了兼容旧版实现,MCP 客户端应使用 Streamable HTTP 并在需要流式返回时读取其内部的 SSE 事件;纯 SSE 通道仅作历史遗留支持,不再推荐作为首选方案。
聚合优质MCP资源,拓展模型智能边界。https://www.modelscope.cn/mcp
探索开源模型与 MCP Server 的自由组合和碰撞。https://www.modelscope.cn/studios/modelscope/mcp-playground
了解和学习 MCP 、观摩和交流最佳实践。https://modelscope.cn/brand/view/MCP
在Cherry Studio里集成ModelScope托管的MCP服务。https://modelscope.cn/docs/mcp/cherry-studio
阿里云百炼全周期 MCP 服务。https://bailian.console.aliyun.com/?tab=mcp#/mcp-market
MCP 托管平台,就是托管 MCP 服务的第三方平台,相当于不用自己部署服务器,直接用它们提供的现成服务地址就能跑。平台提供一个 MCP endpoint,AI 客户端直接连。
Composio
、Zapier MCP
和 MCP.so
都是 MCP托管平台,但定位和侧重点不同:
Composio
是面向开发者和企业的专业 MCP 托管平台,提供细粒度权限管理、OAuth
授权、一键接入上百种工具,适合构建生产级 AI 工具调用系统;
Zapier MCP
则将 MCP 接入其庞大的自动化工作流生态(7000+应用),适合希望在 AI 中调用日常办公或企业应用(如Gmail
、Slack
、Sheets
)的人群,低代码、易上手;
MCP.so
是一个开放社区平台,主要提供 MCP server
和客户端的示例、Playground
演示和教程,适合开发者学习、试验和快速原型验证,不用于正式生产环境。
总结就是,Composio
专业托管,Zapier
强连接生态,MCP.so
便于学习试验。
MCP(Model Context Protocol
,模型上下文协议)服务的实现原理基于客户端-服务器架构,通过标准化的协议层和灵活的传输层,实现大型语言模型(LLM)与外部数据源、工具的无缝交互。
MCP服务器采用三层结构:
MCP Host:用户使用的AI应用程序(如Claude Desktop、Cursor IDE等),负责接收用户输入并协调LLM处理请求。
MCP Client:内置在Host中的中间件,负责与MCP Server建立连接,管理请求和响应。Client 与单个 Server 通常维持一对一连接,多个 Client 可并发连接多个 Server。
MCP Server:提供具体功能的轻量级服务,连接数据源或工具(如数据库、文件系统、API等),执行操作并返回结果。
MCP协议层基于 JSON-RPC 2.0 封装消息,支持3种传输模式:
Stdio(标准输入/输出):用于本地进程间通信,通过标准输入输出管道传输 JSON-RPC 消息,适用于命令行工具或容器化部署场景。
HTTP-SSE(Server-Sent Events):用于远程通信,客户端通过 HTTP POST 发起请求,服务器以 SSE 流形式推送响应,支持实时、逐步返回数据。
Streamable HTTP:作为对 HTTP-SSE 的现代替代方案,兼容标准 HTTP 流式传输语义(如分块传输、HTTP/2 多路复用等),不依赖特定帧格式,支持更灵活的数据结构与更高效的连接管理,是当前 MCP 推荐的主流远程传输方式。
通信流程示例:
客户端发送初始化请求(如initialize
),协商协议版本和功能支持。
服务器返回工具列表(通过tools/list
),客户端缓存可用功能。
客户端调用工具(如tools/call
),服务器执行操作并返回结果。
MCP服务器提供三类核心功能:
工具(Tools):可执行函数(如文件操作、API调用),需用户授权,输入输出通过JSON Schema定义。
资源(Resources):类文件数据(如数据库记录、API响应),通过URI标识,支持动态查询。
提示(Prompts):预设模板,优化LLM输出(如格式化报告生成)。
权限控制:通过启动标志(如--allow-write
、--allow-admin
)分级启用功能组,限制服务器操作范围。
认证与隔离:凭据通过环境变量传递,推荐为MCP服务器创建专用账户,附加最小权限策略。
数据安全:敏感数据(如API密钥)不离开原始存储位置,分析在数据源内部完成。
语言与SDK:官方提供Python、TypeScript等SDK,社区支持Go、Rust等。例如,MinIO的MCP服务器使用Go实现,利用MinIO SDK与对象存储交互。
部署方式:通常以Docker容器分发,简化依赖管理和跨平台部署。
流式传输:支持增量响应(如SSE模式),减少延迟。
动态工具发现:客户端缓存工具列表,仅当服务器通知变更时更新。
分层设计:协议层与传输层解耦,适配不同环境(如本地/云端)。
总结:MCP服务的核心是通过标准化协议将自然语言请求转换为机器可执行的操作,同时确保安全性和扩展性。其设计充分考虑了AI应用的动态需求,如实时交互、多工具协同等,是LLM生态中的关键基础设施。
FastMCP 是一个基于 MCP(Model Context Protocol
)协议的高效 Python 框架,通过协议封装、模块化设计、动态交互与企业级扩展四大机制,将复杂的 MCP 协议标准化并高度抽象化,使开发者能以 Pythonic 的方式构建和调用 AI 工具链。其核心目标是在保持灵活性的同时,隐藏底层协议细节,让开发者专注于业务逻辑与用户体验,从而简化 AI 工具与大型语言模型(LLM)的交互开发。
FastMCP 是对 MCP 协议的 Python 高层框架实现,对底层协议进行抽象封装,隐藏通信细节与 Schema 构造,使开发者无需深入 MCP 的 JSON-RPC 细节,即可快速构建工具、资源和提示服务。
MCP 协议:定义 LLM 与外部工具交互的标准(类似 HTTP 之于 Web),包含 Tools(工具)、Resources(资源)、Prompts(提示) 三大核心组件。
FastMCP 的封装:通过装饰器(如 @mcp.tool
)自动生成 MCP 所需的 Schema,并处理底层通信(如 JSON 序列化、错误处理)。
(1)工具(Tools)
定义:工具是可被 LLM 调用的函数(同步/异步),用于执行特定任务(如 API 调用、计算)。
实现方式:使用 @mcp.tool
装饰器注册,支持类型注解(自动转换为 MCP Schema)。
@mcp.tool
defmultiply(a: float, b: float) -> float:
return a * b
Context
对象实现多轮用户引导(Elicitation),例如动态请求缺失参数。(2)资源(Resources)
定义:提供只读数据源(如数据库、文件),通过 URI 模板动态访问。
实现方式:使用 @mcp.resource
装饰器,支持缓存和实时数据注入。
@mcp.resource("weather://{city}/today")
asyncdefget_weather(city: str):
returnawait fetch_weather_api(city)
(3) 提示(Prompts)
定义:标准化 LLM 交互模板,确保输入输出格式一致。
实现方式:使用 @mcp.prompt
装饰器,自动处理类型转换(如JSON字符串→Python对象),常用于结构化输出约束(如摘要生成、报告规范)。
@mcp.prompt
defanalyze_users(user_ids: list[int]) -> str:
returnf"分析用户 {user_ids} 的行为数据"
FastMCP 支持多种传输协议,适配不同部署场景:
Stdio(标准输入/输出):用于本地调试,通过管道通信。
HTTP-SSE(Server-Sent Events):用于远程服务,支持流式响应。
WebSocket:双向实时通信,适合高频交互场景。
通信流程示例:
客户端(如 LLM 代理)发送 JSON-RPC 请求(如 tools/call
)。
FastMCP 服务器解析请求,执行对应工具/资源。
返回结构化响应,供 LLM 进一步处理。
FastMCP 通过 服务器组合(Server Composition) 实现模块化开发:
静态导入(Importing):复制子服务器的工具/资源到主服务器,适合固化功能。
动态挂载(Mounting):实时链接子服务器,变更自动生效,适合迭代开发。
代理服务器(Proxy):集成远程服务,实现跨网络调用。
简单示例,如下所示:
# 主服务器动态挂载天气服务
main_mcp = FastMCP("MainApp")
weather_mcp = FastMCP("WeatherService")
main_mcp.mount(weather_mcp, prefix="weather")
FastMCP 2.9+ 引入 中间件系统,支持横切逻辑(如鉴权、日志)的统一处理:
钩子(Hooks):在工具调用、资源访问等阶段介入(如 on_call_tool
)。
嵌套挂载:支持父子服务器分层中间件(如全局鉴权 + 局部日志)。
简单示例,如下所示:
classAuthMiddleware(Middleware):
asyncdefon_call_tool(self, context):
ifnot validate_token(context.request):
raise ToolError("权限不足")
returnawait call_next(context)
流式传输:SSE 模式支持增量响应,减少延迟。
类型安全:基于 Pydantic 自动校验输入输出,避免手动解析 JSON。
异步支持:全链路协程(Async/Await),提升高并发性能
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-07-08
🧠提示词的魔力:Prompt 为什么能控制大模型?
2025-07-08
一文看懂“提示词” vs “提示词工程” vs “上下文工程”
2025-07-08
实测17种提示词工程技术
2025-07-08
Google: Prompt Engineering白皮书
2025-07-08
再见,Prompt Engineering;你好,Context Engineering
2025-07-05
别空谈Prompt了!未来真正有用的是上下文工程!
2025-07-04
PromptMuse:让你的提问,成为开启 AI 潜能的钥匙
2025-07-04
Prompt 非常重要,是科学,而不是炼金抽卡
2025-05-08
2025-05-08
2025-05-08
2025-04-11
2025-05-07
2025-04-14
2025-05-19
2025-06-12
2025-04-16
2025-05-07
2025-07-08
2025-07-04
2025-06-23
2025-06-14
2025-06-04
2025-06-02
2025-05-17
2025-05-16