Skills/PyPI/parapetai-mcp

parapetai-mcp@0.8.1

CAUTION· not started

Publisher claims: "MCP server for Claude Code (and other MCP clients): device-code login to a Parapet control plane, provisioning agents, and pulling the exact quickstart config a codebase needs -- ships eight packaged skills: parapet-maf/parapet-adk/parapet-langgraph (retrofit an existing project per framework), parapet-quickdemo (generate a demo from nothing), parapet-install-prereqs, parapet-audit/parapet-audit-fix (scan for and wrap ungoverned calls), and parapet-identity (per-tool vendor/credential tracking)." Observed in sandbox: no network, touches nothing outside the project, writes no memory.

Registry PyPI (MCP server)Publisher parapet · publishing for 86 daysInstalls 140Last detonated 4 h ago

Coverage

Not started: dependency install failed; the server itself was not observed.
Tested
the dependency install step · every file read, file written and host contacted by what ran
Not tested
server startup · the tool list · tool behavior

What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.

Before you give it your token

It will ask for
GOOGLE_API_KEYOPENAI_API_KEYConfiguration, not credentials: GOOGLE_MODEL, OPENAI_BASE_URL, OPENAI_CHAT_MODEL, PARAPETAI_ACCOUNT_ID, PARAPETAI_AGENT_ID, PARAPETAI_CONTROL_PLANE_URL, PARAPETAI_MCP_CONFIG_DIR, PARAPETAI_MODE, PARAPETAI_PERSIST_POLICY_DIR
Where it talks to
no vendor host named in the codeAlso parapet.run, githubusercontent.com, astral.sh — not the publisher's domain; check what for before connecting.
What the honeypot saw
no credential files read · no network
What we could not test
server startup · the tool list · tool behavior

Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names parapet.run, githubusercontent.com, astral.sh as well as its own vendor. The guard injects GOOGLE_API_KEY, OPENAI_API_KEY only into requests to the host you bind (and its subdomains) and refuses the rest.

$vet-skills run --net declared -- uvx parapetai-mcp

Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.

Is [email protected] safe to install?

KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-14 and scored it 68/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Privileged sudo command; Direct script execution from GitHub raw URL; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.

Behavior trace

Honeypot run · 0 s · 2 scenarios · 0 deviations
t+CategoryObserved action
0.0sprocessno install scripts in bundle
0.1sprocessdependency install exit 1 ·
0.1sclaimednot started: dependency install failed (exit 1); the server itself was not observed
0.1sprocessscript backend runs setup only
0.1sprocessno install scripts to re-run

Static findings

