# dify-mcp-client
**Repository Path**: lubo2046/dify-mcp-client
## Basic Information
- **Project Name**: dify-mcp-client
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-04-06
- **Last Updated**: 2025-04-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# dify-mcp-client
`MCP Client` as Agent Strategy Plugin.
> [!IMPORTANT]
> Dify is not `MCP Server` but `MCP Host`.

## How it works
Each `MCP client` (ReAct Agent) node can connect `MCP servers`.
1. `Tool`, `Resource`, `Prompt` lists are converted into Dify Tools.
2. Your selected LLM can see their `name`, `description`, `argument type`
3. The LLM calls Tools based on the ReAct loop (Reason → Act → Observe).
> [!NOTE]
> Most of the code in this repository contains the following files.
> #### Dify Official Plugins / Agent Strategies
> https://github.com/langgenius/dify-official-plugins/tree/main/agent-strategies/cot_agent
## ✅ What I did
- Copied `ReAct.py` and renamed file as `mcpReAct.py`
- Added `config_json` GUI input field by editing `mcpReAct.yaml` and `class mcpReActParams()`
### in mcpReAct.py, I added
- New 12 functions for MCP
- `__init__()` for initializing `AsyncExitStack` and `event loop`
- Some codes in `_handle_invoke_action()` for MCP
- MCP setup and cleanup in `_invoke()`
- Add SSE MCP client (v0.0.2)
- Support multi SSE servers (v0.0.3)
> [!IMPORTANT]
> ReAct while loop is as they are
## ⚠️ Caution and Limitation
> [!CAUTION]
> This plugin does **not** implement a **human-in-the-loop** mechanism by default, so connect **reliable mcp server only**.
> To avoid it, decrease `max itereations`(default:`3`) to `1`, and use this Agent node repeatedly in Chatflow.
> However, agent memory is reset by the end of Workflow.
> Use `Conversaton Variable` to save history and pass it to QUERY.
> Don't forget to add a phrase such as
> *"ask for user's permission when calling tools"* in INSTRUCTION.
> [!WARNING]
> - The Tools field should not be left blank. so **select Dify tools** like "current time".
# How to use this plugin
## 🛜Install the plugin from GitHub
- Enter the following GitHub repository name
```
https://github.com/3dify-project/dify-mcp-client/
```
- Dify > PLUGINS > + Install plugin > INSTALL FROM > GitHub

## ⬇️Install the plugin from .difypkg file
- Go to Releases https://github.com/3dify-project/dify-mcp-client/releases
- Select suitable version of `.difypkg`
- Dify > PLUGINS > + Install plugin > INSTALL FROM > Local Package File

