OPNsense MCP Server

Servidor MCP seguro para gestionar firewalls OPNsense: 62 herramientas en firewall, DNS, DHCP, VPN, HAProxy y auditoría de seguridad con modo solo lectura por defecto y protección de reversión automática.

Documentación

Servidor MCP de OPNsense

Un servidor Model Context Protocol (MCP) seguro para gestionar cortafuegos OPNsense a través de asistentes de IA como Claude Code, Cursor y otras herramientas compatibles con MCP.

81 herramientas en 10 dominios: sistema, cortafuegos, red, DNS, DHCP, VPN, HAProxy, servicios, diagnósticos y seguridad.

Requisitos

  • Python 3.11+
  • OPNsense 24.7 o posterior — el servidor MCP depende de los endpoints de API basados en MVC introducidos en OPNsense 24.7. Las versiones anteriores utilizan una estructura de API diferente que no es compatible. El servidor detecta automáticamente la versión de OPNsense en la primera conexión y selecciona la nomenclatura de endpoints correcta (camelCase para versiones anteriores a 25.7, snake_case para 25.7+). OPNsense 26.x es totalmente compatible, incluido su formato de respuesta de estado de firmware modificado.

Modelo de seguridad

Este servidor MCP está diseñado con la seguridad como principal preocupación:

  • Solo lectura por defecto — las operaciones de escritura requieren una aceptación explícita mediante OPNSENSE_ALLOW_WRITES=true
  • Punto de guardado/rollback (solo OPNsense < 26.7) — donde OPNsense aún ofrece la API de punto de guardado, las modificaciones del cortafuegos utilizan su reversión automática integrada de 60 segundos; los cambios deben confirmarse explícitamente o se revierten automáticamente. OPNsense 26.7 eliminó esa API upstream — el servidor detecta el endpoint faltante en tiempo de ejecución y aplica los cambios del cortafuegos inmediatamente, sin reversión automática
  • Lista de bloqueo de endpoints — los endpoints peligrosos (halt, reboot, poweroff, firmware update/upgrade) están bloqueados de forma permanente a nivel del cliente de API y nunca pueden ser invocados
  • Solo API — sin acceso SSH, sin ejecución de comandos, sin manipulación directa de archivos de configuración
  • Transporte local — solo STDIO, sin endpoints HTTP/SSE expuestos a la red
  • Sin exposición de credenciales — las claves de API nunca se incluyen en la salida de herramientas, registros o mensajes de error
  • Validación de entrada — los parámetros de nombre de host se validan contra la inyección de metacaracteres de shell
  • Eliminación de datos sensibles — la copia de seguridad de configuración elimina contraseñas y claves por defecto

Inicio rápido

1. Crear una clave de API de OPNsense

  1. Inicie sesión en la interfaz web de OPNsense
  2. Vaya a Sistema > Acceso > Usuarios
  3. Edite un usuario existente o cree un usuario de API dedicado:
    • Para uso en producción, cree un usuario dedicado (p. ej., mcp-api) con solo los privilegios necesarios
    • Para acceso de solo lectura, asigne el usuario a un grupo con acceso de API de solo lectura
  4. Desplácese hasta la sección Claves de API y haga clic en el botón +
  5. Se generará un par clave/secreto y se descargará un archivo (apikey.txt)
  6. El archivo contiene dos líneas — key=your-api-key-here y secret=your-api-secret-here
  7. Almacene estas credenciales de forma segura — el secreto no se puede recuperar nuevamente desde OPNsense

Consejo: Para una configuración de solo lectura (recomendada para comenzar), no necesita cambiar ningún permiso — el acceso de API predeterminado es suficiente para todas las herramientas de solo lectura.

2. Instalación

# 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 .

Imagen de Docker: la imagen oficial es uhlenheide/opnsense-mcp-server, publicada desde este repositorio por .github/workflows/publish-docker.yml en cada etiqueta v*. No existe una imagen lucamarien/opnsense-mcp-server — las versiones anteriores del README la nombraron por error.

