MCP Script Runner

Execute scripts bash definidos pelo desenvolvedor em um ambiente Dockerizado para agentes de codificação.

Documentação

MCP Script Runner

Um servidor Model Context Protocol (MCP) que fornece aos agentes de codificação uma interface genérica para executar scripts bash definidos pelo desenvolvedor em um ambiente Dockerizado.

🚀 Início Rápido

Opção 1: Docker (Recomendado)

# Clone and run with Docker
git clone <repository-url>
cd devmcp
docker compose up --build -d

# Check logs
docker compose logs -f

Opção 2: Instalação Local

# Clone repository
git clone <repository-url>
cd devmcp

# Install dependencies
pip install -r requirements.txt

# Run the server
python -m mcp_script_runner.server

📋 Visão Geral

O servidor MCP Script Runner permite que agentes de IA:

  • Executar scripts bash predefinidos com argumentos configuráveis
  • Gerenciar diretórios de trabalho para diferentes contextos de projeto
  • Obter informações de scripts incluindo descrições e argumentos disponíveis
  • Listar scripts disponíveis dinamicamente
  • Lidar com timeouts de scripts e condições de erro de forma elegante

🐳 Suporte a Docker

O projeto inclui suporte completo a Docker para execução em contêineres:

  • 🔧 Contêineres prontos para uso com todas as dependências
  • 🛡️ Ambiente de execução isolado
  • 📦 Implantação fácil com Docker Compose
  • 🔍 Capacidades de depuração com acesso interativo ao shell

Consulte DOCKER.md para o guia completo de uso do Docker.

Comandos Rápidos do Docker

# Start the MCP server
docker compose up --build -d

# Interactive development shell
docker compose --profile debug up shell

# Test script execution
docker compose exec mcp-script-runner bash scripts/hello.sh

🛠️ Instalação

Pré-requisitos

  • Python 3.11+
  • Docker (para execução em contêineres)
  • Shell compatível com Bash

Configuração Local

# Install Python dependencies
pip install -r requirements.txt

# Verify installation
python -c "from src.mcp_script_runner.server import main; print('✅ Installation OK')"

Configuração Docker

# Build container
docker build -t mcp-script-runner .

# Or use Docker Compose
docker compose up --build

⚙️ Configuração

Arquivo de Configuração: .mcp-config.json

{
  "working_directory": ".",
  "scripts": {
    "hello": {
      "path": "scripts/hello.sh",
      "description": "Simple hello world script",
      "arguments": [],
      "timeout": 30
    },
    "list_files": {
      "path": "scripts/list_files.sh",
      "description": "List files in directory with options",
      "arguments": ["directory", "options"],
      "timeout": 10
    }
  }
}

Estrutura do Diretório de Scripts

project/
├── .mcp-config.json
├── scripts/
│   ├── hello.sh
│   ├── list_files.sh
│   └── system_info.sh
└── src/
    └── mcp_script_runner/

🔧 Ferramentas MCP Disponíveis

FerramentaDescriçãoArgumentos
run_scriptExecutar um script configuradoscript_name, arguments[]
list_scriptsListar todos os scripts disponíveisNenhum
get_script_infoObter detalhes do scriptscript_name
get_working_directoryObter diretório de trabalho atualNenhum
set_working_directoryDefinir diretório de trabalhopath
reload_configRecarregar arquivo de configuraçãoNenhum

Exemplo de Uso da Ferramenta

{
  "tool": "run_script",
  "arguments": {
    "script_name": "hello",
    "arguments": []
  }
}

🏃‍♂️ Executando o Servidor

Execução Local

# Start MCP server (listens on stdio)
python -m mcp_script_runner.server

# Or with explicit path
PYTHONPATH=src python -m mcp_script_runner.server

Execução Docker

# Background service
docker compose up -d

# Interactive mode
docker compose run --rm mcp-script-runner

# Debug shell
docker compose --profile debug up shell

📝 Exemplos de Scripts

Script Hello Básico (scripts/hello.sh)

#!/bin/bash
echo "Hello from MCP Script Runner!"
echo "Current directory: $(pwd)"
echo "Script arguments: $@"
echo "Date: $(date)"

Script de Listagem de Arquivos (scripts/list_files.sh)

#!/bin/bash
DIRECTORY=${1:-.}
OPTIONS=${2:-"-la"}
echo "Listing files in: $DIRECTORY"
ls $OPTIONS "$DIRECTORY"

Script de Informações do Sistema (scripts/system_info.sh)

#!/bin/bash
echo "=== System Information ==="
echo "OS: $(uname -s)"
echo "Kernel: $(uname -r)"
echo "Architecture: $(uname -m)"
echo "Uptime: $(uptime)"
echo "Disk Usage:"
df -h

🧪 Testes

Testes Unitários

