MCP Hub
Back to servers

scm-mcp

A Model Context Protocol server for managing Palo Alto Networks Strata Cloud Manager firewall configurations through natural language in Claude. It provides 149 tools covering the full configuration lifecycle including policy objects, security rules, NAT, and profiles with multi-tenant support.

glama
Updated
Apr 19, 2026

scm-mcp

A Model Context Protocol (MCP) server for Palo Alto Networks Strata Cloud Manager (SCM). Exposes 149 tools covering the full SCM configuration lifecycle — policy objects, security rules, NAT, profiles, decryption, QoS, and more — so you can manage firewall configuration through natural language in Claude Code or Claude Desktop.

Features

  • 149 tools across 9 functional areas
  • Multi-tenant (multi-TSG) support — target different tenants per tool call with named aliases
  • Full CRUD for all supported resource types
  • Zero infrastructure — runs as a local stdio process, no server to maintain
  • Built on the pan-scm-sdk which handles OAuth2 token lifecycle, pagination, and Pydantic validation automatically

Tool Coverage

AreaToolsResources
Setup12Folders, Snippets
Objects45Addresses, Address Groups, Services, Service Groups, Tags, Log Forwarding Profiles, HTTP Server Profiles, Syslog Server Profiles
Policy Objects24Applications, Application Groups, Application Filters, Schedules, External Dynamic Lists
Security26Security Rules, Security Zones, Decryption Rules, Authentication Rules
Network17NAT Rules, PBF Rules, QoS Rules
Profiles24Anti-Spyware, WildFire, Vulnerability, URL Access, URL Categories, DNS Security, Decryption, File Blocking, Zone Protection
Operations4Commit, Job Status, List Jobs, List TSG Profiles
Total149

Requirements

Installation

1. Clone and install

git clone https://github.com/your-username/scm-mcp.git
cd scm-mcp
python -m venv .venv
source .venv/bin/activate      # Windows: .venv\Scripts\activate
pip install -e .

2. Configure credentials

cp .env.example .env

Edit .env with your SCM service account credentials:

SCM_CLIENT_ID=your_client_id_here
SCM_CLIENT_SECRET=your_client_secret_here
SCM_TSG_ID=your_default_tsg_id_here

# Optional: named aliases for multi-tenant use
# SCM_TSG_PROD=prod_tsg_id_here
# SCM_TSG_LAB=lab_tsg_id_here

Where to find credentials: SCM portal → Settings → Service Accounts → Create. The TSG ID appears in the tenant URL: https://stratacloudmanager.paloaltonetworks.com/tenants/<TSG_ID>/.

3. Register with Claude Code

claude mcp add scm -- /path/to/scm-mcp/.venv/bin/python -m src.server

Or add to .claude/settings.json manually:

{
  "mcpServers": {
    "scm": {
      "command": "/path/to/scm-mcp/.venv/bin/python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/scm-mcp"
    }
  }
}

4. Register with Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "scm": {
      "command": "/path/to/scm-mcp/.venv/bin/python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/scm-mcp",
      "env": {
        "SCM_CLIENT_ID": "your_client_id",
        "SCM_CLIENT_SECRET": "your_client_secret",
        "SCM_TSG_ID": "your_tsg_id"
      }
    }
  }
}

Multi-Tenant Usage

Every tool accepts an optional tsg_id parameter. When omitted, the default SCM_TSG_ID is used.

Named aliases — define them in .env:

SCM_TSG_PROD=1234567890
SCM_TSG_LAB=9876543210

Then pass the alias name to any tool:

# List which TSGs are configured
scm_list_tsg_profiles()

# Query the PROD tenant
scm_list_addresses(folder="All", tsg_id="PROD")

# Copy an object between tenants
scm_get_address(address_id="<uuid>", tsg_id="PROD")
scm_create_address(name="web-servers", folder="Texas", ip_netmask="10.0.1.0/24", tsg_id="LAB")

You can also pass a raw TSG ID string directly if no alias is configured.

Project Structure

scm-mcp/
├── src/
│   ├── server.py            # MCP server entry point and tool registration
│   ├── client.py            # Per-TSG Scm client factory with alias resolution
│   ├── utils.py             # Serialization (Pydantic → dict) and error handling
│   └── tools/
│       ├── setup.py         # Folders, Snippets
│       ├── objects.py       # Addresses, Address Groups, Services, Service Groups,
│       │                    #   Tags, Log/HTTP/Syslog Server Profiles
│       ├── policy_objects.py# Applications, App Groups, App Filters,
│       │                    #   Schedules, External Dynamic Lists
│       ├── security.py      # Security Rules, Security Zones,
│       │                    #   Decryption Rules, Authentication Rules
│       ├── network.py       # NAT Rules, PBF Rules, QoS Rules
│       ├── profiles.py      # Anti-Spyware, WildFire, Vulnerability, URL Access,
│       │                    #   URL Categories, DNS Security, Decryption,
│       │                    #   File Blocking, Zone Protection Profiles
│       └── operations.py    # Commit, Job Status, List Jobs, List TSG Profiles
├── .env.example             # Credential template (commit this)
├── .env                     # Real credentials (gitignored)
├── pyproject.toml           # Project metadata and dependencies
└── README.md

