mcp-pfsense

MCP server for managing pfSense firewalls through AI assistants — firewall rules, DHCP, DNS, gateways, ARP, and services. 17 tools with two-step confirmation for destructive operations.

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:

CategoryToolsDescription
Systemget_system_status, get_interfacesVersion, CPU, memory, uptime, temperature, network interfaces
Firewalllist_firewall_rules, add_firewall_rule, delete_firewall_rule, list_firewall_aliasesRule management with interface filtering, alias listing
DHCPlist_dhcp_leases, list_dhcp_static_mappings, add_dhcp_static_mapping, delete_dhcp_static_mappingActive leases, IP reservations
DNSlist_dns_host_overrides, add_dns_host_override, delete_dns_host_overrideUnbound DNS Resolver host overrides
Monitoringget_gateway_status, get_arp_table, list_servicesGateway health, connected devices, service status
Servicesrestart_serviceRestart 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:

VariableRequiredDefaultDescription
PFSENSE_HOSTYespfSense hostname or IP
PFSENSE_PASSWORDYesAPI user password
PFSENSE_USERNAMENoadminAPI username
PFSENSE_PORTNo443API port
PFSENSE_SCHEMENohttpshttp or https
PFSENSE_VERIFY_SSLNofalseVerify 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

Related Servers