dify MCP工具调用

一、概述

前面几篇文章,介绍了Cherry Studio客户端调用MCP,接下来介绍dify如何调用MCP

二、dify插件

需要安装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

插件安装完成后,效果如下:

点击插件MCP SSE,添加sse地址

json内容如下:

复制代码
{
    "mysql_mcp_server_pro": {
        "url": "http://172.16.0.45:9090/sse"
    }
}

点击保存,效果如下:

注意:这里的sse,是python代码执行的。

参考文章:https://www.cnblogs.com/xiao987334176/p/18822444

这里就不重复了,运行python代码即可

如果有多个mcp应用,json内容,可以添加多个,示例:

复制代码
{
  "server_name1": {
    "url": "http://127.0.0.1:8000/sse",
    "headers": {},
    "timeout": 60,
    "sse_read_timeout": 300
  },
  "server_name2": {
    "url": "http://127.0.0.1:8001/sse"
  }
}

三、dify工作流配置

创建工作流

类型:Chatflow

名称:test-mcp-mysql8

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

agent设置

agent策略

重点看agent配置

AGENT策略必须选择ReAct (Support MCP Tools)

为什么一定要选ReAct,因为我发现FunctionCalling有问题,调用MCP一直提示找不到call_tool方法。

我是用fastmcp框架开发的,不需要指定call_tool方法。就算添加了call_tool方法,也依然提示找不到,懒得折腾了,直接选ReAct就好了。

工具列表

工具列表,必须要选择!

点击右侧添加按钮,选择通过SSE发现和调用MCP工具

添加2个工具列表

MCP服务器

MCP服务器,这里添加你需要的即可

复制代码
{
    "mysql_mcp_server_pro": {
        "url": "http://172.16.0.45:9090/sse"
    }
}

指令

指令必须要设置

指定,也就是提示词,参考文章:https://www.cnblogs.com/xiao987334176/p/18826422

完整内容如下:

复制代码
使用中文回复。

当用户提问中涉及学生、教师、成绩、班级、课程等实体时,需要使用 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 | 电子邮箱 | 必填 | "[email protected]" |
| 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

查询

这里输入变量query即可

最大迭代次数

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

默认是3,也必须要设置一下,否则无法保存

最后连接直接回复

选择变量Agent.text

点击发布预览

四、dify工作流测试

哪个老师学生最多

效果如下:

哪个学生成绩最好

总成绩最好的是哪个班级

相关推荐
小声读源码2 天前
【部署】win10的wsl环境下调试dify的api后端服务
vscode·python·docker·uv·dify·remote-ssh·pyenv
肖祥5 天前
DeepSeek 多模态模型 Janus-Pro 本地部署
dify
肖祥7 天前
windows11 安装WSL2详细过程
dify
Silence4Allen7 天前
Dify 完全指南(一):从零搭建开源大模型应用平台(Ollama/VLLM本地模型接入实战)》
ai·大模型·dify·rag
engchina10 天前
如何在Dify沙盒中安装运行pandas、numpy
numpy·pandas·dify·代码节点
梁萌12 天前
dify升级最新版本(保留已创建内容)
docker·升级·dify
肖祥14 天前
LM Studio本地使用
dify
engchina15 天前
Dify 使用 excel 或者 csv 文件创建知识库
excel·dify
小草cys15 天前
AI工作流自动化与智能应用开发平台
运维·人工智能·自动化·dify
肖祥16 天前
ragflow k8s部署详细过程
dify