FortiGate MCP Server
Descripción general
Este es un servidor MCP (Model Context Protocol) que permite que un asistente de IA administre firewalls FortiGate: desde un único dispositivo de laboratorio hasta un parque multi-tenant con docenas de clientes, sitios y clústeres.
Está construido sobre tres ideas que la mayoría de las herramientas de automatización de FortiGate no tienen las tres a la vez:
Nada muta sin una vista previa. Cada llamada de crear/actualizar/eliminar devuelve un diff y un
change_iden lugar de ejecutarse inmediatamente. Una llamada separada,change_apply, es la que realmente lo ejecuta, y vuelve a comprobar el estado en vivo para detectar desviaciones antes de hacerlo. No existe un modo de "simple hazlo ya" de un solo paso, ni siquiera para automatización de confianza.Claude nunca ve una credencial real. Las contraseñas y tokens de los dispositivos se aprovisionan mediante una CLI local y no MCP (
fortinet-mcp-cred) directamente en el almacén de credenciales de tu sistema operativo (Windows Credential Manager / macOS Keychain / Linux Secret Service). La superficie de herramientas MCP solo maneja uncredential_idopaco.Cubre todo el ciclo de vida, no solo el CRUD de políticas. El arranque de dispositivos (DNS/NTP/syslog/SNMP/admin/HA), la multi-tenancy con VDOM, interfaces/zonas/DHCP, enrutamiento, políticas de firewall, VPN (IPsec + SSL), análisis de seguridad/cumplimiento y generación de documentación son espacios de herramientas de primera clase; consulta la Referencia de herramientas completa (115 herramientas).
Related MCP server: FortiGate MCP Server
Características
Dominio | Qué obtienes |
Inventario y multi-tenancy | Jerarquía Cliente -> Sitio -> Dispositivo -> VDOM en un almacén SQLite local. Resuelve el dispositivo por nombre, sitio, cliente o IP; nunca escribiendo una IP en el prompt. |
Arranque del dispositivo | DNS, NTP, syslog, SNMP (sysinfo + comunidades v1/v2c), ajustes globales (hostname/zonas horarias/puertos de administración), cuentas de administrador locales, HA: todo lo necesario para llevar un dispositivo de fábrica a listo para producción. |
Ciclo de vida de VDOM | Crear/eliminar VDOM, crear/eliminar enlaces inter-VDOM. |
Topología de red | Interfaces (subinterfazroa, bucles y miembros de vdom-link), zonas, servidores DHCP, rutas estáticas. |
Firewall y NAT | Políticas, objetos de dirección/servicio, IP virtuales: CRUD completo. |
VPN | Túneles IPsec sitio a sitio (phase1/phase2) con estado en vivo; visibilidad de SSL VPN. |
Seguridad del cambio | Modos READ_ONLY / SAFE / FULL, preview -> apply -> rollback para cada mutación, detección de desviación al aplicar. |
Análisis y cumplimiento | Detección de políticas duplicadas, ensombrecidas o any-any, detección de objetos sin usar, solapamiento de subredes, comprobación de buenas prácticas (política y configuración del sistema), puntuación de seguridad heurística de 0 a 100, informe de cumplimiento combinado. |
Generación de documentación | Diagramas de red (Mermaid/drawio/PlantUML), documentos Markdown de políticas/rutas/VPN/configuración de sistema, exportación combinada. |
Operaciones de flota | Compare dispositivos, buscar un objeto en todo el clúster, sincronizar objetos, replicar configuración, informes de toda la flota. |
Propósitos en lenguaje natural | Groupes ( |
Consulta docs/TOOLS.md para obtener la lista completa y generada de las 115 herramientas.
Inicio rápido
git clone https://github.com/Serrinho02/fortigate-mcp-server.git
cd fortigate-mcp-server
uv syncCrea un archivo minimalista config/config.json (la lista de dispositivos heredada de un solo archivo es opcional cuando se usa el sistema de inventario de abajo representada; consulte Instalación):
{ "fortigate": { "devices": {} } }Apelfa tu cliente MCP (a) al final Desktop) al servidor:
{
"mcpServers": {
"fortigate": {
"command": "/absolute/path/to/fortigate-mcp-server/.venv/bin/python",
"args": ["-m", "src.fortigate_mcp.server"],
"env": {
"FORTIGATE_MCP_CONFIG": "/absolute/path/to/fortigate-mcp-server/config/config.json",
"FORTINET_MCP_MODE": "full"
}
}
}
}Luego, desde Claude: registra un dispositivo (inventory_register_device_pending), configura su credencial localmente con fort-inet-mcp-cred set <credential_id> y llama a get_device_status. Guía completa, rutas para Windows e instrucciones sobre Docker: docs/INSTALLATION.md. Guía conceptual y ejemplos de trabajo: docs/USAGE.md.
Arquitectura
Sistema de arquitectura de siete capas, flujo de dependencia en él se mueve en una sola dirección:
flowchart TB
Transport["MCP Tool Layer -- inventory.*, connection.*, policy/network/routing/vip.*, vpn.*, system.*, vdom.*, analysis.*, doc.*, fleet.*, intent.*, change.*"]
Services["Service Layer -- one Service per capability, mode enforcement, error translation"]
Domain["Domain / Analysis Engines -- pure functions: DiffEngine, policy analyzers, scoring"]
Repo["Repository Layer -- inventory/change/snapshot persistence"]
Adapters["Vendor Adapter Layer -- FortinetProductAdapter Protocol (the plugin boundary)"]
Clients["Vendor API Client -- FortiOSRestClient (httpx, persistent per-device connection)"]
Infra["Infra -- ConnectionManager, CredentialManager (keyring), SQLite/SQLAlchemy"]
Transport --> Services
Services --> Domain
Services --> Repo
Domain --> Repo
Repo --> Adapters
Adapters --> Clients
Services -.uses.-> InfraFortinetProductAdapter es el único límite de extensibilidad: hoy FortiOSAdapter es la única implementación, pero añadir otro producto Fortinet significa escribir un nuevo adaptador con el mismo Protocol; nada por encima de esa capa cambia.
Modos de funcionamiento
Se han mediante FORTINET_MCP_MODE (por defecto full):
Modo | Comportamiento |
| No se puede previsualizar ninguna mutación, ni siquiera a una. |
| La operaciones de borrado se rechazan; crear/actualizar sigue requiriendo preview -> apply. |
| Todas las operaciones están permitidas, pero **siguen siguen mostrando preview -> apply: no existe ninguna vía de un solo ensayo rápida en ningún modo. |
Modelo de seguridad
Las credenciales del dispositivo nunca son un argumento de una conversación.
inventory_register_device_pendingsolo recolecta metadatos (host, nombre, cliente, sitio de direcciones) y emite uncredential_idopaco; el secreto real se introduces una vez, localmente, confortinet-mcp-cred set <credentials_id>directamente en el almacén de credenciales del sistema operativo.connection_connect/ cualquier herramienta visual necesite una sesión en vivo fallará con un error claro "no se ha aprovisionado la credencial" hasta que se complete ese paso de CLI; no hay ningún fallback que pueda permitir que un secreto fluya a los MCP.Dos excepciones documentadas, ambas señaladas directamente en la descripción de sus herramientas: la cabina IPsec del túnel (
vpn_create_ipsec_tunnel) y la contraseña de una cuenta de administrador (system_create_admin) son argumentos de herramienta correctos, porque FortiOS no las devuelve nunca en GET, y no hay manera de previsualizarlas o diff sin la vez.
Limitaciones conocidas
No hay herramienta declarativa "aplicar este estado deseado". Por diseño, Claude compone por sí mismo las herramientas granulares (ver
intent.*para el patrón), en lugar de que este servidor tenga un motor de aplicación de estilo Terraform/Ansible.Docker + Linux headless: el gestor de credenciales envuelve la librería
keyringdel SO. En un sistema contenedor/headless Linux sin demonio Secret Service, necesitas usar el fallbackkeyring-cryptfile(no habilitado) por defecto; ver docs/INSTALLATION.md. La instalación nativa en Windows/macOS/escritorio Linux funciona de fábrica.SNMP: solo se admiten comunidades v1/v2c; no hay aún ruedas sino.
Sin adaptadores para los productos Fortinet de FortiManager/FortiWeb/otros aún: el protocolo de adaptador lo admite, pero nada más está implementado fuera de FortiOS.
Verificada de extremo a extremo con tráfico HTTP real capturado contra una API REST simulada de FortiOS; si te encuentras con un comportamiento de un dispositivo real, abre un issue con la versión de FortiOS y el endpoint.
Tests
uv run pytest548 tests, without dependencies requiring external dependencies (device interaction is mocked at the HTTP transport level for the entire suite).
Contribuciones
Son bienvenidos problemas y los PR. Si estás añadiendo un nuevo tipo de recurso, mira cómo se añadieron los dominios de VPN o de configuración del sistema (services/vpn_service.py, services/system_service.py, services/change_dispatch.py): cada nuevo recurso mutante sigue el mismo patrón de adaptador -> change_dispatch -> service -> MCP.
Autor
Creado y mantenido por Nicola Serra.
Licencia
MIT: consulta LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables programmatic management of FortiGate firewall devices through MCP, supporting firewall policies, network objects, virtual IPs, routing, and interface management with Cursor IDE integration.MIT
- AlicenseNot gradedqualityCmaintenanceA production-ready MCP server for managing FortiGate firewalls, enabling AI assistants to manage firewall policies, network objects, routing, and device configurations.33MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to interact with FortiManager for centralized firewall policy management, device provisioning, and network configuration through the FortiManager JSON-RPC API.1004MIT
- AlicenseNot gradedqualityDmaintenanceEnables read-only querying and diagnostics of Fortigate firewalls via SSH, providing security analysis, traffic monitoring, and configuration inspection through natural language.MIT
Related MCP Connectors
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Threat modeling, code/cloud/pipeline scanning, shadow-AI discovery, compliance checks and fixes.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Serrinho02/fortigate-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server