PanOS MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NO_PROXY | No | Comma-separated list of hostnames/suffixes to bypass proxy. | |
| no_proxy | No | Comma-separated list of hostnames/suffixes to bypass proxy (lowercase). | |
| ALL_PROXY | No | Fallback proxy for all protocols. | |
| all_proxy | No | Fallback proxy (lowercase). | |
| HTTP_PROXY | No | Standard HTTP proxy. | |
| PANOS_HOST | No | The firewall or Panorama hostname or IP address. Required for single-firewall mode via environment variables. | |
| http_proxy | No | Standard HTTP proxy (lowercase). | |
| HTTPS_PROXY | No | Standard HTTPS proxy. | |
| PANOS_PROXY | No | Explicit proxy URL override (e.g., socks5h://10.0.1.168:2080). | |
| PANOS_API_KEY | No | The PanOS API key. Required for single-firewall mode via environment variables. | |
| PANOS_FIREWALLS_CONFIG | No | Path to a JSON file containing multiple firewall configurations. Defaults to ~/.config/panos-mcp/firewalls.json. |
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
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_firewallsA | [READ-ONLY] Lists all configured firewall targets. Shows names and hosts (never API keys). Indicates whether the 'firewall' parameter is required for other tools. |
| get_firewall_infoA | [READ-ONLY] Retrieves system information (hostname, model, serial, software version) from the PanOS firewall. Executes: show system info. |
| get_ha_statusA | [READ-ONLY] Retrieves high-availability (HA) state and peer information from the firewall. Executes: show high-availability state. |
| get_active_sessionsA | [READ-ONLY] Retrieves active session count and summary from the firewall. Executes: show session info. |
| get_system_resourcesA | [READ-ONLY] Retrieves system resource utilization including CPU, memory, and disk usage. Executes: show system resources. |
| get_interfacesA | [READ-ONLY] Retrieves all network interfaces with their status, IP addresses, and configuration. Executes: show interface all. |
| get_zonesA | [READ-ONLY] Retrieves all security zones configured on the firewall. Reads config at: /config/.../vsys/entry/zone. |
| get_routing_tableA | [READ-ONLY] Retrieves the current routing table from the firewall. Executes: show routing route. |
| get_arp_tableA | [READ-ONLY] Retrieves ARP table entries from the firewall. Executes: show arp entry all. |
| get_vlansB | [READ-ONLY] Retrieves VLAN configuration from the firewall. Reads config at: /config/.../network/vlan. |
| get_dhcp_leasesA | [READ-ONLY] Retrieves DHCP server lease information. Executes: show dhcp server lease all. |
| get_dns_proxyA | [READ-ONLY] Retrieves DNS proxy configuration. Reads config at: /config/.../network/dns-proxy. |
| get_static_routesA | [READ-ONLY] Retrieves static routes from a virtual router. Reads config at: /config/.../virtual-router/entry/routing-table/ip/static-route. |
| get_security_rulesA | [READ-ONLY] Retrieves all security policy rules from the firewall. Reads config at: /config/.../rulebase/security/rules. |
| get_security_profilesA | [READ-ONLY] Retrieves security profiles including antivirus, vulnerability, spyware, and URL filtering profiles. Reads config at: /config/.../vsys/entry/profiles. |
| get_security_profile_groupsB | [READ-ONLY] Retrieves security profile groups that combine multiple security profiles. Reads config at: /config/.../vsys/entry/profile-group. |
| get_pbf_rulesA | [READ-ONLY] Retrieves policy-based forwarding (PBF) rules. Reads config at: /config/.../rulebase/pbf/rules. |
| get_dos_profilesA | [READ-ONLY] Retrieves DoS protection profiles. Reads config at: /config/.../profiles/dos-protection. |
| get_qos_rulesA | [READ-ONLY] Retrieves QoS policy rules. Reads config at: /config/.../rulebase/qos/rules. |
| get_address_objectsA | [READ-ONLY] Retrieves all address objects (IP addresses, ranges, FQDNs) defined on the firewall. Reads config at: /config/.../vsys/entry/address. |
| get_address_groupsB | [READ-ONLY] Retrieves all address groups that contain multiple address objects. Reads config at: /config/.../vsys/entry/address-group. |
| get_service_objectsA | [READ-ONLY] Retrieves all service objects (port/protocol definitions) from the firewall. Reads config at: /config/.../vsys/entry/service. |
| get_service_groupsA | [READ-ONLY] Retrieves all service groups that contain multiple service objects. Reads config at: /config/.../vsys/entry/service-group. |
| get_application_filtersA | [READ-ONLY] Retrieves application filters used for application-based policy rules. Reads config at: /config/.../vsys/entry/application-filter. |
| get_tagsA | [READ-ONLY] Retrieves all tags defined on the firewall. Reads config at: /config/.../vsys/entry/tag. |
| get_nat_rulesA | [READ-ONLY] Retrieves all NAT policy rules including source NAT, destination NAT, and bidirectional rules. Reads config at: /config/.../rulebase/nat/rules. |
| get_userid_mappingsA | [READ-ONLY] Retrieves IP-to-user mappings from User-ID, showing which users are mapped to which IP addresses. Executes: show user ip-user-mapping all. |
| get_userid_groupsA | [READ-ONLY] Retrieves user groups known to the firewall via User-ID. Executes: show user group list. |
| get_userid_configB | [READ-ONLY] Retrieves User-ID configuration settings including agent configuration and group mapping. Reads config at: /config/.../vsys/entry/user-id-agent. |
| get_adminsA | [READ-ONLY] Retrieves all administrator accounts configured on the firewall. Reads config at: /config/mgt-config/users. |
| get_admin_rolesA | [READ-ONLY] Retrieves administrator role definitions and their permissions. Reads config at: /config/.../vsys/entry/admin-role. |
| get_auth_profilesA | [READ-ONLY] Retrieves authentication profiles including RADIUS, LDAP, and TACACS+ configurations. Reads config at: /config/shared/authentication-profile. |
| get_ipsec_tunnelsA | [READ-ONLY] Retrieves IPSec VPN tunnel status and security associations. Executes: show vpn ipsec-sa. |
| get_globalprotect_usersA | [READ-ONLY] Retrieves currently connected GlobalProtect VPN users. Executes: show global-protect-gateway current-user. |
| get_globalprotect_configA | [READ-ONLY] Retrieves GlobalProtect gateway and portal configuration. Reads config at: /config/.../vsys/entry/global-protect. |
| panorama_get_managed_devicesA | [READ-ONLY] Retrieves all firewalls managed by Panorama with their connection status. Executes: show devices all. |
| panorama_get_device_groupsB | [READ-ONLY] Retrieves all device groups configured in Panorama. Reads config at: /config/.../device-group. |
| panorama_get_templatesA | [READ-ONLY] Retrieves all templates configured in Panorama. Reads config at: /config/.../template. |
| panorama_get_template_stacksA | [READ-ONLY] Retrieves all template stacks configured in Panorama. Reads config at: /config/.../template-stack. |
| panorama_get_shared_address_objectsA | [READ-ONLY] Retrieves shared address objects defined at Panorama level. Reads config at: /config/shared/address. |
| panorama_get_shared_address_groupsA | [READ-ONLY] Retrieves shared address groups defined at Panorama level. Reads config at: /config/shared/address-group. |
| panorama_get_shared_service_objectsA | [READ-ONLY] Retrieves shared service objects defined at Panorama level. Reads config at: /config/shared/service. |
| panorama_get_shared_service_groupsA | [READ-ONLY] Retrieves shared service groups defined at Panorama level. Reads config at: /config/shared/service-group. |
| panorama_get_pre_rulesA | [READ-ONLY] Retrieves pre-rules from a device group (rules pushed before local firewall rules). Reads config at: /config/.../device-group/entry/pre-rulebase/security/rules. |
| panorama_get_post_rulesA | [READ-ONLY] Retrieves post-rules from a device group (rules pushed after local firewall rules). Reads config at: /config/.../device-group/entry/post-rulebase/security/rules. |
| panorama_get_device_group_nat_rulesA | [READ-ONLY] Retrieves NAT rules from a device group (pre or post rulebase). Reads config at: /config/.../device-group/entry/{pre|post}-rulebase/nat/rules. |
| panorama_get_log_collectorsA | [READ-ONLY] Retrieves log collector configuration and status from Panorama. Executes: show log-collector all. |
| panorama_get_collector_groupsB | [READ-ONLY] Retrieves collector group configuration from Panorama. Reads config at: /config/.../log-collector-group. |
| panorama_get_push_statusB | [READ-ONLY] Retrieves the status of the last configuration push to managed devices. Executes: show config push status. |
| panorama_get_commit_statusA | [READ-ONLY] Retrieves the status of pending commits in Panorama. Executes: show jobs all. |
| panorama_get_managed_device_softwareA | [READ-ONLY] Retrieves software and content versions on all managed firewalls. Executes: show devices all. |
| panorama_get_ha_statusA | [READ-ONLY] Retrieves Panorama high-availability status for Panorama HA pairs. Executes: show high-availability state. |
| panorama_get_device_group_hierarchyA | [READ-ONLY] Retrieves the device group hierarchy showing parent-child relationships. Reads config at: /config/readonly/.../device-group. |
| panorama_get_shared_security_profilesA | [READ-ONLY] Retrieves shared security profiles defined at Panorama level. Reads config at: /config/shared/profiles. |
| panorama_get_shared_profile_groupsA | [READ-ONLY] Retrieves shared security profile groups defined at Panorama level. Reads config at: /config/shared/profile-group. |
| get_traffic_logsA | [READ-ONLY] Retrieves recent traffic logs from the firewall using the PanOS log API (type=log). Supports filtering by query and limiting result count. |
| get_threat_logsA | [READ-ONLY] Retrieves recent threat logs from the firewall using the PanOS log API (type=log). Supports filtering by query and limiting result count. |
| get_system_logsB | [READ-ONLY] Retrieves recent system logs from the firewall using the PanOS log API (type=log). Supports filtering by query and limiting result count. |
| get_config_logsA | [READ-ONLY] Retrieves recent configuration change logs from the firewall using the PanOS log API (type=log). Supports filtering by query and limiting result count. |
| get_url_filter_logsA | [READ-ONLY] Retrieves recent URL filtering logs from the firewall using the PanOS log API (type=log&log-type=url). Shows URLs visited and actions taken (allow/block/continue/override) by URL filtering policy. |
| get_wildfire_statusA | [READ-ONLY] Retrieves WildFire cloud connection status and statistics. Executes: show wildfire status. |
| get_antivirus_versionA | [READ-ONLY] Retrieves current antivirus, threat, and WildFire signature versions and release dates. Executes: show system info (extracts signature fields). |
| get_content_versionsA | [READ-ONLY] Retrieves available content update versions (antivirus, applications, threats). Executes: request content upgrade info. |
| get_url_categoriesB | [READ-ONLY] Retrieves predefined URL filtering categories. Reads config at: /config/predefined/pan-url-categories. |
| get_certificatesA | [READ-ONLY] Retrieves SSL/TLS certificates configured on the firewall. Reads config at: /config/shared/certificate. |
| get_decryption_rulesA | [READ-ONLY] Retrieves SSL decryption policy rules. Reads config at: /config/.../rulebase/decryption/rules. |
| get_decryption_profilesA | [READ-ONLY] Retrieves SSL decryption profiles. Reads config at: /config/.../profiles/decryption. |
| get_licensesA | [READ-ONLY] Retrieves license status and expiration dates for all features. Executes: request license info. |
| get_license_usageB | [READ-ONLY] Retrieves license usage information including VM model, serial, capacity tier, and mode. Executes: show system info (extracts license fields). |
| get_config_xpathA | [READ-ONLY] Retrieves configuration at a specific XPath location. This is a flexible read tool for querying any part of the PanOS configuration tree. |
| panorama_list_firewallsA | [READ-ONLY] Lists firewalls managed by Panorama: hostname, serial, IP, model, version, connection and policy/template sync state. Use the hostname or serial as 'device' in other tools. |
| panorama_list_device_groupsA | [READ-ONLY] Lists device groups with their parent chain and member firewalls (hostname, serial, connected). Policies of a device group include everything inherited from shared and its parents. |
| search_logsA | [READ-ONLY] Searches logs stored on Panorama (traffic, threat, url, wildfire, data, globalprotect, userid, auth, decryption, system) with structured filters and a time window. Returns trimmed entries, each with a '_why' explanation of what blocked it. Structured filters are server-side for traffic/threat/url/wildfire/data/decryption; for other types user and src_ip are matched locally. |
| userid_lookupA | [READ-ONLY] User-ID state on a managed firewall: which user is mapped to an IP (show user ip-user-mapping) and/or which groups a user belongs to (show user user-ids match-user). A missing mapping means user/group-based rules cannot match that IP. |
| gp_current_usersB | [READ-ONLY] GlobalProtect users currently connected to a gateway firewall (show global-protect-gateway current-user), optionally for one user. |
| test_security_policy_matchA | [READ-ONLY] Asks a managed firewall which security rule matches a flow (test security-policy-match). This is the ground truth, including local rules invisible from Panorama. Include source_user so user/group-based rules are evaluated. |
| test_url_categoryA | [READ-ONLY] Asks a managed firewall how it categorizes a URL (test url): PAN-DB categories from the local cache and the cloud. Custom categories are not shown here: use url_category_find. |
| show_sessionsB | [READ-ONLY] Active sessions on a managed firewall matching a filter (show session all filter). Useful while the user reproduces the issue. |
| find_security_rulesA | [READ-ONLY] Searches security or decryption rules (pre/post) in Panorama's running config. Matches 'contains' against rule name, zones, addresses, users, applications, services, categories, tags and description. With 'device_group', rules of that group AND everything it inherits (shared, parent groups) are returned in evaluation order; with 'device', only rules applying to that firewall. Output flags rules without log forwarding. |
| edl_lookupA | [READ-ONLY] Checks whether an IP, domain or URL is present in the External Dynamic Lists applying to a firewall (config from Panorama, current content from the firewall), including EDL exception lists. |
| run_show_commandA | [READ-ONLY] Runs an arbitrary read-only operational command (root element must be or ) on Panorama, or on a managed firewall with 'device'. Use when no dedicated tool exists. |
| url_category_listA | [READ-ONLY] Lists custom URL categories (shared and device groups) with their type and number of entries. Use url_category_get for the entries. |
| url_category_getA | [READ-ONLY] Returns the entries of a custom URL category (URL list, or PAN-DB categories for 'Category Match'). Searches shared and every device group unless device_group is set. |
| url_category_findA | [READ-ONLY] Finds which existing custom URL categories already cover a URL (PAN-OS wildcard/prefix rules), which ones contain the same domain but do not match (pattern issue), and with 'device' the PAN-DB category. Run this BEFORE proposing any new URL category. |
| url_category_usageA | [READ-ONLY] Shows where URL categories are used: security/decryption rules referencing them (in evaluation order when 'device' is set) and URL filtering profiles acting on them, with the rules using those profiles. |
| diagnose_user_blocksA | [READ-ONLY] START HERE for a ticket. Builds a timeline of everything that blocked a user or source IP across traffic, threat, URL, WildFire, data filtering, decryption and GlobalProtect logs, grouped and explained (which layer blocked, why, what to check next). With reported_url, flags blocks on OTHER domains at the same time (upload/storage/CDN/SSO dependencies of the site). |
| diagnose_url_accessA | [READ-ONLY] Full analysis of why a URL is blocked/allowed: existing custom categories covering it (or same-domain entries that do not match), PAN-DB category, rules and URL filtering profiles using those categories, recent URL logs for the user, and conclusions. Prevents proposing a category that already exists. |
| diagnose_threat_blockA | [READ-ONLY] Analyzes a threat/file block (antivirus, WildFire, anti-spyware, vulnerability, file blocking, data filtering): finds the log, the rule and the security profile actually applied (profile group resolved), whether an exception for that threat ID ALREADY exists (in the applied profile or elsewhere), the matching file-blocking rule, and the WildFire verdict. |
| diagnose_flowA | [READ-ONLY] Analyzes a flow (source -> destination:port) on a firewall: User-ID mapping and groups of the source, rule the firewall actually matches (test security-policy-match with the user), rules allowing the requested application, and recent traffic logs explained. Use for 'no rule allows X', upload app functions, App-ID or network issues. |
| start_ticket_diagnosisA | [READ-ONLY] Call this FIRST when the user shares a support ticket or asks to debug a blocked user: returns the diagnosis method, the rules to follow and the expected answer format. |
| get_troubleshooting_playbookA | [READ-ONLY] Returns the troubleshooting playbook: visibility pitfalls, third-party dependencies, URL filtering, file/threat false positives, App-ID, User-ID, NAT, decryption, DNS security, EDL, zone protection. Read it when the cause is unclear or before concluding. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| diagnose_ticket | Diagnose a ServiceNow ticket excerpt: extract facts, gather evidence with the diagnose_* tools, and propose the minimal fix without duplicating existing config. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| troubleshooting-playbook | Troubleshooting playbook for Panorama-managed firewalls |
TDQS
Scored across 91 tools
There are several overlapping tools: get_globalprotect_users and gp_current_users both return current GlobalProtect users, get_active_sessions and show_sessions both retrieve active sessions, and list_firewalls, panorama_list_firewalls, and panorama_get_managed_devices all list firewalls in slightly different scopes. Descriptions help clarify the Panorama vs direct API distinction, but the duplicates cause ambiguity.
The majority of tools follow a get_<resource> or panorama_get_<resource> pattern, which is clear and predictable. However, there are inconsistent verbs (list_firewalls vs get_firewall_info, panorama_list_firewalls vs panorama_get_managed_devices) and domain-specific names like gp_current_users, test_security_policy_match, find_security_rules, and diagnose_* that break the pattern. Overall, the names are readable and the resource is usually clear, so the inconsistency is minor.
At 91 tools, the server far exceeds the well-scoped range and is in the extreme mismatch territory. While the domain is broad, this many tools overwhelms an agent's tool selection and many could be consolidated (e.g., generic get_* patterns for similar resources). The sheer count makes the tool surface feel bloated rather than focused.
For its stated read-only monitoring and troubleshooting purpose, the coverage is exceptionally thorough: it spans firewall system/network objects, security rules, NAT, VPN, logs, User-ID, GlobalProtect, Panorama management, and diagnostic workflows. The inclusion of run_show_command and get_config_xpath as flexible fallbacks closes any remaining gaps.