os-control-mcp
os-control-mcp
MCP local para sessões persistentes de terminal. O processo mantém Bash, CMD, PowerShell, pwsh ou WSL ativos e separa envio de entrada da leitura incremental da saída.
Também possui objetivos persistentes: o agente pode criar um objetivo com critérios de aceitação, executar várias etapas, verificar evidências e continuar até concluir, falhar, ficar bloqueado ou atingir os limites definidos.
O dispatcher atende chamadas MCP concorrentes. Assim, vários chats podem ler,
acompanhar e operar sessões no mesmo processo sem que uma leitura longa de
saída bloqueie as outras. Sessões e objetivos aceitam client_id opcional para
separar o contexto de cada chat; sem esse campo, o servidor mantém o comportamento
compatível e lista o estado compartilhado.
Atenção: este servidor controla processos com as permissões do usuário que o executa. Use-o localmente, não rode como administrador/root por padrão e nunca exponha o processo diretamente à internet.
Transporte
O servidor usa MCP JSONL por stdio. Não abre uma porta de rede por padrão.
As respostas JSON-RPC podem chegar fora da ordem quando há chamadas
simultâneas; clientes devem correlacioná-las pelo campo id.
Shells
bash,sh,zshem sistemas POSIX;cmd,powershellepwshno Windows;wsl-bashno Windows, usando a distribuição definida emOS_CONTROL_WSL_DISTROoukali-linuxpor padrão.
Fluxo interativo
os_create_sessioncria uma sessão persistente.os_send_inputescreve imediatamente no PTY/ConPTY.os_read_outputusasince_seqesince_offsetpara buscar apenas saída nova, inclusive quando a resposta precisa ser paginada.os_session_statusacompanha PID, shell, diretório e encerramento.
Para separar recursos por chat, envie o mesmo client_id em os_create_session
e nas chamadas seguintes (os_read_output, os_send_input, os_goal_*, etc.).
Também é possível fornecer esse identificador em _meta.os_control_client_id
no request MCP; nesse caso ele é aplicado automaticamente às ferramentas.
Fora de um objetivo autonomous, comandos potencialmente destrutivos exigem
confirmação explícita. Em um objetivo autônomo, a autorização é contínua dentro
dos limites de passos e tempo definidos pelo objetivo. O servidor é destinado a
uso local e deve continuar protegido por autenticação e escopo quando for
colocado atrás de um túnel remoto.
Diagnóstico e controle do sistema
Além das sessões persistentes, o MCP oferece:
os_system_info para plataforma, versão, diretório, shells disponíveis e limite de sessões;
os_process_list para listar processos sem argumentos de linha de comando, reduzindo o risco de vazar segredos;
os_process_signal para interromper ou encerrar um processo com confirmação explícita.
As ferramentas MCP agora declaram readOnlyHint, destructiveHint, idempotentHint e openWorldHint, permitindo que clientes como ChatGPT/Codex exibam melhor o risco de cada ação. O servidor limita a 32 sessões simultâneas e 64 KiB por envio de entrada.
Objetivos autônomos
Fluxo recomendado:
os_create_sessioncria o terminal persistente.os_goal_startrecebe o objetivo, critérios esession_id.os_send_inputusa ogoal_idpara executar sem confirmação repetitiva.os_read_outputlê a saída incremental.os_goal_updateregistra ação, resultado, evidência e próxima etapa.O agente repete até comprovar todos os critérios.
Saída grande
O terminal mantém um buffer interno amplo. os_read_output pode retornar até
1 MB por chamada; quando ainda houver dados, a resposta informa has_more e
retorna next_seq/next_offset. A próxima leitura deve reutilizar esses dois
cursores para continuar sem perder o meio da saída.
{
"since_seq": 8591,
"since_offset": 0,
"wait_ms": 1000,
"max_bytes": 150000
}O servidor não inventa a próxima ação nem chama o modelo sozinho; ele mantém o estado e os limites do objetivo. O cliente/agente deve continuar fazendo as chamadas até o estado terminal.
Instalação
git clone https://github.com/Willian-2-0-0-1/os-control-mcp.git
cd os-control-mcp
python -m pip install -r requirements.txtNo Windows, pywinpty habilita ConPTY para CMD e PowerShell. No Kali/Linux,
o backend usa o PTY nativo. O arquivo .mcp.json pode ser usado por clientes
MCP que aceitem servidores locais por stdio.
Plugin para GPT/Codex
O repositório contém o manifesto .codex-plugin/plugin.json e o servidor MCP.
Isso permite distribuir o pacote para clientes compatíveis com plugins MCP.
Para usar no ChatGPT com um servidor local, cada usuário deve executar sua própria instância e configurar uma conexão privada. Um repositório GitHub, por si só, não dá ao ChatGPT acesso ao computador do usuário.