OPNsense MCP Server

Servidor MCP seguro para gerenciar firewalls OPNsense - 62 ferramentas para firewall, DNS, DHCP, VPN, HAProxy e auditoria de segurança com modo somente leitura padrão e proteção automática de reversão.

Documentação

Servidor MCP OPNsense

Um servidor Model Context Protocol (MCP) seguro para gerenciar firewalls OPNsense por meio de assistentes de IA como Claude Code, Cursor e outras ferramentas compatíveis com MCP.

81 ferramentas em 10 domínios: sistema, firewall, rede, DNS, DHCP, VPN, HAProxy, serviços, diagnósticos e segurança.

Requisitos

  • Python 3.11+
  • OPNsense 24.7 ou mais recente — o servidor MCP depende dos endpoints de API baseados em MVC introduzidos no OPNsense 24.7. Versões mais antigas usam uma estrutura de API diferente que não é compatível. O servidor detecta automaticamente a versão do OPNsense na primeira conexão e seleciona a nomenclatura correta de endpoint (camelCase para versões anteriores à 25.7, snake_case para 25.7+). OPNsense 26.x é totalmente suportado, incluindo seu formato alterado de resposta de status de firmware.

Modelo de Segurança

Este servidor MCP foi projetado com a segurança como preocupação principal:

  • Somente leitura por padrão — operações de escrita exigem aceitação explícita via OPNSENSE_ALLOW_WRITES=true
  • Savepoint/rollback (somente OPNsense < 26.7) — onde o OPNsense ainda oferece a API de savepoint, as modificações no firewall usam sua reversão automática integrada de 60 segundos; as alterações devem ser explicitamente confirmadas ou serão revertidas automaticamente. O OPNsense 26.7 removeu essa API upstream — o servidor detecta o endpoint ausente em tempo de execução e aplica as alterações no firewall imediatamente, sem reversão automática
  • Lista de bloqueio de endpoints — endpoints perigosos (halt, reboot, poweroff, firmware update/upgrade) são bloqueados permanentemente no nível do cliente de API e nunca podem ser chamados
  • Somente API — sem acesso SSH, sem execução de comandos, sem manipulação direta de arquivos de configuração
  • Transporte local — somente STDIO, sem endpoints HTTP/SSE expostos à rede
  • Sem exposição de credenciais — chaves de API nunca são incluídas na saída das ferramentas, logs ou mensagens de erro
  • Validação de entrada — parâmetros de hostname são validados contra injeção de metacaracteres de shell
  • Remoção de dados sensíveis — o backup de configuração remove senhas e chaves por padrão

Início Rápido

1. Criar uma Chave de API OPNsense

  1. Faça login na interface web do seu OPNsense
  2. Vá para System > Access > Users
  3. Edite um usuário existente ou crie um usuário de API dedicado:
    • Para uso em produção, crie um usuário dedicado (ex.: mcp-api) com apenas os privilégios necessários
    • Para acesso somente leitura, atribua o usuário a um grupo com acesso de API somente leitura
  4. Role até a seção API keys e clique no botão +
  5. Um par chave/segredo será gerado e um arquivo (apikey.txt) será baixado
  6. O arquivo contém duas linhas — key=your-api-key-here e secret=your-api-secret-here
  7. Armazene essas credenciais com segurança — o segredo não pode ser recuperado novamente do OPNsense

Dica: Para uma configuração somente leitura (recomendada para começar), você não precisa alterar nenhuma permissão — o acesso padrão da API é suficiente para todas as ferramentas somente leitura.

2. Instalar

# Using pip
pip install opnsense-mcp-server

# Using uv (recommended for isolated environments)
uv pip install opnsense-mcp-server

# Using Docker
docker pull uhlenheide/opnsense-mcp-server

# From source
git clone https://github.com/lucamarien/opnsense-mcp-server
cd opnsense-mcp-server
pip install -e .

Imagem Docker: a imagem oficial é uhlenheide/opnsense-mcp-server, publicada a partir deste repositório por .github/workflows/publish-docker.yml em cada tag v*. Não existe imagem lucamarien/opnsense-mcp-server — versões anteriores do README a nomearam por engano.

3. Configurar Seu Assistente de IA

Claude Code

Adicione ao .mcp.json do seu projeto:

