MCP Server Automation CLI

Uma ferramenta de linha de comando para automatizar a implantação de servidores MCP no AWS ECS.

Documentação

Aviso de Migração

Este repositório foi migrado para aws-samples. O novo caminho do repositório é https://github.com/aws-samples/sample-mcp-server-automation. Este repositório está arquivado.

MCP Server Automation CLI

Uma ferramenta CLI poderosa que automatiza o processo de transformar servidores MCP (Model Context Protocol) stdio em imagens Docker implantadas no AWS ECS usando mcp-proxy. Esta ferramenta preenche a lacuna entre servidores MCP locais e implantações remotas baseadas em HTTP.

🚀 Recursos

  • 🔄 Build Automático: Busca servidores MCP do GitHub, cria imagens Docker e envia para o ECR
  • ☁️ Implantação com Um Clique: Gera modelos CloudFormation e implanta infraestrutura ECS completa
  • 🔍 Detecção Inteligente: Detecta automaticamente comandos de servidores MCP a partir de arquivos README
  • 🐳 Multi-Arquitetura: Suporte para servidores MCP Python, Node.js e híbridos
  • 🔧 Suporte a Debug: Logs de depuração integrados para solução de problemas
  • 📝 Geração de Configuração: Gera configurações de clientes MCP para Claude Desktop, Cline, etc.

📋 Pré-requisitos

  • Python 3.8+
  • Docker (com daemon em execução)
  • AWS CLI configurado com permissões apropriadas
  • Repositório AWS ECR (criado se usar push ECR)
  • Cluster AWS ECS (criado se implantar)

Instalar uv

# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

📖 Início Rápido

Usando uvx (Recomendado)

A maneira mais fácil de usar esta ferramenta é com uvx, que gerencia as dependências automaticamente:

# Install from a Git repository
uvx --from git+https://github.com/aws-samples/sample-mcp-server-automation mcp-server-automation --config your-config.yaml

Configuração de Desenvolvimento Local

# Clone and setup
git clone <repository-url>
cd mcp-convert-automate

# Create virtual environment and install dependencies
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt

# Install in development mode (optional - for local CLI usage)
pip install -e .

⚙️ Configuração

A ferramenta usa um arquivo de configuração YAML unificado com seções build e deploy.

Configuração Unificada

build:
  # Required: GitHub repository URL
  github_url: "https://github.com/awslabs/mcp"

  # Optional: Subfolder if MCP server is not in root
  subfolder: "src/aws-documentation-mcp-server"

  # Optional: Git branch to build from (default: main)
  branch: "main"

  # Required for deployment: Must be true to enable ECR push and deployment
  push_to_ecr: true

  # Optional: Custom Docker image configuration
  # If not specified, auto-generated when push_to_ecr=true
  # image:
  #   repository: "123456789012.dkr.ecr.us-east-1.amazonaws.com/mcp-servers/my-mcp-server"
  #   tag: "v1.0"  # Optional, defaults to dynamic git-based tag

  # Optional: AWS region (default: from AWS profile, fallback to us-east-1)
  # aws_region: "us-west-2"

  # Optional: Custom Dockerfile path
  # dockerfile_path: "./custom.Dockerfile"

  # Optional: Override auto-detected MCP server command
  # Required when README only contains Docker commands or no suitable command is found
  # command_override:
  #   - "python"
  #   - "-m"
  #   - "my_server_module"
  #   - "--verbose"

  # Optional: Set environment variables in the container
  # environment_variables:
  #   LOG_LEVEL: "debug"
  #   AWS_REGION: "us-east-1"
  #   MCP_SERVER_NAME: "custom-server"

deploy:
  # Required: Enable deployment (only works when push_to_ecr=true)
  enabled: true

  # Required: ECS service name
  service_name: "my-mcp-service"

  # Required: ECS cluster name
  cluster_name: "my-ecs-cluster"

  # Required: VPC ID where resources will be created
  vpc_id: "vpc-12345678"

  # Required: Subnet configuration
  alb_subnet_ids:    # Public subnets for ALB (minimum 2 in different AZs)
    - "subnet-public-1"
    - "subnet-public-2"
  ecs_subnet_ids:    # Private subnets for ECS tasks (minimum 1, should resides in AZ of alb_subnet_ids)
    - "subnet-private-1"
    - "subnet-private-2"

  # Optional: Container port (default: 8000)
  port: 8000

  # Optional: Task CPU units (default: 256)
  cpu: 256

  # Optional: Task memory in MB (default: 512)
  memory: 512

  # Optional: SSL certificate ARN for HTTPS
  certificate_arn: "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012"

  # Optional: Save MCP client configuration to file
  save_config: "./mcp-config.json"

🏗️ Arquitetura

Fluxo do Processo de Build

  1. Análise do Repositório: Baixa repositórios do GitHub e detecta a configuração do servidor MCP a partir de arquivos README
  2. Detecção de Comandos: Analisa blocos JSON em arquivos README para extrair comandos de inicialização do servidor MCP, priorizando comandos NPX/uvx sobre comandos Docker
  3. Geração de Dockerfile: Usa modelos Jinja2 para criar builds Docker multi-estágio com integração CLI mcp-proxy
  4. Criação de Imagem: Cria contêineres híbridos Node.js + Python com gerenciamento adequado de dependências

Arquitetura de Implantação

GitHub Repo → Docker Build → ECR → ECS Fargate ← ALB ← Internet
     ↓              ↓           ↓         ↓        ↓
MCP Server → mcp-proxy + MCP → Image → Service → HTTP/SSE Endpoints

