mcpField
M
MCP-Compose

MCP-Compose

本地服务
github.com/phildougherty开发工具5855 周前更新

关于 MCP-Compose

MCP-Compose 是用于编排 MCP 服务的工具,可将多个 MCP 服务以 Docker 容器形式统一配置、运行和管理。它内置 HTTP 代理,把基于 STDIO 的服务转换为 HTTP 访问,适合需要集中管理多个 MCP 服务的开发者。

主要功能

  1. 01类似 Docker Compose 的 YAML 配置
  2. 02STDIO 到 HTTP 的协议转换代理
  3. 03支持 Docker 与 Podman
  4. 04内置仪表盘与 OpenAPI 规范生成

适用场景

  1. 01在一个配置文件中同时运行多个 MCP 服务
  2. 02通过 HTTP 接口统一访问基于 STDIO 的 MCP 服务
  3. 03为客户端生成 MCP 服务配置

MCP 相关

MCP-Compose 将 STDIO、HTTP 和 SSE 类型的 MCP 服务统一接入代理,并以 HTTP 接口向客户端暴露这些服务的 tools/list 与 tools/call 等调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"compose": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ps"
]
}
}
}
启动命令docker run -i --rm ps

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocips

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP-Compose

codecov Go Report Card License: AGPL v3 Release

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

MCP-Compose 演示

功能

  • 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。

链接

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。