Skip to main content
Glama
gensecaihq

pfSense MCP Server

by gensecaihq

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_MODENoThe mode for MCP communicationstdio
PFSENSE_URLYesThe URL of your pfSense instance
PFSENSE_API_KEYYesYour pfSense API key

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_aliasesB

Search aliases with advanced filtering options

manage_alias_addressesA

Add or remove addresses from an existing alias

create_aliasC

Create a new firewall alias

update_aliasC

Update an existing alias by ID

delete_aliasA

Delete an alias by ID. WARNING: This is irreversible.

search_certificatesB

Search certificates configured on pfSense with optional filtering

create_certificateA

Create or import a certificate on pfSense

Import and internal generation use different API endpoints with different required fields, so this routes on method.

update_certificateA

Update an existing certificate by ID (idempotent)

delete_certificateA

Delete a certificate by ID. WARNING: This is irreversible.

generate_certificateA

Generate a new certificate signed by an existing CA on pfSense

renew_certificateA

Renew an existing certificate by ID

export_certificate_pkcs12B

Export a certificate in PKCS#12 format

search_certificate_authoritiesA

Search Certificate Authorities (CAs) configured on pfSense

create_certificate_authorityA

Create or import a Certificate Authority on pfSense

Import and internal generation use different API endpoints; this routes on method.

update_certificate_authorityA

Update an existing Certificate Authority by ID (idempotent)

delete_certificate_authorityA

Delete a Certificate Authority by ID. WARNING: This is irreversible.

search_crlsA

Search Certificate Revocation Lists (CRLs) configured on pfSense

create_crlB

Create a Certificate Revocation List (CRL) on pfSense

update_crlB

Update a Certificate Revocation List (CRL) by ID

delete_crlA

Delete a Certificate Revocation List (CRL) by ID. WARNING: This is irreversible.

search_dhcp_leasesA

Search DHCP leases with advanced filtering

search_dhcp_static_mappingsB

Search DHCP static mappings (reservations) with filtering

create_dhcp_static_mappingA

Create a DHCP static mapping (reservation)

Lease times are not optional in effect: the API package materialises defaultleasetime 7200 and maxleasetime 86400 whenever the field is absent from the request, and a later PATCH sending an explicit null returns 200 but reads back unchanged. Pass the values you want at create time.

Whether the DHCP daemon acts on the per-host values is unverified. On an ISC deployment they were present in config.xml but absent from the generated dhcpd.conf; the Kea config was not readable.

update_dhcp_static_mappingA

Update an existing DHCP static mapping by ID

Only the parameters you pass are sent, so unset ones keep their stored values.

delete_dhcp_static_mappingA

Delete a DHCP static mapping by ID. WARNING: This is irreversible.

get_dhcp_server_configA

Get DHCP server configuration including pool ranges, lease times, etc.

update_dhcp_server_configC

Update DHCP server configuration (pool range, lease times, etc.)

search_dhcp_address_poolsA

Search DHCP server address pools with filtering and pagination

create_dhcp_address_poolB

Create a DHCP address pool for an interface

update_dhcp_address_poolA

Update an existing DHCP address pool by ID

delete_dhcp_address_poolA

Delete a DHCP address pool by ID. WARNING: This is irreversible.

search_dhcp_custom_optionsA

Search DHCP server custom options with filtering and pagination

create_dhcp_custom_optionB

Create a DHCP custom option

update_dhcp_custom_optionB

Update an existing DHCP custom option by ID

delete_dhcp_custom_optionA

Delete a DHCP custom option by ID. WARNING: This is irreversible.

apply_dhcp_changesA

Apply pending DHCP server changes

Use this after making changes with apply_immediately=False to batch-apply them.

update_dhcp_backendA

Update the DHCP server backend (ISC DHCP vs Kea)

run_ping_diagnosticA

Run a ping diagnostic from the pfSense firewall

reboot_systemA

Reboot the pfSense system. WARNING: This will cause a service interruption.

halt_systemA

Halt (shut down) the pfSense system. WARNING: This will power off the system.

get_config_historyB

Get configuration history revisions with pagination

get_config_revisionA

Get a specific configuration history revision by ID

delete_config_revisionA

Delete a configuration history revision by ID. WARNING: This is irreversible.

search_pf_tablesB

Search pf firewall tables with filtering and pagination

get_pf_tableA

Get the contents of a specific pf firewall table

compare_config_revisionsA

