Opnsense (vespo92) MCP Server

opnsense-mcp-server npm v0.11.0

Published by vespo92 — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.

Model Context Protocol server for OPNSense firewall management with inter-VLAN routing diagnostics, ARP table, DNS filtering and HAProxy support via Claude Desktop

Trust grade
A
93/100
Last scanned get badge →
Trust
A · 93/100
Adoption risk for you: the threat score, then adjusted down for blast radius, publisher verification and how much the scan could see. Deterministic; every point is auditable.
Capability
High
Blast radius if it went rogue — what the server’s tools could reach. Independent of trust.
Coverage
Source
How much the scan could actually inspect. Shallow coverage is stated, never hidden.
Share this Trust Score
𝕏 Share LinkedIn Reddit
A Why this grade threat 100 − adoption risk = 93/100

The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.

1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:

The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.

2. Client adoption risk — 100 − 7 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:

PointsAdoption-risk factor
−6 capability blast radius (high) — client exposure if the model is manipulated
−1 publisher verification (public source) — no provenance, but the source is public and inspectable

Capability observations and info notes are shown under Findings but never scored. Open any row's finding below for the file, line and evidence behind a deduction.

Findings 9

high Reads a sensitive credential path or dumps the environment (dist/resources/ssh/executor.js)MTC-SRC-006

In the server's implementation (`dist/resources/ssh/executor.js:75`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: oin(homedir(), '.ssh', 'id_rsa'), passphrase: process.env.OPNSENSE_SSH_PASSPHRASE, timeout: pars

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/resources/ssh/executor.js

high Tool "cli_execute" exposes command/code executionMTC-CAP-001

Tool "cli_execute" appears to run shell commands or evaluate code (parameter "command"). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool cli_execute

high Tool "ssh_execute" exposes command/code executionMTC-CAP-001

Tool "ssh_execute" appears to run shell commands or evaluate code (parameter "command"). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool ssh_execute

medium Unconstrained command parameter "command" on "cli_execute"MTC-CAP-006

Tool "cli_execute" takes a command-shaped parameter "command" with no enum/pattern constraint. Free-form, model- or attacker-controlled arguments reaching a shell is the command-injection precondition.

Fix: Constrain the parameter (enum/pattern), or build the command from a fixed template with escaped args.

Location: tool cli_execute · inputSchema.properties.command

medium Unconstrained command parameter "command" on "ssh_execute"MTC-CAP-006

Tool "ssh_execute" takes a command-shaped parameter "command" with no enum/pattern constraint. Free-form, model- or attacker-controlled arguments reaching a shell is the command-injection precondition.

Fix: Constrain the parameter (enum/pattern), or build the command from a fixed template with escaped args.

Location: tool ssh_execute · inputSchema.properties.command

medium Dynamic module load from a non-literal (dist/core/plugin-system/loader.js)MTC-SRC-005

In the server's implementation (`dist/core/plugin-system/loader.js:97`): Loading a module chosen at runtime (from a variable) can pull in and run attacker-influenced code paths. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: const module = await import(indexPath); const PluginClass = module.default || module[Object.keys(module)[

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/core/plugin-system/loader.js

medium Dynamic module load from a non-literal (dist/server-v2.js)MTC-SRC-005

In the server's implementation (`dist/server-v2.js:213`): Loading a module chosen at runtime (from a variable) can pull in and run attacker-influenced code paths. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: = configPath ? require(configPath) : { server: { host: process.env.SERVER_H

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/server-v2.js

low Mutating tool "cli_execute" declares no destructiveHintMTC-CAP-005

Tool "cli_execute" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool cli_execute

low Mutating tool "ssh_execute" declares no destructiveHintMTC-CAP-005

Tool "ssh_execute" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool ssh_execute

Tools 162

Each tool and what it can reach — statically extracted from the published source.

  • cli_executeruns code / shell
  • monit_add_alertnetwork egress
  • ssh_executeruns code / shell
  • acme_add_actionno sensitive capability
  • acme_delete_actionno sensitive capability
  • acme_get_settingsno sensitive capability
  • acme_renew_certificateno sensitive capability
  • acme_revoke_certificateno sensitive capability
  • acme_sign_certificateno sensitive capability
  • acme_update_certificateno sensitive capability
