Skip to main content
Glama
gjenkins20

Unofficial FortiMonitor MCP Server

by gjenkins20

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

# 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):

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": "/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 set PYTHONPATH explicitly. Set ENABLE_SCHEMA_CACHE=false to avoid [Errno 30] Read-only file system errors when the server cannot write to the default cache/ directory. Alternatively, set SCHEMA_CACHE_DIR to 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/ -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.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    B
    maintenance
    MCP 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 updated
    61
    5
    MIT
  • A
    license
    C
    quality
    F
    maintenance
    Comprehensive MCP server for integrating with Zabbix monitoring systems, providing 90+ API tools across 19 categories for monitoring, alerting, and infrastructure management.
    Last updated
    100
    15
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for Sumo Logic — 37 tools for searching logs, managing monitors, alerts, dashboards, collectors, and metrics. Zero hardcoded org-specific values.
    Last updated
    48
    1
    MIT
  • A
    license
    -
    quality
    B
    maintenance
    MCPWatch: 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 updated
    1
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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