使用说明
DB MCP服务器——Docker镜像
Unofficial multi-arch Up-to-Date Docker image for FreePeak/db-mcp-server — a powerful multi-database MCP server for AI assistants.
Credits • Images • Quick Start • Docker CLI • Docker Compose • Networking • Security & Transport • Configuration • Supported Databases • Environment Variables • MCPJungle Gateway • License学分
此图像打包了 FreePeak/db mcp服务器 项目,由以下人员建造和维护 FreePeak 以及贡献者。所有应用程序代码、功能和文档都来自其存储库,并根据 MIT许可证.
此存储库仅提供:
- 多拱形Docker镜像(
linux/amd64,linux/arm64,linux/arm/v7) - GitHub Actions工作流,用于手动构建/发布和推广操作
- 这个以Docker为中心的使用文档
有关功能请求、错误报告和源代码贡献,请访问 上游仓库.
图像
图像通过手动工作流调度发布到两个注册表(Docker Build & Publish)并且意图在内容上保持相同。
通过工作流操作可以获得稳定的推广:
auto-check促进stable5天后latest年龄(符合条件时)mark-stable执行显式/手动稳定升级
| 注册表 | 图像 |
|---|---|
| Docker Hub | mekayelanik/db-mcp-server |
GHCR。 ghcr.io/mekayelanik/db-mcp-server |
标签
| 标签 | 描述 |
|---|---|
latest |
从上游手动发布的最新版本 main |
stable |
从已发布版本升级(5天后自动符合条件或手动 mark-stable) |
YYYYMMDD-<sha> |
不可变标签——准确的上游提交和构建日期,例如。 20250312-19b7975 |
YYYYMMDD |
浮动日期标签——当天的最新版本 |
平台
| 平台 | 架构 |
|---|---|
linux/amd64 |
x86-64(大多数服务器、桌面Linux、WSL2) |
linux/arm64 |
ARM 64位(苹果硅通过Rosetta、AWS Graviton、Raspberry Pi 4/5) |
linux/arm/v7 |
ARM 32位(Raspberry Pi 2/3,较旧的ARM板) |
😎 给我买杯咖啡☕︎
您的支持鼓励我继续创建/支持我的开源项目。 如果你在这个项目中发现了价值,你可以给我买杯咖啡,让我保持灵感。
快速开始
# Create a config file
cat > config.json <<'EOF'
{
"connections": [
{
"id": "mydb",
"type": "postgres",
"host": "localhost",
"port": 5432,
"name": "mydb",
"user": "myuser",
"password": "mypassword"
}
]
}
EOF
# Run
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json \
mekayelanik/db-mcp-server:latest
MCP服务器现在可以在 https://localhost:9092/sse 默认情况下。
对于仅支持HTTP的本地测试,请设置 ENABLE_HTTPS=false.
Docker命令行界面
SSE模式(默认)
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json \
-e TRANSPORT_MODE=sse \
-e SERVER_PORT=9092 \
mekayelanik/db-mcp-server:latest
自定义端口
docker run -d \
--name db-mcp-server \
-p 8080:8080 \
-v $(pwd)/config.json:/app/config.json \
-e SERVER_PORT=8080 \
mekayelanik/db-mcp-server:latest
STDIO模式
docker run --rm -i \
-v $(pwd)/config.json:/app/config.json \
-e TRANSPORT_MODE=stdio \
mekayelanik/db-mcp-server:latest
持久日志
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json \
-v $(pwd)/logs:/app/logs \
mekayelanik/db-mcp-server:latest
固定不可变标签(建议用于生产)
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json \
mekayelanik/db-mcp-server:20250312-19b7975
从GHCR而不是Docker Hub拉取
docker pull ghcr.io/mekayelanik/db-mcp-server:latest
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json \
ghcr.io/mekayelanik/db-mcp-server:latest
Docker Compose
最小--单个PostgreSQL
services:
db-mcp-server:
image: mekayelanik/db-mcp-server:latest
container_name: db-mcp-server
restart: unless-stopped
ports:
- "9092:9092"
volumes:
- ./config.json:/app/config.json:ro
- logs:/app/logs
environment:
TRANSPORT_MODE: sse
SERVER_PORT: "9092"
volumes:
logs:
全栈——MCP服务器+PostgreSQL+MySQL
services:
db-mcp-server:
image: mekayelanik/db-mcp-server:latest
container_name: db-mcp-server
restart: unless-stopped
ports:
- "9092:9092"
volumes:
- ./config.json:/app/config.json:ro
- logs:/app/logs
environment:
TRANSPORT_MODE: sse
SERVER_PORT: "9092"
depends_on:
postgres:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- mcp-net
postgres:
image: postgres:16-alpine
container_name: mcp-postgres
restart: unless-stopped
environment:
POSTGRES_DB: mydb
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U myuser -d mydb"]
interval: 10s
timeout: 5s
retries: 5
networks:
- mcp-net
mysql:
image: mysql:8.0
container_name: mcp-mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "myuser", "-pmypassword"]
interval: 10s
timeout: 5s
retries: 5
networks:
- mcp-net
volumes:
postgres-data:
mysql-data:
logs:
networks:
mcp-net:
driver: bridge
config.json 对于上述堆栈:
{
"connections": [
{
"id": "postgres1",
"type": "postgres",
"host": "postgres",
"port": 5432,
"name": "mydb",
"user": "myuser",
"password": "mypassword"
},
{
"id": "mysql1",
"type": "mysql",
"host": "mysql",
"port": 3306,
"name": "mydb",
"user": "myuser",
"password": "mypassword"
}
]
}
注: 使用Docker Compose服务名称作为
host值——例如。postgres,mysql--不是localhost.
对于其他变体,重用此模式并调整服务映像+ config.json 连接类型/主机。
网络
连接到主机上的数据库
当你的数据库在主机上运行时(不是在Docker中),使用 host.docker.internal 而不是 localhost:
{
"connections": [
{
"id": "host_postgres",
"type": "postgres",
"host": "host.docker.internal",
"port": 5432,
"name": "mydb",
"user": "myuser",
"password": "mypassword"
}
]
}
在Linux上, host.docker.internal 需要添加 --add-host:
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
--add-host host.docker.internal:host-gateway \
-v $(pwd)/config.json:/app/config.json \
mekayelanik/db-mcp-server:latest
或者在Docker Compose中:
services:
db-mcp-server:
image: mekayelanik/db-mcp-server:latest
extra_hosts:
- "host.docker.internal:host-gateway"
加入现有网络
如果您的数据库已经在命名的Docker网络上运行:
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
--network my-existing-network \
-v $(pwd)/config.json:/app/config.json \
mekayelanik/db-mcp-server:latest
在Docker Compose中,连接到外部网络:
services:
db-mcp-server:
image: mekayelanik/db-mcp-server:latest
networks:
- my-existing-network
networks:
my-existing-network:
external: true
暴露于局域网/远程客户端
默认情况下,容器绑定到所有接口(0.0.0.0).要限制到特定的主机IP,请执行以下操作:
docker run -d \
--name db-mcp-server \
-p 192.168.1.100:9092:9092 \
-v $(pwd)/config.json:/app/config.json \
mekayelanik/db-mcp-server:latest
反向代理背后(nginx示例)
upstream db_mcp {
server 127.0.0.1:9092;
}
server {
listen 443 ssl;
server_name mcp.example.com;
location / {
proxy_pass http://db_mcp;
proxy_http_version 1.1;
# Required for SSE (Server-Sent Events)
proxy_set_header Connection '';
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
安全与运输
HTTPS应该是默认设置吗?
当前默认值为 ENABLE_HTTPS=true.
推荐做法:
- 仅限本地开发:仍建议使用HTTPS,但您可以设置
ENABLE_HTTPS=false仅支持HTTP的工具。 - 任何远程/LAN/公共使用:使用HTTPS和API密钥身份验证。
此MCP暴露了什么传输?
应用程序传输模式:
sse(默认)通过HTTP(S)stdio(用于基于本地命令的集成)
在容器服务器模式下运行时(TRANSPORT_MODE=sse):
- 公众听众:HAProxy打开
SERVER_PORT(默认值9092) - 内部应用程序侦听器:MCP服务器上
INTERNAL_SERVER_PORT(默认值38011,仅在容器中本地)
上游服务器暴露的常见MCP HTTP端点包括:
/sse/jsonrpc/message/events/status
API密钥身份验证行为
集 API_KEY 以在HAProxy中启用承载令牌保护。
预期状态行为:
- 缺少身份验证标头->
401 Unauthorized - 无效密钥->
403 Forbidden - 有效密钥->请求被转发到后端(后端仍可能返回
200,204,405等,取决于端点/方法)
笔记:
Bearer方案匹配不敏感(Bearer/bearer两者都工作)。- 无效的API密钥格式失败关闭:容器在启动时退出。
/healthz有一个仅用于本地主机的内部健康检查旁路。
HTTPS和证书行为
如果 ENABLE_HTTPS=true,HAProxy在上提供TLS服务 SERVER_PORT.
默认最低TLS版本为 TLSv1.3.
HTTP协议版本(可选模式)
集 HTTP_VERSION_MODE 以控制公共监听器上的协议协商:
auto(默认):尝试h3首先,然后回到h2那么h1(http/1.1)all:行为与autoh1:仅强制HTTP/1.1h2:仅通过TLS强制HTTP/2h1+h2:允许HTTP/1.1和HTTP/2h3:请求HTTP/3支持(QUIC)和标准TLS回退(h1+h2)
笔记:
h2和h3需要TLS(ENABLE_HTTPS=true).- 如果
ENABLE_HTTPS=false,侦听器将回退到HTTP/1.1。 - 如果
h3已请求,但HAProxy构建中的QUIC不可用,启动会记录一条警告,并在没有h3.
推荐的默认值和模式意图
- 生产默认值:
HTTP_VERSION_MODE=auto auto/all:先尝试HTTP/3,然后是HTTP/2,然后是HTTP/1.1回退h1:严格兼容模式h2:仅通过TLS强制HTTP/2h3:使用安全的TCP回退请求HTTP/3
Docker CLI示例(按模式)
汽车链条(h3 -> h2 -> h1)(默认):
docker run -d \
--name db-mcp-auto \
-p 9092:9092 \
-p 9092:9092/udp \
-v $(pwd)/config.json:/app/config.json:ro \
-e ENABLE_HTTPS=true \
-e HTTP_VERSION_MODE=auto \
-e API_KEY='replace_with_a_strong_key' \
mekayelanik/db-mcp-server:latest
仅限HTTP/1.1:
docker run -d \
--name db-mcp-h1 \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json:ro \
-e ENABLE_HTTPS=true \
-e HTTP_VERSION_MODE=h1 \
-e API_KEY='replace_with_a_strong_key' \
mekayelanik/db-mcp-server:latest
仅限HTTP/2:
docker run -d \
--name db-mcp-h2 \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json:ro \
-e ENABLE_HTTPS=true \
-e HTTP_VERSION_MODE=h2 \
-e API_KEY='replace_with_a_strong_key' \
mekayelanik/db-mcp-server:latest
请求HTTP/3(加回退):
docker run -d \
--name db-mcp-h3 \
-p 9092:9092 \
-p 9092:9092/udp \
-v $(pwd)/config.json:/app/config.json:ro \
-e ENABLE_HTTPS=true \
-e HTTP_VERSION_MODE=h3 \
-e API_KEY='replace_with_a_strong_key' \
mekayelanik/db-mcp-server:latest
Docker编写代码片段
services:
db-mcp-server:
image: mekayelanik/db-mcp-server:latest
ports:
- "9092:9092/tcp"
- "9092:9092/udp"
environment:
ENABLE_HTTPS: "true"
HTTP_VERSION_MODE: "auto"
API_KEY: "replace_with_a_strong_key"
volumes:
- ./config.json:/app/config.json:ro
如何在运行时验证有效模式
检查启动日志:
docker logs db-mcp-auto | grep -E 'HTTP versions enabled|HTTPS enabled|falling back'
检查生成的HAProxy绑定:
docker exec db-mcp-auto sh -lc "grep -n 'bind ' /tmp/haproxy.cfg"
预计为 auto/all 当QUIC可用时:
- 一个TLS TCP与ALPN绑定
h2,http/1.1 - 一个QUIC与ALPN绑定
h3
预计为 h1:
- 一个TLS TCP与ALPN绑定
http/1.1
证书优先级:
- 如果
TLS_PEM_PATH存在,直接使用。 - 否则,如果两者都有
TLS_CERT_PATH和TLS_KEY_PATH它们被组合成PEM。 - 否则,将使用自动生成自签名证书
TLS_CN和TLS_SAN.
使用Cloudflare Origin证书(建议在Cloudflare之后使用)
如果您的流量是通过Cloudflare代理的,请使用Cloudflare Origin证书,而不是自动生成的自签名证书。
- 在Cloudflare Dashboard中,为您的主机名创建一个源证书,例如
mcp.example.com. - 将证书和私钥PEM内容保存到主机文件。
mkdir -p certs
# Paste certificate PEM from Cloudflare
cat > certs/cloudflare-origin.crt <<'EOF'
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
EOF
# Paste private key PEM from Cloudflare
cat > certs/cloudflare-origin.key <<'EOF'
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
EOF
- 挂载文件并将TLS环境变量指向它们:
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json:ro \
-v $(pwd)/certs/cloudflare-origin.crt:/etc/haproxy/certs/server.crt:ro \
-v $(pwd)/certs/cloudflare-origin.key:/etc/haproxy/certs/server.key:ro \
-e ENABLE_HTTPS=true \
-e TLS_CERT_PATH=/etc/haproxy/certs/server.crt \
-e TLS_KEY_PATH=/etc/haproxy/certs/server.key \
-e TLS_MIN_VERSION=TLSv1.3 \
-e API_KEY='replace_with_a_strong_key' \
mekayelanik/db-mcp-server:latest
笔记:
- 入口点组合
TLS_CERT_PATH+TLS_KEY_PATH进入TLS_PEM_PATH自动。 - 将关键文件放在git之外并限制权限(
chmod 600). - 在Cloudflare中,使用SSL/TLS模式
Full (strict).
安全运行示例(推荐)
docker run -d \
--name db-mcp-server \
-p 9092:9092 \
-v $(pwd)/config.json:/app/config.json:ro \
-e TRANSPORT_MODE=sse \
-e ENABLE_HTTPS=true \
-e TLS_CN=localhost \
-e TLS_SAN=DNS:localhost,IP:127.0.0.1 \
-e API_KEY='replace_with_a_strong_key' \
mekayelanik/db-mcp-server:latest
然后使用以下方式连接:
https://localhost:9092/sse
配置
创建 config.json 并将其安装到 /app/config.json 在容器内。
多数据库示例
{
"connections": [
{
"id": "pg_main",
"type": "postgres",
"host": "postgres",
"port": 5432,
"name": "maindb",
"user": "appuser",
"password": "apppassword",
"query_timeout": 60,
"max_open_conns": 20,
"max_idle_conns": 5,
"conn_max_lifetime_seconds": 300
},
{
"id": "mysql_legacy",
"type": "mysql",
"host": "mysql",
"port": 3306,
"name": "legacydb",
"user": "appuser",
"password": "apppassword"
},
{
"id": "sqlite_cache",
"type": "sqlite",
"database_path": "/app/data/cache.db",
"journal_mode": "WAL",
"use_modernc_driver": true
},
{
"id": "oracle_erp",
"type": "oracle",
"host": "oracle.internal",
"port": 1521,
"service_name": "PROD",
"user": "appuser",
"password": "apppassword"
}
]
}
支持的数据库
| 数据库 | 状态 | 注释 |
|---|---|---|
| PostgreSQL | ✅ 完全支持(v9.6–18) | 查询、事务、模式、性能 |
| MySQL | ✅ 完全支持 | 查询、事务、架构、性能 |
| SQLite | ✅ 完全支持 | 基于文件、内存中、SQLCipher加密 |
| Oracle | ✅ 完全支持(10g–23c) | 标准、RAC、云钱包、TNS |
| 时间尺度数据库 | ✅ 全面支持 | 超表、连续聚合、保留策略 |
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
SERVER_PORT |
9092 |
公共HAProxy侦听器端口 |
INTERNAL_SERVER_PORT |
38011 |
内部MCP服务器端口(容器内) |
TRANSPORT_MODE |
sse |
运输方式: sse 或 stdio |
CONFIG_PATH |
/app/config.json |
容器内数据库配置文件的路径 |
API_KEY |
(空) | 设置时启用承载身份验证(在启动时验证) |
ENABLE_HTTPS |
true |
在HAProxy中启用TLS终止 |
TLS_CERT_PATH |
/etc/haproxy/certs/server.crt |
证书文件路径 |
TLS_KEY_PATH |
/etc/haproxy/certs/server.key |
私钥文件路径 |
TLS_PEM_PATH |
/etc/haproxy/certs/server.pem |
HAProxy使用的PEM束路径 |
TLS_CN |
localhost |
CN用于自动生成自签名证书 |
TLS_SAN |
DNS:localhost |
用于自动生成自签名证书的SAN |
TLS_DAYS |
365 |
自动生成的自签名证书的有效期 |
TLS_MIN_VERSION |
TLSv1.3 |
HTTPS侦听器可接受的最低TLS版本(TLSv1.2 或 TLSv1.3) |
HTTP_VERSION_MODE |
auto |
公共侦听器HTTP版本模式: auto, all, h1, h2, h1+h2, h3 |
AI客户端集成
大多数MCP客户端(Claude Code、Codex风格的客户端、Cursor、VS Code扩展和自定义代理)都接受以下模式之一:
- 基于URL的MCP服务器通过SSE(HTTP或HTTPS)
- STDIO上的基于命令的MCP服务器
具体的配置文件路径因客户端而异,但JSON对象 mcpServers 通常是相似的。
模板A:HTTP+SSE
仅将此用于本地受信任的开发。
{
"mcpServers": {
"db-mcp-http": {
"url": "http://localhost:9092/sse"
}
}
}
模板B:HTTPS+SSE+承载API密钥
建议用于局域网/远程使用。
{
"mcpServers": {
"db-mcp-https": {
"url": "https://localhost:9092/sse",
"headers": {
"Authorization": "Bearer REPLACE_WITH_API_KEY"
}
}
}
}
如果您的客户端严格验证证书,请使用受信任的证书(或为您的自签名证书配置信任)。
模板C:STDIO通过Docker
适用于本地基于命令的客户端(包括Claude Desktop/CLI风格的集成)。
{
"mcpServers": {
"db-mcp-stdio": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/config.json:/app/config.json:ro",
"-e", "TRANSPORT_MODE=stdio",
"mekayelanik/db-mcp-server:latest"
]
}
}
}
克劳德代码示例(HTTPS+SSE)
{
"mcpServers": {
"db-mcp-server": {
"url": "https://localhost:9092/sse",
"headers": {
"Authorization": "Bearer REPLACE_WITH_API_KEY"
}
}
}
}
Codex样式示例(HTTPS+SSE)
{
"mcpServers": {
"db-mcp-server": {
"url": "https://localhost:9092/sse",
"headers": {
"Authorization": "Bearer REPLACE_WITH_API_KEY"
}
}
}
}
CLI模板
HTTP+SSE:
docker run -d \
--name db-mcp-http \
-p 9092:9092 \
-e TRANSPORT_MODE=sse \
-e ENABLE_HTTPS=false \
-v $(pwd)/config.json:/app/config.json:ro \
mekayelanik/db-mcp-server:latest
HTTPS+SSE+API密钥:
docker run -d \
--name db-mcp-https \
-p 9092:9092 \
-e TRANSPORT_MODE=sse \
-e ENABLE_HTTPS=true \
-e TLS_MIN_VERSION=TLSv1.3 \
-e TLS_CN=localhost \
-e TLS_SAN=DNS:localhost,IP:127.0.0.1 \
-e API_KEY='REPLACE_WITH_API_KEY' \
-v $(pwd)/config.json:/app/config.json:ro \
mekayelanik/db-mcp-server:latest
工作室:
docker run --rm -i \
-e TRANSPORT_MODE=stdio \
-v $(pwd)/config.json:/app/config.json:ro \
mekayelanik/db-mcp-server:latest
MCPJungle网关
MCPJungle 是一个自托管的MCP网关,它在单个端点后面聚合了多个MCP服务器。
重要提示: MCPJungle的SSE运输 不 支持自定义
headers在注册配置中。这headers字段仅用于streamable_http运输。对于具有API密钥身份验证的SSE 必须 使用bearer_token相反。
带API密钥的SSE(正确)
注册配置(mcp1.json):
{
"name": "db-mcp-server",
"url": "http://<HOST_IP>:9092/sse",
"transport": "sse",
"bearer_token": "REPLACE_WITH_API_KEY"
}
注册:
mcpjungle register -c mcp1.json
不带API密钥的SSE
如果容器正在运行 API_KEY 未设置(身份验证已禁用):
{
"name": "db-mcp-server",
"url": "http://<HOST_IP>:9092/sse",
"transport": "sse"
}
常见错误
以下配置将 401失败 因为 headers 在MCPJungle中,SSE传输被默默忽略:
{
"name": "db-mcp-server",
"url": "http://<HOST_IP>:9092/sse",
"transport": "sse",
"headers": {
"Authorization": "Bearer REPLACE_WITH_API_KEY"
}
}
这是MCPJungle SSE客户端实现中的一个限制(createSSEMcpServerConn 在 util.go)--那个 SSEConfig struct仅支持 url 和 bearer_token,而不是任意的标题。使用 bearer_token 相反。
注: 上游 FreePeak/db mcp服务器 目前仅支持
sse和stdio运输方式。流式HTTP(streamable_http)服务器尚不支持,因此仅使用"transport": "sse"在MCPJungle注册时。
Claude Code、Codex和类似客户端的快速兼容性说明
- 如果您的客户端支持基于URL的MCP服务器,请首选HTTPS+SSE模板。
- 如果您的客户端支持基于命令的MCP服务器,请使用STDIO模板。
- 如果客户端不支持URL模式下的自定义标头,请将容器放置在注入身份验证的可信反向代理后面,或使用STDIO模式。
许可证
此存储库(构建脚本、Dockerfile、工作流和文档)根据 GNU通用公共许可证v3.0.
打包的应用程序-- FreePeak/db mcp服务器 --是的工作 FreePeak 以及贡献者,并根据 **MIT许可证**申请本身的所有学分都属于他们。
建在上面 FreePeak/db mcp服务器
😎 给我买杯咖啡☕︎
您的支持鼓励我继续创建/支持我的开源项目。 如果你在这个项目中发现了价值,你可以给我买杯咖啡,让我保持灵感。
mcp代理:内存和并发调优
此图像现在使用 mcp代理 (sparfenyuk/mcp代理)代替supergateway作为stdio<->HTTP桥:
MCP_PROXY_STATELESS=false(默认):共享一个stdio后端子项 全部 MCP会话,JSON RPC id多路复用。最小的内存,没有每次请求的分叉成本。遗产STATEFUL按优先级映射到此(MCP_PROXY_STATELESS获胜)。MCP_PROXY_STATELESS=true:按请求传输实例。HAPROXY_FRONTEND_MAXCONN=64/HAPROXY_SERVER_MAXCONN=16:HAProxy级别上限。0禁用。- 不再支持WebSocket传输(mcp代理上游不实现它)。
根本原因:supergateway 3.4.3无状态模式(默认)每次POST都会生成一个子stdio进程,但从未收获过它(supercorp ai/supergeway#108)。