HIGH
Privileged sudo commandsrc/parapetai_mcp/server.py:309 · Privileged sudo command — agent may execute with elevated privilegespkg_mgr, python_cmd = "dnf", "sudo dnf install -y python3.12"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
HIGH
Direct script execution from GitHub raw URLsrc/parapetai_mcp/server.py:296 · Direct script execution from GitHub raw URL — unverified code source'https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"'Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/langgraph/SKILL.md:206 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- Look for an existing `.env`/`.env.local` first. **Ask beforeFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/adk/SKILL.md:212 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- Look for an existing `.env`/`.env.local` first. **Ask beforeFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Privileged sudo commandsrc/parapetai_mcp/server.py:306 · Privileged sudo command — agent may execute with elevated privileges"sudo apt update && sudo apt install -y python3.12 python3.12-venv python3-pip",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
HIGH
Access to sensitive file pathspyproject.toml:49 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"src/parapetai_mcp/skills/quickdemo/templates/maf/.env.local.example" = "parapetai_mcp/skills/quickdemo/templates/maf/.env.local.example"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/maf/SKILL.md:173 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- Look for an existing `.env`/`.env.local` first. **Ask beforeFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
CRITICAL
Pipe-to-shell patternsrc/parapetai_mcp/server.py:317 · Pipe-to-shell pattern — downloads and immediately executes remote codeuv_cmd = "curl -LsSf https://astral.sh/uv/install.sh | sh"Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST06
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/SKILL.md:97 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesonce.** Write it straight into the generated `.env`/`.env.cloud` in step 7;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathspyproject.toml:48 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"src/parapetai_mcp/skills/quickdemo/templates/maf/.env.cloud.example" = "parapetai_mcp/skills/quickdemo/templates/maf/.env.cloud.example"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathspyproject.toml:60 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"src/parapetai_mcp/skills/quickdemo/templates/adk/.env.cloud.example" = "parapetai_mcp/skills/quickdemo/templates/adk/.env.cloud.example"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/driver.py:125 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesf"or `cp .env.cloud .env` to switch back to the real control plane."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/example_no_governance.py:12 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesinstead -- see .env.cloud.example / .env.local.example. Either way theFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/example_governed.py:45 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env.cloud.example / .env.local.example.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/example_governed.py:44 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesOPENAI_API_KEY in .env to a real key to use a real model instead -- seeFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/parapetai_mcp/skills/quickdemo/templates/langgraph/driver.py:25 · Python subprocess execution detectedproc = subprocess.run( # noqa: S603 -- fixed local script name, not untrusted inputFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/driver.py:125 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesf"or `cp .env.cloud .env` to switch back to the real control plane."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/example_governed.py:20 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env.local.example, and README.md's "Switching between cloud and localFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_governed.py:22 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesTwo modes, toggled by PARAPETAI_MODE in .env (see .env.cloud.example /Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/parapetai_mcp/skills/quickdemo/templates/adk/driver.py:25 · Python subprocess execution detectedproc = subprocess.run( # noqa: S603 -- fixed local script name, not untrusted inputFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/example_governed.py:35 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env.cloud.example / .env.local.example.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/example_no_governance.py:11 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesnetwork). Set OPENAI_API_KEY in .env to a real key to use a real modelFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/example_governed.py:19 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesTwo modes, toggled by PARAPETAI_MODE in .env (see .env.cloud.example /Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_governed.py:39 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env.cloud.example / .env.local.example.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_no_governance.py:32 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesload_dotenv(Path(__file__).parent / ".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/example_no_governance.py:32 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesload_dotenv(Path(__file__).parent / ".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_no_governance.py:12 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesuse a real Gemini model instead -- see .env.cloud.example /Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_governed.py:38 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env to a real key to use a real Gemini model instead -- seeFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/example_no_governance.py:34 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesload_dotenv(Path(__file__).parent / ".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/example_governed.py:28 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesTwo modes, toggled by PARAPETAI_MODE in .env (see .env.cloud.example /Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/example_no_governance.py:14 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesitself; see pyproject.toml). Set OPENAI_API_KEY in .env to a real key toFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/maf/example_governed.py:34 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesOPENAI_API_KEY in .env to a real key to use a real model instead -- seeFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_governed.py:23 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env.local.example, and README.md's "Switching between cloud and localFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Remote installer piped to shellsrc/parapetai_mcp/server.py:317 · Remote installer piped to shelluv_cmd = "curl -LsSf https://astral.sh/uv/install.sh | sh"Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST07
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/example_governed.py:29 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env.local.example, and README.md's "Switching between cloud and localFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_no_governance.py:13 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files.env.local.example. Either way the agent code below is unchanged; onlyFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/driver.py:125 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesf"or `cp .env.cloud .env` to switch back to the real control plane."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/SKILL.md:159 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files- `.env` and `.env.cloud`: both created from `.env.cloud.example` withFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/langgraph/example_no_governance.py:15 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesuse a real model instead -- see .env.cloud.example / .env.local.example.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedsrc/parapetai_mcp/server.py:259 · Python subprocess execution detectedout = subprocess.run( # noqa: S603 -- fixed candidate list, not untrusted inputFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedsrc/parapetai_mcp/skills/quickdemo/templates/maf/driver.py:25 · Python subprocess execution detectedproc = subprocess.run( # noqa: S603 -- fixed local script name, not untrusted inputFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssrc/parapetai_mcp/skills/quickdemo/templates/adk/example_no_governance.py:11 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filessubclass -- no network call). Set GOOGLE_API_KEY in .env to a real key toFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05

Cost to the agent

Instructions loaded
≈17,629 tok
8 files · 43 in bundle
Tool list per prompt
≈0 tok
0 tools · 0 per tool
Handshake
no reply
launch to tools/list, stdio
Undocumented tools
0
description under 20 chars · avg 0

Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.

Known vulnerabilities

No advisories in OSV for parapetai-mcp@0.8.1 as of 4 h ago. This is the package itself, not its dependencies.

What would make this Verified

12 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%
  1. Pipe-to-shell pattern≈ +9 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
  2. Unclaimed publisher≈ +8 on the totalClaim parapet: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
  3. Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
  4. Direct script execution from GitHub raw URL≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
  5. Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
  6. Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
Publish a new version to PyPI, then queue it here. Not your skill? Claim the handle to get verdict changes by email.Claim parapetPropose a patch to the maintainer