這篇文章將通過一個接口文檔知識庫示例,帶你了解如何在 Cursor 中通過 Mcp Server 調用 Dify 平臺配置的工作流。
1. 準備工作
-
需要準備文本生成模型、向量模型、Rerank 模型(可選),這些都可以在 阿里云百煉平臺 申請免費使用額度。
-
準備知識庫文檔,我這里使用 Dify 維護知識庫API 文檔進行展示。
-
已熟悉使用 Cursor 。
我使用的文本生成模型為:qwen-plus-2025-04-28,向量模型:text-embedding-v4,rerank 模型:gte-rerank-v2。
1.1 如何將在線的 API 文檔一鍵轉換成 markdown 格式?
你可以通過我開發的 '?顧得助手?' (chrome 擴展程序)一鍵將網頁內容轉換為任意格式文檔。該擴展程序已上架 chrome 應用商店,搜索 顧得助手 即可獲得,也可以通過 github 下載體驗最新功能,地址:https://github.com/herogus/good_ai_chrome_extension。我的這篇博客有詳細介紹,感興趣的可以點擊閱讀。
下圖是簡單的請求示例:

2. 知識庫工作流搭建
2. 安裝 Dify
windows 下需要安裝 Docker destop,安裝教程可參考我的博客:
【環境搭建】Java、Python、Nodejs等開發環境搭建_node.js python環境安裝-CSDN博客文章瀏覽閱讀1.1k次,點贊7次,收藏21次。最近新買了一臺電腦,開發的同學都知道,重新在新電腦搭建開發環境是一件相對繁瑣的事,這篇文章我將介紹如何搭建Java(jdk、maven等)、Python(uv、conda等)、Nodejs、Docker Desktop(wsl2、docker等)等環境和應用。_node.js python環境安裝https://blog.csdn.net/u013176571/article/details/148382037?spm=1001.2014.3001.5502
# 下載代碼
git clone https://github.com/langgenius/dify.git
# 進入docker目錄
cd docker
# 使用 docker compose 部署
cp .env.example .env
docker compose up -d
也可以體驗官方提供的在線免費版(需科學上網):https://cloud.dify.ai/apps
2.2 知識庫搭建
2.2.1 創建知識庫
進入 Dify 首頁 》 知識庫 》 創建知識庫 》 創建一個新的知識庫

2.2.2 文本分段設置
上傳文件后會進入到文本分割設置界面,點擊‘預覽塊’支持查看分割詳情。

-
分段設置:用于設置 ' 文本分塊 ' 規則,文本文檔可以按照 \n\n,\n (段落、行) , markdown 文檔按照標題分塊 ##,###,####。
-
Embedding 模型設置:這里配置向量模型,用于資源向量化。
-
檢索設置,支持以下幾種檢索方式:
-
向量檢索:基于向量相似度檢索方式。
-
全文索引:基于關鍵詞倒排索引,類似 ES。
-
混合索引:同時執行全文檢索和向量檢索,最后通過 Rerank 模型對結果進行重排序。Top K 表示返回的結果數量(相似度得分最高的 K 個值)。
注:配置完之后,可以在 召回測試 中測試效果,如果效果不好,可以嘗試調整 相似度閾值 (值越大,精確度越高)。


2.2.3 搭建知識庫工作流
你可以在 ‘?探索?’ 模塊使用已有的模板創建工作流或者在 ' 工作室 ' 模塊創建一個新的工作流。

我這邊使用最簡單的配置,根據請求內容直接進行知識庫檢索,然后通過大模型總結后返回,你可以在 '知識檢索' 之前,增加一個 '問題分類' 流程,讓模型根據不同的輸入內容,索引到不同的知識庫。?

配置好后,點擊 發布 按鈕,發布自己的應用。
3. 配置MCP_SERVER
3.1 官方提供的 MCP 服務
3.1.1 入口
可以在 ' 編輯描述 ' 中說明工作流的功能以及調用說明。
3.1.2 cursor 配置
進入 cursor ,編輯 mcp.json,其中 url 為上圖 ‘ 服務端點 URL ’。
{"mcpServers": {"OnlineDifyServer": {"url": "https://api.dify.ai/mcp/server/QfH9DT07Mf33kxCX/mcp"}
}
3.2 自己開發一個 MCP Server
3.2.1 python 源碼
當然我喜歡自己自足,下面是我用 python 開發的一個調用 Dify 工作流(應用)的 Mcp Server 。
里面的 BASE_URL 是固定的,不同的工作流(應用)對應不同的 API_KEY。
import os
import uuid
from typing import Dict, Any, Optionalimport httpx
from dotenv import load_dotenv
from mcp.server.fastmcp import FastMCP# 定義一個 FastMCp 實例
mcp = FastMCP("DIFY_MCP_SERVER")# DIFY API配置信息
load_dotenv()
BASE_URL = "https://api.dify.ai/v1/chat-messages"
API_KEY = os.getenv("API_KEY")async def query_knowledge(query: str) -> Optional[Dict[str, Any]]:"""查詢知識庫信息"""if not API_KEY:return {"error": "API_KEY 未配置或為空"}headers = {"Authorization": f"Bearer {API_KEY}","Content-Type": "application/json",}data = {"query": query,"user": str(uuid.uuid4()),"inputs": {},"response_mode": "blocking","conversation_id": "",}try:async with httpx.AsyncClient(timeout=120.0) as client:response = await client.post(BASE_URL, headers=headers, json=data)response.raise_for_status()print(f"Response status: {response.status_code}")print(f"Response text: {response.text}")return response.json()except httpx.HTTPError as e:return {"error": f"查詢知識庫請求失敗:{e}"}except Exception as e:return {"error": f"未知錯誤:{e}"}def format_response_data(response_data: Dict[str, Any]) -> str:"""格式化 Dify 返回數據"""event = response_data.get("event", "")if "error" == event:return str(response_data["message"])return response_data.get("answer", "")@mcp.tool()
async def query_dify_interface_info(query: str) -> str:"""用于查詢 Dify 維護知識庫接口文檔參數:- query: 查詢內容,str格式- 請求示例:1、通過文本創建文檔2、通過文件創建文檔3、創建空知識庫4、知識庫列表..."""response_data = await query_knowledge(query)return format_response_data(response_data)if __name__ == "__main__":# 運行 MCP 服務器,默認傳輸協議 stdiomcp.run(transport="stdio")
請求密鑰在這里獲取:
3.2.2 cursor 配置
{"mcpServers": {"LocalDifyServer": {"command": "uv","args": ["--directory","D:\\workspace\\project\\python\\2025\\good-agent-fastapi\\mcps","run","dify_mcp_server.py"],"env": {"API_KEY": "填寫服務密鑰"}}}
}
4. 驗證Mcp Server是否加載
Cursor 設置界面,出現如下信息說明工具加載正常。
5. 執行效果
問:查詢DIFY 創建空知識庫接口文檔
6. 拓展
6.1 如何提高查詢匹配度?
在使用過程中,可能口語提問往往不能查詢到自己想要的結果,可以嘗試在每個文本分段中,增加常見問題段落以提高自然提問命中率,比如(以 '?通過文本創建文檔 ' 接口為例):
#### 💬 常見用戶提問- 如何通過一段文本添加一個知識文檔?
- 可以用 API 上傳文字內容嗎?
- 不上傳文件,怎么創建文檔?
- `create_by_text` 是什么用的?