AI创想
标题:
dify调用Streamable HTTP MCP应用
[打印本页]
作者:
zhenglunyi
时间:
2 小时前
标题:
dify调用Streamable HTTP MCP应用
作者:CSDN博客
一、概述
上一篇文章,介绍了使用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 / StreamableHTTP
通过 HTTP with SSE 或 Streamable HTTP 传输方式使用 MCP 协议来发现和调用工具。
github地址:https://github.com/junjiem/dify-plugin-tools-mcp_sse
注意:请确保插件是最新版本,因为新版本增加了Streamable HTTP
目前最新版本如下:
(, 下载次数: 0)
上传
点击文件名下载附件
请确保dify版本不要太低,最好是1.3以上
插件配置
点击插件MCP SSE,设置授权
(, 下载次数: 0)
上传
点击文件名下载附件
输入mcp服务配置
(, 下载次数: 0)
上传
点击文件名下载附件
完整内容如下:
(, 下载次数: 0)
上传
点击文件名下载附件
{
"
mysql8-mcp-server
"
: {
"
transport
"
:
"
streamable_http
"
,
"
url
"
:
"
http://172.16.3.121:9000/mcp/
"
,
"
headers
"
: {},
"
timeout
"
:
60
}}
(, 下载次数: 0)
上传
点击文件名下载附件
参数说明:
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应用,如果有多个,在里面添加即可,比如:
(, 下载次数: 0)
上传
点击文件名下载附件
三、dify工作流设置
创建工作流
类型:Chatflow
名称:test-mcp-mysql8
(, 下载次数: 0)
上传
点击文件名下载附件
删除LLM节点,添加一个agnet,效果如下:
(, 下载次数: 0)
上传
点击文件名下载附件
agent设置
agent策略
重点看agent配置
AGENT策略必须选择ReAct (Support MCP Tools)
(, 下载次数: 0)
上传
点击文件名下载附件
为什么一定要选ReAct,因为我发现FunctionCalling有问题
模型
模型随便选一个即可,这里选的是qwen3-32b
(, 下载次数: 0)
上传
点击文件名下载附件
工具列表
注意:工具列表,这里一定要留空。
为什么?因为这里提供的方法,只支持SSE模式,并不支持Streamable HTTP,所以千万不要选。
(, 下载次数: 0)
上传
点击文件名下载附件
agent插件,已经支持Streamable HTTP 工具列表自动发现,所以不需要选。
MCP服务配置
(, 下载次数: 0)
上传
点击文件名下载附件
mcp服务配置,完整内容如下:
(, 下载次数: 0)
上传
点击文件名下载附件
{
"
mysql8-mcp-server
"
: {
"
transport
"
:
"
streamable_http
"
,
"
url
"
:
"
http://172.16.3.121:9000/mcp/
"
,
"
timeout
"
:
60
}}
(, 下载次数: 0)
上传
点击文件名下载附件
注意:这里的url末尾要带斜杠,因为是fastmcp开发的,所有要带。
如果是java或者nodejs开发的mcp,我就不确定了,需要自行尝试。
指令
指令就是我们熟悉的提示词
(, 下载次数: 0)
上传
点击文件名下载附件
提示词和以前一样
(, 下载次数: 0)
上传
点击文件名下载附件
(, 下载次数: 0)
上传
点击文件名下载附件
使用中文回复。当用户提问中涉及学生、教师、成绩、班级、课程等实体时,需要使用 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
View Code
mysql表结构,参考文章:https://www.cnblogs.com/xiao987334176/p/18826422
查询
这里选择变量query,也就是开始步骤中的输入变量
(, 下载次数: 0)
上传
点击文件名下载附件
最大迭代次数
最大迭代次数是一个重要的参数,用于控制工具调用的深度和复杂性。它主要用于防止无限循环或过度调用工具,从而避免资源浪费或系统性能问题。
(, 下载次数: 0)
上传
点击文件名下载附件
默认是3,也必须要设置一下,否则无法保存
最后连接直接回复
选择变量Agent.text
(, 下载次数: 0)
上传
点击文件名下载附件
点击发布预览
(, 下载次数: 0)
上传
点击文件名下载附件
四、dify测试
学生里面,男生多还是女生多?
(, 下载次数: 0)
上传
点击文件名下载附件
哪个老师带的学生最多?
(, 下载次数: 0)
上传
点击文件名下载附件
总成绩最好的是哪个班级?
(, 下载次数: 0)
上传
点击文件名下载附件
原创作者: xiao987334176 转载于: https://www.cnblogs.com/xiao987334176/p/18886406
原文地址:https://blog.csdn.net/weixin_40853491/article/details/148491545
欢迎光临 AI创想 (http://llms-ai.com/)
Powered by Discuz! X3.4