Audit AI applications and agents for security risks before commit, PR, merge, or deployment. Deterministic findings with coverage and evidence receipts.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http
verified
reported
listed in the official MCP registry counts 1 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
scan_ai_security
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit d1b52bf · analyzer v33 · 4w ago
skills & prompt files 1
- agent-rules subodhkc-ai-appsec-d1b52bf/AGENTS.md
danger signals1
- dynamic code execution eval() subodhkc-ai-appsec-d1b52bf/tests/fixtures/complete-golden-corpus/src/app.js :17
eval(llmOutput);
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 104
filesystem 40
- fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c1r-scans.ts :12
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-direct-vs-packaged.ts :12
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-direct-vs-tarball.ts :14
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-evidence-index.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-full-forensics.ts :21
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-generate-evidence-index.ts :7
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-kestrel-qualification.ts :19
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-kestrel-three-run-determinism.ts :19
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-parser-error-classification.ts :14
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-semgrep-fingerprint.ts :6
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-three-run-determinism.ts :23
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-timeout-test.ts :15
import * as fs from 'node:fs';
show 28 more
- fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a2-cross-session-reproducibility.ts :17
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a2-direct-vs-tarball.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a2-single-session.ts :10
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a3-direct-vs-tarball.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a3-single-session.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a4-1-complete-session.ts :9
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a4-1-direct-vs-tarball.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a4-1-export-corpus.ts :6
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a4-1-kestrel-session.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a4-complete-session.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a4-direct-vs-tarball.ts :8
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/scripts/phase-4c-a4-kestrel-session.ts :8
import * as fs from 'node:fs'; - fs subodhkc-ai-appsec-d1b52bf/src/cli/setup.ts :24
import * as fs from 'node:fs/promises'; - fs subodhkc-ai-appsec-d1b52bf/src/engines/ai-security/coverage-collector.ts :19
import * as fs from 'node:fs'; - fs subodhkc-ai-appsec-d1b52bf/src/engines/ai-security/rulepack-provider.ts :13
import * as fs from 'node:fs/promises'; - fs subodhkc-ai-appsec-d1b52bf/src/engines/ai-security/semgrep-resolver.ts :26
import * as fs from 'node:fs/promises'; - fs subodhkc-ai-appsec-d1b52bf/src/security/path-boundary.ts :14
import * as fs from 'node:fs/promises'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/architecture/independence.test.ts :3
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/coverage-ontology.test.ts :4
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/no-telemetry.test.ts :6
import * as fs from 'node:fs/promises'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/process-tree.test.ts :119
const runnerSource = await fs.readFile( - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/rc6-rule-fixtures.test.ts :17
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/safe-execution.test.ts :6
import * as fs from 'node:fs/promises'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/evals/phase4a-selection.test.ts :6
import { readFileSync } from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/evals/scenarios.test.ts :3
import { readFileSync } from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/mcp/packaged-stdio-e2e.test.ts :13
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/mcp/stdio-e2e.test.ts :26
import * as fs from 'node:fs'; - fs (weak) subodhkc-ai-appsec-d1b52bf/tests/security/path-boundary.test.ts :6
import * as fs from 'node:fs/promises';
shell / exec 13
- shell (weak) subodhkc-ai-appsec-d1b52bf/scripts/c1r-scans.ts :43
const { execSync } = await import('node:child_process'); - shell (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-direct-vs-packaged.ts :14
import { spawn } from 'node:child_process'; - shell (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-direct-vs-tarball.ts :16
import { spawn } from 'node:child_process'; - shell (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-kestrel-qualification.ts :21
import { execSync } from 'node:child_process'; - shell (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-semgrep-fingerprint.ts :10
import { execSync } from 'node:child_process'; - shell (weak) subodhkc-ai-appsec-d1b52bf/scripts/c2r-timeout-test.ts :17
import { execSync } from 'node:child_process'; - shell subodhkc-ai-appsec-d1b52bf/src/cli/setup.ts :21
import { execFile, spawn } from 'node:child_process'; - shell subodhkc-ai-appsec-d1b52bf/src/engines/ai-security/semgrep-resolver.ts :22
import { execFile } from 'node:child_process'; - shell subodhkc-ai-appsec-d1b52bf/src/engines/ai-security/semgrep-runner.ts :13
import { spawn, type ChildProcess } from 'node:child_process'; - shell (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/process-tree.test.ts :11
import { spawn, execSync } from 'node:child_process'; - shell (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/rc6-rule-fixtures.test.ts :20
import { execFile } from 'node:child_process'; - shell (weak) subodhkc-ai-appsec-d1b52bf/tests/engines/safe-execution.test.ts :16
assert.ok(content.includes('spawn('));
show 1 more
- shell (weak) subodhkc-ai-appsec-d1b52bf/tests/mcp/packaged-stdio-e2e.test.ts :10
import { spawn, execSync } from 'node:child_process';
secrets 1
- secrets (weak) subodhkc-ai-appsec-d1b52bf/tests/fixtures/complete-golden-corpus/src/app.js :26
const apiKey = process.env.OPENAI_API_KEY;
tool registrations 1
- scan_ai_security subodhkc-ai-appsec-d1b52bf/src/mcp/server-factory.ts :91
declared dependencies 10
- @modelcontextprotocol/server@2.0.0
- @modelcontextprotocol/client@^2.0.0
- canonicalize@4.0.0
- zod@4.4.3
- @eslint/js@10.0.1
- @types/node@26.2.0
- eslint@10.8.1
- tsx@4.23.12
- typescript@5.9.3
- typescript-eslint@8.67.0