3. Configurar su asistente de IA

Claude Code

Agregue al .mcp.json de su proyecto:

{
  "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"] si la CLI de opnsense-mcp no está en su PATH.

O agréguelo globalmente a ~/.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

Agregue a la configuración de MCP de Cursor (Configuración > 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"
      }
    }
  }
}

Configuración

Variable de entornoPredeterminadoDescripción
OPNSENSE_URL(obligatorio)URL base de la API de OPNsense (debe terminar con /api)
OPNSENSE_API_KEY(obligatorio)Clave de API de la configuración de usuario de OPNsense
OPNSENSE_API_SECRET(obligatorio)Secreto de API de la configuración de usuario de OPNsense
OPNSENSE_VERIFY_SSLtrueVerificar certificado SSL (false para certificados autofirmados)
OPNSENSE_ALLOW_WRITESfalseHabilitar operaciones de escritura (reglas de cortafuegos, control de servicios)

Puertos personalizados: Si la interfaz web de OPNsense se ejecuta en un puerto no estándar (p. ej., 10443), inclúyalo en la URL: https://192.168.1.1:10443/api

Herramientas disponibles (81)

Sistema (7 herramientas)

HerramientaDescripción
opn_system_statusInformación del sistema, incluida la versión de firmware, nombre del producto y arquitectura
opn_list_servicesListar todos los servicios y su estado de ejecución. Parámetros: search, limit
opn_gateway_statusDisponibilidad de puerta de enlace, latencia y comprobaciones de salud de dpinger
opn_download_configDescargar copia de seguridad config.xml con eliminación opcional de datos sensibles. Parámetros: include_sensitive (predeterminado: false — las contraseñas y claves están redactadas)
opn_scan_configEscanear la configuración completa, analizarla en secciones y recopilar inventario de tiempo de ejecución (firmware, complementos, DHCP, DNS, interfaces, servicios). Los resultados se almacenan en caché por sesión. Parámetros: force
opn_get_config_sectionObtener una sección de configuración específica como JSON estructurado. Parámetros: section, include_sensitive
opn_mcp_infoVersión del servidor MCP, estado del modo de escritura, versión de OPNsense detectada, estilo de API y si las escrituras del cortafuegos aún tienen protección de punto de guardado/rollback

Red (5 herramientas)

HerramientaDescripción
opn_interface_statsEstadísticas de tráfico por interfaz (bytes de entrada/salida, paquetes, errores)
opn_arp_tableTabla ARP que muestra asignaciones de IP a MAC
opn_ndp_tableTabla NDP (Protocolo de descubrimiento de vecinos) que muestra asignaciones de IPv6 a MAC
opn_ipv6_statusConfiguración IPv6 y estado de direcciones para todas las interfaces (método, direcciones activas, resumen)
opn_list_static_routesRutas estáticas configuradas. Parámetros: search, limit

Cortafuegos (21 herramientas)

