MCP server for Palo Alto Networks PAN-OS and Panorama XML API integration
Server has 4 tools with significant definition gaps. Tool names lack clear action verbs (get_system_info is acceptable, but op_command and commit_config are vague). Descriptions exist but are sparse (10-50 chars for most) and lack WHEN/WHY context. Input schemas are present but incomplete: get_system_info has empty schema ({}), op_command lacks description for xml_cmd parameter, commit_config and commit_all_shared_policy have minimal param descriptions. No output schemas documented. Error handling is absent, no guidance on retryability, user-fixable errors, or recovery paths. No tool annotations (readOnlyHint, destructiveHint). Security concern: PA_API_KEY and PA_HOST are hardcoded globals, not injected. Overall, definitions are below production baseline.
Commit (push) changes from Panorama to managed devices. If 'validate_only' is True, no actual commit is performed (just validation). If 'device_group' is provided, push only to that device-group.
Commit the candidate config on the firewall. Optionally handle force commits or partial commits (by providing partial_xml).
Example MCP tool function that retrieves basic system info from a PAN-OS device using the XML API.
Executes an arbitrary operational command (e.g. <show><system><info></info></system></show>) or <request><restart><system></system></restart></request>
get_system_info has empty input schema ({}). Tool is not self-documenting.
Descriptions are too short (10-50 chars) and lack WHEN/WHY context. Baseline is 194 chars. LLMs cannot determine when to select these tools over alternatives.
op_command parameter 'xml_cmd' has no description in the schema. LLMs cannot infer what XML format is expected or provide examples.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., device_id, status).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | 2026-07-28+ | v2 |
Credentials (PA_API_KEY, PA_HOST) hardcoded as module globals. Per pattern:secret-injection, credentials must be injected server-side via environment or vault, never exposed as tool parameters or globals.