Compare two configuration revisions to see what changed.

If revision_id_after is not provided, compares against the current running config.

search_dns_forwarder_host_overridesB

Search DNS Forwarder host overrides with filtering and pagination

create_dns_forwarder_host_overrideB

Create a DNS Forwarder host override entry

update_dns_forwarder_host_overrideB

Update an existing DNS Forwarder host override by ID

delete_dns_forwarder_host_overrideA

Delete a DNS Forwarder host override by ID. WARNING: This is irreversible.

search_dns_forwarder_host_override_aliasesA

Search aliases for a DNS Forwarder host override

manage_dns_forwarder_host_override_aliasB

Add or remove an alias for a DNS Forwarder host override

apply_dns_forwarder_changesA

Apply pending DNS Forwarder changes

Use this after making changes with apply_immediately=False to batch-apply them.

get_dns_resolver_settingsA

Get the current DNS Resolver (Unbound) settings

Returns the full Unbound configuration including enable state, DNSSEC, forwarding mode, DHCP registration, and custom options.

update_dns_resolver_settingsC

Update DNS Resolver (Unbound) settings

search_dns_host_overridesB

Search DNS host overrides with filtering and pagination

create_dns_host_overrideB

Create a DNS host override entry

update_dns_host_overrideB

Update an existing DNS host override by ID

delete_dns_host_overrideA

Delete a DNS host override by ID. WARNING: This is irreversible.

search_dns_host_override_aliasesA

Search aliases for a specific DNS host override

search_dns_domain_overridesA

Search DNS domain overrides with filtering and pagination

create_dns_domain_overrideC

Create a DNS domain override entry

update_dns_domain_overrideA

Update an existing DNS domain override by ID

delete_dns_domain_overrideA

Delete a DNS domain override by ID. WARNING: This is irreversible.

search_dns_access_listsA

Search DNS Resolver access lists with pagination

create_dns_access_listA

Create a DNS Resolver access list entry

apply_dns_resolver_changesA

Apply pending DNS Resolver configuration changes

Sends a POST to the DNS Resolver apply endpoint to activate any pending host override, domain override, access list, or settings changes.

update_dns_access_listB

Update an existing DNS Resolver access list

delete_dns_access_listA

Delete a DNS Resolver access list. WARNING: This is irreversible.

search_firewall_rulesB

Search firewall rules with advanced filtering and pagination.

find_blocked_rulesA

Find all firewall rules that block or reject traffic

create_firewall_rule_advancedA

Create a firewall rule on the live pfSense appliance.

WARNING: This modifies the running firewall configuration.

move_firewall_ruleA

Move a firewall rule to a new position in the rule order

update_firewall_ruleA

Update an existing firewall rule by ID

delete_firewall_ruleA

Delete a firewall rule from the live pfSense appliance. WARNING: This is irreversible.

bulk_block_ipsA

Block multiple IP addresses on the live pfSense firewall. WARNING: Creates block rules.

apply_firewall_changesA

Force apply pending firewall changes and recompile the pf ruleset.

Use this after any firewall config change to ensure the compiled ruleset (/tmp/rules.debug) matches the configuration. The apply_immediately parameter on other tools doesn't always trigger full recompilation.

get_pf_rulesA

Read the compiled pf ruleset (/tmp/rules.debug) to verify what pf is actually enforcing vs what's in config.xml.

Returns the raw compiled rules that the packet filter is using.

search_firewall_schedulesB

Search firewall schedules with filtering and pagination

create_firewall_scheduleA

Create a firewall schedule with an initial time range.

The pfSense API requires at least one time range at creation. Use create_schedule_time_range to add further ranges afterwards.

update_firewall_scheduleB

Update an existing firewall schedule by ID

delete_firewall_scheduleA

Delete a firewall schedule by ID. WARNING: This is irreversible.

search_schedule_time_rangesA

Search time ranges within a firewall schedule

create_schedule_time_rangeA

Create a time range within a firewall schedule

update_schedule_time_rangeA

Update an existing time range within a firewall schedule by ID

delete_schedule_time_rangeA

Delete a time range from a firewall schedule by ID. WARNING: This is irreversible.

search_firewall_statesA

Search firewall states (active connections) with filtering and pagination

delete_firewall_stateA

Delete a specific firewall state (active connection) by ID. WARNING: This is irreversible.

Terminating a state will immediately drop the associated connection.

get_firewall_state_sizeA

