支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Dify中的MCP相关插件及FastMCP服务实现原理

发布日期:2025-07-08 14:40:50 浏览次数: 1530
作者:NLP工程化

微信搜一搜,关注“NLP工程化”

推荐语

深入解析Dify平台中MCP插件的核心功能与实现原理,助你快速掌握AI工具集成技巧。

核心内容:
1. Dify平台四大MCP插件类型详解
2. Function Calling与ReAct两种Agent策略对比
3. FastMCP服务的协议实现与工具转换机制

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

本文使用dify v1.5.0版本,主要介绍了Dify中的MCP相关插件及FastMCP服务实现原理。Dify中的MCP相关插件主要包括4类:(1)扩展插件类型:将Dify应用(工作流、对话流或工具)发布为MCP服务;(2)工具插件类型:通过HTTP with SSEStreamable HTTP方式来调用MCP服务;(3)Agent策略插件类型:Dify工作流中有个Agent节点,不同的Agent策略决定了系统如何规划和执行多步工具调用。(4)工具插件类型:偏向垂直领域的应用(如Text2SQL等)。

注解:

FunctionCalling(MCP工具):Function Calling是一个基本的Agent策略,模型将使用提供的Dify和MCP工具来执行任务。

ReAct(支持MCP工具):ReAct是一个基本的Agent策略,模型将使用提供的Dify 和MCP工具来执行任务。

一.Dify中的MCP插件总结

插件
介绍
类型
GitHub仓库
插件链接
Agent 策略(支持 MCP 工具)
提供 Function Calling 和 ReAct 的 Agent 策略集合(支持 MCP SSE / StreamableHTTP 发现和调用工具)。
基础
https://github.com/junjiem/dify-plugin-agent-mcp_sse
https://marketplace.dify.ai/plugins/junjiem/mcp_see_agent
MCP SSE / StreamableHTTP
通过 HTTP with SSE 或 Streamable HTTP 传输方式使用 MCP 协议来发现和调用工具。
基础
-
https://marketplace.dify.ai/plugins/junjiem/mcp_sse
MCP Agent 策略
支持 MCP 工具调用和 function call 的 Agent 策略。
基础
-
https://marketplace.dify.ai/plugins/hjlarry/agent
MCP server
使dify的工作流或对话流成为一个MCP服务器
基础
https://github.com/hjlarry/dify-plugin-mcp_server
https://marketplace.dify.ai/plugins/hjlarry/mcp-server
MCP Compatible Dify Tools
将Dify工具的API转换为MCP兼容API(注:必须 dify 1.2.0+)
基础
https://github.com/junjiem/dify-plugin-mcp_compat_dify_tools
https://marketplace.dify.ai/plugins/junjiem/mcp_compat_dify_tools
使用时配置的MCP工具
通过HTTP with SSE传输使用MCP协议来发现和调用工具,使用时配置。
基础
-
https://marketplace.dify.ai/plugins/arrenxxxxx/mcp_config_during_use
Nacos MCP
寻找并调用 Nacos MCP Registry 中注册的 MCP 服务。
应用
https://github.com/nacos-group/nacos-dify-plugins/tree/main/nacos_mcp
https://marketplace.dify.ai/plugins/nacos/nacos_mcp
AntV 可视化图表
基于 AntV 可视化解决方案封装的可视化图表生成 dify 插件,支持 25+ 常用可视化图表,通过 dify 工具创建各种类型的图表。
应用
https://github.com/antvis/mcp-server-chart
https://marketplace.dify.ai/plugins/antv/visualization
HelloDB
数据库查询助手,让Dify连接你的数据库,了解你的数据库,帮你生成SQL并执行查询。
应用
https://e1ryau52efm.feishu.cn/wiki/L2gwwGLZmi6HSSkpICccMuVnnic
https://marketplace.dify.ai/plugins/cdnxy/hellodb
DataFocus
包含了一个幻觉可控的Text2SQL极速生成插件;以及一个可多轮问数的ChatBI插件。
应用
-
https://marketplace.dify.ai/plugins/joto/datafocus

二.MCP插件简要使用说明

1.Agent 策略(支持 MCP 工具)

