跳到主要内容
Dify 与 MySQL 基于 MCP 协议的整合实践 | 极客日志
SQL AI
Dify 与 MySQL 基于 MCP 协议的整合实践 综述由AI生成 如何利用模型上下文协议(MCP)将 Dify 大语言模型应用平台与 MySQL 数据库进行深度整合。主要步骤包括搭建 Python 环境、安装配置 Dify 及 MySQL 数据库、部署 MCP Server、在 Dify 中创建支持 MCP 工具的 Agent 工作流,并通过实际查询测试验证功能。该方案实现了通过自然语言指令直接操作数据库的能力,适用于构建智能数据驱动型应用。
imJackJia 发布于 2026/2/10 更新于 2026/6/2 26 浏览引言:技术融合的奇妙开篇
在当今数字化时代,数据管理与人工智能技术的融合日益紧密。Dify 作为一款强大的大语言模型应用开发平台,通过 MCP(模型上下文协议)与 MySQL 这一广泛使用的关系型数据库进行整合,为开发者们打开了一扇通往高效数据处理与智能应用开发的新大门。这种整合不仅能充分发挥 Dify 在自然语言处理和 AI 应用构建方面的优势,还能借助 MySQL 出色的数据存储和管理能力,实现更复杂、更智能的数据驱动型应用开发。
认识主角:Dify、MCP 与 MySQL
(一)Dify:大语言模型应用开发利器
Dify 是一款极具创新性的开源大语言模型(LLM)应用开发平台,它将后端即服务(Backend as Service, BaaS)与 LLMOps 理念巧妙融合,为开发者打造了一个便捷高效的 AI 应用开发环境。其低代码/无代码开发模式堪称一大亮点,通过直观的可视化界面,开发者只需简单的拖拽和配置操作,就能轻松定义 Prompt(提示词)、上下文以及插件等关键要素,无需在底层技术细节中耗费过多精力,这使得开发门槛大幅降低。
Dify 还采用了模块化设计,各个模块功能明确、接口清晰,开发者可以根据具体的项目需求,灵活选择并组合使用这些模块,从而构建出高度个性化的 AI 应用。在功能组件方面,Dify 更是提供了丰富多样的选择,涵盖 AI 工作流、RAG 管道、Agent、模型管理等多个领域,全面支持从应用原型设计到实际生产部署的整个过程。
(二)MCP:连接的桥梁
MCP,即模型上下文协议(Model Context Protocol),在 Dify 与 MySQL 的整合中扮演着至关重要的桥梁角色。作为一项新兴的开放协议,MCP 为大语言模型与外部应用之间搭建了一条双向通信通道,让模型能够便捷地发现、理解并安全调用各种外部工具或 API。
在 Dify 通过 MCP 整合 MySQL 的场景中,MCP 主要发挥了两方面关键作用。一方面,它提供了统一的协议支持,使得 Dify 中的大语言模型能够以标准化的方式与 MySQL 进行交互。另一方面,MCP 还具备强大的工具调用能力,允许 Dify 根据用户的需求和指令,动态地调用 MySQL 相关的工具和功能,实现对数据库中数据的查询、更新、插入等操作。
(三)MySQL:经典数据库
MySQL 作为一款开源的关系型数据库管理系统,在数据存储和管理领域拥有着广泛的应用和卓越的声誉。它具备高度的可靠性和稳定性,能够在各种复杂的环境下稳定运行。在性能方面,MySQL 表现出色,采用了高效的索引和查询优化技术,能够快速处理大规模数据和高并发的访问请求。此外,MySQL 还具备出色的可扩展性,支持水平和垂直扩展,能够满足不断变化的业务需求。
准备工作:搭建融合舞台
(一)环境搭建
在开始整合 Dify 与 MySQL 之前,需要确保开发环境准备就绪。主要涉及 Python 环境以及相关插件的安装,建议使用 Python 3.8 及以上版本。同时,为了实现 Dify 与 MySQL 之间基于 MCP 的通信和数据交互,还需要安装一些关键的插件和依赖库。
(二)安装与配置 Dify
安装步骤 :
首先,通过官方 GitHub 仓库获取 Dify 的源代码。打开终端,执行以下命令进行克隆:
git clone https://github.com/langgenius/dify.git --branch 1.1.0
安装过程需要依赖 Docker 和 Docker Compose。若尚未安装,需先完成这两个工具的安装。在 Linux 系统上,安装 Docker 的命令如下:
dnf update
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
设置 docker 的下载镜像代理。
在 目录新增文件 ,文件内容如下:
/etc/systemd/system/docker.service.d
http-proxy.conf
[Service]
Environment ="HTTP_PROXY=http://proxy_ip:port"
Environment ="HTTPS_PROXY=http://proxy_ip:port"
Environment ="NO_PROXY=localhost,127.0.0.1"
systemctl daemon-reload
systemctl restart docker
systemctl status docker
在 Dify 项目目录下,通过 Docker Compose 来启动 Dify 服务。在终端中执行:
cp .env.example .env
docker compose up -d
此命令会在后台启动 Dify 的所有相关服务,包括前端、后端以及必要的中间件服务。
启动完成后,通过浏览器访问 Dify 的前端界面,默认地址为 http://localhost:3000。首次访问时,需要进行一些基础配置,如设置管理员账号和密码等信息。
接着,配置 Dify 的服务器地址和端口。若采用默认配置,服务器地址即为 localhost,端口为 5000。若需修改,可在 Dify 项目目录下的 .env 文件中修改环境变量,以满足实际的部署需求。
(三)安装与配置 MySQL CREATE DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `classes` (
`id` varchar (255 ) NOT NULL COMMENT '班级 ID' ,
`className` varchar (255 ) NOT NULL COMMENT '班级名称' ,
`grade` int NOT NULL COMMENT '年级' ,
`headTeacherId` varchar (255 ) NOT NULL COMMENT '班主任 ID' ,
`classroom` varchar (255 ) NOT NULL COMMENT '教室位置' ,
`studentCount` int NOT NULL COMMENT '学生人数' ,
`remark` varchar (255 ) DEFAULT NULL COMMENT '备注信息' ,
PRIMARY KEY (`id`),
CONSTRAINT `headTeacherId` FOREIGN KEY (`headTeacherId`) REFERENCES `teachers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COMMENT= '班级表' ;
CREATE TABLE `courses` (
`id` varchar (255 ) NOT NULL COMMENT '课程 ID' ,
`courseName` varchar (255 ) NOT NULL COMMENT '课程名称' ,
`credit` int NOT NULL COMMENT '学分' ,
`teacherId` varchar (255 ) NOT NULL COMMENT '授课教师 ID' ,
`semester` varchar (255 ) DEFAULT NULL COMMENT '学期' ,
`type` enum('必修' ,'选修' ) NOT NULL DEFAULT '选修' COMMENT '课程类型' ,
PRIMARY KEY (`id`)
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COMMENT= '课程表' ;
CREATE TABLE `scores` (
`id` varchar (255 ) NOT NULL COMMENT '成绩记录 ID' ,
`studentId` varchar (255 ) NOT NULL COMMENT '学生 ID' ,
`courseId` varchar (255 ) NOT NULL COMMENT '课程 ID' ,
`score` int NOT NULL COMMENT '综合成绩' ,
`examDate` date NOT NULL COMMENT '考试日期' ,
`usualScore` int DEFAULT '0' COMMENT '平时成绩' ,
`finalScore` int DEFAULT '0' COMMENT '期末成绩' ,
PRIMARY KEY (`id`),
CONSTRAINT `studentId` FOREIGN KEY (`studentId`) REFERENCES `students` (`id`) ON DELETE CASCADE,
CONSTRAINT `courseId` FOREIGN KEY (`courseId`) REFERENCES `courses` (`id`) ON DELETE CASCADE
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COMMENT= '成绩表' ;
CREATE TABLE `students` (
`id` varchar (255 ) NOT NULL COMMENT '学号' ,
`name` varchar (255 ) NOT NULL COMMENT '学生姓名' ,
`gender` enum('男' ,'女' ) NOT NULL DEFAULT '男' COMMENT '性别' ,
`birthDate` datetime NOT NULL COMMENT '出生日期' ,
`classId` varchar (255 ) NOT NULL COMMENT '班级 ID' ,
`phone` varchar (255 ) NOT NULL COMMENT '联系电话' ,
`email` varchar (255 ) NOT NULL COMMENT '电子邮箱' ,
`height` int NOT NULL COMMENT '身高 (cm)' ,
`weight` int NOT NULL COMMENT '体重 (kg)' ,
`healthStatus` enum('良好' ,'一般' ,'较差' ) NOT NULL DEFAULT '良好' COMMENT '健康状况' ,
PRIMARY KEY (`id`),
CONSTRAINT `classId` FOREIGN KEY (`classId`) REFERENCES `classes` (`id`) ON DELETE CASCADE
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COMMENT= '学生表' ;
CREATE TABLE `teachers` (
`id` varchar (255 ) NOT NULL COMMENT '教师 ID' ,
`name` varchar (255 ) NOT NULL COMMENT '教师姓名' ,
`gender` enum('男' ,'女' ) NOT NULL DEFAULT '男' COMMENT '性别' ,
`subject` varchar (255 ) NOT NULL COMMENT '教授科目' ,
`title` varchar (255 ) NOT NULL COMMENT '职称' ,
`phone` varchar (255 ) NOT NULL COMMENT '联系电话' ,
`office` varchar (255 ) NOT NULL COMMENT '办公室位置' ,
`wechat` varchar (255 ) DEFAULT NULL COMMENT '微信' ,
`isHeadTeacher` enum('true' ,'false' ) DEFAULT 'false' COMMENT '是否为班主任' ,
PRIMARY KEY (`id`)
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COMMENT= '教师表' ;
INSERT INTO `teachers` (`id`, `name`, `gender`, `subject`, `title`, `phone`, `office`, `wechat`, `isHeadTeacher`) VALUES ('T001' , '张建国' , '男' , '数学' , '教授' , '13812345678' , '博学楼 301' , 'lily_teacher' , 'true' );
关键步骤:Dify 与 MySQL 的牵手过程
(一)安装必要插件 在 Dify 平台中,要实现通过 MCP 整合 MySQL,首先需要安装两个关键插件:Agent 策略(支持 MCP 工具)和 MCP SSE。
Agent 策略集合(支持 MCP SSE 发现和调用工具)
MCP SSE 插件(通过 HTTP with SSE 传输使用 MCP 协议来发现和调用工具)
(二)配置 MCP SSE 插件安装完成后,需要对 MCP SSE 进行配置,以建立与 MySQL 服务的连接。具体操作如下:
在 Dify 的插件管理界面中,点击已安装的 MCP SSE 插件。点击已授权,配置上 mcp mysql server 的 sse 地址:
{
"mysql_mcp_server_pro" : {
"url" : "http://server_ip:9000/sse"
}
}
填写完成后,点击保存。这样,Dify 就能够通过 MCP SSE 插件与指定的 MySQL 服务地址进行通信。
(三)创建 Dify 工作流 进入 Dify 的工作流创建页面,选择创建工作流类型为'Chatflow',并为工作流命名,例如'Dify_MySQL_Integration'。
在工作流设计画布中,删除默认的 LLM 节点,因为我们主要通过 Agent 来调用 MySQL 相关工具。从节点库中拖拽一个'Agent'节点到画布上。这个 Agent 节点将作为与 MySQL 交互的核心组件。
(四)配置 Agent 策略
选择 ReAct (Support MCP Tools) 策略 :点击添加的 Agent 节点,在右侧的配置面板中,将 AGENT 策略选择为'ReAct (Support MCP Tools)'。该策略对 MCP 工具的支持较为稳定。
配置工具列表 :在 Agent 配置面板的'工具列表'部分,点击右侧的添加按钮,选择'通过 SSE 发现和调用 MCP 工具'。然后添加与 MySQL 相关的工具列表。
配置指令 :指令部分也就是提示词,它是引导 Agent 正确执行任务的关键。例如,可以设置如下指令:
使用中文回复。当用户提问中涉及学生、教师、成绩、班级、课程等实体时,需要使用 MySQL MCP 进行数据查询和操作,表结构说明如下:
...(此处省略详细表结构说明,参考上文 SQL 定义)...
这里的'query'变量将作为用户输入的查询内容,传递给 Agent。同时,还需要设置最大迭代次数,默认值通常为 3。最后,在'连接直接回复'部分选择变量'Agent.text',这样 Agent 执行任务后的结果将通过该变量直接回复给用户。
(五)搭建 MCP SERVER
1. 下载代码 git clone https://github.com/wenb1n-dev/mysql_mcp_server_pro.git
2. 配置数据库
3. 配置依赖 pip install mcp
pip install mysql-connector-python
pip install uvicorn
pip install python-dotenv
pip install starlette
4. 启动 mcp server
测试与优化:让融合更完美
(一)工作流测试 完成上述配置后,就可以对创建的 Dify 工作流进行测试。
测试方式 :进入 Dify 的工作流测试界面,在输入框中输入实际的查询问题,例如'哪个老师学生最多'。
工作原理 :Agent 节点根据配置的指令和策略,识别出这是一个需要查询 MySQL 数据库的任务,然后通过 MCP 协议调用相应的 MySQL 工具。该工具将问题转化为 SQL 查询语句,并发送到 MySQL 数据库进行执行。
结果查看 :MySQL 数据库执行查询后,将结果返回给 Dify 工作流中的 Agent 节点,最终显示在测试界面中。
列出身高大于等于 168cm 所有学生
列出体重大于等于 60kg 的学生
哪个学生成绩最好
总成绩最好的是哪个班级
以上测试均符合预期,验证了 Dify 与 MySQL 的整合成功。
常见问题与解决方案:排忧解难
(一)连接失败 错误描述 :Dify 无法成功连接到 MySQL,可能提示'连接超时'或'无法找到服务器'。
检查网络和防火墙 :确保 MySQL 服务器的防火墙未阻止连接,开放 3306 端口。
确认地址和端口 :仔细检查 MCP SSE 配置中填写的 MySQL 服务地址和端口。
检查 MySQL 服务状态 :确保 MySQL 服务正在运行。
(二)工具调用错误 错误描述 :调用 MySQL 相关工具时,提示'找不到工具'或'工具调用失败'。
检查插件安装和配置 :确认 Agent 策略和 MCP SSE 插件已成功安装且配置正确。
选择正确的策略 :将 Agent 的 AGENT 策略选择为'ReAct (Support MCP Tools)'。
核对工具列表配置 :确保 MCP 服务器地址配置正确。
(三)SQL 执行错误 错误描述 :返回的结果提示 SQL 执行错误,如'语法错误''表不存在'。
优化提示词和指令 :确保指令能够准确地将用户输入转换为正确的 SQL 语句。
同步数据库结构信息 :定期检查 MySQL 数据库的结构变化,及时更新 Dify 工作流中的相关配置。
通过对这些常见问题的分析和解决,可以帮助开发者在 Dify 通过 MCP 整合 MySQL 的过程中更加顺利地进行开发和调试。
相关免费在线工具 RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
SQL 美化和格式化 在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
SQL转CSV/JSON/XML 解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 工具包 CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online