firewalla-mcp
Provides read-only access to Firewalla Gold local API for network security monitoring, allowing queries about alarms, devices, traffic flows, DNS queries, firewall rules, VPN status, and system info.
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., "@firewalla-mcplist all devices on my network"
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.
Firewalla MCP Server
A read-only Model Context Protocol (MCP) server that connects to your Firewalla Gold via its local API — no MSP subscription required.
Built for AI-powered network security monitoring. Connect it to Claude Code, Claude Desktop, or any MCP-compatible client and query your firewall's alarms, devices, traffic flows, and network stats using natural language.
Features
Read-only by design — cannot modify rules, dismiss alarms, or change any settings
100% local — talks directly to your Firewalla box on your LAN (port 8833), no cloud dependency
Free — uses the local API, no MSP subscription needed
MCP standard — works with any MCP client (Claude Code, Claude Desktop, etc.)
Related MCP server: Firewalla MCP Server
Tools
Devices & Traffic
Tool | Description |
| List all network devices (name, IP, MAC, manufacturer, last active) |
| Devices ranked by bandwidth usage (download, upload, total bytes) |
| Devices grouped by network segment/VLAN |
| Devices that recently went offline (configurable lookback window) |
| Recent network flows for a specific device (by MAC address) |
| Search individual flow records with filters (domain, IP, port, category, time range) |
| DNS query logs — every domain a device resolved (more complete than flow data) |
Security & Rules
Tool | Description |
| Security alarms with filtering by severity, type, and device |
| Blocked/allowed traffic decisions — see what your firewall rules caught |
| Firewall rules/policies with filtering by action/target, summary counts, disabled rule toggle |
| Block/allow target lists (custom domain lists, IP lists, and associated rules) |
| Enabled/disabled features, global + per-network policy overrides, DoH status, vulnerability scan results |
Network & System
Tool | Description |
| Ping/health check — is the Firewalla box alive? |
| Monthly bandwidth, speed test results, network monitor data |
| WAN latency, packet loss, DNS response times, connection quality |
| Per-WAN bandwidth breakdown (download/upload per interface) |
| Network segments, VLANs, WAN config, and network groups (sensitive data redacted) |
| Firmware version, model, uptime, public IP, CPU/memory usage |
| VPN connections — WireGuard, OpenVPN, mesh profiles and connected clients |
Prerequisites
Firewalla Gold (other models may work but are untested)
Node.js 18+
Your Mac/PC must be on the same network as the Firewalla
An ETP keypair (generated during one-time pairing — see below)
Installation
git clone https://github.com/scott-pallas/firewalla-mcp.git
cd firewalla-mcp
npm install
npm run buildPairing (One-Time Setup)
Before the MCP server can talk to your Firewalla, you need to generate an authentication keypair (ETP token). This is the same pairing mechanism the Firewalla mobile app uses — think of it as registering a new "device" with your Firewalla box.
This step uses a separate utility called firewalla-tools. It is not a dependency of this project — you only need it once to generate your .pem key files. After pairing is complete, you can delete it.
1. Clone firewalla-tools (temporary)
git clone https://github.com/lesleyxyz/firewalla-tools.git
cd firewalla-tools
npm install2. Enable Additional Pairing
In the Firewalla app on your phone:
Tap your Firewalla box
Go to Settings → Advanced → Allow Additional Pairing
Toggle it ON — a QR code will appear on screen
3. Get the QR Code JSON
The pairing tool needs the JSON data encoded in the QR code. To get it:
Screenshot the QR code shown in the Firewalla app
Scan the screenshot with a QR code reader app (or use your phone's built-in camera)
The QR code decodes to a JSON string that looks like:
{"gid":"...","seed":"...","license":"...","ek":"...","ipaddress":"..."}Copy that JSON string — you'll paste it in the next step
4. Generate the Keypair
From the firewalla-tools directory:
cd create-etp-token
node index.jsThe tool will prompt you for:
Email — just a label (e.g.,
you@example.com), used for display in the Firewalla appQR code JSON — paste the JSON string from step 3
Firewalla IP — your box's IP address (e.g.,
10.0.1.1— this is usually your default gateway)Create new keypair? — choose Yes
This generates etp.public.pem and etp.private.pem in the current directory.
Tip: To find your Firewalla's IP, run
netstat -rn | grep default— the gateway IP is your Firewalla.
5. Store the Keys
Move the .pem files somewhere secure:
mkdir -p ~/.firewalla
mv etp.public.pem etp.private.pem ~/.firewalla/
chmod 600 ~/.firewalla/*.pemKeep these files safe — they are your authentication credentials.
6. Clean Up
You no longer need firewalla-tools — feel free to delete it:
cd ../..
rm -rf firewalla-toolsUsage
With Claude Code
Add the server to your global config (~/.claude.json) under mcpServers:
{
"mcpServers": {
"firewalla": {
"type": "stdio",
"command": "node",
"args": ["/path/to/firewalla-mcp/dist/index.js"],
"env": {
"FIREWALLA_IP": "10.0.1.1",
"FIREWALLA_PUBLIC_KEY_PATH": "/Users/yourname/.firewalla/etp.public.pem",
"FIREWALLA_PRIVATE_KEY_PATH": "/Users/yourname/.firewalla/etp.private.pem"
}
}
}
}Then restart Claude Code. The Firewalla tools will be available in all sessions.
With Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"firewalla": {
"command": "node",
"args": ["/path/to/firewalla-mcp/dist/index.js"],
"env": {
"FIREWALLA_IP": "10.0.1.1",
"FIREWALLA_PUBLIC_KEY_PATH": "/Users/yourname/.firewalla/etp.public.pem",
"FIREWALLA_PRIVATE_KEY_PATH": "/Users/yourname/.firewalla/etp.private.pem"
}
}
}
}With MCP Inspector (debugging)
FIREWALLA_IP=10.0.1.1 \
FIREWALLA_PUBLIC_KEY_PATH=~/.firewalla/etp.public.pem \
FIREWALLA_PRIVATE_KEY_PATH=~/.firewalla/etp.private.pem \
npx @modelcontextprotocol/inspector node dist/index.jsEnvironment Variables
Variable | Required | Default | Description |
| Yes | — | Path to |
| Yes | — | Path to |
| No |
| Your Firewalla's IP address |
Example Queries
Once connected to an MCP client, try:
"Show me all active security alarms"
"List every device on my network"
"Who are the top bandwidth consumers?"
"Show me devices grouped by VLAN"
"Which devices went offline in the last 12 hours?"
"Show me network flows for device AA:BB:CC:DD:EE:FF"
"Search for all connections to netflix.com in the last 24 hours"
"What DNS queries did my smart TV make today?"
"What traffic has been blocked by the firewall today?"
"Show me all my firewall rules"
"What block/allow target lists do I have?"
"What Firewalla features are enabled?"
"Is my Firewalla box healthy?"
"What firmware version is running?"
"How's my WAN latency and packet loss?"
"Show me per-WAN bandwidth usage"
"What's the status of my VPN connections?"
"Show me my network segments and VLANs"
Project Structure
firewalla-mcp/
├── src/
│ ├── index.ts # MCP server entry (stdio transport)
│ ├── firewalla-client.ts # Firewalla local API wrapper
│ └── tools/
│ ├── alarms.ts # get_alarms
│ ├── devices.ts # get_devices, get_top_talkers, get_clients_by_network, get_offline_devices
│ ├── dns.ts # get_dns_queries
│ ├── flows.ts # get_device_flows, search_flows, get_audit_logs
│ ├── network.ts # get_network_status, get_network_stats, get_network_performance, get_wan_usage
│ ├── rules.ts # get_rules, get_features, get_target_lists
│ ├── system.ts # get_system_info
│ ├── vlans.ts # get_vlans
│ └── vpn.ts # get_vpn_status
├── dist/ # Compiled JS (after build)
├── package.json
├── tsconfig.json
└── CLAUDE.md # AI agent project specSecurity
Read-only only — this server cannot modify your Firewalla configuration
Local network only — communicates directly with your Firewalla box, no cloud relay
Key-based auth — uses the same ETP token mechanism as the Firewalla mobile app
Sensitive data redacted — WiFi passwords, WireGuard private keys, tokens, credentials, API keys, passphrases, and pre-shared keys are automatically stripped from output
Input limits — all
countparameters are clamped to a max of 5000 to prevent excessive data retrievalKeep your
.pemfiles secure — they grant read access to your network data
Credits
node-firewalla — Firewalla local API client library
firewalla-tools — One-time pairing utility for generating ETP auth keys (not a runtime dependency)
MCP TypeScript SDK — Model Context Protocol server framework
License
MIT — see LICENSE
Available Tools
19 toolsget_alarmsA
List active security alarms from Firewalla (intrusion attempts, abnormal uploads, etc.). Supports filtering by severity, type, and device.
| Name | Required | Description | Default |
|---|---|---|---|
| mac | No | Filter alarms for a specific device by MAC address | |
| type | No | Filter by alarm type (e.g. 'ALARM_NEW_DEVICE', 'ALARM_ABNORMAL_BANDWIDTH_USAGE', 'ALARM_GAME', 'ALARM_VULNERABILITY') | |
| count | No | Max alarms to return (default all) | |
| severity | No | Filter by severity level (e.g. 'critical', 'major', 'minor', 'info') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry behavioral disclosure. It specifies that only active alarms are listed and gives examples of alarm types, which adds context beyond the name. However, it doesn't disclose output structure, ordering, permissions, or limits.
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 front-loads the verb and resource, then notes filtering options. 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?
The tool is a straightforward read operation with all input parameters documented in the schema. The description doesn't explain the return format, but the examples of alarm types partly compensate for the absent output schema. It lacks details on pagination or error handling, but overall is adequate for a simple list tool.
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?
All four parameters have thorough schema descriptions, achieving 100% coverage. The description's mention of filtering by severity, type, and device mirrors the schema without adding new syntax or default behavior information.
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 the specific verb 'List' and identifies the resource as 'active security alarms from Firewalla', with examples that distinguish it from sibling tools like get_devices or get_top_talkers. It clearly states the tool's scope and filtering capabilities.
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 mention of when to use this tool over alternatives or exclusions. The description implies usage for retrieving security alarms, but doesn't reference sibling tools or provide decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_logsA
Get audit logs showing blocked and allowed traffic decisions. Shows which connections were blocked by firewall rules and why. Supports filtering by device MAC, domain, IP, and time range.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Filter by IP address | |
| mac | No | Filter to a specific device by MAC address. Omit for all devices. | |
| count | No | Max results to return (default 100, max 5000) | |
| domain | No | Filter by domain | |
| hoursBack | No | How many hours back to search (default 24) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It accurately conveys the read-only nature by saying 'shows' and describes the output content (blocked/allowed decisions and reasons). However, it does not disclose limitations like data retention, output limits, or error conditions, leaving some gaps.
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 two sentences long, front-loads the primary purpose, and adds essential filtering detail without any waste. Every clause contributes value, making it appropriately sized and well-structured.
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 read-only log retrieval tool with no output schema and moderate parameter count, the description provides sufficient context: it explains what the logs contain, the filtering options, and the purpose. It could mention counting or ordering, but the schema handles parameter details, and the sibling context makes the tool's role clear.
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 100% description coverage for all five parameters, so the baseline is 3. The description adds a high-level summary of filtering dimensions (MAC, domain, IP, time range) that maps to the schema, but it does not add new meaning beyond what the schema already provides. Count is not mentioned, but the schema covers 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 verb ('Get') and resource ('audit logs') and specifies the scope: blocked and allowed traffic decisions. It distinguishes itself from siblings by focusing on firewall rule outcomes, which is unique among the listed tools like get_dns_queries or search_flows.
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 gives clear context for when to use the tool—when investigating blocked connections and why they were blocked. It also lists key filters (MAC, domain, IP, time range) that help narrow usage, though it does not explicitly mention alternative tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clients_by_networkA
Get connected devices grouped by network segment/VLAN. Shows which devices are on each network.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max devices per network to return (default 500, max 5000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It indicates a read-only 'get' operation, but it does not clarify whether 'connected devices' includes only currently online devices or all known devices, nor does it disclose any other behavioral details. The ambiguity with sibling tools like get_offline_devices leaves a gap, though the read-only nature is evident.
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, with two short sentences. The second sentence 'Shows which devices are on each network' is somewhat redundant with the first but adds a minor clarification about the output orientation. It could be trimmed, but it is not verbose and the key information is front-loaded.
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 read tool with one optional parameter and no output schema, the description provides adequate context to understand the grouping function. However, it could benefit from clarifying the inclusion criteria (online vs. all devices) and the return format, especially given the presence of sibling tools like get_offline_devices. This slight gap keeps it from a 5.
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 schema provides a complete description for the single 'count' parameter (default 500, max 5000). The description text itself adds no parameter-specific meaning beyond the schema, so the baseline of 3 applies due to 100% schema coverage.
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 function with the specific verb 'Get' and identifies the resource as 'connected devices grouped by network segment/VLAN'. This explicitly distinguishes it from sibling tools like get_devices and get_vlans, and the second sentence reinforces the grouping behavior.
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 when a per-network view of devices is needed, but it does not explicitly state when to use this tool vs. alternatives like get_devices or get_offline_devices. No exclusions or alternative conditions are mentioned, but the clear context of grouping provides a reasonable usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_flowsA
Get recent network flows for a specific device by MAC address. Returns flow data from the Firewalla init payload.
| Name | Required | Description | Default |
|---|---|---|---|
| mac | Yes | MAC address of the device (e.g. AA:BB:CC:DD:EE:FF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are available, so the description carries the burden of behavioral disclosure. It states that the tool returns flow data from the Firewalla init payload, which provides some context, but it does not mention safety, permissions, limitations, or side effects. For a simple read operation, this is minimally acceptable.
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 two sentences long, front-loaded with the purpose, and contains no extraneous information. It efficiently conveys the tool's function and data source.
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 has a single parameter and no output schema, so the description needs to explain the return value. It says 'returns flow data' but does not describe the structure or any limitations (e.g., time window, flow count). This is adequate but leaves gaps for an agent expecting a detailed response format.
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 100% coverage with a description for the 'mac' parameter, so the description adds little beyond the schema. The text 'by MAC address' reinforces what the schema already documents, making this baseline 3.
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 gets recent network flows for a specific device by MAC address. It uses a specific verb and resource, and distinguishes itself from sibling tools like get_top_talkers or search_flows by the device-specific scope.
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 clearly implies the tool is for retrieving flows for a particular device via MAC address, giving it a clear context. However, it does not explicitly mention alternatives or when-not-to-use, so it lacks exclusions but still provides enough guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_devicesA
List all devices on the network (hostname, IP, MAC, manufacturer, online status)
| Name | Required | Description | Default |
|---|---|---|---|
No 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 describes the output content but does not mention whether the data is real-time, how 'online status' is determined, or whether pagination or response limits apply.
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 a parenthetical list of fields. Every word earns its place, and there is 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, zero-parameter tool without an output schema, the description is mostly complete. It states what is listed and the key fields. However, it could be improved by noting whether the list includes only the current network or all networks, or by giving a hint about the returned data format.
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 zero parameters, so the baseline is 4. The description adds value by enumerating the returned fields (hostname, IP, MAC, manufacturer, online status), which is helpful even though parameter semantics are not applicable.
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 a specific action ('List all devices on the network') and identifies the resource ('devices') plus key output fields. The word 'all' distinguishes it from sibling tools like get_offline_devices, which targets a subset.
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. It does not mention that get_offline_devices or get_clients_by_network might be more appropriate for specific filtering needs, leaving the agent with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_queriesA
Get DNS query logs showing every domain a device attempted to resolve. More complete than flow data since it captures queries even for very brief connections. Supports filtering by device MAC, domain, and time range.
| Name | Required | Description | Default |
|---|---|---|---|
| mac | No | Filter to a specific device by MAC address. Omit for all devices. | |
| count | No | Max results to return (default 100, max 5000) | |
| domain | No | Filter by queried domain (e.g. 'example.com') | |
| hoursBack | No | How many hours back to search (default 24) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds a useful behavioral trait — 'captures queries even for very brief connections' — which indicates the tool's comprehensiveness. However, it does not disclose return format, pagination, rate limits, or authentication requirements. This is a moderate level of transparency, but not exhaustive.
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 exceptionally concise: two sentences. The first sentence states the core purpose, and the second adds a comparative advantage and filtering capabilities. There is no redundant or extraneous information. Every word earns its place, making it highly efficient for an agent to parse.
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 moderate complexity (4 optional params, no output schema), the description is reasonably complete. It explains what the tool does, when it is more useful than alternatives, and what parameters it supports. The main gap is the lack of an explicit response shape, but since there is no output schema, the description could have mentioned the output format. Still, it provides enough context for an agent to select and invoke the tool effectively.
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 100% parameter description coverage, so the schema already documents all four parameters (mac, count, domain, hoursBack). The description adds some contextual meaning by mentioning 'filtering by device MAC, domain, and time range,' but this largely mirrors the schema. It does not introduce major new semantics beyond the schema, so the baseline of 3 is appropriate.
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 function: 'Get DNS query logs showing every domain a device attempted to resolve.' It uses a specific verb ('Get') and resource ('DNS query logs'), and distinguishes itself from flow data by noting it 'captures queries even for very brief connections.' This makes it easy to differentiate from siblings like get_device_flows or search_flows.
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 provides a clear usage context by explicitly comparing to 'flow data' and explaining why this tool is more complete for capturing DNS queries, even for brief connections. However, it does not name specific sibling tools or state when not to use this tool, so it falls short of full explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_featuresA
List Firewalla features, global policy, per-network policy overrides, DoH (DNS over HTTPS) status, and system vulnerability scan status including external port scans, weak password scans, and UPnP port forwarding results
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It implies a read-only 'List' operation but doesn't explicitly state that no state changes occur, nor does it clarify whether vulnerability scans are triggered or only existing results are returned. The description focuses on content scope but omits any operational 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 a single sentence that packs all relevant content into a compact list. Every element contributes to the purpose, with no filler or repetition. It is front-loaded with 'List' and immediately enumerates the distinct categories.
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, no output schema, and no annotations, the description is reasonably complete for a listing tool. It covers the main data types returned, but could be enhanced by describing the response structure or including examples. However, the enumeration is sufficient for an agent to know what information is available.
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 zero parameters, so the baseline is 4. The description adds no parameter information because none is needed; it's a list-all-style tool. This is appropriate for the tool's simplicity.
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 the specific verb 'List' and clearly identifies the resource: Firewalla features, global policy, per-network policy overrides, DoH status, and vulnerability scan status. This enumeration uniquely distinguishes it from sibling tools like get_system_info or get_network_status, providing a clear and specific purpose.
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 given on when to use this tool versus alternatives. It merely states what it lists without context on typical use cases, prerequisites, or exclusions. For example, it doesn't indicate whether this is the go-to for security status or if some data is available elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_performanceB
Get network performance metrics: WAN latency, packet loss, DNS response times, and connection quality from the network monitor.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It does not disclose behavior such as whether the operation is read-only, what the output format looks like, any rate limits, or any side effects. The phrase 'from the network monitor' adds minimal context, but the description is essentially a subject-verb-object statement with no behavioral 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, concise sentence that is front-loaded with the purpose and specific metrics. Every word contributes value, with no wasted text or repetition.
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 no parameters and no output schema, the description adequately lists the key metrics returned. It lacks details like time range or output format, but the tool's simplicity and the enumeration of metrics make it reasonably complete. Sibling context does not demand more.
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 tool has zero parameters, so the schema is fully covered and there is nothing to explain. Baseline for 0 params is 4, and the description adds no parameter semantics 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 uses the specific verb 'Get' with a clear resource ('network performance metrics') and enumerates specific metrics (WAN latency, packet loss, DNS response times, connection quality). It distinguishes itself from some siblings (e.g., get_wan_usage) by listing these explicit metrics, though it does not explicitly name alternatives or differentiate from close siblings like get_network_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 is provided on when to use this tool versus the many sibling tools. The description simply states what it does without mentioning context, alternatives, exclusions, or recommendations. This leaves the agent without clear direction on selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_statsB
Get network statistics: monthly bandwidth usage, recent speed tests, and network monitor data
| Name | Required | Description | Default |
|---|---|---|---|
No 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 disclosing behavioral traits. It mentions the data categories returned, which hints at read-only behavior, but it does not explicitly confirm safety, explain data freshness, or note any side effects. For a 'get' tool this is minimally sufficient, but the description adds little beyond the obvious from the tool name.
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 that efficiently lists the three main data types. It is front-loaded with the verb and resource, and every word contributes meaning. No fluff or redundancy.
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 description is adequate for a simple read operation with no parameters or output schema, but it lacks clarity on how this tool differs from the many sibling tools. The listed data types (monthly bandwidth usage, speed tests, network monitor data) are somewhat vague and could overlap with get_wan_usage or get_network_performance. It does not specify the time range for 'recent' speed tests or the format of the returned data, leaving room for ambiguity.
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 tool has zero parameters, and the schema coverage is trivially 100%. The description does not need to explain parameters. The baseline for zero parameters is 4, and no additional param semantics are required.
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 gets network statistics, listing three concrete data types (monthly bandwidth usage, recent speed tests, network monitor data). This is a specific verb+resource, but it does not explicitly distinguish from sibling tools like get_wan_usage or get_network_performance, so it misses the top score.
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. The description simply states what it does, and the existence of many sibling tools with similar scope (e.g., get_wan_usage, get_network_status) is not acknowledged. There is no contextual 'when to use' or 'when not to use' information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_statusA
Ping/health check of the Firewalla box — returns uptime and timestamp
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the tool's read-only nature as a health check and explicitly mentions the output (uptime, timestamp). While it does not elaborate on side effects or deeper behavior, the simplicity and clarity of the operation make this sufficiently transparent.
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 efficiently states purpose and output. Every word contributes value without redundancy.
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 zero-parameter health check, the description fully covers what the tool does and what it returns. No output schema or annotations exist, and the simple scope means nothing critical is missing.
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 tool has zero parameters, so schema coverage is effectively 100%. The description adds no parameter information, but none is needed, and the baseline for parameterless tools is 4.
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 identifies the tool as a health check for the Firewalla box, specifying that it returns uptime and timestamp. This distinguishes it from sibling tools like get_system_info or get_network_stats, which imply more detailed or 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?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention alternative tools or conditions under which to prefer this over get_system_info or get_network_performance, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_offline_devicesA
List devices that have gone offline recently. Returns devices sorted by most recently seen, filtered by how many hours back to look.
| Name | Required | Description | Default |
|---|---|---|---|
| hoursBack | No | How many hours back to look for devices that went offline (default 24, max 720) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses useful behavioral traits: results are sorted by most recently seen and filtered by the configured hoursBack window. However, it does not mention whether the operation is read-only (though 'List' implies safe) or any error/edge-case behavior, leaving some room for improvement.
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 two sentences, front-loaded with the core purpose, and every word adds value. No wasted text or repetition of schema basics beyond necessary paraphrase.
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 one-parameter list tool with no output schema, the description covers the essential behavior: listing offline devices, sorting, and filtering. It lacks explicit mention of return format, but that is not strictly required. It is concise yet sufficient for correct invocation.
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 schema already fully describes the hoursBack parameter with default and max values (100% coverage). The description repeats the filtering concept but adds no extra meaning or usage details beyond what the schema provides, so baseline 3 is appropriate.
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 and resource ('List devices that have gone offline recently') and clearly differentiates from siblings like get_devices by specifying the offline condition and sort order. It is unambiguous and scoped.
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 when to use this tool (when you need offline devices) but does not explicitly mention alternatives or exclusions. It does not state 'use get_devices for all devices' or provide any when-not guidance, so it only meets the implicit usage level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rulesA
List all firewall rules/policies including hit counts. Shows active rules including block rules, allow rules, route rules, and their targets (devices, groups, networks, domains, ports). Supports filtering by type and target.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Filter by rule action: 'block', 'allow', 'route', 'qos', 'match' | |
| target | No | Filter rules that mention this target (domain, IP, MAC, category) | |
| disabled | No | Include disabled rules (default false — only active rules) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses that only active rules are shown by default (though the disabled param exists), includes hit counts, and supports filtering. It does not mention auth, rate limits, or return structure, but for a read-only list tool, it provides adequate behavioral detail.
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 concise sentences. The first sentence immediately states the primary function, and the second adds valuable details about rule types and filtering. No 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?
Description covers the main output (rules with hit counts), rule types, targets, and filtering. It does not mention the disabled parameter or return formatting, but with no output schema and only three optional params, it is reasonably complete for assessing what the tool does.
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 coverage is 100% for the three parameters. The description adds context about filtering by type and target, but does not elaborate on the 'disabled' parameter, which is already described in the schema. Baseline 3 is appropriate since the schema handles most parameter meaning.
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 rules/policies and includes specific rule types (block, allow, route) and targets (devices, groups, networks, domains, ports). This distinguishes it from sibling tools like get_alarms or get_devices by focusing on 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?
The description implies this is the tool for listing firewall rules and mentions filtering by type and target, giving clear context for use. It does not explicitly state when not to use it or name alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_infoA
Get Firewalla system information: firmware version, model, branch, uptime, public IP, CPU/memory usage, and hardware details
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must convey safety and behavior directly. It clearly indicates a read-only operation via 'Get' and lists the returned information, but it does not disclose potential limitations (e.g., permissions, network dependency, or caching). For a simple info retrieval, this is adequate but not deeply transparent.
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, well-structured sentence that front-loads the action and resource, then uses a colon to list the specific information included. It contains no fluff or redundant detail.
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?
With no output schema and a zero-parameter schema, the description bears the responsibility of explaining what the tool returns. It enumerates the key system attributes (firmware, model, branch, uptime, public IP, CPU/memory, hardware), providing sufficient context for an agent to understand the tool's purpose and result. The tool is simple enough that this level of detail is 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?
The tool has zero parameters, and the schema is empty, so there is nothing to explain. The description adds value by specifying the output fields, which is the relevant semantic context. The baseline for zero parameters is 4, and the description meets 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 explicitly states 'Get Firewalla system information' and enumerates specific fields (firmware, model, branch, uptime, public IP, CPU/memory, hardware), making it clear that this tool retrieves device-level system metrics. This distinguishes it from sibling tools focused on network data like devices, flows, or statistics.
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 by the word 'Get' and the resource 'system information', but it does not explicitly contrast with alternatives or state exclusions. The scope is self-evident—use when you need Firewalla system details—so usage is implied rather than clearly prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_target_listsA
Get all target lists (block/allow lists) configured on the Firewalla. Shows custom domain lists, IP lists, and their associated rules.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It explicitly states the tool 'Get's and 'Shows' target lists and their contents, implying a safe read-only operation. It adds useful context about the data returned, though it does not delve into permissions or output format.
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 two sentences, front-loaded with the primary action ('Get all target lists') and followed by a concise explanation of the content. 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?
For a zero-parameter getter without an output schema, the description adequately explains what the tool returns (domain lists, IP lists, rules) and the scope (configured on the Firewalla). It could be more explicit about the exact response structure, but it is sufficient for a basic list retrieval tool.
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 tool has zero parameters, and the schema is empty. The description adds context about what target lists are, but parameter semantics is trivially satisfied; baseline 4 is appropriate due to the 0-param rule.
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 gets all target lists, with the clarification that these are block/allow lists. It also specifies the content (custom domain lists, IP lists, associated rules), which distinguishes it from sibling tools that focus on devices, alarms, or network stats.
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 gives clear context on when to use this tool: when the agent needs to see configured target lists. It does not explicitly name alternatives, but the tool's unique purpose is evident from the description and sibling context, making exclusions unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_talkersA
Get devices ranked by bandwidth usage (top talkers). Shows download, upload, and total bytes for each device over the recent period.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of top devices to return (default 20) | |
| direction | No | Sort by: 'total' (default), 'download', or 'upload' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds useful context by stating that output includes download, upload, and total bytes per device over a recent period. However, it does not explicitly state that this is a read-only query, nor does it disclose sorting behavior or how the 'direction' parameter affects results.
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 two sentences, front-loaded with the action and purpose, and contains no fluff. Every word contributes either to what the tool does or what it returns.
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 two optional parameters and no output schema, the description provides a reasonable overview of the return structure (bytes per device) and time window ('recent period'). However, 'recent period' is ambiguous, and the description does not clarify that 'count' limits the number of results, though this is covered in the schema.
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 100%: both 'count' and 'direction' are described in the input schema. The description adds no additional parameter semantics beyond what the schema already provides, so it meets the baseline for high schema coverage without exceeding 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 uses a specific verb 'Get' and a clear resource ('devices ranked by bandwidth usage'), and introduces the 'top talkers' concept. It distinguishes itself from siblings like get_wan_usage (WAN-level) and get_network_stats (aggregate), though it does not explicitly name an alternative for comparison.
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 intended use case is implied by the description ('Get devices ranked by bandwidth usage'), but there is no explicit guidance on when to prefer this tool over siblings like get_device_flows or get_network_stats. No alternatives, exclusions, or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vlansA
List network segments, VLANs, and network groups configured on the Firewalla. Shows network names, subnets, VLAN IDs, and which interfaces they're on.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It indicates a read-only operation by using 'List' and describes the data returned, but it does not explicitly state that the operation has no side effects, requires no special permissions, or mention any edge cases. This is adequate but not fully transparent.
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 two concise sentences with no fluff. It front-loads the primary purpose and then lists the useful output attributes, earning every word.
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?
This is a simple zero-parameter list tool with no output schema. The description covers the main categories (network segments, VLANs, network groups) and the returned attributes (names, subnets, VLAN IDs, interfaces). It does not discuss formatting, ordering, or hidden items, but for this simple read-only use case it is sufficiently 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?
The tool accepts zero parameters, and the input schema is empty. There are no parameter semantics to document; the baseline of 4 applies. The description adds value by detailing the output contents, which is the relevant semantic information for this tool.
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 the specific verb 'List' and clearly identifies the resource: network segments, VLANs, and network groups configured on the Firewalla. It also enumerates the returned fields (network names, subnets, VLAN IDs, interfaces), making its purpose unmistakable and distinct from sibling tools like get_devices or get_network_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?
Usage is implied from the description: call this tool when you need to retrieve the Firewalla's VLAN/segment configuration. It does not explicitly state when not to use it or mention alternatives, but given the focused resource and zero parameters, the intended use is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vpn_statusA
Get VPN status including WireGuard, OpenVPN, and VPN mesh connections. Shows configured VPN profiles, connected clients, and connection health.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose side effects, permissions, or read-only guarantees. It only lists output contents (profiles, clients, health) without addressing whether the operation is safe, requires auth, or has rate limits. The 'get' prefix suggests read-only but is 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?
Two sentences, front-loaded with the primary action. No redundant information.
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?
With no params and no output schema, the description adequately covers the tool's purpose and output scope. It lists the key categories of information returned, which is sufficient for an agent to select and invoke the tool, though more detail on response format could be beneficial.
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 tool has no parameters, so baseline is 4 per rubric. The description does not need to explain parameters and instead clarifies what status information is included, adding value.
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?
States the exact function 'Get VPN status' and lists supported VPN technologies (WireGuard, OpenVPN, VPN mesh). This clearly differentiates it from sibling tools like get_network_status, which target generic network status rather than VPN-specific details.
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 this tool versus alternatives. However, the description implies it's the tool for VPN-related status, and no sibling tool directly covers VPN, so usage context is clear but not formally stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wan_usageA
Get per-WAN data usage breakdown. Shows bandwidth consumption per WAN interface with download/upload totals.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly indicates a read operation ('Get', 'Shows'), but it does not disclose whether data is real-time or historical, aggregation details, or potential access limitations. The behavior is transparent in intent but lacks depth expected without annotations.
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 two concise sentences that front-load the core purpose ('Get per-WAN data usage breakdown') and then provide a defining detail. There is no redundancy or filler.
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 with no parameters and no output schema. The description covers the essential return content (per-interface breakdown with download/upload totals), but could optionally specify units or time period. Overall, it is complete enough for a read-only tool of this simplicity.
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 zero parameters, so the baseline is 4 per the rubric. The description adds no parameter-specific meaning, but none is needed since the schema is empty. It focuses on the output, which is appropriate for a parameterless tool.
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 states a specific verb ('Get') and resource ('per-WAN data usage breakdown'), with explicit detail on what it shows ('bandwidth consumption per WAN interface with download/upload totals'). This clearly distinguishes it from sibling tools like get_network_stats or get_vpn_status, which focus on different scopes.
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 when WAN-level data usage is needed, but it does not explicitly state when to use it over alternatives or provide exclusions. Sibling tools like get_network_performance could overlap, yet no guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flowsA
Search individual network flow records with filters. Returns per-connection details including destination IP, domain, port, protocol, bytes transferred, country, and app category. Supports filtering by device MAC, domain, IP, port, category, and time range.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Filter by destination IP address | |
| mac | No | Filter to a specific device by MAC address. Omit for all devices. | |
| port | No | Filter by destination port number | |
| count | No | Max results to return (default 100, max 5000) | |
| domain | No | Filter by destination domain (e.g. 'netflix.com') | |
| category | No | Filter by intel category (e.g. 'av', 'games', 'social', 'porn', 'intel') | |
| hoursBack | No | How many hours back to search (default 24) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses what the tool returns and that filtering is supported, but it omits details such as default time range, max results, or any side effects/requirements (e.g., read-only behavior). The schema supplies some defaults, but the description itself adds limited behavioral context beyond the return fields.
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 two concise sentences with the main action front-loaded in the first sentence and return details in the second. No redundant information or filler.
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 description covers the core purpose, filter capabilities, and return fields. For a 7-parameter tool with a complete schema, this is largely sufficient. However, it lacks guidance on when to use this versus related flow tools, and it does not clarify default behavior like time range or limit handling, which may be important for agents.
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 100% description coverage for all 7 parameters, so the description's filter list adds minimal value. The description mentions filters like device MAC, domain, IP, port, category, and time range, which directly correspond to parameters, but it does not provide any additional syntax, formatting, or edge-case guidance beyond the schema's 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 identifies the action (Search), the resource (individual network flow records), and provides specific return fields (destination IP, domain, port, protocol, bytes, country, app category). The term 'individual' and 'per-connection' helps distinguish from aggregate tools like get_top_talkers.
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 the tool is for searching flows with filters, but it offers no explicit guidance on when to choose this over related tools like get_device_flows or get_top_talkers. There are no alternative suggestions or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct aspect of the Firewalla system: alarms, devices, network metrics, flows, rules, VPN, etc. Even closely related tools like get_devices, get_clients_by_network, and get_offline_devices have clear, non-overlapping purposes.
Every tool follows the verb_noun pattern with consistent snake_case (e.g., get_alarms, get_network_status, get_wan_usage). The get_ prefix uniformly signals read operations, making the naming highly predictable.
19 tools is on the higher side but each covers a distinct facet of the network security domain. The scope is broad but justified by the variety of data Firewalla exposes, and no tool feels redundant.
The tool set is entirely read-only (all getters). There are no create, update, delete, or action tools, so an agent cannot block devices, modify firewall rules, or manage target lists, which are core Firewalla operations. This is a significant gap for a management-oriented MCP server.
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
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query and audit AppSheet apps in natural language via Knotrik's pre-scanned definitions.
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Query OneLens cloud-cost data in natural language: breakdowns, trends, cost centers. Read-only.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA production-ready server that connects Claude Desktop to Firewalla network management capabilities, allowing users to monitor devices, analyze network traffic, manage security alerts, and configure firewall rules through natural language.-
- AlicenseNot gradedqualityNot gradedmaintenanceProvides real-time access to Firewalla firewall data through 28 specialized tools for network monitoring, security analysis, bandwidth tracking, and firewall rule management. Enables users to query security alerts, analyze network flows, monitor device status, and manage firewall configurations through natural language.761-
- 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
- AlicenseNot gradedqualityDmaintenanceEnables read-only querying and diagnostics of Fortigate firewalls via SSH, providing security analysis, traffic monitoring, and configuration inspection through natural language.MIT
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/scott-pallas/firewalla-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server