OpenWRT-MCP

Servidor MCP (Model Context Protocol) seguro para gerenciamento e diagnóstico de roteadores OpenWRT

Documentação

OpenWRT-MCP

CI Docker Python 3.14+ License: MIT

Servidor MCP (Model Context Protocol) somente leitura para gerenciamento e diagnóstico de roteadores OpenWRT. Permite que assistentes de IA (Claude Desktop, LibreChat, Cline) observem e analisem um roteador OpenWRT sem qualquer acesso de escrita.

Requisitos

  • Python 3.14+ (para uso local) ou Docker
  • Roteador OpenWRT com SSH habilitado (Dropbear ou OpenSSH)
  • Par de chaves SSH para autenticação

Início Rápido

1. Gerar Chave SSH

ssh-keygen -t ed25519 -f openwrt_id_ed25519 -C "openwrt-mcp"
ssh-copy-id -i openwrt_id_ed25519.pub root@192.168.0.1

2. Configurar

cp .env.example .env
# Edit .env with your OPENWRT_HOST and SSH key path

3. Executar com Docker

Opção A — com docker compose:

# After editing .env, for Docker add MCP_UNSAFE_PUBLIC_ACCESS_CONFIRMED=1 to .env
docker compose up -d

Opção B — com docker run simples:

docker run -d \
  --name openwrt-mcp \
  -p 9094:9094 \
  -p 9095:9095 \
  -p 9096:9096 \
  -e OPENWRT_HOST=192.168.0.1 \
  -e OPENWRT_SSH_KEY=/app/keys/openwrt_id_ed25519 \
  -e MCP_UNSAFE_PUBLIC_ACCESS_CONFIRMED=1 \
  -v $(pwd)/keys:/app/keys:ro \
  ghcr.io/paulomac1000/openwrt-mcp:latest

Construindo localmente:

git clone https://github.com/paulomac1000/openwrt-mcp.git
cd openwrt-mcp
docker build -t openwrt-mcp .
# Then run with the same docker run command above

4. Executar localmente (Python 3.14+)

pip install -e ".[dev]"
OPENWRT_HOST=192.168.0.1 OPENWRT_SSH_KEY=/path/to/key openwrt-mcp

Portas

