dify调用Streamable HTTP MCP应用
一、概述
上一篇文章,介绍了使用python开发Streamable HTTP MCP应用,链接:https://www.cnblogs.com/xiao987334176/p/18872195
接下来介绍dify如何调用MCP
二、插件
安装插件
需要安装2个插件,分别是:Agent 策略(支持 MCP 工具),MCP SSE
Agent 策略(支持 MCP 工具)
Agent 策略集合(支持 MCP SSE 发现和调用工具)
github地址:https://github.com/junjiem/dify-plugin-agent-mcp_sse
MCP SSE
通过 HTTP with SSE 传输使用 MCP 协议来发现和调用工具。
github地址:https://github.com/junjiem/dify-plugin-tools-mcp_sse
注意:请确保插件是最新版本,因为新版本增加了Streamable HTTP
目前最新版本如下:

请确保dify版本不要太低,最好是1.3以上
插件配置
点击插件MCP SSE,设置授权

输入mcp服务配置

完整内容如下:
{
"mysql8-mcp-server": {
"transport": "streamable_http",
"url": "http://172.16.3.121:9000/mcp/",
"headers": {},
"timeout": 60
}
}
参数说明:
mysql8-mcp-server:mcp名字,名字可以随便写。
transport:mcp运行模式,streamable_http表示Streamable HTTP
url:mcp访问地址
注意:如果是使用fastmcp开发的,末尾必须带有斜杠,否则添加会报错
PluginInvokeError: {"args":{},"error_type":"Exception","message":"mysql8-mcp-server - Unsupported Content-Type: None"}
headers:请求头设置,如果没有特殊要求,这里设置为空。
timeout:超时时间,这里设置为60秒
注意:上面只是举例了一个mcp应用,如果有多个,在里面添加即可,比如:

三、dify工作流设置
创建工作流
类型:Chatflow
名称:test-mcp-mysql8

删除LLM节点,添加一个agnet,效果如下:

agent设置
agent策略
重点看agent配置
AGENT策略必须选择ReAct (Support MCP Tools)

为什么一定要选ReAct,因为我发现FunctionCalling有问题
模型
模型随便选一个即可,这里选的是qwen3-32b

工具列表
注意:工具列表,这里一定要留空。
为什么?因为这里提供的方法,只支持SSE模式,并不支持Streamable HTTP,所以千万不要选。

agent插件,已经支持Streamable HTTP 工具列表自动发现,所以不需要选。
MCP服务配置

mcp服务配置,完整内容如下:
{
"mysql8-mcp-server": {
"transport": "streamable_http",
"url": "http://172.16.3.121:9000/mcp/",
"timeout": 60
}
}
注意:这里的url末尾要带斜杠,因为是fastmcp开发的,所有要带。
如果是java或者nodejs开发的mcp,我就不确定了,需要自行尝试。
指令
指令就是我们熟悉的提示词

提示词和以前一样