提供 Function Calling 和 ReAct 的 Agent 策略集合(支持通过 HTTP with SSE 或 Streamable HTTP 传输方式使用 MCP 协议来发现和调用工具)。简单理解,该插件的功能是在Agent节点中支持MCP工具调用,包括Function Calling 和 ReAct 这2种 Agent 策略。

(1)选择Agent策略

(2)配置工具列表和MCP服务

说明:MCP服务配置JSON格式以官方文档为准。

2.MCP SSE / StreamableHTTP

通过 HTTP with SSE 或 Streamable HTTP 传输方式使用 MCP 协议来发现和调用工具。简单理解,该插件功能相当于一个MCP客户端,使用 MCP 协议来发现和调用工具。

3.MCP Agent 策略

支持 MCP 工具调用和普通 function call 的 Agent 策略。简单理解,该插件的功能是在Agent节点中支持MCP工具调用,仅支持Function Calling这种 Agent 策略(不支持ReAct)。

4.MCP server

使Dify工作流或对话流成为一个MCP服务器。简单理解,该插件功能是把Dify的工作流或对话流发布为MCP服务。

(1)配置端点

(2)Cherry Studio配置MCP服务

5.MCP Compatible Dify Tools

该插件的作用是将Dify工具的API转换为MCP兼容API,比如把当前时间工具转换为MCP兼容的API。简单理解,该插件功能是把Dify工具发布为MCP服务。

(1)配置端点

(2)Cherry Studio配置MCP服务

6.使用时配置的MCP工具

通过HTTP with SSE传输使用MCP协议来发现和调用工具,使用时配置。简单理解,该插件功能相当于一个MCP客户端,使用 MCP 协议来发现和调用工具。

三.SSE和Streamable HTTP不同维度比较

比较维度HTTP with SSE(Server-Sent Events)Streamable HTTP(可流式传输的普通 HTTP/Fetch)
协议层
基于 HTTP/1.1 长连接+text/event-stream;封装了事件帧语法(id: …\ndata: …\n\n)
仍是标准 HTTP(1.1 或 2/3 块流);依赖分块传输编码 / HTTP2 DATA 帧,没有固定帧格式
通信方向
单向(服务器 → 浏览器);浏览器只能通过重新发起请求或其他通道上行
可双向——客户端发起请求并持续读取响应流;若需上行,可在同一 HTTP/2 流或另行请求
浏览器 API
EventSource 对象;自动重连、last-event-id 内置
fetch() + ReadableStream / response.body.getReader();重连逻辑需开发者自写
帧/消息格式
文本格式,字段名+冒号(event: data: 等),天然支持事件分组与 ID
自由:可传 JSON 行、NDJSON、Protobuf、二进制分片等;格式由应用自定义
心跳与重连
内部支持::heartbeat 注释行 + 浏览器自动重连(可设 retry:)
需自行实现 ping 数据包、超时与重新建立流
跨源限制
需 CORS 允许;EventSource 只支持 GET
同样受 CORS;fetch() 支持 GET/POST/PUT…
代理/缓存兼容
Cache-Control: no-cache 避免缓存;部分旧代理会中断
基本与常规 HTTP 一致;分块传输对代理更友好
HTTP/2 & HTTP/3
浏览器对 SSE-over-H2 支持良好;多路复用缓解“队头阻塞”
原生利用 H2/H3 流;同一连接可并行请求 + 流式响应
典型场景
实时行情推送、聊天室、监控面板、热更新日志
大文件渐进下载、AI/LLM token-by-token 流、视频按需分片、实时数据泵
服务器实现复杂度
非常低:只需设置正确的头+循环 write();框架/库广泛支持
中等:需管理 back-pressure、分块/flush、可能还要自定义 framing
兼容性
IE10+、主流浏览器全支持;移动端良好
fetch 流式读取需 Chrome 52+、Edge 79+、Firefox 65+;Safari 14+
优劣概括
简单、节省带宽、内置重连,但仅单向/纯文本
灵活格式、支持双向/二进制、高效利用 HTTP2/3,但需自行处理心跳与错误恢复

1.SSE 优先

如果只需要从服务器向浏览器单向推送小型文本事件(例如实时日志、股票行情、简单进度条),希望最小化客户端代码、享受自动重连,SSE 是“拿来就能用”的方案。