Example Prompts

Once the MCP server is connected, you can use natural language in Claude Code:

Show me all security rules in the Texas folder.

Create an address object for our web server farm: 10.10.1.0/24 in the Texas folder, tagged "web-tier".

Copy all address objects from the PROD tenant into the LAB tenant under the same folder.

Create a security rule allowing HTTPS from the trust zone to the DMZ zone for the web-servers address group. Use the best-practice security profile group.

What external dynamic lists are configured and when do they refresh?

Commit the changes in the Texas and California folders with description "Q2 policy update".

Tool Reference

Operations

ToolDescription
scm_list_tsg_profilesList configured TSG profiles and their aliases
scm_commitCommit staged changes and push to devices
scm_get_job_statusPoll an async commit job for completion
scm_list_jobsList recent SCM jobs

Setup

ToolDescription
scm_list_foldersList all folders
scm_get_folderGet folder by UUID
scm_create_folderCreate a folder
scm_update_folderRename or redescribe a folder
scm_delete_folderDelete a folder
scm_list_snippetsList all snippets
scm_get_snippetGet snippet by UUID
scm_create_snippetCreate a snippet
scm_update_snippetUpdate a snippet
scm_delete_snippetDelete a snippet
scm_associate_snippet_to_folderAssociate a snippet with a folder
scm_disassociate_snippet_from_folderRemove snippet-folder association

Objects

ToolDescription
scm_list_addressesList address objects
scm_get_addressGet address by UUID
scm_create_addressCreate an address (IP/CIDR, range, wildcard, or FQDN)
scm_update_addressUpdate an address
scm_delete_addressDelete an address
scm_list_address_groupsList address groups
scm_get_address_groupGet address group by UUID
scm_create_address_groupCreate a static or dynamic address group
scm_update_address_groupUpdate an address group
scm_delete_address_groupDelete an address group
scm_list_servicesList service objects
scm_get_serviceGet service by UUID
scm_create_serviceCreate a TCP/UDP service
scm_update_serviceUpdate a service
scm_delete_serviceDelete a service
scm_list_service_groupsList service groups
scm_get_service_groupGet service group by UUID
scm_create_service_groupCreate a service group
scm_update_service_groupUpdate a service group
scm_delete_service_groupDelete a service group
scm_list_tagsList tags
scm_get_tagGet tag by UUID
scm_create_tagCreate a tag
scm_update_tagUpdate a tag
scm_delete_tagDelete a tag
scm_list_log_forwarding_profilesList log forwarding profiles
scm_get_log_forwarding_profileGet log forwarding profile by UUID
scm_create_log_forwarding_profileCreate a log forwarding profile
scm_delete_log_forwarding_profileDelete a log forwarding profile
scm_list_http_server_profilesList HTTP server profiles
scm_get_http_server_profileGet HTTP server profile by UUID
scm_create_http_server_profileCreate an HTTP server profile
scm_delete_http_server_profileDelete an HTTP server profile
scm_list_syslog_server_profilesList syslog server profiles
scm_get_syslog_server_profileGet syslog server profile by UUID
scm_create_syslog_server_profileCreate a syslog server profile
scm_delete_syslog_server_profileDelete a syslog server profile

Policy Objects

ToolDescription
scm_list_applicationsList application objects
scm_get_applicationGet application by UUID
scm_create_applicationCreate a custom application
scm_update_applicationUpdate a custom application
scm_delete_applicationDelete a custom application
scm_list_application_groupsList application groups
scm_get_application_groupGet application group by UUID
scm_create_application_groupCreate an application group
scm_update_application_groupUpdate an application group
scm_delete_application_groupDelete an application group
scm_list_application_filtersList application filters
scm_get_application_filterGet application filter by UUID
scm_create_application_filterCreate a dynamic application filter
scm_delete_application_filterDelete an application filter
scm_list_schedulesList schedule objects
scm_get_scheduleGet schedule by UUID
scm_create_scheduleCreate a recurring or one-time schedule
scm_update_scheduleUpdate a schedule
scm_delete_scheduleDelete a schedule
scm_list_external_dynamic_listsList external dynamic lists (EDLs)
scm_get_external_dynamic_listGet EDL by UUID
scm_create_external_dynamic_listCreate an IP/URL/domain EDL
scm_update_external_dynamic_listUpdate an EDL
scm_delete_external_dynamic_listDelete an EDL

Security