{
  "mcpServers": {
    "opnsense": {
      "command": "opnsense-mcp",
      "env": {
        "OPNSENSE_URL": "https://192.168.1.1/api",
        "OPNSENSE_API_KEY": "your-api-key-here",
        "OPNSENSE_API_SECRET": "your-api-secret-here",
        "OPNSENSE_VERIFY_SSL": "false",
        "OPNSENSE_ALLOW_WRITES": "false"
      }
    }
  }
}

Alternativa: Use "command": "python", "args": ["-m", "opnsense_mcp"] se o CLI opnsense-mcp não estiver no seu PATH.

Ou adicione globalmente ao ~/.claude/claude_code_config.json.

Claude Code (Docker)

{
  "mcpServers": {
    "opnsense": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "OPNSENSE_URL=https://192.168.1.1/api",
        "-e", "OPNSENSE_API_KEY=your-api-key-here",
        "-e", "OPNSENSE_API_SECRET=your-api-secret-here",
        "-e", "OPNSENSE_VERIFY_SSL=false",
        "-e", "OPNSENSE_ALLOW_WRITES=false",
        "uhlenheide/opnsense-mcp-server"
      ]
    }
  }
}

Cursor

Adicione às configurações de MCP do seu Cursor (Settings > MCP):

{
  "mcpServers": {
    "opnsense": {
      "command": "opnsense-mcp",
      "env": {
        "OPNSENSE_URL": "https://192.168.1.1/api",
        "OPNSENSE_API_KEY": "your-api-key-here",
        "OPNSENSE_API_SECRET": "your-api-secret-here",
        "OPNSENSE_VERIFY_SSL": "false"
      }
    }
  }
}

Configuração

Variável de AmbientePadrãoDescrição
OPNSENSE_URL(obrigatório)URL base da API OPNsense (deve terminar com /api)
OPNSENSE_API_KEY(obrigatório)Chave de API das configurações do usuário OPNsense
OPNSENSE_API_SECRET(obrigatório)Segredo de API das configurações do usuário OPNsense
OPNSENSE_VERIFY_SSLtrueVerificar certificado SSL (false para certificados autoassinados)
OPNSENSE_ALLOW_WRITESfalseHabilitar operações de escrita (regras de firewall, controle de serviços)

Portas personalizadas: Se a interface web do seu OPNsense estiver em uma porta não padrão (ex.: 10443), inclua-a na URL: https://192.168.1.1:10443/api

Ferramentas Disponíveis (81)

Sistema (7 ferramentas)

FerramentaDescrição
opn_system_statusInformações do sistema, incluindo versão do firmware, nome do produto e arquitetura
opn_list_servicesListar todos os serviços e seu status de execução. Parâmetros: search, limit
opn_gateway_statusDisponibilidade de gateway, latência e verificações de saúde dpinger
opn_download_configBaixar backup config.xml com remoção opcional de dados sensíveis. Parâmetros: include_sensitive (padrão: false — senhas e chaves são ocultadas)
opn_scan_configEscanear a configuração completa, analisá-la em seções e coletar inventário em tempo de execução (firmware, plugins, DHCP, DNS, interfaces, serviços). Os resultados são armazenados em cache por sessão. Parâmetros: force
opn_get_config_sectionObter uma seção específica da configuração como JSON estruturado. Parâmetros: section, include_sensitive
opn_mcp_infoVersão do servidor MCP, status do modo de escrita, versão detectada do OPNsense, estilo da API e se as escritas no firewall ainda têm proteção de savepoint/rollback

Rede (5 ferramentas)

FerramentaDescrição
opn_interface_statsEstatísticas de tráfego por interface (bytes de entrada/saída, pacotes, erros)
opn_arp_tableTabela ARP mostrando mapeamentos de IP para endereço MAC
opn_ndp_tableTabela NDP (Neighbor Discovery Protocol) mostrando mapeamentos de IPv6 para endereço MAC
opn_ipv6_statusConfiguração IPv6 e status de endereço para todas as interfaces (método, endereços ativos, resumo)
opn_list_static_routesRotas estáticas configuradas. Parâmetros: search, limit

Firewall (21 ferramentas)

