Action1 MCP by usefulapi
Read endpoints, missing updates, CVE vulnerabilities, installed software and reports in Action1.
Beschreibung vom Entwickler (englisches Original)
Safety-first OPNsense firewall MCP: read-only by default, planned and auto-reverting writes.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
OPNSENSE_URL, OPNSENSE_API_KEY, OPNSENSE_API_SECRET, OPNSENSE_CA_BUNDLEAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"opnsense-guard": {
"command": "uvx",
"args": [
"opnsense-guard-mcp"
],
"env": {
"OPNSENSE_URL": "your-value",
"OPNSENSE_API_KEY": "your-value",
"OPNSENSE_API_SECRET": "your-value",
"OPNSENSE_CA_BUNDLE": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add opnsense-guard --env OPNSENSE_URL=your-value --env OPNSENSE_API_KEY=your-value --env OPNSENSE_API_SECRET=your-value --env OPNSENSE_CA_BUNDLE=your-value -- uvx opnsense-guard-mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"opnsense-guard": {
"command": "uvx",
"args": [
"opnsense-guard-mcp"
],
"env": {
"OPNSENSE_URL": "your-value",
"OPNSENSE_API_KEY": "your-value",
"OPNSENSE_API_SECRET": "your-value",
"OPNSENSE_CA_BUNDLE": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"opnsense-guard": {
"type": "stdio",
"command": "uvx",
"args": [
"opnsense-guard-mcp"
],
"env": {
"OPNSENSE_URL": "your-value",
"OPNSENSE_API_KEY": "your-value",
"OPNSENSE_API_SECRET": "your-value",
"OPNSENSE_CA_BUNDLE": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
OPNSENSE_CA_BUNDLE envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 8. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto d3ltasecurity bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: OPNSENSE_URL, OPNSENSE_API_KEY, OPNSENSE_API_SECRET
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.1) kam vor 11 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.
In derselben Kategorie: Action1 MCP by usefulapi, ipdata MCP by usefulapi, MaxMind minFraud MCP by usefulapi
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Read endpoints, missing updates, CVE vulnerabilities, installed software and reports in Action1.
Look up location, network, company and threat data for IP addresses and ASNs in ipdata.
MCP server for MaxMind minFraud — score transactions for fraud risk from your AI assistant.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
A safety-first MCP server for OPNsense 26.7+.
**Read-only by default. Every write is planned, policy-checked, logged, and
auto-reverted unless you confirm it.**
Status: alpha. Tested against a live OPNsense 26.7.4 with least-privilege API users: read tools, policy file, change planning with diffs, applying changes with verification and automatic revert, crash recovery, and a hash-chained audit log, over stdio or authenticated HTTPS. See DESIGN.md.
Not affiliated with Deciso B.V. "OPNsense" is a trademark of Deciso B.V.
| opnsense-guard-mcp | |
|---|---|
| Default mode | read-only |
| Read path | GET, plus POST to exactly two search endpoints (states, rules) with a fixed three-field body; path allowlist, verb denylist, traversal/encoding rejected, redirects not followed |
| Writes | separate API user, exact endpoint allowlist, plan → policy check → human approval → apply → verify → auto-revert unless confirmed |
| Rollback on 26.7+ | own object-level snapshots + revert (the savepoint API is gone in 26.7); survives restarts |
| Guardrails | allowlist policy file: interfaces, networks, rule limits, anti-lockout |
| Audit | hash-chained JSONL (audit verify detects edits); syslog planned |
| Transport | stdio, or Streamable HTTP that always needs a bearer token; optional TLS / mTLS |
| Dangerous tools | none exist: no reboot, firmware, service control, SSH or XML edits |
admins) and these privileges, then create an API key for it. Skip any that aren't installed; the matching tool just reports "forbidden".| Privilege | Used by |
|---|---|
| Firewall: Rules [new] | firewall_rules, firewall_rule_get, planning |
| Firewall: Aliases (view-only) | firewall_aliases, planning |
| Status: Interfaces | interfaces |
| Status: Services | service_list |
| Diagnostics: ARP Table | arp_table |
| Diagnostics: Routing tables | routing_table |
| Diagnostics: Show States | firewall_states |
| Diagnostics: Logs: Firewall: Live View | firewall_log |
| Diagnostics: Logs: System | system_log |
| Lobby: Dashboard | system_information, system_resources, health probe |
| Services: Intrusion Detection | suricata_* |
| Services: DHCP: Kea(v4) / Services: Dnsmasq DNS/DHCP: Settings / Status: DHCP leases (ISC) | dhcp_leases: only the one you use |
| System: Firmware *(optional)* | system_status. It also allows installing updates, so leave it out unless you need it. |
Most OPNsense privileges are not view-only (*Firewall: Aliases* is an exception): several of these also allow edits through the API. The server only sends GET requests with this key, except a search POST to two exact endpoints (diagnostics/firewall/query_states, firewall/filter/searchRule) with a body it builds itself (current, rowCount, searchPhrase); OPNsense answers those lists properly only over POST. Still keep the list short: the privileges are what OPNsense itself enforces.
pipx install opnsense-guard-mcp
.env.example to .env, or set env vars): OPNSENSE_URL=https://firewall.example.internal
OPNSENSE_API_KEY=... OPNSENSE_API_SECRET=... OPNSENSE_CA_BUNDLE=/path/to/firewall-ca.pem # or OPNSENSE_VERIFY_SSL=false
opnsense-guard-mcp --check
claude mcp add opnsense -- opnsense-guard-mcp --env-file /path/to/.env
HTTP never runs without authentication. The server refuses to start if:
MCP_ALLOW_PLAINTEXT=true only behind a TLS proxy). opnsense-guard-mcp token new --name laptop --scope read
token list shows names and scopes; token revoke --name laptop takes effect on the next request, no restart needed.
MCP_TRANSPORT=http MCP_HOST=0.0.0.0 MCP_PORT=8848 \
MCP_TLS_CERT=server.pem MCP_TLS_KEY=server.key \ opnsense-guard-mcp
https:// :8848/mcp with header Authorization: Bearer .| Variable | Default | Purpose |
|---|---|---|
MCP_HOST / MCP_PORT | 127.0.0.1 / 8848 | listen address |
OPNSENSE_GUARD_TOKENS_FILE | ./tokens.json | token hashes |
MCP_TLS_CERT / MCP_TLS_KEY | – | serve HTTPS |
MCP_TLS_CLIENT_CA | – | require client certificates (mTLS) |
MCP_ALLOWED_HOSTS | localhost/127.0.0.1/MCP_HOST on the port | accepted Host headers (DNS-rebinding guard) |
MCP_ALLOWED_ORIGINS | none | browser origins allowed; any other Origin is refused |
MCP_RATE_LIMIT_PER_MIN | 120 | requests per token per minute |
MCP_ALLOW_PLAINTEXT | false | allow plain HTTP on a non-loopback address |
Repeated failed logins from one IP (10 a minute) are throttled with HTTP 429.
Claude Code and a private CA: Claude Code (Node) ignores the Windows/macOS certificate store for MCP servers. Point NODE_EXTRA_CA_CERTS at your CA file in the env block of ~/.claude/settings.json, then fully quit and reopen Claude, or the connection fails with UNABLE_TO_VERIFY_LEAF_SIGNATURE.
The image runs as a non-root user and keeps its audit log, change journal and tokens in /data.
docker build -t opnsense-guard-mcp .
docker run -i --rm --env-file .env -v guard-data:/data opnsense-guard-mcp
docker run --rm -v guard-data:/data opnsense-guard-mcp token new --name laptop --scope read docker run -d --name opnsense-guard --env-file .env -v guard-data:/data -p 8848:8848 \ -e MCP_TRANSPORT=http -e MCP_HOST=0.0.0.0 -e MCP_ALLOWED_HOSTS=mcp.example.internal:8848 \ -e MCP_TLS_CERT=/data/tls/server.pem -e MCP_TLS_KEY=/data/tls/server.key \ opnsense-guard-mcp
Mount a policy file and set OPNSENSE_GUARD_POLICY to enable writes. Stop the container with docker stop (not kill) so unconfirmed changes are reverted.
Without a policy.yaml the server is read-only. To enable planning, copy policy.example.yaml to policy.yaml (or point OPNSENSE_GUARD_POLICY at it) and edit it. Unknown keys are an error.
Planning tools (rule_plan, alias_plan) read the current state, apply every policy check, and return a diff plus the reasons for any refusal. They never change the firewall. Example result for a refused rule:
+ [wan] pass in inet any from any to any '[mcp]'
interface 'wan' is not in the allowed interfaces any -> any pass rules are forbidden inbound pass rules on WAN are forbidden every rule written by this server must have logging on
Built-in guardrails: only listed interfaces/actions/directions; every IP inside allow_networks; no any→any pass, WAN inbound pass, floating rules or rules without logging; edit only rules tagged [mcp] (unless only_modify_own: false); anti-lockout (no block rule that matches this server's own IP, and only new pass rules on the interface it reaches the API through). A new block or reject rule there is allowed when the same plan adds a pass rule with a lower sequence that provably lets every MCP host reach the API (source covers the host IP, destination any/(self)/the API IP, TCP, port covers the API port); both rules need a sequence.
Change tools appear only when both the policy is in write mode and a second, write-capable API user is configured:
OPNSENSE_WRITE_API_KEY=... # a different OPNsense user than the read one
OPNSENSE_WRITE_API_SECRET=...
Give that user exactly two privileges: Firewall: Rules [new] and Firewall: Alias: Edit, no group. (Plain *Firewall: Aliases* is view-only: it allows search/get but not addItem/setItem/delItem/reconfigure.) Over HTTP, the change tools need a token with --scope write.
The flow:
rule_plan / alias_plan → diff + plan_id (changes nothing).change_apply(plan_id) → asks the human to approve the diff (MCP elicitation where the client supports it; otherwise the tool returns the diff and must be called again with user_confirmed=true). Then it re-reads the firewall (refuses if anything drifted since planning), stores the before-state, writes, applies, reads everything back to verify, and checks the API is still reachable. Any failure → everything is reverted.confirm_timeout_s (default 60 s) unless change_confirm is called.change_rollback undoes a pending or confirmed change. A revert never overwrites an object someone else edited meanwhile (status conflict).Unconfirmed changes are also reverted when the server stops and, after a crash, when it starts again. Only one change can be open at a time, and max_changes_per_hour is enforced.
Limits, stated plainly
user_confirmed=true is the model's word that the user agreed. The audit log records which method was used.Every plan (allowed or refused) and server start is written to $OPNSENSE_GUARD_DATA_DIR/audit.jsonl (default ./data). Each line holds the hash of the previous one, so edits, deletions and reordering are detectable:
opnsense-guard-mcp audit verify
opnsense-guard-mcp audit tail -n 20
Credentials are never written to it.
system_status, system_information, system_resources, service_list, posture_check, suricata_status, suricata_settings, suricata_alert_status, firewall_rules, firewall_rule_get, firewall_aliases, firewall_log, firewall_states, system_log, interfaces, arp_table, routing_table, dhcp_leases, raw_get, policy_show, security_audit.
In write mode also: rule_plan, alias_plan, plan_get, audit_tail. With write credentials also: change_apply, change_confirm, change_rollback, change_list, change_get.
firewall_rules returns one line per rule (50 by default) so a full ruleset fits in a chat; pass detail=true for the raw OPNsense rows, or use firewall_rule_get for one rule.
Over HTTP, a read token still sees the change tools in the tool list, but calling one is refused (needs a token with scope 'write').
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]" ruff check . && mypy && pytest
See SECURITY.md. Please report vulnerabilities privately.
MIT. See LICENSE.