get_system_status
Get pfSense system status including version, CPU, memory, uptime, and temperature.
无需输入参数。

io.github.felhen-ai由 GitHub 账号 felhen-ai 发布v0.3.1更新于 Nov 4, 2026
Manage pfSense firewalls through AI assistants — rules, DHCP, DNS, and more
本地 MCP 服务器,让助手查看和管理 pfSense 防火墙:规则、DHCP 保留、DNS 覆盖、服务与日志。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
[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).
20 tools across 7 categories:
confirm=true.add_* and delete_* store the change in the config but do not activate it. The tool response says so (applied: false, plus a pending note). Activate with apply_changes(subsystem, confirm=true) — which reloads that subsystem, including anything a human left staged in the WebGUI — or pass apply=true on the write itself when you explicitly want a one-shot change. Nothing the assistant does reaches the packet filter without one of those two explicit steps.delete_dhcp_static_mapping takes the mapping's interface (its parent_id in list_dhcp_static_mappings) and mapping_id; a mapping is addressed by both.admin)Set environment variables:
Add to claude_desktop_config.json:
Then set environment variables in your shell or .env file.
Once connected, ask your AI assistant:
get_firewall_logs)list_dhcp_static_mappings, which needs v2.7.0 or later (it uses the /services/dhcp_server/static_mappings collection endpoint added in that release).The endpoint, parameters and encoding each tool uses are pinned by tests/test_client_endpoints.py and tests/test_wire_format.py, derived from the pfrest v2 endpoint definitions. Versions before 0.2.0 called several endpoints that do not exist in pfrest v2 (see Troubleshooting).
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_PORTandPFSENSE_SCHEMEaccordingly.
get_system_status and get_arp_table work; everything else returns 400/404mcp-pfsense 0.1.1 and earlier called singular endpoints for listing (/interface, /firewall/rule, /firewall/alias) and legacy paths that pfrest v2 does not serve (/status/dhcp_leases, /services/dhcpd/static_mapping, /services/unbound/host_override, /status/gateway, /status/service for GET). Upgrade to 0.2.0 or later.
403 on list_services or other readspfrest checks the privileges of the API user per endpoint. Grant the user the api-v2-* privileges for the endpoints you need (or page-all for full access) under System → User Manager.
ModuleNotFoundError: No module named 'mcp.server.fastmcp'The MCP Python SDK 2.0 removed the module that mcp-pfsense 0.1.1 and earlier import, so fresh installs (uvx mcp-pfsense, pip install) failed on startup. Upgrade to 0.2.0 or later, which pins mcp<2. If you must stay on an older mcp-pfsense: uvx --with "mcp<2" mcp-pfsense.
That is the default: writes are staged (see Safety). Check with get_pending_changes(subsystem) and activate with apply_changes(subsystem, confirm=true), or in the WebGUI. If a write returns 200 but nothing is stored at all, the pfrest read_only setting is on (System → REST API → Settings).
MIT
The canonical repository is https://github.com/felhen-ai/mcp-pfsense. Existing GitHub clone and issue URLs redirect to this repository. Do not recreate a repository at the old address, which would remove those redirects.
The canonical MCP Registry identifier is io.github.felhen-ai/mcp-pfsense. The legacy identifier io.github.antonio-mello-ai/mcp-pfsense remains supported with a separate server.legacy.json manifest. Both identifiers install the same mcp-pfsense package from PyPI, and the package name and CLI command remain unchanged. Keep both ownership markers in this README so future releases can be registered under either identifier.
来源:README.md,提交 91891e0
Get pfSense system status including version, CPU, memory, uptime, and temperature.
无需输入参数。
List all network interfaces with status and configuration.
无需输入参数。
List firewall rules, optionally filtered by interface.
interfaceAdd a firewall rule. Type is 'pass', 'block', or 'reject'. The rule is staged (not active) until apply_changes('firewall') is called or apply=true is passed here.
type必填applydescrsourcedstportprotocolinterface必填ipprotocoldestinationDelete a firewall rule by its ID (the `id` from list_firewall_rules). Requires confirm=true. Staged until apply_changes('firewall') is called or apply=true is passed.
applyconfirmrule_id必填List firewall aliases (IP groups, port groups, URL lists).
无需输入参数。
List active DHCP leases showing IP, MAC, hostname, and lease times.
无需输入参数。
List DHCP static mappings (IP reservations), optionally filtered by interface. Each mapping carries `parent_id` (its DHCP server / interface) — pass that as `interface` to delete_dhcp_static_mapping.
interfaceCreate a DHCP static mapping (IP reservation) for a MAC address. Staged until apply_changes('dhcp') is called or apply=true is passed.
mac必填applydescripaddr必填hostnameinterface必填Delete a DHCP static mapping. Requires confirm=true. `interface` is the mapping's DHCP server — the `parent_id` value returned by list_dhcp_static_mappings; `mapping_id` is its `id` there. Staged until apply_changes('dhcp') is called or apply=true is passed.
applyconfirminterface必填mapping_id必填List DNS Resolver host overrides (local DNS entries).
无需输入参数。
Create a DNS host override entry in Unbound DNS Resolver. Staged until apply_changes('dns') is called or apply=true is passed.
ip必填host必填applydescrdomain必填Delete a DNS host override by ID. Requires confirm=true. Staged until apply_changes('dns') is called or apply=true is passed.
applyconfirmoverride_id必填Check whether a subsystem ('firewall', 'dhcp' or 'dns') has staged, unapplied changes.
subsystem必填Apply ALL staged changes of a subsystem ('firewall', 'dhcp' or 'dns'). Requires confirm=true. This reloads the subsystem, activating every pending change — including any a human staged in the pfSense WebGUI and has not reviewed yet.
confirmsubsystem必填Get gateway status including latency, packet loss, and online state.
无需输入参数。
Get ARP table showing connected devices (IP, MAC, interface).
无需输入参数。
List all services and their running status.
无需输入参数。
Restart a service by name. Requires confirm=true.
name必填confirmRead-only view of recent firewall log entries. Each entry contains its ID and raw log text from pfrest. `limit` caps the number of entries (default 50). This tool only reads logs; it never writes to the firewall.
limit已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
# Using uvx (recommended)uvx mcp-pfsense
# Using pippip install mcp-pfsense{ "mcpServers": { "pfsense": { "command": "uvx", "args": ["mcp-pfsense"], "env": { "PFSENSE_HOST": "10.10.10.1", "PFSENSE_PASSWORD": "your-password" } } }}claude mcp add pfsense -- uvx mcp-pfsensegit clone https://github.com/felhen-ai/mcp-pfsense.gitcd mcp-pfsensepython -m venv .venvsource .venv/bin/activatepip install -e ".[dev]"
# Run testspytest
# Lint and type checkruff check .mypy src/