FerramentaDescriçãoEscritas
opn_list_firewall_rulesListar regras de filtro de firewall MVC. Parâmetros: search, limitNão
opn_list_firewall_aliasesListar definições de alias (listas de IP, grupos de portas, GeoIP, URLs). Parâmetros: search, limitNão
opn_list_nat_rulesListar regras de encaminhamento de porta NAT (DNAT). Parâmetros: search, limitNão
opn_list_firewall_categoriesListar categorias de regras de firewall e seus UUIDs. Parâmetros: search, limitNão
opn_firewall_logEntradas recentes do log do firewall com filtragem no lado do cliente. Parâmetros: source_ip, destination_ip, action, interface, limitNão
opn_confirm_changesConfirmar alterações pendentes, cancelando a reversão automática de 60 segundos (OPNsense < 26.7; uma operação sem efeito retornando not_applicable em 26.7+). Parâmetros: revisionSim
opn_toggle_firewall_ruleAlternar o estado habilitado/desabilitado de uma regra com savepoint (OPNsense < 26.7). Parâmetros: uuidSim
opn_add_firewall_ruleCriar uma nova regra de filtro com savepoint (OPNsense < 26.7). Parâmetros: action, direction, interface, ip_protocol, protocol, source_net, destination_net, destination_port, descriptionSim
opn_delete_firewall_ruleExcluir uma regra de filtro por UUID com savepoint (OPNsense < 26.7). Parâmetros: uuidSim
opn_add_aliasCriar um novo alias. Parâmetros: name, alias_type, content, descriptionSim
opn_add_nat_ruleCriar uma regra de encaminhamento de porta NAT com savepoint (OPNsense < 26.7). Parâmetros: destination_port, target_ip, interface, protocol, target_port, descriptionSim
opn_add_firewall_categoryCriar uma nova categoria de regra de firewall. Parâmetros: name, colorSim
opn_delete_firewall_categoryExcluir uma categoria de regra de firewall por UUID com savepoint (OPNsense < 26.7). Parâmetros: uuidSim
opn_set_rule_categoriesAtribuir categorias a uma regra de firewall com savepoint (OPNsense < 26.7). Parâmetros: uuid, categoriesSim
opn_add_icmpv6_rulesCriar regras ICMPv6 essenciais necessárias para a operação IPv6 (NDP, RA, ping6) conforme RFC 4890. Parâmetros: interfaceSim
opn_update_aliasAtualizar um alias existente (nome, conteúdo, tipo, descrição). Leitura-modificação-escrita. Parâmetros: uuid, name, content, description, alias_type, enabledSim
opn_delete_aliasExcluir um alias por UUID. Verificar referências de regras primeiro. Parâmetros: uuidSim
opn_toggle_aliasAlternar o estado habilitado/desabilitado do alias. Parâmetros: uuidSim
opn_update_firewall_ruleAtualizar campos de regra de filtro com savepoint (OPNsense < 26.7). Parâmetros: uuid, action, direction, interface, ip_protocol, protocol, source_net, source_not, source_port, destination_net, destination_not, destination_port, gateway, log, quick, sequence, categories, description, enabledSim
opn_update_nat_ruleAtualizar regra de encaminhamento de porta NAT com savepoint (OPNsense < 26.7). Parâmetros: uuid, interface, protocol, destination_port, target_ip, target_port, description, enabledSim
opn_delete_nat_ruleExcluir uma regra de encaminhamento de porta NAT por UUID com savepoint (OPNsense < 26.7). Parâmetros: uuidSim

Nota: A proteção de savepoint só existe no OPNsense < 26.7. Em 26.7+, essas ferramentas aplicam alterações imediatamente e permanentemente — consulte Operações de Escrita e Savepoints.

DNS (13 ferramentas)

