cmux-mcp

Servidor MCP para controlar o cmux (terminal baseado em Ghostty) via CLI nativa. Envie comandos, leia saídas, envie caracteres de controle — tudo em segundo plano via socket Unix.

Documentação

cmux-mcp

한국어

Servidor MCP que dá aos agentes de IA controle total do seu terminal cmux.

Deixe o Claude executar comandos, ler saídas, gerenciar abas/painéis/workspaces/janelas e enviar caracteres de controle no seu terminal cmux — tudo através do Model Context Protocol. Funciona em segundo plano. Sem roubo de foco.

Início Rápido

Opção A: Plugin Claude Code (Recomendado)

/plugin marketplace add daegweon/cmux-mcp
/plugin install cmux-mcp@cmux-tools

É isso. O servidor MCP é configurado automaticamente.

Opção B: npx (Sem necessidade de build)

Edite ~/.claude/settings.json:

{
  "mcpServers": {
    "cmux-mcp": {
      "command": "npx",
      "args": ["-y", "cmux-mcp"]
    }
  }
}

Reinicie o Claude Code.

Opção C: Clonar e compilar

git clone https://github.com/daegweon/cmux-mcp.git
cd cmux-mcp
npm install && npm run build

Edite ~/.claude/settings.json:

{
  "mcpServers": {
    "cmux-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/cmux-mcp/build/index.js"]
    }
  }
}

Reinicie o Claude Code.

Configuração do Claude Desktop

Edite ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "cmux-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/cmux-mcp/build/index.js"]
    }
  }
}

Reinicie o Claude Desktop após salvar.

Qualquer cliente MCP

O cmux-mcp se comunica via stdio. Aponte seu cliente MCP para node /path/to/cmux-mcp/build/index.js.

Requisitos

  • macOS
  • cmux.app instalado e em execução
  • Node.js 18+
  • Modo de controle do socket cmux definido como Automação ou Acesso Aberto (Configurações > Automação > Modo de Controle do Socket)

Ferramentas

O cmux-mcp expõe toda a CLI do cmux como ferramentas MCP. Todas as ferramentas de E/S do terminal suportam um parâmetro opcional surface para direcionar abas específicas.

E/S do Terminal

FerramentaDescrição
write_to_terminalEnvia comandos ao terminal. Enter é anexado automaticamente. Retorna a contagem de novas linhas de saída.
read_terminal_outputLê as últimas N linhas do buffer do terminal.
send_control_characterEnvia Ctrl+C, Ctrl+Z, Escape ou qualquer caractere de controle.

Gerenciamento de Superfícies (Abas)

FerramentaDescrição
list_surfacesLista todas as abas em um workspace com IDs e títulos.
new_surfaceCria uma nova aba de terminal.
close_surfaceFecha uma aba específica.
focus_surfaceFoca (ativa) uma aba específica.
move_surfaceMove uma aba para um painel, janela ou posição diferente.
reorder_surfaceReordena uma aba dentro do seu painel.
rename_tabRenomeia uma aba.
new_splitDivide a superfície atual em um novo painel.
drag_surface_to_splitArrasta uma superfície para criar uma divisão.
refresh_surfacesAtualiza todas as superfícies.
surface_healthVerifica a saúde das superfícies.

Gerenciamento de Painéis

FerramentaDescrição
list_panesLista todos os painéis em um workspace.
new_paneCria um novo painel (divisão) com direção.
focus_paneFoca um painel específico.
resize_paneRedimensiona um painel em uma direção dada.
swap_paneTroca dois painéis.
break_paneExtrai um painel para um novo workspace.
join_paneJunta um painel em outro painel.
last_paneAlterna para o último painel ativo.
list_panelsLista todos os painéis em um workspace.
focus_panelFoca um painel específico.

Gerenciamento de Janelas

