Unofficial FortiMonitor MCP Server
Integración no oficial de la API de FortiMonitor v2 que expone 241 herramientas en 33 módulos. Cubre gestión de servidores, monitoreo de interrupciones, ventanas de mantenimiento, métricas, notificaciones, SNMP, monitoreo en la nube, paneles y más. Python, licencia MIT, implementación con Docker.
Documentación
Servidor MCP no oficial de FortiMonitor
Aviso legal: Este es un proyecto comunitario no oficial. No está afiliado, respaldado ni soportado por Fortinet, Inc. ni por el equipo de FortiMonitor/Panopta. "FortiMonitor" y "Fortinet" son marcas comerciales de Fortinet, Inc. Úselo bajo su propio riesgo.
Servidor de Protocolo de Contexto de Modelo (MCP) para la integración de la API v2 de FortiMonitor/Panopta con Claude AI.
241 herramientas en 33 módulos que brindan una cobertura casi completa de la API v2 de FortiMonitor.
Características
- Gestión de servidores — CRUD, etiquetado, atributos, vaciado de DNS, monitoreo de rutas, registros
- Monitoreo de interrupciones — Consulta, reconocimiento, escalamiento, transmisión, retraso, incidentes históricos
- Métricas y recursos — Recursos de agentes, recursos SNMP, umbrales, gráficos de métricas
- Ventanas de mantenimiento — Crear, extender, pausar, reanudar, finalizar programaciones
- Grupos de servidores — CRUD de grupos, membresía, servicios compuestos, subgrupos, políticas de monitoreo
- Plantillas — Crear, aplicar, reaplicar plantillas de monitoreo a servidores y grupos
- Notificaciones — Programaciones, contactos, grupos de contactos, contactos rotativos de guardia
- Monitoreo en la nube — Proveedores, credenciales, descubrimiento, regiones, servicios
- DEM — Aplicaciones, instancias, ubicaciones de monitoreo de experiencia digital
- Servicios compuestos — CRUD de servicios agregados, umbrales, disponibilidad, tiempo de respuesta
- Paneles y páginas de estado — CRUD para paneles de monitoreo y páginas de estado públicas
- Informes — Resumen de salud del sistema, estadísticas de interrupciones, informes de disponibilidad, exportaciones CSV
- SNMP — Credenciales, descubrimiento, CRUD de recursos, métricas
- OnSight — Instancias y grupos de monitoreo locales
- Conexiones Fabric — Gestión de integraciones
- Contramedidas — Remediación automatizada en servicios de red y umbrales
- Gestión de usuarios — CRUD de usuarios, roles, complementos
- Datos de referencia — Tipos de contacto, zonas horarias, roles, historial de cuentas, tipos de atributos de servidor
- Soporte Docker — Implementación sencilla mediante contenedores Docker
- Soporte Windows — Implementación nativa en Windows para Claude Desktop y Claude Code
Inicio rápido
Opción A: Docker (Recomendado)
# Run with Docker
docker run -d \
--name unofficial-fortimonitor-mcp \
-e FORTIMONITOR_API_KEY=your-api-key-here \
gjenkins20/unofficial-fortimonitor-mcp:latest
# Or use Docker Compose
cp .env.example .env
# Edit .env and set your API key
docker-compose up -d
Consulte DOCKER_DEPLOYMENT.md para obtener instrucciones detalladas sobre Docker.
Opción B: Instalación local
1. Instalar dependencias
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
2. Configurar el entorno
cp .env.example .env
# Edit .env with your FortiMonitor API key
3. Probar la conectividad
python test_connectivity.py
4. Ejecutar el servidor
python -m src.server
Opción C: Windows (Claude Desktop / Claude Code)
Consulte docs/WINDOWS_DEPLOYMENT.md para obtener instrucciones paso a paso para Windows.
Configuración
Edite .env:
FORTIMONITOR_BASE_URL=https://api2.panopta.com/v2
FORTIMONITOR_API_KEY=your_api_key_here
LOG_LEVEL=INFO
Herramientas disponibles (241)
El servidor expone 241 herramientas MCP organizadas en las siguientes categorías. Para obtener detalles completos de los parámetros, consulte la Guía del usuario final.
| Categoría | Módulo(s) | Herramientas | Descripción |
|---|---|---|---|
| Servidores | servers, server_enhanced | 21 | Listar, detallar, CRUD, atributos, registros, DNS, monitoreo de rutas |
| Interrupciones | outages, outage_management, outage_enhanced | 22 | Consulta, verificación de salud, reconocimiento, escalamiento, transmisión, retraso, histórico |
| Métricas | metrics, agent_resources | 6 | Métricas de servidor, tipos de recursos de agente, detalles de recursos |
| Mantenimiento | server_management, maintenance_enhanced | 12 | Gestión de estado, CRUD de ventanas de mantenimiento, extender, pausar, reanudar |
| Operaciones masivas | bulk_operations | 6 | Reconocimiento masivo, etiquetas masivas, búsqueda avanzada, interrupciones activas |
| Grupos de servidores | server_groups, server_groups_enhanced | 12 | CRUD de grupos, membresía, políticas, servicios compuestos, subgrupos |
| Plantillas | templates, templates_enhanced | 8 | CRUD de plantillas, aplicar a servidor/grupo, reaplicar |
| Notificaciones | notifications, notifications_enhanced | 14 | Programaciones, contactos, grupos, CRUD de programaciones, consultas de subrecursos |
| Contactos | contacts_enhanced, rotating_contacts | 18 | CRUD de contactos, información de contacto, grupos de contacto, rotaciones de guardia |
| Nube | cloud | 15 | Proveedores, credenciales, descubrimiento, regiones, servicios |
| DEM | dem | 10 | Aplicaciones, instancias, ubicaciones, monitoreo de rutas |
| Servicios compuestos | compound_services | 11 | CRUD de servicios, umbrales, disponibilidad, servicios de red, tiempo de respuesta |
| Paneles | dashboards | 5 | CRUD de paneles |
| Páginas de estado | status_pages | 5 | CRUD de páginas de estado públicas |
| Servicios de red | network_services | 5 | CRUD de servicios de red de servidor, tiempo de respuesta |
| Nodos de monitoreo | monitoring_nodes | 2 | Listar y detallar nodos de monitoreo |
| Tipos de servicios de red | network_service_types | 2 | Listar y detallar tipos de servicios |
| Informes | reporting | 10 | Resumen de salud, estadísticas, alertas principales, exportaciones, informes de disponibilidad |
| Usuarios | users | 6 | CRUD de usuarios, complementos |
| Datos de referencia | reference_data | 13 | Historial de cuentas, tipos de contacto, roles, zonas horarias, tipos de atributos |
| SNMP | snmp | 12 | CRUD de credenciales, descubrimiento, CRUD de recursos, métricas |
| OnSight | onsight | 12 | CRUD de OnSight, grupos, contramedidas, servidores |
| Fabric | fabric | 4 | CRUD de conexiones Fabric |
| Contramedidas | countermeasures | 20 | Contramedidas de servicios de red y umbrales, metadatos de interrupciones, umbrales |
Integración con Claude Desktop
Agregue a la configuración de Claude Desktop (claude_desktop_config.json):
Opción A: Usando Docker (Recomendado)
Primero, asegúrese de que el contenedor esté en ejecución:
docker-compose up -d
Luego agregue a su configuración de Claude Desktop:
{
"mcpServers": {
"fortimonitor": {
"command": "docker",
"args": ["exec", "-i", "unofficial-fortimonitor-mcp", "python", "-m", "src.server"]
}
}
}
Opción B: Usando Python local
{
"mcpServers": {
"fortimonitor": {
"command": "/path/to/unofficial-fortimonitor-mcp-server/.venv/bin/unofficial-fortimonitor-mcp",
"args": [],
"env": {
"FORTIMONITOR_API_KEY": "your_key",
"FORTIMONITOR_BASE_URL": "https://api2.panopta.com/v2",
"PYTHONPATH": "/path/to/unofficial-fortimonitor-mcp-server",
"ENABLE_SCHEMA_CACHE": "false"
}
}
}
}
Nota: Claude Desktop no establece
cwdde manera confiable, así que use la ruta completa al script de punto de entrada instalado y establezcaPYTHONPATHexplícitamente. EstablezcaENABLE_SCHEMA_CACHE=falsepara evitar errores de[Errno 30] Read-only file systemcuando el servidor no pueda escribir en el directorio predeterminadocache/. Alternativamente, establezcaSCHEMA_CACHE_DIRa una ruta absoluta escribible para mantener el almacenamiento en caché habilitado.
Documentación de la API
El servidor descubre y almacena automáticamente en caché los esquemas de la API de FortiMonitor para validación y documentación. Los esquemas se almacenan en cache/schemas/ de forma predeterminada.
Puntos finales de esquema
/schema/resources- Lista todos los recursos de API disponibles/schema/resources/{resource_name}- Obtiene el esquema de un recurso específico
Desarrollo
Ejecutar pruebas
pytest tests/ -v
Ejecutar pruebas con cobertura
pytest tests/ --cov=src --cov-report=html
Formatear código
black src/ tests/
Verificación de tipos
mypy src/
Lint
flake8 src/ tests/
Estructura del proyecto
unofficial-fortimonitor-mcp-server/
├── README.md
├── FORTIMONITOR_API_DOCS.md # FortiMonitor API documentation
├── Dockerfile # Container definition
├── docker-compose.yml # Docker Compose config
├── requirements.txt
├── pyproject.toml
├── .env.example
├── .gitignore
├── .dockerignore
├── test_connectivity.py
├── scripts/ # Build and deployment scripts
│ ├── build.sh / build.bat
│ ├── test-container.sh / test-container.bat
│ ├── push.sh
│ └── release.sh
├── .github/
│ └── workflows/
│ └── docker-build.yml # CI/CD pipeline
├── src/
│ ├── __init__.py
│ ├── __main__.py
│ ├── server.py # MCP server entrypoint, dispatch registry
│ ├── config.py # Pydantic settings from env vars / .env
│ ├── fortimonitor/
│ │ ├── client.py # Synchronous HTTP client (requests lib)
│ │ ├── schema.py # Schema discovery & caching
│ │ ├── models.py # Pydantic data models (~50 models)
│ │ └── exceptions.py # Custom exceptions
│ └── tools/ # 33 tool module files (241 tools)
│ ├── servers.py # Server list/detail
│ ├── server_enhanced.py # Server CRUD, attributes, logs, path monitoring
│ ├── outages.py # Outage queries, health check
│ ├── outage_management.py # Acknowledge, notes, details
│ ├── outage_enhanced.py # Broadcast, escalate, delay, historical
│ ├── metrics.py # Server metrics
│ ├── agent_resources.py # Agent resource types & details
│ ├── server_management.py # Status management, maintenance
│ ├── maintenance_enhanced.py # Maintenance CRUD, extend, pause
│ ├── bulk_operations.py # Bulk ops, advanced search
│ ├── server_groups.py # Server group CRUD
│ ├── server_groups_enhanced.py # Group members, policies, children
│ ├── templates.py # Template list/detail/apply
│ ├── templates_enhanced.py # Template CRUD, reapply
│ ├── notifications.py # Notification schedules/contacts/groups
│ ├── notifications_enhanced.py # Schedule CRUD, sub-resources
│ ├── contacts_enhanced.py # Contact CRUD, info, groups
│ ├── rotating_contacts.py # On-call rotation management
│ ├── network_services.py # Network service CRUD, response time
│ ├── network_service_types.py # Service type list/detail
│ ├── monitoring_nodes.py # Monitoring node list/detail
│ ├── cloud.py # Cloud providers, credentials, discovery
│ ├── dem.py # DEM applications, instances, locations
│ ├── compound_services.py # Compound service CRUD, thresholds
│ ├── dashboards.py # Dashboard CRUD
│ ├── status_pages.py # Status page CRUD
│ ├── reporting.py # Health, stats, exports, availability
│ ├── users.py # User CRUD, addons
│ ├── reference_data.py # Account history, types, roles, timezones
│ ├── snmp.py # SNMP credentials, discovery, resources
│ ├── onsight.py # OnSight CRUD, groups
│ ├── fabric.py # Fabric connection CRUD
│ └── countermeasures.py # Countermeasures, thresholds, metadata
├── tests/
│ ├── conftest.py # Test fixtures
│ ├── test_client.py # API client tests
│ ├── test_tools.py # Original tool tests
│ ├── test_tool_definitions.py # Tool definition validation
│ ├── test_dict_tool_handlers.py # Dict-pattern handler tests
│ ├── test_registry.py # Registry build tests
│ └── test_server.py # Server integration tests
├── cache/
│ └── schemas/ # Cached API schemas
└── docs/
├── USER_GUIDE.md # End-user guide
├── DEVELOPER_GUIDE.md # Developer/contributor guide
└── WINDOWS_DEPLOYMENT.md # Windows setup for Claude Desktop/Code
Solución de problemas
Errores de autenticación
- Verifique la clave de API en
.env - Compruebe que la URL base sea correcta (
https://api2.panopta.com/v2) - Pruebe la clave de API con curl:
curl "https://api2.panopta.com/v2/server?api_key=YOUR_KEY&limit=1"
Fallos en el descubrimiento de esquemas
- Compruebe la conectividad de red
- Verifique que el directorio
cache/schemas/exista y sea escribible - Limpie la caché y reintente:
rm -rf cache/schemas/*
El servidor MCP no aparece en Claude
- Compruebe la sintaxis de configuración de Claude Desktop
- Verifique que las rutas de archivo sean absolutas
- Reinicie Claude Desktop por completo
- Compruebe los registros del servidor para detectar errores de inicio
Acerca del desarrollador
Creado por Gregori Jenkins — originario de Chicago, un humilde estudiante de Ciencias de la Computación y un orgulloso padre de gatos.
Licencia
Licencia MIT — consulte LICENSE para obtener más detalles.