用于Model Context Protocol服务器的Docker Compose。运行多个MCP服务器,具有统一配置、HTTP代理和容器编排功能。

git clone https://github.com/phildougherty/mcp-compose.git
cd mcp-compose
make build
# 添加到PATH
sudo cp build/mcp-compose /usr/local/bin/
# 或者
export PATH="$PWD/build:$PATH"
mcp-compose init
按照提示创建您的配置。
创建mcp-compose.yaml:
version: '1'
servers:
filesystem:
protocol: stdio
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-filesystem"
- "/tmp"
capabilities: [resources, tools]
启动服务器:
mcp-compose up
启动HTTP代理:
mcp-compose proxy --port 9876
测试它:
curl http://localhost:9876/api/servers
version: '1'
servers:
filesystem:
protocol: stdio
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-filesystem"
- "${HOME}"
capabilities: [resources, tools]
volumes:
- "${HOME}:${HOME}:ro"
memory:
protocol: stdio
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-memory"
capabilities: [resources, tools]
添加Brave搜索(需要从https://brave.com/search/api/获取API密钥):
brave-search:
protocol: stdio
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-brave-search"
capabilities: [tools]
env:
BRAVE_API_KEY: "${BRAVE_API_KEY}"
export BRAVE_API_KEY="your-api-key"
mcp-compose up
查看更多配置,请参阅examples/。
mcp-compose up # 启动所有服务
mcp-compose up filesystem # 启动特定服务
mcp-compose down # 停止所有服务
mcp-compose down filesystem # 停止特定服务
mcp-compose restart # 重启所有服务
mcp-compose ps # 列出服务状态
mcp-compose logs filesystem # 查看日志
系统服务是基础设施组件(代理、仪表板、任务调度器、内存)。
mcp-compose system up # 启动系统服务
mcp-compose system down # 停止系统服务
mcp-compose system ps # 列出系统服务
mcp-compose system status # 健康概览
mcp-compose system logs proxy # 查看系统日志
mcp-compose proxy --port 9876 # 启动代理
mcp-compose proxy --api-key $(openssl rand -hex 32) # 带身份验证
mcp-compose dashboard # 启动Web仪表板
# 访问http://localhost:3111
mcp-compose init # 交互式设置向导
mcp-compose validate # 验证配置文件
mcp-compose create-config --type claude # 生成客户端配置
version: '1'
# 可选:代理认证
proxy_auth:
enabled: true
api_key: "${MCP_API_KEY}"
servers:
my-server:
protocol: string # stdio, http, sse
command: string # 可执行文件(例如npx, python, node)
args: [string] # 命令参数
capabilities: [string] # tools, resources, prompts, sampling
env: # 环境变量
KEY: value
volumes: # 卷挂载
- "host:container:mode"
STDIO(最常用于NPM包):
servers:
my-server:
protocol: stdio
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
HTTP:
servers:
my-server:
protocol: http
http_port: 8080
SSE(服务器发送事件):
servers:
my-server:
protocol: sse
http_port: 8080
sse_path: /events
volumes:
- "/host/path:/container/path:ro" # 只读
- "/host/path:/container/path:rw" # 读写
- "${HOME}/code:/workspace:ro" # 环境变量
在您的配置中:
env:
API_KEY: "${MY_API_KEY}"
在您的shell中:
export MY_API_KEY="secret"
mcp-compose up
切勿将秘密提交到您的配置文件中。使用环境变量:
# 生成安全密钥
export MCP_API_KEY=$(openssl rand -hex 32)
export OAUTH_CLIENT_SECRET=$(openssl rand -hex 32)
在配置中引用:
proxy_auth:
api_key: "${MCP_API_KEY}"
生成配置:
mcp-compose create-config --type claude --output ./claude-config
将内容复制到Claude桌面设置中。
# 列出工具
curl -X POST http://localhost:9876/filesystem \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# 调用工具
curl -X POST http://localhost:9876/filesystem \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"tools/call",
"params":{
"name":"read_file",
"arguments":{"path":"/tmp/test.txt"}
}
}'
mcp-compose ps
mcp-compose system status
mcp-compose logs filesystem
mcp-compose system logs proxy
mcp-compose validate
端口已被占用:
lsof -i :9876
mcp-compose proxy --port 9877 # 使用不同端口
容器无法启动:
mcp-compose logs my-server # 检查日志
docker ps -a # 检查容器状态
身份验证错误:
echo $MCP_API_KEY # 验证密钥是否已设置
┌──────────────────────────────┐
│ MCP-Compose 代理 │
│ (HTTP API + 身份验证) │
└──────────────┬───────────────┘
│
┌──────┼──────┐
│ │ │
┌───▼──┐ ┌─▼──┐ ┌▼───┐
│ FS │ │ Mem│ │搜索│
│STDIO │ │HTTP│ │ SSE │
└──────┘ └────┘ └──────┘
GNU Affero通用公共许可证v3.0 - 详见LICENSE。