FerramentaDescrição
list_windowsLista todas as janelas.
new_windowCria uma nova janela.
close_windowFecha uma janela específica.
focus_windowFoca uma janela específica.
current_windowMostra informações da janela atual.
rename_windowRenomeia a janela atual.
next_window / previous_window / last_windowNavega entre janelas.
move_workspace_to_windowMove um workspace para uma janela diferente.

Gerenciamento de Workspaces

FerramentaDescrição
list_workspacesLista todos os workspaces.
new_workspaceCria um novo workspace com cwd/comando opcional.
close_workspaceFecha um workspace específico.
select_workspaceAlterna para um workspace específico.
rename_workspaceRenomeia um workspace.
current_workspaceMostra informações do workspace atual.
reorder_workspaceReordena um workspace na barra lateral.

Pesquisa e Estrutura

FerramentaDescrição
find_windowPesquisa uma janela por conteúdo ou título.
treeMostra a estrutura completa da árvore (janelas/workspaces/painéis/superfícies).
identifyMostra informações de identidade da superfície/workspace atual.

Notificações

FerramentaDescrição
notifyEnvia uma notificação com título, subtítulo e corpo.
list_notificationsLista todas as notificações.
clear_notificationsLimpa todas as notificações.

Metadados da Barra Lateral

FerramentaDescrição
set_status / clear_status / list_statusGerencia entradas de status na barra lateral.
set_progress / clear_progressGerencia uma barra de progresso na barra lateral.
sidebar_stateMostra o estado atual da barra lateral.

Log

FerramentaDescrição
logEscreve uma entrada de log na barra lateral do workspace.
clear_logLimpa entradas de log.
list_logLista entradas de log.

Buffer

FerramentaDescrição
set_bufferDefine um buffer nomeado com conteúdo de texto.
list_buffersLista todos os buffers.
paste_bufferCola um buffer no terminal.

Controle do Terminal

FerramentaDescrição
clear_historyLimpa o histórico de scrollback do terminal.
capture_paneCaptura o conteúdo do painel (compatível com tmux).
respawn_paneReinicia um painel (reinicia o shell).
pipe_paneEnvia a saída do painel para um comando shell.
display_messageExibe uma sobreposição de mensagem.
trigger_flashAciona um flash visual no terminal.

Hooks e Diversos

FerramentaDescrição
set_hookDefine, lista ou remove hooks de eventos.
wait_forAguarda ou envia um sinal nomeado.
set_app_focusDefine o estado de foco do aplicativo.
markdown_openAbre um arquivo markdown em um visualizador formatado com recarga automática.
versionMostra a versão do cmux.
pingEnvia ping ao socket do cmux.

Navegador

FerramentaDescrição
browserControla o navegador integrado do cmux com subcomandos: open, navigate, snapshot, click, type, eval, screenshot e muitos outros.

Exemplos do Mundo Real

Executar testes e analisar falhas:

"Execute a suíte de testes e me diga quais testes estão falhando"

O Claude envia npm test, lê a saída e resume as falhas.

Sessões SSH multi-abas:

"Abra duas novas abas, conecte via SSH ao server-a em uma e ao server-b na outra, depois compare o uso de disco deles"

O Claude cria abas, envia comandos SSH para cada uma, lê a saída de ambas e compara.

Sessão REPL interativa:

"Abra um REPL Python e verifique se o pandas está instalado"

O Claude inicia python3, digita import pandas, lê o resultado e reporta.

Gerenciamento de processos de longa duração:

"Inicie o servidor de desenvolvimento, aguarde até que esteja pronto e depois execute a verificação de saúde"

O Claude envia o comando de início, verifica a saída até que "ready" apareça e então executa o próximo comando.

Por que cmux-mcp?

Operação em segundo plano

O cmux-mcp usa a CLI nativa do cmux (cmux send, cmux read-screen, cmux send-key) que se comunica via socket Unix. Isso significa:

  • Funciona enquanto o cmux está em segundo plano
  • Sem roubo de foco da janela
  • Sem atrasos de ativação via AppleScript
  • Confiável mesmo durante a inicialização do aplicativo

