Skip to main content

MCP server for managing pfSense firewalls through AI assistants

Project description

mcp-pfsense

PyPI Python License: MIT

MCP server for managing pfSense firewalls through AI assistants like Claude, ChatGPT, and Copilot.

Requires: pfrest package installed on your pfSense instance (provides the REST API).

Features

17 tools across 6 categories:

Category Tools Description
System get_system_status, get_interfaces Version, CPU, memory, uptime, temperature, network interfaces
Firewall list_firewall_rules, add_firewall_rule, delete_firewall_rule, list_firewall_aliases Rule management with interface filtering, alias listing
DHCP list_dhcp_leases, list_dhcp_static_mappings, add_dhcp_static_mapping, delete_dhcp_static_mapping Active leases, IP reservations
DNS list_dns_host_overrides, add_dns_host_override, delete_dns_host_override Unbound DNS Resolver host overrides
Monitoring get_gateway_status, get_arp_table, list_services Gateway health, connected devices, service status
Services restart_service Restart any pfSense service

Safety

All destructive operations (delete rules, delete mappings, restart services) require two-step confirmation — the tool returns a warning on first call and only executes when called again with confirm=true.

Installation

# Using uvx (recommended)
uvx mcp-pfsense

# Using pip
pip install mcp-pfsense

Prerequisites

  1. pfSense with pfrest package installed
  2. A user account with API access (typically admin)

Configuration

Set environment variables:

Variable Required Default Description
PFSENSE_HOST Yes pfSense hostname or IP
PFSENSE_PASSWORD Yes API user password
PFSENSE_USERNAME No admin API username
PFSENSE_PORT No 443 API port
PFSENSE_SCHEME No https http or https
PFSENSE_VERIFY_SSL No false Verify SSL certificate

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "pfsense": {
      "command": "uvx",
      "args": ["mcp-pfsense"],
      "env": {
        "PFSENSE_HOST": "10.10.10.1",
        "PFSENSE_PASSWORD": "your-password"
      }
    }
  }
}

Claude Code

claude mcp add pfsense -- uvx mcp-pfsense

Then set environment variables in your shell or .env file.

Usage Examples

Once connected, ask your AI assistant:

  • "What's the pfSense system status?"
  • "Show me all firewall rules on the LAN interface"
  • "List active DHCP leases"
  • "Add a DNS entry for nas.home.lan pointing to 10.10.10.50"
  • "What devices are connected to the network?" (ARP table)
  • "Show gateway health and latency"
  • "Create a firewall rule to allow TCP port 8080 on LAN"
  • "Reserve IP 10.10.10.60 for MAC aa:bb:cc:dd:ee:20"

API Compatibility

  • pfSense: 2.7.x (tested on 2.7.2)
  • pfrest: v2.x (REST API v2)
  • Python: 3.11+

Note: pfrest runs on nginx (port 80 by default), separate from the pfSense WebGUI (lighttpd on port 443). If your pfrest is configured on a non-standard port, set PFSENSE_PORT and PFSENSE_SCHEME accordingly.

Development

git clone https://github.com/antonio-mello-ai/mcp-pfsense.git
cd mcp-pfsense
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# Run tests
pytest

# Lint and type check
ruff check .
mypy src/

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_pfsense-0.1.1.tar.gz (10.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_pfsense-0.1.1-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file mcp_pfsense-0.1.1.tar.gz.

File metadata

  • Download URL: mcp_pfsense-0.1.1.tar.gz
  • Upload date:
  • Size: 10.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for mcp_pfsense-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b24de074ad1bd24b37571229a5a37b69abb62e545b49ee7ddf8e8568e6e6e83f
MD5 359e32992c63c651dec95eb2700d6fd2
BLAKE2b-256 cb26ee1c36dd6cb0b942ed764726750601fde90b12f6c5050949ea97975729e6

See more details on using hashes here.

File details

Details for the file mcp_pfsense-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: mcp_pfsense-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for mcp_pfsense-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 70ae49f01534adb1c44ff8f20cf1db5745a799da57ad06b576eef0204be9375e
MD5 230a790822da0de6e40ecc569f31dff7
BLAKE2b-256 4f381601e77aa8cd20a3de2fedf9bdad8005e03a8d2172cbe92e6c5efbdd5f70

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page