REPL MCP Server
Um gerenciador universal de sessões REPL compatível com Python, Node.js, Ruby e outros, com gerenciamento de sessões e recuperação assistida por LLM.
Documentação
repl-mcp
Um servidor MCP simples para gerenciar sessões de REPL. Fornece ferramentas básicas para criar e executar comandos em vários REPLs e shells, com uma Interface Web integrada para monitoramento de sessão baseado em navegador.
Motivação
Trabalhar com REPLs remotos (como o console do Rails em servidores de produção) muitas vezes força você a compactar operações complexas em comandos únicos, já que perder a conexão significa perder o estado da sessão. Esta ferramenta permite sessões REPL persistentes que sobrevivem a execuções individuais de comandos, permitindo que você trabalhe naturalmente com ambientes interativos por meio de agentes de IA. A Interface Web integrada fornece monitoramento baseado em navegador para observação de sessões.
Recursos
Recursos Principais
- Suporte a Múltiplos REPLs: Python, IPython, Node.js, Ruby (pry, irb), bash, zsh
- Gerenciamento de Sessão: Criar, executar comandos e destruir sessões REPL
- Integração com Interface Web: Monitoramento de terminal baseado em navegador para observação de sessões
- Configuração Personalizável: Configure comandos de setup e variáveis de ambiente
- Multiplataforma: Funciona em Windows, macOS e Linux
Recursos Adicionais
- Recuperação por Timeout: Assistência de LLM quando comandos expiram
- Aprendizado de Sessão: Lembra padrões de prompt nas sessões
Monitoramento de Sessão Baseado em Navegador
- URLs de Sessão:
http://localhost:8023/session/SESSION_ID- Monitore sessões no navegador - Portas Dinâmicas: Seleciona automaticamente portas disponíveis a partir de 8023
- Multiplataforma: Funciona em qualquer dispositivo com navegador moderno
- Tempo Real: Saída de terminal ao vivo via conexão WebSocket
Instalação
VS Code
Clique no botão acima ou adicione ao seu .vscode/mcp.json:
{
"servers": {
"repl-mcp": {
"command": "npx",
"args": ["-y", "repl-mcp@latest"]
}
}
}
Claude Code
claude mcp add repl-mcp -- npx -y repl-mcp@latest
Configuração Manual do MCP
Adicione ao seu arquivo de configurações MCP:
{
"mcpServers": {
"repl-mcp": {
"command": "npx",
"args": ["-y", "repl-mcp@latest"]
}
}
}
A Partir do Código Fonte
- Clone este repositório
- Instale as dependências:
npm install - Compile o projeto:
npm run build - Adicione às suas configurações MCP:
{
"mcpServers": {
"repl-mcp": {
"command": "node",
"args": ["path/to/repl-mcp/build/index.js"]
}
}
}
Ferramentas Disponíveis
create_session
Cria uma nova sessão REPL com configuração predefinida ou personalizada. Use displayName para definir um nome personalizado que aparece no título da aba do navegador. Retorna uma webUrl que pode ser aberta em um navegador para monitorar a sessão via Interface Web.
Parâmetros:
presetConfig(opcional): Nome da configuração predefinidadisplayName(opcional): Nome de exibição personalizado para a sessão (mostrado na aba do navegador)customConfig(opcional): Objeto de configuração personalizado
Exemplo com predefinição:
{
"presetConfig": "pry",
"displayName": "My Ruby Session"
}
Exemplo com configuração personalizada:
{
"displayName": "Custom Python Session",
"customConfig": {
"type": "python",
"shell": "bash",
"commands": ["python3"],
"timeout": 10000
}
}
Resposta:
{
"success": true,
"sessionId": "abc123",
"config": "Ruby Pry REPL",
"webUrl": "http://localhost:8023/session/abc123"
}
A resposta inclui:
sessionId: Identificador único da sessão (formato de 6 caracteres)webUrl: URL do navegador para monitoramento da sessãoconfig: Nome da configuração utilizada
send_input_to_session
Envia entrada para uma sessão REPL.
Parâmetros:
sessionId: O ID da sessãoinput: Texto de entrada para enviar à sessãooptions(opcional): Objeto de opções de entradawait_for_prompt(padrão: false): Aguardar o prompt retornartimeout(padrão: 30000): Timeout em milissegundosadd_newline(padrão: true): Adicionar nova linha à entrada
Exemplo:
{
"sessionId": "abc123",
"input": "puts 'Hello, World!'",
"options": {
"wait_for_prompt": true
}
}
list_repl_sessions
Lista todas as sessões REPL ativas. Cada sessão inclui uma webUrl para acesso pelo navegador.
A resposta inclui:
sessions: Matriz de objetos de sessão com webUrl para cada uma- Cada sessão inclui: id, name, type, status, webUrl, etc.
get_session_details
Obtém informações detalhadas sobre uma sessão específica. Inclui webUrl para acesso pelo navegador.
Parâmetros:
sessionId: O ID da sessão
A resposta inclui:
session: Informações detalhadas da sessãowebUrl: URL do navegador para monitoramento da sessão
destroy_repl_session
Destrói uma sessão REPL existente.
Parâmetros:
sessionId: O ID da sessão
list_repl_configurations
Lista todas as configurações REPL predefinidas disponíveis.
send_signal_to_session
Envia um sinal (como Ctrl+C, Ctrl+Z) para interromper ou controlar o processo de uma sessão REPL.
Parâmetros:
sessionId: O ID da sessãosignal: Sinal a enviar (SIGINT,SIGTSTP,SIGQUIT)
Exemplo:
{
"sessionId": "abc123",
"signal": "SIGINT"
}
Observação sobre Windows: No Windows, apenas SIGINT é efetivamente funcional. Ele é enviado como um evento Ctrl+C e pode ser usado para interromper comandos em execução ou encerrar processos compatíveis, como REPLs do Node.js. SIGTSTP e SIGQUIT não têm efeito.
set_session_ready
Marca uma sessão como pronta com um padrão de prompt específico. Usado durante a recuperação da sessão.
Parâmetros:
sessionId: O ID da sessãopattern: Padrão de prompt (regex ou string literal)
Exemplo:
{
"sessionId": "abc123",
"pattern": "❯ "
}
wait_for_session
Aguarda mais tempo para que uma sessão fique pronta.
Parâmetros:
sessionId: O ID da sessãoseconds: Número de segundos para aguardar
Exemplo:
{
"sessionId": "abc123",
"seconds": 5
}
mark_session_failed
Marca uma sessão como falha com um motivo.
Parâmetros:
sessionId: O ID da sessãoreason: Motivo da falha
Exemplo:
{
"sessionId": "abc123",
"reason": "Process crashed"
}
Configurações Predefinidas
Observação: Cada ferramenta REPL deve estar instalada e disponível no seu PATH.
Configurações de REPL
- pry: REPL Ruby Pry com recursos avançados de depuração
- irb: REPL Ruby IRB com funcionalidade padrão
- ipython: REPL Python aprimorado com recursos ricos
- node: REPL JavaScript do Node.js
- python: REPL Python padrão
Configurações de Shell
- bash: Ambiente de shell Bash
- zsh: Ambiente de shell Zsh (com suporte a Oh My Zsh)
Configurações Avançadas
- rails_console: Console Rails com bundle exec
- rails_console_production: Console Rails de produção
Recuperação de Sessão
Quando sessões expiram ou ficam sem resposta, você pode usar ferramentas de recuperação:
send_signal_to_session- Envie Ctrl+C, Ctrl+Z ou outros sinais para interromper processosset_session_ready- Marque a sessão como pronta quando detectar um prompt funcionalwait_for_session- Aguarde mais tempo para comandos lentos serem concluídosmark_session_failed- Marque a sessão como falha quando a recuperação não for possível
Padrões de prompt aprendidos durante a recuperação são lembrados durante a duração da sessão.
Exemplos de Uso
Uso Básico do REPL
Criar uma Sessão Python
{
"tool": "create_session",
"arguments": {
"presetConfig": "python",
"displayName": "My Python Session"
}
}
Resposta:
{
"success": true,
"sessionId": "xyz789",
"config": "Python REPL",
"webUrl": "http://localhost:8023/session/xyz789"
}
Executar Código Python
{
"tool": "send_input_to_session",
"arguments": {
"sessionId": "xyz789",
"input": "print('Hello from REPL!')",
"options": {
"wait_for_prompt": true
}
}
}
Monitoramento de Sessão na Interface Web
Para monitorar uma sessão, crie-a usando as ferramentas MCP e abra o webUrl da resposta em um navegador. Isso permite observar a atividade do terminal em tempo real.
Fluxo de Trabalho de Exemplo:
- Crie a sessão via MCP para obter um
webUrl. - Abra a URL em um navegador (por exemplo,
http://localhost:8023/session/xyz789), manualmente ou usando ferramentas de automação como Playwright MCP. - Observe o terminal ao vivo.
Exemplo de Recuperação de Sessão
Quando um comando expira ou trava, você pode recuperar a sessão:
Interromper com Ctrl+C:
{
"tool": "send_signal_to_session",
"arguments": {
"sessionId": "xyz789",
"signal": "SIGINT"
}
}
Marcar sessão como pronta:
{
"tool": "set_session_ready",
"arguments": {
"sessionId": "xyz789",
"pattern": "❯ "
}
}
Gerenciamento de Sessão
Cada sessão mantém:
- ID de sessão único: Formato de 6 caracteres para fácil identificação e gerenciamento
- Detalhes da configuração: Tipo de REPL, shell, comandos de setup, etc.
- Status atual: inicializando, pronto, executando, erro, encerrado
- Histórico de comandos: Registro de comandos executados
- Última saída e erros: Resultados de execução mais recentes
- Registros de data e hora de criação e atividade: Rastreamento do ciclo de vida da sessão
- Padrões de prompt aprendidos: Padrões personalizados descobertos por meio de assistência de LLM
- Acesso à Interface Web: URL do navegador para monitoramento da sessão
Ciclo de Vida da Sessão
- Inicialização: Sessão criada com a configuração especificada
- Pronto: Sessão preparada para execução de comandos
- Executando: Comando sendo processado
- Aprendizado: Assistência de LLM para detecção de prompt (quando necessário)
- Otimizado: Padrões aprendidos permitem execução rápida
Tratamento de Erros
O servidor fornece tratamento abrangente de erros com recuperação inteligente:
Tratamento de Erros Tradicional
- Falhas na criação de sessão: Mensagens de erro claras com informações de diagnóstico
- Timeouts na execução de comandos: Tratamento gracioso de timeout com opções de nova tentativa
- Crashs de REPL e recuperação: Detecção automática e gerenciamento de estado da sessão
- Detecção de comandos inválidos: Validação de entrada e relatório de erros
Recuperação Aprimorada por LLM
- Falhas na detecção de prompt: Consulta automática ao LLM para prompts desconhecidos
- Tratamento de timeout adaptativo: Espera inteligente com base na complexidade do comando
- Suporte a ambientes personalizados: Aprendizado dinâmico para shells não padrão
- Análise de erros contextual: Informações ricas de erro para solução de problemas
Formato de Resposta de Erro
Erro Padrão:
{
"success": false,
"error": "Session not found",
"executionTime": 0
}
Erro Assistido por LLM:
{
"success": false,
"error": "Timeout - LLM guidance needed",
"question": "Session timed out. What should I do?",
"questionType": "timeout_analysis",
"canContinue": true,
"context": { "sessionId": "...", "rawOutput": "..." }
}
Desenvolvimento
Compilação
npm run build
Modo de Desenvolvimento
npm run dev
Isso iniciará o TypeScript em modo de observação para desenvolvimento.
Notas Específicas da Plataforma
Windows
- Usa
cmdoupowershellcomo shell padrão - Alguns recursos de REPL podem se comportar de forma diferente
- Tratamento de Sinais: Apenas
SIGINTé suportado efetivamente. Ele é traduzido para um eventoCtrl+C, que pode interromper a maioria das ferramentas de linha de comando e encerrar REPLs como o do Node.js.SIGTSTP(Ctrl+Z) eSIGQUIT(Ctrl+\) não são suportados pelo console do Windows e não terão efeito.
macOS/Linux
- Usa
bashouzshcomo shell padrão - Suporte completo de recursos
Solução de Problemas
Problemas Comuns
- A criação de sessão falha: Verifique se o comando REPL necessário está instalado e acessível
- Comandos expiram consistentemente: Aumente o valor do timeout ou verifique a resposta do REPL
- REPL não encontrado: Garanta que o executável do REPL esteja no seu PATH
Problemas com a Interface Web
- Conflitos de porta: O servidor encontra automaticamente portas disponíveis a partir de 8023
- Terminal do navegador sem resposta: Verifique se o JavaScript está habilitado e tente atualizar
- URL da sessão não funciona: Verifique se a sessão ainda está ativa e se a porta está correta
- Problemas de tamanho do terminal: O terminal usa tamanho 132x43 para melhor compatibilidade com aplicativos
Problemas com Recuperação de Sessão
- Sessão travada: Use
send_signal_to_sessioncomSIGINTpara interromper processos travados - Padrão não funciona: Use
set_session_readycom o padrão de prompt correto - Comandos expiram: Tente
wait_for_sessionpara comandos lentos ousend_signal_to_sessionpara interromper
Boas Práticas
Para Shells Complexos
- Prompts personalizados: Use
set_session_readypara especificar seu padrão de prompt - Ambientes aninhados: Use
wait_for_sessionpara ambientes que precisam de tempo para estabilizar - Processos travados: Use
send_signal_to_sessionpara interromper comandos de longa duração
Dicas de Performance
- Aprendizado de sessão: Padrões aprendidos durante a assistência de LLM melhoram comandos subsequentes
- Múltiplas sessões: Cada sessão aprende de forma independente
Informações de Depuração
Variáveis de Ambiente
REPL_MCP_DEBUG=1: Habilita registro de depuração detalhado para solução de problemas de performance e desenvolvimento
Habilite a depuração detalhada verificando o campo debugLogs nas respostas:
{
"success": true,
"output": "...",
"debugLogs": [
"2025-06-22T15:31:15.504Z: [DEBUG session_xxx] Prompt detected: true",
"2025-06-22T15:31:15.505Z: [DEBUG session_xxx] Learned new prompt pattern: '∙'"
]
}
Contribuindo
Contribuições são bem-vindas! Os recursos assistidos por LLM facilitam a adição de suporte para novos ambientes de shell e tipos de REPL. Ao contribuir:
- Teste com diferentes shells: Garanta compatibilidade em bash, zsh e outros ambientes
- Considere variações de prompt: Teste com prompts e temas personalizados
- Atualize configurações: Adicione novas configurações predefinidas para setups comuns
- Documente padrões de LLM: Compartilhe padrões de prompt bem-sucedidos para outros
Licença
Licença MIT