ToolDescription
scm_list_security_rulesList security policy rules
scm_get_security_ruleGet security rule by UUID
scm_create_security_ruleCreate a security rule
scm_update_security_ruleUpdate a security rule
scm_delete_security_ruleDelete a security rule
scm_move_security_ruleReorder a rule (top/bottom/before/after)
scm_list_security_zonesList security zones
scm_get_security_zoneGet security zone by UUID
scm_create_security_zoneCreate a security zone
scm_update_security_zoneUpdate a security zone
scm_delete_security_zoneDelete a security zone
scm_list_decryption_rulesList decryption policy rules
scm_get_decryption_ruleGet decryption rule by UUID
scm_create_decryption_ruleCreate a decrypt/no-decrypt rule
scm_update_decryption_ruleUpdate a decryption rule
scm_delete_decryption_ruleDelete a decryption rule
scm_list_authentication_rulesList authentication policy rules
scm_get_authentication_ruleGet authentication rule by UUID
scm_create_authentication_ruleCreate an authentication rule
scm_update_authentication_ruleUpdate an authentication rule
scm_delete_authentication_ruleDelete an authentication rule

Network

ToolDescription
scm_list_nat_rulesList NAT rules
scm_get_nat_ruleGet NAT rule by UUID
scm_create_nat_ruleCreate a NAT rule (IPv4, NAT64, NPTv6)
scm_update_nat_ruleUpdate a NAT rule
scm_delete_nat_ruleDelete a NAT rule
scm_list_pbf_rulesList policy-based forwarding rules
scm_get_pbf_ruleGet PBF rule by UUID
scm_create_pbf_ruleCreate a PBF rule
scm_update_pbf_ruleUpdate a PBF rule
scm_delete_pbf_ruleDelete a PBF rule
scm_list_qos_rulesList QoS policy rules
scm_get_qos_ruleGet QoS rule by UUID
scm_create_qos_ruleCreate a QoS rule
scm_update_qos_ruleUpdate a QoS rule
scm_delete_qos_ruleDelete a QoS rule

Security Profiles

ToolDescription
scm_list_anti_spyware_profilesList anti-spyware profiles
scm_get_anti_spyware_profileGet anti-spyware profile by UUID
scm_create_anti_spyware_profileCreate an anti-spyware profile
scm_delete_anti_spyware_profileDelete an anti-spyware profile
scm_list_wildfire_profilesList WildFire antivirus profiles
scm_get_wildfire_profileGet WildFire profile by UUID
scm_create_wildfire_profileCreate a WildFire profile
scm_delete_wildfire_profileDelete a WildFire profile
scm_list_vulnerability_profilesList vulnerability protection profiles
scm_get_vulnerability_profileGet vulnerability profile by UUID
scm_create_vulnerability_profileCreate a vulnerability protection profile
scm_delete_vulnerability_profileDelete a vulnerability protection profile
scm_list_url_access_profilesList URL access (filtering) profiles
scm_get_url_access_profileGet URL access profile by UUID
scm_create_url_access_profileCreate a URL access profile
scm_delete_url_access_profileDelete a URL access profile
scm_list_url_categoriesList custom URL categories
scm_get_url_categoryGet URL category by UUID
scm_create_url_categoryCreate a custom URL category
scm_delete_url_categoryDelete a custom URL category
scm_list_dns_security_profilesList DNS security profiles
scm_get_dns_security_profileGet DNS security profile by UUID
scm_create_dns_security_profileCreate a DNS security profile
scm_delete_dns_security_profileDelete a DNS security profile
scm_list_decryption_profilesList SSL/TLS decryption profiles
scm_get_decryption_profileGet decryption profile by UUID
scm_create_decryption_profileCreate a decryption profile
scm_delete_decryption_profileDelete a decryption profile
scm_list_file_blocking_profilesList file blocking profiles
scm_get_file_blocking_profileGet file blocking profile by UUID
scm_create_file_blocking_profileCreate a file blocking profile
scm_delete_file_blocking_profileDelete a file blocking profile
scm_list_zone_protection_profilesList zone protection profiles
scm_get_zone_protection_profileGet zone protection profile by UUID
scm_create_zone_protection_profileCreate a zone protection profile
scm_delete_zone_protection_profileDelete a zone protection profile

Environment Variables

VariableRequiredDescription
SCM_CLIENT_IDYesOAuth2 client ID from the SCM service account
SCM_CLIENT_SECRETYesOAuth2 client secret from the SCM service account
SCM_TSG_IDYesDefault Tenant Service Group ID
SCM_TSG_<NAME>NoNamed TSG alias — pass <NAME> as tsg_id to any tool

Authentication

SCM uses OAuth2 client credentials flow. Tokens have a 15-minute TTL and are automatically refreshed by the underlying pan-scm-sdk. No token management is required.

Service accounts are created in the SCM portal under Settings > Identity & Access > Service Accounts. The account needs appropriate role permissions for the resources you intend to manage.

Contributing

Issues and pull requests welcome. This project is built on pan-scm-sdk — if you need a resource type that isn't covered here, check whether the SDK supports it first.

License

MIT

Reviews

No reviews yet

Sign in to write a review