2.Streamable HTTP 优先(推荐)

当需要传输二进制或大批量数据(AI 推理逐 token、音视频分片、长文档增量渲染),或者想在 HTTP/2/3 单连接里同时复用多条流、并可能在同一会话内回传数据,则常规流式 HTTP(可配合 ReadableStream、WebTransport、gRPC-Web 等)更合适。

总结:除非为了兼容旧版实现,MCP 客户端应使用 Streamable HTTP 并在需要流式返回时读取其内部的 SSE 事件;纯 SSE 通道仅作历史遗留支持,不再推荐作为首选方案。

四.各种MCP服务 - 以阿里为例

1.ModeScope MCP广场

聚合优质MCP资源,拓展模型智能边界。https://www.modelscope.cn/mcp

2.ModelScope MCP实验场

探索开源模型与 MCP Server 的自由组合和碰撞。https://www.modelscope.cn/studios/modelscope/mcp-playground

3.ModelScope MCP教程与实践

了解和学习 MCP 、观摩和交流最佳实践。https://modelscope.cn/brand/view/MCP

4.ModelScope MCP×Cherry Studio

在Cherry Studio里集成ModelScope托管的MCP服务。https://modelscope.cn/docs/mcp/cherry-studio

5.百炼MCP服务

阿里云百炼全周期 MCP 服务。https://bailian.console.aliyun.com/?tab=mcp#/mcp-market

五.常见的MCP托管平台

MCP 托管平台,就是托管 MCP 服务的第三方平台,相当于不用自己部署服务器,直接用它们提供的现成服务地址就能跑。平台提供一个 MCP endpoint,AI 客户端直接连。

平台名称
介绍
链接
Composio
专业 MCP 托管平台,提供 100+ 已集成工具、内置 OAuth 安全认证、版本管理、监控,适合快速接入 MCP 服务并由平台维护基础设施。
https://mcp.composio.dev/
Zapier MCP
由 Zapier 推出的 MCP 服务,将 AI 辅助工具接入其 7000+ 应用生态中,支持 30,000+ 操作,无需自建 API 集成,适合业务系统快速嵌入 AI 操作能力。
https://zapier.com/mcp
MCP.so
社区驱动的 MCP 服务器/客户端聚合平台,提供各种开源 MCP Playground、示例服务器、客户端使用案例供浏览和试用,适合学习、分享或快速试验。
https://mcp.so/playground

ComposioZapier MCP 和 MCP.so 都是 MCP托管平台,但定位和侧重点不同:

  • Composio 是面向开发者和企业的专业 MCP 托管平台,提供细粒度权限管理、OAuth 授权、一键接入上百种工具,适合构建生产级 AI 工具调用系统;

  • Zapier MCP 则将 MCP 接入其庞大的自动化工作流生态(7000+应用),适合希望在 AI 中调用日常办公或企业应用(如GmailSlackSheets)的人群,低代码、易上手;

  • MCP.so 是一个开放社区平台,主要提供 MCP server 和客户端的示例、Playground 演示和教程,适合开发者学习、试验和快速原型验证,不用于正式生产环境。

总结就是,Composio 专业托管,Zapier 强连接生态,MCP.so 便于学习试验。

六.MCP服务实现原理

MCP(Model Context Protocol,模型上下文协议)服务的实现原理基于客户端-服务器架构,通过标准化的协议层和灵活的传输层,实现大型语言模型(LLM)与外部数据源、工具的无缝交互。

1. 核心架构

MCP服务器采用三层结构:

  • MCP Host:用户使用的AI应用程序(如Claude Desktop、Cursor IDE等),负责接收用户输入并协调LLM处理请求。

  • MCP Client:内置在Host中的中间件,负责与MCP Server建立连接,管理请求和响应。Client 与单个 Server 通常维持一对一连接,多个 Client 可并发连接多个 Server。

  • MCP Server:提供具体功能的轻量级服务,连接数据源或工具(如数据库、文件系统、API等),执行操作并返回结果。

2. 通信机制

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),服务器执行操作并返回结果。

3. 功能模块