PortaProtocoloFinalidadeEndpoint
9094HTTPVerificação de saúdeGET /health
9095SSETransporte MCP (SSE)/sse, /messages
9096HTTPAPI REST/api/*

Verificar

# Health check
curl http://localhost:9094/health

# List all MCP tools
curl http://localhost:9096/api/tools

# Call a tool
curl -X POST http://localhost:9096/api/tools/get_router_info \
  -H "Content-Type: application/json" \
  -d '{}'

# Get tool manifest
curl http://localhost:9096/api/tools/get_router_info/manifest

Ferramentas Disponíveis (24)

As ferramentas são categorizadas por nível de risco: ferramentas [READ] são seguras — elas consultam o roteador sem efeitos colaterais. Ferramentas [WRITE] podem modificar o estado do roteador e exigem ENABLE_WRITE_OPERATIONS=1 em .env. Ferramentas [DESTRUCTIVE] são irreversíveis (reinicialização) e exigem confirmação explícita.

CategoriaFerramentaRiscoDescrição
Conexãotest_router_connectionREADVerificar conectividade SSH
Sistemaget_router_infoREADInformações da placa, memória, tempo de atividade, versão
get_router_contextREADInstantâneo de contexto unificado (sistema, wifi, DHCP, saúde)
describe_router_capabilitiesREADIntrospecção do servidor — ferramentas, manifestos, coletores
Redeget_router_wifi_statusREADRádios WiFi, SSIDs, clientes conectados
get_router_dhcp_leasesREADConcessões DHCP ativas
diagnose_router_connectivityREADTestes de ping, DNS e gateway
ping_hostREADPing em um host específico
traceroute_hostREADTraceroute para um host
nslookup_hostREADConsulta DNS a partir do roteador
wifi_scanREADEscaneamento de redes WiFi vizinhas
Segurançaget_router_firewall_rulesREADRegras iptables / nftables / fw4
read_router_uci_configREADLer seções de configuração UCI
Diagnósticoget_router_logsREADLogs recentes do sistema
search_router_logsREADBusca filtrada em logs
Pacoteslist_router_packagesREADPacotes OPKG instalados
DHCPget_dhcp_static_leasesREADReservas DHCP estáticas
search_dhcp_logsREADBuscar eventos DHCP em logs
get_device_dhcp_detailsREADInformações completas do dispositivo (concessão, reserva, logs)
Escritauci_setWRITEDefinir um valor de configuração UCI
uci_commitWRITEConfirmar alterações UCI permanentemente
restart_interfaceWRITEReiniciar uma interface de rede
reload_networkWRITERecarregar serviços de rede
reboot_deviceDESTRUCTIVEReiniciar o roteador (irreversível)

Configuração

Toda a configuração é feita por variáveis de ambiente. Consulte .env.example para um modelo completo.

Obrigatório

VariávelDescriçãoExemplo
OPENWRT_HOSTEndereço IP do roteador192.168.0.1
OPENWRT_SSH_KEYCaminho para a chave privada SSH/app/keys/openwrt_id_ed25519

Opcional

VariávelPadrãoDescrição
OPENWRT_PORT22Porta SSH
OPENWRT_USERrootNome de usuário SSH
MCP_SSE_PORT9095Porta de transporte MCP SSE
REST_API_PORT9096Porta da API REST
HEALTH_PORT9094Porta de verificação de saúde
SSH_TIMEOUT30Tempo limite de conexão SSH (segundos)
MCP_UNSAFE_PUBLIC_ACCESS_CONFIRMED—Defina como 1 para encaminhamento de porta Docker
ENABLE_WRITE_OPERATIONSfalseDefina como 1 para habilitar ferramentas de escrita (uci_set, reboot e outras)
OPENWRT_PASSWORDNoneSenha SSH (não recomendado — use chaves SSH)
ENABLE_AUDIT_LOGGINGtrueRegistrar todos os comandos executados
AUDIT_LOG_FILE/app/log/openwrt_mcp.logCaminho do log de auditoria
LOG_LEVELINFONível de log
OPENWRT_KNOWN_HOSTS—Caminho para o arquivo known_hosts SSH para verificação da chave do host

Modelo de Segurança

  • Somente leitura por padrão — Todos os comandos SSH estão na lista de permissões; operações de escrita (uci set, ifdown, ubus reboot) exigem ENABLE_WRITE_OPERATIONS=1
  • Lista de permissões de comandos — Padrões explícitos somente leitura (ubus call, uci show, cat /proc/*, logread, ping e outros)
  • Lista de permissões de comandos de escrita — Caminho execute_write() separado para operações de escrita (ifdown, ifup, uci set/commit, /etc/init.d/network, ubus reboot)
  • Padrões bloqueados — rm, reboot, wget, curl, uci set (no caminho de leitura), metacaracteres de shell (;, |, &&, $ e outros)
  • Autenticação baseada em chave — Login por senha desencorajado
  • Verificação da chave do host SSH — Opcional via OPENWRT_KNOWN_HOSTS (defina o caminho do arquivo known_hosts)
  • Registro de auditoria — Todos os comandos são registrados com carimbos de data/hora para responsabilização
  • Vínculo localhost — Todas as portas vinculam a 127.0.0.1 por padrão; defina MCP_UNSAFE_PUBLIC_ACCESS_CONFIRMED=1 para Docker

Conformidade com Padrões

Este servidor segue dois padrões AI-First:

PadrãoDocumentoVersãoDescrição
AFDSdocs_standards.mdv1.0Estrutura de documentação, esquema frontmatter, linguagem controlada
MCP Coremcp-server-standards.mdv1.1.0Design de ferramentas, contratos de resposta, hierarquia de testes, segurança

Nível de conformidade: L3-ready (todas as regras L1-L3 atendidas; Matriz de Consistência de Risco aplicada por testes automatizados).

Testes

pip install -e ".[dev]"
pytest tests/unit/ tests/integration/ -q       # 268 tests (requires .env for integration)
pytest tests/unit/ --cov=openwrt_mcp -q         # 80%+ coverage
ruff check . && ruff format --check .           # lint
mypy src/openwrt_mcp/ --strict                  # type check
bandit -r src/openwrt_mcp/ -ll                  # security

Referência Rápida

MétricaValor
Python3.14+ (Docker: 3.14)
Ferramentas24 (19 READ + 4 WRITE + 1 DESTRUCTIVE)
Testes296 (215 unit + 53 integration + 10 smoke + 18 e2e)
Cobertura86%
Lint0 erros (ruff + mypy --strict + bandit)
Dockerghcr.io/paulomac1000/openwrt-mcp:latest
PadrõesAFDS v1.0 + MCP Core v1.1.0 — L2+
LicençaMIT

Licença

MIT