Get the current firewall state table size and limits

Returns the current number of active states and the configured maximum.

get_firewall_advanced_settingsA

Get firewall advanced settings

Returns advanced firewall configuration including optimization mode, state timeout values, and other tuning parameters.

search_interface_configsA

Search interface configurations with filtering and pagination

Each result carries an "id" of "wan", "lan", or "optN", which is what update_interface and delete_interface take as interface_id.

create_interfaceC

Create (assign) a network interface

update_interfaceB

Update an existing interface by ID

delete_interfaceA

Delete (unassign) an interface by ID. WARNING: This is irreversible.

apply_interface_changesA

Apply pending interface changes

Use this after making changes with apply_immediately=False to batch-apply them.

search_vlansA

Search VLANs with filtering and pagination

create_vlanC

Create a VLAN

update_vlanA

Update an existing VLAN by ID

delete_vlanA

Delete a VLAN by ID. WARNING: This is irreversible.

search_interface_bridgesA

Search interface bridges with filtering and pagination

create_interface_bridgeC

Create an interface bridge

search_interface_groupsA

Search interface groups with filtering and pagination

create_interface_groupC

Create an interface group

get_available_interfacesA

Get a list of available (unassigned) network interfaces

get_firewall_logA

Get firewall log entries with optional filtering