HerramientaDescripciónEscrituras
opn_list_firewall_rulesListar reglas de filtro del cortafuegos MVC. Parámetros: search, limitNo
opn_list_firewall_aliasesListar definiciones de alias (listas IP, grupos de puertos, GeoIP, URL). Parámetros: search, limitNo
opn_list_nat_rulesListar reglas de reenvío de puertos NAT (DNAT). Parámetros: search, limitNo
opn_list_firewall_categoriesListar categorías de reglas del cortafuegos y sus UUID. Parámetros: search, limitNo
opn_firewall_logEntradas recientes del registro del cortafuegos con filtrado del lado del cliente. Parámetros: source_ip, destination_ip, action, interface, limitNo
opn_confirm_changesConfirmar cambios pendientes, cancelando la reversión automática de 60 segundos (OPNsense < 26.7; una operación sin efecto que devuelve not_applicable en 26.7+). Parámetros: revision
opn_toggle_firewall_ruleAlternar el estado habilitado/deshabilitado de una regla con punto de guardado (OPNsense < 26.7). Parámetros: uuid
opn_add_firewall_ruleCrear una nueva regla de filtro con punto de guardado (OPNsense < 26.7). Parámetros: action, direction, interface, ip_protocol, protocol, source_net, destination_net, destination_port, description
opn_delete_firewall_ruleEliminar una regla de filtro por UUID con punto de guardado (OPNsense < 26.7). Parámetros: uuid
opn_add_aliasCrear un nuevo alias. Parámetros: name, alias_type, content, description
opn_add_nat_ruleCrear una regla de reenvío de puertos NAT con punto de guardado (OPNsense < 26.7). Parámetros: destination_port, target_ip, interface, protocol, target_port, description
opn_add_firewall_categoryCrear una nueva categoría de reglas del cortafuegos. Parámetros: name, color
opn_delete_firewall_categoryEliminar una categoría de reglas del cortafuegos por UUID con punto de guardado (OPNsense < 26.7). Parámetros: uuid
opn_set_rule_categoriesAsignar categorías a una regla del cortafuegos con punto de guardado (OPNsense < 26.7). Parámetros: uuid, categories
opn_add_icmpv6_rulesCrear reglas ICMPv6 esenciales requeridas para la operación IPv6 (NDP, RA, ping6) según RFC 4890. Parámetros: interface
opn_update_aliasActualizar un alias existente (nombre, contenido, tipo, descripción). Lectura-modificación-escritura. Parámetros: uuid, name, content, description, alias_type, enabled
opn_delete_aliasEliminar un alias por UUID. Verificar referencias de reglas primero. Parámetros: uuid
opn_toggle_aliasAlternar el estado habilitado/deshabilitado del alias. Parámetros: uuid
opn_update_firewall_ruleActualizar campos de reglas de filtro con punto de guardado (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, enabled
opn_update_nat_ruleActualizar regla de reenvío de puertos NAT con punto de guardado (OPNsense < 26.7). Parámetros: uuid, interface, protocol, destination_port, target_ip, target_port, description, enabled
opn_delete_nat_ruleEliminar una regla de reenvío de puertos NAT por UUID con punto de guardado (OPNsense < 26.7). Parámetros: uuid

Nota: La protección de punto de guardado solo existe en OPNsense < 26.7. En 26.7+ estas herramientas aplican los cambios inmediata y permanentemente — consulte Operaciones de escritura y puntos de guardado.

DNS (13 herramientas)

HerramientaDescripciónEscrituras
opn_list_dns_overridesAnulaciones de host de Unbound (registros DNS locales). Parámetros: search, limitNo
opn_list_dns_forwardsZonas de reenvío de DNS (servidores específicos de dominio). Parámetros: search, limitNo
opn_dns_statsEstadísticas del resolutor de Unbound (consultas, aciertos de caché, tiempo de actividad)No
opn_reconfigure_unboundAplicar cambios pendientes de configuración del resolutor de DNS
opn_add_dns_overrideAgregar una anulación de host DNS de Unbound (registro A/AAAA) y aplicar inmediatamente. Parámetros: hostname, domain, server, description
opn_list_dnsblListar configuraciones de listas de bloqueo DNSBL con proveedores y estado. Parámetros: search, limitNo
opn_get_dnsblObtener configuración completa de DNSBL por UUID (proveedores, listas permitidas, configuraciones). Parámetros: uuidNo
opn_set_dnsblActualizar configuraciones de DNSBL (lectura-modificación-escritura). Parámetros: uuid, enabled, providers, allowlists, blocklists, wildcards, etc.
opn_add_dnsbl_allowlistAgregar dominios a la lista permitida de DNSBL sin sobrescribir. Parámetros: uuid, domains
opn_remove_dnsbl_allowlistEliminar dominios de la lista permitida de DNSBL. Parámetros: uuid, domains
opn_update_dnsblRecargar archivos de listas de bloqueo DNSBL y reiniciar Unbound (sin cambio de configuración, herramienta de recuperación)
opn_update_dns_overrideActualizar una anulación de host DNS de Unbound y aplicar inmediatamente. Parámetros: uuid, hostname, domain, server, description, enabled
opn_delete_dns_overrideEliminar una anulación de host DNS de Unbound y aplicar inmediatamente. Parámetros: uuid

DHCP (8 herramientas)

HerramientaDescripciónEscribe
opn_list_dhcp_leasesConcesiones DHCPv4 activas del servidor ISC DHCPNo
opn_list_kea_leasesConcesiones DHCPv4 del servidor DHCP Kea. Parámetros: search, limitNo
opn_list_dnsmasq_leasesConcesiones DHCPv4 y DHCPv6 del servidor DNS/DHCP dnsmasq. Parámetros: search, limitNo
opn_list_dnsmasq_rangesRangos de direcciones DHCP configurados (tanto DHCPv4 como DHCPv6 con configuración RA). Parámetros: search, limitNo
opn_add_dnsmasq_rangeCrear un nuevo rango DHCP (IPv4 o IPv6 con configuración de Router Advertisement). Parámetros: interface, start_addr, end_addr, prefix_len, ra_mode, lease_time, description
opn_reconfigure_dnsmasqAplicar cambios de configuración DNS/DHCP de dnsmasq pendientes
opn_update_dnsmasq_rangeActualizar un rango DHCP (direcciones, tiempo de concesión, configuración RA) y aplicar. Parámetros: uuid, interface, start_addr, end_addr, prefix_len, ra_mode, lease_time, description, enabled
opn_delete_dnsmasq_rangeEliminar un rango DHCP por UUID y aplicar. Parámetros: uuid

VPN (3 herramientas)

HerramientaDescripción
opn_wireguard_statusEstado de túneles y pares WireGuard (requiere el plugin os-wireguard)
opn_ipsec_statusEstado de túneles VPN IPsec — sesiones IKE (Fase 1) y ESP/AH (Fase 2)
opn_openvpn_statusEstado de conexiones OpenVPN — instancias, sesiones y rutas

HAProxy (8 herramientas)

Gestión completa de configuración para el balanceador de carga HAProxy (requiere el plugin os-haproxy).

HerramientaDescripciónEscribe
opn_haproxy_statusEstado del servicio HAProxy y salud de los backendsNo
opn_haproxy_searchBuscar recursos HAProxy por tipo. Parámetros: resource_type (frontends/backends/servers/actions/acls/healthchecks/errorfiles/resolvers/mailers), search, limitNo
opn_haproxy_getObtener configuración detallada de un recurso específico. Parámetros: resource_type, uuidNo
opn_haproxy_configtestValidar la sintaxis de configuración de HAProxy antes de aplicarNo
opn_haproxy_addCrear un nuevo recurso HAProxy. Parámetros: resource_type, config (diccionario de valores de campo)
opn_haproxy_updateActualizar un recurso HAProxy existente (actualizaciones parciales). Parámetros: resource_type, uuid, config
opn_haproxy_deleteEliminar un recurso HAProxy por UUID. Parámetros: resource_type, uuid
opn_reconfigure_haproxyAplicar cambios de configuración HAProxy pendientes

Nota: Los cambios de HAProxy NO utilizan protección de savepoint — se aplican inmediatamente al reconfigurar. Siempre llame a opn_haproxy_configtest antes de opn_reconfigure_haproxy.

Servicios (11 herramientas)

HerramientaDescripciónEscribe
opn_list_acme_certsCertificados ACME/Let's Encrypt y su estado. Parámetros: search, limitNo
opn_list_cron_jobsTrabajos cron programados. Parámetros: search, limitNo
opn_crowdsec_statusEstado del motor de seguridad CrowdSec y decisiones activasNo
opn_crowdsec_alertsAlertas de seguridad CrowdSec (amenazas detectadas). Parámetros: search, limitNo
opn_list_ddns_accountsCuentas Dynamic DNS y su estado de actualización. Parámetros: search, limitNo
opn_add_ddns_accountCrear una nueva cuenta Dynamic DNS. Parámetros: service, hostname, username, password, checkip, interface, description
opn_reconfigure_ddclientAplicar cambios de configuración Dynamic DNS pendientes
opn_update_ddns_accountActualizar una cuenta Dynamic DNS (la contraseña es de solo escritura). Parámetros: uuid, service, hostname, username, password, checkip, interface, description, enabled
opn_delete_ddns_accountEliminar una cuenta Dynamic DNS por UUID. Parámetros: uuid
opn_mdns_repeater_statusEstado y configuración de mDNS Repeater (habilitado, interfaces, lista de bloqueo). Requiere el plugin os-mdns-repeaterNo
opn_configure_mdns_repeaterConfigurar mDNS Repeater para descubrimiento de dispositivos entre VLANs (HomeKit, Chromecast, AirPlay). Parámetros: enabled, interfaces

Diagnóstico (4 herramientas)

HerramientaDescripción
opn_pingHacer ping a un host desde el firewall para probar conectividad. Parámetros: host, count (1-10, predeterminado 3)
opn_tracerouteTrazar la ruta de red hacia un destino. Parámetros: host, protocol (ICMP/UDP/TCP), ip_version (4/6)
opn_dns_lookupConsulta DNS desde el firewall. Parámetros: hostname, server (servidor DNS personalizado opcional)
opn_pf_statesConsultar la tabla de estados PF activa. Parámetros: search, limit (máximo 1000)

Seguridad (1 herramienta)

HerramientaDescripción
opn_security_auditAuditoría de seguridad integral de 11 áreas: firmware, reglas de firewall (MVC + heredadas, agrupación de puertos, protocolos inseguros), reenvío NAT, seguridad DNS (DNSSEC, DoT), endurecimiento del sistema (SSH, HTTPS, syslog), servicios, certificados (ACME + sistema + CAs), VPN (configuración WireGuard, IPsec, OpenVPN), HAProxy (cabeceras, health checks), gateways. Hallazgos etiquetados con referencias de cumplimiento PCI DSS v4.0, BSI IT-Grundschutz, NIST 800-41, CIS.

Operaciones de Escritura y Savepoints

Las operaciones de escritura requieren OPNSENSE_ALLOW_WRITES=true. En OPNsense < 26.7, los cambios de firewall adicionalmente pasan por el mecanismo de savepoint de OPNsense:

  1. Antes de cualquier cambio de firewall, se crea un savepoint automáticamente
  2. El cambio se aplica (activar/desactivar regla, añadir o eliminar)
  3. Comienza una cuenta regresiva de 60 segundos — si no se confirma, OPNsense revierte automáticamente el cambio
  4. Use opn_confirm_changes con el revision devuelto para hacer los cambios permanentes

En esas versiones, si un asistente de IA realiza un cambio de firewall incorrecto que lo bloquea, el cambio se revierte automáticamente dentro de 60 segundos.

OPNsense 26.7 eliminó la API de savepoint/rollback upstream, por lo que no hay reversión automática en 26.7+. El servidor no codifica un corte de versión: sondea el endpoint de savepoint en la primera escritura de firewall y, si OPNsense responde que el endpoint no existe, degrada a aplicación directa durante el resto de la sesión. Verifique opn_mcp_info — su campo savepoint_support informa true, false, o null si ninguna escritura ha sido sondeada aún. Las herramientas de escritura devuelven entonces un revision vacío, opn_confirm_changes responde con status: "not_applicable", y cada cambio de firewall es inmediato y permanente.

Advertencia: En OPNsense 26.7+ realice una copia de seguridad de configuración (opn_download_config, o System > Configuration > Backups) antes de habilitar escrituras, y mantenga acceso fuera de banda al equipo — una regla que lo bloquee no se revertirá por sí sola.

Nota: opn_reconfigure_unbound, opn_reconfigure_haproxy, opn_reconfigure_ddclient, opn_reconfigure_dnsmasq, y opn_configure_mdns_repeater requieren escrituras pero no usan savepoints — aplican cambios de configuración de servicio y no son revertibles automáticamente.

Soporte IPv6

Totalmente Automatizado vía MCP

  • Reglas de Firewall IPv6 — Crear reglas con ip_protocol="inet6" (protegido por savepoint en OPNsense < 26.7)
  • Enlaces IPv6 HAProxy — Frontends con direcciones de enlace [::]:443 o [2001:db8::1]:443
  • Backends IPv6 HAProxy — Servidores con direcciones IPv6, resolvePrefer: ipv6 en backends
  • Dynamic DNS con IPv6 — Cuentas DDNS con métodos checkip compatibles con IPv6
  • Rangos DHCPv6 (dnsmasq) — Rangos DHCP IPv6 con configuración de Router Advertisement
  • Registros DNS AAAA — Overrides de host Unbound con direcciones IPv6
  • Diagnóstico IPv6 — Traceroute con ip_version="6", ping vía hostname

Requiere Configuración Manual en GUI

Estos ajustes carecen de soporte de API MVC en OPNsense y deben configurarse a través de la GUI web:

  • Configuración IPv6 WAN — PPPoE con delegación de prefijo DHCPv6, IPv6 estático, SLAAC
  • Direccionamiento IPv6 LAN — Modo Track Interface, asignación estática /64, ID de prefijo
  • Asignación de interfaces — Asignar puertos físicos a roles WAN/LAN/OPT
  • Túneles 6to4/6rd — Mecanismos de túnel de transición

Limitaciones Conocidas

  • ISC DHCP / Kea DHCPv6: No implementado. Solo dnsmasq (el predeterminado moderno) es compatible con rangos DHCPv6 y Router Advertisements. ISC DHCP está obsoleto; la visibilidad de concesiones DHCPv6 de Kea es limitada en la API.
  • radvd: No implementado como conjunto de herramientas separado. Dnsmasq maneja Router Advertisements de forma nativa mediante configuración de rango. Solo un daemon RA debe ejecutarse por interfaz.
  • Reglas de firewall dual-stack: inet46 (dual-stack) funciona correctamente en reglas de API MVC (opn_add_firewall_rule). Sin embargo, inet46 en reglas de filtro XML heredadas (GUI) produce silenciosamente sin salida PF — este es un bug conocido de OPNsense que solo afecta reglas heredadas.
  • Reglas GUI heredadas: Las reglas de firewall creadas a través de la GUI tradicional de OPNsense no son accesibles a través de la API MVC. Use opn_get_config_section("filter") para acceso de solo lectura.

Flujo de Trabajo Recomendado para Migración IPv6

  1. Manual (GUI): Configurar WAN IPv6 (DHCPv6-PD del ISP o estático)
  2. Manual (GUI): Configurar interfaces LAN (modo Track Interface para delegación de prefijo)
  3. MCP: Configurar Router Advertisements vía opn_add_dnsmasq_range con flags RA
  4. MCP: Crear reglas de firewall IPv6 (ICMPv6 debe permitirse para NDP/RA/PMTUD)
  5. MCP: Añadir registros DNS IPv6 vía opn_add_dns_override
  6. MCP: Configurar Dynamic DNS con método checkip IPv6
  7. MCP: Añadir direcciones de enlace IPv6 a frontends HAProxy
  8. MCP: Verificar con opn_ping, opn_traceroute (ip_version="6"), opn_gateway_status

Compatibilidad de Versiones

Versión OPNsenseEstado
24.7 (Thriving Tiger)Compatible
25.1 (Ultimate Unicorn)Compatible
25.7 (Visionary Viper)Compatible (detecta automáticamente API snake_case)
26.1+Compatible

El servidor detecta automáticamente la versión de OPNsense en la primera conexión y selecciona la convención de nomenclatura de endpoint API correcta (camelCase para pre-25.7, snake_case para 25.7+).

Nota sobre reglas de firewall: opn_list_firewall_rules muestra reglas gestionadas vía la API MVC/automatización. Las reglas configuradas a través de la GUI de OPNsense usan un formato heredado no accesible vía esta API. Esta es una limitación conocida de OPNsense.

Solución de Problemas

Problemas de Conexión

Errores de "Connection refused" o tiempo de espera

  • Verifique que OPNSENSE_URL termine con /api (p. ej., https://192.168.1.1/api)
  • Si usa un puerto no estándar, inclúyalo: https://192.168.1.1:10443/api
  • Asegúrese de que la GUI web de OPNsense sea accesible desde la máquina que ejecuta el servidor MCP

Errores de certificado SSL

  • Para certificados autofirmados (configuración predeterminada de OPNsense), establezca OPNSENSE_VERIFY_SSL=false
  • Para producción, instale un certificado adecuado en OPNsense y mantenga OPNSENSE_VERIFY_SSL=true

Problemas de Autenticación

401 No autorizado

  • Verifique que OPNSENSE_API_KEY y OPNSENSE_API_SECRET sean correctos
  • Las claves API distinguen entre mayúsculas y minúsculas — cópielas exactamente del apikey.txt descargado
  • Compruebe que el usuario API no esté deshabilitado en OPNsense
  • Verifique que el usuario API tenga privilegios suficientes para las operaciones que intenta

403 Prohibido

  • El usuario API puede carecer de permisos para el endpoint solicitado
  • Para operaciones de escritura, asegúrese de que OPNSENSE_ALLOW_WRITES=true esté establecido

Problemas Específicos de Herramientas

opn_list_firewall_rules devuelve resultados vacíos

  • Esta herramienta solo muestra reglas MVC/automatización, no reglas GUI heredadas
  • Cree reglas vía la API de automatización o opn_add_firewall_rule para verlas

opn_ping agota el tiempo de espera

  • El firewall puede no tener una ruta al host de destino
  • Verifique el estado del gateway con opn_gateway_status
  • El tiempo de espera predeterminado es de 30 segundos (30 ciclos de sondeo)

opn_download_config muestra valores [REDACTED]

  • Este es el comportamiento predeterminado por seguridad. Pase include_sensitive=true para incluir contraseñas y claves (use con precaución en conversaciones de IA)

Las operaciones de escritura fallan con "writes not enabled"

  • Establece OPNSENSE_ALLOW_WRITES=true en la configuración de tu servidor MCP
  • Esto está deshabilitado intencionalmente por defecto por seguridad

La confirmación de savepoint falla

  • El parámetro revision debe coincidir exactamente con lo que devolvió la operación de escritura
  • Las confirmaciones deben realizarse dentro de 60 segundos o el cambio se revierte automáticamente
  • En OPNsense 26.7+ no hay API de savepoint: las herramientas de escritura devuelven un revision vacío y opn_confirm_changes devuelve status: "not_applicable". Eso es esperado, no un fallo — el cambio ya se aplicó permanentemente

Comandos de diagnóstico

Si necesitas depurar el 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

Desarrollo

# 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

Mejores prácticas

Guías específicas de dominio para tareas comunes de configuración de firewall:

Estas guías muestran patrones reales de uso de herramientas MCP y explican las consideraciones de seguridad detrás de cada enfoque.

Contribuciones

Consulta CONTRIBUTING.md para obtener pautas detalladas. Puntos clave:

  1. Todas las pruebas deben usar respuestas de API simuladas — nunca te conectes a un OPNsense real
  2. Sin herramientas superpuestas — cada herramienta debe tener un propósito distinto
  3. Escribe docstrings claros — son la única guía de la IA para la selección de herramientas
  4. Devuelve datos estructurados (diccionarios), no cadenas formateadas
  5. Ejecuta make validate antes de enviar

Licencia

MIT