opnsense_fw_add_rule
Add a firewall rule to OPNsense by specifying action, direction, interface, protocol, source, destination, and optional port. Apply afterwards to activate.
Instructions
Add a new firewall filter rule. Run opnsense_fw_apply afterwards to activate.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Rule action | |
| direction | Yes | Traffic direction | |
| interface | No | Interface name (e.g. 'lan', 'wan') | |
| protocol | No | Protocol | |
| source_net | No | Source network (CIDR, alias, or 'any') | |
| destination_net | No | Destination network (CIDR, alias, or 'any') | |
| destination_port | No | Destination port or range (e.g. '443', '80-443') | |
| description | No | Rule description |
Implementation Reference
- src/tools/firewall.ts:74-81 (registration)Tool definition (registration) for opnsense_fw_add_rule — defines name, description, and input schema for the MCP tool list
export const firewallToolDefinitions = [ { name: "opnsense_fw_list_rules", description: "List all firewall filter rules", inputSchema: { type: "object" as const, properties: {} }, }, { name: "opnsense_fw_add_rule", - src/tools/firewall.ts:14-23 (schema)Zod input validation schema for opnsense_fw_add_rule — validates action (pass/block/reject), direction (in/out), and optional fields
const AddRuleSchema = z.object({ action: FirewallActionSchema, direction: DirectionSchema, interface: z.string().optional(), protocol: ProtocolSchema.optional(), source_net: z.string().optional(), destination_net: z.string().optional(), destination_port: z.string().optional(), description: z.string().optional(), }); - src/tools/firewall.ts:316-333 (handler)Handler logic for opnsense_fw_add_rule — parses args via AddRuleSchema, POSTs to /firewall/filter/addRule with default values, returns JSON result
case "opnsense_fw_add_rule": { const parsed = AddRuleSchema.parse(args); const result = await client.post("/firewall/filter/addRule", { rule: { enabled: "1", action: parsed.action, direction: parsed.direction, interface: parsed.interface ?? "", ipprotocol: "inet", protocol: parsed.protocol ?? "any", source_net: parsed.source_net ?? "any", destination_net: parsed.destination_net ?? "any", destination_port: parsed.destination_port ?? "", description: parsed.description ?? "", }, }); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } - src/index.ts:60-60 (registration)Registers the handleFirewallTool handler for all firewall tool definitions, including opnsense_fw_add_rule
for (const def of firewallToolDefinitions) toolHandlers.set(def.name, handleFirewallTool); - src/utils/validation.ts:48-53 (helper)Reusable Zod schemas (FirewallActionSchema, DirectionSchema, ProtocolSchema) used by the AddRuleSchema validation
export const ProtocolSchema = z.enum(["TCP", "UDP", "ICMP", "any"]); export const FirewallActionSchema = z.enum(["pass", "block", "reject"]); export const DirectionSchema = z.enum(["in", "out"]);