Skills/PyPI/mcpbundles

mcpbundles@1.5.109

CAUTION· not started

Publisher claims: "MCPBundles CLI — connect AI to all your MCP tools from the command line" Observed in sandbox: no network, touches nothing outside the project, writes no memory.

Registry PyPI (MCP server)Publisher thinkchainai · publishing for 383 daysInstalls 587Last detonated 4d 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
MCPBUNDLES_API_KEY or --oauthConfiguration, not credentials: DISPLAY, ENVIRONMENT, MCP_TOOL_CALL_TIMEOUT_SECONDS, MCPBUNDLES_API_BASE_URL, MCPBUNDLES_BASE_URL, MCPBUNDLES_CONFIG_DIR, MCPBUNDLES_CONNECTION, MCPBUNDLES_DESKTOP_SHELL_VERSION, MCPBUNDLES_NO_DAEMON, MCPBUNDLES_NO_UPDATE_NOTICE, MCPBUNDLES_OUTPUT, MCPBUNDLES_RUNTIME_OWNER, SystemRoot, UKPI_BROWSER_WORKER
Where it talks to
mcpbundles.com (its own)Also no-color.org — 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 no-color.org as well as its own vendor. The guard injects MCPBUNDLES_API_KEY only into requests to mcpbundles.com (and its subdomains) and refuses the rest.

$vet-skills run --secrets MCPBUNDLES_API_KEY=mcpbundles.com -- uvx mcpbundles

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-10 and scored it 75/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: Access to sensitive file paths; Auto-update or dynamic fetch configuration; Auto-update or dynamic fetch configuration. 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

MEDIUM
Python subprocess execution detectedmcpbundles/daemon.py:474 · Python subprocess execution detectedproc = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathsmcpbundles/config_dir.py:3 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files``ENVIRONMENT=development`` (common when sourcing repo ``.env`` for backendFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
HIGH
Auto-update or dynamic fetch configurationmcpbundles/local_config.py:40 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeauto_update_enabled: bool = TrueFix: Pin versions and sources; vendor anything fetched at install time.
AST06
HIGH
Auto-update or dynamic fetch configurationmcpbundles/local_config.py:174 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeauto_update_enabled=auto_update_enabled,Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
HIGH
Auto-update or dynamic fetch configurationmcpbundles/local_config.py:145 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeauto_update_enabled: bool = True,Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
HIGH
Auto-update or dynamic fetch configurationmcpbundles/local_config.py:94 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeauto_update_enabled=bool(value.get("auto_update_enabled", True)),Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
MCP server using network transport (SSE/HTTP)mcpbundles/manifest.py:217 · MCP server using network transport (SSE/HTTP) — data sent over networkmcpbundles call connect_mcp_server -- base_url="https://api.example.com/v1" api_key="sk-xxx" name="Example"Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.
AST04
MEDIUM
Python subprocess execution detectedmcpbundles/process_query.py:55 · Python subprocess execution detectedoutput = subprocess.check_output(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Auto-update or dynamic fetch configurationtests/test_local_config.py:30 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeauto_update_enabled=True,Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Auto-update or dynamic fetch configurationtests/test_daemon.py:504 · Auto-update or dynamic fetch configuration — agent may load new code at runtime"auto_update_enabled": True,Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Credential pass-through configurationtests/test_cli.py:455 · Credential pass-through configuration — agent relays sensitive credentials"""Test proxy token data follows shared auth resolution for env API keys."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST02
MEDIUM
npx invocation of non-well-known packagetests/test_local_config.py:63 · npx invocation of non-well-known package — may execute untrusted codeassert parse_command("npx -y @modelcontextprotocol/server-filesystem '/Users/tony/My Files'") == [Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Auto-update or dynamic fetch configurationtests/test_local_cli.py:106 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeassert '"auto_update_enabled": true' in local_file.read_text()Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Python subprocess execution detectedmcpbundles/process_query.py:25 · Python subprocess execution detectedoutput = subprocess.check_output(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Auto-update or dynamic fetch configurationtests/test_local_cli.py:85 · Auto-update or dynamic fetch configuration — agent may load new code at runtime"auto_update_default": True,Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Auto-update or dynamic fetch configurationtests/test_local_config.py:42 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeassert loaded["aws-docs"].auto_update_enabled is TrueFix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Python subprocess execution detectedmcpbundles/runtime_status.py:311 · Python subprocess execution detectedoutput = subprocess.check_output(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Process kill commandtests/test_cli.py:503 · Process kill command — agent can terminate processes"567 /bin/zsh -c kill 123 || true && mcpbundles proxy start --as mcpbundles_prod",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
MEDIUM
npx invocation of non-well-known packagetests/test_local_cli.py:173 · npx invocation of non-well-known package — may execute untrusted coderunner.invoke(cli, ["local", "add", "memory", "--command", "npx -y @modelcontextprotocol/server-memory"])Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Python subprocess execution detectedmcpbundles/runtime_status.py:325 · Python subprocess execution detectedoutput = subprocess.check_output(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
npx invocation of non-well-known packagetests/test_local_cli.py:55 · npx invocation of non-well-known package — may execute untrusted code"npx server",Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Auto-update or dynamic fetch configurationtests/test_local_cli.py:100 · Auto-update or dynamic fetch configuration — agent may load new code at runtimeassert "Auto-update is ON" in result.outputFix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
npx invocation of non-well-known packagetests/test_local_cli.py:156 · npx invocation of non-well-known package — may execute untrusted coderunner.invoke(cli, ["local", "add", "memory", "--command", "npx -y @modelcontextprotocol/server-memory"])Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Process kill commandmcpbundles/daemon.py:648 · Process kill command — agent can terminate processes# Stray CTRL_BREAK from a shared Windows console group must not kill aFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05

Cost to the agent

Instructions loaded
≈54 tok
1 file · 81 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 mcpbundles@1.5.109 as of 4d ago. This is the package itself, not its dependencies.

What would make this Verified

5 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%
  1. Unclaimed publisher≈ +8 on the totalClaim thinkchainai: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
  2. 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.
  3. Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
  4. Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
  5. MCP server using network transport (SSE/HTTP)≈ +2 on the totalNamespace tool names and keep tool descriptions literal; no instructions to the agent inside them.
  6. Credential pass-through configuration≈ +2 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
Publish a new version to PyPI, then queue it here. Not your skill? Claim the handle to get verdict changes by email.Claim thinkchainaiPropose a patch to the maintainer