Show 152 more tools ↓
  • add_dnsbl_subscriptionno sensitive capability
  • apply_blocklist_categoryno sensitive capability
  • ARP Tableno sensitive capability
  • block_domainno sensitive capability
  • block_multiple_domainsno sensitive capability
  • cli_apply_changesno sensitive capability
  • cli_check_nfsno sensitive capability
  • cli_fix_dmz_routingno sensitive capability
  • cli_fix_interface_blockingno sensitive capability
  • cli_reload_firewallno sensitive capability
  • cli_show_routingno sensitive capability
  • configureno sensitive capability
  • Connection Statusno sensitive capability
  • create_backupno sensitive capability
  • create_firewall_presetno sensitive capability
  • create_firewall_ruleno sensitive capability
  • create_vlanno sensitive capability
  • delete_firewall_ruleno sensitive capability
  • delete_vlanno sensitive capability
  • Deploymentsno sensitive capability
  • DHCP Leasesno sensitive capability
  • DNS Blocklistno sensitive capability
  • find_arp_by_hostnameno sensitive capability
  • find_arp_by_interfaceno sensitive capability
  • find_arp_by_ipno sensitive capability
  • find_arp_by_macno sensitive capability
  • find_device_by_macno sensitive capability
  • find_device_by_nameno sensitive capability
  • find_devices_on_vlanno sensitive capability
  • find_firewall_rulesno sensitive capability
  • Firewall Rulesno sensitive capability
  • get_arp_statsno sensitive capability
  • get_devices_by_interfaceno sensitive capability
  • get_firewall_ruleno sensitive capability
  • get_guest_devicesno sensitive capability
  • get_interfacesno sensitive capability
  • get_vlanno sensitive capability
  • group_devicesno sensitive capability
  • HAProxy Backendsno sensitive capability
  • HAProxy Frontendsno sensitive capability
  • HAProxy Statisticsno sensitive capability
  • haproxy_acl_createno sensitive capability
  • haproxy_acl_deleteno sensitive capability
  • haproxy_acl_updateno sensitive capability
  • haproxy_action_createno sensitive capability
  • haproxy_action_deleteno sensitive capability
  • haproxy_action_updateno sensitive capability
  • haproxy_backend_createno sensitive capability
  • haproxy_backend_deleteno sensitive capability
  • haproxy_backend_getno sensitive capability
  • haproxy_backend_healthno sensitive capability
  • haproxy_backend_listno sensitive capability
  • haproxy_backend_updateno sensitive capability
  • haproxy_certificate_createno sensitive capability
  • haproxy_certificate_listno sensitive capability
  • haproxy_frontend_createno sensitive capability
  • haproxy_frontend_deleteno sensitive capability
  • haproxy_frontend_getno sensitive capability
  • haproxy_frontend_listno sensitive capability
  • haproxy_frontend_updateno sensitive capability
  • haproxy_server_addno sensitive capability
  • haproxy_server_deleteno sensitive capability
  • haproxy_server_updateno sensitive capability
  • haproxy_service_controlno sensitive capability
  • haproxy_statsno sensitive capability
  • IaC Resource Typesno sensitive capability
  • iac_apply_deploymentno sensitive capability
  • iac_destroy_deploymentno sensitive capability
  • iac_list_resource_typesno sensitive capability
  • iac_plan_deploymentno sensitive capability
  • interface_configure_dmzno sensitive capability
  • interface_enable_intervlan_allno sensitive capability
  • interface_enable_intervlan_routingno sensitive capability
  • interface_get_configno sensitive capability
  • interface_list_overviewno sensitive capability
  • interface_update_configno sensitive capability
  • list_arp_entriesno sensitive capability
  • list_available_dnsblno sensitive capability
  • list_backupsno sensitive capability
  • list_dhcp_leasesno sensitive capability
  • list_dns_blocklistno sensitive capability
  • list_firewall_rulesno sensitive capability
  • list_vlansno sensitive capability
  • macro_analyzeno sensitive capability
  • macro_deleteno sensitive capability
  • macro_exportno sensitive capability
  • macro_generate_toolno sensitive capability
  • macro_importno sensitive capability
  • macro_listno sensitive capability
  • macro_playno sensitive capability
  • macro_start_recordingno sensitive capability
  • macro_stop_recordingno sensitive capability
  • monit_add_serviceno sensitive capability
  • monit_add_testno sensitive capability
  • monit_delete_alertno sensitive capability
  • monit_delete_serviceno sensitive capability
  • monit_delete_testno sensitive capability
  • monit_get_settingsno sensitive capability
  • monit_statusno sensitive capability
  • monit_update_alertno sensitive capability
  • monit_update_serviceno sensitive capability
  • monit_update_testno sensitive capability
  • nat_analyze_configno sensitive capability
  • nat_apply_changesno sensitive capability
  • nat_cleanup_dmz_fixno sensitive capability
  • nat_create_outbound_ruleno sensitive capability
  • nat_create_port_forwardno sensitive capability
  • nat_delete_outbound_ruleno sensitive capability
  • nat_delete_port_forwardno sensitive capability
  • nat_fix_dmzno sensitive capability
  • nat_get_modeno sensitive capability
  • nat_list_outboundno sensitive capability
  • nat_list_port_forwardsno sensitive capability
  • nat_quick_fix_dmzno sensitive capability
  • nat_set_modeno sensitive capability
  • Network Interfacesno sensitive capability
  • network_queryno sensitive capability
  • Recorded Macrosno sensitive capability
  • remove_dnsbl_subscriptionno sensitive capability
  • Resource Stateno sensitive capability
  • restore_backupno sensitive capability
  • routing_create_intervlan_rulesno sensitive capability
  • routing_diagnosticsno sensitive capability
  • routing_fix_allno sensitive capability
  • routing_fix_dmzno sensitive capability
  • search_dns_blocklistno sensitive capability
  • ssh_backup_configno sensitive capability
  • ssh_batch_executeno sensitive capability
  • ssh_check_nfs_connectivityno sensitive capability
  • ssh_enable_intervlan_routingno sensitive capability
  • ssh_fix_dmz_routingno sensitive capability
  • ssh_fix_interface_blockingno sensitive capability
  • ssh_quick_dmz_fixno sensitive capability
  • ssh_reload_firewallno sensitive capability
  • ssh_restore_configno sensitive capability
  • ssh_show_pf_rulesno sensitive capability
  • ssh_show_routingno sensitive capability
  • ssh_system_statusno sensitive capability
  • ssh_test_vlan_connectivityno sensitive capability
  • sync_network_datano sensitive capability
  • system_enable_intervlan_routingno sensitive capability
  • system_get_settingsno sensitive capability
  • system_update_firewall_settingsno sensitive capability
  • test_connectionno sensitive capability
  • toggle_blocklist_entryno sensitive capability
  • toggle_firewall_ruleno sensitive capability
  • unblock_domainno sensitive capability
  • update_device_nameno sensitive capability
  • update_dnsbl_subscriptionno sensitive capability
  • update_firewall_ruleno sensitive capability
  • update_vlanno sensitive capability
  • VLANsno sensitive capability

What this scan could not see

Versions 1

Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.

VersionScoreFindingsEngineScanned
v0.11.0 latest A 93/100 9 1.13.0 2026-09-07

Embed this score

Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.

MCP Trust Score: A · 93/100
Markdown (GitHub README)
[![MCP Trust Score](https://mcptrustchecker.com/registry/opnsense-mcp-server/badge.svg)](https://mcptrustchecker.com/registry/opnsense-mcp-server)
HTML
<a href="https://mcptrustchecker.com/registry/opnsense-mcp-server"><img src="https://mcptrustchecker.com/registry/opnsense-mcp-server/badge.svg" alt="MCP Trust Score" height="20"></a>
Prefer shields.io styling? Point it at https://mcptrustchecker.com/registry/opnsense-mcp-server/badge.json via https://img.shields.io/endpoint?url=…

Verify this score yourself

The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.

npx mcptrustchecker scan opnsense-mcp-server --online

Use the free API → How scoring works

Other implementations of Opnsense 4

Independent packages implementing the same tool, scanned with the same engine. Compare all 5 side by side →

More in Cloud & DevOps