vibe-shield
Emits GitHub-formatted results and SARIF output for GitHub code scanning and CI annotations.
Provides a GitHub Marketplace Action and CI workflow to run security scans, optionally audit skills, fail builds on findings, and produce SARIF for code scanning.
Configures VS Code/GitHub Copilot with .vscode/mcp.json and Copilot instructions so Copilot can use vibe-shield security checks.
Configures OpenAI Codex CLI and universal agent setups through AGENTS.md and .agents/skills, enabling Codex agents to invoke vibe-shield audits.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
๐ก๏ธ vibe-shield
The security gate for AI-written code.
Your agent ships fast. It also ships NEXT_PUBLIC_SUPABASE_SERVICE_ROLE_KEY, a DELETE route with no session check, and a CREATE TABLE with no Row Level Security โ because it was optimising for "it works".
vibe-shield is a static security scanner built for that failure mode, plus an Agent Skill that makes Claude Code, Codex, Cursor and Windsurf audit before they say "done".
npx -y @vibefoundry/vibe-shield scanv2.0.0: eight defensive vectors
The v2 catalogue covers client exposure; auth and route protection; database/RLS; AI and web sinks; infrastructure; dependency hygiene; secrets and cryptography; and agent/MCP integrity. The new hardening checks include production source maps, insecure JWT settings, explicit and omitted cookie flags, locally absent security headers, container users, lifecycle scripts, lockfiles and weak cryptography. Run rules for the complete catalogue.
The scanner produces a heuristic attack-surface inventory of route methods, observed guard signals, SQL tables and RLS signals, AI entrypoints, and MCP/agent files. Header checks cover recognized server configuration files; cookie checks cover common literal setter options. Both are advisory: external middleware, deployment settings and dynamic options require review. Signals do not prove guards or policies work, and code outside the scanned scope is not assessed. Run audit-skills separately for agent-integrity checks.
Generate an executive report or agent remediation prompt explicitly:
npx -y @vibefoundry/vibe-shield scan --report SECURITY-REPORT.md --patch-prompt PATCH-PROMPT.md
npx -y @vibefoundry/vibe-shield scan --format html --out security-report.html
npx -y @vibefoundry/vibe-shield audit-skills --report agent-report.htmlReports include severity, CWE, locations, snippets, OWASP 2025 web mappings for every rule and contextual LLM mappings when applicable, and illustrative remediation. Examples are not automatic project-specific patches; validate them against the application. The scanner itself is offline and read-only by default; --cache, --out, --report, --patch-prompt and init explicitly write files. Installing with npx can require network access. An A+ score applies only to the rules and files examined and is not a security certification.
npm
2.0.0is already published and cannot be overwritten. It provides the scanner and MCP server but predates the universal--agentsinitializer in this repository. Use the GitHubv2ref for that setup until a newer npm version is published. To exercise this checkout locally, runnpm ci && npm run build, thennode dist/bin/vibe-shield.jswith the same arguments.
Related MCP server: supership-scan
The problem, in one file
This is the shape of code an agent writes when you ask for "a delete endpoint":
// app/api/users/route.ts
export async function DELETE(req: Request) {
const { id, userId } = await req.json();
await db.query(`DELETE FROM users WHERE id = ${id} AND owner = ${userId}`);
return new Response('ok');
}It works. It also has three critical vulnerabilities โ no authentication, SQL injection, and an IDOR that lets the caller choose whose data they delete. Nothing in a normal review loop catches all three, and the agent reported the task as complete.
npx -y @vibefoundry/vibe-shield scan catches all three in 17 milliseconds:
๐ก๏ธ vibe-shield ยท security scan (illustrative output)
target /home/you/app
๐ GRADE F โ 0/100 ยท 3 critical
CRITICAL 3 โโโ
Findings
app/api/users/route.ts
CRITICAL 2:1 VSB-AUTH-001 Next.js App Router mutation handler has no authentication check
export async function DELETE(req: Request) {
CRITICAL 4:22 VSB-DB-007 SQL statement built by concatenating request data
await db.query(`DELETE FROM users WHERE id = ${id} AND owner = ${userId}`);
CRITICAL 4:22 VSB-AUTH-004 Record ownership taken from the request instead of the session (IDOR)
7 files ยท 1 KiB ยท 412 files/s ยท 17 ms ยท 79 rules
โ 3 critical findings โ rotate any exposed credential before anything else.
Fix it npx -y @vibefoundry/vibe-shield scan --fix-prompt # writes SECURITY_PATCH_PROMPT.md for your agent
Explain npx -y @vibefoundry/vibe-shield explain VSB-AUTH-001
Gate CI npx -y @vibefoundry/vibe-shield scan --fail-on critical --format githubThen hand the fix list to the agent that wrote the bug:
npx -y @vibefoundry/vibe-shield scan --fix-prompt # โ SECURITY_PATCH_PROMPT.mdThat file contains, for every finding: the severity, the CWE id and link, the exact file:line, the vulnerable snippet, the ordered remediation steps, the target code shape, and a verification command. It is written for a machine to execute and a human to audit.
โก Quick start
# 1. Scan (npx may download the package; the scanner itself is offline)
npx -y @vibefoundry/vibe-shield scan
# 2. Give your agent the fix list
npx -y @vibefoundry/vibe-shield scan --fix-prompt
# 3. Install the gate permanently โ skill + CI + ignore file
npx -y github:avivgerz-hue/vibe-shield#v2 init --agents allUse the scoped name. vibe-shield is published as
@vibefoundry/vibe-shield. The unscoped namevibe-shieldon npm belongs to an unrelated project, sonpx vibe-shieldruns someone else's code. Always include the@vibefoundry/scope. The package ships a prebuiltdist/, needs no TypeScript, and starts in milliseconds.
Supported Coding Agents (1-Command Setup)
Run this from the repository you want to protect (Node.js and Git required):
npx -y github:avivgerz-hue/vibe-shield#v2 init --agents allTo configure selected agents, substitute a comma-separated list such as --agents claude,cursor,zed:
Agent | Selector | Native integration |
Claude Code |
|
|
OpenCode |
|
|
OpenAI Codex CLI / universal agents |
|
|
Cursor |
|
|
Windsurf |
|
|
VS Code / GitHub Copilot |
|
|
Cline / Roo Code |
|
|
Zed |
|
|
The existing --agent claude|cursor|generic|all remains supported. The shared .mcp.json, ignore file, and (unless --no-workflow is set) CI workflow are also installed. JSON configuration is merged by server name; malformed JSON or JSON with comments is left untouched and reported. Existing instructions are appended only once, and existing files are not overwritten without --force. Restart the relevant editor or reload its configuration after setup.
GitHub Marketplace Action
name: Security audit
on: [push, pull_request]
permissions:
contents: read
security-events: write
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: avivgerz-hue/vibe-shield@v2
with:
target: .
fail-on: high
audit-skills: 'true'
sarif-file: vibe-shield.sarif
- uses: github/codeql-action/upload-sarif@v3
if: ${{ always() && hashFiles('vibe-shield.sarif') != '' }}
with:
sarif_file: vibe-shield.sarifThe action runs the published @vibefoundry/vibe-shield@2.0.0 scanner, optionally audits skills, and fails if either enabled gate fails. SARIF upload is separate and requires GitHub code scanning support and appropriate permissions. The explicit target . includes tests and documentation, so review fixture findings in context.
๐ง Why AI code needs its own scanner
Traditional SAST rules are built around human mistakes: a forgotten escape, a missing prepare(). Agent-written code fails differently โ it is confidently complete and structurally plausible:
What a human does | What an agent does |
forgets to validate one input | writes a perfect endpoint with no auth at all |
uses | puts a tool |
commits a | puts |
writes | writes |
adds | renders model output with it, creating stored XSS with a step counter |
vibe-shield encodes those specific shapes: 91 signatures across eight defensive categories, each one derived from a real agent-generated bug rather than a generic CWE checklist.
๐ Vulnerability Coverage Matrix
79 code signatures + 12 agent-integrity signatures = 91. Every rule has an id, a CWE, an illustrative vulnerable shape, remediation guidance, and an OWASP association โ run npx -y @vibefoundry/vibe-shield rules or npx -y @vibefoundry/vibe-shield explain <ID>.
Client-side secret & data exposure โ VSB-CLIENT-*
ID | Detects | CWE | Sev |
|
| critical | |
| server-only | CWE-200 | high |
|
| critical | |
|
| CWE-250 | critical |
|
| high | |
|
| critical | |
|
| critical |
Unguarded mutation routes โ VSB-AUTH-*
ID | Detects | CWE | Sev |
| App Router | critical | |
| Pages API mutation handler with no session check | CWE-306 | critical |
| Express / Fastify / Koa / Hono mutation route with no auth middleware | high | |
| IDOR โ ownership key from | critical | |
|
| CWE-306 | high |
| identity from | critical | |
| admin/destructive surface that authenticates but never checks a role | high | |
|
| medium | |
| cookie-session mutation with no CSRF token protection | medium |
Database exposure โ VSB-DB-*
ID | Detects | CWE | Sev |
|
| critical*/high | |
| permissive policy โ | critical | |
|
| CWE-639 | high |
|
| CWE-732 | critical/high |
|
| CWE-284 | critical/high |
|
| critical | |
| hand-built SQL from request data โ | CWE-89 | critical |
| Supabase service-role key outside a | CWE-250 | critical |
|
| CWE-732 | medium |
| request data used as a table, column or | CWE-89 | high |
* critical when Supabase/PostgREST is detected โ the anon key in every browser makes the table publicly addressable.
AI / LLM & classic web โ VSB-AI-*
ID | Detects | CWE | Sev |
|
| critical | |
| LLM/MCP tool | critical | |
| model output into | CWE-94 | critical |
| untrusted/RAG content interpolated into a | high | |
| Stripe webhook without | critical | |
| webhook signing secret read from the request | CWE-345 | high |
| GitHub/Slack/Shopify/Svix webhook with no signature verification | CWE-345 | high |
|
| high | |
| client | CWE-94 | high |
| open redirect โ | medium | |
| SSRF โ | high | |
| path traversal โ | high | |
| multer/ | medium | |
| public LLM endpoint with no rate limit or quota | medium | |
|
| high |
Hardcoded credentials โ VSB-SECRET-*
ID | Detects | CWE | Sev |
| vendor signature in a server file (Stripe, OpenAI, Anthropic, AWS, GitHub, Supabase, Slack, Twilio, SendGrid, npm, PyPI, HuggingFace, Docker, Vercel, Mailgun, Square, Shopify, Datadog) | CWE-798 | high |
| generic high-entropy assignment to a credential-shaped name | CWE-798 | medium/high |
| PEM private key material | critical | |
| hardcoded JWT whose payload carries | CWE-250 | critical |
| the same vendor credential in a browser-reachable file | CWE-200 | critical |
|
| medium | |
|
| CWE-540 | critical |
Agent skill & MCP poisoning โ VSB-AGENT-* (audit-skills)
ID | Detects | CWE | Sev |
| zero-width, bidi-override, Unicode-tag characters hiding instructions | CWE-74 | critical |
|
| CWE-200 | critical |
| instructions to read | critical | |
| registry-tag | high | |
| literal credentials in an | critical/high | |
| "ignore previous instructions", "do not tell the user", "auto-approve", "skip confirmation" | CWE-74 | critical |
|
| CWE-284 | high |
| base64 payload / | CWE-94 | high |
| "fetch and follow every instruction" | CWE-829 | critical |
| missing frontmatter, wildcard | CWE-250 | medium |
| literal credential inside an instruction/MCP file | CWE-798 | critical |
|
| CWE-78 | medium |
๐ Native MCP server
vibe-shield is itself a Model Context Protocol server, so Claude Code, Claude Desktop, Cursor and Codex can call the scanner as a tool instead of shelling out and parsing console output.
npx -y @vibefoundry/vibe-shield mcp # JSON-RPC 2.0 over stdio
npx -y @vibefoundry/vibe-shield --mcp # same thing, if your client prefers a flagThree tools:
Tool | What it does |
| Runs the code-scanning rules over a project or specific paths โ grade, score, findings with file:line, CWE and remediation |
| Audits |
| Full CWE detail, vulnerable/fixed examples and remediation for any rule id or slug |
npx -y @vibefoundry/vibe-shield init writes the config for you, merging into .mcp.json
without clobbering servers you already have:
{
"mcpServers": {
"github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] },
"vibe-shield": { "command": "npx", "args": ["--yes", "@vibefoundry/vibe-shield@2.0.0", "mcp"] }
}
}The version pin is not cosmetic: an unpinned npx -y server is exactly what
VSB-AGENT-004 flags as high severity, so vibe-shield's own audit would write
itself a finding. init pins the running version automatically.
Or add it by hand:
claude mcp add vibe-shield -- npx -y @vibefoundry/vibe-shield mcpThe server is zero-dependency, writes only JSON-RPC to stdout, honours
JSON-RPC notifications (no spurious replies), and returns tool errors as
isError results so a bad argument degrades one call instead of killing the
session. Requests are handled in arrival order.
An empty target is reported as No files were scanned rather than a green pass โ
a scanner that says "clean" when it read nothing is worse than no scanner.
๐ค Use it as an Agent Skill
npx -y github:avivgerz-hue/vibe-shield#v2 init --agents all installs the skill. Once it is in a repository, every
agent session starts with a contract:
You are not allowed to say "done" until the code you just wrote passes a security audit.
npx -y github:avivgerz-hue/vibe-shield#v2 init --agents all
npx -y github:avivgerz-hue/vibe-shield#v2 init --agents claude
npx -y github:avivgerz-hue/vibe-shield#v2 init --agents cursor,zed --no-workflowWhy this works better than a prompt snippet: it names the three commands, gives the agent a reading guide for a finding (line:col, rule id, message, CWE), states five hard rules (never suppress, never weaken, always rotate, report honestly, re-verify), and defines "done" as an exit code rather than an opinion.
The skill itself is SKILL.md โ read it, it is short.
Anthropic Agent Skills quickstart
# marketplace-style install
npx -y @vibefoundry/vibe-shield init --agent claude
# โ .claude/skills/vibe-shield/SKILL.md
# or globally, for every project
curl -sL https://raw.githubusercontent.com/avivgerz-hue/vibe-shield/main/SKILL.md \
-o ~/.claude/skills/vibe-shield/SKILL.md๐ CI/CD: fail the PR before the bug ships
GitHub Actions (recommended)
npx -y @vibefoundry/vibe-shield init installs a workflow that runs the scan, uploads SARIF to
code scanning, audits the agent surface, and fails the job:
name: vibe-shield
on: [push, pull_request]
permissions:
contents: read
security-events: write
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Scan and upload SARIF
run: npx -y @vibefoundry/vibe-shield scan --format sarif --out vibe-shield.sarif --fail-on high
continue-on-error: true
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: vibe-shield.sarif
category: vibe-shield
- name: Enforce the gate
run: npx -y @vibefoundry/vibe-shield scan --fail-on highFindings appear inline on the pull request diff (GitHub annotations) and in the Security โ Code scanning tab (SARIF), so a reviewer sees the vulnerability on the line that introduced it.
Any other CI
npx -y @vibefoundry/vibe-shield scan --fail-on high # exit 1 on findings
npx -y @vibefoundry/vibe-shield scan --format compact # one line per finding
npx -y @vibefoundry/vibe-shield scan --format json > vibe-shield.json # full report
npx -y @vibefoundry/vibe-shield scan --format summary # JSON, counts + grade only
npx -y @vibefoundry/vibe-shield scan --format github # workflow annotationsExit codes: 0 clean ยท 1 findings at/above --fail-on ยท 2 usage error
(a target path that does not exist, or a target that matches no scannable files).
An empty scan prints NO FILES SCANNED โ this is not a pass and is never
reported as a grade โ a gate pointed at an ignored path fails instead of
succeeding forever.
๐ฏ The scorecard
Grades are deliberately unforgiving, because "B+" for a leaked production key is how security tools lose credibility:
Finding present | Maximum score | Best possible grade |
any critical | 29 | F |
any high | 58 | C |
any medium | 76 | B |
any low | 88 | A- |
nothing | 100 | A+ |
Penalties per finding: critical โ30, high โ12, medium โ5, low โ2, info โ0.5. One leaked live key fails the build on its own; a handful of informational notes never will.
๐ช It scans itself
This repository runs its own gate on every commit and in CI:
$ npx -y @vibefoundry/vibe-shield scan
๐ก๏ธ vibe-shield ยท security scan (illustrative output)
target /you/vibe-shield
๐ GRADE A+ โ 100/100
21 files ยท 172 KiB ยท 236 files/s ยท 89 ms ยท 79 rules
Nothing to fix. Keep the shield up. ๐ก๏ธ
$ npx -y @vibefoundry/vibe-shield audit-skills
๐ GRADE A+ โ 100/100
1 file ยท 6 KiB ยท 14 files/s ยท 69 ms ยท 12 rules
Nothing to fix. Keep the shield up. ๐ก๏ธThe detector catalogue is the one place that must contain the exact vulnerable
shapes and vendor key formats the rules match on โ exactly like gitleaks and
semgrep. Those files are listed explicitly in .vibe-shieldignore
with a comment explaining why, instead of weakening a rule.
๐ Suppressing a finding (legitimately)
Inline, with a rule id and a reason โ the reason is required by review culture even though the parser does not enforce it:
// vibe-shield-disable-next-line VSB-AI-001 -- path comes from a closed enum
exec(`convert ${KNOWN_FORMATS[format]} out.png`);// vibe-shield-disable-line VSB-AUTH-008
// vibe-shield-disable VSB-AI-014
// vibe-shield-enable
// vibe-shield-disable-file VSB-DB-004 -- generated edge schemaSuppressed findings are counted and reported in the scorecard, never silently dropped. Whole-path exclusions belong in .vibe-shieldignore (gitignore syntax) and should be reserved for generated code.
โ๏ธ How it works
discover โโโถ project context โโโถ rule gate โโโถ detect โโโถ suppress โโโถ score โโโถ report
โ โ โ โ
โ โ โ โโ 91 rules, each a pure (FileContext) => RuleHit[]
โ โ โโ cheap content hints: most rules skip most files
โ โโ manifests, framework flags, cross-file RLS index, git index, middleware matchers
โโ one tree walk, gitignore/.vibe-shieldignore layering, binary + size + test/doc pruningDesign constraints, in priority order:
Fast. One
readdirwalk, one read per file, one comment-masking pass, and a cheap gate before any rule body runs. A 400-file project scans in ~200 ms; a typical Next.js app in under 100 ms. No AST, no parser, no dependency.Honest. Every finding carries the exact snippet the developer wrote. Configuration checks may infer risk from file shape, and every suppression is counted, not hidden.
Composable.
scanProject()for the CLI,runRulesOnFile()for the auditor,scoreFindings()for anything that produces findings. The whole API is exported fromvibe-shield.
Zero runtime dependencies. No network calls, no telemetry, no language server, no native binaries. The scanner works offline once installed; a first-time npx install needs registry access.
๐ CLI reference
vibe-shield scan [paths...] Scan the project (default: `.`)
vibe-shield audit-skills [paths...] Audit agent skills, rules, AGENTS.md and MCP config
vibe-shield init Install the Agent Skill, AGENTS.md, .mcp.json and CI gate
vibe-shield mcp Serve the MCP tools over stdio
vibe-shield rules List every detection rule
vibe-shield explain <RULE_ID> Full documentation for one rule
vibe-shield version | helpFlag | Default | Meaning |
|
|
|
|
| Exit 1 at/above this severity |
| โ | Only report at/above this severity |
| off | Write |
| โ | Write the report to a file |
| all | Comma-separated ids/slugs, supports |
| โ | Extra ignore pattern (repeatable) |
| off | Include test/fixture files |
| off | Include Markdown and |
| off | Reuse |
| 50 | Console list cap ( |
| off | One-line verdict ( |
| auto | Disable ANSI (also honours |
| off | Shorthand for |
| off | Ignore |
| off | Ignore |
init takes --target <dir>, --agent claude / cursor / generic / all, --no-workflow,
--force and --yes.
๐งฉ Programmatic API
import { scanProject, formatSarif, buildPatchPrompt, auditSkills } from 'vibe-shield';
const result = await scanProject({ rootDir: process.cwd(), cache: true });
console.log(result.score.score, result.score.grade); // 0 'F'
console.log(result.findings[0].ruleId); // 'VSB-AUTH-001'
console.log(result.findings[0].cwe.id); // 'CWE-306'
process.stdout.write(formatSarif(result)); // SARIF 2.1.0
process.stdout.write(buildPatchPrompt(result)); // agent-ready fix list
const agentReport = await auditSkills(process.cwd()); // VSB-AGENT-* surfaceโ FAQ
Does it replace a real SAST tool? No. It replaces the absence of one. vibe-shield is a fast, zero-dependency gate you can put in front of every agent-written commit today. Pair it with a deeper scanner (CodeQL, Semgrep) if you have one; the rules overlap far less than you would expect, because these are agent-specific shapes.
Will it flag my secure code?
The secure fixture (tests/fixtures/secure/) is a real Next.js + Supabase + Stripe app with auth, RLS, sanitisation, rate limiting and webhook verification โ it scores 100/100 and the suite asserts zero findings on it. Each rule has guard clauses for the legitimate patterns: import "server-only" suppresses the service-role rules, Prisma tagged templates suppress the SQLi rule, DOMPurify suppresses the XSS rule, auth.uid() policies suppress the RLS rules.
Does it send my code anywhere? No. There is no network code in the runtime at all โ the package has zero dependencies and makes no outbound requests.
Why not an AST? Because a 1.5 MB minified bundle, a Vue SFC, a PHP legacy file and a SQL migration all need to be scanned with the same tool, and a parser handles exactly one of those. The rules use structural brace matching plus a comment-masker that preserves offsets, which is enough for the shapes that matter and roughly two orders of magnitude faster.
Why "vibe"? Because the code was written by vibe and reviewed by nobody. This is the reviewer.
๐ Development
git clone https://github.com/avivgerz-hue/vibe-shield
cd vibe-shield
npm ci
npm run typecheck # tsc --noEmit (strict, noUnusedLocals)
npm test # 224 Vitest tests
npm run build # tsc + postbuild (shebang, chmod, CJS marker)
npm run verify # typecheck + test + build + self-scan + self-auditSee CONTRIBUTING.md for the rule-authoring guide, and SECURITY.md for the threat model and disclosure policy.
๐ Requirements
Node.js โฅ 18.17 (uses
node:builtins only โ no polyfills, no native modules)Any OS: Linux, macOS, Windows
No config file required;
package.jsonis optional
๐ License
MIT ยฉ VibeFoundry โ use it, fork it, ship it.
Part of the VibeFoundry Agent Suite
Three tools for the same problem: agents move fast, and something has to keep the output honest.
Tool | What it does | |
๐จ | Studio-grade UI design systems & Anti-Slop engine โ stops agents from generating generic, interchangeable interfaces | |
๐ก๏ธ | Security scanner & MCP guard โ stops agents from shipping leaked keys, unguarded routes and disabled RLS | |
๐ป | Autonomous headless-browser QA & self-healing verification loop โ stops agents from claiming a UI works when it does not |
npx -y @vibefoundry/vibe-shield init # security gateTool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
This server cannot be deployed
Maintenance
Related MCP Connectors
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Security scanner for AI-written code: SAST, secrets, dependencies, IaC, containers and DAST.
Checks AI-written code for leaked keys and made-up packages, on your machine. Never uploads code.
Code security scanner for founders and small teams: leaked secrets, missing RLS, injection, CVEs
Related MCP Servers
- AlicenseBqualityBmaintenanceSecurity MCP server with 300+ rules for AI-generated code. Scans Next.js, Supabase, Clerk, Stripe, Prisma, Hono, GraphQL and 20+ modules. Zero config, runs locally.391,225 npm6Apache 2.0
- AlicenseNot gradedqualityFmaintenancePredeploy security scanner for AI-generated code. 80+ vulnerability patterns across secrets, auth, injection, config, Supabase, and logging. Runs locally, code never leaves your machine. Optional x402 witnessed attestation.94 npmApache 2.0
- AlicenseCqualityDmaintenanceSecurity scanner and MCP server that catches dangerous patterns in MCP servers and AI agent projects, such as leaked secrets, shell execution, and prompt-injection text. Runs as both a CLI and MCP server with CI-friendly severity gates.21MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI agents to scan code for leaked secrets, copyleft licenses, unprotected routes, missing privacy policies, and risky card handling before committing or shipping.73 npmMIT