io.github.antonio-mello-ai/mcp-pfsense
Provides tools for managing pfSense firewalls through its REST API, including system status, firewall rules, DHCP leases, DNS host overrides, gateway monitoring, ARP table, services, and more.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@io.github.antonio-mello-ai/mcp-pfsenseShow me the system status of the pfSense firewall"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-pfsense
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
19 tools across 7 categories:
Category | Tools | Description |
System |
| Version, CPU, memory, uptime, temperature, network interfaces |
Firewall |
| Rule management with interface filtering, alias listing |
DHCP |
| Active leases, IP reservations |
DNS |
| Unbound DNS Resolver host overrides |
Pending changes |
| See what is staged per subsystem (firewall, dhcp, dns) and apply it |
Monitoring |
| Gateway health, connected devices, service status |
Services |
| Restart any pfSense service |
Safety
Two-step confirmation for destructive operations (delete rules, delete mappings, restart services, apply changes): the tool returns a warning on first call and only executes when called again with
confirm=true.Writes are staged, not live. Like the pfSense WebGUI,
add_*anddelete_*store the change in the config but do not activate it. The tool response says so (applied: false, plus apendingnote). Activate withapply_changes(subsystem, confirm=true)— which reloads that subsystem, including anything a human left staged in the WebGUI — or passapply=trueon 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_mappingtakes the mapping'sinterface(itsparent_idinlist_dhcp_static_mappings) andmapping_id; a mapping is addressed by both.
Related MCP server: io.github.abl030/pfsense-mcp
Installation
# Using uvx (recommended)
uvx mcp-pfsense
# Using pip
pip install mcp-pfsensePrerequisites
pfSense with pfrest package installed
A user account with API access (typically
admin)
Configuration
Set environment variables:
Variable | Required | Default | Description |
| Yes | — | pfSense hostname or IP |
| Yes | — | API user password |
| No |
| API username |
| No |
| API port |
| No |
|
|
| No |
| 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-pfsenseThen 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 and 2.8.x
pfrest: REST API v2 — any v2.x release, except
list_dhcp_static_mappings, which needs v2.7.0 or later (it uses the/services/dhcp_server/static_mappingscollection endpoint added in that release).Python: 3.11+
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.
Troubleshooting
Only get_system_status and get_arp_table work; everything else returns 400/404
mcp-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 reads
pfrest 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.
A rule / mapping / override was created but is not in effect
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).
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
Available Tools
17 toolsadd_dhcp_static_mappingC
Create a DHCP static mapping (IP reservation) for a MAC address.
| Name | Required | Description | Default |
|---|---|---|---|
| interface | Yes | ||
| mac | Yes | ||
| ipaddr | Yes | ||
| hostname | No | ||
| descr | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits like whether it overwrites existing mappings, requires specific permissions, or handles conflicts. The burden falls entirely on the description, which fails to provide this context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (one sentence) but lacks critical information, making it insufficient for tool selection. It is front-loaded but under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 3 required) and no annotations, the description should provide more context about input validation, side effects, and output. It fails to cover these, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the five parameters (interface, mac, ipaddr, hostname, descr). It only vaguely references 'MAC address', leaving the agent without semantic understanding of required fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create'), the resource ('DHCP static mapping'), and the context ('IP reservation for a MAC address'). It effectively distinguishes from sibling tools like add_dns_host_override.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as list_dhcp_static_mappings or delete_dhcp_static_mapping. There are no prerequisites, exclusions, or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_dns_host_overrideC
Create a DNS host override entry in Unbound DNS Resolver.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| domain | Yes | ||
| ip | Yes | ||
| descr | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only states 'Create... in Unbound DNS Resolver', giving no details on side effects, idempotency, permissions, or reversibility. For a write tool, more disclosure is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the single sentence is concise, it omits critical information, making it under-specified rather than efficiently concise. The description is too brief to be useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema (not shown), the description should still provide usage context and return value hints. It does not, leaving gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the parameters (host, domain, ip, descr). The description adds no meaning beyond what the schema provides, which is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and resource ('DNS host override entry'), clearly distinguishing it from sibling tools that operate on different resources like DHCP static mappings or firewall rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_dns_host_overrides or delete_dns_host_override. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_firewall_ruleC
Add a firewall rule. Type is 'pass', 'block', or 'reject'.
| Name | Required | Description | Default |
|---|---|---|---|
| interface | Yes | ||
| type | Yes | ||
| ipprotocol | No | inet | |
| protocol | No | ||
| source | No | any | |
| destination | No | any | |
| dstport | No | ||
| descr | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only mentions the type options but does not describe what happens on success or failure, permissions needed, side effects, or any other behavioral traits. The existence of an output schema is not mentioned, so the agent gains little insight into the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (two sentences) and avoids unnecessary text. However, the brevity comes at the cost of usefulness; it could be restructured to list key parameters or provide a clearer overview. It is not verbose but lacks substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters (2 required), no parameter enums, and no schema descriptions, the description is woefully incomplete. It does not reference the output schema or explain the role of any parameter except type. The context signals indicate high complexity, but the description does not address this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only adds meaning for the 'type' parameter by listing its valid values. The other 6 parameters (interface, ipprotocol, protocol, source, destination, dstport, descr) receive no explanation. The description fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Add' and the resource 'firewall rule', and gives a sample value for the type parameter. It distinguishes from sibling operations like delete_firewall_rule and list_firewall_rules by the action, though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There are no prerequisites, context expectations, or when-not-to-use instructions. The sibling list includes other firewall-related tools but no differentiation is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dhcp_static_mappingB
Delete a DHCP static mapping by ID. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| mapping_id | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It indicates the destructive nature by stating 'Delete' and adds the confirm requirement, but does not mention that the operation is irreversible, what happens if the mapping_id does not exist, or any authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that effectively communicates the core purpose and a key requirement without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it is a delete operation with no annotations, the description is incomplete. It does not describe what the output schema contains, what happens on success or failure, or any prerequisites (e.g., existence of the mapping).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It clarifies that 'mapping_id' is an identifier and that 'confirm' must be true. However, it does not explain the format of the ID or the purpose of confirm beyond 'requires'. This adds some value but not comprehensive context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Delete' and the resource 'DHCP static mapping'. The specification 'by ID' and the requirement 'Requires confirm=true' differentiate it from sibling tools like add_dhcp_static_mapping and list_dhcp_static_mappings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes the necessary condition 'Requires confirm=true', which guides usage. However, it lacks information on when to use this tool over alternatives (e.g., other delete tools) or when not to use it (e.g., if the mapping is still in use).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_host_overrideA
Delete a DNS host override by ID. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| override_id | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that this is a destructive action (Delete) and imposes a confirmation requirement, but it does not disclose other behavioral traits like whether the operation is reversible, authentication needs, or error behavior. Given no annotations, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words, front-loaded with the verb and resource. Every word is essential, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with an output schema, the description covers the core action and a critical requirement. However, it lacks context on error states (e.g., missing override_id) or the effect of confirm=false, which would make it more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning to both parameters: 'by ID' ties to override_id, and 'Requires confirm=true' specifies the confirm boolean's required value. This compensates well for the missing schema descriptions, though it omits details like data format or default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a DNS host override by ID' clearly states the specific verb (Delete) and resource (DNS host override), distinguishing it from sibling tools like add_dns_host_override and list_dns_host_overrides. The inclusion of 'Requires confirm=true' adds a precise condition without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., delete_dhcp_static_mapping). The description does not state prerequisites (e.g., need override_id from list_dns_host_overrides) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_firewall_ruleA
Delete a firewall rule by tracker ID. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the confirmation requirement, which is a behavioral safeguard, but does not mention permanence, error conditions, or side effects. The output schema may cover return values, but the description lacks depth for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. The first sentence states the purpose, and the second provides a critical requirement. Information is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 parameters, required confirm), and the description covers core functionality and a key constraint. The presence of an output schema reduces the need to explain return values. However, it does not mention behavior for missing rule_id or confirm=false scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description adds meaning: 'tracker ID' maps to rule_id, and 'Requires confirm=true' explains the confirm parameter's role. It does not detail types or formats, but the schema already provides integers and booleans.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and resource 'firewall rule by tracker ID', distinguishing it from sibling delete tools that target different resources (e.g., delete_dhcp_static_mapping).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires 'confirm=true', which is a critical usage guideline. However, it does not mention when not to use this tool or compare to alternatives like add_firewall_rule, though the tool name and context provide some implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_arp_tableA
Get ARP table showing connected devices (IP, MAC, interface).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It correctly identifies the operation as retrieving data (non-destructive), but omits details like authentication requirements, data freshness, or behavior when no devices are connected. Adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the tool's purpose and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema (present), the description sufficiently explains what the tool does and what it returns. It covers the essential information but does not address edge cases or provide extra context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so baseline is 4. The description does not need to add parameter information, and it correctly omits it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the ARP table and specifies the data shown (IP, MAC, interface). It is a specific verb+resource combination that distinguishes it from sibling tools like get_interfaces or list_dhcp_leases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any when-to-use or when-not-to-use guidance, nor does it mention alternatives among the sibling tools. Usage is implied but not explicitly addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gateway_statusA
Get gateway status including latency, packet loss, and online state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the returned data (latency, packet loss, online state) and implies read-only behavior. Does not mention errors or side effects, but adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded with the verb and resource, containing only essential information. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with no parameters and an output schema exists. Description adds the specific fields returned, which is complete context for an agent to understand the tool's functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100% (vacuous). Baseline 4 for zero parameters. No additional parameter information needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Get' and the resource 'gateway status', listing specific attributes (latency, packet loss, online state). It distinguishes from sibling tools like 'get_system_status' which likely returns different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives such as 'get_system_status'. However, the tool has no parameters and the name 'get_gateway_status' implies it is for gateway-specific status, so usage is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_interfacesA
List all network interfaces with status and configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must convey behavioral traits. It states 'List' implying a read-only operation, but lacks details on side effects, authentication needs, or output specifics beyond what the output schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 6 words, front-loaded with verb and resource, no waste. Appropriate for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and an output schema present, the description is nearly complete. It states what it lists and includes status/configuration. Could mention that it returns all interfaces, but output schema likely covers return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is 100%. The description correctly implies no parameters are needed, which is sufficient. Baseline 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all network interfaces with status and configuration, distinguishing it from siblings like get_arp_table (ARP table) and get_gateway_status (gateway status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not specify any prerequisites, exclusions, or comparisons with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusA
Get pfSense system status including version, CPU, memory, uptime, and temperature.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavior. It does not mention if the operation is read-only, required permissions, or side effects. For a status tool, read-only implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb, no unnecessary words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and existence of output schema, description adequately lists included status fields. Could mention real-time vs cached, but not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4 per rules. Description adds value by listing output content, compensating for lack of param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get' and resource 'pfSense system status' with specific items (version, CPU, memory, uptime, temperature). It is distinct from sibling tools which focus on DHCP, DNS, firewall, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., get_gateway_status for gateway info). Sibling list exists but no exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dhcp_leasesA
List active DHCP leases showing IP, MAC, hostname, and lease times.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It indicates a read-only, non-destructive operation. Does not mention auth or rate limits, but for a listing tool this is adequate. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and existence of output schema, description is complete. It explains what the tool returns and suffices for a simple listing operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Baseline is 3 as description adds no parameter-specific info, which is fine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists active DHCP leases and specifies the fields (IP, MAC, hostname, lease times). It distinguishes from sibling tools like list_dhcp_static_mappings which deal with static mappings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing active leases. While no explicit when-not or alternatives are given, the context of sibling tools makes it clear. For a simple no-parameter tool, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dhcp_static_mappingsA
List DHCP static mappings (IP reservations), optionally filtered by interface.
| Name | Required | Description | Default |
|---|---|---|---|
| interface | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only list operation, which is appropriate for a list tool. With no annotations, the description adequately discloses the basic behavior, though it could explicitly state the absence of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no unnecessary words, making it easy to parse and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description sufficiently conveys the essential functionality and the optional filter, without needing to detail return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the 'interface' parameter by stating it is used for optional filtering, compensating for the 0% schema description coverage. It provides context that the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('List') and resource ('DHCP static mappings') with the optional filtering capability, effectively distinguishing it from sibling tools like add_dhcp_static_mapping or delete_dhcp_static_mapping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it does not explicitly state that this tool is for viewing existing mappings and not for creating or deleting them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_host_overridesA
List DNS Resolver host overrides (local DNS entries).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the basic operation and does not mention required permissions, scope of results (all entries vs. filtered), pagination, or the return format. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the purpose efficiently and is appropriately sized for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, clear sibling differentiation), the description is adequate for basic understanding but lacks usage guidance and behavioral details. It is missing information to fully inform an agent for correct invocation in varied contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema description coverage. According to the rules, a baseline of 4 applies for zero parameters, and the description adds no unnecessary information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('DNS Resolver host overrides'), with a parenthetical explanation for clarity. It is distinct from sibling tools like add_dns_host_override and delete_dns_host_override.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., when to list vs. add/delete). The description implies the use case by naming the action, but there is no explicit context or exclusionary language.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_aliasesA
List firewall aliases (IP groups, port groups, URL lists).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states the action without mentioning read-only nature, authentication needs, pagination, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that is front-loaded with the verb and resource. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema (not shown) and no parameters, the description is largely complete for a simple list tool. It could mention that it returns all aliases or any prerequisites, but it's sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is 100%. The description adds semantic value by enumerating alias types (IP groups, port groups, URL lists), which goes beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists firewall aliases and specifies the types (IP groups, port groups, URL lists). This is specific and distinct from sibling tools like list_firewall_rules or list_dhcp_leases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_firewall_rules or list_services. The description does not mention context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_rulesC
List firewall rules, optionally filtered by interface.
| Name | Required | Description | Default |
|---|---|---|---|
| interface | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose any behavioral traits such as read-only nature, permissions, or pagination, which would be expected for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the main action. It contains no waste, though it could be slightly more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description is minimally complete. However, it lacks context about output structure or limitations, which the output schema does not fully replace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions optional filtering by interface but does not explain the format or constraints of the parameter, adding little value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and resource (firewall rules), and mentions optional filtering. It is specific but does not explicitly differentiate from sibling tools like list_firewall_aliases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description only states what it does without providing context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesA
List all services and their running status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but description clearly states read-only behavior (list and status). No side effects or permissions mentioned, which is acceptable for a simple list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with essential information, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema, the description is complete. It adequately covers the tool's purpose and behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description correctly provides no parameter info. Baseline 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and resource 'services' with additional detail 'running status', distinguishing it from sibling tools like restart_service.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives guidance, but the context of sibling tools implies this is for viewing services status, not modifying them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_serviceB
Restart a service by name. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states the action and a constraint (confirm=true), but does not disclose that restart is disruptive, may require permissions, or what happens on failure/success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no wasted words, front-loaded with the primary action and a critical requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a disruptive action with no annotations and no output schema details provided, the description is too minimal. It lacks prerequisites, side effects, and post-condition info beyond the bare minimum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameters. It adds meaning for 'confirm' (must be true) but only implicitly for 'name' (by name). No details on valid service names or how to obtain them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Restart') and resource ('service'), and specifies the parameter ('by name'), distinguishing it from sibling tools like list_services which merely list services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the requirement for confirm=true, which provides guidance on invocation, but does not discuss when to use this tool versus alternatives, nor any prerequisites or conditions for restart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
17 tool updates
v0.1.1- First observed
add_dhcp_static_mapping - First observed
add_dns_host_override - First observed
add_firewall_rule - First observed
delete_dhcp_static_mapping - First observed
delete_dns_host_override - First observed
delete_firewall_rule - First observed
get_arp_table - First observed
get_gateway_status - First observed
get_interfaces - First observed
get_system_status - First observed
list_dhcp_leases - First observed
list_dhcp_static_mappings - First observed
list_dns_host_overrides - First observed
list_firewall_aliases - First observed
list_firewall_rules - First observed
list_services - First observed
restart_service
TDQS
Each tool targets a distinct resource and action: DHCP, DNS, firewall, ARP, gateway, interfaces, system status, and services have separate tools with no overlapping purposes.
All tools follow a consistent verb_noun pattern with snake_case (e.g., add_dhcp_static_mapping, list_firewall_rules), making it predictable for an agent.
17 tools cover essential pfSense management areas like DHCP, DNS, firewall, and system monitoring, with no redundant or missing core operations.
Notable gaps exist: no update/edit operations for DHCP static mappings, DNS host overrides, or firewall rules; no tool to create or delete firewall aliases, and no means to apply changes.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI-callable tools for API mocking, testing, monitoring, security, and automation.
60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.
Discover, inspect and run 63,000+ agent tools from one balance. Pay per call, no subscriptions.
1Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language interaction and management of pfSense firewalls through Claude and other GenAI applications using the Model Context Protocol. It provides advanced tools for firewall rule configuration, interface management, and intelligent log analysis via a REST API integration.1MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that gives AI agents full control over pfSense firewalls via the REST API v2, with 677 tools covering firewall rules, NAT, VPN, services, routing, certificates, users, diagnostics, and more.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language management of OPNsense firewalls through AI clients, providing tools for firewall rules, system health, VPN monitoring, and more.AGPL 3.0
- AlicenseAqualityBmaintenanceA secure MCP server for managing OPNsense firewalls through AI assistants. Provides 81 tools across system, firewall, network, DNS, DHCP, VPN, HAProxy, services, diagnostics, and security domains.8115MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/antonio-mello-ai/mcp-pfsense'
If you have feedback or need assistance with the MCP directory API, please join our Discord server