Grades are a hygiene check, not a security guarantee.

MCP, MCP server

Qartez Mcp

Qartez MCP X-ray vision for your codebase - built for AI agents, not humans. The first code-intelligence server design

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

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).

    install.sh, line 9 # curl -sSfL https://qartez.dev/install | sh

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

    Note

    requests shell access. The manifest names this permission.

    PERMISSION_SHELL_DECLARED

    src/graph/security.rs, line 177

    // `subprocess[.(]` covers Python's `subprocess.run(...)` /

    src/graph/security.rs, line 178

    // `subprocess.Popen(...)` without catching Rust identifiers

    src/graph/security.rs, line 1769

    check_regex(pattern, "import subprocess; subprocess.run(['ls'])", true);

    Show more

    src/graph/security.rs, line 1770

    check_regex(pattern, "subprocess.Popen(['rm', path])", true);

  • Install and update

    Serious

    install fetches a script from the network. The docs document an installer that pipes a download into a shell. README documents an installer that pipes a download into a shell.

    INSTALL_REMOTE_SCRIPT INSTALL_DOCUMENTED_INSTALLER

    CHANGELOG.md, line 555

    - **One-liner install** - `curl -sSfL https://qartez.dev/install | sh` downloads and builds from source without cloning the repo

    README.md, line 64

    curl -sSfL https://qartez.dev/install | sh

    install.sh, line 9

    # curl -sSfL https://qartez.dev/install | sh

    Show more

    install.sh, line 392

    err " 1. Install rustup and retry: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"

    src/bin/setup.rs, line 3342

    let install_cmd = format!("curl -sSfL {QARTEZ_INSTALL_URL} | sh");

  • Network

    Concern

    can reach a host that is not written as a fixed address. can reach example.com. The description does not name that host.

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST

    install.sh, line 6

    # Only needs: curl or wget, plus tar.

    install.sh, line 56

    if ! command -v curl >/dev/null 2>&1 && ! command -v wget >/dev/null 2>&1; then

    install.sh, line 57

    err "Neither curl nor wget found. Install one of them first."

    Show more

    install.sh, line 62

    if command -v curl >/dev/null 2>&1; then

    install.sh, line 63

    curl -sSfL -o "$2" "$1"

    install.sh, line 65

    wget -qO "$2" "$1"

    install.sh, line 71

    if command -v curl >/dev/null 2>&1; then

    install.sh, line 72

    curl -sSfL "$1"

    qartez-dashboard/src/auth.rs, line 126

    /// process (`curl -H 'Origin: http://localhost'`), so it cannot stand in for

    src/graph/security.rs, line 2292

    let body = "curl http://127.0.0.1";

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_DOTENV

    src/test_paths.rs, line 138

    ".env",

    src/toolchain.rs, line 422

    .env("NO_COLOR", "1")

    src/toolchain.rs, line 423

    .env("TERM", "dumb")

    Show more

    src/graph/security.rs, line 1738

    r#"api_key="process.env.OPENAI_KEY""#

    src/graph/security.rs, line 1985

    // `Command::new("git").env("LANG", "C").args(["log"]).output();` is

    src/graph/security.rs, line 1988

    let body = r#"Command::new("git").env("LANG", "C").args(["log", "-1"]).output()?;"#;

    src/graph/security.rs, line 1999

    let body = r#"Command::new("sh").env("PATH", format!("/bin:{}", extra)).output()?;"#;

    src/graph/security.rs, line 2106

    r#"api_key='process.env.OPENAI_KEY'"#

    src/index/walker.rs, line 16

    // `.gitlab/`, `.claude/`, and pick up `.gitlab-ci.yml`, `.env.sample`

    .gitignore, line 23

    # Env files

  • 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.

    OBFUSCATION_FILE_OVER_READ_CAP

    src/server/quality_tests.rs, line 1

    use super::*;

  • 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 7fdb5095054e. requests shell access. The manifest names this permission. install fetches a script from the network. The docs document an installer that pipes a download into a shell. README documents an installer that pipes a download into a shell. can reach a host that is not written as a fixed address. can reach example.com. The description does not name that host. reads a credential or environment file. a file was over the read cap and was not fully read.

Date and source

Date checked:

View source

github.com

Commit graded: 7fdb5095054e62eefa164384893efc824c023800

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