get_serversLABSCO SUMMARY
Coverage, not curation — and that is the trade.
Most vendor-adjacent servers pick twenty operations and call it done; this one maps the API. That makes it capable of the awkward jobs — extending a maintenance window mid-incident, reshuffling an on-call rotation, exporting an availability report — that a curated subset always seems to miss. The cost is context: a tool surface this size is a lot for a model to hold, so scoping the key and disabling what you do not need is part of setting it up well, not an afterthought.
What it is
An unofficial community MCP server for FortiMonitor and Panopta's v2 API. It is not a curated subset: 241 tools across 33 modules cover the monitoring platform close to end to end, from server CRUD and outage handling to on-call rotations, cloud discovery and CSV exports. It is not affiliated with or supported by Fortinet.
What you get
- Servers: list, detail, CRUD, attributes, tagging, logs, DNS flush and path monitoring — 21 tools
- Outages: query, health check, acknowledge, escalate, broadcast, delay and historical incidents — 22 tools, plus 6 bulk operations for acknowledging and tagging at scale
- Maintenance: status management and maintenance-window create, extend, pause, resume and terminate — 12 tools
- Notifications and contacts: schedules, contacts, contact groups and rotating on-call rotations — 14 and 18 tools
- Groups and templates: group CRUD, membership, policies, compound services and child groups, plus template apply and reapply — 12 and 8 tools
- Cloud monitoring: providers, credentials, discovery, regions and services — 15 tools; DEM applications, instances and locations — 10 tools
- Reporting: health summary, outage statistics, top alerting, availability reports and exports — 10 tools
- Also covered: compound services, dashboards, status pages, network services, monitoring nodes, SNMP, OnSight, fabric connections, countermeasures, users and reference data
- API schemas discovered and cached automatically for validation, exposed at
/schema/resources
Requirements
A FortiMonitor account and an API key: FORTIMONITOR_API_KEY, with FORTIMONITOR_BASE_URL pointing at the v2 API endpoint and LOG_LEVEL optional. Docker is the recommended path — run the published image with the key in the environment, or use the compose file. Locally: a virtualenv, pip install -r requirements.txt, a connectivity test script, then python -m src.server. Two configuration notes that will otherwise cost you an hour: Claude Desktop does not reliably set the working directory, so give the full path to the entrypoint and set PYTHONPATH explicitly; and set ENABLE_SCHEMA_CACHE=false, or point SCHEMA_CACHE_DIR at a writable absolute path, to avoid read-only filesystem errors from the default cache location.
Setup effort
Build from source — git clone https://github.com/gjenkins20/unofficial-fortimonitor-mcp-server.git
USE CASES
Triaging an outage from where you are already typing
Query active outages, acknowledge the right ones, and escalate or delay rather than clicking through the console.
Opening a maintenance window before a deploy
Create the window, extend or pause it as the work runs long, and terminate it when the deploy lands.
Fixing the on-call rota
Read the notification schedules and rotating contacts, then change who is carrying the pager.
Producing the availability numbers someone asked for
Run the health summary and availability reports and export them, instead of assembling the figures by hand.
241 tools
Listed in project docs. Your client may show a different list.
get_server_detailsset_server_statuscreate_serverupdate_serverdelete_serverget_server_availabilityget_server_outageslist_server_attributescreate_server_attributeupdate_server_attributedelete_server_attributelist_server_logscreate_server_logcreate_custom_incidentflush_server_dnslist_server_path_monitoringcreate_server_path_monitoringdelete_server_path_monitoringget_path_monitoring_resultsget_server_network_servicessearch_servers_advancedget_servers_with_active_outagesbulk_acknowledge_outagesbulk_add_tagsbulk_remove_tagsget_outagescheck_server_healthlist_active_outageslist_resolved_outagesacknowledge_outageadd_outage_noteget_outage_detailsbroadcast_outageescalate_outagedelay_outageforce_resolve_outageset_outage_leadadd_outage_summaryset_outage_tagsget_outage_actionslist_outage_logsupdate_outage_descriptioncreate_historical_outageget_server_metricslist_agent_resource_typesget_agent_resource_type_detailslist_server_resourcesget_resource_detailsget_agent_resource_detailsget_agent_resource_metricget_agent_resource_thresholdupdate_agent_resource_thresholddelete_agent_resource_thresholdlist_server_groupsget_server_group_detailscreate_server_groupadd_servers_to_groupremove_servers_from_groupdelete_server_groupupdate_server_grouplist_server_group_serversapply_monitoring_policy_to_grouplist_server_group_compound_serviceslist_child_server_groupslist_server_templatesget_server_template_detailsapply_template_to_serverapply_template_to_groupcreate_server_templateupdate_server_templatedelete_server_templatereapply_server_templatecreate_maintenance_windowlist_maintenance_windowsget_maintenance_schedule_detailsupdate_maintenance_scheduledelete_maintenance_scheduleextend_maintenance_schedulepause_maintenance_scheduleresume_maintenance_scheduleterminate_maintenance_scheduleget_server_maintenance_scheduleslist_active_or_pending_maintenanceget_network_service_detailscreate_network_serviceupdate_network_servicedelete_network_serviceget_network_service_response_timelist_network_service_typesget_network_service_type_detailslist_monitoring_nodesget_monitoring_node_detailslist_notification_schedulesget_notification_schedule_detailscreate_notification_scheduleupdate_notification_scheduledelete_notification_scheduleget_notification_schedule_thresholdsget_notification_schedule_compound_servicesget_notification_schedule_network_servicesget_notification_schedule_serversget_notification_schedule_server_groupslist_contact_groupsget_contact_group_detailscreate_contact_groupupdate_contact_groupdelete_contact_grouplist_contactsget_contact_detailscreate_contactupdate_contactdelete_contactlist_contact_infoget_contact_info_detailscreate_contact_infoupdate_contact_infodelete_contact_infolist_rotating_contactsget_rotating_contact_detailscreate_rotating_contactupdate_rotating_contactdelete_rotating_contactget_rotating_contact_activelist_compound_servicescreate_compound_serviceget_compound_service_detailsupdate_compound_servicedelete_compound_servicelist_compound_service_thresholdsget_compound_service_availabilitylist_compound_service_network_servicesget_compound_service_response_timelist_compound_service_outagesget_compound_service_network_service_detailslist_cloud_providersget_cloud_provider_detailslist_cloud_credentialscreate_cloud_credentialget_cloud_credential_detailsupdate_cloud_credentialdelete_cloud_credentialrun_cloud_discoverylist_cloud_discoveriesget_cloud_discovery_detailsupdate_cloud_discoverylist_cloud_regionsget_cloud_region_detailslist_cloud_servicesget_cloud_service_detailslist_dem_applicationscreate_dem_applicationget_dem_application_detailsupdate_dem_applicationdelete_dem_applicationlist_dem_instancescreate_dem_instanceget_dem_locationsupdate_dem_instance_path_monitoringupdate_dem_locationlist_dashboardsget_dashboard_detailscreate_dashboardupdate_dashboarddelete_dashboardlist_status_pagesget_status_page_detailscreate_status_pageupdate_status_pagedelete_status_pageget_system_health_summaryget_outage_statisticsget_server_statisticsget_top_alerting_serversexport_servers_listexport_outage_historygenerate_availability_reportlist_snmp_credentialsget_snmp_credential_detailscreate_snmp_credentialupdate_snmp_credentialdelete_snmp_credentialrequest_snmp_discoverylist_server_snmp_resourcesget_snmp_resource_detailscreate_snmp_resourceupdate_snmp_resourcedelete_snmp_resourceget_snmp_resource_metriclist_onsightsget_onsight_detailscreate_onsightupdate_onsightdelete_onsightget_onsight_countermeasuresget_onsight_serverslist_onsight_groupsget_onsight_group_detailscreate_onsight_groupupdate_onsight_groupdelete_onsight_grouplist_fabric_connectionsget_fabric_connection_detailscreate_fabric_connectiondelete_fabric_connectionlist_network_service_countermeasuresget_network_service_countermeasure_detailscreate_network_service_countermeasureupdate_network_service_countermeasuredelete_network_service_countermeasurelist_threshold_countermeasuresget_threshold_countermeasure_detailscreate_threshold_countermeasureupdate_threshold_countermeasuredelete_threshold_countermeasurelist_outage_countermeasuresget_outage_countermeasure_detailsget_outage_countermeasure_metadataget_outage_countermeasure_outputlist_outage_metadataget_outage_metadata_detailsget_outage_preoutage_graphlist_usersget_user_detailscreate_userupdate_userdelete_userget_user_addonslist_account_historylist_contact_typesget_contact_type_detailslist_rolesget_role_detailslist_timezonesget_timezone_detailslist_server_attribute_typesget_server_attribute_type_detailscreate_server_attribute_typeupdate_server_attribute_typedelete_server_attribute_typecreate_prometheus_resourceBEFORE YOU INSTALL
What to know first
Tools you get
241 tools named in the project's documentation.
Requires
FORTIMONITOR_API_KEY in your environment
INSTALLATION
Connect your client
Server setup
git clone https://github.com/gjenkins20/unofficial-fortimonitor-mcp-server.git
cd unofficial-fortimonitor-mcp-server
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
pip install -e .
cp .env.example .envEdit .env with your FortiMonitor API key
python -m src.serverMCP Clients
Claude Desktop — Docker
Start the container first:
docker run -d --name unofficial-fortimonitor-mcp -e FORTIMONITOR_API_KEY=<YOUR_FORTIMONITOR_API_KEY> gjenkins20/unofficial-fortimonitor-mcp:latestThen add this to your Claude Desktop config:
{
"mcpServers": {
"fortimonitor": {
"command": "docker",
"args": [
"exec",
"-i",
"unofficial-fortimonitor-mcp",
"python",
"-m",
"src.server"
]
}
}
}Claude Desktop — Python
{
"mcpServers": {
"fortimonitor": {
"command": "<YOUR_PATH_TO_UNOFFICIAL_FORTIMONITOR_MCP_SERVER>/venv/bin/unofficial-fortimonitor-mcp",
"args": [],
"env": {
"FORTIMONITOR_API_KEY": "<YOUR_FORTIMONITOR_API_KEY>",
"FORTIMONITOR_BASE_URL": "https://api2.panopta.com/v2",
"PYTHONPATH": "<YOUR_PATH_TO_UNOFFICIAL_FORTIMONITOR_MCP_SERVER>",
"ENABLE_SCHEMA_CACHE": "false"
}
}
}
}The venv/bin/unofficial-fortimonitor-mcp entry point exists once pip install -e . has run inside the venv from the steps; <YOUR_PATH_TO_UNOFFICIAL_FORTIMONITOR_MCP_SERVER> is your clone's full path.
Claude Desktop — Windows
This Windows setup uses its own folder and a .venv environment rather than the steps above. In Command Prompt or PowerShell:
cd C:\Users\<YOUR_USERNAME>\Documents\Programming
git clone https://github.com/gjenkins20/unofficial-fortimonitor-mcp-server.git fortimonitor_mcp_server_claude
cd fortimonitor_mcp_server_claude
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txtAdd this to %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"fortimonitor": {
"command": "cmd",
"args": [
"/c",
"cd /d C:\\Users\\<YOUR_USERNAME>\\Documents\\Programming\\fortimonitor_mcp_server_claude && .venv\\Scripts\\python.exe -m src.server"
],
"env": {
"FORTIMONITOR_API_KEY": "<YOUR_FORTIMONITOR_API_KEY>",
"FORTIMONITOR_BASE_URL": "https://api2.panopta.com/v2"
}
}
}
}<YOUR_USERNAME> is your Windows username. If you cloned somewhere else, put that folder after cd /d instead.
Claude Code
{
"mcpServers": {
"fortimonitor": {
"command": "C:\\Projects\\unofficial-fortimonitor-mcp-server\\venv\\Scripts\\python.exe",
"args": [
"-m",
"src.server"
],
"cwd": "C:\\Projects\\unofficial-fortimonitor-mcp-server",
"env": {
"FORTIMONITOR_API_KEY": "<YOUR_FORTIMONITOR_API_KEY>",
"FORTIMONITOR_BASE_URL": "https://api2.panopta.com/v2"
}
}
}
}This is the project's Windows Server example, cloned to C:\Projects. C:\Projects\unofficial-fortimonitor-mcp-server in command and cwd is the author's example; yours is the full path of your clone — command is the python.exe inside its venv (venv/bin/python on macOS or Linux).