AI创想

标题: Dify调用MCP服务实例(含外部MCP服务及自身) [打印本页]

作者: wsgn_001    时间: 6 小时前
标题: Dify调用MCP服务实例(含外部MCP服务及自身)
作者:ShenLiang2025
Dify调用外部MCP服务

安装UV
  1. powershell -ExecutionPolicy ByPass -c "$env:UV_INSTALL_DIR = 'D:\Program\Work\uv';irm https://astral.sh/uv/install.ps1 | iex"
复制代码
设置环境变量
  1. setx UV_HOME "D:\Program\Work\uv" # 替换为安装时选择的目录
  2. setx UV_CACHE_DIR "%UV_HOME%\cache"
  3. setx UV_CONFIG_FILE "%UV_HOME%\uv.toml"
  4. setx UV_INSTALL_DIR "%UV_HOME%\bin"
  5. setx UV_PYTHON_BIN_DIR "%UV_HOME%\bin"
  6. setx UV_PYTHON_CACHE_DIR "%UV_HOME%\cache"
  7. setx UV_PYTHON_INSTALL_DIR "%UV_HOME%\python"
  8. setx UV_TOOL_BIN_DIR "%UV_HOME%\bin"
  9. setx UV_TOOL_DIR "%UV_HOME%\tools"
复制代码
更改源
  1. 打开目录D:\Program\Work\uv
  2. 新建uv.toml,设置如下内容:
  3. [[index]]
  4. name = "tsinghua" # 清华源
  5. url = "https://pypi.tuna.tsinghua.edu.cn/simple"
  6. default = true
  7. [[index]]
  8. name = "aliyun" # 阿里云源
  9. url = "https://mirrors.aliyun.com/pypi/simple"
复制代码
创建项目
  1. uv init pythonprac# 项目初始化
  2. uv python install 3.13 # 安装指定版本
  3. uv python pin 3.13 # 固定python版本
复制代码
创建虚拟环境
  1. uv venv # 创建虚拟环境,默认生成.venv虚拟环境
复制代码
切换虚拟环境
  1. .venv\Scripts\activate
复制代码
安装fastmcp
  1. uv add "mcp[cli]"
复制代码
编写MCP服务
  1. 编写MCP服务python代码,该文件名为server.py。该服务的主要功能为统计knowledge库所有md文件数量、查看knowledge库内所有md文件的内容、按照文件名及内容生成md文件。
  2. import os
  3. import glob
  4. from mcp.server.fastmcp import FastMCP
  5. mcp = FastMCP("mcp_server_1", "mcp server example",port=8095)
  6. # 从环境变量中获取 Obsidian 根目录路径,默认为当前目录
  7. KNOWLEDGE_ROOT = os.environ.get("_PATH", ".")
  8. @mcp.tool()
  9. def count_markdown_files():
  10.     """获取 knowledge库中所有 Markdown 文件的数量"""
  11.     md_files = glob.glob(os.path.join(KNOWLEDGE_ROOT, "**/*.md"), recursive=True)
  12.     return len(md_files)
  13. @mcp.tool()
  14. def get_all_markdown_contents():
  15.     """获取 knowledge库中所有 Markdown 文件的内容"""
  16.     md_files = glob.glob(os.path.join(KNOWLEDGE_ROOT, "**/*.md"), recursive=True)
  17.     result = []
  18.     for file_path in md_files:
  19.         try:
  20.             with open(file_path, 'r', encoding='utf-8') as f:
  21.                 content = f.read()
  22.             # 获取相对路径作为文件标识符
  23.             relative_path = os.path.relpath(file_path, KNOWLEDGE_ROOT)
  24.             result.append({
  25.                 "file": relative_path,
  26.                 "content": content
  27.             })
  28.         except Exception as e:
  29.             result.append({
  30.                 "file": os.path.relpath(file_path, KNOWLEDGE_ROOT),
  31.                 "error": str(e)
  32.             })
  33.     return result
  34. @mcp.tool()
  35. def create_markdown_file(filename, content=""):
  36.     """在 knowledge库中创建一个新的 Markdown 文件
  37.     Args:
  38.         filename: Markdown 文件名 (不需要 .md 后缀,会自动添加)
  39.         content: 文件的初始内容 (可选)
  40.     """
  41.     # 确保有 .md 后缀
  42.     if not filename.endswith('.md'):
  43.         filename += '.md'
  44.     # 创建完整路径
  45.     file_path = os.path.join(KNOWLEDGE_ROOT, filename)
  46.     # 检查文件是否已存在
  47.     if os.path.exists(file_path):
  48.         return {"success": False, "error": f"文件 {filename} 已存在"}
  49.     try:
  50.         # 确保目录存在
  51.         os.makedirs(os.path.dirname(file_path), exist_ok=True)
  52.         # 创建文件
  53.         with open(file_path, 'w', encoding='utf-8') as f:
  54.             f.write(content)
  55.         return {"success": True, "path": os.path.relpath(file_path, KNOWLEDGE_ROOT)}
  56.     except Exception as e:
  57.         return {"success": False, "error": str(e)}
  58. if __name__ == "__main__":
  59.     print(f"knowledge MCP 服务已启动,使用路径: {KNOWLEDGE_ROOT}")
  60.     mcp.run(transport="sse")
复制代码
运行MCP服务
  1. python server.py
复制代码
安装MCP插件

在dify的插件市场找到 Agent策略(支持MCP工具)插件并安装。
(, 下载次数: 0)


编写Dify聊天工作流
  1. 新建聊天应用。
  2. 拖动开始,拖动Agent策略插件。
  3. 配置相关内容:
  4. 1、模型选择在 模型列表里的预先配置的,当前是 qwen3:8B
  5. 2、MCP服务配置见下:
  6. {
  7. "mcp_server_1": {
  8.     "url": "http://host.docker.internal:8095/sse", #当前Dify是本地宿主机内。
  9.     "headers": {},
  10.     "timeout": 60,
  11.     "sse_read_timeout": 300
  12.   }
  13. }
  14. 3、指令:
  15. 你是一个工具助手,支持通过 MCP 协议获取可用工具,并执行工具调用。根据用户的问题,选择合适的工具调用,请根据用户的问题和工具执行的结果回复用户。
  16. 4、查询:
  17. 用户查询语句。
复制代码
效果验证

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策略


原文地址:https://blog.csdn.net/shenliang1985/article/details/156829362




欢迎光临 AI创想 (http://llms-ai.com/) Powered by Discuz! X3.4