Bambu Studio (unofficial)
PYPI · UNOFFICIAL-BAMBU-MCP
Build, edit, slice, check and calibrate Bambu Studio projects; read a Bambu Lab printer's status.
Available components
Last scanned (15 hours ago)
Scores higher than 56% of PyPI 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 Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 33 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- 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 6 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability61
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 10208 tokens (~117/item across 87 items; 87 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 Management23
- Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 13 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_plate" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 88 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
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.
- 4 Nov 26 −11
- Malware scan: pass → unverified ▼ security
- Stability: unverified → 0.23 ▲ functional
- 30 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 28 Oct 26 49
First indexed and scored.
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 4 Nov 2026 · Analysed pypi/unofficial-bambu-mcp@0.3.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 33 packages
| Packages resolved | 33 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
preview_layer ~92
Image of one sliced layer seen from the top (needs slice_project first). Choose by layer number (1 = first) or by height z in mm. Extrusions are drawn in the filament colors. zoom: frame the extrusions (default), or False for the whole bed.
| Name | Type | Req | Description |
|---|---|---|---|
| layer | integer | – | – |
| plate | integer | – | – |
| z | number | – | – |
| zoom | boolean | – | – |
No output schema declared.
No examples provided.
preview_plate ~119
Image of a plate with its objects in their filament colors (painted colors too). view: iso | top. zoom: frame the objects instead of the whole bed, to see details. labels: write each object's id and name on it, e.g. view='top', labels=True to tell which part is which (a part that came off the plate, the list in Bambu Handy's skip objects).
| Name | Type | Req | Description |
|---|---|---|---|
| labels | boolean | – | – |
| plate | integer | – | – |
| view | string | – | – |
| zoom | boolean | – | – |
No output schema declared.
No examples provided.
printer_camera ~89
A picture from the printer's camera right now (P1 and A1 series), to see the plate: how a print is going, whether something came off or made spaghetti, what is left on the bed. Read-only; works with the printer in cloud mode. With the chamber light off the picture is dark. max_size: longest side in pixels.
| Name | Type | Req | Description |
|---|---|---|---|
| max_size | integer | – | – |
No output schema declared.
No examples provided.
printer_files ~88
Files on the printer's SD card, newest first, with name, size and date and the total per folder: timelapse (videos of past prints), prints (files of past prints the printer keeps), thumbnails (timelapse thumbnails whose video was deleted). Read-only; works with the printer in cloud mode.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | – | – |
| limit | integer | – | – |
No output schema declared.
No examples provided.
printer_status ~177
Read-only status of the printer on the local network: state, job, progress, remaining time, layer (or the last job's result when idle), temperatures, AMS trays (type, color, remaining %; 'unknown' = a spool the AMS has not been told about), AMS humidity and temperature, active slot, errors, objects skipped during the print, and warnings (the spool being fed is unknown or not the project's filament, sport speed on a long print, a report that looks old). read_at = when the printer sent it; age_s = seconds since, when a reading of a few seconds ago is given again (the printer is asked at most every 20 s). Works with the printer in normal cloud mode (Bambu Handy keeps working). Nothing is sent to the printer except a status request.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
remove_brim_ears ~34
Remove an object's brim ears; its brim goes back to the project's brim type.
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
No output schema declared.
No examples provided.
remove_height_range ~49
Remove the height band of an object that starts at z_from (mm), or all its bands (z_from=-1).
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
| z_from | number | – | – |
No output schema declared.
No examples provided.
remove_layer_action ~46
Remove a layer action (1-based index as listed by get_project), or all of them with index 0.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | – |
| plate | integer | yes | – |
No output schema declared.
No examples provided.
remove_part ~48
Remove a part (e.g. a modifier) from an object, by part name. The last solid part cannot be removed.
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
| part | string | yes | – |
No output schema declared.
No examples provided.
remove_plate ~46
Delete a plate. Its objects are moved to plate `move_objects_to` (0 = delete them too).
| Name | Type | Req | Description |
|---|---|---|---|
| move_objects_to | integer | – | – |
| plate | integer | yes | – |
No output schema declared.
No examples provided.
rename_plate ~34
Give a plate a name (shown in Bambu Studio).
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| plate | integer | yes | – |
No output schema declared.
No examples provided.
rename_preset ~82
Rename one of your user presets (a backup copy is kept). A preset in your Bambu cloud cannot be renamed from here, because Bambu Studio would download the old one again: the answer says how to do it in Bambu Studio.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | yes | – |
| name | string | yes | – |
| new_name | string | yes | – |
No output schema declared.
No examples provided.
replace_with_stl ~124
Swap the shape of an object (or of its part `part`) for the one in an STL/OBJ/3MF file, like Bambu Studio's Replace with STL, e.g. after fixing it in CAD. Name, filament, settings, place on the plate and the other parts stay; the new shape takes the old one's center, standing on the same bottom. Painting on the old shape is dropped (it was for other triangles).
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
| part | string | – | – |
| path | string | yes | – |
No output schema declared.
No examples provided.
reprint_objects ~134
A new project with only some objects of the open one, e.g. a part that came off the plate and was skipped: same printer, process, filaments and settings, laid out again (more plates if needed); brim=True gives each an outer brim. Saved as a new file (never overwrites) and sliced; the open project is not changed: open_project(file) then send_to_printer to print it. objects: names or ids (see get_project).
| Name | Type | Req | Description |
|---|---|---|---|
| brim | boolean | – | – |
| name | string | – | – |
| objects | array | yes | – |
| slice | boolean | – | – |
No output schema declared.
No examples provided.
reset_setting ~28
Drop an override: the setting goes back to the preset value.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
No output schema declared.
No examples provided.
save_filament_preset ~196
Save the filament of a slot, with this project's changes for that slot (temperatures, flow ratio, pressure advance, plate temperatures...), as a Bambu Studio user preset; it appears after Bambu Studio restarts. A new filament (made from a Generic preset, or with another filament_vendor) is saved like Bambu Studio's Create Filament does: its own filament id, so it can be picked for an AMS slot (Device > AMS). Changes to a Bambu filament are saved as a variant of it, so its RFID spools still match it. replace=True updates an existing user preset with that name (e.g. after a calibration): it keeps its filament id, so AMS slots set to it stay valid, and a backup copy is kept. Never overwrites otherwise.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| replace | boolean | – | – |
| slot | integer | yes | – |
No output schema declared.
No examples provided.
save_printer_preset ~98
Save this project's printer changes (start/end G-code, retraction, printable area...: the set_setting changes that belong to the printer) as a Bambu Studio user printer preset, a child of the project's printer preset. replace=True updates your user preset with that name (a backup copy is kept). It appears after Bambu Studio restarts.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| replace | boolean | – | – |
No output schema declared.
No examples provided.
save_process_preset ~109
Save this project's process changes (layer height, walls, infill, speeds, brim, supports, ironing...: the set_setting changes that belong to the process) as a Bambu Studio user process preset, a child of the project's process preset, like Save as in Bambu Studio. replace=True updates your user preset with that name (a backup copy is kept). It appears after Bambu Studio restarts.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| replace | boolean | – | – |
No output schema declared.
No examples provided.
save_project ~77
Write the project as a Bambu Studio .3mf (default folder: the output dir, name from the project). Never overwrites: if the file exists a -2, -3... suffix is added. Optionally open it in Bambu Studio.
| Name | Type | Req | Description |
|---|---|---|---|
| open_in_bambu | boolean | – | – |
| path | string | – | – |
No output schema declared.
No examples provided.
search_presets ~82
Find presets. kind: filament | process | machine. query: words to match (e.g. 'eSUN PLA+', '0.16mm'). With printer, only presets compatible with it. User presets come first.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | yes | – |
| limit | integer | – | – |
| printer | string | – | – |
| query | string | – | – |
No output schema declared.
No examples provided.
send_to_printer ~288
Make the print file of one plate (.gcode.3mf) and send it. via = auto (Bambu Connect if installed, otherwise Bambu Studio) | bambu_connect | bambu_studio: open it in an official Bambu app, where the user checks printer and AMS mapping and presses Print/Send. via = file: only make the file. via = lan: copy it to the printer on the local network and START PRINTING, for printers in LAN-only mode with Developer Mode (print farms; in cloud mode the printer refuses and the answer says so). Two steps: without confirm nothing is sent, the answer gives the AMS slots it would use and a code; check with the user that the plate is clear, then call again with confirm=<code>. AMS slots: from use_ams_filaments, or ams_slots (one AMS slot per project filament slot, 0 = automatic), or the tray with the same type and the closest color. Tell the user the time, weight and filaments of the plate (and for lan, follow it with printer_status).
| Name | Type | Req | Description |
|---|---|---|---|
| ams_slots | – | – | – |
| bed_leveling | boolean | – | – |
| confirm | string | – | – |
| plate | integer | – | – |
| timelapse | boolean | – | – |
| via | string | – | – |
No output schema declared.
No examples provided.
set_filament ~55
Change one filament slot (1-based); a new slot number = add a slot. Leave a field empty to keep it.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | – |
| preset | string | – | – |
| slot | integer | yes | – |
No output schema declared.
No examples provided.
set_height_range ~153
Settings for a height band of an object, like Bambu Studio's Height range modifier. Heights are mm from the object's bottom. E.g. z_from=0, z_to=5, settings={"sparse_infill_density": "100%"}; {"layer_height": "0.12"} for finer layers there (variable layer height); {"filament": 2} to print that band with another filament slot (a color band). A band with the same z_from and z_to is updated (null removes a key); bands cannot overlap.
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
| settings | object | yes | – |
| z_from | number | yes | – |
| z_to | number | yes | – |
No output schema declared.
No examples provided.
set_object_filament ~51
Assign a filament slot to a whole object, or to one of its parts (by part name).
| Name | Type | Req | Description |
|---|---|---|---|
| filament | integer | yes | – |
| object | string | yes | – |
| part | string | – | – |
No output schema declared.
No examples provided.
set_object_printable ~66
Keep an object on the plate but leave it out of the print (printable=False), like unticking Printable in Bambu Studio; True puts it back. The other objects slice and print as usual.
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
| printable | boolean | – | – |
No output schema declared.
No examples provided.
set_object_setting ~65
Per-object print setting (e.g. sparse_infill_density '40%', wall_loops '4', layer_height '0.12'). An empty value removes the override.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| object | string | yes | – |
| value | string | yes | – |
No output schema declared.
No examples provided.
set_part_type ~96
Change what a part of an object is, like Bambu Studio's Change type: 'part' (printed), 'modifier' (its settings apply inside it), 'negative' (cut out, a hole), 'support_blocker' or 'support_enforcer'. An object keeps at least one printed part.
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
| part | string | yes | – |
| type | string | yes | – |
No output schema declared.
No examples provided.
set_plate_settings ~208
Settings of one plate, like Bambu Studio's plate settings; they win over the project's on that plate. bed_type: Cool Plate, Engineering Plate, High Temp Plate, Textured PEI Plate or Supertack Plate. print_sequence: 'by layer', or 'by object' (each object printed to the end before the next). first_layer_filaments: order of the filament slots on the first layer, e.g. [2, 1]. spiral_vase: 'on' or 'off'. prime_tower: [x, y] in mm, where its corner goes (e.g. between objects). 'global' (or [] for the lists) goes back to the project's choice; empty leaves it as it is.
| Name | Type | Req | Description |
|---|---|---|---|
| bed_type | string | – | – |
| first_layer_filaments | – | – | – |
| plate | integer | yes | – |
| prime_tower | – | – | – |
| print_sequence | string | – | – |
| spiral_vase | string | – | – |
No output schema declared.
No examples provided.
set_printer ~82
Switch printer (e.g. P1S -> A1M). Filament presets are swapped for the same filaments on the new printer. With rearrange, objects are re-placed to fit the new bed (extra plates are added if needed).
| Name | Type | Req | Description |
|---|---|---|---|
| printer | string | yes | – |
| process | string | – | – |
| rearrange | boolean | – | – |
No output schema declared.
No examples provided.
set_purge_volumes ~216
Change the purge (flush) volumes, as in Bambu Studio's Purging volumes dialog. volumes: [{"from": 1, "to": 2, "volume": 350}, ...] mm³ for single changes; matrix: every value at once, rows = from, columns = to (the diagonal is ignored); multiplier: scales all of them (0..3, 1 = as written); reset: back to the values estimated from the colors and multiplier 1. A value set by hand stays while both slots keep their color. Values are 0..900 mm³. Less purge saves filament but the new color can come out mixed at first; to waste less without that, purge into the infill or into an object with set_setting('flush_into_infill', '1') or set_object_setting(object, 'flush_into_objects', '1').
| Name | Type | Req | Description |
|---|---|---|---|
| matrix | – | – | – |
| multiplier | number | – | – |
| reset | boolean | – | – |
| volumes | – | – | – |
No output schema declared.
No examples provided.
set_setting ~167
Override a project setting. For filament settings (temperatures, plate temperatures...) slot = filament slot (0 = all slots). Values are Bambu Studio strings, e.g. '0.16', '15%', '65'. Useful keys: layer_height, wall_loops, sparse_infill_density, top_shell_layers, enable_support, brim_type, initial_layer_speed, ironing_type, textured_plate_temp(_initial_layer) for Textured PEI, hot_plate_temp(_initial_layer) for the smooth/High Temp plate, nozzle_temperature(_initial_layer), close_fan_the_first_x_layers, print_sequence ('by object'), curr_bed_type ('Textured PEI Plate').
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| slot | integer | – | – |
| value | string | yes | – |
No output schema declared.
No examples provided.
skip_objects ~159
Stop printing some objects of the print running now, e.g. a part that came off the plate. It CANNOT be undone. ids: the objects' ids as the printer knows them (identify_id; Bambu Handy's skip list, or printer_status 'skipped_objects'). Do not list every object: to stop the whole print, cancel it on the printer. First call without confirm: nothing is sent, the answer says what would be skipped and the confirm code; tell the user, and only after they agree call again with confirm=<code>. Bambu firmware accepts it only in LAN-only mode with Developer Mode; otherwise use Bambu Handy or the printer.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string | – | – |
| ids | array | yes | – |
No output schema declared.
No examples provided.
slice_project ~69
Slice with Bambu Studio (plate 0 = all). Returns per plate: minutes, grams (total and per filament slot), cost (from the presets' price per kg), filament changes, layers and warnings. The sliced project is saved next to the project file.
| Name | Type | Req | Description |
|---|---|---|---|
| plate | integer | – | – |
No output schema declared.
No examples provided.
split_object ~105
Split an object into its separate pieces, like Bambu Studio's Split: into='objects' makes one object per piece (each part of a multi-part object becomes an object too), into='parts' keeps one object whose parts are the pieces, so each can get its own filament. Pieces stay where they are; painted colors are kept, modifiers and negative parts go with the piece they overlap.
| Name | Type | Req | Description |
|---|---|---|---|
| into | string | – | – |
| object | string | yes | – |
No output schema declared.
No examples provided.
sync_with_bambu_studio ~73
Re-read the project file after you changed it by hand in Bambu Studio and saved (same file). This also happens automatically on the next command when there are no unsaved changes here; force=True takes the app's version even if there are (they are lost).
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | – |
No output schema declared.
No examples provided.
transform_object ~73
Scale (uniform or per axis) and rotate an object around its center. It stays on the bed.
| Name | Type | Req | Description |
|---|---|---|---|
| object | string | yes | – |
| rotate_x | number | – | – |
| rotate_y | number | – | – |
| rotate_z | number | – | – |
| scale | number | – | – |
| scale_xyz | – | – | – |
No output schema declared.
No examples provided.
use_ams_filaments ~101
Set the project's filament slots from what is loaded in the AMS right now (preset and color), like Bambu Studio's 'sync AMS'. Default: every loaded tray in order (project slot 1 = first loaded tray). ams_slots: pick trays explicitly, e.g. [1, 3] -> project slot 1 = AMS slot 1, project slot 2 = AMS slot 3.
| Name | Type | Req | Description |
|---|---|---|---|
| ams_slots | – | – | – |
No output schema declared.
No examples provided.
How do I install the Bambu Studio (unofficial) MCP server?
Bambu Studio (unofficial) runs locally as a PyPI package, launched with uvx unofficial-bambu-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · unofficial-bambu-mcp
claude mcp add danielefinocchiaro-unofficial-bambu-mcp -- uvx unofficial-bambu-mcp
What is the Bambu Studio (unofficial) MCP server?
Bambu Studio (unofficial) is an MCP server listed in the public MCP registry as io.github.danielefinocchiaro/unofficial-bambu-mcp. Build, edit, slice, check and calibrate Bambu Studio projects; read a Bambu Lab printer's status. This page covers its PyPI package (unofficial-bambu-mcp).
Is the Bambu Studio (unofficial) MCP server safe to use?
Bambu Studio (unofficial) scores 53 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. 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 Bambu Studio (unofficial) MCP server expose?
Bambu Studio (unofficial) exposes 87 tools: bambu_status, list_printers, search_presets, filament_colors, new_project, and 82 more. Their descriptions and schemas cost roughly 10,007 tokens of context every time the server is loaded.
Is the Bambu Studio (unofficial) MCP server still maintained?
Bambu Studio (unofficial) is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Bambu Studio (unofficial) MCP server under?
Bambu Studio (unofficial) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.