FerramentaDescriçãoEscritas
opn_list_dns_overridesOverrides de host Unbound (registros DNS locais). Parâmetros: search, limitNão
opn_list_dns_forwardsZonas de encaminhamento DNS (servidores específicos de domínio). Parâmetros: search, limitNão
opn_dns_statsEstatísticas do resolvedor Unbound (consultas, acertos de cache, tempo de atividade)Não
opn_reconfigure_unboundAplicar alterações pendentes na configuração do resolvedor DNSSim
opn_add_dns_overrideAdicionar um override de host DNS Unbound (registro A/AAAA) e aplicar imediatamente. Parâmetros: hostname, domain, server, descriptionSim
opn_list_dnsblListar configurações de listas de bloqueio DNSBL com provedores e status. Parâmetros: search, limitNão
opn_get_dnsblObter configuração completa de DNSBL por UUID (provedores, listas de permissão, configurações). Parâmetros: uuidNão
opn_set_dnsblAtualizar configurações de DNSBL (leitura-modificação-escrita). Parâmetros: uuid, enabled, providers, allowlists, blocklists, wildcards, etc.Sim
opn_add_dnsbl_allowlistAdicionar domínios à lista de permissão DNSBL sem sobrescrever. Parâmetros: uuid, domainsSim
opn_remove_dnsbl_allowlistRemover domínios da lista de permissão DNSBL. Parâmetros: uuid, domainsSim
opn_update_dnsblRecarregar arquivos de lista de bloqueio DNSBL e reiniciar o Unbound (sem alteração de configuração, ferramenta de recuperação)Sim
opn_update_dns_overrideAtualizar um override de host DNS Unbound e aplicar imediatamente. Parâmetros: uuid, hostname, domain, server, description, enabledSim
opn_delete_dns_overrideExcluir um override de host DNS Unbound e aplicar imediatamente. Parâmetros: uuidSim

DHCP (8 ferramentas)

FerramentaDescriçãoGrava
opn_list_dhcp_leasesConcessões DHCPv4 ativas do servidor ISC DHCPNão
opn_list_kea_leasesConcessões DHCPv4 do servidor Kea DHCP. Parâmetros: search, limitNão
opn_list_dnsmasq_leasesConcessões DHCPv4 e DHCPv6 do servidor DNS/DHCP dnsmasq. Parâmetros: search, limitNão
opn_list_dnsmasq_rangesFaixas de endereços DHCP configuradas (tanto DHCPv4 quanto DHCPv6 com configuração RA). Parâmetros: search, limitNão
opn_add_dnsmasq_rangeCriar uma nova faixa DHCP (IPv4 ou IPv6 com configuração de Router Advertisement). Parâmetros: interface, start_addr, end_addr, prefix_len, ra_mode, lease_time, descriptionSim
opn_reconfigure_dnsmasqAplicar alterações pendentes de configuração DNS/DHCP do dnsmasqSim
opn_update_dnsmasq_rangeAtualizar uma faixa DHCP (endereços, tempo de concessão, configuração RA) e aplicar. Parâmetros: uuid, interface, start_addr, end_addr, prefix_len, ra_mode, lease_time, description, enabledSim
opn_delete_dnsmasq_rangeExcluir uma faixa DHCP por UUID e aplicar. Parâmetros: uuidSim

VPN (3 ferramentas)

FerramentaDescrição
opn_wireguard_statusStatus do túnel WireGuard e pares (requer plugin os-wireguard)
opn_ipsec_statusStatus do túnel VPN IPsec — sessões IKE (Fase 1) e ESP/AH (Fase 2)
opn_openvpn_statusStatus da conexão OpenVPN — instâncias, sessões e rotas

HAProxy (8 ferramentas)

Gerenciamento completo de configuração para o balanceador de carga HAProxy (requer plugin os-haproxy).

FerramentaDescriçãoGrava
opn_haproxy_statusStatus do serviço HAProxy e saúde dos backendsNão
opn_haproxy_searchPesquisar recursos HAProxy por tipo. Parâmetros: resource_type (frontends/backends/servers/actions/acls/healthchecks/errorfiles/resolvers/mailers), search, limitNão
opn_haproxy_getObter configuração detalhada de um recurso específico. Parâmetros: resource_type, uuidNão
opn_haproxy_configtestValidar a sintaxe da configuração do HAProxy antes de aplicarNão
opn_haproxy_addCriar um novo recurso HAProxy. Parâmetros: resource_type, config (dicionário de valores de campo)Sim
opn_haproxy_updateAtualizar um recurso HAProxy existente (atualizações parciais). Parâmetros: resource_type, uuid, configSim
opn_haproxy_deleteExcluir um recurso HAProxy por UUID. Parâmetros: resource_type, uuidSim
opn_reconfigure_haproxyAplicar alterações pendentes de configuração do HAProxySim

Nota: Alterações no HAProxy NÃO usam proteção de savepoint — elas são aplicadas imediatamente na reconfiguração. Sempre chame opn_haproxy_configtest antes de opn_reconfigure_haproxy.

