nodebench-mcp
npm
v3.2.1
Published by homenshum — 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.
Turn messy input into a sourced report. 15 default tools: workflow, bidirectional sync, canonical NodeBench research bridge, discover_tools, and load_toolset.
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:
| 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/security/pathSandbox.js:19`): 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: aws", ".azure", ".config/gcloud", ".kube", ".docker", ".ethereum", ".solana", ".phantom",
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/security/pathSandbox.js
In the server's implementation (`dist/tools/securityTools.js:371`): 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: ".gitconfig", ".npmrc", ]; const shellScriptExts = [".sh", ".bash", ".zsh"];
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/tools/securityTools.js
In the server's implementation (`dist/tools/selfEvalTools.js:1058`): Evaluating strings as code is the most direct RCE primitive; if any tool input reaches it, the server executes attacker-chosen code. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: sts (log_test_result) + eval (promote_to_eval) + quality gate (run_quality_gate) + flywheel (run_mandatory_flywheel) + l
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/tools/selfEvalTools.js
In the server's implementation (`dist/analytics/schema.js:35`): 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: ql); }, exec() { }, pragma() { }, close() { }, }; } export function initAnalyticsDb(
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/analytics/schema.js
In the server's implementation (`dist/db.js:135`): 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: ql); }, exec() { return undefined; }, pragma() { return undefine
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/db.js
In the server's implementation (`dist/security/commandSandbox.js:7`): 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: { execSync } from "node:child_process"; import { SecurityError } from "./SecurityError.js"; import { getSecurityConfig }
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/security/commandSandbox.js
In the server's implementation (`dist/tools/claudeCodeIngestTools.js:246`): 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: } = await import("node:child_process"); const gitLog = execSync("git log --oneline -10", {
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/tools/claudeCodeIngestTools.js
In the server's implementation (`dist/tools/documentationTools.js:13`): 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 { NODEBENCH_VERSION } from "../packageInfo.js"; // ─── Dynamic import hel
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/tools/documentationTools.js
In the server's implementation (`dist/tools/founderLocalPipeline.js:13`): 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 { j
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/tools/founderLocalPipeline.js
In the server's implementation (`dist/tools/graphifyTools.js:18`): 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: ort { spawnSync } from "child_process"; import { existsSync, readFileSync } from "fs"; import { join } from "path"; // ─
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/tools/graphifyTools.js
In the server's implementation (`dist/tools/localFileMediaTools.js:169`): 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: ld = await import("node:child_process"); const util = await import("node:util"); const execFileA
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/tools/localFileMediaTools.js
In the server's implementation (`dist/tools/mcpBridgeTools.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: { execSync } from "node:child_process"; import { existsSync } from "node:fs"; import { join } from "node:path"; // ── Sy
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/tools/mcpBridgeTools.js
In the server's implementation (`dist/agents/alertRouter.js:48`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 resp = await fetch(`https://api.telegram.org/bot${cfg.telegram.botToken}/sendMessage`, { meth
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/alertRouter.js
In the server's implementation (`dist/index.js:708`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 res = await fetch(`https://registry.npmjs.org/${NODEBENCH_PACKAGE_NAME}/latest`, { signal: contr
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/sweep/sources/github_trending.js:9`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 resp = await fetch("https://api.github.com/search/repositories?q=stars:>100+pushed:>2026-03-25+topic:ai-agent
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/sweep/sources/github_trending.js
In the server's implementation (`dist/sweep/sources/openbb_finance.js:17`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 resp = await fetch(`https://query1.finance.yahoo.com/v7/finance/quote?symbols=${tickers}&fields=regularMarket
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/sweep/sources/openbb_finance.js
In the server's implementation (`dist/sweep/sources/producthunt.js:10`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 resp = await fetch("https://www.producthunt.com/feed?category=artificial-intelligence", { signal:
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/sweep/sources/producthunt.js
In the server's implementation (`dist/sweep/sources/web_signals.js:17`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 resp = await fetch("https://www.nodebenchai.com/api/search", { method: "POST", header
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/sweep/sources/web_signals.js
In the server's implementation (`dist/sweep/sources/yahoo_finance.js:12`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 resp = await fetch(`https://query1.finance.yahoo.com/v8/finance/spark?symbols=${tickerStr}&range=1d&interval=
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/sweep/sources/yahoo_finance.js
In the server's implementation (`dist/tools/deltaTools.js:1406`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 res = await fetch(`https://retention.sh/api/team/${teamCode}/status`, { signal: controller.signal });
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/tools/deltaTools.js
In the server's implementation (`dist/tools/entityLookupTools.js:34`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. 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 res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?
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/tools/entityLookupTools.js
In the server's implementation (`dist/tools/documentationTools.js:18`): 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: try { await import(pkg); return true; } catch { return false; } } // ─── AGENTS.
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/tools/documentationTools.js
In the server's implementation (`dist/tools/localFileOcrHelpers.js:160`): 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(pkg); return mod.default ?? mod; } catch { throw new Error("Missi
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/tools/localFileOcrHelpers.js
In the server's implementation (`dist/tools/visionTools.js:24`): 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: try { await import(pkg); return true; } catch { return false; } } async function
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/tools/visionTools.js
In the server's implementation (`dist/tools/webTools.js:15`): 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: try { await import(pkg); return true; } catch { return false; } } async function
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/tools/webTools.js
In a packaging/dev/install script (shipped, but not the server runtime) (`dist/benchmarks/claudeCodeIntegration.js:12`): 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: rt { spawn } from "node:child_process"; import { join, dirname } from "node:path"; import { readFileSync } from "node: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/benchmarks/claudeCodeIntegration.js
Each tool and what it can reach — statically extracted from the published source.
agent-contractno sensitive capabilityagent-delegation-with-approval-traceno sensitive capabilityagentCountno sensitive capabilitybootstrap-parallel-agentsno sensitive capabilitycall_loaded_toolno sensitive capabilityclaude-code-parallelno sensitive capabilitycompany-direction-analysis-traceno sensitive capabilitycomponentNameno sensitive capabilityexecution-trace-workflowno sensitive capabilityfileUrino sensitive capabilityget_ab_test_reportno sensitive capabilitygoalno sensitive capabilitylist_available_toolsetsno sensitive capabilityload_toolsetno sensitive capabilityonboardingno sensitive capabilityoracle-test-harnessno sensitive capabilityoracleSourceno sensitive capabilityorchestrating-swarmsno sensitive capabilityparallel-agent-teamno sensitive capabilityperfno sensitive capabilityproject-setupno sensitive capabilityprojectGoalno sensitive capabilityprojectNameno sensitive capabilityprojectPathno sensitive capabilityriskLevelno sensitive capabilitysecurity-reviewerno sensitive capabilitysmart_select_toolsno sensitive capabilityspreadsheet-enrichment-traceno sensitive capabilitystrategicQuestionno sensitive capabilitysubagentCountno sensitive capabilitysubjectCompanyno sensitive capabilitytaskno sensitive capabilitytaskDescriptionno sensitive capabilitytechStackno sensitive capabilitythompson-protocolno sensitive capabilityui-qa-checklistno sensitive capabilityunload_toolsetno sensitive capabilityworkflowGoalno sensitive capabilityworkflowTitleno sensitive capabilityworkflowTypeno 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 |
|---|---|---|---|---|
v3.2.1 latest |
A 93/100 | 26 | 1.12.1 | 2026-07-29 |
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 nodebench-mcp --online
Public-safe MCP admin discovery contract descriptors and response builders.
Pokemon Champions battle advisor MCP server
Airflow MCP server — DAG list, runs, task instances, log tails, trigger and clear over the Airflow REST API
MCP analytics wrapper SDK that instruments MCP tool declarations with telemetry.
AI-ready GIS, geofencing, DataSynch, CRM, inventory, routing, APIs, telemetry and workflows.
AI-native social listening. Monitor buying signals and run GTM workflows via natural language.