firewalla-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FIREWALLA_MSP_TOKEN | Yes | Personal access token from MSP Account Settings | |
| FIREWALLA_MSP_DOMAIN | Yes | Your MSP subdomain (no https://, no trailing slash), e.g., yourname.firewalla.net |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| firewalla_list_boxesA | Discover the Firewalla boxes linked to this MSP account. This is the entry point for every audit — the returned Use this to answer:
Args:
Returns: { count: number, boxes: Array<{ gid: string, // box id — save this, other tools need it name: string, model: string, // e.g. "gold_plus" mode: string, // routing mode version: string, // firmware online: boolean, publicIP?: string, lastSeen?: number, // epoch seconds — not always populated license?: string, location?: string, deviceCount: number, ruleCount: number, alarmCount: number, // currently-active alarms group?: { id, name } }> } Audit framing:
|
| firewalla_list_devicesA | Inventory every device Firewalla tracks — the "who's on my network right now" primitive. Use this to answer:
Args:
Returns: { count: number, // devices after client-side filtering total: number, // devices returned by the API (pre-filter) devices: Array<{ id: string, // typically MAC gid: string, // box the device is attached to name: string, ip: string, mac?: string, macVendor?: string, ipReserved?: boolean, online: boolean, network?: { id, name }, deviceType?: string, // e.g. "phone", "computer", "iot" isRouter?: boolean, isFirewalla?: boolean, monitoring?: boolean, // false = device excluded from monitoring totalDownload?: number, // bytes (lifetime) totalUpload?: number }> } Audit framing:
|
| firewalla_search_flowsA | Search network flows observed by Firewalla with the MSP query grammar. Use this to inspect what's actually happening on the wire. Use this to answer:
Args:
Returns: { count: number, // items in this page next_cursor?: string, flows: Array<{ ts, gid, protocol, direction, block?, blockType?, download?, upload?, total?, duration?, count?, device?: { id, ip?, name?, network? }, source?: { id?, ip?, name?, port? }, destination?: { id?, ip?, name?, port? }, // Flow-level classification fields (NOT nested under destination): country?, region?, domain?, category? }> } Audit framing:
|
| firewalla_search_alarmsA | Search active Firewalla alarms with the MSP query grammar. This is the primary tool for "what security events are happening right now?" audits. Use this to answer:
Args:
Returns: { count: number, // items in this page next_cursor?: string, // echo back to fetch the next page alarms: Array<{ aid, gid, type, ts, message, status?, device?: { id?, name?, ip? }, remote?: { ip?, country?, name?, region?, category? } }> } Audit framing:
|
| firewalla_get_alarmA | Fetch the full detail of a single alarm by Args:
Returns the full alarm record, which may include device, remote endpoint, category, timestamps, and any alarm-type-specific detail fields the MSP API surfaces. |
| firewalla_list_rulesA | Audit configured block / allow rules. Read-only — this tool does NOT pause, resume, create, or modify rules. Use this to answer:
Args:
Returns: { count: number, rules: Array<{ id: string, gid: string, action: string, // "block" | "allow" | "time_limit" | … direction?: string, // "outbound" | "inbound" | "bidirection" status?: string, // "active" | "paused" | "disabled" target: { type, value, dnsOnly?, port? }, scope?: { type?, value? }, notes?: string, hit?: { count?, lastHitTs? }, ts?: number, updateTs?: number }> } Audit framing:
|
| firewalla_list_target_listsA | List the block/allow target lists available on this MSP account — both Firewalla-managed ("global") and user-defined. Use this to answer:
This endpoint returns summaries (including target Args:
Returns: { count: number, // number of target lists targetLists: Array<{ id: string, name: string, owner: string, // "global" | user id type?: string, // e.g. "ad", "tracker", "malware", "custom" source?: string, // upstream feed source (Firewalla-managed lists) count?: number, // number of entries in the list blockMode?: string, // e.g. "dns" | "ip" beta?: boolean, notes?: string, lastUpdated?: number }> } Audit framing:
|
| firewalla_get_target_listA | Fetch the metadata for a single target list by id. MSP API limitation: For Firewalla-managed lists (owner="firewalla"), the MSP API does NOT return individual target entries — it returns the summary plus the aggregate Use this to answer:
Do NOT use this to answer:
Args:
Returns: { id, name, owner, type?, source?, blockMode?, notes?, lastUpdated?, count?: number, // summary count reported by the API targetCount: number, // same as count, or actual targets.length when present targets?: string[] // only populated for user-created lists (rare) } |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
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/productengineered/firewalla-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server