Serviços (11 ferramentas)

FerramentaDescriçãoGrava
opn_list_acme_certsCertificados ACME/Let's Encrypt e seu status. Parâmetros: search, limitNão
opn_list_cron_jobsTrabalhos cron agendados. Parâmetros: search, limitNão
opn_crowdsec_statusStatus do mecanismo de segurança CrowdSec e decisões ativasNão
opn_crowdsec_alertsAlertas de segurança CrowdSec (ameaças detectadas). Parâmetros: search, limitNão
opn_list_ddns_accountsContas Dynamic DNS e seu status de atualização. Parâmetros: search, limitNão
opn_add_ddns_accountCriar uma nova conta Dynamic DNS. Parâmetros: service, hostname, username, password, checkip, interface, descriptionSim
opn_reconfigure_ddclientAplicar alterações pendentes de configuração do Dynamic DNSSim
opn_update_ddns_accountAtualizar uma conta Dynamic DNS (senha é somente gravação). Parâmetros: uuid, service, hostname, username, password, checkip, interface, description, enabledSim
opn_delete_ddns_accountExcluir uma conta Dynamic DNS por UUID. Parâmetros: uuidSim
opn_mdns_repeater_statusStatus e configuração do mDNS Repeater (habilitado, interfaces, lista de bloqueio). Requer plugin os-mdns-repeaterNão
opn_configure_mdns_repeaterConfigurar mDNS Repeater para descoberta de dispositivos entre VLANs (HomeKit, Chromecast, AirPlay). Parâmetros: enabled, interfacesSim

Diagnóstico (4 ferramentas)

FerramentaDescrição
opn_pingEnviar ping a um host a partir do firewall para testar conectividade. Parâmetros: host, count (1-10, padrão 3)
opn_tracerouteTraçar caminho de rede até um destino. Parâmetros: host, protocol (ICMP/UDP/TCP), ip_version (4/6)
opn_dns_lookupConsulta DNS a partir do firewall. Parâmetros: hostname, server (servidor DNS personalizado opcional)
opn_pf_statesConsultar tabela de estados PF ativa. Parâmetros: search, limit (máx. 1000)

Segurança (1 ferramenta)

FerramentaDescrição
opn_security_auditAuditoria de segurança abrangente em 11 áreas: firmware, regras de firewall (MVC + legado, agrupamento de portas, protocolos inseguros), encaminhamento NAT, segurança DNS (DNSSEC, DoT), endurecimento do sistema (SSH, HTTPS, syslog), serviços, certificados (ACME + sistema + CAs), VPN (configuração WireGuard, IPsec, OpenVPN), HAProxy (cabeçalhos, health checks), gateways. Descobertas marcadas com referências de conformidade PCI DSS v4.0, BSI IT-Grundschutz, NIST 800-41, CIS.

Operações de Gravação e Savepoints

Operações de gravação exigem OPNSENSE_ALLOW_WRITES=true. Em OPNsense < 26.7, alterações no firewall adicionalmente passam pelo mecanismo de savepoint do OPNsense:

  1. Antes de qualquer alteração no firewall, um savepoint é criado automaticamente
  2. A alteração é aplicada (alternar regra, adicionar ou excluir)
  3. Uma contagem regressiva de 60 segundos começa — se não for confirmada, o OPNsense reverte automaticamente a alteração
  4. Use opn_confirm_changes com o revision retornado para tornar as alterações permanentes

Nessas versões, se um assistente de IA fizer uma alteração ruim no firewall que o bloqueie, a alteração será revertida automaticamente em 60 segundos.

OPNsense 26.7 removeu a API de savepoint/rollback upstream, portanto não há reversão automática em 26.7+. O servidor não define um corte de versão fixo: ele testa o endpoint de savepoint na primeira gravação no firewall e, se o OPNsense responder que o endpoint não existe, degrada para aplicação direta pelo restante da sessão. Verifique opn_mcp_info — seu campo savepoint_support relata true, false ou null se nenhuma gravação foi testada ainda. As ferramentas de gravação então retornam um revision vazio, opn_confirm_changes responde com status: "not_applicable", e cada alteração no firewall é imediata e permanente.

