onshape-mcp@0.1.0
CAUTION· static onlyPublisher claims: "MCP server that drives the Onshape web UI — sketch, dimension, constrain and extrude from any MCP client." Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Before you give it your token
- It will ask for
MCP_TOKENConfiguration, not credentials: GEMINI_MODEL, MCP_HOST, MCP_PORT, MCP_TRANSPORT, ONSHAPE_BROWSER_CHANNEL, ONSHAPE_CDP_URL, ONSHAPE_COOKIES_B64, ONSHAPE_COOKIES_JSON, ONSHAPE_DEFAULT_DOC, ONSHAPE_DIR, ONSHAPE_HOME, ONSHAPE_NGROK_DOMAIN, ONSHAPE_PX_PER_MM, ONSHAPE_TAB_URL, ONSHAPE_TUNNEL_SUBDOMAIN- Where it talks to
- onshape.com (its own)Also trycloudflare.com — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- nothing has run yet
- What we could not test
- everything: the server has not run yet
Run it before you trust it. Nothing has run yet: the code was read, the server was not. `vet-skills try` runs this exact version in the honeypot in about a minute.
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 analysed it statically (a sandbox run is pending) on 2026-11-13 and scored it 45/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; Access to sensitive file paths; Access to sensitive file paths. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
if (_BASE_DIR / ".env").is_file():Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print("Token: pinned from MCP_TOKEN in .env (stable across restarts).")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."Set MCP_TOKEN in your .env (any random string), or bind --host 127.0.0.1,\n"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.p = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.tunnel_proc = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run([sys.executable, "-m", "playwright", "install", "chromium"], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.const cookie = document.cookie.match(/(?:^|; )XSRF-TOKEN=([^;]+)/);Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.npx = shutil.which("npx")Fix: Pin versions and sources; vendor anything fetched at install time.# Load env from base directory (.env in repo or ~/.onshape-mcp/.env)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print("Token: freshly minted — set MCP_TOKEN in .env to keep it stable.")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.m_ng = re.search(r"https://[a-zA-Z0-9.-]+\.ngrok(?:-free)?\.(?:app|dev|io)", line)Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.print("in .env for a permanent one.\n")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.res = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.env_file = _BASE_DIR / ".env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.print(" • Linux: sudo apt install cloudflared (or download binary)")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.m_cf = re.search(r"https://[a-zA-Z0-9-]+\.trycloudflare\.com", line)Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.out = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.print(" # Or: npx localtunnel --port 8000")Fix: Pin versions and sources; vendor anything fetched at install time.print("3. Paste the resulting URL (e.g. https://xxxx.trycloudflare.com/sse)")Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls."""Configuration loaded from .env. The .env file is gitignored (see SECURITY.md)."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.subprocess.run([sys.executable, "-m", "playwright", "install", "chromium"], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
No advisories in OSV for onshape-mcp@0.1.0 as of 21 h ago. This is the package itself, not its dependencies.
What would make this Verified
35 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim williamsamson: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- 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.
- document.cookie access≈ +4 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- Tunneling service URL≈ +4 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.