Real-time network monitoring, security analysis, and firewall management through 28 specialized tools. Access security alerts, network flows, device status, and firewall rules directly from your Firewalla device.
995
28 Tools
Version 4.43 or later needs to be installed to add the server automatically
Use cases
About
Real-time network monitoring, security analysis, and firewall management through 28 specialized tools. Access security alerts, network flows, device status, and firewall rules directly from your Firewalla device.
Attribute | Details |
---|---|
Docker Image | mcp/firewalla-mcp-server |
Author | amittell |
Repository | https://github.com/amittell/firewalla-mcp-server |
Dockerfile | https://github.com/amittell/firewalla-mcp-server/blob/main/Dockerfile |
Docker Image built by | Docker Inc. |
Docker Scout Health Score | |
Verify Signature | COSIGN_REPOSITORY=mcp/signatures cosign verify mcp/firewalla-mcp-server --key https://raw.githubusercontent.com/docker/keyring/refs/heads/main/public/mcp/latest.pub |
Licence | MIT License |
Tools provided by this Server | Short Description |
---|---|
create_target_list | Create a new target list |
delete_target_list | Delete a target list |
get_active_alarms | Retrieve current security alerts and alarms from Firewalla firewall |
get_alarm_trends | Get historical alarm trend data (alarms generated per day) |
get_bandwidth_usage | Get top bandwidth consuming devices (convenience wrapper around get_device_status) |
get_boxes | Retrieve list of Firewalla boxes |
get_device_status | Check online/offline status of devices on Firewalla network |
get_flow_data | Query network traffic flows from Firewalla firewall |
get_flow_insights | Get category-based flow analysis including top content categories, bandwidth consumers, and blocked traffic. |
get_network_rules | Retrieve firewall rules and conditions |
get_network_rules_summary | Get overview statistics and counts of network rules by category (convenience wrapper) |
get_offline_devices | Get all offline devices (convenience wrapper around get_device_status) |
get_recent_flow_activity | Get recent network flow activity snapshot (last 10-20 minutes). |
get_rule_trends | Get historical rule trend data (rules created per day) |
get_simple_statistics | Retrieve basic statistics overview |
get_specific_alarm | Get detailed information for a specific Firewalla alarm |
get_specific_target_list | Retrieve a specific target list by ID |
get_statistics_by_box | Get statistics for each Firewalla box (top boxes by blocked flows or security alarms) |
get_statistics_by_region | Retrieve statistics by region (top regions by blocked flows) |
get_target_lists | Retrieve all target lists from Firewalla |
pause_rule | Temporarily disable an active firewall rule for a specified duration |
resume_rule | Resume a previously paused firewall rule, restoring it to active state |
search_alarms | Search alarms using full-text or field filters. |
search_devices | Search devices by name, IP, MAC or status (convenience wrapper with client-side filtering) |
search_flows | Search network flows with advanced query filters. |
search_rules | Search firewall rules by target, action or status. |
search_target_lists | Search target lists with client-side filtering (convenience wrapper around get_target_lists) |
update_target_list | Update an existing target list |
create_target_list
Create a new target list
Parameters | Type | Description |
---|---|---|
name | string | Target list name (required, max 24 chars) |
owner | string | Owner: "global" or box GID (required) |
targets | array | Array of domains, IPs, or CIDR ranges (required) |
category | string optional | Content category (optional) |
notes | string optional | Additional description (optional) |
delete_target_list
Delete a target list
Parameters | Type | Description |
---|---|---|
id | string | Target list ID to delete (required) |
get_active_alarms
Retrieve current security alerts and alarms from Firewalla firewall
Parameters | Type | Description |
---|---|---|
cursor | string optional | Pagination cursor from previous response |
groupBy | string optional | Group alarms by field (e.g., type, box) |
limit | number optional | Results per page (optional, default: 200, API maximum: 500) |
query | string optional | Search query for filtering alarms (default: status:1 for active). Use type:N where N is: 1=Security Activity, 2=Abnormal Upload, 3=Large Bandwidth Usage, 4=Monthly Data Plan, 5=New Device, 6=Device Back Online, 7=Device Offline, 8=Video Activity, 9=Gaming Activity, 10=Porn Activity, 11=VPN Activity, 12=VPN Connection Restored, 13=VPN Connection Error, 14=Open Port, 15=Internet Connectivity Update, 16=Large Upload. Examples: type:8 (video), type:10 (porn), region:US, source_ip:* |
sortBy | string optional | Sort alarms (default: ts:desc) |
get_alarm_trends
Get historical alarm trend data (alarms generated per day)
Parameters | Type | Description |
---|---|---|
group | string optional | Get trends for a specific box group |
get_bandwidth_usage
Get top bandwidth consuming devices (convenience wrapper around get_device_status)
Parameters | Type | Description |
---|---|---|
period | string | Time period for bandwidth calculation |
box | string optional | Filter devices under a specific Firewalla box |
limit | number optional | Number of top devices to return |
get_boxes
Retrieve list of Firewalla boxes
Parameters | Type | Description |
---|---|---|
group | string optional | Get boxes within a specific group (requires group ID) |
get_device_status
Check online/offline status of devices on Firewalla network
Parameters | Type | Description |
---|---|---|
limit | number | Maximum number of devices to return (required) |
box | string optional | Get devices under a specific Firewalla box (requires box ID) |
group | string optional | Get devices under a specific box group (requires group ID) |
get_flow_data
Query network traffic flows from Firewalla firewall
Parameters | Type | Description |
---|---|---|
cursor | string optional | Pagination cursor from previous response |
groupBy | string optional | Group flows by specified values (e.g., "domain,box") |
limit | number optional | Maximum results (optional, default: 200, API maximum: 500) |
query | string optional | Search query for flows. Supports region:US for geographic filtering, protocol:tcp, blocked:true, domain:*, category:social, etc. |
sortBy | string optional | Sort flows (default: "ts:desc") |
get_flow_insights
Get category-based flow analysis including top content categories, bandwidth consumers, and blocked traffic. Ideal for answering questions like "what porn sites were accessed" or "what social media was used". Replaces time-based trends with actionable insights.
Parameters | Type | Description |
---|---|---|
categories | array optional | Filter to specific content categories (optional) |
include_blocked | boolean optional | Include blocked traffic analysis (default: false) |
period | string optional | Time period for analysis (default: 24h) |
get_network_rules
Retrieve firewall rules and conditions
Parameters | Type | Description |
---|---|---|
limit | number | Maximum number of rules to return (required) |
query | string optional | Search conditions for filtering rules |
get_network_rules_summary
Get overview statistics and counts of network rules by category (convenience wrapper)
Parameters | Type | Description |
---|---|---|
active_only | boolean optional | Only include active rules in summary (default: true) |
rule_type | string optional | Filter by rule type |
get_offline_devices
Get all offline devices (convenience wrapper around get_device_status)
Parameters | Type | Description |
---|---|---|
box | string optional | Filter devices under a specific Firewalla box |
limit | number optional | Maximum number of offline devices to return |
sort_by_last_seen | boolean optional | Sort devices by last seen time (default: true) |
get_recent_flow_activity
Get recent network flow activity snapshot (last 10-20 minutes). Returns up to 50 most recent flows for immediate analysis. CRITICAL: This is a quick snapshot tool only. Use this for: "what's happening right now?", current security threats, immediate network issues. DO NOT use for: historical analysis (use search_flows), getting more than 50 flows (use search_flows with limit), daily/weekly patterns (use search_flows with time queries like "ts:>24h"). For comprehensive analysis, always prefer search_flows.
get_rule_trends
Get historical rule trend data (rules created per day)
Parameters | Type | Description |
---|---|---|
group | string optional | Get trends for a specific box group |
get_simple_statistics
Retrieve basic statistics overview
Parameters | Type | Description |
---|---|---|
group | string optional | Get statistics for specific box group |
get_specific_alarm
Get detailed information for a specific Firewalla alarm
Parameters | Type | Description |
---|---|---|
alarm_id | string | Alarm ID (required for API call) |
get_specific_target_list
Retrieve a specific target list by ID
Parameters | Type | Description |
---|---|---|
id | string | Target list ID (required) |
get_statistics_by_box
Get statistics for each Firewalla box (top boxes by blocked flows or security alarms)
Parameters | Type | Description |
---|---|---|
group | string optional | Get statistics for specific box group |
limit | number optional | Maximum number of results (optional, default: 5) |
type | string optional | Statistics type to retrieve |
get_statistics_by_region
Retrieve statistics by region (top regions by blocked flows)
Parameters | Type | Description |
---|---|---|
group | string optional | Get statistics for specific box group |
limit | number optional | Maximum number of results (optional, default: 5) |
get_target_lists
Retrieve all target lists from Firewalla
Parameters | Type | Description |
---|---|---|
limit | number | Maximum number of target lists to return (required) |
pause_rule
Temporarily disable an active firewall rule for a specified duration
Parameters | Type | Description |
---|---|---|
box | string | Box GID for context (required by API) |
rule_id | string | Rule ID to pause |
duration | number optional | Duration in minutes to pause the rule (optional, default: 60, range: 1-1440) |
resume_rule
Resume a previously paused firewall rule, restoring it to active state
Parameters | Type | Description |
---|---|---|
box | string | Box GID for context (required by API) |
rule_id | string | Rule ID to resume |
search_alarms
Search alarms using full-text or field filters. Alarm types: 1=Security Activity, 2=Abnormal Upload, 3=Large Bandwidth Usage, 4=Monthly Data Plan, 5=New Device, 6=Device Back Online, 7=Device Offline, 8=Video Activity, 9=Gaming Activity, 10=Porn Activity, 11=VPN Activity, 12=VPN Connection Restored, 13=VPN Connection Error, 14=Open Port, 15=Internet Connectivity Update, 16=Large Upload.
Parameters | Type | Description |
---|---|---|
cursor | string optional | Pagination cursor from previous response |
groupBy | string optional | Group alarms by specified fields (comma-separated) |
limit | number optional | Maximum results (optional, default: 200, API maximum: 500) |
query | string optional | Search query using Firewalla syntax. Supported fields: type:1-16 (see alarm types above), resolved:true/false, status:1/2 (active/archived), source_ip:192.168., region:US (country code), gid:box_id, device.name:, message:"text search". Examples: "type:8 AND region:US" (video from US), "type:10 AND status:1" (active porn alerts), "source_ip:192.168.* AND NOT resolved:true" |
sortBy | string optional | Sort alarms (default: ts:desc) |
search_devices
Search devices by name, IP, MAC or status (convenience wrapper with client-side filtering)
Parameters | Type | Description |
---|---|---|
box | string optional | Filter devices under a specific Firewalla box |
limit | number optional | Maximum number of devices to return |
query | string optional | 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" |
status | string optional | Filter by online status |
search_flows
Search network flows with advanced query filters. Use this for: historical analysis, specific time ranges, complex filtering, or when you need more than 50 flows. Supports pagination, time-based queries (e.g., "ts:>1h" for last hour), and all flow fields including geographic filtering. For quick "what's happening now" snapshots, use get_recent_flow_activity instead.
Parameters | Type | Description |
---|---|---|
cursor | string optional | Pagination cursor from previous response |
groupBy | string optional | Group flows by specified values (e.g., "domain,box") |
limit | number optional | Maximum results (optional, default: 200, API maximum: 500) |
query | string optional | Search query using Firewalla syntax. Supported fields: protocol:tcp/udp, direction:inbound/outbound/local, blocked:true/false, bytes:>1MB, domain:.example.com, region:US (country code), category:social/games/porn/etc, gid:box_id, device.ip:192.168., source_ip:, destination_ip:. Examples: "region:US AND protocol:tcp", "blocked:true AND bytes:>1MB", "category:social OR category:games" |
sortBy | string optional | Sort flows (default: "ts:desc") |
search_rules
Search firewall rules by target, action or status. Supports all rule fields.
Parameters | Type | Description |
---|---|---|
query | string optional | Search query using Firewalla syntax. Supported fields: action:allow/block/timelimit, target.type:domain/ip/device, target.value:.facebook.com, status:active/paused, direction:bidirection/inbound/outbound, protocol:tcp/udp, gid:box_id, scope.type:device/network, notes:"description text". Examples: "action:block AND target.value:.social.com", "status:paused", "target.type:domain AND action:block" |
search_target_lists
Search target lists with client-side filtering (convenience wrapper around get_target_lists)
Parameters | Type | Description |
---|---|---|
category | string optional | Filter by category |
limit | number optional | Maximum number of target lists to return |
owner | string optional | Filter by owner (global or box gid) |
query | string optional | Search query for target lists. Supported fields: name:Social, owner:global/box_gid, category:social/games/ad/porn/etc, targets:.facebook.com, notes:"description text". Examples: "category:social", "owner:global AND name:Block", "targets:.gaming.com" |
update_target_list
Update an existing target list
Parameters | Type | Description |
---|---|---|
id | string | Target list ID (required) |
category | string optional | Updated content category |
name | string optional | Updated target list name (max 24 chars) |
notes | string optional | Updated description |
targets | array optional | Updated array of domains, IPs, or CIDR ranges |
{
"mcpServers": {
"firewalla-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"FIREWALLA_MSP_ID",
"-e",
"FIREWALLA_BOX_ID",
"-e",
"MCP_WAVE0_ENABLED",
"-e",
"MCP_READ_ONLY_MODE",
"-e",
"MCP_CACHE_ENABLED",
"-e",
"MCP_DEBUG_MODE",
"-e",
"NODE_ENV",
"-e",
"LOG_LEVEL",
"-e",
"MCP_CACHE_TTL",
"-e",
"MCP_RATE_LIMIT_WINDOW",
"-e",
"MCP_RATE_LIMIT_MAX_REQUESTS",
"-e",
"FIREWALLA_MSP_TOKEN",
"mcp/firewalla-mcp-server"
],
"env": {
"FIREWALLA_MSP_ID": "yourdomain.firewalla.net",
"FIREWALLA_BOX_ID": "1eb71e38-3a95-4371-8903-ace24c83ab49",
"MCP_WAVE0_ENABLED": "<nil>",
"MCP_READ_ONLY_MODE": "<nil>",
"MCP_CACHE_ENABLED": "<nil>",
"MCP_DEBUG_MODE": "<nil>",
"NODE_ENV": "<nil>",
"LOG_LEVEL": "<nil>",
"MCP_CACHE_TTL": "<nil>",
"MCP_RATE_LIMIT_WINDOW": "<nil>",
"MCP_RATE_LIMIT_MAX_REQUESTS": "<nil>",
"FIREWALLA_MSP_TOKEN": "your_msp_access_token_here"
}
}
}
}
Manual installation
You can install the MCP server using:
Installation for