Aviso: Em OPNsense 26.7+, faça um backup da configuração (opn_download_config, ou System > Configuration > Backups) antes de habilitar gravações, e mantenha acesso fora de banda à máquina — uma regra que o bloqueie não será revertida sozinha.

Nota: opn_reconfigure_unbound, opn_reconfigure_haproxy, opn_reconfigure_ddclient, opn_reconfigure_dnsmasq e opn_configure_mdns_repeater exigem gravações, mas não usam savepoints — elas aplicam alterações de configuração de serviço e não são revertíveis automaticamente.

Suporte a IPv6

Totalmente Automatizado via MCP

  • Regras de Firewall IPv6 — Criar regras com ip_protocol="inet6" (protegido por savepoint em OPNsense < 26.7)
  • Bindings IPv6 no HAProxy — Frontends com endereços de bind [::]:443 ou [2001:db8::1]:443
  • Backends IPv6 no HAProxy — Servidores com endereços IPv6, resolvePrefer: ipv6 em backends
  • Dynamic DNS com IPv6 — Contas DDNS com métodos checkip compatíveis com IPv6
  • Faixas DHCPv6 (dnsmasq) — Faixas DHCP IPv6 com configuração de Router Advertisement
  • Registros DNS AAAA — Overrides de host no Unbound com endereços IPv6
  • Diagnóstico IPv6 — Traceroute com ip_version="6", ping via hostname

Requer Configuração Manual na GUI

Essas configurações não têm suporte à API MVC no OPNsense e devem ser configuradas via GUI web:

  • Configuração IPv6 na WAN — PPPoE com delegação de prefixo DHCPv6, IPv6 estático, SLAAC
  • Endereçamento IPv6 na LAN — Modo Track Interface, atribuição estática /64, ID de prefixo
  • Atribuição de interfaces — Atribuir portas físicas aos papéis WAN/LAN/OPT
  • Túneis 6to4/6rd — Mecanismos de túnel de transição

Limitações Conhecidas

  • ISC DHCP / Kea DHCPv6: Não implementado. Apenas dnsmasq (o padrão moderno) é suportado para faixas DHCPv6 e Router Advertisements. ISC DHCP está obsoleto; a visibilidade de concessões DHCPv6 do Kea é limitada na API.
  • radvd: Não implementado como um conjunto de ferramentas separado. O Dnsmasq lida com Router Advertisements nativamente via configuração de faixa. Apenas um daemon RA deve ser executado por interface.
  • Regras de firewall dual-stack: inet46 (dual-stack) funciona corretamente em regras da API MVC (opn_add_firewall_rule). No entanto, inet46 em regras de filtro XML legadas (GUI) silenciosamente não produz saída PF — este é um bug conhecido do OPNsense que afeta apenas regras legadas.
  • Regras legadas da GUI: Regras de firewall criadas via GUI tradicional do OPNsense não são acessíveis através da API MVC. Use opn_get_config_section("filter") para acesso somente leitura.

Fluxo de Trabalho Recomendado para Migração IPv6

  1. Manual (GUI): Configurar IPv6 na WAN (DHCPv6-PD do ISP ou estático)
  2. Manual (GUI): Configurar interfaces LAN (modo Track Interface para delegação de prefixo)
  3. MCP: Configurar Router Advertisements via opn_add_dnsmasq_range com flags RA
  4. MCP: Criar regras de firewall IPv6 (ICMPv6 deve ser permitido para NDP/RA/PMTUD)
  5. MCP: Adicionar registros DNS IPv6 via opn_add_dns_override
  6. MCP: Configurar Dynamic DNS com método checkip IPv6
  7. MCP: Adicionar endereços de bind IPv6 aos frontends do HAProxy
  8. MCP: Verificar com opn_ping, opn_traceroute (ip_version="6"), opn_gateway_status

Compatibilidade de Versões

Versão do OPNsenseStatus
24.7 (Thriving Tiger)Suportada
25.1 (Ultimate Unicorn)Suportada
25.7 (Visionary Viper)Suportada (detecta automaticamente API snake_case)
26.1+Suportada

O servidor detecta automaticamente a versão do OPNsense na primeira conexão e seleciona a convenção de nomenclatura correta do endpoint da API (camelCase para pré-25.7, snake_case para 25.7+).

