ansible-mcp-server
README.md
# Ansible NLP MCP
Servidor MCP local para permitir que o Codex interaja com este repositório Ansible por linguagem natural, usando ferramentas seguras em vez de expor um shell genérico.
## Ferramentas
- `health`: mostra raiz, timeout e se execução mutável está habilitada.
- `list_playbooks`: lista playbooks e workflows executáveis.
- `inspect_playbook`: resume plays, hosts, `vars_files`, tasks iniciais e variáveis obrigatórias comuns.
- `suggest_playbooks`: ranqueia playbooks a partir de um pedido em linguagem natural.
- `inventory_graph`: executa `ansible-inventory --graph`.
- `inventory_summary`: resume grupos e hosts do inventário.
- `syntax_check`: executa `ansible-playbook --syntax-check`.
- `check_playbook`: executa `ansible-playbook --check`.
- `run_playbook`: executa playbook real, bloqueado por padrão.
- `ping_hosts`: executa `ansible -m ping` ou `ansible.windows.win_ping`.
- `list_logs` e `tail_log`: consulta logs dentro de `logs/`.
## Instalação
```bash
cd /root/ansible
python3 -m venv .venv-mcp
. .venv-mcp/bin/activate
pip install -r ansible_mcp/requirements.txt
```
## Teste local
```bash
cd /root/ansible
. .venv-mcp/bin/activate
python -m ansible_mcp.server
```
Esse comando inicia um servidor MCP por stdio e fica aguardando um cliente MCP.
## Configuração no Codex
Exemplo para `.codex/config.toml` no projeto, ou para `~/.codex/config.toml` se quiser habilitar globalmente:
```toml
[mcp_servers.ansible]
command = "/root/ansible/.venv-mcp/bin/python"
args = ["/root/ansible/ansible_mcp/server.py"]
cwd = "/root/ansible"
enabled = true
startup_timeout_sec = 10
tool_timeout_sec = 900
env = { ANSIBLE_MCP_ROOT = "/root/ansible", ANSIBLE_MCP_ALLOW_RUN = "0" }
```
Com `ANSIBLE_MCP_ALLOW_RUN = "0"`, o MCP permite inspeção, inventário, ping, syntax-check e check-mode, mas bloqueia execução real de playbooks.
Para permitir execução mutável:
```toml
[mcp_servers.ansible]
command = "/root/ansible/.venv-mcp/bin/python"
args = ["/root/ansible/ansible_mcp/server.py"]
cwd = "/root/ansible"
enabled = true
startup_timeout_sec = 10
tool_timeout_sec = 900
env = { ANSIBLE_MCP_ROOT = "/root/ansible", ANSIBLE_MCP_ALLOW_RUN = "1" }
```
Mesmo habilitado, `run_playbook` ainda exige `confirm = "RUN"` na chamada da ferramenta.
## Exemplos de intenção NLP
- "Qual playbook eu uso para atualizar Windows do wuday1?"
- "Faça syntax-check do playbook de Windows Update com `day=wuday1`."
- "Rode em check mode a atualização Linux só no grupo rocky."
- "Mostre os últimos logs do Citrix Day."
- "Liste os grupos de inventário e quantos hosts existem em cada um."
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues