Atlas / MCP servers / vznjs / Vx

VxBLOCK

mcp/vznjs/vx
Verdict
BLOCK
Grade
F
Trust score
48 /100
Exposed tools
15 10r · 5w · 0d
Transport
stdio
License
MIT
Stars
6
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

vx

The fastest task runner for JS monorepos. Measured against Turborepo and Nx, each in its own native config. vznjs.github.io/vx

Read from source at commit ea1883eda7e5OBSERVED · 2026-10-10
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add vx --env API_KEY=${API_KEY} --env API_TOKEN=${API_TOKEN} --env A_KEY=${A_KEY} --env CACHE_TOKEN=${CACHE_TOKEN} -- npx -y @vzn/[email protected]
claude-desktop
{
  "mcpServers": {
    "vx": {
      "command": "npx",
      "args": [
        "-y",
        "@vzn/[email protected]"
      ],
      "env": {
        "API_KEY": "${API_KEY}",
        "API_TOKEN": "${API_TOKEN}",
        "A_KEY": "${A_KEY}",
        "CACHE_TOKEN": "${CACHE_TOKEN}"
      }
    }
  }
}
03

Exposed tools (15)

10 read · 5 write · 0 destructive.

ToolRiskDescription
checkLockreadThe config lock audit, as
explainCacheKeyreadThe latest cache entry recorded for a task (hash, command, exit code, duration, size).
getCacheStatsreadAggregate cache statistics: entries, total bytes, and the last 24 hours of task runs and cache hits, split into hits that found outputs up to date and hits that restored them (task runs, not invocations; getRunHistory lists those).
getConfigreadA resolved config as
getFailureswriteWhy a run failed: each failed task’s exit code, its output (plain text, the first 8 KiB and last 56 KiB, secrets masked) and the files the output names (absolute, with line and column);
getRunHistoryreadRecent runs filtered by project / task, with per-task summary stats: p50 / p99, success and hit
getTaskLogwriteOne task’s output in a recorded run, as
getWorkspaceInforeadThe workspace doctor, the object
listTaskswriteEvery project, its tags, and the tasks a run would see — command, dependsOn, whether it caches —
planInitreadWhat
planTasksreadWhat runTasks would do, without running anything:
pruneCachereadEvict cache entries as
runTaskswriteRun tasks as
searchDocsreadSearch vx
whyDidThisRerunwriteCompare a run’s cache key for a task against the previous run and say whether it changed, what moved (
04

Trust audit

BLOCKgrade F · trust 48/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (9 observation(s))
Network
declared (1 observation(s))
Shell
declared (4 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/vx/src/orchestrator/sandbox-request.ts:633
'.netrc',
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/vx/src/orchestrator/sandbox-request.ts:634
'.git-credentials',
Why it matters. touches a credential store
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
packages/vx/tests/secret-mask.test.ts:43
DATABASE_URL: 'postgres://app:pw-l11-sekret@db:5432/app',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/vx/tests/cache.test.ts:559
const secret = 'AKIA-super-secret-value'
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/vx-reapi/tests/wire-only-options.test.ts:22
['tlsClientKeyPem', '-----BEGIN PRIVATE KEY-----'],
LOWInventory / provenance · inv.binary · CWE-1104
packages/vx/tests/output-doc-drift.test.ts
output-doc-drift.test.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
packages/vx/tests/util-num.test.ts
util-num.test.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.oxfmtrc.json
.oxfmtrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.oxlintrc.json
.oxlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
packages/vx-bench/.oxfmtrc.json
.oxfmtrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
packages/vx-bench/.oxlintrc.json
.oxlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
packages/vx-ci/.oxfmtrc.json
.oxfmtrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/vx-migrate/tests/nx-run-script-env.test.ts:52
await exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/vx-migrate/tests/nx-run-script-env.test.ts:70
expect(await exec({ pregen: 'echo pre', gen: 'echo $npm_lifecycle_event' }, 'gen')).toEqual({
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/vx/tests/config-cache.test.ts:505
['Function', "const v = new Function('return 1')"],
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/vx/tests/config-eval.test.ts:1047
`export default { tasks: { build: { get exec() { throw new Error('called') } } } }\n`,
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/vx/tests/config-types-schema.test.ts:191
() => validateProjectConfig(exec({ persistent: X }) as never, 'p'),
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/vx-reapi/tests/exec-e2e.test.ts:30
return createHash('sha1').update(`blob ${bytes.byteLength}\0`).update(bytes).digest('hex')
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/vx-reapi/tests/merkle-sweep.test.ts:249
hash: createHash('sha1').update(data).digest('hex'),
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/vx/tests/sandbox-credential-stores.unsafe.test.ts:28
['.ssh/id_ed25519', 'SSHKEY'],
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/vx/tests/sandbox-credential-stores.unsafe.test.ts:48
'.ssh/id_ed25519',
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/vx/tests/sandbox-credential-stores.unsafe.test.ts:62
'echo CLI > "$HOME/.aws/config"',
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/vx-bench/compare.ts:191
$schema: '../../node_modules/nx/schemas/project-schema.json',
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/vx-bench/playground-spike/bench.ts:17
import { buildPlayground } from '../../vx-docs/scripts/build-playground.js'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/vx-bench/playground-spike/bench.ts:18
import { CONFIG_TEXTS, ENV, FILES } from '../../vx-docs/src/playground/fixture.js'

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha ea1883eda7e5full audit observations/trust-audit/mcp-server/vznjs__vx.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-10ea1883eda7e5BLOCKF48first audit
06

Questions

What tools does @vzn/vx-mcp expose?

15 in total: 10 read-only, 5 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is @vzn/vx-mcp safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (48/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does @vzn/vx-mcp need?

It reads API_KEY, API_TOKEN, A_KEY, CACHE_TOKEN, DEPLOY_KEY, PASSED, SECRET_KEY, VX_KEYPROP_A and VX_L26_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @vzn/vx-mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @vzn/vx at 0.0.0.

How current is this page?

The grade is for one exact copy of the source (ea1883eda7e5), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement