FortiGate MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FORTIGATE_MCP_CONFIG | Yes | Absolute path to the FortiGate MCP server configuration file (e.g. /absolute/path/fortigate-mcp/config/config.json). The stdio server needs this in its environment or --config on the command line. | |
| FORTIGATE_MCP_ALLOW_WRITES | No | Set to 1 to enable write and destructive tools. By default the server is read-only until writes are turned on. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_devicesA | List the identifiers of all registered FortiGate devices. This tool returns the device IDs of every FortiGate currently registered with the MCP server. Use get_device_status with a specific device ID to retrieve that device's system, connection, and configuration details. Returns:
|
| get_device_statusB | Get detailed system status information for a specific FortiGate device. This tool retrieves comprehensive system information from a FortiGate device, including hardware details, software version, hostname, and operational status. Parameters:
Returns:
|
| test_device_connectionA | Test network connectivity to a specific FortiGate device. This tool performs a connection test to verify that the MCP server can successfully communicate with the specified FortiGate device. Parameters:
Returns:
|
| discover_vdomsA | Discover and list all Virtual Domains (VDOMs) on a FortiGate device. This tool queries the specified FortiGate device to retrieve information about all configured Virtual Domains, including their status and settings. Parameters:
Returns:
|
| add_deviceB | Add a new FortiGate device to the MCP server. This tool registers a new FortiGate device with the server, configuring connection parameters and authentication credentials. Parameters:
Returns:
|
| remove_deviceA | Remove a FortiGate device from the MCP server. This tool unregisters a FortiGate device from the server, removing all associated configuration and terminating active connections. Parameters:
Returns:
|
| list_firewall_policiesA | List all firewall policies configured on a FortiGate device. This tool retrieves and displays all firewall security policies from the specified device and Virtual Domain, showing traffic control rules and settings. Parameters:
Returns:
|
| create_firewall_policyA | Create a new firewall policy on a FortiGate device. This tool adds a new security policy to control traffic flow through the FortiGate device, defining rules for source, destination, and services. Parameters:
Policy data should include:
Returns:
|
| update_firewall_policyC | Update an existing firewall policy on a FortiGate device. This tool modifies the configuration of an existing firewall policy, allowing changes to rules, addresses, services, and other settings. Parameters:
Returns:
|
| delete_firewall_policyB | Delete a firewall policy from a FortiGate device. This tool removes an existing firewall policy from the device configuration, permanently deleting the specified security rule. Parameters:
Returns:
|
| list_address_objectsA | List all address objects configured on a FortiGate device. This tool retrieves all network address objects defined on the device, including IP addresses, subnets, ranges, and FQDN objects. Parameters:
Returns:
|
| list_service_objectsB | List all service objects configured on a FortiGate device. This tool retrieves all network service objects defined on the device, including TCP/UDP port definitions and protocol specifications. Parameters:
Returns:
|
| list_static_routesB | List all static routes configured on a FortiGate device. This tool retrieves all manually configured static routes from the device's routing table, showing destination networks and gateways. Parameters:
Returns:
|
| get_routing_tableA | Get the current routing table from a FortiGate device. This tool retrieves the active routing table showing all routes currently installed on the device, including static, dynamic, and connected routes. Parameters:
Returns:
|
| list_interfacesB | List all network interfaces configured on a FortiGate device. This tool retrieves information about all network interfaces, including physical ports, VLANs, and virtual interfaces. Parameters:
Returns:
|
| get_interface_statusA | Get the current status of a specific network interface on a FortiGate device. This tool retrieves live status information for a single named interface, including its link state, IP address configuration, and related details. Parameters:
Returns:
|
| update_static_routeB | Update an existing static route on a FortiGate device. This tool modifies the configuration of an existing static route, allowing changes to destination, gateway, or other settings. Parameters:
Returns:
|
| delete_static_routeB | Delete a static route from a FortiGate device. This tool removes an existing static route from the device configuration. Parameters:
Returns:
|
| get_static_route_detailB | Get detailed information for a specific static route. This tool retrieves comprehensive configuration details for a specific static route, including all settings and status. Parameters:
Returns:
|
| list_virtual_ipsA | List all Virtual IPs configured on a FortiGate device. This tool retrieves all Virtual IP objects defined on the device, including port forwarding configurations and NAT mappings. Parameters:
Returns:
|
| create_virtual_ipB | Create a new Virtual IP on a FortiGate device. This tool adds a new Virtual IP object that can be used for port forwarding, NAT, and external access to internal services. Parameters:
Returns:
|
| update_virtual_ipB | Update an existing Virtual IP on a FortiGate device. This tool modifies the configuration of an existing Virtual IP object, allowing changes to IP addresses, ports, or other settings. Parameters:
Returns:
|
| get_virtual_ip_detailA | Get detailed information for a specific Virtual IP. This tool retrieves comprehensive configuration details for a specific Virtual IP object, including all settings and mappings. Parameters:
Returns:
|
| delete_virtual_ipA | Delete a Virtual IP from a FortiGate device. This tool removes an existing Virtual IP object from the device configuration. Note that Virtual IPs in use by policies cannot be deleted. Parameters:
Returns:
|
| get_firewall_policy_detailC | Get detailed information for a specific firewall policy |
| create_address_objectA | Create a new address object on a FortiGate device. This tool adds a new network address object that can be used in firewall policies and other security rules. Parameters:
Address data should include:
Returns:
|
| create_service_objectA | Create a new service object on a FortiGate device. This tool adds a new network service object that defines protocols and ports for use in firewall policies. Parameters:
Service data should include:
Returns:
|
| create_static_routeA | Create a new static route on a FortiGate device. This tool adds a new static route to the device's routing configuration, defining how traffic to specific networks should be forwarded. Parameters:
Route data should include:
Returns:
|
| list_address_groupsA | List address groups on a FortiGate device with their member names. Address groups bundle address objects (and other groups) so one policy entry can reference many hosts/subnets. Use get_address_group_detail to resolve the members to IP values. Parameters:
Returns:
|
| get_address_group_detailA | Show one address group with every member resolved to its subnet, range or FQDN. Parameters:
Returns:
|
| create_address_groupA | Create a new address group from existing address object names. Parameters:
Returns:
|
| add_address_group_membersA | Add address objects to an existing address group, keeping the current members. Typical use: grant a new PC an exception that a policy already applies to the group (e.g. add a host object to an "allowed" group instead of editing the policy). Parameters:
Returns:
|
| remove_address_group_membersA | Remove address objects from an address group. FortiOS requires a group to keep at least one member; removing the last member is refused -- delete the group instead. Parameters:
Returns:
|
| delete_address_groupB | Delete an address group. FortiOS refuses while a policy still references the group. Parameters:
Returns:
|
| update_address_objectA | Update an existing address object (comment, subnet, range, FQDN, ...). Only the fields present in address_data change; FortiOS merges them into the object. Example address_data: {"subnet": "192.0.2.40 255.255.255.255", "comment": "HR workstation"} Parameters:
Returns:
|
| delete_address_objectA | Delete an address object. FortiOS refuses while a policy or group still references it. Parameters:
Returns:
|
| update_service_objectB | Update an existing custom service object (ports, protocol, comment). Example service_data: {"tcp-portrange": "3389", "comment": "RDP"} Parameters:
Returns:
|
| delete_service_objectA | Delete a custom service object. FortiOS refuses while a policy or service group references it. Parameters:
Returns:
|
| list_service_groupsB | List service groups with their member services resolved to protocol/ports. Parameters:
Returns:
|
| move_firewall_policyA | Move a firewall policy before or after another policy in the evaluation order. FortiGate evaluates policies top-down and applies the first match, so a host-specific policy must sit above the broader policy it is meant to override. Newly created policies are appended at the bottom; use this tool to position them. Parameters:
Returns:
|
| list_dhcp_serversB | List DHCP servers configured on a FortiGate device, including their reservations. Parameters:
Returns:
|
| list_dhcp_leasesA | List active DHCP leases (ip, mac, hostname, interface, expiry, reserved flag). Useful to find a PC's MAC address before creating a reservation. Parameters:
Returns:
|
| create_dhcp_reservationA | Reserve an IP address for a MAC address on a FortiGate DHCP server. The DHCP server is selected by dhcp_server_id, else by interface, else automatically by the server whose range/subnet contains the IP. Duplicate IP or MAC reservations are rejected before anything is written. Parameters:
Returns:
|
| delete_dhcp_reservationB | Delete a DHCP reservation identified by reservation_id, ip or mac. Parameters:
Returns:
|
| list_security_profilesB | List security (UTM) profiles of one type with a short summary each. Parameters:
Returns:
|
| get_security_profile_detailB | Show one security profile in depth. For application control lists the entries are shown in evaluation order with their action, categories and application signatures (resolved to names). For web filter profiles the FortiGuard category actions are grouped by action. Parameters:
Returns:
|
| list_ipsec_tunnelsB | List IPsec VPN tunnels with status, remote gateway, phase-2 selectors and traffic counters. Dial-up tunnels show the number of connected clients instead of a gateway. Parameters:
Returns:
|
| list_ssl_vpn_sessionsB | List active SSL-VPN sessions (user, source host, login time, duration). Parameters:
Returns:
|
| list_local_usersB | List local user accounts defined on the FortiGate (status, type, two-factor, email). Passwords are never returned by FortiOS. Parameters:
Returns:
|
| list_user_groupsB | List user groups and their members (local users and remote-server matches). Parameters:
Returns:
|
| list_firewall_auth_sessionsA | List users currently authenticated against identity-based firewall policies. Requires an API profile with permission on the user monitor (otherwise FortiOS returns 403). Parameters:
Returns:
|
| get_system_resourcesB | Show current CPU, memory, disk and session usage of a FortiGate device. Parameters:
Returns:
|
| list_active_sessionsA | Query the live session table with optional filters. Use it to check whether a host's traffic is actually flowing and which policy it matched. Parameters:
Returns:
|
| query_traffic_logA | Query forward traffic logs with optional filters (most recent first). Use it to answer "why is this host blocked / which policy handled this flow". Memory logs are the default (models without a log disk); pass source="disk" on models that log to disk. Parameters:
Returns:
|
| backup_configA | Download the running configuration and save it to a file on the MCP server host. Parameters:
Returns:
|
| cmdb_listA | List every object of any FortiOS configuration table (GET /api/v2/cmdb/{path}). The escape hatch for tables that have no dedicated tool. Examples of path: "firewall/policy", "system/interface", "vpn.ipsec/phase1-interface", "router/static", "user/local", "wireless-controller/vap", "system/sdwan". Secret-looking fields (passwords, PSKs, keys) are redacted; large responses are truncated, so narrow them with filter_expr, count or format_fields. Parameters:
Returns:
|
| cmdb_getA | Get one configuration object by key (GET /api/v2/cmdb/{path}/{key}). Examples: path "firewall/policy" key "56"; path "system/interface" key "port1"; path "vpn.ipsec/phase1-interface" key "branch-vpn". Secret fields are redacted. Parameters:
Returns:
|
| create_cmdb_objectA | Create a configuration object in any table from a raw JSON payload (POST /api/v2/cmdb/{path}). Use the typed create_* tools when one exists; this is for tables without one (e.g. "firewall/ippool", "firewall.schedule/recurring", "system/zone", "vpn.ipsec/phase2-interface"). The payload must use FortiOS field names. Parameters:
Returns:
|
| update_cmdb_objectA | Change fields of an existing configuration object (PUT /api/v2/cmdb/{path}/{key}). Only the fields in data change. Example: path "system/interface", key "vlan60-guest", data {"description": "Guest Wi-Fi"}. Parameters:
Returns:
|
| delete_cmdb_objectB | Delete a configuration object from any table (DELETE /api/v2/cmdb/{path}/{key}). FortiOS refuses while the object is still referenced elsewhere. Parameters:
Returns:
|
| monitor_getA | Read any live-status endpoint (GET /api/v2/monitor/{path}). Examples: "system/status", "router/ipv4", "vpn/ipsec", "license/status", "system/interface", "firewall/policy/select", "switch-controller/managed-switch", "wifi/client". Optional query parameters are passed through as params. Parameters:
Returns:
|
| execute_monitor_actionA | Run a monitor action (POST /api/v2/monitor/{path}): tunnel up/down, session close, cache flush, user deauthentication, etc. Examples: path "vpn/ipsec/tunnel_down" data {"p1name": "branch-vpn"}; path "firewall/session/close" data {"saddr": "10.0.0.5", "daddr": "...", "sport": 1, "dport": 443, "pro": "tcp"}; path "user/firewall/deauth" data {"user": "alice", "ip": "10.0.0.5"}. These change device state and require writes to be enabled. Parameters:
Returns:
|
| log_getA | Read raw log records from any log endpoint (GET /api/v2/log/{path}). path is "{memory|disk}/{type}/{subtype}", e.g. "memory/event/system", "memory/event/vpn", "memory/utm/webfilter", "memory/traffic/local", "disk/traffic/forward". Prefer query_traffic_log / query_event_log / query_utm_log for formatted output. Parameters:
Returns:
|
| lookup_policyA | Ask the FortiGate which firewall policy a hypothetical flow would match (monitor/firewall/policy-lookup), without sending any traffic. Use it to answer "would host X reach server Y on port Z, and through which rule?". Parameters:
Returns:
|
| lookup_routeB | Ask the routing table which route, interface and gateway reach a destination (monitor/router/lookup). Parameters:
Returns:
|
| execute_ipsec_tunnel_actionA | Bring an IPsec tunnel up or down (monitor/vpn/ipsec/tunnel_up | tunnel_down). Bringing a site-to-site tunnel down interrupts traffic until it renegotiates; requires writes to be enabled. Parameters:
Returns:
|
| get_fortiview_topA | FortiView top talkers from the live session statistics (monitor/fortiview/statistics). Parameters:
Returns:
|
| ping_from_deviceA | Ping a host from the FortiGate itself (monitor/network/diag-icmp-ping), useful to check reachability from the firewall's own perspective (e.g. through a VPN tunnel). Parameters:
Returns:
|
| geoip_lookupA | Resolve an IP address to its FortiGuard geolocation (country) via the device. Parameters:
Returns:
|
| query_event_logA | Query event logs by category: system (admin logins, config changes), vpn (tunnel up/down, dial-up logins), user (authentication), router, wireless, endpoint, ha, sdwan and more. Parameters:
Returns:
|
| query_utm_logA | Query UTM (security) logs: webfilter, app-ctrl, ips, virus, dns, emailfilter, dlp, ssl, anomaly, waf, file-filter, ssh, voip, icap, virtual-patch. Use it to see which site or application was blocked for a host and by which profile. Parameters:
Returns:
|
| get_log_settingsA | Show where the device sends logs: memory, disk, syslog, FortiAnalyzer and FortiCloud settings in one view. Parameters:
Returns:
|
| get_system_globalA | Show global system settings: hostname, admin ports/timeouts, timezone, management features. |
| get_dns_settingsB | Show the system DNS configuration (primary/secondary servers, domain, DoT/DoH protocol). |
| get_ntp_settingsA | Show the NTP configuration (sync mode, servers, server mode on interfaces). |
| list_adminsB | List administrator accounts with profile, trusted hosts and two-factor settings (passwords redacted). |
| list_api_usersB | List REST API users (api-user) with their admin profile and trusted hosts (keys redacted). |
| list_zonesB | List interface zones and their member interfaces. |
| list_snmp_communitiesB | List SNMP v1/v2c communities and their hosts (community strings redacted). |
| get_snmp_sysinfoC | Show SNMP agent status, contact, location and description. |
| list_syslog_settingsC | Show the primary syslog server settings (log.syslogd/setting). |
| get_fortianalyzer_settingsB | Show FortiAnalyzer logging settings (log.fortianalyzer/setting). |
| list_local_certificatesB | List local (device) certificates with subject, issuer and validity (private keys redacted). |
| list_ca_certificatesC | List trusted CA certificates installed on the device. |
| get_ha_statusA | Show HA cluster statistics (members, roles, sync state). Standalone units return an empty list. |
| get_license_statusC | Show FortiGuard/FortiCare license and subscription status. |
| list_firmwareA | Show the running firmware and available upgrade images (monitor/system/firmware). |
| get_system_timeA | Show the device clock and timezone (monitor/system/time). |
| get_performance_statusB | Show CPU/memory/session/uptime performance counters (monitor/system/performance/status). |
| get_security_ratingC | Show the Security Fabric security rating summary (monitor/system/security-rating). |
| list_running_processesB | List running processes with CPU/memory usage (monitor/system/running-processes). |
| list_ip_poolsC | List NAT IP pools (type, start/end IP, ARP reply). |
| list_vip_groupsB | List virtual IP groups and their member VIPs. |
| list_recurring_schedulesB | List recurring firewall schedules (days and time window). |
| list_onetime_schedulesB | List one-time firewall schedules (start/end datetime). |
| list_central_snat_rulesC | List central SNAT map rules. |
| list_traffic_shapersB | List shared traffic shapers (guaranteed/maximum bandwidth, priority). |
| list_shaping_policiesC | List traffic shaping policies. |
| list_internet_service_namesA | List FortiGuard Internet Service names that policies can reference (large list; use cmdb_list with a filter for lookups). |
| list_policy_routesC | List policy-based routes (router/policy). |
| get_bgp_configB | Show the BGP configuration (AS, router-id, neighbors, networks). |
| get_ospf_configB | Show the OSPF configuration (router-id, areas, networks, interfaces). |
| list_prefix_listsC | List router prefix lists. |
| list_route_mapsC | List router route maps. |
| get_sdwan_configC | Show the SD-WAN configuration (zones, members, health checks, rules). |
| list_sdwan_health_checksB | Show SD-WAN health-check results per member (latency, jitter, packet loss). |
| list_sdwan_membersB | Show SD-WAN member interface status and traffic. |
| list_ipv6_routesA | Show the IPv6 routing table (monitor/router/ipv6). |
| list_ipsec_phase1A | List IPsec phase-1 interfaces: type, remote gateway, IKE version, proposals, peer settings (PSKs redacted). |
| list_ipsec_phase2B | List IPsec phase-2 selectors: phase-1 name, local/remote subnets, proposals, auto-negotiate. |
| get_ssl_vpn_settingsA | Show SSL-VPN settings (status, port, source interfaces, portal mapping, tunnel IP pools). |
| list_ssl_vpn_portalsC | List SSL-VPN portals (tunnel mode, split tunneling, IP pools, web mode). |
| list_remote_certificatesC | List remote certificates (vpn.certificate/remote). |
| list_radius_serversA | List RADIUS servers (addresses, auth type, NAS IP; secrets redacted). |
| list_ldap_serversA | List LDAP servers (server, port, DN, bind type, secure mode; passwords redacted). |
| list_tacacs_serversB | List TACACS+ servers (secrets redacted). |
| list_saml_serversB | List SAML identity providers (entity IDs, SSO/SLO URLs). |
| list_fsso_agentsB | List FSSO collector agents (passwords redacted). |
| list_fortitokensB | List FortiTokens and their status/assignment (monitor/user/fortitoken). |
| list_endpoint_devicesB | List devices seen by the device inventory (monitor/user/device/query): IP, MAC, hostname, OS, interface. |
| list_arp_tableA | Show the ARP table (IP, MAC, interface, age). |
| list_lldp_neighborsB | Show LLDP neighbors (switch ports, neighbor system names). |
| list_managed_switchesB | List FortiSwitch units managed by the switch controller (monitor/switch-controller/managed-switch). |
| list_switch_port_statsC | Show FortiSwitch port statistics (monitor/switch-controller/port-stats). |
| list_interface_countersC | Show per-interface traffic counters and link state (monitor/system/interface). |
| list_wireless_ssidsA | List SSIDs (wireless-controller/vap): security mode, VLAN, broadcast, schedule (passphrases redacted). |
| list_ap_profilesB | List FortiAP profiles (platform, radios, SSIDs per radio). |
| list_managed_apsB | Show managed FortiAPs with status, IP, clients and firmware (monitor/wifi/managed_ap). |
| list_wifi_clientsB | Show connected Wi-Fi clients (SSID, MAC, IP, signal, AP). |
| list_rogue_apsB | Show detected rogue/neighbor access points (monitor/wifi/rogue_ap). |
| get_wifi_controller_settingsC | Show wireless controller settings (country, duplicate SSID handling, fake SSID action). |
| list_url_filtersB | List static URL filter tables used by web filter profiles (entries with action). |
| list_dns_domain_filtersC | List DNS filter domain lists (dnsfilter/domain-filter). |
| list_ips_custom_signaturesC | List custom IPS signatures (ips/custom). |
| list_application_groupsC | List application control groups (application/group). |
| health_checkB | Perform a comprehensive health check of the FortiGate MCP server. This tool checks the overall health and status of the MCP server, including device connectivity, service availability, and system resources. Returns:
|
| get_server_infoB | Get detailed information about the FortiGate MCP server. This tool provides comprehensive information about the server configuration, capabilities, and current operational status. Returns:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 137 tools
Most tools target distinct FortiGate resources or actions, but generic cmdb_list/cmdb_get/create_cmdb_object/monitor_get/log_get overlap heavily with many dedicated list/get/query tools. Descriptions do clarify when to use typed versus generic tools, but the sheer breadth of 137 tools makes misselection likely.
Predominantly consistent verb_noun snake_case naming (list_, get_, create_, update_, delete_, query_, execute_), which is predictable. A few deviations such as cmdb_list, cmdb_get, monitor_get, and log_get are minor but noticeable.
137 tools is far beyond a well-scoped set; even for a broad FortiGate management domain, this exceeds the 50+ extreme mismatch threshold. Many list/get tools could be consolidated or handled by the generic cmdb/monitor/log tools.
The surface covers core configuration CRUD for policies, addresses, services, VIPs, routes, and DHCP, plus extensive monitoring, logs, VPN, routing, wireless, HA, certificates, users, and generic cmdb/monitor/log escape hatches. There are no obvious dead ends for the stated domain.