MCP Server Automation CLI
Uma ferramenta de linha de comando para automatizar o empacotamento de servidores MCP como imagens Docker e implantá-los no AWS ECS.
Documentação
MCP Server Automation CLI
Uma ferramenta CLI poderosa que automatiza o processo de transformar servidores stdio do Model Context Protocol (MCP) 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
- ⚡ Modo de Comando Direto: Construa servidores MCP instantaneamente sem arquivos de configuração usando a sintaxe de separador
-- - 🔄 Build Automático: Busque servidores MCP do GitHub, construa imagens Docker e envie para o ECR
- ☁️ Implantação com Um Clique: Gere modelos CloudFormation e implante infraestrutura ECS completa
- 🔍 Detecção Inteligente: Detecte automaticamente comandos de servidor MCP a partir de arquivos README
- 🐳 Multi-idioma: Suporte para servidores MCP Python e Node.js/TypeScript com detecção automática de idioma
- 🏷️ Nomenclatura Inteligente: Extração automática do nome do pacote para nomeação de imagens Docker
- 🔧 Suporte a Depuração: Logging de depuração integrado para solução de problemas
- 📝 Geração de Configuração: Gere configurações de cliente MCP para Claude Desktop, Cline, etc.
📋 Pré-requisitos
- Python 3.8+
- Docker (com daemon em execução)
- AWS CLI configurado com as 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
Modo de Comando Direto (Sem Arquivo de Configuração)
A maneira mais rápida de construir imagens de servidor MCP é usando o modo de comando direto:
# Build MCP server image directly (no config file needed)
uvx --from git+https://github.com/aws-samples/sample-mcp-server-automation mcp-server-automation -- npx -y @modelcontextprotocol/server-everything
# Build and push to ECR
uvx --from git+https://github.com/aws-samples/sample-mcp-server-automation mcp-server-automation --push-to-ecr -- uvx mcp-server-automation
# Build for specific architecture
uvx --from git+https://github.com/aws-samples/sample-mcp-server-automation mcp-server-automation --arch linux/arm64 -- npx -y @modelcontextprotocol/server-everything
Arquivos de Configuração
Use arquivos de configuração baseados em YAML para implantações complexas:
# 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 (MacOS ou Linux)
# Clone and setup
git clone https://github.com/aws-samples/sample-mcp-server-automation
cd mcp-convert-automate
uv sync
source .venv/bin/activate
# Run with config file
uv run mcp-server-automation --config your-config.yaml
# Run with direct command mode
uv run mcp-server-automation -- npx -y @modelcontextprotocol/server-everything
# Run with specific architecture
uv run mcp-server-automation --arch linux/arm64 -- npx -y @modelcontextprotocol/server-everything
⚙️ Configuração
A ferramenta suporta dois modos:
- Modo de Comando Direto: Nenhum arquivo de configuração necessário - especifique o comando diretamente com o separador
-- - Modo de Arquivo de Configuração: Use arquivos de configuração YAML para builds e implantações complexas
Modo de Comando Direto
Use o separador -- para especificar comandos diretamente:
# Basic usage
mcp-server-automation -- npx -y @modelcontextprotocol/server-everything
# With ECR push (requires ECR repository to be configured separately)
mcp-server-automation --push-to-ecr -- python -m my_server
# With specific architecture for cross-platform builds
mcp-server-automation --arch linux/arm64 -- npx -y @modelcontextprotocol/server-everything
# Package name extraction for image naming
# @modelcontextprotocol/server-everything → mcp-server-everything
# mcp-server-automation → mcp-mcp-server-automation
Recursos:
- Nenhum arquivo de configuração necessário
- Extração automática do nome do pacote para nomeação de imagens Docker
- Suporte a múltiplas arquiteturas com o parâmetro
--arch(linux/amd64, linux/arm64, etc.) - Modo somente build (a implantação requer arquivos de configuração)
- Suporte simples à flag
--push-to-ecr
Modo de Arquivo de Configuração
Para cenários complexos, use arquivos de configuração YAML com as seções build e deploy:
build:
# Method 1: Use command and package manager
entrypoint:
command: "npx"
args:
- "-y"
- "@modelcontextprotocol/server-everything"
# Method 2: Fetch MCP server from GitHub
# github:
# Required: GitHub repository URL for MCP server
# github_url: "https://github.com/awslabs/mcp"
# Optional: Subfolder path if MCP server is not in root
# subfolder: "src/aws-documentation-mcp-server"
# Optional: Git branch to build from (default: main)
# branch: "develop"
# 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"
# Optional: Target architecture for Docker build
# architecture: "linux/arm64" # Options: linux/amd64, linux/arm64
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"
🔧 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
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
🏗️ Arquitetura
Fluxo do Processo de Build
A ferramenta suporta dois modos de build:
Modo de Comando Direto
- Análise de Comando: Analisa comando e argumentos da CLI usando o separador
--(ex.:-- npx -y @modelcontextprotocol/server-everything) - Extração do Nome do Pacote: Extrai automaticamente nomes de pacotes para nomeação de imagens Docker (ex.:
@modelcontextprotocol/server-everything→mcp-server-everything) - Detecção de Linguagem: Detecta o runtime (Node.js/Python) a partir do comando
- Geração de Dockerfile: Cria contêineres otimizados com pacotes pré-instalados
- Construção de Imagem: Constrói contêiner pronto para executar o comando especificado
Modo de Arquivo de Configuração (GitHub/Entrypoint)
- Análise de Repositório: Baixa repositórios GitHub e detecta a configuração do servidor MCP a partir de arquivos README (modo GitHub)
- Detecção de Linguagem: Detecta automaticamente Python ou Node.js/TypeScript com base nos arquivos do projeto (package.json, pyproject.toml, etc.)
- Detecção de Comando: Analisa blocos JSON em arquivos README para extrair comandos de inicialização do servidor MCP dos formatos de configuração do Claude Desktop (
mcpServers) e VS Code (mcp.servers) - Geração de Dockerfile: Usa modelos Jinja2 específicos de linguagem (Dockerfile-python.j2, Dockerfile-nodejs.j2) para criar builds otimizados com integração CLI do mcp-proxy
- Construção de Imagem: Cria contêineres específicos de linguagem com gerenciamento adequado de dependências e builds em múltiplos estágios
Arquitetura de Implantação
GitHub Repo → Docker Build → ECR → ECS Fargate ← ALB ← Internet
↓ ↓ ↓ ↓ ↓
MCP Server → mcp-proxy + MCP → Image → Service → HTTP/SSE Endpoints
Suporte e Detecção de Linguagem
A ferramenta suporta servidores MCP Python e Node.js/TypeScript com detecção automática de linguagem:
Projetos Python
- Detectados por: arquivos
pyproject.toml,requirements.txt,setup.pyou.py - Gerenciadores de pacotes: pip, uv, poetry (detectados automaticamente)
- Imagem base:
python:3.12-slim-bookworm - Extração de comando de: scripts de console em pyproject.toml, entry points em setup.py
Projetos Node.js/TypeScript
- Detectados por: arquivos
package.json,tsconfig.jsonou.ts/.js - Gerenciador de pacotes: npm (com imagem base Node.js 24-bullseye)
- Imagem base:
node:24-bullseye - Extração de comando de: configurações JSON do README
Detecção e Substituição de Comando
A ferramenta detecta automaticamente comandos de inicialização do servidor MCP a partir de:
- Arquivos README - Blocos de configuração JSON que suportam ambos os formatos:
- Claude Desktop:
{"mcpServers": {...}} - VS Code:
{"mcp": {"servers": {...}}}
- Claude Desktop:
- Projetos Python - Scripts de console
pyproject.toml, entry pointssetup.py - Projetos Node.js - Configurações do README (scripts do package.json não são analisados)
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:
github_url: "https://github.com/my-org/custom-mcp-server"
command_override:
- "python"
- "-m"
- "my_server_module"
- "--verbose"
- "--port"
- "3000"
push_to_ecr: true
Exemplos de Configurações README Suportadas:
Formato Claude Desktop:
{
"mcpServers": {
"everything": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-everything"]
}
}
}
Formato VS Code:
{
"mcp": {
"servers": {
"everything": {
"command": "python",
"args": ["-m", "server"]
}
}
}
}
Exemplo de Erro:
Se o README do seu servidor MCP mostrar apenas comandos Docker:
{
"mcpServers": {
"myserver": {
"command": "docker",
"args": ["run", "myserver:latest"]
}
}
}
Você receberá um erro exigindo command_override para especificar o comando de inicialização direto.
🐛 Solução de Problemas
Problemas de Build Docker
- Certifique-se de que o daemon do 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 Build Multi-Arquitetura
Ao usar o parâmetro --arch ou architecture em arquivos de configuração, você pode encontrar:
Erro: "No builder available for architecture"
Isso significa que o Docker Buildx não está configurado corretamente. Para corrigir:
# Create and use a new multi-platform builder
docker buildx create --name multiarch --use
# Or use an existing builder
docker buildx use <builder-name>
# List available builders
docker buildx ls
Arquiteturas suportadas:
linux/amd64- x86-64 padrão (Intel/AMD)linux/arm64- ARM 64 bits (Apple Silicon, AWS Graviton)
Para mais informações, visite: https://docs.docker.com/build/building/multi-platform/
Problemas de Push ECR
- Certifique-se de que as credenciais AWS tenham permissões ECR
- Verifique se o repositório ECR existe e está acessível
- Confirme que o Docker está autenticado com o ECR
Problemas de Implantação CloudFormation
- Certifique-se de que as credenciais AWS tenham permissões suficientes
- Verifique se o cluster ECS existe
- Confirme se a região AWS está correta
- Revise os eventos do CloudFormation no Console AWS para mensagens de erro detalhadas
Problemas de Conexão do Servidor MCP
- Verifique os logs do contêiner na configuração local:
docker logs <container-id> - Verifique o endpoint de health check:
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 logging detalhado
🔐 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 do CloudFormation no Console AWS para problemas de implantação
- Use o modo de depuração para logging detalhado
- Abra uma issue para bugs ou solicitações de recursos