Unofficial FortiMonitor MCP Server

Unofficial FortiMonitor MCP Server

MCP server for the FortiMonitor v2 monitoring API. 241 tools across 33 modules covering server management, outage monitoring, maintenance windows, metrics, notifications, cloud monitoring, SNMP, dashboards, reporting, and more. Unofficial community project, not affiliated with Fortinet. Python, MIT license, Docker and local deployment supported.

Category
Visit Server

README

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

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 -d

See 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.txt

2. Configure environment

cp .env.example .env
# Edit .env with your FortiMonitor API key

3. Test connectivity

python test_connectivity.py

4. Run the server

python -m src.server

Option 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=INFO

Available 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 servers, server_enhanced 21 List, detail, CRUD, attributes, logs, DNS, path monitoring
Outages outages, outage_management, outage_enhanced 22 Query, health check, acknowledge, escalate, broadcast, delay, historical
Metrics metrics, agent_resources 6 Server metrics, agent resource types, resource details
Maintenance server_management, maintenance_enhanced 12 Status management, maintenance window CRUD, extend, pause, resume
Bulk Operations bulk_operations 6 Bulk acknowledge, bulk tags, advanced search, active outages
Server Groups server_groups, server_groups_enhanced 12 Group CRUD, membership, policies, compound services, child groups
Templates templates, templates_enhanced 8 Template CRUD, apply to server/group, reapply
Notifications notifications, notifications_enhanced 14 Schedules, contacts, groups, schedule CRUD, sub-resource queries
Contacts contacts_enhanced, rotating_contacts 18 Contact CRUD, contact info, contact groups, on-call rotations
Cloud cloud 15 Providers, credentials, discovery, regions, services
DEM dem 10 Applications, instances, locations, path monitoring
Compound Services compound_services 11 Service CRUD, thresholds, availability, network services, response time
Dashboards dashboards 5 Dashboard CRUD
Status Pages status_pages 5 Public status page CRUD
Network Services network_services 5 Server network service CRUD, response time
Monitoring Nodes monitoring_nodes 2 List and detail monitoring nodes
Network Service Types network_service_types 2 List and detail service types
Reporting reporting 10 Health summary, statistics, top alerting, exports, availability reports
Users users 6 User CRUD, addons
Reference Data reference_data 13 Account history, contact types, roles, timezones, attribute types
SNMP snmp 12 Credentials CRUD, discovery, resource CRUD, metrics
OnSight onsight 12 OnSight CRUD, groups, countermeasures, servers
Fabric fabric 4 Fabric connection CRUD
Countermeasures 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 -d

Then 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": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/unofficial-fortimonitor-mcp-server",
      "env": {
        "FORTIMONITOR_BASE_URL": "https://api2.panopta.com/v2",
        "FORTIMONITOR_API_KEY": "your_key"
      }
    }
  }
}

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/ -v

Run tests with coverage

pytest tests/ --cov=src --cov-report=html

Format 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/Code

Troubleshooting

Authentication Errors

  • Verify API key in .env
  • Check 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 writable
  • Clear 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.

Connect on LinkedIn

License

MIT License — see LICENSE for details.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured