一、概述

上一篇文章,介绍了使用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应用的更多相关文章

  1. 你其实真的不懂print("Hello,world")

    http://www.jianshu.com/p/abb55919c453 debugPrint在发布的版本里也 会输出debugPrint只是更倾向于输出对象的调试信息.不管是开发环境还是测试环境都 ...

  2. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  3. 《果壳中的C# C# 5.0 权威指南》 - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...

  4. Istio调用链埋点原理剖析—是否真的“零修改”分享实录(下)

    调用链原理和场景 正如Service Mesh的诞生是为了解决大规模分布式服务访问的治理问题,调用链的出现也是为了对应于大规模的复杂的分布式系统运行中碰到的故障定位定界问题.大量的服务调用.跨进程.跨 ...

  5. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  6. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  7. 操作系统篇-调用门与特权级(CPL、DPL和RPL)

    || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在前两篇文章(<操作系统篇-浅谈实模式与保护模式>和<操作系统篇-分段机制与GDT|LDT>)中,我们提到 ...

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. django server之间通过remote user 相互调用

    首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...

  10. 调用AJAX做登陆和注册

    先建立一个页面来检测一下我们建立的用户名能不能用,看一下有没有已经存在的用户名吗 可以通过ajax提示一下 $("#uid").blur(function(){ //取用户名 va ...

随机推荐

  1. 探秘Transformer系列之(9)--- 位置编码分类

    探秘Transformer系列之(9)--- 位置编码分类 目录 探秘Transformer系列之(9)--- 位置编码分类 0x00 概述 0x01 区别 1.1 从直观角度来看 1.2 从模型处理 ...

  2. 豆包:php如何模拟多客户端访问服务器

    在 PHP 中模拟多客户端访问服务器可以通过以下几种方式实现,具体方法根据需求选择: 方法 1:使用 cURL 多请求(Multi Handle) 通过  curl_multi_*  系列函数实现并发 ...

  3. 从RNN、LSTM到NTM、MANN——神经网络的记忆与推理进化

    从RNN.LSTM到NTM.MANN--神经网络的记忆与推理进化 一.前言:为什么要研究记忆? (温馨提示:在阅读本文之前,请确保你已经对深度学习中最基本的概念有一定的了解,例如:激活函数.多层感知机 ...

  4. Windows下安装使用OpenLDAP

    LDAP:(轻量级目录访问协议,Lightweight Directory Access Protocol)它是基于 X.500标准的,但是简单多了并且可以根据需要定制.与X.500不同,LDAP支持 ...

  5. Netty源码—3.Reactor线程模型二

    大纲 5.NioEventLoop的执行总体框架 6.Reactor线程执行一次事件轮询 7.Reactor线程处理产生IO事件的Channel 8.Reactor线程处理任务队列之添加任务 9.Re ...

  6. 【Esp32】为 idf 定制本地 Arduino 组件

    在开始今天的水文前,老周先要奉劝一下国内某些嵌入式砖家和穴者,不要看不起 Arduino,它不是一种开发板,而是一种规范.Arduino 的思想是正确的,把各种开发板封装为统一的 API,让许多开源库 ...

  7. 【SpringMVC】数据转换 & 数据格式化

    数据转换 & 数据格式化 & 数据校验 数据转换 数据绑定流程 Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinder ...

  8. SQL Server 2008语句大全完整版

    --======================== --设置内存选项 --======================== --设置 min server memory 配置项 EXEC sp_co ...

  9. Lazarus信创之路:启程,自动升级程序

    相信国内做Delphi开发的不在少数,信创大趋势下,很多转Lazarus开发了.最近我也研究了一下,决定也转到这下面来,主要考虑:1.商业化方便,无版权纠纷:2.兼容Delphi语法,上手很快:3.原 ...

  10. 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明

    5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明 @ 目录 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明 1. Exchanges 交换机的 ...