MCP-Compose

Ferramenta de orquestração para gerenciar múltiplos servidores MCP com uma interface no estilo Docker Compose e um proxy HTTP unificado.

Documentação

MCP-Compose

codecov Go Report Card License: AGPL v3 Release

Docker Compose para servidores Model Context Protocol. Execute múltiplos servidores MCP com configuração unificada, proxy HTTP e orquestração de contêineres.

MCP-Compose Demo

Recursos

  • Configuração YAML no estilo Docker Compose
  • Proxy HTTP com tradução automática de protocolo (STDIO → HTTP)
  • Suporte nativo para Docker e Podman
  • Gerenciamento de sessões e pool de conexões
  • Dashboard e monitoramento integrados
  • Geração de especificação OpenAPI

Instalação

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"

Início Rápido

Configuração Interativa

mcp-compose init

Siga as instruções para criar sua configuração.

Configuração Manual

Crie mcp-compose.yaml:

version: '1'
servers:
  filesystem:
    protocol: stdio
    command: npx
    args:
      - "-y"
      - "@modelcontextprotocol/server-filesystem"
      - "/tmp"
    capabilities: [resources, tools]

Inicie os servidores:

mcp-compose up

Inicie o proxy HTTP:

mcp-compose proxy --port 9876

Teste:

curl http://localhost:9876/api/servers

Exemplos Práticos

Básico - Filesystem + Memory

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]

Com Pesquisa Web

Adicione Brave Search (requer chave de API de https://brave.com/search/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

Veja examples/ para mais configurações.

Comandos

Gerenciamento de Serviços

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

Serviços do Sistema

Serviços do sistema são componentes de infraestrutura (proxy, dashboard, task-scheduler, memory).

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

Proxy

mcp-compose proxy --port 9876              # Start proxy
mcp-compose proxy --api-key $(openssl rand -hex 32)  # With authentication

Dashboard

mcp-compose dashboard          # Start web dashboard
# Access at http://localhost:3111

Configuração

mcp-compose init               # Interactive setup wizard
mcp-compose validate           # Validate config file
mcp-compose create-config --type claude  # Generate client config

Referência de Configuração

Estrutura Básica

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"

Tipos de Protocolo

STDIO (mais comum para pacotes NPM):

servers:
  my-server:
    protocol: stdio
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]

HTTP:

servers:
  my-server:
    protocol: http
    http_port: 8080

SSE (Server-Sent Events):

servers:
  my-server:
    protocol: sse
    http_port: 8080
    sse_path: /events

Montagens de Volume

volumes:
  - "/host/path:/container/path:ro"   # Read-only
  - "/host/path:/container/path:rw"   # Read-write
  - "${HOME}/code:/workspace:ro"      # Environment variables

Variáveis de Ambiente

Na sua configuração:

env:
  API_KEY: "${MY_API_KEY}"

No seu shell:

export MY_API_KEY="secret"
mcp-compose up

Segurança

Nunca faça commit de segredos no seu arquivo de configuração. Use variáveis de ambiente:

# Generate secure keys
export MCP_API_KEY=$(openssl rand -hex 32)
export OAUTH_CLIENT_SECRET=$(openssl rand -hex 32)

Referencie na configuração:

proxy_auth:
  api_key: "${MCP_API_KEY}"

Integração com Clientes

Claude Desktop

Gere a configuração:

mcp-compose create-config --type claude --output ./claude-config

Copie o conteúdo para as configurações do Claude Desktop.

HTTP Direto

# 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"}
    }
  }'

Solução de Problemas

Verifique o Status do Serviço

mcp-compose ps
mcp-compose system status

Veja os Logs

mcp-compose logs filesystem
mcp-compose system logs proxy

Valide a Configuração

mcp-compose validate

Problemas Comuns

Porta já em uso:

lsof -i :9876
mcp-compose proxy --port 9877  # Use different port

Contêiner não iniciando:

mcp-compose logs my-server     # Check logs
docker ps -a                   # Check container status

Erros de autenticação:

echo $MCP_API_KEY              # Verify key is set

Requisitos

  • Docker 20.10+ ou Podman 3.0+
  • Linux, macOS ou Windows com WSL2
  • Go 1.19+ (para compilar a partir do código-fonte)

Arquitetura

┌──────────────────────────────┐
│     MCP-Compose Proxy        │
│  (HTTP API + Authentication) │
└──────────────┬───────────────┘
               │
        ┌──────┼──────┐
        │      │      │
    ┌───▼──┐ ┌─▼──┐ ┌▼───┐
    │ FS   │ │ Mem│ │Search│
    │STDIO │ │HTTP│ │ SSE  │
    └──────┘ └────┘ └──────┘

Licença

GNU Affero General Public License v3.0 - veja LICENSE.

Links