AgentStack
MCP verified Apache-2.0 Self-run

Dify Mcp

mcp-alexjiaguo-dify-mcp · by alexjiaguo

The most complete Dify MCP server + CLI - 138 tools that let any AI agent build, test & ship Dify workflows autonomously. Works with Claude Code, Codex, Gemini, Cursor.

No reviews yet
0 installs
3 views
0.0% view→install

Install

$ agentstack add mcp-alexjiaguo-dify-mcp

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Dify Mcp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

dify-mcp

The most complete MCP server + CLI for Dify

138 tools. 16 namespaces. One registry. Let any AI agent build, test, and ship Dify workflows autonomously — everything a human can do in the UI, now scriptable.

[](LICENSE) [](https://nodejs.org) [](#tools) [](#live-verified)

Works with Claude Code · Codex · Gemini CLI · Cursor · Cline · Windsurf · Roo Code · Continue · Aider · Zed — and any other MCP-compatible or shell-capable agent.


What is this?

Dify is a powerful open-source LLM app platform — but its workflow builder is a visual drag-and-drop editor. What if you want an AI agent to programmatically create workflows, wire up nodes, test them, iterate, and publish — without a browser?

dify-mcp is the bridge. It exposes the entire Dify console API as a unified tool registry with two surfaces: a CLI any shell-capable agent can drive, and an MCP server (stdio) any MCP-compatible host can attach. Same 138 tools, same JSON contract, same safety guarantees.

┌──────────────────────────────────────────────────────────┐
│                    dify-mcp                              │
│                                                          │
│   ┌──────────┐    ┌────────────────────┐    ┌─────────┐ │
│   │  CLI     │───▶│   138-tool         │───▶│  Dify   │ │
│   │  difywf  │    │   registry         │    │  API    │ │
│   └──────────┘    │                    │    └─────────┘ │
│   ┌──────────┐    │  app · workflow    │         ▲      │
│   │  MCP     │───▶│  provider · rag    │─────────┘      │
│   │  stdio   │    │  agent · snippet   │                │
│   └──────────┘    │  stats · audio ... │                │
│                   └────────────────────┘                │
└──────────────────────────────────────────────────────────┘

Works with your favorite agents

dify-mcp is agent-agnostic by design — no SDK lock-in, no proprietary protocol. If your agent can run a shell command, it can use the CLI. If it speaks MCP, it can attach the server. Most popular agents do both:

| Agent | MCP | CLI | Quick setup | |-------|:---:|:---:|-------------| | Claude Code | ✅ | ✅ | claude mcp add dify -- difywf mcp serve | | Codex | ✅ | ✅ | [mcp_servers.dify] in ~/.codex/config.toml | | Gemini CLI | ✅ | ✅ | mcpServers.dify in ~/.gemini/settings.json | | Cursor | ✅ | ✅ | .cursor/mcp.json | | Cline | ✅ | ✅ | Same JSON shape as Cursor | | Windsurf | ✅ | ✅ | MCP server config in Windsurf settings | | Roo Code | ✅ | ✅ | MCP server config in Roo Code settings | | Continue | ✅ | ✅ | experimental.mcpServer in config.json | | Zed | ✅ | ✅ | context_servers in ~/.config/zed/settings.json | | Aider | - | ✅ | Run difywf commands directly in chat |

Don't see your agent? If it supports MCP or can run shell commands, it works. The [connect section](#connect-your-agent-mcp) below has copy-paste configs for each host.

Why you'll star this

  • Complete coverage. Not a subset. Not a wrapper around the public API alone.

This talks to the internal console API — the same surface the Dify web UI uses. Create apps, author graphs node-by-node, validate, test-run, publish, manage versions, triggers, providers, plugins, RAG pipelines, snippets, agent configs, comments, annotations, audio, stats. If the UI can do it, so can your agent.

  • Agent-agnostic by design. No SDK lock-in. The CLI works with any agent that

can run a shell command. The MCP server works with any MCP host. Both return structured JSON — { ok, data } or { ok: false, error: { code, message, retryable } } — so agents never scrape human-readable text.

  • Cookie auth, handled. Dify's console uses cookie + CSRF double-submit, not

Bearer tokens. dify-mcp captures, stores, and auto-refreshes the session — including the server-side refresh-token rotation that silently invalidates naive clients.

  • Safe by default. Destructive operations require explicit confirm=true /

--yes. Graphs are validated offline before sync. Every mutation is audit-logged. --dry-run shows diffs without saving.

  • Zero build step. Runs directly on Node 23.6+ native TypeScript. No compiler,

no bundler, no transpiler. Clone, install, go.

Live verified

Every tool category has been tested against cloud.dify.ai with real credentials:

  • ✅ Full authoring loop: create app → sync draft → run draft → publish → list versions
  • ✅ All 16 namespaces exercised: apps, workflows, providers, plugins, triggers,

snippets, RAG, agents, stats, comments, annotations, audio, files, runs, workspace

  • ✅ MCP transport: tools/call over stdio with live cookie auth
  • ✅ 42 unit tests · typecheck clean · MCP smoke (138 tools)

Quickstart

Prerequisites: Node >= 23.6 (native TypeScript type stripping — no build step).

git clone https://github.com/alexjiaguo/dify-mcp.git
cd dify-mcp
npm install
npm link        # puts `difywf` on your PATH (optional)

Authenticate

The Dify console uses cookie + CSRF auth. The easiest path:

# 1. Export cookies from your browser (cookie-editor extension → Export → JSON)
# 2. Save as cookies.json, then:
difywf auth import-cookies --base-url https://cloud.dify.ai --file cookies.json

# Or self-hosted with email/password (no browser needed):
difywf auth login-console --base-url https://your-dify --email you@x --password '***'

difywf auth status   # confirm: shows base URL + cookie names (values masked)

Build a workflow

difywf agent guide                          # self-onboarding playbook for agents
difywf app list                             # see your apps
difywf app create --mode workflow --name "my-agent-workflow"

difywf wf node defaults  llm        # get the schema for an LLM node
difywf wf validate --graph graph.json       # offline: structure, refs, cycles
difywf wf draft sync  --graph graph.json --dry-run   # preview diff
difywf wf draft sync  --graph graph.json             # save draft
difywf wf test  --input query="hello"                # test-run the draft
difywf wf publish  --yes                             # ship it

Connect your agent (MCP)

Same binary, same 138 tools. Copy-paste the config for your host:

Claude Code

claude mcp add dify -- difywf mcp serve

Codex (~/.codex/config.toml)

[mcp_servers.dify]
command = "difywf"
args = ["mcp", "serve"]

Cursor (.cursor/mcp.json) · Cline · Roo Code · Continue

{
  "mcpServers": {
    "dify": {
      "command": "difywf",
      "args": ["mcp", "serve"]
    }
  }
}

Gemini CLI (~/.gemini/settings.json)

{
  "mcpServers": {
    "dify": {
      "command": "difywf",
      "args": ["mcp", "serve"]
    }
  }
}

Windsurf (Codeium)

Add an MCP server in Windsurf settings (Cmd+, -> MCP Servers) with command difywf and args ["mcp", "serve"].

Zed (~/.config/zed/settings.json)

{
  "context_servers": {
    "dify": {
      "command": "difywf",
      "args": ["mcp", "serve"]
    }
  }
}

Aider (CLI only — no MCP)

Aider doesn't support MCP, but it can run shell commands. Just use the CLI directly:

/run difywf app list
/run difywf wf draft sync  --graph graph.json

> No difywf on PATH? Use the absolute path: node /path/to/dify-mcp/bin/difywf.js mcp serve.

Tools

138 tools across 16 namespaces. Run difywf --help for the full live list, or difywf agent guide for the agent-oriented playbook.

| Namespace | Tools | What it does | |-----------|-------|-------------| | app | 13 | List, create, update, delete, export, import, copy, rename, convert apps | | workflow | 22 | Get/sync drafts, validate, run, publish, node defaults, variables, versions, HITL | | provider | 3 | List providers, list models, set credentials | | plugin | 1 | List installed plugins | | trigger | 4 | Create, enable, list, webhook triggers; run triggers | | workspace | 4 | List, get, switch workspaces; list members | | file | 1 | Upload files for use in runs | | runs | 4 | List, get, node executions, export run traces | | stats | 5 | Daily conversations/terminals, token costs, app interactions, online users | | comment | 3 | List, add, resolve workflow comments | | annotation | 12 | List, add, delete, reply, settings, export, batch import, hit histories | | audio | 3 | Transcribe (STT), synthesize (TTS), list voices | | rag | 20 | Full RAG pipeline lifecycle: datasets, templates, draft, sync, run, publish, versions | | snippet | 22 | Customized snippet lifecycle: create, import, draft, sync, run, publish, versions | | agent | 16 | Agent config skills/files, drive files/skills, sandbox read/upload | | explore | 2 | Run and stop installed apps | | auth | 2 | Status, login, import cookies |

Safety

| Mechanism | How it works | |-----------|-------------| | Confirm gates | Destructive ops (delete, publish, restore, set_credentials) require confirm=true / --yes. Without it: exit code 4. | | Offline validation | sync_draft validates the graph structure, variable refs, connectivity, and cycles before hitting the API. Errors abort with exit 5. | | Dry-run | --dry-run on sync_draft returns a structural diff without saving. | | Audit log | Every mutation appends to ~/.difywf/audit.jsonl (secrets redacted). | | Auto-refresh | Cookie sessions auto-refresh on 401 via the refresh-token cookie, with server-side rotation persisted. |

Error/exit codes: USAGE_ERROR(2), AUTH_REQUIRED(3), CONFIRM_REQUIRED(4), VALIDATION_FAILED(5), RBAC_DENIED(6), NOT_FOUND(7), DSL_VERSION_MISMATCH(8), RATE_LIMITED(9), SERVER_ERROR(10), NETWORK_ERROR(11). Check error.retryable before retrying.

Develop

npm run typecheck   # tsc --noEmit
npm test            # 42 unit tests
npm run smoke:mcp   # MCP stdio smoke (138 tools, JSON-RPC handshake)

No build step. Source runs directly via Node's type stripping.

License

Apache-2.0 — see [LICENSE](LICENSE).

If this saves you time, a ⭐ is the best thank-you.

Built for agents, by agents.

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.