关于 MCP-Compose
MCP-Compose 是用于编排 MCP 服务的工具,可将多个 MCP 服务以 Docker 容器形式统一配置、运行和管理。它内置 HTTP 代理,把基于 STDIO 的服务转换为 HTTP 访问,适合需要集中管理多个 MCP 服务的开发者。
主要功能
- 01类似 Docker Compose 的 YAML 配置
- 02STDIO 到 HTTP 的协议转换代理
- 03支持 Docker 与 Podman
- 04内置仪表盘与 OpenAPI 规范生成
适用场景
- 01在一个配置文件中同时运行多个 MCP 服务
- 02通过 HTTP 接口统一访问基于 STDIO 的 MCP 服务
- 03为客户端生成 MCP 服务配置
MCP 相关
MCP-Compose 将 STDIO、HTTP 和 SSE 类型的 MCP 服务统一接入代理,并以 HTTP 接口向客户端暴露这些服务的 tools/list 与 tools/call 等调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP-Compose
用于 Model Context Protocol 服务的 Docker Compose。通过统一配置、HTTP 代理和容器编排运行多个 MCP 服务。

功能
- Docker Compose 风格的 YAML 配置
- HTTP 代理,支持自动协议转换(STDIO → HTTP)
- 原生支持 Docker 和 Podman
- 会话管理和连接池
- 内置仪表板和监控
- 生成 OpenAPI 规范
安装
git clone https://github.com/phildougherty/mcp-compose.git
cd mcp-compose
make build
# Add to PATH
sudo cp build/mcp-compose /usr/local/bin/
# OR
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 Search(需要从 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 # Start all services
mcp-compose up filesystem # Start specific service
mcp-compose down # Stop all services
mcp-compose down filesystem # Stop specific service
mcp-compose restart # Restart all services
mcp-compose ps # List service status
mcp-compose logs filesystem # View logs
系统服务
系统服务是基础设施组件(代理、仪表板、任务调度器、内存)。
mcp-compose system up # Start system services
mcp-compose system down # Stop system services
mcp-compose system ps # List system services
mcp-compose system status # Health overview
mcp-compose system logs proxy # View system logs
代理
mcp-compose proxy --port 9876 # Start proxy
mcp-compose proxy --api-key $(openssl rand -hex 32) # With authentication
仪表板
mcp-compose dashboard # Start web dashboard
# Access at http://localhost:3111
配置
mcp-compose init # Interactive setup wizard
mcp-compose validate # Validate config file
mcp-compose create-config --type claude # Generate client config
配置参考
基本结构
version: '1'
# Optional: proxy authentication
proxy_auth:
enabled: true
api_key: "${MCP_API_KEY}"
servers:
my-server:
protocol: string # stdio, http, sse
command: string # Executable (e.g., npx, python, node)
args: [string] # Command arguments
capabilities: [string] # tools, resources, prompts, sampling
env: # Environment variables
KEY: value
volumes: # Volume mounts
- "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" # Read-only
- "/host/path:/container/path:rw" # Read-write
- "${HOME}/code:/workspace:ro" # Environment variables
环境变量
在配置中:
env:
API_KEY: "${MY_API_KEY}"
在 shell 中:
export MY_API_KEY="secret"
mcp-compose up
安全
切勿将密钥提交到配置文件中。请使用环境变量:
# Generate secure keys
export MCP_API_KEY=$(openssl rand -hex 32)
export OAUTH_CLIENT_SECRET=$(openssl rand -hex 32)
在配置中引用:
proxy_auth:
api_key: "${MCP_API_KEY}"
客户端集成
Claude Desktop
生成配置:
mcp-compose create-config --type claude --output ./claude-config
将内容复制到 Claude Desktop 设置中。
直接使用 HTTP
# List tools
curl -X POST http://localhost:9876/filesystem \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# Call tool
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 # Use different port
容器无法启动:
mcp-compose logs my-server # Check logs
docker ps -a # Check container status
身份验证错误:
echo $MCP_API_KEY # Verify key is set
要求
- Docker 20.10+ 或 Podman 3.0+
- Linux、macOS,或使用 WSL2 的 Windows
- Go 1.19+(从源代码构建时需要)
架构
┌──────────────────────────────┐
│ MCP-Compose Proxy │
│ (HTTP API + Authentication) │
└──────────────┬───────────────┘
│
┌──────┼──────┐
│ │ │
┌───▼──┐ ┌─▼──┐ ┌▼───┐
│ FS │ │ Mem│ │Search│
│STDIO │ │HTTP│ │ SSE │
└──────┘ └────┘ └──────┘
许可证
GNU Affero 通用公共许可证 v3.0 - 参见 LICENSE。
链接
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。