Detalhes Técnicos Principais

  • Integração mcp-proxy: Usa ferramenta CLI TypeScript/Node.js para transporte HTTP com logs de depuração habilitados
  • Arquitetura de Contêiner: Builds multi-estágio com imagem base node:24-bullseye, inclui netcat para verificações de saúde
  • Formato de Comando: mcp-proxy --debug --port 8000 --shell <command> [-- <args>] para ordenação adequada de argumentos
  • Protocolo de Transporte: Converte MCP stdio para HTTP com endpoint /mcp para transporte HTTP Streamable
  • Tags Dinâmicas: Imagens marcadas com hash de commit git e timestamp (ex.: a1b2c3d4-develop-20231222-143055)
  • Suporte a Branches: Pode compilar a partir de branches git específicas, padrão 'main'
  • Verificações de Saúde: Contêiner usa verificação de porta netcat, verificações de saúde ALB no endpoint /mcp esperando HTTP 400
  • Geração de Configuração MCP: Gera e imprime automaticamente a configuração do cliente MCP após a implantação
  • Infraestrutura: Stack CloudFormation completa com VPC, ALB, ECS Fargate, grupos de segurança e funções IAM

🔧 Uso Avançado

Dockerfile Personalizado

build:
  github_url: "https://github.com/my-org/custom-mcp-server"
  dockerfile_path: "./custom/Dockerfile"
  push_to_ecr: true
deploy:
  enabled: true
  # ... deployment configuration

Detecção e Substituição de Comandos

A ferramenta detecta automaticamente comandos de inicialização do servidor MCP a partir de:

  1. Arquivos README - Blocos de configuração JSON com mcpServers
  2. pyproject.toml - Scripts de console ou módulos principais
  3. setup.py - Pontos de entrada e scripts

Substituição de Comando Necessária Quando:

  • O README contém apenas comandos Docker (não adequados para conteinerização)
  • Nenhum comando de inicialização adequado pode ser detectado
  • Você deseja especificar parâmetros exatos de inicialização

Exemplo:

build:
  github_url: "https://github.com/my-org/custom-mcp-server"
  command_override:
    - "python"
    - "-m"
    - "my_server_module"
    - "--verbose"
    - "--port"
    - "3000"
  push_to_ecr: true

Exemplo de Erro: Se o README do seu servidor MCP mostrar apenas:

{
  "mcpServers": {
    "myserver": {
      "command": "docker",
      "args": ["run", "myserver:latest"]
    }
  }
}

Você receberá um erro exigindo command_override para especificar o comando direto de inicialização.

Variáveis de Ambiente no Contêiner

Defina variáveis de ambiente personalizadas que estarão disponíveis para o servidor MCP em tempo de execução:

build:
  github_url: "https://github.com/my-org/custom-mcp-server"
  environment_variables:
    LOG_LEVEL: "debug"
    AWS_REGION: "us-east-1"
    MCP_SERVER_NAME: "custom-server"
    PYTHONPATH: "/app/mcp-server:/custom/path"
  push_to_ecr: true

Variáveis de Ambiente do Sistema

Defina variáveis de ambiente para substituir as configurações padrão da AWS:

export AWS_REGION=us-west-2
export ECS_CLUSTER_NAME=my-production-cluster

🐛 Solução de Problemas

Problemas de Build Docker

  • Certifique-se de que o daemon Docker está em execução
  • Verifique se o servidor MCP possui arquivos de dependência adequados (requirements.txt, pyproject.toml, etc.)
  • Confirme se a URL do repositório GitHub está acessível

Problemas de Push ECR

  • Certifique-se de que as credenciais AWS têm permissões ECR
  • Verifique se o repositório ECR existe e está acessível
  • Confirme se o Docker está autenticado com o ECR

Problemas de Implantação CloudFormation

  • Certifique-se de que as credenciais AWS têm permissões suficientes
  • Verifique se o cluster ECS existe
  • Confirme se a região AWS está correta
  • Revise os eventos CloudFormation no Console AWS para mensagens de erro detalhadas

Problemas de Conexão do Servidor MCP

  • Verifique os logs do contêiner: docker logs <container-id>
  • Verifique o endpoint de verificação de saúde: curl http://<alb-url>/mcp (espera HTTP 400)
  • Teste a conexão direta: curl http://<alb-url>/mcp
  • Use o modo de depuração para logs detalhados

🔐 Permissões AWS Necessárias

As credenciais AWS usadas devem ter as seguintes permissões:

Permissões ECR

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:GetAuthorizationToken",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ],
      "Resource": "*"
    }
  ]
}

Permissões ECS e CloudFormation

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:*",
        "cloudformation:*",
        "ec2:*",
        "elasticloadbalancing:*",
        "iam:CreateRole",
        "iam:AttachRolePolicy",
        "iam:PassRole",
        "logs:CreateLogGroup",
        "logs:DescribeLogGroups"
      ],
      "Resource": "*"
    }
  ]
}

📝 Configuração do Cliente MCP

Após a implantação, a ferramenta gera configuração para clientes MCP:

{
  "mcpServers": {
    "my-mcp-server": {
      "type": "sse",
      "url": "http://<ALB address>/sse"
    }
  }
}

Testando a Conexão MCP

# Install mcp-proxy client
npm install -g mcp-proxy

# Test connection
mcp-proxy https://your-alb-url.amazonaws.com/mcp

Segurança

Consulte CONTRIBUTING para mais informações.

Licença

Esta biblioteca é licenciada sob a Licença MIT-0. Consulte o arquivo LICENSE.

🆘 Suporte

  • Consulte a seção de solução de problemas para problemas comuns
  • Revise os eventos CloudFormation no Console AWS para problemas de implantação
  • Use o modo de depuração para logs detalhados
  • Abra uma issue para bugs ou solicitações de recursos