链载Ai

标题: Dify中的MCP相关插件及FastMCP服务实现原理 [打印本页]

作者: 链载Ai    时间: 4 小时前
标题: Dify中的MCP相关插件及FastMCP服务实现原理

本文使用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 CallingReAct的 Agent 策略集合(支持通过HTTP with SSEStreamable HTTP传输方式使用MCP协议来发现和调用工具)。简单理解,该插件的功能是在Agent节点中支持MCP工具调用,包括Function CallingReAct这2种 Agent 策略。

(1)选择Agent策略

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

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

2.MCP SSE / StreamableHTTP

通过HTTP with SSEStreamable 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 MCPMCP.so都是 MCP托管平台,但定位和侧重点不同:

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

六.MCP服务实现原理

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

1.核心架构

MCP服务器采用三层结构:

2.通信机制

MCP协议层基于 JSON-RPC 2.0 封装消息,支持3种传输模式:

通信流程示例:

3.功能模块

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

4.安全机制

5.实现技术

6.性能优化

总结: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 细节,即可快速构建工具、资源和提示服务。

2. FastMCP 的核心架构

(1)工具(Tools)

@mcp.tool
defmultiply(a: float, b: float)-> float:
returna * b

(2)资源(Resources)

@mcp.resource("weather://{city}/today")
asyncdefget_weather(city: str):
returnawaitfetch_weather_api(city)

(3) 提示(Prompts)

@mcp.prompt
defanalyze_users(user_ids: list[int])-> str:
returnf"分析用户{user_ids}的行为数据"

3. 通信机制

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

通信流程示例:

4. 模块化与组合技术

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

简单示例,如下所示:

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

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

FastMCP 2.9+ 引入 中间件系统,支持横切逻辑(如鉴权、日志)的统一处理:

简单示例,如下所示:

classAuthMiddleware(Middleware):
asyncdefon_call_tool(self, context):
ifnotvalidate_token(context.request):
raiseToolError("权限不足")
returnawaitcall_next(context)

6. 性能优化






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5