Add multi-firewall dynamic targets (pfsense_connect, v1.1.0)
This commit is contained in:
41
README.md
41
README.md
@@ -4,7 +4,8 @@ Model Context Protocol server for [pfSense](https://www.pfsense.org/) firewall m
|
||||
|
||||
## Features
|
||||
|
||||
- **55+ tools** covering system status, interfaces, firewall rules, aliases, NAT, DHCP, diagnostics, routing, VPN (OpenVPN/IPsec/WireGuard), and DNS resolver
|
||||
- **77+ tools** covering system status, interfaces, firewall rules, aliases, NAT, DHCP, diagnostics, routing, VPN (OpenVPN/IPsec/WireGuard), and DNS resolver
|
||||
- **Multi-firewall**: connect to many pfSense boxes dynamically via `pfsense_connect(url, api_key)` — no static firewall in config required
|
||||
- **Safety guardrails**: writes disabled by default, dry-run mode, WAN any/any rule blocking, required description prefix
|
||||
- **Audit logging**: all mutations logged to JSONL
|
||||
- **`apply` control**: write tools accept `apply=true` to apply immediately, or batch changes and call the apply tool
|
||||
@@ -53,6 +54,8 @@ cp .env.example .env
|
||||
|
||||
### 3. Register with Hermes
|
||||
|
||||
No static firewall URL/key required — credentials are provided at runtime via `pfsense_connect`.
|
||||
|
||||
```yaml
|
||||
mcp_servers:
|
||||
pfsense:
|
||||
@@ -60,13 +63,43 @@ mcp_servers:
|
||||
timeout: 120
|
||||
enabled: true
|
||||
env:
|
||||
PFSENSE_URL: "https://your-pfsense"
|
||||
PFSENSE_API_KEY: "your-api-key"
|
||||
PFSENSE_VERIFY_SSL: "false"
|
||||
PFSENSE_ALLOW_WRITES: "false"
|
||||
```
|
||||
|
||||
Then `hermes mcp test pfsense` and `hermes gateway restart`.
|
||||
Then `hermes gateway restart`. Connect to a firewall in chat:
|
||||
|
||||
```text
|
||||
pfsense_connect(url="https://10.77.50.1", api_key="...", name="branch-office")
|
||||
pfsense_test_connection()
|
||||
pfsense_list_firewall_rules()
|
||||
```
|
||||
|
||||
### Multi-firewall workflow
|
||||
|
||||
```text
|
||||
# Register firewalls (name optional — defaults from IP/hostname)
|
||||
pfsense_connect("https://10.77.50.1", "key-a", name="hq")
|
||||
pfsense_connect("https://10.77.60.1", "key-b", name="branch")
|
||||
|
||||
# List and switch
|
||||
pfsense_list_targets()
|
||||
pfsense_use_target("branch")
|
||||
|
||||
# Or pass target / inline credentials on any tool
|
||||
pfsense_get_system_status(target="hq")
|
||||
pfsense_get_gateway_status(url="https://10.77.60.1", api_key="key-b")
|
||||
```
|
||||
|
||||
| Tool | Purpose |
|
||||
|------|---------|
|
||||
| `pfsense_connect` | Register + activate a firewall (url, api_key, name) |
|
||||
| `pfsense_use_target` | Switch active firewall |
|
||||
| `pfsense_list_targets` | List registered firewalls |
|
||||
| `pfsense_get_active_target` | Show current active target |
|
||||
| `pfsense_disconnect_target` | Remove a registered target |
|
||||
|
||||
Optional env defaults (`PFSENSE_URL`, `PFSENSE_API_KEY`) still work as a fallback when no target is connected.
|
||||
|
||||
### 4. Register with Cursor (`~/.cursor/mcp.json`)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user