AI创想
标题:
Dify调用MCP服务实例(含外部MCP服务及自身)
[打印本页]
作者:
wsgn_001
时间:
6 小时前
标题:
Dify调用MCP服务实例(含外部MCP服务及自身)
作者:ShenLiang2025
Dify调用外部MCP服务
安装UV
powershell -ExecutionPolicy ByPass -c "$env:UV_INSTALL_DIR = 'D:\Program\Work\uv';irm https://astral.sh/uv/install.ps1 | iex"
复制代码
设置环境变量
setx UV_HOME "D:\Program\Work\uv" # 替换为安装时选择的目录
setx UV_CACHE_DIR "%UV_HOME%\cache"
setx UV_CONFIG_FILE "%UV_HOME%\uv.toml"
setx UV_INSTALL_DIR "%UV_HOME%\bin"
setx UV_PYTHON_BIN_DIR "%UV_HOME%\bin"
setx UV_PYTHON_CACHE_DIR "%UV_HOME%\cache"
setx UV_PYTHON_INSTALL_DIR "%UV_HOME%\python"
setx UV_TOOL_BIN_DIR "%UV_HOME%\bin"
setx UV_TOOL_DIR "%UV_HOME%\tools"
复制代码
更改源
打开目录D:\Program\Work\uv
新建uv.toml,设置如下内容:
[[index]]
name = "tsinghua" # 清华源
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
[[index]]
name = "aliyun" # 阿里云源
url = "https://mirrors.aliyun.com/pypi/simple"
复制代码
创建项目
uv init pythonprac# 项目初始化
uv python install 3.13 # 安装指定版本
uv python pin 3.13 # 固定python版本
复制代码
创建虚拟环境
uv venv # 创建虚拟环境,默认生成.venv虚拟环境
复制代码
切换虚拟环境
.venv\Scripts\activate
复制代码
安装fastmcp
uv add "mcp[cli]"
复制代码
编写MCP服务
编写MCP服务python代码,该文件名为server.py。该服务的主要功能为统计knowledge库所有md文件数量、查看knowledge库内所有md文件的内容、按照文件名及内容生成md文件。
import os
import glob
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("mcp_server_1", "mcp server example",port=8095)
# 从环境变量中获取 Obsidian 根目录路径,默认为当前目录
KNOWLEDGE_ROOT = os.environ.get("_PATH", ".")
@mcp.tool()
def count_markdown_files():
"""获取 knowledge库中所有 Markdown 文件的数量"""
md_files = glob.glob(os.path.join(KNOWLEDGE_ROOT, "**/*.md"), recursive=True)
return len(md_files)
@mcp.tool()
def get_all_markdown_contents():
"""获取 knowledge库中所有 Markdown 文件的内容"""
md_files = glob.glob(os.path.join(KNOWLEDGE_ROOT, "**/*.md"), recursive=True)
result = []
for file_path in md_files:
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 获取相对路径作为文件标识符
relative_path = os.path.relpath(file_path, KNOWLEDGE_ROOT)
result.append({
"file": relative_path,
"content": content
})
except Exception as e:
result.append({
"file": os.path.relpath(file_path, KNOWLEDGE_ROOT),
"error": str(e)
})
return result
@mcp.tool()
def create_markdown_file(filename, content=""):
"""在 knowledge库中创建一个新的 Markdown 文件
Args:
filename: Markdown 文件名 (不需要 .md 后缀,会自动添加)
content: 文件的初始内容 (可选)
"""
# 确保有 .md 后缀
if not filename.endswith('.md'):
filename += '.md'
# 创建完整路径
file_path = os.path.join(KNOWLEDGE_ROOT, filename)
# 检查文件是否已存在
if os.path.exists(file_path):
return {"success": False, "error": f"文件 {filename} 已存在"}
try:
# 确保目录存在
os.makedirs(os.path.dirname(file_path), exist_ok=True)
# 创建文件
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
return {"success": True, "path": os.path.relpath(file_path, KNOWLEDGE_ROOT)}
except Exception as e:
return {"success": False, "error": str(e)}
if __name__ == "__main__":
print(f"knowledge MCP 服务已启动,使用路径: {KNOWLEDGE_ROOT}")
mcp.run(transport="sse")
复制代码
运行MCP服务
python server.py
复制代码
安装MCP插件
在dify的插件市场找到
Agent策略(支持MCP工具)
插件并安装。
(, 下载次数: 0)
上传
点击文件名下载附件
编写Dify聊天工作流
新建聊天应用。
拖动开始,拖动Agent策略插件。
配置相关内容:
1、模型选择在 模型列表里的预先配置的,当前是 qwen3:8B
2、MCP服务配置见下:
{
"mcp_server_1": {
"url": "http://host.docker.internal:8095/sse", #当前Dify是本地宿主机内。
"headers": {},
"timeout": 60,
"sse_read_timeout": 300
}
}
3、指令:
你是一个工具助手,支持通过 MCP 协议获取可用工具,并执行工具调用。根据用户的问题,选择合适的工具调用,请根据用户的问题和工具执行的结果回复用户。
4、查询:
用户查询语句。
复制代码
效果验证
1、现在knowledge库里Markdown文件有多少?
(, 下载次数: 0)
上传
点击文件名下载附件
2、
在knowledge库中创建一个新的Markdown文件,内容是:你好,md文件管理库,20250909。
(, 下载次数: 0)
上传
点击文件名下载附件
3、显示knowledge库中所有Markdown文件的内容。
(, 下载次数: 0)
上传
点击文件名下载附件
Dify调用自身MCP服务
安装Agent策略支持
安装支持Angent策略支持MCP工具插件。
(, 下载次数: 0)
上传
点击文件名下载附件
发布MCP服务
在Dify主页工具栏,点击“添加MCP服务(HTTP)”
(, 下载次数: 0)
上传
点击文件名下载附件
定义Agent策略
配置MCP服务信息,详见图中json。
指定指令和查询相关信息。
(, 下载次数: 0)
上传
点击文件名下载附件
注:其中Dify发布为MCP服务的地址,可从左上角应用设置里找到。
(, 下载次数: 0)
上传
点击文件名下载附件
完整工作流
(, 下载次数: 0)
上传
点击文件名下载附件
原文地址:https://blog.csdn.net/shenliang1985/article/details/156829362
欢迎光临 AI创想 (http://llms-ai.com/)
Powered by Discuz! X3.4