Skip to main content
Glama
amittell

firewalla-mcp-server

search_devices

Read-only

Search Firewalla devices by name, IP, MAC, status, vendor, network, or group; filter the device list locally to locate a device or audit clients.

Instructions

Search devices by name, IP, MAC or status (convenience wrapper with client-side filtering): reads the device list from GET /v2/devices (box, else FIREWALLA_BOX_ID, else every box) and filters it locally.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
boxNoFilter devices under a specific Firewalla box
limitNoMaximum number of devices to return
queryYesSearch query using Firewalla syntax. A word or quoted phrase with no field is free text, found case-insensitively in the name, IP, MAC or id, vendor, or network or group name. ip: also takes an IPv4 CIDR block, and a comma list matches any of its values (name:tv,nas). Supported fields: mac:AA:BB:CC:DD:EE:FF, ip:192.168.1.*, name:*iPhone*, online:true/false, mac_vendor:Apple, gid:box_gid, network.name:*, group.name:*. Examples: "online:false AND mac_vendor:Apple", "ip:192.168.1.* AND name:*laptop*", "mac:AA:* OR name:*phone*", "ip:192.168.1.0/24", "nas", "kids AND online:true"
response_formatNoResponse format. 'json' (default): the compact JSON response. 'markdown': the same response as readable markdown, its fields as bullet lists and each list of records as a table of up to 8 columns and DEFAULT_PAGE_SIZE rows (default 100), ending with a line that says what the view leaves out. Omitted or null: 'json'. Errors are JSON either way.json

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv2.0.1
    • changedInput schema / properties / limit / maximum
      Previous value: -500New value: +1000
    • changedInput schema / properties / query / description
      Previous value: -"Search query using Firewalla syntax. Supported fields: mac:AA:BB:CC:DD:EE:FF, ip:192.168.1.*, name:*iPhone*, online:true/false, mac_vendor:Apple, gid:box_gid, network.name:*, group.name:*. Examples: \"online:false AND mac_vendor:Apple\", \"ip:192.168.1.* AND name:*laptop*\", \"mac:AA:* OR name:*phone*\""New value: +"Search query using Firewalla syntax. A word or quoted phrase with no field is free text, found case-insensitively in the name, IP, MAC or id, vendor, or network or group name. ip: also takes an IPv4 CIDR block, and a comma list matches any of its values (name:tv,nas). Supported fields: mac:AA:BB:CC:DD:EE:FF, ip:192.168.1.*, name:*iPhone*, online:true/false, mac_vendor:Apple, gid:box_gid, network.name:*, group.name:*. Examples: \"online:false AND mac_vendor:Apple\", \"ip:192.168.1.* AND name:*laptop*\", \"mac:AA:* OR name:*phone*\", \"ip:192.168.1.0/24\", \"nas\", \"kids AND online:true\""
    • addedInput schema / properties / response_format
      Added value: +{
      +  "default": "json",
      +  "description": "Response format. 'json' (default): the compact JSON response. 'markdown': the same response as readable markdown, its fields as bullet lists and each list of records as a table of up to 8 columns and DEFAULT_PAGE_SIZE rows (default 100), ending with a line that says what the view leaves out. Omitted or null: 'json'. Errors are JSON either way.",
      +  "enum": [
      +    "json",
      +    "markdown",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  2. Changed2 schema fields changedv1.5.0
    • changedInput schema / properties / query / description
      Previous value: -"Search query using Firewalla syntax. Supported fields: mac:AA:BB:CC:DD:EE:FF, ip:192.168.1.*, name:*iPhone*, online:true/false, vendor:Apple, gid:box_id, network.name:*, group.name:*. Examples: \"online:false AND vendor:Apple\", \"ip:192.168.1.* AND name:*laptop*\", \"mac:AA:* OR name:*phone*\""New value: +"Search query using Firewalla syntax. Supported fields: mac:AA:BB:CC:DD:EE:FF, ip:192.168.1.*, name:*iPhone*, online:true/false, mac_vendor:Apple, gid:box_gid, network.name:*, group.name:*. Examples: \"online:false AND mac_vendor:Apple\", \"ip:192.168.1.* AND name:*laptop*\", \"mac:AA:* OR name:*phone*\""
    • removedInput schema / properties / status
      Removed value: -{
      -  "default": "any",
      -  "description": "Filter by online status",
      -  "enum": [
      -    "online",
      -    "offline",
      -    "any"
      -  ],
      -  "type": "string"
      -}
  3. Changed1 schema field changedv1.3.0
    • changedInput schema / required
      Previous value: -[]New value: +[
      +  "query"
      +]
  4. First observed

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely useful behavior beyond that: filtering happens client-side after reading the full device list, and the box scope resolves as box param -> FIREWALLA_BOX_ID -> every box. It does not disclose result shape or how 'limit' interacts with local filtering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence names the resource and searchable fields first, with implementation detail confined to a trailing parenthetical. Dense but no wasted sentences; only the nested 'else ... else ...' clause requires a second read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers the data source, the filtering model, and box scoping, which is enough for correct invocation. Return format and limit semantics are left unaddressed, but these are secondary for a read-only search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for the 'box' parameter by documenting the three-step resolution fallback (explicit box, environment variable, all boxes). The query syntax is fully specified in the schema, so no further description value is needed there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Search devices') and enumerates the searchable dimensions (name, IP, MAC, status), plus discloses the implementation (client-side wrapper over GET /v2/devices). It does not name sibling alternatives such as get_offline_devices or get_device_status, so an agent must infer differentiation itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mechanism note ('convenience wrapper with client-side filtering') implies this is the right tool for ad-hoc filtering of the device list, and the box fallback chain tells the agent what happens when 'box' is omitted. There is no explicit when-not-to-use guidance or named alternative for the device domain.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.