使用中文回复。 当用户提问中涉及学生、教师、成绩、班级、课程等实体时,需要使用 MySQL MCP 进行数据查询和操作,表结构说明如下: # 学生管理系统数据库表结构说明 ## 1. 教师表 (teachers) | 字段名 | 类型 | 描述 | 约束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 教师ID | 主键 | "T001" |
| name | varchar | 教师姓名 | 必填 | "张建国" |
| gender | enum | 性别 | "男"或"女" | "男" |
| subject | varchar | 教授科目 | 必填 | "数学" |
| title | varchar | 职称 | 必填 | "教授" |
| phone | varchar | 联系电话 | 必填 | "13812345678" |
| office | varchar | 办公室位置 | 必填 | "博学楼301" |
| wechat | varchar | 微信(可选) | 可选 | "lily_teacher" |
| isHeadTeacher | enum | 是否为班主任,"true"或"false" | 可选 | true | ## 2. 班级表 (classes) | 字段名 | 类型 | 描述 | 约束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 班级ID | 主键 | "202301" |
| className | varchar | 班级名称 | 必填 | "2023级计算机1班" |
| grade | int | 年级 | 必填 | 2023 |
| headTeacherId | varchar | 班主任ID | 外键(teachers.id) | "T003" |
| classroom | varchar | 教室位置 | 必填 | "1号楼302" |
| studentCount | int | 学生人数 | 必填 | 35 |
| remark | varchar | 备注信息 | 可选 | "市级优秀班集体" | ## 3. 课程表 (courses) | 字段名 | 类型 | 描述 | 约束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 课程ID | 主键 | "C001" |
| courseName | varchar | 课程名称 | 必填 | "高等数学" |
| credit | int | 学分 | 必填 | 4 |
| teacherId | varchar | 授课教师ID | 外键(teachers.id) | "T001" |
| semester | varchar | 学期 | 格式"YYYY-N" | "2023-1" |
| type | enum | 课程类型 | "必修"或"选修" | "必修" |
| prerequisite | varchar | 先修课程ID | 可选,外键(courses.id) | "C003" | ## 4. 学生表 (students) | 字段名 | 类型 | 描述 | 约束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 学号 | 主键 | "S20230101" |
| name | varchar | 学生姓名 | 必填 | "王强" |
| gender | enum | 性别 | "男"或"女" | "男" |
| birthDate | date | 出生日期 | 必填 | date("2005-01-15") |
| enrollmentDate | date | 入学日期 | 必填 | date("2023-8-1") |
| classId | varchar | 班级ID | 外键(classes.id) | "202301" |
| phone | varchar | 联系电话 | 必填 | "13812345678" |
| email | varchar | 电子邮箱 | 必填 | "20230101@school.edu.cn" |
| emergencyContact | varchar | 紧急联系人电话 | 必填 | "13876543210" |
| address | varchar | 家庭住址 | 必填 | "北京市海淀区中关村大街1栋101室" |
| height | int | 身高(cm) | 必填 | 175 |
| weight | int | 体重(kg) | 必填 | 65 |
| healthStatus | enum | 健康状况 | 必填,"良好"或"一般"或"较差" | "良好" | ## 5. 成绩表 (scores) | 字段名 | 类型 | 描述 | 约束 | 示例 |
|--------|------|------|------|------|
| id | varchar | 成绩记录ID | 主键 | "S20230101C001" |
| studentId | varchar | 学生ID | 外键(students.id) | "S20230101" |
| courseId | varchar | 课程ID | 外键(courses.id) | "C001" |
| score | int | 综合成绩 | 0-100 | 85 |
| examDate | date | 考试日期 | 必填 | date("2024-5-20") |
| usualScore | int | 平时成绩 | 0-100 | 90 |
| finalScore | int | 期末成绩 | 0-100 | 80 | ### 补考成绩记录说明
补考记录在_id后添加"_M"后缀,如"S20230101C001_M" ## 表关系说明 1. **一对多关系**:
- 一个班级(classes)对应多个学生(students)
- 一个教师(teachers)可以教授多门课程(courses)
- 一个学生(students)有多条成绩记录(scores) 2. **外键约束**:
- students.classId → classes.id
- courses.teacherId → teachers.id
- scores.studentId → students.id
- scores.courseId → courses.id
- classes.headTeacherId → teachers.id
mysql表结构,参考文章:https://www.cnblogs.com/xiao987334176/p/18826422
查询
这里选择变量query,也就是开始步骤中的输入变量

最大迭代次数
最大迭代次数是一个重要的参数,用于控制工具调用的深度和复杂性。它主要用于防止无限循环或过度调用工具,从而避免资源浪费或系统性能问题。

默认是3,也必须要设置一下,否则无法保存
最后连接直接回复
选择变量Agent.text

点击发布预览

四、dify测试
学生里面,男生多还是女生多?

哪个老师带的学生最多?

总成绩最好的是哪个班级?