Nota sobre regras de firewall: opn_list_firewall_rules mostra regras gerenciadas via API MVC/automação. Regras configuradas através da GUI do OPNsense usam um formato legado não acessível via esta API. Esta é uma limitação conhecida do OPNsense.

Solução de Problemas

Problemas de Conexão

Erros de "Connection refused" ou timeout

  • Verifique se OPNSENSE_URL termina com /api (ex.: https://192.168.1.1/api)
  • Se estiver usando uma porta não padrão, inclua-a: https://192.168.1.1:10443/api
  • Garanta que a GUI web do OPNsense esteja acessível a partir da máquina que executa o servidor MCP

Erros de certificado SSL

  • Para certificados autoassinados (configuração padrão do OPNsense), defina OPNSENSE_VERIFY_SSL=false
  • Para produção, instale um certificado adequado no OPNsense e mantenha OPNSENSE_VERIFY_SSL=true

Problemas de Autenticação

401 Não Autorizado

  • Verifique se OPNSENSE_API_KEY e OPNSENSE_API_SECRET estão corretos
  • Chaves de API diferenciam maiúsculas de minúsculas — copie-as exatamente do apikey.txt baixado
  • Verifique se o usuário da API não está desabilitado no OPNsense
  • Verifique se o usuário da API tem privilégios suficientes para as operações que você está tentando

403 Proibido

  • O usuário da API pode não ter permissões para o endpoint solicitado
  • Para operações de gravação, garanta que OPNSENSE_ALLOW_WRITES=true esteja definido

Problemas Específicos de Ferramentas

opn_list_firewall_rules retorna resultados vazios

  • Esta ferramenta mostra apenas regras MVC/automação, não regras legadas da GUI
  • Crie regras via API de automação ou opn_add_firewall_rule para vê-las

opn_ping expira

  • O firewall pode não ter rota para o host de destino
  • Verifique o status do gateway com opn_gateway_status
  • O timeout padrão é de 30 segundos (30 ciclos de polling)

opn_download_config mostra valores [REDACTED]

  • Este é o comportamento padrão para segurança. Passe include_sensitive=true para incluir senhas e chaves (use com cautela em conversas de IA)

Operações de escrita falham com "writes not enabled"

  • Defina OPNSENSE_ALLOW_WRITES=true na configuração do seu servidor MCP
  • Isso está intencionalmente desabilitado por padrão por segurança

A confirmação de savepoint falha

  • O parâmetro revision deve corresponder exatamente ao que foi retornado pela operação de escrita
  • As confirmações devem ocorrer dentro de 60 segundos ou a alteração é revertida automaticamente
  • No OPNsense 26.7+ não há API de savepoint: as ferramentas de escrita retornam um revision vazio e opn_confirm_changes retorna status: "not_applicable". Isso é esperado, não uma falha — a alteração já foi aplicada permanentemente

Comandos de Diagnóstico

Se você precisar depurar o servidor MCP:

# Test API connectivity directly
curl -k -u "your-key:your-secret" https://your-opnsense-ip/api/core/firmware/status

# Run the server directly
python -m opnsense_mcp

# Run tests to verify installation
pytest -v

Desenvolvimento

# Clone and install dev dependencies
git clone https://github.com/lucamarien/opnsense-mcp-server
cd opnsense-mcp-server
pip install -e ".[dev]"

# Run all tests (no real OPNsense needed — all tests use mocked API)
pytest -v

# Full CI pipeline (lint, format, type check, security scan, tests)
make validate

# Individual checks
ruff check src/ tests/          # Lint (includes bandit security checks)
ruff format src/ tests/          # Format
mypy src/ --strict               # Type checking

Melhores Práticas

Guias específicos de domínio para tarefas comuns de configuração de firewall:

Esses guias mostram padrões reais de uso das ferramentas MCP e explicam as considerações de segurança por trás de cada abordagem.

Contribuindo

Consulte CONTRIBUTING.md para diretrizes detalhadas. Pontos-chave:

  1. Todos os testes devem usar respostas de API simuladas — nunca conecte a um OPNsense real
  2. Sem ferramentas sobrepostas — cada ferramenta deve ter um propósito distinto
  3. Escreva docstrings claras — elas são o único guia da IA para seleção de ferramentas
  4. Retorne dados estruturados (dicionários), não strings formatadas
  5. Execute make validate antes de enviar

Licença

MIT