MCP服务器提供三类核心功能:

  • 工具(Tools):可执行函数(如文件操作、API调用),需用户授权,输入输出通过JSON Schema定义。

  • 资源(Resources):类文件数据(如数据库记录、API响应),通过URI标识,支持动态查询。

  • 提示(Prompts):预设模板,优化LLM输出(如格式化报告生成)。

4. 安全机制

  • 权限控制:通过启动标志(如--allow-write--allow-admin)分级启用功能组,限制服务器操作范围。

  • 认证与隔离:凭据通过环境变量传递,推荐为MCP服务器创建专用账户,附加最小权限策略。

  • 数据安全:敏感数据(如API密钥)不离开原始存储位置,分析在数据源内部完成。

5. 实现技术

  • 语言与SDK:官方提供Python、TypeScript等SDK,社区支持Go、Rust等。例如,MinIO的MCP服务器使用Go实现,利用MinIO SDK与对象存储交互。

  • 部署方式:通常以Docker容器分发,简化依赖管理和跨平台部署。

6. 性能优化

  • 流式传输:支持增量响应(如SSE模式),减少延迟。

  • 动态工具发现:客户端缓存工具列表,仅当服务器通知变更时更新。

  • 分层设计:协议层与传输层解耦,适配不同环境(如本地/云端)。

总结:MCP服务的核心是通过标准化协议将自然语言请求转换为机器可执行的操作,同时确保安全性和扩展性。其设计充分考虑了AI应用的动态需求,如实时交互、多工具协同等,是LLM生态中的关键基础设施。

七.FastMCP实现原理

FastMCP 是一个基于 MCP(Model Context Protocol)协议的高效 Python 框架,通过协议封装、模块化设计、动态交互与企业级扩展四大机制,将复杂的 MCP 协议标准化并高度抽象化,使开发者能以 Pythonic 的方式构建和调用 AI 工具链。其核心目标是在保持灵活性的同时,隐藏底层协议细节,让开发者专注于业务逻辑与用户体验,从而简化 AI 工具与大型语言模型(LLM)的交互开发。

1. FastMCP 与 MCP 协议的关系

FastMCP 是对 MCP 协议的 Python 高层框架实现,对底层协议进行抽象封装,隐藏通信细节与 Schema 构造,使开发者无需深入 MCP 的 JSON-RPC 细节,即可快速构建工具、资源和提示服务。

  • MCP 协议:定义 LLM 与外部工具交互的标准(类似 HTTP 之于 Web),包含 Tools(工具)、Resources(资源)、Prompts(提示) 三大核心组件。

  • FastMCP 的封装:通过装饰器(如 @mcp.tool)自动生成 MCP 所需的 Schema,并处理底层通信(如 JSON 序列化、错误处理)。

2. FastMCP 的核心架构

(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} 的行为数据"

3. 通信机制

FastMCP 支持多种传输协议,适配不同部署场景:

  • Stdio(标准输入/输出):用于本地调试,通过管道通信。

  • HTTP-SSE(Server-Sent Events):用于远程服务,支持流式响应。

  • WebSocket:双向实时通信,适合高频交互场景。

通信流程示例:

  • 客户端(如 LLM 代理)发送 JSON-RPC 请求(如 tools/call)。

  • FastMCP 服务器解析请求,执行对应工具/资源。

  • 返回结构化响应,供 LLM 进一步处理。

4. 模块化与组合技术

FastMCP 通过 服务器组合(Server Composition) 实现模块化开发:

  • 静态导入(Importing):复制子服务器的工具/资源到主服务器,适合固化功能。

  • 动态挂载(Mounting):实时链接子服务器,变更自动生效,适合迭代开发。

  • 代理服务器(Proxy):集成远程服务,实现跨网络调用。

简单示例,如下所示:

# 主服务器动态挂载天气服务
main_mcp = FastMCP("MainApp")
weather_mcp = FastMCP("WeatherService")
main_mcp.mount(weather_mcp, prefix="weather")

5. 中间件机制(责任链模式)

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)

6. 性能优化

  • 流式传输:SSE 模式支持增量响应,减少延迟。

  • 类型安全:基于 Pydantic 自动校验输入输出,避免手动解析 JSON。

  • 异步支持:全链路协程(Async/Await),提升高并发性能

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询