prusa-workbench-mcp@0.1.0
VERIFIED· not startedPublisher claims: "Enables Claude to create and manage multi-bed 3D-print jobs, import and transform models, configure per-bed and per-object PrusaSlicer settings, preview layouts, and slice each bed in parallel into G-code for review in a local viewer before sending to Prusa Connect/PrusaLink." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
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: Verified 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
- no credential variables read in the code
- Where it talks to
- no vendor host named in the codeAlso prusa3d.com, onshape.com, openxmlformats.org, microsoft.com, slic3r.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 under the guard. Not started: dependency install failed; the server itself was not observed. The code names no credential variable; the guard pins the network to what the honeypot saw and logs every call.
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-11 and scored it 83/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
ONSHAPE_ENV_FILE = Path(os.environ.get("PRUSA_WORKBENCH_ONSHAPE_ENV", "~/onshape-mcp/.env")).expanduser()Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.~/onshape-mcp/.env (each download counts against the user's Onshape API allocation).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Keys: ONSHAPE_ACCESS_KEY / ONSHAPE_SECRET_KEY from the environment or from ~/onshape-mcp/.env.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.p = subprocess.run([node, "-e", NODE_HARNESS, str(WORKER)], input=gcode_text, capture_output=True, text=True,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.p = subprocess.Popen([py, "-c", code], cwd=REPO, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.run([*PRUSASLICER, *args], capture_output=True, text=True, encoding="utf-8",Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.run([*config.PRUSASLICER, "--help"], capture_output=True, timeout=60).returncode == 0Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.Popen(cmd, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.ok = subprocess.run(["/usr/bin/python3", "-c", "import gi; gi.require_version('WebKit2', '4.1')"],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["gio", "trash", str(path)], check=True, capture_output=True, timeout=60)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.assert _req(viewer + "/../../etc/passwd")[0] == 404Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.subprocess.Popen([sys.executable, "-m", "prusa_workbench.viewer", "--port", str(VIEWER_PORT),Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(cmd, capture_output=True, timeout=30)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.self.proc = subprocess.Popen([login_python(), "-m", "prusa_workbench.connect_login"], cwd=REPO, env=env,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.Popen([GTK_PYTHON, "-m", "prusa_workbench.app_window"], cwd=REPO,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. 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
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.