Grades are a hygiene check, not a security guarantee.

MCP, MCP server

mnemiq

Text-to-SQL you can tune to your database. /NEM-ik/ — the "m" is silent, as in mnemonic.

Compatibility: Not stated.

Grade C

One Medium finding. Read the report before installing.

Graded by PlugVetRubric v2

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

PERMISSION_SHELL_UNDECLARED

Why this grade

  • PERMISSION_SHELL_UNDECLARED Medium

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

    scripts/rerun_local_judge.sh, line 178 rev = subprocess.run(["git","rev-parse","--short","HEAD"], capture_output=True, text=True).stdout.strip()

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.

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. can delete files.

    PERMISSION_SHELL_UNDECLARED PERMISSION_DELETE_FILES

    scripts/rerun_local_judge.sh, line 178

    rev = subprocess.run(["git","rev-parse","--short","HEAD"], capture_output=True, text=True).stdout.strip()

    scripts/rerun_local_judge.sh, line 179

    dirty = bool(subprocess.run(["git","status","--porcelain"], capture_output=True, text=True).stdout.strip())

    scripts/run_spider.py, line 79

    os.remove(args.results)

    Show more

    scripts/run_spider.py, line 82

    os.remove(meta)

    scripts/seed_demo.py, line 103

    os.remove(DB_PATH)

    src/mnemiq/eval/bird_runner.py, line 295

    done = subprocess.run( # noqa: S603 -- fixed argv, no shell

    src/mnemiq/eval/bird_runner.py, line 318

    done = subprocess.run( # noqa: S603 -- fixed argv, no shell

  • Install and update

    Pass

    No install-time script found, and dependencies are pinned or absent.

  • Network

    Concern

    can reach a host that is not written as a fixed address.

    NETWORK_NO_FIXED_HOST

    scripts/rerun_local_judge.sh, line 24

    # `-w %{http_code}` because `curl -sS` without `-f` exits 0 on a 404 and hands back the error page,

    scripts/rerun_local_judge.sh, line 26

    MODELS_RAW="$(curl -sS --max-time 10 -H "Authorization: Bearer ${MNEMIQ_VERIFY_API_KEY:-EMPTY}" \

    scripts/rerun_local_judge.sh, line 45

    # Best-effort. Captured as RAW TEXT and parsed defensively below -- `curl -sS` without `-f` exits 0

    Show more

    scripts/rerun_local_judge.sh, line 48

    VERSION_BODY="$(curl -sS --max-time 10 -w '\n%{http_code}' "${BASE%/}/../version" 2>/dev/null || echo '')"

    scripts/rerun_local_judge.sh, line 165

    # the status a reader cannot tell it from `{"version": "0.9.0.1"}` -- `curl -sS` without `-f` exits

    scripts/rerun_local_judge.sh, line 263

    with urllib.request.urlopen(os.environ["JUDGE_MODELS_URL"], timeout=10) as r:

    scripts/run_native_slm.py, line 360

    with urllib.request.urlopen(req, timeout=timeout) as r:

    src/mnemiq/cli.py, line 81

    help="the extensions to fetch (default: all mnemiq loads -- vss, fts, "

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_DOTENV

    scripts/repo-guard.sh, line 25

    # .env), the check fails closed without it under --staged, and the two CI modes -- --all and

    scripts/repo-guard.sh, line 69

    # Resolve the blocklist: environment first (CI), then the gitignored .env.

    scripts/repo-guard.sh, line 70

    if [ -z "${REPO_GUARD_NAME_PATTERNS:-}" ] && [ -f .env ]; then

    Show more

    scripts/repo-guard.sh, line 71

    REPO_GUARD_NAME_PATTERNS="$(grep '^REPO_GUARD_NAME_PATTERNS=' .env | head -1 | cut -d= -f2- \

    scripts/repo-guard.sh, line 82

    # inferred them from whether `.env` existed, which is wrong in the documented direction:

    scripts/repo-guard.sh, line 83

    # `.env.example` says "Copy to .env", so a contributor who follows the setup has one,

    scripts/repo-guard.sh, line 87

    # gets by copying .env.example, and what the check skips on

    scripts/repo-guard.sh, line 114

    echo "Set it in .env (gitignored) or the environment. Two valid values:"

    scripts/run_minidev_pg.py, line 66

    "llm_api_key": os.getenv("MNEMIQ_ENRICH_API_KEY", settings.llm_api_key),

    scripts/run_verify_replay.py, line 214

    key = os.getenv("MNEMIQ_VERIFY_API_KEY") or settings.llm_api_key

  • Agent instructions

    Pass

    No instruction to ignore earlier instructions or to hide a step.

  • Obfuscation

    Note

    a file was over the read cap and was not fully read. the file cap was reached before every file was read.

    OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED

    uv.lock, line 1

    version = 1

    tests/test_plan_query.py, line 1

    import logging

  • 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 4f4f4e81e619. requests shell access. No manifest field names shell or command execution. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.

Date and source

Date checked:

View source

github.com

Commit graded: 4f4f4e81e61913a95d927b7c393cddeb48041a64

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