Install verification: sandbox install ok, web smoke failed (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it doesAI
One-click toggle for the REA MCP server in the DSH Web UI, exposing a rea_mcp_toggle tool and saving the choice per profile.
- One-click on/off switch for the rea-mcp server in the Web UI
- Exposes a rea_mcp_toggle tool so the model can flip it too
- Toggle state is persisted per profile and survives restarts
Capability tags are AI-inferred or rule-extracted from the README (see badge) — vocabulary-limited, not install-verified. AI = inferred; README = literal keyword from the readme.
Installation
dsh plugin --profile web add github:VioletEverGarden-zc/dsh-rea-mcp-toggleInstall method: GitHub · sandbox install ok, web smoke failed (L5)
Verification & Compatibility
Grouped by plugin version: each card lists the dsh versions actually tested against that artifact version and their install verdicts (L5 wins). Untested combinations are omitted — absence means untested, never assumed compatible. L1–L3 are a plugin-level static archive (independent of the dsh version — the same verdict on every dsh row): they sit in each row's level grid next to L4/L5, marked "static", while their evidence is stored once per plugin inside that row's "checks & evidence" instead of being duplicated per version.
External credentials (plugin-level): none detected
○ The author declares no dsh version requirement — install is not blocked by version.
| plugin \ dsh | dsh 0.2.1-rc.2 | dsh 0.2.1-alpha.4 |
|---|---|---|
| v1.1.0 | · | · |
v1.1.0github2026-10-21
https://github.com/VioletEverGarden-zc/dsh-rea-mcp-toggle
No runtime install test for this version (static scan only) — compatibility unknown, never assumed.
Only the latest 3 published versions are shown; source-snapshot (commit hash) groups, unstated groups and older versions are omitted — the full archive stays in the data layer (snapshot/unstated groups appear only when a plugin has no published version).
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/dsh-rea-mcp-toggle/)`Security Report
Two automated layers, neither a manual review: a static scan (per-plugin rule checks) and a model-driven dynamic security audit that covers only the subset static-flagged at warn or above and never executes plugin code.
Static low, dynamic low — stricter wins → overall low.
v1.1.1dsh manifestv1.1.1git2026-10-21v1.1.1same versionclean · gitVet is an AST static scan (npm artifact or git source).
show static findings (7)
- warningeval · code-exec
scripts/acceptance.mjs:52const evaluate = new Function('ctx', 'expr', 'with (ctx) {\n return eval(expr)\n}') - warningnewFunction · code-exec
scripts/acceptance.mjs:52const evaluate = new Function('ctx', 'expr', 'with (ctx) {\n return eval(expr)\n}') - warningeval · code-exec
scripts/check-tool-schema.mjs:58const parameters = eval('(' + balanced(source, source.indexOf('{', paramsKey)) + ')') - warningeval · code-exec
scripts/probe-roundtrip.mjs:33const evaluate = new Function('ctx', 'expr', 'with (ctx) {\n return eval(expr)\n}') - warningnewFunction · code-exec
scripts/probe-roundtrip.mjs:33const evaluate = new Function('ctx', 'expr', 'with (ctx) {\n return eval(expr)\n}') - warningeval · code-exec
scripts/probe-seam.mjs:45const evaluate = new Function('ctx', 'expr', 'with (ctx) {\n return eval(expr)\n}') - warningnewFunction · code-exec
scripts/probe-seam.mjs:45const evaluate = new Function('ctx', 'expr', 'with (ctx) {\n return eval(expr)\n}')
show 3 audit findings
- lowDev-only acceptance/probe scripts eval `!!js` seam expressions via new Function + with/eval
scripts/acceptance.mjs:52The evaluator runs a `!!js` expression read from the operator's own cordis.patch.yml/profile layer. This script is not referenced by package.json main/exports/files and is run manually by the operator. The Harness Loader already evaluates `!!js` expressions itself, so this is not a privilege escalation; it only affects someone who already controls the patch layer.
- lowDev-only link-deps.mjs recursively deletes <pkg>/node_modules and junctions an env/config-supplied Harness root
scripts/link-deps.mjs:36The destructive delete targets only the package's own node_modules directory, and the Harness root used for the junction is validated against marker packages (cordis/dsh/dsh-tools/js-yaml) before linking. This is a manual dev setup step, not runtime-loaded; no attacker-controlled path is required for normal use.
- lowAgent-callable `selftest` persists enabled:false when no prior state file exists
index.js:517On a fresh profile the state file is absent, so `before` is undefined; the test invokes setEnabled(false) via the gateway and the finally clause skips restore. The profile is left with a persisted `{ enabled: false }`, so the home-layer seam disables the REA row on the next boot, and the live MCP child is disposed/re-inited. This is within the tool's own authority (the `set` action can disable anyway), so it is an integrity/availability inconvenience rather than a privilege escalation, but the comment claiming it restores 'no matter how the probe ends' is inaccurate.
Runtime code is a narrow, guarded REA MCP toggle; the scan's warnings map to dev-only eval/symlink scripts and one diagnostic side effect, all low severity.
Rule: the dynamic audit can only raise risk, never lower it (raise-only, never an exemption); a wrong raise is withdrawn by human review and the tier falls back to the static verdict. Overall verdict = the stricter of the two layers.
Disclaimer: the static scan and the dynamic security audit are both automated analysis, not a security guarantee. Always review what you install.
Activity
Last commit 2026-10-21 · activity: Active
• Repo created: 2026-10-15
• Stars: ★ 0 · Forks: 0
• Health: Active — committed within last 30 days
Source
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
