Grades are a hygiene check, not a security guarantee.

MCP, MCP server

roundtable

Stop copy-pasting between AI models.

Compatibility: Not stated.

Grade C

One Medium finding. Read the findings 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.

    claudable_helper/services/filesystem.py, line 13 subprocess.run(["git", "init"], cwd=repo_path, check=True)

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

    claudable_helper/services/filesystem.py, line 13

    subprocess.run(["git", "init"], cwd=repo_path, check=True)

    claudable_helper/services/filesystem.py, line 14

    subprocess.run(["git", "add", "-A"], cwd=repo_path, check=True)

    claudable_helper/services/filesystem.py, line 15

    subprocess.run(["git", "commit", "-m", "Initial commit"], cwd=repo_path, check=True)

    Show more

    claudable_helper/services/filesystem.py, line 52

    result = subprocess.run(

    claudable_helper/services/git_ops.py, line 7

    res = subprocess.run(cmd, cwd=cwd, check=True, capture_output=True, text=True)

    claudable_helper/services/local_runtime.py, line 15

    _running_processes: Dict[str, subprocess.Popen] = {}

    claudable_helper/services/local_runtime.py, line 18

    def _monitor_preview_errors(project_id: str, process: subprocess.Popen):

    claudable_helper/services/local_runtime.py, line 336

    shutil.rmtree(os.path.join(repo_path, "node_modules"), ignore_errors=True)

  • Install and update

    Note

    The docs document an installer that pipes a download into a shell.

    INSTALL_DOCUMENTED_INSTALLER

    claudable_helper/cli/adapters/cursor_agent.py, line 44

    "1. Install Cursor: curl https://cursor.com/install -fsS | bash\n"

    claudable_helper/cli/adapters/cursor_agent.py, line 57

    "1. Reinstall: curl https://cursor.com/install -fsS | bash\n"

    claudable_helper/cli/adapters/cursor_agent.py, line 74

    "1. Install Cursor: curl https://cursor.com/install -fsS | bash\n"

    Show more

    claudable_helper/cli/adapters/cursor_agent.py, line 486

    "❌ Cursor Agent CLI not found. Please install with: curl https://cursor.com/install -fsS | bash"

  • Network

    Pass

    No network call found.

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_DOTENV

    claudable_helper/cli/adapters/cursor_agent.py, line 255

    if os.getenv("CURSOR_API_KEY"):

    claudable_helper/cli/adapters/cursor_agent.py, line 256

    cmd.extend(["--api-key", os.getenv("CURSOR_API_KEY")])

    claudable_helper/services/claude_act.py, line 158

    if not os.getenv("ANTHROPIC_API_KEY"):

    Show more

    claudable_helper/services/env_manager.py, line 4

    Handles synchronization between database and .env files in Next.js projects.

    claudable_helper/services/env_manager.py, line 18

    """Get the path to project's .env file"""

    claudable_helper/services/env_manager.py, line 19

    return Path(settings.projects_root) / project_id / "repo" / ".env"

    claudable_helper/services/env_manager.py, line 23

    """Parse .env file and return key-value pairs"""

    claudable_helper/services/env_manager.py, line 52

    print(f"Error parsing .env file {env_path}: {e}")

    claudable_helper/services/env_manager.py, line 58

    """Write environment variables to .env file"""

    claudable_helper/services/env_manager.py, line 63

    # Write .env file

    claudable_helper/services/env_manager.py, line 79

    ui.success(f"Updated .env file: {env_path}", "EnvManager")

  • 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

    uv.lock, line 1

    version = 1

  • Licence

    Note

    no licence file found.

    LICENCE_MISSING

    No file path was stored.

    no licence file found.

  • Maintainer activity

    Note

    the latest commit is more than 365 days old.

    MAINTAINER_STALE

    No file path was stored.

    2025-10-06T00:08:26-04:00

Note

Hygiene check of commit 0148c08f84f7. requests shell access. No manifest field names shell or command execution. can delete files. The docs document an installer that pipes a download into a shell. reads a credential or environment file. a file was over the read cap and was not fully read. no licence file found. the latest commit is more than 365 days old.

Date and source

Date checked:

View source

github.com

Commit graded: 0148c08f84f7aa8d3ae5d0cc1a8736448e841bed

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