@compr/opscontext-mcp
npm
v2.8.0
Published by @compr — 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.
OpsContext for AI Agents — read-only fleet visibility (PM2/nginx/Docker/git/cron) + tamper-evident audit log + policy-as-code hooks. The ops + compliance layer Claude Code can't grow natively.
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 − 12.9 = 87. What the published surface and source actually contain:
| Points | What was found | Category |
|---|---|---|
| −12.9 | Untrusted input concatenated into a command sink ×6 MTC-SRC-009 | injection |
2. Client adoption risk — 87 − 7 = 80. 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:
| Points | Adoption-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.
In the server's implementation (`dist/agents.js:1`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; import { readFileSync, existsSync, readdirSync, statSync, lstatSync, readlinkSyn
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/agents.js
In the server's implementation (`dist/cli.js:22`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; function detectProject(dir) { const name = basename(dir); const result =
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/cli.js
In the server's implementation (`dist/collectors.js:1`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; import { readFileSync, existsSync, readdirSync, statSync } from "fs"; import { r
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/collectors.js
In the server's implementation (`dist/community-export.js:24`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: Sync, spawnSync } from "child_process"; import { tmpdir } from "os"; import { join } from "path"; import { listLearnings
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/community-export.js
In the server's implementation (`dist/firewall.js:14`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; import { existsSync, readFileSync, statSync, writeFileSync, mkdirSync } from "fs
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/firewall.js
In the server's implementation (`dist/hooks.js:46`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; import { existsSync, readFileSync } from "fs"; import { createHash } from "crypt
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/hooks.js
In the server's implementation (`dist/index.js:25`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; import { scanCodeDir } from "./code-chunker.js"; import { fileURLToPath } from "
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/index.js
In the server's implementation (`dist/install-autostart.js:20`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; import { createRequire } from "module"; import { fileURLToPath } from "url"; //
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/install-autostart.js
In the server's implementation (`dist/install-claude-hook.js:21`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: port { execSync } from "child_process"; // [LOCK] [M2-ESM-FILENAME-FIX]: the package is "type": "module", so a bare __di
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/install-claude-hook.js
In the server's implementation (`dist/server-registry.js:19`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execFileSync } from "child_process"; /** More concurrent servers than this and every doc change costs that many re-em
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-registry.js
In the server's implementation (`dist/cli.js:966`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: try { execSync(`${openCmd} "${tmpPath}"`); console.log("🌐 Opened in browser\n");
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/cli.js
In the server's implementation (`dist/collectors.js:39`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: xists(cmd) { return exec(`command -v ${cmd}`) !== ""; } /** Redact sensitive values in .env content */ function reda
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/collectors.js
In the server's implementation (`dist/community-export.js:383`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: in $TMPDIR. execSync(`rm -f ${JSON.stringify(tmpPath)}`); } catch { /* ignore */
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/community-export.js
In the server's implementation (`dist/firewall.js:555`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. 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 out = execSync(`git --no-pager log --oneline --since="${since}" -- . ':!.github/copilot-instructions.m
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/firewall.js
In the server's implementation (`dist/hooks.js:122`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ry { diff = execSync(`git diff --cached --unified=0 -- "${file.replace(/"/g, '\\"')}"`, { cw
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/hooks.js
In the server's implementation (`dist/install-autostart.js:168`): A shell/process command assembled from concatenated or interpolated values is command injection when any part is attacker-influenced — the OWASP canonical RCE flow. Verify what reaches the interpolated value. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: s() { try { execSync(`lsof -nP -iTCP:${PORT} -sTCP:LISTEN >/dev/null 2>&1`, { stdio: "ignore" }); re
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/install-autostart.js
In the server's implementation (`dist/adapters.js:47`): 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 mod = await import(moduleSpecifier); // Check for factory function if (exportName && typeof mod[expo
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/adapters.js
Each tool and what it can reach — statically extracted from the published source.
lines in no sensitive capabilityactivateno sensitive capabilityactivation_statusno sensitive capabilityagent_costno sensitive capabilityaudit_verifyno sensitive capabilitycheck_portsno sensitive capabilitydelete_learningno sensitive capabilitydelete_sessionno sensitive capabilitydrift_statusno sensitive capabilityend_sessionno sensitive capabilityimport_learningsno sensitive capabilitylist_learningsno sensitive capabilitylist_projectsno sensitive capabilitylist_sessionsno sensitive capabilitylist_sourcesno sensitive capabilityload_sessionno sensitive capabilityread_sourceno sensitive capabilityreindexno sensitive capabilityrun_auditno sensitive capabilitysave_learningno sensitive capabilitysave_sessionno sensitive capabilityscore_projectno sensitive capabilitysearch_contextno sensitive capabilityScan 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.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v2.8.0 latest |
B 80/100 | 17 | 1.13.0 | 2026-09-07 |
v2.6.0 |
B 80/100 | 16 | 1.13.0 | 2026-09-06 |
v2.5.4 |
B 80/100 | 15 | 1.13.0 | 2026-09-05 |
v2.5.3 |
B 80/100 | 16 | 1.12.1 | 2026-08-21 |
v2.4.3 |
B 80/100 | 16 | 1.12.1 | 2026-08-20 |
v2.4.2 |
B 80/100 | 16 | 1.12.1 | 2026-08-17 |
v2.4.0 |
B 80/100 | 16 | 1.12.1 | 2026-08-16 |
v2.3.1 |
B 80/100 | 16 | 1.12.1 | 2026-08-15 |
v2.1.3 |
B 80/100 | 16 | 1.12.1 | 2026-08-14 |
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.
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 @compr/opscontext-mcp --online
FDA device & vehicle recall risk for AI agents: recall history, MAUDE trend, risk score.
Open-source MCP server exposing Agent402.Tools' catalog — 500+ strong: 400+ self-hostable tools + 100 multi-tool skill packs (security-audit, trend-analysis, structured-scrape, decode-blob, forecasting-bake-off) for AI agents — browser, web search & answe
Zero-dependency MCP server that gives AI agents a self-updating project memory in AGENTS.md. Returns merge instructions instead of mutating state, so every change is a reviewable diff.
MCP Apps UI resources and server helpers for n8n
MCP server providing comprehensive access to BookStack knowledge management system
MCP server for tracking achievements with STAR methodology