WARNING (tracked by upstream PR #860): this endpoint may fail on firewalls with large log files due to a known pfSense REST API bug (server-side OOM at the 512 MB PHP limit). If it fails, suggest reviewing logs via SSH or the pfSense web UI instead.

analyze_blocked_trafficA

Analyze blocked traffic patterns from firewall logs.

Retrieves recent blocked log entries and groups them by source IP, showing hit counts, destination IPs, and a simple threat score. Firewall logs are raw text — IPs are extracted via pattern matching.

WARNING (tracked by upstream PR #860): this endpoint may fail on firewalls with large log files due to a known pfSense REST API bug (server-side OOM at the 512 MB PHP limit). If it fails, suggest reviewing logs via SSH or the pfSense web UI instead.

get_log_fileA

Read the newest lines from a pfSense log file (dhcpd, filter, resolver, system, auth).

Reads the plain-text log file server-side with tail (and grep when a pattern is given), so it works for log types the REST API log endpoints don't expose (notably resolver) and avoids the known server-side OOM bug on /status/logs/ endpoints.

search_logs_by_ipA

Search logs for activity related to a specific IP address

WARNING (tracked by upstream PR #860): this endpoint may fail on firewalls with large log files due to a known pfSense REST API bug (server-side OOM at the 512 MB PHP limit). If it fails, suggest reviewing logs via SSH or the pfSense web UI instead.

get_ntp_settingsB

Get the NTP service settings

update_ntp_settingsC

Update the NTP service settings

search_ntp_time_serversB

Search NTP time servers with pagination

manage_ntp_time_serverB

Add or remove an NTP time server

search_cron_jobsA

Search cron jobs with filtering and pagination

create_cron_jobB

Create a cron job

delete_cron_jobA

Delete a cron job by ID. WARNING: This is irreversible.

search_service_watchdogsA

Search service watchdogs with pagination

manage_service_watchdogB

Add or remove a service watchdog entry

get_ssh_settingsA

Get the SSH service settings

update_ssh_settingsB

Update the SSH service settings

send_wake_on_lanB

Send a Wake-on-LAN magic packet

search_nat_port_forwardsA

Search NAT port forwarding rules with filtering and pagination

create_nat_port_forwardB

Create a NAT port forwarding rule

delete_nat_port_forwardA

Delete a NAT port forwarding rule by ID. WARNING: This is irreversible.

update_nat_port_forwardA

Update an existing NAT port forwarding rule by ID

search_nat_onetoone_mappingsA

Search 1:1 NAT mappings with filtering and pagination

create_nat_onetoone_mappingB

Create a 1:1 NAT mapping

update_nat_onetoone_mappingB

Update an existing 1:1 NAT mapping by ID

delete_nat_onetoone_mappingA

Delete a 1:1 NAT mapping by ID. WARNING: This is irreversible.

apply_nat_onetoone_changesA

Apply pending 1:1 NAT changes

Use this after making changes with apply_immediately=False to batch-apply them. This shares the firewall apply endpoint.

search_nat_outbound_mappingsA

Search outbound NAT mappings with filtering and pagination

create_nat_outbound_mappingB

Create an outbound NAT mapping

update_nat_outbound_mappingB

Update an existing outbound NAT mapping by ID

delete_nat_outbound_mappingA

Delete an outbound NAT mapping by ID. WARNING: This is irreversible.

get_nat_outbound_modeA

Get the current outbound NAT mode (automatic, hybrid, advanced, or disabled)

update_nat_outbound_modeC

Update the outbound NAT mode

apply_nat_changesA

Apply pending NAT changes (outbound mappings, mode changes)

Use this after making changes with apply_immediately=False to batch-apply them. This shares the firewall apply endpoint.

search_acme_certificatesA

Search ACME (Let's Encrypt) certificates with filtering and pagination

Requires the ACME package to be installed on pfSense.

create_acme_certificateA

Create an ACME certificate entry

The pfSense API rejects a certificate with no domains ("Field a_domainlist is required"), so at least one domain/SAN validation entry must be provided at creation time.

update_acme_certificateA

Update an existing ACME certificate entry by ID

delete_acme_certificateA

Delete an ACME certificate entry by ID. WARNING: This is irreversible.

search_acme_certificate_domainsA

List the domain (SAN) validation entries configured on an ACME certificate

The pfSense API embeds each certificate's domain list (a_domainlist) inline on the certificate object rather than exposing a standalone list endpoint, so this fetches the parent certificate and returns its domains.

manage_acme_certificate_domainA

Add or remove a domain (SAN) validation entry on an ACME certificate

Each ACME certificate needs at least one domain entry describing how pfSense proves ownership to Let's Encrypt (HTTP-01, DNS-01 via a provider API, manual DNS, etc.) before a certificate can be issued. This manages entries one at a time instead of replacing the whole a_domainlist array (see update_acme_certificate for a full-replace).

issue_acme_certificateA

Issue (obtain) an ACME certificate from Let's Encrypt

Triggers the ACME challenge/validation process and obtains the certificate.

renew_acme_certificateA

Renew an existing ACME certificate

Triggers the renewal process for a previously issued certificate.

search_acme_account_keysA

Search ACME account keys with filtering and pagination

create_acme_account_keyB

Create an ACME account key for Let's Encrypt

register_acme_account_keyA

Register an ACME account key with the ACME server (Let's Encrypt)

This sends the account key to the ACME server and completes registration.

get_acme_settingsA

Get the current ACME package settings

search_bind_zonesA

Search BIND DNS zones with filtering and pagination

Requires the BIND package to be installed on pfSense.

create_bind_zoneB

Create a BIND DNS zone

update_bind_zoneA

Update an existing BIND DNS zone by ID

delete_bind_zoneA

Delete a BIND DNS zone by ID. WARNING: This is irreversible.

This will also remove all records within the zone.

search_bind_zone_recordsA

Search DNS records within a BIND zone

manage_bind_zone_recordB

Create or delete a DNS record within a BIND zone

get_bind_settingsA

Get the current BIND DNS server settings

update_bind_settingsB

Update BIND DNS server settings

search_bind_access_listsB

Search BIND access control lists

manage_bind_access_listB

Create or delete a BIND access control list

search_freeradius_usersA

Search FreeRADIUS users with filtering and pagination

Requires the FreeRADIUS package to be installed on pfSense.

create_freeradius_userA

Create a FreeRADIUS user

update_freeradius_userA

Update an existing FreeRADIUS user by ID

delete_freeradius_userA

Delete a FreeRADIUS user by ID. WARNING: This is irreversible.

search_freeradius_clientsA

Search FreeRADIUS clients (NAS devices) with filtering and pagination

create_freeradius_clientB

Create a FreeRADIUS client (NAS device)

update_freeradius_clientB

Update an existing FreeRADIUS client by ID

delete_freeradius_clientA

Delete a FreeRADIUS client by ID. WARNING: This is irreversible.

search_haproxy_backendsA

Search HAProxy backends with filtering and pagination

Requires the HAProxy package to be installed on pfSense.

create_haproxy_backendB

Create an HAProxy backend pool

update_haproxy_backendA

Update an existing HAProxy backend by ID

delete_haproxy_backendA

Delete an HAProxy backend by ID. WARNING: This is irreversible.

search_haproxy_backend_serversC

Search servers within an HAProxy backend

manage_haproxy_backend_serverA

Add or remove a server from an HAProxy backend

search_haproxy_frontendsB

Search HAProxy frontends with filtering and pagination

create_haproxy_frontendC

Create an HAProxy frontend listener

update_haproxy_frontendA

Update an existing HAProxy frontend by ID

delete_haproxy_frontendA

Delete an HAProxy frontend by ID. WARNING: This is irreversible.

search_haproxy_frontend_addressesA

List the bind addresses configured on an HAProxy frontend

manage_haproxy_frontend_addressB

Add or remove a bind address from an HAProxy frontend

search_haproxy_frontend_certificatesA

List the additional SNI SSL certificates bound to an HAProxy frontend

Note: this lists the frontend's additional SNI certificates (ha_certificates), not its default certificate. The default certificate is the frontend's ssloffloadcert field, set via update_haproxy_frontend and visible in search_haproxy_frontends.

manage_haproxy_frontend_certificateA

Add or remove an additional SNI SSL certificate on an HAProxy frontend

To set the frontend's default certificate instead (used whenever SNI doesn't match one of these additional certs), use update_haproxy_frontend's ssloffloadcert parameter.

search_haproxy_filesA

Search HAProxy files (certificates, error pages, Lua scripts, etc.)

manage_haproxy_fileB

Create or delete an HAProxy file (certificate, error page, Lua script, etc.)

get_haproxy_settingsA

Get the current HAProxy service settings

update_haproxy_settingsC

Update HAProxy service settings

apply_haproxy_changesA

Apply pending HAProxy configuration changes

Use this after making changes with apply_immediately=False to batch-apply them.

search_gatewaysA

Search routing gateways with filtering and pagination

create_gatewayB

Create a routing gateway

update_gatewayA

Update an existing routing gateway by ID

delete_gatewayA

Delete a routing gateway by ID. WARNING: This is irreversible.

get_default_gatewayA

Get the current default gateway settings (IPv4 and IPv6)

update_default_gatewayB

Update the default gateway settings

search_gateway_groupsA

Search gateway groups with filtering and pagination

create_gateway_groupA

Create a gateway group for multi-WAN failover or load balancing

update_gateway_groupC

Update an existing gateway group by ID

delete_gateway_groupA

Delete a gateway group by ID. WARNING: This is irreversible.

search_static_routesA

Search static routes with filtering and pagination

create_static_routeC

Create a static route

update_static_routeB

Update an existing static route by ID

delete_static_routeA

Delete a static route by ID. WARNING: This is irreversible.

apply_routing_changesA

Apply pending routing changes (gateways, static routes, gateway groups)

Use this after making changes with apply_immediately=False to batch-apply them.

get_gateway_statusA

Get real-time gateway status including latency, packet loss, and online/offline state

search_servicesB

Search and filter system services

control_serviceA

Start, stop, or restart a service on the live pfSense appliance.

WARNING: Stopping critical services (dhcpd, unbound, sshd) will disrupt network operations.

system_statusA

Get current system status including CPU, memory, disk usage, and version info

search_interfacesB

Search and filter network interfaces with advanced options

find_interfaces_by_statusB

Find interfaces by their current status

get_arp_tableA

Get the ARP table to discover devices on the network.

Shows IP-to-MAC address mappings for all devices that have recently communicated on the network, including those without static DHCP mappings.

get_system_timezoneA

Get the current system timezone setting

update_system_timezoneC

Update the system timezone

get_system_consoleB

Get the system console settings

update_system_consoleB

Update the system console settings

get_webgui_settingsA

Get the WebGUI settings (protocol, port, certificates, etc.)

update_webgui_settingsC

Update the WebGUI settings

get_email_notification_settingsB

Get the email notification settings

update_email_notification_settingsC

Update the email notification settings

get_log_settingsA

Get the system log settings

update_log_settingsA

Update the system log settings

The pfSense REST API field names are mirrored verbatim. Note that to actually enable Remote Syslog you must set enableremotelogging=True — setting remoteserver/ipprotocol alone leaves the feature off and pfSense will normalise the remote-* fields back to null.

get_dhcp_relay_settingsA

Get the DHCP relay settings

update_dhcp_relay_settingsB

Update the DHCP relay settings

update_firewall_advanced_settingsC

Update firewall advanced settings

update_firewall_state_sizeA

Update the firewall state table size

get_system_dnsA

Get the current system DNS server configuration

update_system_dnsC

Update system DNS server settings

get_system_hostnameA

Get the current system hostname and domain

update_system_hostnameB

Update the system hostname and/or domain

search_system_tunablesA

Search system tunables (sysctl values) with filtering and pagination

create_system_tunableA

Create a system tunable (sysctl value)

update_system_tunableB

Update an existing system tunable by ID

delete_system_tunableA

Delete a system tunable by ID. WARNING: This is irreversible.

get_system_versionB

Get the pfSense system version information

get_carp_statusA

Get the current CARP (Common Address Redundancy Protocol) status

update_carp_maintenanceB

Update CARP maintenance mode settings

search_installed_packagesA

Search installed packages with filtering and pagination

search_traffic_shapersA

Search traffic shapers with filtering and pagination

create_traffic_shaperB

Create a traffic shaper on an interface

update_traffic_shaperB

Update an existing traffic shaper by ID

delete_traffic_shaperB

Delete a traffic shaper by ID. WARNING: This is irreversible.

search_shaper_queuesA

Search traffic shaper queues with filtering and pagination

create_shaper_queueB

Create a traffic shaper queue

update_shaper_queueB

Update an existing shaper queue by ID

delete_shaper_queueA

Delete a shaper queue by ID. WARNING: This is irreversible.

search_traffic_limitersB

Search traffic limiters (dummynet pipes) with filtering and pagination

create_traffic_limiterB

Create a traffic limiter (dummynet pipe)

update_traffic_limiterC

Update an existing traffic limiter by ID

delete_traffic_limiterA

Delete a traffic limiter by ID. WARNING: This is irreversible.

diagnose_connectivityA

Test connectivity to a host from the pfSense appliance.

Runs ping, checks the ARP table for the target IP, and checks gateway status to give a combined connectivity diagnosis.

diagnose_blocked_trafficA

Comprehensive analysis of why traffic might be blocked.

Searches firewall logs for the source IP, finds matching block/reject rules, checks alias memberships, and suggests fixes.

diagnose_interface_issuesA

Analyze an interface for problems.

Checks interface status, configuration, gateway status, and ARP entries on the specified interface.

diagnose_vpn_statusA

Comprehensive VPN health check across all VPN types.

Gets status for OpenVPN servers, OpenVPN clients, IPsec SAs, and WireGuard peers. Returns per-VPN summary with connected/disconnected/error counts.

diagnose_dhcp_issuesA

Analyze DHCP service health on an interface.

Checks DHCP server config, lease pool utilization, IP conflicts, and optionally looks up a specific MAC or IP address.

diagnose_dns_resolutionA

Check DNS resolver health.

Gets DNS resolver settings, host/domain override counts, system DNS servers, and runs a connectivity check to verify upstream reachability.

diagnose_service_healthA

Comprehensive service health check.

Gets all services and their status, identifies stopped services, and checks system resource utilization (CPU, memory, disk).

diagnose_high_availabilityA

Check CARP/HA status if configured.

Gets CARP status, virtual IPs, and checks if any CARP VIPs are in an unexpected state (e.g., backup when they should be master).

get_system_health_reportA

Full system health dashboard — combines all diagnostics into one report.

Checks system status, interface health, service status, gateway status, VPN status, DHCP utilization, recent blocked traffic, and firewall rule counts. Returns severity-coded findings.

search_audit_trailA

Search the guardrail audit log for recent destructive actions taken.

Checks the in-memory rollback history and, if MCP_AUDIT_LOG is configured, reads recent entries from the audit log file.

search_usersA

Search pfSense local users with optional filtering and pagination

create_userA

Create a new pfSense local user

update_userA

Update an existing pfSense local user by ID

delete_userA

Delete a pfSense local user by ID. WARNING: This is irreversible.

search_groupsA

Search pfSense user groups with optional filtering and pagination

create_groupA

Create a new pfSense user group

update_groupA

Update an existing pfSense user group by ID

delete_groupA

Delete a pfSense user group by ID. WARNING: This is irreversible.

search_auth_serversA

Search pfSense authentication servers (LDAP, RADIUS) with optional filtering

create_auth_serverA

Create a new authentication server (LDAP or RADIUS)

update_auth_serverA

Update an existing authentication server by ID

delete_auth_serverA

Delete a pfSense authentication server by ID. WARNING: This is irreversible.

follow_api_linkA

Follow a HATEOAS link from a previous API response

enable_hateoasA

Enable HATEOAS links in API responses on the pfSense server.

WARNING: This modifies the pfSense REST API server-wide setting via PATCH /system/restapi/settings. It affects ALL API consumers, not just this MCP session.

disable_hateoasA

Disable HATEOAS links in API responses on the pfSense server.

WARNING: This modifies the pfSense REST API server-wide setting via PATCH /system/restapi/settings. It affects ALL API consumers, not just this MCP session.

refresh_object_idsA

Refresh object IDs by re-querying an endpoint (handles ID changes after deletions).

pfSense object IDs are non-persistent array indices that change after any deletion. Call this before performing update/delete operations to get fresh IDs.

find_object_by_fieldA

Find an object by a specific field value (safer than using IDs).

Use this instead of IDs when you need a stable reference to an object, since pfSense object IDs change after deletions.

get_api_capabilitiesB

Get comprehensive API capabilities and configuration

test_enhanced_connectionB

Test enhanced API connection with feature validation

get_guardrail_statusA

Get the current guardrail configuration and recent action history.

Shows risk classification for tools, rate limits, allowlist status, and recent rollback entries for destructive operations.

check_tool_riskB

Check the risk classification and guardrail requirements for a tool.

search_virtual_ipsA

Search virtual IPs with filtering and pagination

create_virtual_ipB

Create a virtual IP address

update_virtual_ipB

Update an existing virtual IP by ID

delete_virtual_ipA

Delete a virtual IP by ID. WARNING: This is irreversible.

apply_virtual_ip_changesA

Apply pending virtual IP changes

Use this after making changes with apply_immediately=False to batch-apply them.

search_ipsec_phase2_encryptionsA

Search IPsec Phase 2 encryption entries with filtering and pagination

create_ipsec_phase2_encryptionC

Create an IPsec Phase 2 encryption entry

update_ipsec_phase2_encryptionB

Update an existing IPsec Phase 2 encryption entry by ID

delete_ipsec_phase2_encryptionA

Delete an IPsec Phase 2 encryption entry by ID. WARNING: This is irreversible.

search_wireguard_tunnel_addressesB

Search WireGuard tunnel addresses with filtering and pagination

manage_wireguard_tunnel_addressC

Add or remove an address for a WireGuard tunnel

get_openvpn_server_statusA

Get the status of all OpenVPN servers

get_openvpn_client_statusA

Get the status of all OpenVPN clients

search_openvpn_server_connectionsB

Search active OpenVPN server connections

disconnect_openvpn_clientA

Disconnect an active OpenVPN client connection. WARNING: This will terminate the client session.

search_openvpn_server_routesA

Search OpenVPN server routing table entries

search_openvpn_client_export_configsB

Search available OpenVPN client export configurations

search_ipsec_phase1sA

Search IPsec Phase 1 (IKE) entries with filtering and pagination

create_ipsec_phase1B

Create an IPsec Phase 1 (IKE) entry

update_ipsec_phase1A

Update an existing IPsec Phase 1 (IKE) entry by ID

delete_ipsec_phase1A

Delete an IPsec Phase 1 (IKE) entry by ID. WARNING: This is irreversible and will also remove associated Phase 2 entries.

search_ipsec_phase2sA

Search IPsec Phase 2 (Child SA / tunnel) entries with filtering and pagination

create_ipsec_phase2B

Create an IPsec Phase 2 (Child SA / tunnel) entry

update_ipsec_phase2A

Update an existing IPsec Phase 2 (Child SA / tunnel) entry by ID

delete_ipsec_phase2A

Delete an IPsec Phase 2 (Child SA / tunnel) entry by ID. WARNING: This is irreversible.

search_ipsec_phase1_encryptionsA

Search IPsec Phase 1 encryption algorithm entries with filtering and pagination

create_ipsec_phase1_encryptionB

Create an IPsec Phase 1 encryption algorithm entry

delete_ipsec_phase1_encryptionA

Delete an IPsec Phase 1 encryption algorithm entry by ID. WARNING: This is irreversible.

apply_ipsec_changesA

Apply pending IPsec configuration changes to the live system.

Call this after making IPsec configuration changes with apply_immediately=False to activate them all at once.

get_ipsec_statusA

Get IPsec Security Associations (SAs) status showing active tunnels and their state.

Returns the current state of all IPsec IKE SAs including connection status, established time, local/remote identities, and child SA counts.

get_ipsec_child_sa_statusA

Get IPsec Child Security Associations status showing active tunnel details.

Returns detailed status of all IPsec Child SAs including traffic selectors, bytes transferred, encryption/integrity algorithms in use, and uptime.

search_openvpn_serversA

Search OpenVPN server instances with filtering and pagination.

create_openvpn_serverB

Create an OpenVPN server instance on pfSense.

update_openvpn_serverB

Update an existing OpenVPN server instance by ID.

delete_openvpn_serverA

Delete an OpenVPN server instance by ID. WARNING: This is irreversible.

search_openvpn_clientsA

Search OpenVPN client instances with filtering and pagination.

create_openvpn_clientB

Create an OpenVPN client instance on pfSense.

update_openvpn_clientA

Update an existing OpenVPN client instance by ID.

delete_openvpn_clientA

Delete an OpenVPN client instance by ID. WARNING: This is irreversible.

search_openvpn_csosA

Search OpenVPN Client Specific Overrides (CSOs) with filtering and pagination.

CSOs allow per-client configuration overrides such as static IPs, custom routes, and pushed settings.

manage_openvpn_csoA

Create, update, or delete an OpenVPN Client Specific Override (CSO).

CSOs allow per-client configuration such as assigning static tunnel IPs, pushing custom routes, or blocking specific clients.

get_openvpn_statusA

Get the runtime status of all OpenVPN server and client instances.

Returns connection status, connected clients, traffic statistics, and uptime information for all active OpenVPN tunnels.

export_openvpn_client_configA

Export an OpenVPN client configuration file or installer package.

Generates downloadable client configuration for connecting to a pfSense OpenVPN server instance.

search_wireguard_tunnelsA

Search WireGuard tunnels with filtering and pagination

create_wireguard_tunnelB

Create a new WireGuard tunnel

update_wireguard_tunnelA

Update an existing WireGuard tunnel by ID

delete_wireguard_tunnelA

Delete a WireGuard tunnel by ID. WARNING: This is irreversible.

search_wireguard_peersA

Search WireGuard peers with filtering and pagination

create_wireguard_peerA

Create a new WireGuard peer on a tunnel

update_wireguard_peerB

Update an existing WireGuard peer by ID

delete_wireguard_peerA

Delete a WireGuard peer by ID. WARNING: This is irreversible.

search_wireguard_peer_allowed_ipsA

Search WireGuard peer allowed IPs with filtering and pagination

manage_wireguard_peer_allowed_ipB

Add or remove an allowed IP for a WireGuard peer

get_wireguard_settingsA

Get the current WireGuard service settings

update_wireguard_settingsC

Update WireGuard service settings

apply_wireguard_changesA

Apply pending WireGuard configuration changes

Sends a POST to the WireGuard apply endpoint to activate any pending tunnel, peer, or settings changes.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.9/5.0

Scored across 332 tools

Disambiguation2/5

Despite each tool having a detailed description, the sheer number and overlapping terminology make selection risky. Near-synonyms like search_interfaces/search_interface_configs, get_openvpn_status/get_openvpn_server_status, and get_log_file/get_firewall_log/search_logs_by_ip blur boundaries, and manage_* tools inconsistently mean add/remove or full CRUD. An agent would frequently need to read descriptions to avoid choosing the wrong tool.

Naming Consistency3/5

Most tools follow a readable verb_noun snake_case pattern (search_, create_, update_, delete_, get_, apply_), which provides a strong baseline. However, there are many deviations: create_firewall_rule_advanced, system_status, get_openvpn_server_status vs get_openvpn_status, and inconsistent singular/plural names like search_ipsec_phase2_encryptions vs create_ipsec_phase2_encryption. The pattern is recognizable but not reliable enough for a 4.

Tool Count1/5

332 tools is an extreme mismatch for any tool surface, even one covering the full pfSense feature set. This many tools will overwhelm context windows and make tool selection slow and error-prone. Most CRUD families could be consolidated into parameterized resource tools or grouped sub-servers.

Completeness3/5

The server covers an enormous breadth of pfSense domains and most resources have full CRUD plus apply/diagnostic helpers. However, there are notable gaps: interface groups and bridges have create/search but no update/delete, cron jobs lack update, IPsec Phase 1 encryption entries lack update, ACME account keys lack delete/update, and there is no restore-config-revision tool. These are workable for some cases by delete+recreate, but will block or complicate otherwise expected workflows.

Maintenance

ActivityActive
ResponsivenessUnresponsive