Unofficial FortiMonitor MCP Server
Provides comprehensive integration with FortiMonitor (Panopta) v2 API, enabling management of servers, outages, metrics, maintenance windows, server groups, templates, notifications, cloud monitoring, DEM, compound services, dashboards, status pages, reporting, SNMP, OnSight, fabric connections, countermeasures, and users.
Unofficial FortiMonitor MCP Server
Disclaimer: This is an unofficial community project. It is not affiliated with, endorsed by, or supported by Fortinet, Inc. or the FortiMonitor/Panopta team. "FortiMonitor" and "Fortinet" are trademarks of Fortinet, Inc. Use at your own risk.
Model Context Protocol (MCP) server for FortiMonitor/Panopta v2 API integration with Claude AI.
241 tools across 33 modules providing near-complete coverage of the FortiMonitor v2 API.
Features
Server Management — CRUD, tagging, attributes, DNS flush, path monitoring, logs
Outage Monitoring — Query, acknowledge, escalate, broadcast, delay, historical incidents
Metrics & Resources — Agent resources, SNMP resources, thresholds, metric graphs
Maintenance Windows — Create, extend, pause, resume, terminate schedules
Server Groups — Group CRUD, membership, compound services, child groups, monitoring policies
Templates — Create, apply, reapply monitoring templates to servers and groups
Notifications — Schedules, contacts, contact groups, rotating on-call contacts
Cloud Monitoring — Providers, credentials, discovery, regions, services
DEM — Digital Experience Monitoring applications, instances, locations
Compound Services — Aggregated service CRUD, thresholds, availability, response time
Dashboards & Status Pages — CRUD for monitoring dashboards and public status pages
Reporting — System health summary, outage statistics, availability reports, CSV exports
SNMP — Credentials, discovery, resource CRUD, metrics
OnSight — On-premises monitoring instances and groups
Fabric Connections — Integration management
Countermeasures — Automated remediation on network services and thresholds
User Management — User CRUD, roles, addons
Reference Data — Contact types, timezones, roles, account history, server attribute types
Docker Support — Easy deployment via Docker containers
Windows Support — Native deployment on Windows for Claude Desktop and Claude Code
Related MCP server: Zabbix MCP Server
Quick Start
Option A: Docker (Recommended)
# 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 -dSee DOCKER_DEPLOYMENT.md for detailed Docker instructions.
Option B: Local Installation
1. Install dependencies
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt2. Configure environment
cp .env.example .env
# Edit .env with your FortiMonitor API key3. Test connectivity
python test_connectivity.py4. Run the server
python -m src.serverOption C: Windows (Claude Desktop / Claude Code)
See docs/WINDOWS_DEPLOYMENT.md for step-by-step Windows instructions.
Configuration
Edit .env:
FORTIMONITOR_BASE_URL=https://api2.panopta.com/v2
FORTIMONITOR_API_KEY=your_api_key_here
LOG_LEVEL=INFOAvailable Tools (241)
The server exposes 241 MCP tools organized into the following categories. For full parameter details, see the End-User Guide.
Category | Module(s) | Tools | Description |
Servers |
| 21 | List, detail, CRUD, attributes, logs, DNS, path monitoring |
Outages |
| 22 | Query, health check, acknowledge, escalate, broadcast, delay, historical |
Metrics |
| 6 | Server metrics, agent resource types, resource details |
Maintenance |
| 12 | Status management, maintenance window CRUD, extend, pause, resume |
Bulk Operations |
| 6 | Bulk acknowledge, bulk tags, advanced search, active outages |
Server Groups |
| 12 | Group CRUD, membership, policies, compound services, child groups |
Templates |
| 8 | Template CRUD, apply to server/group, reapply |
Notifications |
| 14 | Schedules, contacts, groups, schedule CRUD, sub-resource queries |
Contacts |
| 18 | Contact CRUD, contact info, contact groups, on-call rotations |
Cloud |
| 15 | Providers, credentials, discovery, regions, services |
DEM |
| 10 | Applications, instances, locations, path monitoring |
Compound Services |
| 11 | Service CRUD, thresholds, availability, network services, response time |
Dashboards |
| 5 | Dashboard CRUD |
Status Pages |
| 5 | Public status page CRUD |
Network Services |
| 5 | Server network service CRUD, response time |
Monitoring Nodes |
| 2 | List and detail monitoring nodes |
Network Service Types |
| 2 | List and detail service types |
Reporting |
| 10 | Health summary, statistics, top alerting, exports, availability reports |
Users |
| 6 | User CRUD, addons |
Reference Data |
| 13 | Account history, contact types, roles, timezones, attribute types |
SNMP |
| 12 | Credentials CRUD, discovery, resource CRUD, metrics |
OnSight |
| 12 | OnSight CRUD, groups, countermeasures, servers |
Fabric |
| 4 | Fabric connection CRUD |
Countermeasures |
| 20 | Network service & threshold countermeasures, outage metadata, thresholds |
Integration with Claude Desktop
Add to Claude Desktop config (claude_desktop_config.json):
Option A: Using Docker (Recommended)
First, ensure the container is running:
docker-compose up -dThen add to your Claude Desktop config:
{
"mcpServers": {
"fortimonitor": {
"command": "docker",
"args": ["exec", "-i", "unofficial-fortimonitor-mcp", "python", "-m", "src.server"]
}
}
}Option B: Using Local Python
{
"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"
}
}
}
}Note: Claude Desktop does not reliably set
cwd, so use the full path to the installed entrypoint script and setPYTHONPATHexplicitly. SetENABLE_SCHEMA_CACHE=falseto avoid[Errno 30] Read-only file systemerrors when the server cannot write to the defaultcache/directory. Alternatively, setSCHEMA_CACHE_DIRto an absolute writable path to keep caching enabled.
API Documentation
The server automatically discovers and caches FortiMonitor API schemas for validation and documentation. Schemas are cached in cache/schemas/ by default.
Schema Endpoints
/schema/resources- Lists all available API resources/schema/resources/{resource_name}- Get schema for specific resource
Development
Run tests
pytest tests/ -vRun tests with coverage
pytest tests/ --cov=src --cov-report=htmlFormat code
black src/ tests/Type checking
mypy src/Lint
flake8 src/ tests/Project Structure
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/CodeTroubleshooting
Authentication Errors
Verify API key in
.envCheck base URL is correct (
https://api2.panopta.com/v2)Test API key with curl:
curl "https://api2.panopta.com/v2/server?api_key=YOUR_KEY&limit=1"
Schema Discovery Failures
Check network connectivity
Verify
cache/schemas/directory exists and is writableClear cache and retry:
rm -rf cache/schemas/*
MCP Server Not Appearing in Claude
Check Claude Desktop config syntax
Verify file paths are absolute
Restart Claude Desktop completely
Check server logs for startup errors
About the Developer
Built by Gregori Jenkins — originally from Chicago, a humble student of Computer Science, and a proud cat dad.
License
MIT License — see LICENSE for details.
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
- AlicenseAqualityBmaintenanceMCP server for Webmin system administration. 61 tools across 12 modules covering system monitoring, services, users, cron, packages, files, storage (SMART + LVM), security (Fail2ban), MySQL databases, Webmin ACL, and disk quotas. Four-tier safety framework with safe mode on by default. Python, MIT license, Docker and local deployment supported.Last updated615MIT
- AlicenseCqualityFmaintenanceComprehensive MCP server for integrating with Zabbix monitoring systems, providing 90+ API tools across 19 categories for monitoring, alerting, and infrastructure management.Last updated10015MIT
- AlicenseAqualityBmaintenanceMCP server for Sumo Logic — 37 tools for searching logs, managing monitors, alerts, dashboards, collectors, and metrics. Zero hardcoded org-specific values.Last updated481MIT
- Alicense-qualityBmaintenanceMCPWatch: observability for MCP servers. One line instruments any Python MCP server (FastMCP and the low-level Server) and tracks per-tool latency (p50/p95/p99), error rates, silent failures (empty/null returns and isError), and call volume. REST API, CLI, and alert hooks. MIT, no config required.Last updated1MIT
Related MCP Connectors
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
A basic MCP server to operate on the Postman API.
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/gjenkins20/unofficial-fortimonitor-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server