Dify 基于 MCP 实现 ClickHouse 数据库接入配置
本文详细介绍了如何将AI应用平台Dify与ClickHouse数据库通过MCP协议进行安全连接。文章提供了完整的架构方案,包括Dify平台、MCP SSE插件、mcp-proxy协议转换层和mcp-clickhouse服务器。重点讲解了环境配置步骤、关键参数设置以及常见错误排查方法,特别强调了对HTTP/8123端口和无SSL环境的适配。教程包含可复用的配置模板,实现了LLM直接查询ClickHo
一、前言
随着 AI 应用平台(如 Dify)逐渐被企业采用,让 LLM 能直接访问数据库并执行 SQL 成为关键能力。OpenAI 推出的 MCP(Model Context Protocol)模型上下文协议,为 LLM 和外部系统之间提供了安全、规范的能力接口。
本篇文章将手把手带你搭建以下完整架构:
[Dify 应用平台]
↓ HTTP/SSE
[MCP SSE 插件(Dify 内置)]
↓ HTTP/SSE
[mcp-proxy(协议转换层)]
↓ stdio
[ClickHouse MCP Server(mcp-clickhouse)]
↓ HTTP (8123)
[ClickHouse 数据库]
本教程内容包括:
-
MCP 原理概念解释
-
mcp-proxy 配置
-
mcp-clickhouse 环境变量
-
Dify 插件配置
-
全链路排查方法
-
常见 SSL 错误分析
参考链接:
https://github.com/sparfenyuk/mcp-proxy?tab=readme-ov-file
MCP SSE / StreamableHTTP - Dify Marketplace
ClickHouse/mcp-clickhouse: Connect ClickHouse to your AI assistants.
Dify 中使用 MCP 协议访问 ClickHouse 搭建完整教程 | ApFramework
二、系统架构解析
先看一下整体架构图(ASCII 版本):
+-----------------+ +---------------------+
| Dify 平台 | SSE/HTTP | MCP SSE 插件 |
| (用户界面) | <-----------> | (Dify 内部) |
+-----------------+ +---------------------+
|
| HTTP/SSE
v
+---------------------+
| mcp-proxy |
| (协议转换层) |
+---------------------+
|
| stdio(双向管道)
v
+--------------------------------------+
| ClickHouse MCP Server |
| (mcp-clickhouse Python 包) |
+--------------------------------------+
|
| HTTP (8123)
v
+---------------------+
| ClickHouse 数据库 |
+---------------------+
架构关键点说明
| 模块 | 作用 |
|---|---|
| Dify | 提供 LLM + 工具调用接口 |
| MCP SSE 插件 | 把 Dify 的工具调用转换成 MCP SSE |
| mcp-proxy | 把 SSE 转换为 stdio(和 MCP Server 通信) |
| mcp-clickhouse | 实现 ClickHouse 的工具层(SQL 查询、数据处理) |
| ClickHouse | 最终数据库 |
完整链路清晰分层,便于调试与扩展。
三、安装和准备环境
1. 安装 mcp-clickhouse(Python)
pip install mcp-clickhouse
或升级:
pip install --upgrade mcp-clickhouse
2. 安装 mcp-proxy
pip install mcp-proxy
3. 检查 ClickHouse 是否可访问
curl http://192.168.101.150:8123
返回 OK 即表示 HTTP 8123 正常。
四、mcp-clickhouse 核心配置
mcp-clickhouse 支持多种部署方式,你需要根据数据库是否有 HTTPS、是否在内网、是否有证书来决定环境变量的值。
mcp-clickhouse 默认会采用 HTTPS / 8443 连接 ClickHouse。
但很多企业环境使用的是:
http://IP:8123 (无 SSL)
因此必须关闭 secure 配置:
CLICKHOUSE_SECURE=false
CLICKHOUSE_VERIFY=false
完整环境变量如下(重要):
export CLICKHOUSE_HOST=your-clickhouse-host
export CLICKHOUSE_PORT=8123
export CLICKHOUSE_USER=default
export CLICKHOUSE_PASSWORD=your-password
# 如果你的 ClickHouse 使用 HTTP,就必须关闭这两个
export CLICKHOUSE_SECURE=false
export CLICKHOUSE_VERIFY=false
# MCP 使用 stdio(通常给 mcp-proxy 用)
export CLICKHOUSE_MCP_SERVER_TRANSPORT=stdio
🔍 环境变量解释(非常重要)
| 变量 | 含义 | 你的实际可替换内容 |
|---|---|---|
| CLICKHOUSE_HOST | 数据库地址,可是域名或IP | 如:10.0.0.15 / clickhouse.company.com |
| CLICKHOUSE_PORT | 数据库端口 | HTTP=8123 / HTTPS=8443 |
| CLICKHOUSE_USER | 用户名 | 如:default 或业务帐号 |
| CLICKHOUSE_PASSWORD | 密码 | 自己的密码 |
| CLICKHOUSE_SECURE | 是否使用 HTTPS | 内网一般 false |
| CLICKHOUSE_VERIFY | 是否校验证书 | 自签名证书一般 false |
| CLICKHOUSE_MCP_SERVER_TRANSPORT | MCP 传输方式 | mcp-proxy 用 stdio |
启动 MCP Server:
python -m mcp_clickhouse.main
如果启动成功,会看到:
Transport: STDIO
ClickHouse tools registered
五、mcp-proxy 配置(核心环节)
进入 mcp-proxy 目录:
cd mcp-proxy
编辑配置文件:
nano config.json
写入如下内容:
{
"servers": {
"clickhouse": {
"command": "python3",
"args": ["-m", "mcp_clickhouse.main"],
"env": {
"CLICKHOUSE_HOST": "your-clickhouse-host",
"CLICKHOUSE_PORT": "8123",
"CLICKHOUSE_USER": "default",
"CLICKHOUSE_PASSWORD": "your-password",
"CLICKHOUSE_SECURE": "false",
"CLICKHOUSE_VERIFY": "false",
"CLICKHOUSE_MCP_SERVER_TRANSPORT": "stdio"
}
}
}
}
注意:
-
env中的变量等同于你 export 的变量 -
现在 mcp-proxy 工作模式是 SSE ↔ stdio
🔍 config.json 每项解释
1. "command": "python3"
表示 mcp-proxy 启动这个 MCP 服务器时,会执行:
python3 -m mcp_clickhouse.main
👉 替换逻辑:
| 场景 | command 应该填什么? |
|---|---|
| 你系统里 python3 是全局命令(常见) | "python3" |
| 你使用虚拟环境 venv | "/path/to/venv/bin/python" |
| 你用 uv 运行 | "uv"(配合 args 调整) |
2. "args": ["-m", "mcp_clickhouse.main"]
说明用 Python 模块方式运行 MCP Server。
如果你安装后可以直接执行:
mcp-clickhouse
也可以:
"command": "mcp-clickhouse"
3. "env" 内的变量
一律对应 mcp-clickhouse 的配置。
如果你不想写在 config.json 里,也可以用系统变量覆盖。
启动 mcp-proxy:
mcp-proxy -c config.json
如果成功,会显示:
Registered server: clickhouse
Proxy is now listening...
六、mcp-proxy 启动命令的多种模式(含使用场景)
mcp-proxy 支持多种启动方式,下面详细解释。
🟦 (1)最简单启动方式:本机调试
适用于:
-
你在本机使用 Claude Desktop / MCP Inspector
-
不需要远程访问
-
本机端口不暴露
命令:
mcp-proxy -c config.json
特点:
-
默认 host:
127.0.0.1 -
默认端口:
8080 -
仅本机可访问
🟩 (2)适合远程访问、适合 Dify、适合容器环境
mcp-proxy \
--named-server-config /root/mcp-workspace/mcp-proxy/config.json \
--host 0.0.0.0 \
--port 45195
🔍 参数解释:
| 参数 | 作用 |
|---|---|
--named-server-config |
使用一个包含多个服务器定义的配置文件 |
--host 0.0.0.0 |
开放到所有网卡(必须用于 Docker / Dify / 局域网访问) |
--port 45195 |
指定 SSE 服务端口,让客户端去连接它 |
👉 使用场景:
| 场景 | 是否适用 |
|---|---|
| Dify 需要访问 mcp-proxy | ✔ 必须 |
| 浏览器 / 其他服务器访问 | ✔ 必须 |
| Docker 容器 | ✔ 必须 |
| 云服务器 | ✔ 强烈推荐 |
| 本机调试 | 不一定需要 |
所以你使用的是 跨机器访问的正式部署方式。
🟧 (3)SSE 模式显式指定
如果你要强制 SSE,可以加:
--transport sse
适用于:
-
某些前端只支持 SSE
-
某些防火墙禁止 WebSocket
🟥 (4)使用自定义 HTTP 路径
默认 MCP endpoint 路径:
/mcp
如需改成 /api/mcp:
mcp-proxy --path /api/mcp ...
适用场景:
-
Nginx 反向代理
-
部署在子路径
-
多个 MCP Proxy 同时工作
七、❗ 只有 mcp-proxy 使用 --host 0.0.0.0,其他机器才能访问。
八、常见启动方式选择表
| 你当前的部署情况 | 推荐启动命令 |
|---|---|
| 本地开发 | mcp-proxy -c config.json |
| Dify + MCP(同一台机器) | mcp-proxy -c config.json --host 0.0.0.0 |
| Dify 在另一台服务器 | mcp-proxy --named-server-config config.json --host 0.0.0.0 --port 45195 |
| Docker 容器部署 | mcp-proxy --host 0.0.0.0 --port 8080 |
| 多个 MCP Servers | 使用 --named-server-config |
| 需要自定义路径 | 加 --path |
九、Dify 中配置 MCP SSE插件
在 Dify 后台 → 插件 → 添加 MCP SSE 插件
Dify 在另一台服务器时的示例:
{ "clickhouse":
{ "url": "http://192.168.101.150:45195/servers/clickhouse/sse",
"headers": {},
"timeout": 60,
"sse_read_timeout": 300
}
}
保存后,Dify 会自动:
-
建立 SSE 连接 → mcp-proxy
-
mcp-proxy 调用你的 mcp-clickhouse
-
mcp-clickhouse 调用 ClickHouse 运行 SQL
创建的应用中即可直接调用 SQL 工具。
十、测试数据库查询(Dify 内)
在 Dify 的 LLM 调试页面输入:
查询一下 system.tables
你会看到 LLM 自动选择工具:
Tool: run_select_query
SQL: SELECT * FROM system.tables LIMIT 10
并得到正常返回。
十一、常见错误与排查(非常重要)
❌ 1. SSL wrong version number
[SSL: WRONG_VERSION_NUMBER]
原因:
-
mcp-clickhouse 默认使用 HTTPS(8443)
-
你的 ClickHouse 是 HTTP(8123)
解决:
CLICKHOUSE_SECURE=false
CLICKHOUSE_VERIFY=false
❌ 2. mcp-proxy 无法启动
检查:
mcp-proxy -c config.json
是否看到:
Registered server
❌ 3. Dify 报 "timeout"
检查:
mcp-proxy 是否运行
mcp-clickhouse 是否运行
ClickHouse 是否能 curl
十二、总结
本教程实现了:
✔ Dify 通过 MCP 接入 ClickHouse
✔ 使用 mcp-proxy 做协议转换(SSE ↔ stdio)
✔ 使用 mcp-clickhouse 执行 SQL
✔ 最终实现效果:
👉 LLM 可直接查询 ClickHouse
👉 查询结果实时返回到 Dify
👉 无需暴露数据库密码给 Dify
👉 安全、可控、可扩展
更多推荐


所有评论(0)