prusactl
MCPB · PRUSACTL.MCPB
Run a Prusa 3D printer: status, camera, files, printing, G-code, over PrusaLink or Prusa Connect.
Available components
Last scanned (6 hours ago)
Scores higher than 86% of MCPB servers
Category IoT and Hardware
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 12 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability67
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 6286 tokens (~224/item across 28 items; 28 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 29 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 21 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 0
- Schema quality: 201 → 224 ▼ functional
- 14 Oct 26 +1
- Maintenance: unverified → pass ▲ functional
- 13 Oct 26 +1
- Security disclosure: unverified → fail ▼ functional
- 12 Oct 26 0
- Provenance: unverified → fail ▼ security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 23 Oct 2026 · Analysed mcpb/https://github.com/trevin-lee/prusactl/releases/download/v0.3.0/prusactl.mcpb
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | mcpb |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_to_queue ~343
Add a file to the printer's Prusa Connect print queue, either one on the printer (path) or one in Connect storage (hash). Connect starts the next queued job when the printer is idle and marked ready (send_command SET_PRINTER_READY, or set_ready here). Marking it ready says the plate is clear, the same assertion as plate_clear, and nothing verifies it: do it only after looking at get_camera_snapshot or asking the user.
| Name | Type | Req | Description |
|---|---|---|---|
| hash | string | – | file in Connect storage (from upload_file or list_connect_files); use instead of path |
| path | string | – | file already on the printer, e.g. /usb/part.bgcode |
| position | null|integer | – | 0 = front of the queue, -1 = end (default) |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| set_ready | boolean | – | also mark the printer ready so Connect starts the next job; only with hash. Ready means the plate is clear, the same confirmation plate_clear gives elsewhere: set it only after checking the camera or… |
| team_id | integer | – | team owning the Connect file; default is the printer's team |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
| wait_until | integer | – | unix time before which the job must not start; only with hash |
No output schema declared.
No examples provided.
api_request ~264
Call any printer API endpoint directly, for anything the other tools don't cover. Paths starting with /api/ go to the printer itself over the local network (PrusaLink, e.g. /api/v1/status); paths starting with /app/ go to Prusa Connect as the signed-in user (e.g. PATCH /app/printers/{uuid} for settings, /app/stats/printers/{uuid}/..., /app/teams/{team_id}/files). Credentials in responses are redacted. This is a raw escape hatch for what the other tools don't cover, not a shortcut around them: no safety checks apply (a busy printer, plate_clear), a DELETE or PUT is permanent and really done, and a mistake can start a print, move the head, or change settings. Use start_print, upload_file, run_gcode, send_command, or control_print for anything that prints or moves the printer, and GET to look.
| Name | Type | Req | Description |
|---|---|---|---|
| body | – | – | JSON request body |
| method | string | – | GET, POST, PUT, PATCH or DELETE; default GET |
| path | string | yes | /api/... for the printer (PrusaLink) or /app/... for Prusa Connect |
| query | object | – | query-string parameters |
No output schema declared.
No examples provided.
connection_status ~62
How the printer can be reached right now: directly on the local network (PrusaLink) and/or through Prusa Connect, which account is signed in, and whether a local camera (RTSP) is saved. Says what to set up if neither route works.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
control_print ~185
Pause, resume, or stop the current print. A question on the printer's screen (state ATTENTION) can't be answered this way; use respond_to_dialog through Prusa Connect. Pause is reversible and is the right first move when a print looks wrong; stop is final: the job can't be resumed and the part stays on the plate. Stop only for a clear failure or when the user says so.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | pause, resume, or stop |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
delete_connect_files ~186
Delete files from Prusa Connect's cloud storage, freeing the team's quota. Takes the hashes list_connect_files and upload_file report. Permanent, with no undo, and it removes the file for the whole team. delete_printer_files is the equivalent for the printer's own storage.
| Name | Type | Req | Description |
|---|---|---|---|
| hashes | null|array | yes | file hashes from list_connect_files or upload_file |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| team_id | integer | – | team owning the files; default is the team of the named printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
delete_printer_files ~161
Delete files from the printer's storage. Permanent: there is no trash and no undo, and a file that is printing is refused. List the folder first and delete only what the user named or clearly asked to clean up.
| Name | Type | Req | Description |
|---|---|---|---|
| paths | null|array | yes | full paths on the printer, e.g. /usb/old.bgcode |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
download_printer_file ~196
Copy a file from the printer's storage to this computer, e.g. to inspect the G-code or the slicer settings a finished print used. Direct route only: Prusa Connect can't read files off the printer.
| Name | Type | Req | Description |
|---|---|---|---|
| local_path | string | yes | absolute path on this computer: a folder (the file keeps its name) or a file name |
| overwrite | boolean | – | replace an existing local file |
| path | string | yes | file on the printer, e.g. /usb/part.bgcode |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_camera_snapshot ~272
The latest image from the printer's camera, so you can see the print, the bed, and the nozzle. Use it before starting a print or moving anything (is the plate clear?) and to watch a print for failures. It is the only way to check the plate yourself: plate_clear is just your say-so. Where the picture comes from: the printer's own camera API if it has one; else the camera's RTSP stream, if its address is saved (prusactl setup --camera rtsp://<camera-ip>/live, or PRUSACTL_CAMERA_URL), grabbed with ffmpeg, which must be installed; else Prusa Connect. via=direct forces the first two, via=connect forces Connect. Reports where the image came from and how old it is.
| Name | Type | Req | Description |
|---|---|---|---|
| camera_id | string | – | camera to use when the printer has several; default is the first |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_command ~149
Check the state of a command sent with send_command async=true. The state is the last thing that happened to it: CREATED (accepted), EMIT (sent to the printer), FINISHED, or REJECTED.
| Name | Type | Req | Description |
|---|---|---|---|
| command_id | integer | yes | id returned by an async send_command |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_firmware_status ~129
The firmware the printer runs, the latest one Prusa Connect offers for it, and whether they differ (state: supported, outdated or unsupported). Read-only; Prusa Connect only.
| Name | Type | Req | Description |
|---|---|---|---|
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_job ~148
One print job in detail, including the objects on the plate that can be cancelled individually (cancelable.objects; cancel one with send_command CANCEL_OBJECT and kwargs {"object_id": id}).
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | integer | yes | job id from list_jobs or get_printer's job_info |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_printer ~202
Live status of the printer. "summary" holds the common facts in the same place whichever route was used: state, nozzle/bed/chamber temperatures with their targets, and the current job's name, progress and time remaining. Everything the route itself reported is kept alongside it, so through Prusa Connect that also includes axis positions, fans, speed/flow, filament, nozzle, settings and dialog_info (the dialog on the printer's screen, which respond_to_dialog answers), and directly it includes the printer's own status, info and job records.
| Name | Type | Req | Description |
|---|---|---|---|
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_queue ~144
The printer's print queue in Prusa Connect: jobs waiting to print, in order, with their ids.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | how many entries to return; at most 500 |
| offset | integer | – | entries to skip, for the next page |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_telemetry ~143
Recent telemetry history from Prusa Connect: temperatures, fans, speed, and axis positions over time.
| Name | Type | Req | Description |
|---|---|---|---|
| granularity | integer | – | seconds between samples; default 15 |
| minutes | integer | – | how far back to go; default 30 |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
get_transfers ~118
File transfers to the printer that are in progress (with progress), plus, through Prusa Connect, files waiting in its download queue.
| Name | Type | Req | Description |
|---|---|---|---|
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
list_connect_files ~192
Files stored in Prusa Connect's cloud storage for a team, with the hashes add_to_queue takes. These count against the team's storage quota; delete_connect_files removes them, and delete_printer_files removes files from the printer instead.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | how many entries to return; at most 500 |
| offset | integer | – | entries to skip, for the next page |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| team_id | integer | – | team whose storage to list; default is the team of the first printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
list_events ~166
The printer's event log from Prusa Connect, newest first: state changes, job starts and finishes, errors, attention requests, commands, and file transfers. Use it to find out what happened while nobody was watching.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | how many entries to return; at most 500 |
| offset | integer | – | entries to skip, for the next page |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
list_jobs ~174
The printer's job history, newest first: what printed, when, for how long, and how it ended.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | how many entries to return; at most 500 |
| offset | integer | – | entries to skip, for the next page |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| states | null|array | – | filter by job state, e.g. PRINTING, FIN_OK, FIN_ERROR, FIN_STOPPED |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
list_printer_files ~175
Browse files on the printer's own storage (USB drive). Without path, lists the storages.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | how many entries to return; at most 500 |
| offset | integer | – | entries to skip, for the next page |
| path | string | – | folder on the printer, e.g. /usb or /usb/parts; omit to list the printer's storages |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
list_printers ~62
The printers prusactl can reach: the one set up for direct access (with whether it answers right now) and those on the Prusa Connect account, with state, temperatures, filament, job progress, and any dialog on the printer's screen.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_supported_commands ~199
List every command this printer's firmware accepts through Connect: its arguments (name, type, unit, default, required) and the printer states it may run in (executable_from_state). This is the full control surface of the printer: movement, homing, temperatures, fans, speed/flow, filament load/unload, mesh bed leveling, file and folder management, printer-ready flags, resets, and G-code snippets from the team library.
| Name | Type | Req | Description |
|---|---|---|---|
| executable_now | boolean | – | only list commands the printer accepts in its current state |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
remove_from_queue ~136
Remove a job from the printer's Prusa Connect print queue. The queue entry is gone for good; add_to_queue puts it back at the end.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | integer | yes | queued job id from get_queue |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
respond_to_dialog ~173
Press a button on the dialog currently shown on the printer's screen (filament runout, errors, confirmations, "remove the print" prompts, etc.), the way the Connect web app does remotely. get_printer shows the open dialog in dialog_info with its text and buttons.
| Name | Type | Req | Description |
|---|---|---|---|
| button | string | yes | label of the button to press, exactly as get_printer shows it in dialog_info.buttons |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
run_gcode ~425
Run G-code on the printer over the direct connection: prusactl uploads it as a tiny print job (/usb/prusactl-macro.gcode) and starts it, so it only works while the printer is idle (not printing or paused). This is how to heat (M104/M140/M109/M190), home (G28), move (G90/G91 + G1), load/unload filament (M701/M702), level (G29), or send any other command when Prusa Connect isn't available. It is not a console: the G-code is written to "/usb/prusactl-macro.gcode" on the printer, overwriting the previous run's, and started as a real print job. It shows up on the printer and in history as a short print, occupies the printer until it ends (control_print stop cancels it), and does exactly what the G-code says, with no checks on its content. Moves act on real hardware: make sure nothing is in the way. After a finished or stopped print it needs plate_clear=true, which is your own assertion: verify the plate with get_camera_snapshot or the user first.
| Name | Type | Req | Description |
|---|---|---|---|
| gcode | string | yes | G-code lines to run, e.g. "G28\nM104 S215" |
| plate_clear | boolean | – | your own assertion that the plate is empty; nothing checks it, so make it true: look at get_camera_snapshot and read the image, or take the user's word. Required when the printer is FINISHED or STOPP… |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
send_command ~387
Run any command from list_supported_commands on the printer, exactly as the Connect web app's controls do. The command and state are checked against the printer's supported-command list first. By default waits for the printer to acknowledge. Physical commands (MOVE, HOME, heating, filament, MESH_BED_LEVELING) act on real hardware: check get_printer and the camera first. After a finished or stopped print, START_PRINT, HOME, MOVE, MOVE_Z and MESH_BED_LEVELING also need plate_clear=true, as start_print does. SET_PRINTER_READY tells Connect the plate is clear, so it is itself that confirmation: send it only after looking.
| Name | Type | Req | Description |
|---|---|---|---|
| async | boolean | – | queue the command and return immediately instead of waiting for the printer to acknowledge it |
| command | string | yes | command name exactly as list_supported_commands shows it, e.g. HOME, MOVE, SET_NOZZLE_TEMPERATURE |
| kwargs | object | – | command arguments by name, typed as list_supported_commands describes them |
| plate_clear | boolean | – | your own assertion that the plate is empty; nothing checks it, so make it true: look at get_camera_snapshot and read the image, or take the user's word. Required when the printer is FINISHED or STOPP… |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| timeout_seconds | integer | – | for synchronous commands, how long Connect should wait for the printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
start_print ~263
Start printing a file that is already on the printer's storage. The printer must be idle and the plate clear: check get_printer and look at get_camera_snapshot first. After a finished or stopped print it needs plate_clear=true, which is your own assertion that the plate is empty, so verify it with the camera or the user before setting it.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | file on the printer as list_printer_files reports it, e.g. /usb/3DBENC~2.BGC |
| plate_clear | boolean | – | your own assertion that the plate is empty; nothing checks it, so make it true: look at get_camera_snapshot and read the image, or take the user's word. Required when the printer is FINISHED or STOPP… |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
update_firmware ~314
Install firmware through Prusa Connect: Connect copies the .bbf it hosts (the latest, or version) to the printer's USB drive, then sends the FLASH command, and the printer installs it and restarts. Waits for the copy (a few minutes at most). Without version it goes by Prusa Connect's own verdict: installs the latest when Connect says the firmware is outdated, does nothing when Connect says it is current, and refuses when there is no verdict, so a printer newer than Connect's latest is never downgraded by accident. Refuses before copying anything unless the printer is idle, ready, finished or stopped; a print that starts during the copy leaves the file on the USB drive, not installed, and the result says so. installed is true only when the printer confirmed FLASH. Run it only when the user asked for a firmware update: it restarts the printer, which may ask for a confirmation on its screen.
| Name | Type | Req | Description |
|---|---|---|---|
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| version | string | – | firmware version to install, e.g. 6.8.1; default is the latest one Connect offers for this printer |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
upload_file ~447
Upload a sliced print file (.bgcode/.gcode) from this computer to the printer, optionally starting it (then=print) or adding it to the Prusa Connect queue (then=queue). Directly on the local network the file goes straight to the printer; through Connect it is stored in Connect and copied to the printer in the background (get_transfers shows progress); there then=print puts it first in the queue and marks the printer ready, and Connect starts it once the file arrives. then=print is refused unless the printer is idle. Before then=print, confirm the plate is clear (a camera snapshot, or the user); plate_clear is your own assertion. Uploading through Connect also leaves a copy in the team's Connect storage, which delete_connect_files removes.
| Name | Type | Req | Description |
|---|---|---|---|
| destination | string | – | printer folder to copy it into, e.g. /usb/; default is the printer's first storage |
| filename | string | – | name on the printer; default is the local file name |
| local_path | string | yes | absolute path of a sliced file (.bgcode or .gcode) on this computer |
| overwrite | boolean | – | replace a file with the same name on the printer (direct route) |
| plate_clear | boolean | – | your own assertion that the plate is empty; nothing checks it, so make it true: look at get_camera_snapshot and read the image, or take the user's word. Required when the printer is FINISHED or STOPP… |
| printer | string | – | printer name, serial number, or Connect UUID; optional with a single printer |
| then | string | – | after uploading: none (just store it), print (start it right away), or queue (add to the Prusa Connect print queue); default none |
| via | string | – | force a route: direct or connect; by default direct is used when the printer is reachable. Tools that only work one way (the camera, dialogs, the queue, history, run_gcode, download_printer_file) ref… |
No output schema declared.
No examples provided.
How do I install the prusactl MCP server?
prusactl ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, a106f81c143fb9f4ad71420be86051617d245dda98c954103ce275eb1a3d560c; the commands to do that are on this page. If it does not match, do not open it.
mcpb · prusactl.mcpb
Download bundleCheck the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.
SHA-256
a106f81c143fb9f4ad71420be86051617d245dda98c954103ce275eb1a3d560c
macOS / Linux
echo "a106f81c143fb9f4ad71420be86051617d245dda98c954103ce275eb1a3d560c prusactl.mcpb" | shasum -a 256 -c
Windows (PowerShell)
(Get-FileHash -Algorithm SHA256 .\prusactl.mcpb).Hash -eq "a106f81c143fb9f4ad71420be86051617d245dda98c954103ce275eb1a3d560c"
Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.
What is the prusactl MCP server?
prusactl is an MCP server listed in the public MCP registry as io.github.trevin-lee/prusactl. Run a Prusa 3D printer: status, camera, files, printing, G-code, over PrusaLink or Prusa Connect. This page covers its MCPB bundle (https://github.com/trevin-lee/prusactl/releases/download/v0.3.0/prusactl.mcpb).
Is the prusactl MCP server safe to use?
prusactl scores 51 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the prusactl MCP server expose?
prusactl exposes 28 tools: add_to_queue, api_request, connection_status, control_print, delete_connect_files, and 23 more. Their descriptions and schemas cost roughly 5,815 tokens of context every time the server is loaded.
What licence is the prusactl MCP server under?
prusactl declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.