# dify-mcp

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/salted-butter-joshua/dify-mcp  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/dify-mcp

## Description
MCP server exposing Dify knowledge base retrieval to Cursor and other MCP clients

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "dify-mcp": {
    "command": "npx",
    "args": ["-y","dify-mcp"]
  }
}
```

## Documentation & README

# dify-mcp

<!-- mcp-name: io.github.salted-butter-joshua/dify-mcp -->

Expose [Dify](https://dify.ai) knowledge base retrieval capabilities via [MCP](https://modelcontextprotocol.io) (Model Context Protocol), for use in Cursor and other MCP-compatible clients.

Connect to a self-hosted or remote Dify instance over HTTP, with optional dataset allowlisting for access control.

## Features

- **Knowledge base discovery** — list and inspect allowed datasets
- **Semantic retrieval** — search chunks via Dify `POST /datasets/{dataset_id}/retrieve`
- **Document browsing** — list documents and segments within a dataset
- **Dataset allowlist** — restrict access to specific `dataset_id` values
- **stdio transport** — no manual server startup; the MCP client launches the process

## Requirements

- Python **3.11+**
- A running Dify instance with Knowledge Base API enabled
- Network access from the machine running the MCP server to your Dify API endpoint
- A Dify **Knowledge Base API Key** (Dify → Knowledge → Service API → API Key)

## Quick Start

### 1. Clone and install

```bash
git clone https://github.com/salted-butter-joshua/dify-mcp.git
cd dify-mcp

python3.11 -m venv .venv

# Windows
.venv\Scripts\python.exe -m pip install -e .

# macOS / Linux
.venv/bin/python -m pip install -e .
```

Verify import:

```bash
# Windows
.venv\Scripts\python.exe -c "import dify_mcp; print('OK')"

# macOS / Linux
.venv/bin/python -c "import dify_mcp; print('OK')"
```

### 2. Configure environment

Copy the example env file and edit it:

```bash
cp .env.example .env
```

```env
DIFY_API_BASE=http://your-dify-host/v1
DIFY_API_KEY=dataset-your-api-key
DIFY_ALLOWED_DATASETS=dataset-uuid-1,dataset-uuid-2
DIFY_TIMEOUT=30
DIFY_VERIFY_SSL=false
```

| Variable | Description |
|----------|-------------|
| `DIFY_API_BASE` | Dify Knowledge API base URL, e.g. `http://192.168.1.100/v1` |
| `DIFY_API_KEY` | Knowledge Base API key |
| `DIFY_ALLOWED_DATASETS` | Comma-separated dataset UUIDs to expose (required) |
| `DIFY_TIMEOUT` | HTTP timeout in seconds (default: `30`) |
| `DIFY_VERIFY_SSL` | Verify TLS certificates (default: `false` for self-signed certs) |

Run the health check:

```bash
# Windows
.venv\Scripts\python.exe scripts/health_check.py

# macOS / Linux
.venv/bin/python scripts/health_check.py
```

### 3. Add to Cursor

You do **not** need to start the MCP server manually. Cursor launches it automatically via stdio.

1. Open Cursor Settings → **MCP** → **Edit config**
2. Add the following to `mcpServers` in your MCP config file:
   - Windows: `%USERPROFILE%\.cursor\mcp.json`
   - macOS / Linux: `~/.cursor/mcp.json`
3. Replace paths and env values with your own
4. Restart Cursor

See [`mcp.json.example`](https://github.com/salted-butter-joshua/dify-mcp/blob/HEAD/mcp.json.example) for a full example.

**Windows example:**

```json
{
  "mcpServers": {
    "dify-knowledge": {
      "command": "/absolute/path/to/dify-mcp/.venv/Scripts/python.exe",
      "args": ["-m", "dify_mcp.server"],
      "cwd": "/absolute/path/to/dify-mcp",
      "env": {
        "DIFY_API_BASE": "http://your-dify-host/v1",
        "DIFY_API_KEY": "dataset-your-api-key",
        "DIFY_ALLOWED_DATASETS": "dataset-uuid-1,dataset-uuid-2",
        "DIFY_TIMEOUT": "30",
        "DIFY_VERIFY_SSL": "false"
      }
    }
  }
}
```

**macOS / Linux example:**

```json
{
  "mcpServers": {
    "dify-knowledge": {
      "command": "/absolute/path/to/dify-mcp/.venv/bin/python",
      "args": ["-m", "dify_mcp.server"],
      "cwd": "/absolute/path/to/dify-mcp",
      "env": {
        "DIFY_API_BASE": "http://your-dify-host/v1",
        "DIFY_API_KEY": "dataset-your-api-key",
        "DIFY_ALLOWED_DATASETS": "dataset-uuid-1,dataset-uuid-2"
      }
    }
  }
}
```

### 4. Verify in Cursor

1. Cursor Settings → **MCP** → confirm `dify-knowledge` shows as enabled
2. In chat, try:
   - *List available Dify knowledge bases*
   - *Search the knowledge base for "your query"*

## MCP Tools

| Tool | Description |
|------|-------------|
| `list_datasets` | List knowledge bases within the allowlist |
| `get_dataset` | Get metadata for one dataset |
| `search_knowledge` | Retrieve relevant chunks (primary retrieval tool) |
| `list_documents` | List documents in a dataset |
| `list_document_segments` | List text segments for a document |

## Architecture

```
Cursor (MCP client)
    │ stdio
    ▼
dify-mcp (local process)
    │ HTTPS / HTTP
    ▼
Dify Knowledge API (/v1/datasets/...)
```

The MCP server runs locally on your machine and calls the Dify API over the network. Dify does not need to reach your machine.

## Troubleshooting

| Issue | Cause | Fix |
|-------|-------|-----|
| `No matching distribution found for mcp` | Python < 3.11 | Use Python 3.11+ in `.venv` |
| MCP shows error (red) | Wrong Python path, invalid key, or network issue | Check `mcp.json` paths and env vars |
| `401 Unauthorized` | Invalid API key | Regenerate key in Dify Service API panel |
| `Dataset not in allowed list` | UUID not in `DIFY_ALLOWED_DATASETS` | Add the dataset UUID to the allowlist |
| Health check missing env vars | `.env` not found | Ensure `.env` exists in the project root |
| Connection timeout | Dify unreachable | Check network / VPN / firewall |

## Project Structure

```
dify-mcp/
├── src/dify_mcp/
│   ├── server.py        # MCP entry point
│   ├── config.py        # Settings and allowlist
│   ├── dify_client.py   # Dify Knowledge API client
│   └── formatters.py    # Response formatting
├── scripts/
│   └── health_check.py  # Connectivity test
├── mcp.json.example     # Cursor MCP config template
├── .env.example         # Environment variable template
└── Dify-API.md          # Local API path reference
```

## API Reference

- [Dify Knowledge Base API (official)](https://docs.dify.ai/api-reference/knowledge-bases/list-knowledge-bases)
- [Retrieve chunks](https://docs.dify.ai/api-reference/knowledge-bases/retrieve-chunks-from-a-knowledge-base-test-retrieval)
- Local path reference: [`Dify-API.md`](https://github.com/salted-butter-joshua/dify-mcp/blob/HEAD/Dify-API.md)

## Security Notes

- Never commit `.env` or API keys to version control
- A single Knowledge Base API key can access all visible datasets under the account — use `DIFY_ALLOWED_DATASETS` to limit exposure
- Prefer running MCP locally; keep API keys in `mcp.json` env or `.env` on your machine only