CLI vs AppleScript

Este projeto foi bifurcado de ferrislucas/iterm-mcp e completamente reescrito. Veja o porquê:

AppleScript (iterm-mcp)cmux CLI (cmux-mcp)
FocoPode roubar foco, ativar o aplicativoSem mudança de foco, socket Unix
Leitura de bufferGhostty write_scrollback_file (somente debug)cmux read-screen (API de produção estável)
InicializaçãoFalha se o aplicativo não estiver totalmente inicializadoBaseado em socket, mais resiliente
DirecionamentoSempre "janela frontal"Flag --surface para direcionamento preciso de painéis
Suporte a teclasSomente códigos ASCIITeclas nomeadas: ctrl+c, escape, enter, setas
EstabilidadeFrágil a mudanças de estado do aplicativoDesacoplado via IPC por socket

Detecção inteligente de conclusão

O cmux-mcp não apenas espera cegamente após enviar um comando. Ele monitora a atividade da CPU do TTY para saber quando um comando realmente termina — mesmo para comandos que produzem saída ao longo do tempo. A partir da v1.3.1, o intervalo de polling foi reduzido de 350ms para 150ms e o limite de inatividade de 1000ms para 500ms, tornando o write_to_terminal aproximadamente 2x mais rápido.

Eficiente em tokens

Os agentes leem apenas as linhas de que precisam. Um npm test que produz 500 linhas de saída? O agente primeiro é informado "500 linhas foram geradas" e depois lê apenas as últimas 20 linhas para verificar erros. Sem desperdício de janela de contexto.

Lidando com Problemas Conhecidos do cmux

A arquitetura do cmux-mcp evita vários casos extremos conhecidos do cmux:

ProblemaProblemaComo o cmux-mcp lida
#152read-screen era somente debugUsa a CLI de produção agora estável
#2042ID de superfície inválido cai silenciosamente para o painel focadoA arquitetura suporta --surface para direcionamento explícito
#1715TabManager indisponível durante a inicialização quebra hooksA CLI baseada em socket evita problemas de temporização de inicialização
#2153send-key não suportava teclas de setaUsa a API upstream atualizada com suporte completo a teclas
#2210Alternância da barra lateral corrompe o prompt via SIGWINCHLê o buffer após atraso de estabilização para evitar saída corrompida

Arquitetura

MCP Client (Claude Code, Claude Desktop, etc.)
    |  stdio
cmux-mcp server
    |  child_process
cmux CLI (send / read-screen / send-key / ...)
    |  Unix socket
cmux.app (Ghostty-based terminal)
    |
macOS PTY

Módulos principais:

MóduloFunção
cmux-pathResolve o caminho do binário cmux: env CMUX_PATH > which cmux > caminhos padrão do macOS > fallback
CommandExecutorEnvia comandos via cmux send, aguarda a conclusão. Armazena em cache o caminho do TTY por 60s.
TtyOutputReaderLê o buffer do terminal via cmux read-screen
SendControlCharacterEnvia teclas de controle via cmux send-key
ProcessTrackerMonitora processos do TTY para detecção de conclusão

Desenvolvimento

npm run build          # Compile TypeScript
npm run watch          # Auto-rebuild on changes
npm test               # Run unit tests
npm run e2e            # Run E2E tests (requires running cmux)
npm run inspector      # Open MCP Inspector for interactive debugging

Segurança

  • Sem restrições de comando integradas. Os comandos são executados com as permissões do seu shell.
  • Monitore a atividade da IA e interrompa se necessário.
  • Comece com tarefas focadas até se familiarizar com o comportamento do modelo.

Créditos

Privacidade

O cmux-mcp não coleta nem transmite nenhum dado. Todo o processamento é local. Consulte PRIVACY.md para detalhes.

Licença

MIT