# dify_workflow_edit_mcp **Repository Path**: awol2010ex/dify_workflow_edit_mcp ## Basic Information - **Project Name**: dify_workflow_edit_mcp - **Description**: 一个基于 Rust 的 MCP(Model Context Protocol)服务器,用于通过 Dify 控制台 API 编辑和管理 Dify 工作流 - **Primary Language**: Rust - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-09 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Dify Workflow Edit MCP 一个基于 Rust 的 MCP(Model Context Protocol)服务器,用于通过 Dify 控制台 API 编辑和管理 Dify 工作流。 ![docs/snap-002.png](docs/snap-002.png) ![docs/snap-001.png](docs/snap-001.png) --- **仅 5 个精简工具**,通过 action/mode/view 子命令做功能分流。 **敏感信息零泄露**:`base_url`, `app_id`, `email`, `password` 全部从启动参数注入 MCP 服务器,启动时自动登录并拉取草稿,不经过 JSON-RPC 通道。 --- ## 快速开始 ### 编译 ```bash cargo build --release ``` 产物在 `target/release/dify_workflow_edit_mcp.exe`(Windows)或对应平台可执行文件。 ### 在 mcp.json 中配置 > 需要先将编译产物放到合适的路径,以下 `` 请替换为实际路径。 ```json { "mcpServers": { "dify-workflow-edit": { "command": "dify_workflow_edit_mcp", "args": [ "--base-url", "http://localhost:5001", "--app-id", "4c1e7f32-abcd-1234-ef56-7890abcdef12", "--email", "admin@example.com", "--password", "your_password" ] } } } ``` 或者用 API Key(如果只需运行已发布工作流): ```json { "mcpServers": { "dify-workflow-edit": { "command": "dify_workflow_edit_mcp", "args": [ "--base-url", "http://localhost:5001", "--app-id", "4c1e7f32-abcd-1234-ef56-7890abcdef12", "--api-key", "app-xxxxxxxxxxxxx" ] } } } ``` 需要走 HTTP 代理(如局域网 Dify 需科学上网): ```json { "mcpServers": { "dify-workflow-edit": { "command": "dify_workflow_edit_mcp", "args": [ "--base-url", "http://localhost:5001", "--app-id", "4c1e7f32-abcd-1234-ef56-7890abcdef12", "--email", "admin@example.com", "--password", "your_password", "--proxy", "http://127.0.0.1:7890" ] } } } ``` 启动后自动: 1. 登录控制台 API(获取 session cookie) 2. 拉取指定应用的草稿工作流(graph + features) 3. 进入 STDIO 循环等待 MCP 请求 --- ### 在 Trae IDE 中安装 [Trae IDE](https://www.trae.ai) 内置 MCP 支持,配置步骤如下: 1. 打开 Trae → 左侧底部 **⌘ M**(Mac)/ **Ctrl M**(Windows)→ **启用 Agent 模式** 2. 点击 Input 框附近的 **MCP 配置** 按钮(或 Settings → MCP Server) 3. 在 `mcp.json` 编辑器中填入上述配置 4. 点击「启动」/「重载」使配置生效 > 也可直接编辑 Trae 配置文件 `~/.config/trae/mcp.json`(macOS/Linux)或 `%APPDATA%\Trae\mcp.json`(Windows)。 完成后在对话中直接调用 MCP 工具即可编辑 Dify 工作流。 --- ## CLI 参数 | 参数 | 必填 | 说明 | |------|------|------| | `--base-url` | ✅ | Dify 服务地址,如 `http://localhost:5001` | | `--app-id` | ✅ | 工作流应用 ID(UUID 格式) | | `--email` | ⚠️ | 管理员邮箱(与 `--api-key` 二选一) | | `--password` | ⚠️ | 管理员密码 | | `--api-key` | ⚠️ | 公有 API Key(备选认证) | | `--proxy` | ❌ | HTTP 代理地址,如 `http://127.0.0.1:7890` | | `--info` | ❌ | 打印服务器信息后退出 | | `--help` / `-h` | ❌ | 显示帮助 | | `--version` / `-v` | ❌ | 显示版本 | --- ## 工具概览 | # | 工具 | 作用 | 子命令 | |---|------|------|--------| | 1 | **get_workflow** | 查看工作流(首次自动拉取草稿并缓存) | `graph`, `node`, `stats`, `features`, `env_vars`, `conv_vars`, `block_configs` | | 2 | **edit_workflow** | 编辑图(节点/边 CRUD),操作本地缓存 | `add_node`, `update_node`, `remove_node`, `add_edge`, `remove_edge` | | 3 | **sync_workflow** | 将本地缓存同步推送到 Dify 服务器 | — | | 4 | **run_workflow** | 运行草稿/单节点调试/运行已发布 | `draft`, `node`, `published` | | 5 | **publish_workflow** | 版本管理:发布/从版本恢复/列表 | `publish`, `restore`, `list` | --- ## 详细使用 ### 1. get_workflow ``` get_workflow view=graph # 完整图结构(首次自动拉取草稿) get_workflow view=node node_id=xxx # 单个节点详情 get_workflow view=stats # 统计信息 get_workflow view=features # 特征配置 get_workflow view=env_vars # 环境变量 get_workflow view=conv_vars # 对话变量 get_workflow view=block_configs # 默认块模板 ``` ### 2. edit_workflow(图编辑) ``` # 节点操作 edit_workflow action=add_node type=llm title="问答助手" edit_workflow action=add_node type=code title="代码节点" x=100 y=200 data={...} edit_workflow action=update_node node_id=xxx title="新标题" edit_workflow action=update_node node_id=xxx x=100 y=200 edit_workflow action=update_node node_id=xxx data={...} # 完整替换配置 edit_workflow action=update_node node_id=xxx field=variables.prompt_template data={...} # 局部字段更新 edit_workflow action=remove_node node_id=xxx # 边操作 edit_workflow action=add_edge source_node_id=A target_node_id=B edit_workflow action=remove_edge source_node_id=A target_node_id=B ``` ### 3. sync_workflow 将本地缓存编辑推送到 Dify 服务器。会发送 hash 做冲突检测。 ``` sync_workflow # 无参数 ``` ### 4. run_workflow ``` run_workflow mode=draft [inputs={...}] # 运行草稿 run_workflow mode=node node_id=xxx [inputs={...}] # 单节点调试 run_workflow mode=published [inputs={...}] [user=...] # 运行已发布(需启动时 --api-key) ``` ### 5. publish_workflow ``` publish_workflow action=publish # 发布 publish_workflow action=publish marked_name="v1.0" marked_comment="初始版本" publish_workflow action=restore workflow_id=xxx # 从版本恢复 publish_workflow action=list # 查看版本列表 ``` --- ## 典型工作流 ```mermaid graph LR A[启动: 参数注入] --> B[自动登录 + 拉取草稿] B --> C[get_workflow view=graph] C --> D[edit_workflow] D --> E[sync_workflow] E --> F[publish_workflow] F --> G[run_workflow mode=published] ``` 1. **mcp.json 配置**`--base-url --app-id --email --password` 2. **查看** → `get_workflow view=graph`(已自动拉取) 3. **编辑** → `edit_workflow action=add_node / update_node / remove_node / add_edge` 4. **同步** → `sync_workflow`(推回 Dify) 5. **发布** → `publish_workflow action=publish` 6. **运行** → `run_workflow mode=published inputs={...}` --- ## 架构 ``` src/ ├── main.rs # CLI 参数解析 + 自动登录 + 拉取草稿 + STDIO 主循环 ├── lib.rs # 模块导出 ├── core.rs # 核心类型(DifyServer, WorkflowGraph, Node, Edge 等) ├── client.rs # Dify HTTP API 客户端(含 login + 自动重登 + 代理支持) ├── handlers.rs # JSON-RPC 处理器 + 5 工具分发 └── tools/ ├── mod.rs # 工具入口 ├── graph.rs # edit_workflow 图操作核心 ├── workflow.rs # get/sync/publish 工作流生命周期 ├── run.rs # run_workflow 运行 └── config.rs # get_workflow 配置相关视图 ``` ## 凭据安全设计 | 方面 | 实现 | |------|------| | 敏感信息传递 | 仅通过 mcp.json 的 CLI 参数,不经过 JSON-RPC | | 会话过期处理 | client.rs 自动检测 401 → 重新登录并重试一次 | | API Key 备选 | `--api-key` 模式无需暴露控制台凭据 | | 代理支持 | `--proxy` 参数透传给 reqwest | # LICENSE Apache-2.0