# Run tests locally
python -m pytest tests/

# Run tests in Docker
docker compose run --rm mcp-script-runner python -m pytest tests/

Testes Manuais

# Test script execution
python -c "
import asyncio
from src.mcp_script_runner.executor import ScriptExecutor
from src.mcp_script_runner.config import ConfigManager

async def test():
    cm = ConfigManager()
    ex = ScriptExecutor(cm)
    result = await ex.execute_script('hello')
    print(f'Exit code: {result.exit_code}')
    print(result.stdout)

asyncio.run(test())
"

🔐 Considerações de Segurança

  • 🛡️ Execução em contêiner isola a execução de scripts
  • 👤 Usuário não-root dentro dos contêineres (mcpuser)
  • 📁 Acesso limitado a arquivos por meio de montagens de volume
  • ⏱️ Timeouts de scripts previnem processos descontrolados
  • 🚫 Sem injeção de shell - argumentos passados com segurança

🎯 Casos de Uso

Automação de Desenvolvimento

  • Comandos de build e teste
  • Scripts de geração de código
  • Configuração do ambiente de desenvolvimento

Administração de Sistemas

  • Scripts de monitoramento de sistema
  • Tarefas de backup e manutenção
  • Gerenciamento de configuração

Integração CI/CD

  • Scripts de implantação
  • Validação de ambiente
  • Fluxos de trabalho de testes automatizados

Gerenciamento de Projetos

  • Automação de tarefas
  • Geração de relatórios
  • Gerenciamento de recursos

🐛 Solução de Problemas

Problemas Comuns

O Servidor MCP Não Inicia

# Check Python path
export PYTHONPATH=src

# Verify dependencies
pip install -r requirements.txt

# Check configuration
python -c "from src.mcp_script_runner.config import ConfigManager; cm = ConfigManager(); print('Config OK')"

A Execução do Script Falha

# Check script permissions
chmod +x scripts/*.sh

# Test script directly
bash scripts/hello.sh

# Check Docker logs
docker compose logs mcp-script-runner

Problemas com Docker

# Rebuild container
docker compose up --build

# Check container status
docker compose ps

# Interactive debugging
docker compose run --rm mcp-script-runner bash

Modo de Depuração

# Local debug
PYTHONPATH=src python -c "
import logging
logging.basicConfig(level=logging.DEBUG)
from mcp_script_runner.server import main
import asyncio
asyncio.run(main())
"

# Docker debug
docker compose --profile debug up shell

📚 Desenvolvimento

Estrutura do Projeto

devmcp/
├── 📄 README.md              # This file
├── 🐳 DOCKER.md              # Docker usage guide
├── 📋 TASKS.md               # Development tasks
├── ⚙️ .mcp-config.json       # Configuration
├── 🐳 Dockerfile             # Container definition
├── 🐳 docker-compose.yml     # Container orchestration
├── 📦 requirements.txt       # Python dependencies
├── 📦 pyproject.toml         # Python project config
├── 🔧 scripts/               # Example scripts
├── 🐍 src/mcp_script_runner/ # Python source code
└── 🧪 tests/                 # Unit tests

Adicionando Novos Scripts

  1. Crie o script no diretório scripts/
  2. Torne-o executável: chmod +x scripts/myscript.sh
  3. Adicione ao .mcp-config.json:
{
  "scripts": {
    "myscript": {
      "path": "scripts/myscript.sh",
      "description": "My custom script",
      "arguments": ["arg1", "arg2"],
      "timeout": 30
    }
  }
}
  1. Recarregue a configuração: Use a ferramenta reload_config

Contribuindo

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade
  3. Adicione testes para a nova funcionalidade
  4. Teste com Docker: docker compose up --build
  5. Envie um pull request

🚀 Implantação

Implantação em Produção

# Using Docker Compose
docker compose up -d

# Using Docker Swarm
docker stack deploy -c docker-compose.yml mcp-stack

# Using Kubernetes
kubectl apply -f k8s/

Integração com Clientes MCP

Configuração do Claude Desktop

{
  "mcpServers": {
    "script-runner": {
      "command": "docker",
      "args": ["compose", "-f", "/path/to/devmcp/docker-compose.yml", "run", "--rm", "mcp-script-runner"]
    }
  }
}

📄 Licença

Licença MIT - consulte o arquivo LICENSE para detalhes.

🤝 Suporte

  • 📖 Documentação: Consulte DOCKER.md para uso do Docker
  • 🐛 Problemas: Crie uma issue no GitHub
  • 💬 Discussões: GitHub Discussions
  • 📧 Contato: Consulte os contribuidores do repositório

Pronto para começar?

🐳 Usuários Docker: docker compose up --build 🐍 Usuários locais: pip install -r requirements.txt && python -m mcp_script_runner.server