## How to handle errors when installing plugins?
**Issue**: If you encounter the error message: `plugin verification has been enabled, and the plugin you want to install has a bad signature`, how to handle the issue?
**Solution**: Add the following line to the end of your `/docker/.env` configuration file:
```
FORCE_VERIFYING_SIGNATURE=false
```
Run the following commands to restart the Dify service:
```bash
cd docker
docker compose down
docker compose up -d
```
Once this field is added, the Dify platform will allow the installation of all plugins that are not listed (and thus not verified) in the Dify Marketplace.
> [!TIP]
> Marketplace need Approval. If stars⭐ reach 100, I'll consider to make PR for them.
## Source code plugin deploy
steps are as follows.
[how-to-develop-and-deploy-plugin](https://github.com/3dify-project/dify-mcp-client?tab=readme-ov-file#how-to-develop-and-deploy-plugin)
## Where does this plugin show up?
- It takes few minutes to install
- Once installed, you can use it any workflows as Agent node
- Select "mcpReAct" strategy (otherwise no MCP)

## Config
MCP Agent Plugin node require config_json like this to command or URL to connect MCP servers
```
{
"mcpServers":{
"name_of_server1":{
"url": "http://host.docker.internal:8080/sse"
},
"name_of_server2":{
"url": "http://host.docker.internal:8008/sse"
}
}
}
```
> [!WARNING]
> - Each server's port number should be different, like 8080, 8008, ...
## Chatflow Example

#### I provide this Dify ChatFlow for testing dify mcp plugin as .yml.
https://github.com/3dify-project/dify-mcp-client/tree/main/test/chatflow
#### After download DSL(yml) file, import it in Dify and you can test MCP using "Everything MCP server"
https://github.com/modelcontextprotocol/servers/tree/main/src/everything
# How to convert stdio MCP server into SSE MCP server
## option1️⃣: Edit MCP server's code
If fastMCP server, change like this
```diff
if __name__ == "__main__":
- mcp.run(transport="stdio")
+ mcp.run(transport="sse")
```
## option2️⃣: via mcp-proxy
```
\mcp-proxy>uv venv -p 3.12
.venv\Scripts\activate
uv tool install mcp-proxy
```
### Check Node.js has installed and npx(.cmd) Path
(Mac/Linux)
```
which npx
```
(Windows)
```
where npx
```
```
C:\Program Files\nodejs\npx
C:\Program Files\nodejs\npx.cmd
C:\Users\USER_NAME\AppData\Roaming\npm\npx
C:\Users\USER_NAME\AppData\Roaming\npm\npx.cmd
```
If claude_desktop_config.json is following schema,
```
{
"mcpServers": {
"SERVER_NAME": {
"command": CMD_NAME_OR_PATH
"args": {VALUE1, VALUE2}
}
}
}
```
### Wake up stdio MCP server by this command
```
mcp-proxy --sse-port=8080 --pass-environment -- CMD_NAME_OR_PATH --arg1 VALUE1 --arg2 VALUE2 ...
```
If your OS is Windows, use npx.cmd instead of npx. Following is example command to convert stdio "everything MCP server" to SSE via mcp-proxy.
```
mcp-proxy --sse-port=8080 --pass-environment -- C:\Program Files\nodejs\npx.cmd --arg1 -y --arg2 @modelcontextprotocol/server-everything
```
Similarly, on another command line (If you use sample Chatflow for v0.0.3)
```
pip install mcp-simple-arxiv
mcp-proxy --sse-port=8008 --pass-environment -- C:\Users\USER_NAME\AppData\Local\Programs\Python\Python310\python.exe -m -mcp_simple_arxiv
```
> [!Warning]
> Additional argument for mcp-proxy. Be careful when you use it. There may be security risk such as XSS, CSRF. (default: no CORS allowed)
> ```
> --allow-origin='*'
> ```
Following is a mcp-proxy setup log.
```
(mcp_proxy) C:\User\USER_NAME\mcp-proxy>mcp-proxy --sse-port=8080 --pass-environment -- C:\Program Files\nodejs\npx.cmd --arg1 -y --arg2 @modelcontextprotocol/server-everything
DEBUG:root:Starting stdio client and SSE server
DEBUG:asyncio:Using proactor: IocpProactor
DEBUG:mcp.server.lowlevel.server:Initializing server 'example-servers/everything'
DEBUG:mcp.server.sse:SseServerTransport initialized with endpoint: /messages/
INFO: Started server process [53104]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)
```
# 🔨 How to develop and deploy plugin
### General plugin dev guide
https://github.com/3dify-project/dify-mcp-client/blob/main/GUIDE.md
### Dify plugin SDK daemon
In my case (Windows 11) ,need to download dify-plugin-windows-amd64.exe (v0.0.3)
Choose your OS-compatible verson at here:
https://github.com/langgenius/dify-plugin-daemon/releases
Rename it as dify.exe
### Reference
https://docs.dify.ai/plugins/quick-start/develop-plugins/initialize-development-tools
> [!NOTE]
> You can skip this stage if you pull or download codes of this repo
> ```
> dify plugin init
> ```
> Initial settings are as follow
> 
### Install python module
Python3.12+ is compatible. Dify plugin official installation guide use pip, but I used uv.
```
uv init --python=python3.12
.venv\Scripts\activate
```
Install python modules for plugin development
```
uv add werkzeug==3.0.3
uv add flask
uv add dify_plugin
```
### Copy and rename env.example to .env
I changed `REMOTE_INSTALL_HOST` from `debug.dify.ai` to `localhost`
(Docker Compose environment)
click bug icon button to see these information
### Change directory
```
cd mcp_client
```
### Do Once
```
pip install -r requirements.txt
```
### Activate Dify plugin
```
python -m main
```
(ctrl+C to stop)
> [!TIP]
> REMOTE_INSTALL_KEY of .env often changes.
> If you encounter error messages like `handshake failed, invalid key`, renew it.
### Package into .difypkg
`./mcp_client` is my default root name
```
dify plugin package ./ROOT_OF_YOUR_PROJECT
```
## Useful GitHub repositories for developers
#### Dify Plugin SDKs
https://github.com/langgenius/dify-plugin-sdks
#### MCP Python SDK
https://github.com/modelcontextprotocol/python-sdk
> [!TIP]
> Especially useful following MCP client example
> https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/clients/simple-chatbot/mcp_simple_chatbot/main.py
> [!NOTE]
> Dify plugin has `requirements.txt` which automatically installs python modules.
> I include `mcp` in it, so you don't need to download the MCP SDK separately.