dify调用Streamable HTTP MCP应用的更多相关文章
- 你其实真的不懂print("Hello,world")
http://www.jianshu.com/p/abb55919c453 debugPrint在发布的版本里也 会输出debugPrint只是更倾向于输出对象的调试信息.不管是开发环境还是测试环境都 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- 《果壳中的C# C# 5.0 权威指南》 - 学习笔记
<果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...
- Istio调用链埋点原理剖析—是否真的“零修改”分享实录(下)
调用链原理和场景 正如Service Mesh的诞生是为了解决大规模分布式服务访问的治理问题,调用链的出现也是为了对应于大规模的复杂的分布式系统运行中碰到的故障定位定界问题.大量的服务调用.跨进程.跨 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 操作系统篇-调用门与特权级(CPL、DPL和RPL)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在前两篇文章(<操作系统篇-浅谈实模式与保护模式>和<操作系统篇-分段机制与GDT|LDT>)中,我们提到 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- django server之间通过remote user 相互调用
首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...
- 调用AJAX做登陆和注册
先建立一个页面来检测一下我们建立的用户名能不能用,看一下有没有已经存在的用户名吗 可以通过ajax提示一下 $("#uid").blur(function(){ //取用户名 va ...
随机推荐
- [解决方案]git pull : error: cannot lock ref 'refs/remotes/origin/*' (unable to update local ref)
错误 git pull 报错不能更新本地分支 错误分析 本地分支跟远程分支不匹配 导致更新失败 解决方案 备份自己修改的代码 .git\refs\remotes (文件路径)对应删除你报错的分支 gi ...
- 变量命名不规范&我被deepseek骗了
首先是一个实体类 @Data public class Dto {private String mNumber; } 前端传来{"mNumber:"123"}为null的 ...
- 【Abaqus】Composite Layup建模
abaqus 的3个复合材料建模途径: 传统的material->section->orientation->step->job的建模方式 Composite Layup建模方 ...
- 带大家做了个 AI 项目,没想到这么简单!
大家好,我是程序员鱼皮,现在已经是全民 AI 时代了,咱们程序员更要想办法榨干 AI,把 AI 利用起来.前几天我一时兴起,直播用 2 多个小时的时间,从需求分析开始,带大家做了一个 AI 海龟汤游戏 ...
- 【离线地图】地图瓦片css复杂滤镜线段绘制
需求: 目前已经对地图瓦片做了复杂滤镜的黑夜展示,现在又要在这个图片上绘制新的线段等内容,且不能被这个复杂滤镜影响,变成奇奇怪怪的颜色. 同时因为框架限制,只能在这个img上绘制 思考: 1.既然不想 ...
- js调用本地程序资源-兼容所有浏览器
在网页上通过JavaScript调用本地程序,兼容IE8/9/10/11.Opera.Chrome.Safari.Firefox等所有浏览器,在做Web开发时经常会遇到需要调用本地的一些exe或者dl ...
- 项目实战 TS
项目实战 TS 通用技巧 新手先 any 再填坑,老手先定义数据结构写逻辑 遇到新场景,没把握快速,先用 any 再填坑,填坑的过程也是 TS 技能满满提升的过程. TS 发现潜在问题 1)复杂逻辑, ...
- 小了 60,500 倍,但更强;AI 的“深度诅咒”
作者:Ignacio de Gregorio 图片来自 Unsplash 的 Bahnijit Barman 几周前,我们看到 Anthropic 尝试训练 Claude 去通关宝可梦.模型是有点进展 ...
- [T.4] 团队项目:团队代码管理准备
团队的代码仓库地址 [GitHub - Meng-XuanYu/JayJay-TeamVersionControl: A public repo for BUAASE2025 course homew ...
- C# LINQ 快速入门实战指南,建议收藏学习!
前言 因为咱们的.NET EF Core快速入门实战教程经常会用到 LINQ 去查询和操作 MySQL 中的数据,因此我觉得很有必要对 LINQ 的一些使用技巧.常用方法.特性做一个详细的介绍,让大家 ...