Unofficial FortiMonitor MCP Server

非官方FortiMonitor v2 API整合,提供33個模組共241項工具。涵蓋伺服器管理、中斷監控、維護時段、指標、通知、SNMP、雲端監控、儀表板等功能。採用Python開發,MIT授權,支援Docker部署。

文件

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.

CategoryModule(s)ToolsDescription
Serversservers, server_enhanced21List, detail, CRUD, attributes, logs, DNS, path monitoring
Outagesoutages, outage_management, outage_enhanced22Query, health check, acknowledge, escalate, broadcast, delay, historical
Metricsmetrics, agent_resources6Server metrics, agent resource types, resource details
Maintenanceserver_management, maintenance_enhanced12Status management, maintenance window CRUD, extend, pause, resume
Bulk Operationsbulk_operations6Bulk acknowledge, bulk tags, advanced search, active outages
Server Groupsserver_groups, server_groups_enhanced12Group CRUD, membership, policies, compound services, child groups
Templatestemplates, templates_enhanced8Template CRUD, apply to server/group, reapply
Notificationsnotifications, notifications_enhanced14Schedules, contacts, groups, schedule CRUD, sub-resource queries
Contactscontacts_enhanced, rotating_contacts18Contact CRUD, contact info, contact groups, on-call rotations
Cloudcloud15Providers, credentials, discovery, regions, services
DEMdem10Applications, instances, locations, path monitoring
Compound Servicescompound_services11Service CRUD, thresholds, availability, network services, response time
Dashboardsdashboards5Dashboard CRUD
Status Pagesstatus_pages5Public status page CRUD
Network Servicesnetwork_services5Server network service CRUD, response time
Monitoring Nodesmonitoring_nodes2List and detail monitoring nodes
Network Service Typesnetwork_service_types2List and detail service types
Reportingreporting10Health summary, statistics, top alerting, exports, availability reports
Usersusers6User CRUD, addons
Reference Datareference_data13Account history, contact types, roles, timezones, attribute types
SNMPsnmp12Credentials CRUD, discovery, resource CRUD, metrics
OnSightonsight12OnSight CRUD, groups, countermeasures, servers
Fabricfabric4Fabric connection CRUD
Countermeasurescountermeasures20Network 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": "/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.