一、概述
上一篇文章,介紹了使用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
目前最新版本如下:
?請確保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
點擊發布預覽