Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.MaxEllis/orcaslicer-mcp

PYPI · ORCASLICER-MCP

Work a running OrcaSlicer with AI: slice, tune, and understand what each setting costs

Available components

+15 this week 84 Trust /100

Last scanned (20 hours ago)

Scores higher than 87% of PyPI servers

Category IoT and Hardware

Trust breakdown (7 categories)

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 Security100
  • No malware found by supply-chain analysis.Pass
  • 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 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability83
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7568 tokens (~132/item across 57 items; 56 tools + 1 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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage78
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 33% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 57 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
What we tested

Checks we ran (16)

  • Malware scan
  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

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.

  • 5 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 3 Nov 26 0
    • Schema quality: 6694 → 7568 ▼ functional
    • Package version: 0.1.18 → 0.1.19 functional
  • 2 Nov 26 0
    • MCP protocol: Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28. functional
    • Package version: 0.1.17 → 0.1.18 functional
  • 1 Nov 26 0
    • Provenance: unverified → fail ▼ security
  • 31 Oct 26 0
    • Stability: 0.97 → pass security
  • 30 Oct 26 0
    • Provenance: fail → unverified ▼ security
    • Stability: pass → 0.97 functional
  • 29 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 24 Oct 26 0
    • Stability: 0.97 → pass security
    • Security disclosure: unverified → fail ▼ functional
Diagnostics

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 5 Nov 2026 · Analysed pypi/orcaslicer-mcp@0.1.19

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 Known build tool hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 32 packages
Packages resolved 32
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 56 exposed · ~7,537 tokens

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 →

Tool Tokens
add_plate ~140

Add an empty plate to the project, the same way the toolbar's "Add plate" button does. Returns the new plate's 0-based index for move_object_to_plate and select_plate. Use it when parts should print separately: load them, add a plate, move the second part across with move_object_to_plate, then select_plate and slice each one. A plate cannot be added while a slice is running (409) or at the build's plate limit (422).

NameTypeReqDescription
selectboolean–Make the new plate the current one, as the toolbar button does. Pass false to keep working on the plate that is current now.

No output schema declared.

No examples provided.

apply_and_slice ~159

Apply config overrides and then slice in one step, returning {applied, errors, result} with the resulting stats and warnings. The changes are atomic (any invalid key rejects the whole batch) and unsaved, exactly like set_config, so they revert if the preset is reselected. Use this to test the effect of a tweak in a single call. Use set_config then slice_and_wait to keep the steps separate, or compare_settings to try several values of one key.

NameTypeReqDescription
changesobjectyesMap of OrcaSlicer config key to new value to apply before slicing, e.g. {'layer_height': 0.2}. Same format and validation as set_config; discover keys with search_settings or find_config_keys.

No output schema declared.

No examples provided.

arrange_plate ~85

Auto-arrange all objects on the plate (async job; poll get_job_status until idle). With several plates this is OrcaSlicer's "Arrange all": it re-packs the objects of every unlocked plate together and deletes plates left empty at the end, which undoes a one-part-per-plate layout. To shift one object, use transform_object instead.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

auto_orient ~27

Auto-orient all objects for printing (async job; poll get_job_status until idle).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

cancel_slice ~39

Abort a running slice, or unwedge a stale 'slicing' state (e.g. after an object outside the bed). Safe when idle.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

check_placement ~111

Estimate whether every object (plus its skirt/brim ring) fits inside the printable area. Returns per-object fit, expanded first-layer bbox, per-edge clearance (mm), and overflow. APPROXIMATE: uses the object footprint from size+offset, not the sliced toolpath (skirt arcs, half-line-width, travel/wipe excluded); single-instance objects only. At ~mm margins the true verdict needs get_slice_warnings - this is a fast first-pass.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

check_printer_match ~133

Does the active OrcaSlicer profile match the printer it will print on? Compares nozzle size, bed size and height, the highest speeds and accelerations, nozzle and bed temperatures, and firmware retraction against the printer's own Klipper settings. Each check comes back ok, warn or unknown with both values and why it matters; relay `headline` and the warnings. Warnings only: it never changes or blocks anything. Run it before printing with a new or edited profile, or when prints take longer than estimated. Klipper printers only; needs OrcaSlicer running.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

check_profile_physics ~62

Deterministic pre-save gate: fetches the live config, overlays optional proposed `changes`, and runs flow/temperature/geometry/cooling math. RUN THIS BEFORE save_preset. verdict=blocked means DO NOT SAVE.

NameTypeReqDescription
changes–––

No output schema declared.

No examples provided.

compare_settings ~65

For each value of `key`, slice and collect stats/warnings; restore the original when done. Non-destructive: the original value of `key` is put back even on error.

NameTypeReqDescription
extra–––
keystringyes–
valuesarrayyes–

No output schema declared.

No examples provided.

compare_slices ~308

Slice the current plate under several named variants and compare the cost of each. Each variant is {"name": str, "changes": {setting: value}}; changes={} means the current config as-is (a natural baseline row). Applies each variant over the ORIGINAL config (resetting between variants, so they don't stack), slices it, then restores your config exactly as it was - nothing is left changed (slice validity is left false, as after any un-resliced edit). Returns a ready-to-relay `headline` and `table_markdown`, plus structured `variants`. All deltas and percentages are ALREADY computed and rounded against `baseline` (defaults to the changes={} variant, else the first) - relay them as given rather than recomputing. `recommended` names one pick; `recommended_is_dominant` says whether it beats every variant on every axis (time, filament, warnings) or is only the fastest warning-free option amid a genuine trade-off (`tradeoff` then names the frontier). Each variant is a full slice (minutes); capped at 8. Set detail=True only when a per-feature (wall/infill/support) split is wanted - it grows the response ~N x. With more than ~5 variants, lead with the recommendation and the extremes, not all rows.

NameTypeReqDescription
baseline–––
detailboolean––
timeoutinteger––
variantsarrayyes–

No output schema declared.

No examples provided.

consult ~104

Retrieve curated slicing knowledge + saved context notes for a topic, symptom, or intent. ALWAYS call before deriving or changing settings for a user goal. Composes principles per situation, never returns preset bundles. Falls back to find_config_keys/web search if empty. When recommending, present 2-3 concrete options quantified with predicted print time and filament mass from real slice results (slice + status tools) - never adjectives alone.

NameTypeReqDescription
querystringyes–

No output schema declared.

No examples provided.

delete_object ~116

Remove one object from the current plate by id. This is permanent within the session and cannot be undone through the API; the other objects keep their ids. Call list_objects first to get the id. Deleting leaves the last slice invalid, so re-slice afterwards. To drop just one copy made with duplicate_object, pass that copy's id.

NameTypeReqDescription
object_idintegeryesInteger id of the object to remove, taken from the 'id' field of list_objects (not the array index or the file name).

No output schema declared.

No examples provided.

delete_plate ~144

Delete a plate. The objects it held are NOT deleted: OrcaSlicer parks them beside the bed, as the toolbar's delete does, and the reply says how many were moved off-plate (objects_moved_off_plate). Use move_object_to_plate to put them somewhere printable. OrcaSlicer parks them where the next plate appears, so an add_plate straight after a delete picks them back up. The only plate cannot be deleted (422 last_plate). Call list_plates first for the index; this cannot be undone through the API.

NameTypeReqDescription
indexintegeryes0-based plate index from list_plates. Later plates shift down one index.

No output schema declared.

No examples provided.

delete_preset ~47

Delete a USER preset (system presets and the currently-selected one are refused). type = print|filament|printer.

NameTypeReqDescription
namestringyes–
typestringyes–

No output schema declared.

No examples provided.

describe_plate ~224

Machine-readable plate facts from the last slice's G-code, per object, so you can answer orientation and placement questions instead of guessing from Euler angles or a picture: how the part stands (flat / tilted / on an edge or corner, from first-layer contact versus its widest layer), the first-layer footprint as islands, where overhang extrusions concentrate by 10 mm height band, where support stands and where its interface touches the part, and which side the outer-wall seams sit on (checked against seam_position). Each object gets a server-written summary sentence; relay it rather than recomputing. Read-only. Needs a valid slice; returns {"error": "not_sliced"} otherwise. Copies of one object are aggregated (Orca labels every copy 0); footprint islands still show per-copy contact. The parsed result is cached per slice (the G-code itself is still downloaded each call to detect a new slice). All bboxes are [x0, y0, x1, y1] in plate millimetres.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

describe_setting ~137

Authoritative definition of one OrcaSlicer setting: label, tooltip, type, unit, valid range, enum values, and default. Read-only and offline, so it works even when OrcaSlicer is not running. Use it to learn a setting's exact type and allowed values before writing it with set_config or edit_preset. To find candidate keys by keyword first, use search_settings.

NameTypeReqDescription
keystringyesExact OrcaSlicer config key, e.g. 'layer_height' or 'sparse_infill_density'. Find keys with search_settings or find_config_keys. Unknown keys return an error.

No output schema declared.

No examples provided.

diagnose_plate ~102

One-call plate diagnosis: app/slice status, objects on the plate, bed + active skirt/brim/clearance settings, and the last slice's warnings, so you don't have to chain status->objects->config. Start here for 'why won't this slice / fit'. Slice warnings are only as complete as the fork exposes today (see get_slice_warnings). For a 'does it fit the bed' estimate, pair with check_placement.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

duplicate_object ~34

Duplicate an object on the plate by id (adds a copy, offset from the original).

NameTypeReqDescription
object_idintegeryes–

No output schema declared.

No examples provided.

edit_preset ~151

Edit a named preset's settings and persist them: selects it, applies the changes atomically, saves under the same name. Runs the check_profile_physics gate first (F15) and refuses with error=physics_blocked if the changes would INTRODUCE a failing physics check (pre-existing failures do not block unrelated edits). For type='filament', checks that also depend on the currently selected PRINT preset (flow_ceiling, temp_vs_flow) do not block; they come back as cross_layer_warnings, because a filament preset pairs with many print presets.

NameTypeReqDescription
changesobjectyes–
namestringyes–
typestringyes–

No output schema declared.

No examples provided.

find_config_keys ~32

Find config keys containing `substring` (helps discover among the ~600 keys).

NameTypeReqDescription
substringstringyes–

No output schema declared.

No examples provided.

get_config ~26

Read merged config values (optionally filtered to `keys`).

NameTypeReqDescription
keys–––

No output schema declared.

No examples provided.

get_filament_slot_mapping ~254

Show which CANVAS tray each filament would use if the user clicked Send now. The filaments listed are the ones on the plate the next Send would use. Read-only; needs fork v2.4.2-mcp.14 or later. It reads the printer when no slot list is cached, so it can take up to about 18 seconds, and OrcaSlicer's API serves one request at a time meanwhile, so other tools wait. The reply names the plate (0-based, the current plate) and supported (true, or false with a reason). Each filament has its 0-based index, type, name, colour, the tray it maps to (or null), the source of that choice (saved, matched, user, api or none) and any warnings. valid is true when that Send would go through; if not, problems says why (an unmapped filament, a tray that is not ready). Call it after slicing or changing filaments, before telling the user the plate is ready to send. Nothing is sent to the printer. A supported false reply carries a reason to relay, as get_printer_slots does.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_gcode ~20

Retrieve the last successful slice's G-code as text.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_job_status ~67

Whether the plate's background job worker is idle or still running. Read-only. arrange_plate and auto_orient start async jobs; poll this until it reports idle before you read object positions or slice, so you act on the settled layout rather than a mid-move state.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_preset_config ~45

Read the full settings of a named preset without selecting it. type = print|filament|printer.

NameTypeReqDescription
namestringyes–
typestringyes–

No output schema declared.

No examples provided.

get_printer_slots ~258

Read the filament slots (trays) of the connected Elegoo Centauri Carbon 2 with a CANVAS unit: which tray is active, and for each tray its label (A1, A2, ...), status, material, brand and colour. Read-only. Works only for that printer; needs fork v2.4.2-mcp.14 or later. The call asks the printer over the network and can take up to about 18 seconds, and OrcaSlicer's API serves one request at a time while it runs, so other tools wait. Per tray: status is loaded, preloaded (filament waiting at the feeder, not yet pulled in), disconnected or error. ready is true when the tray can be printed from now. unknown_filament is true when the tray reports no filament type or name. Use canvas_id and tray_id from here in set_filament_slot_mapping. When the printer is not supported or not reachable the reply is supported false with a reason (not_elegoo_cc2, no_canvas, unreachable, too_many_clients, registration_refused, timeout, printer_error, firmware_too_old) and a message. Relay the message to the user.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_printer_status ~188

What the 3D printer is doing right now: state (idle, heating, printing, paused, finished, cancelled, error, shutdown, offline), nozzle and bed temperatures with their targets, the current job (file, progress, layer, time elapsed and left, and what the time left is based on), and any problems the printer reports, each in the printer's own words with a plain-English hint for common ones. Relay `headline` as-is. Never invent a cause the printer did not report. Finds the printer from OrcaSlicer's active printer profile (or ORCA_PRINTER_URL), so it needs no extra setup once the printer is connected in OrcaSlicer. Klipper (Moonraker) printers report the most; OctoPrint reports basic status. Read-only: it never sends commands to the printer.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_slice_breakdown ~128

Per-feature breakdown of the last slice + a stateless predicted-vs-observed flow check. Returns per-role time/filament + speed/flow ranges, global time-weighted metric distributions, per-layer aggregates, and a prediction_check flagging where the profile's speed was silently throttled at the flow ceiling ('clamped'). Answers 'which feature is the time hog' directly instead of by trial slicing. Degrades to {"available": false, "reason": ...} on fork builds that don't emit the breakdown, or when there is no valid slice.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_slice_status ~103

State of the current or most recent slice: state (slicing, done, error, or idle), stats (print time and filament use when done), and any warnings or errors. Read-only. Poll this after slice to follow progress and read the result; 'idle' means no slice has run or it was cancelled. For only the pass/fail warnings use get_slice_warnings; for a per-feature time and filament breakdown use get_slice_breakdown.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_slice_warnings ~112

Just the warnings/errors from the last (or current) slice, plus validity: the fast 'did anything go wrong' check and the way to confirm a fix cleared. NOTE: only as complete as the API exposes. On the current fork build this may report valid with an empty warnings list even when the GUI shows a plate-boundary toast - the fork must populate the plater warning list (tracked as the fork batch). Once it does, this reports the real warnings with no change here.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_status ~93

Snapshot of the current OrcaSlicer session: app and project info, the active print/filament/printer presets with which of their keys are modified (dirty), whether the last slice is still valid, and whether a slice is running. Read-only. Call it first to orient before slicing or editing, to see which settings drift from their preset, or to check slice_result_valid before trusting earlier stats.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_objects ~67

List objects in the project: id (stable), name, size_mm, transform (offset/rotation/scale) and, on fork v2.4.2-mcp.13 and later, the 0-based plate each one sits on (-1 when it is off every plate).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_plates ~130

List the plates in the project: each one's 0-based index, name, whether it is the current plate (the one slice, get_gcode, render_plate and get_job_status act on), lock state, build volume and the objects it holds. Also says how many plates the build allows (max) and whether one can be added or deleted right now. Read-only. Plate numbers shown in the OrcaSlicer window are 1-based; every tool here takes the 0-based index from this list. Needs fork v2.4.2-mcp.13 or later.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_presets ~109

List print/filament/printer presets with system/selected/visible flags. F12: by default returns only USER presets plus whatever is currently SELECTED - the built-in system presets are ~400 entries of noise. Pass include_system=True for the full list, and/or type='print'|'filament'|'printer' to restrict to one category. `hidden_system` reports how many system presets were filtered out.

NameTypeReqDescription
include_systemboolean––
type–––

No output schema declared.

No examples provided.

list_print_history ~132

How did recent prints on the printer actually end? For each finished job: result (success, cancelled or error), how long it took against the slicer's estimate, filament used, and for failed or stopped jobs the printer's own reason while its console still holds it. `summary` says how the slicer's time estimates compare with reality once there are a few finished prints. Also copies those jobs into the local outcome store (safe to repeat), so recall_prints can learn from them. Klipper printers only. `limit` is capped at 50.

NameTypeReqDescription
limitinteger––

No output schema declared.

No examples provided.

load_model ~81

Load a model file (path on the OrcaSlicer host) onto the current plate. Accepts .stl/.obj/.3mf, plus .step/.stp on fork v2.3.2-mcp.3+. Large STEP files can take a minute to tessellate; the call waits.

NameTypeReqDescription
pathstringyes–

No output schema declared.

No examples provided.

move_object_to_plate ~218

Move an object onto another plate. Coming from a plate it keeps its position relative to that plate (front-left of plate 1 lands front-left of plate 2); coming from off-plate (parked beside the bed) it lands at the destination's centre. If it then overlaps a part, shift it with transform_object; arrange_plate would re-pack every plate together. list_objects reports each object's plate (-1 when off every plate). Moving leaves both plates' slices invalid, so re-slice. An object already on that plate is left where it is (moved: false); a locked plate at either end refuses the move (plate_locked).

NameTypeReqDescription
instanceinteger–Which copy to move when the object has several (duplicate_object); 0 is the original.
object_idintegeryesInteger id of the object, from the 'id' field of list_objects.
plateintegeryes0-based index of the destination plate, from list_plates or add_plate.

No output schema declared.

No examples provided.

recall_prints ~268

How did past prints of THIS model actually turn out? Matches the current plate by geometry (or by model_name if given / the slicer is offline), returning each past print's result (success/cancelled/error), your recorded verdict (e.g. 'warped'), and the settings it was sliced with. Call this BEFORE slicing and tell the user anything relevant (a past warp, a failed layer height). Each row also carries failure_reason (the printer's own words, when known) and the slicer's estimates (est_time_s, est_filament_g). duration_s is Moonraker's whole job time, including heating up and any pauses, so beside the estimates it overstates an overrun; list_print_history compares the print time (without heating or pauses) with the estimate. filament_g comes from the G-code file's own estimate, because printers don't report grams. Call list_print_history first to pull in recent results. Read-only. Returns available=false and nothing else when no outcome store exists yet. If neither geometry nor name matches, it returns the most recent prints of ANY model with matched_by='recent'; never attribute those to the current model.

NameTypeReqDescription
limitinteger––
model_name–––

No output schema declared.

No examples provided.

remember ~57

Persist a context fact for future sessions. scope: 'machine:<printer>/<filament>', 'user', or 'project:<name>'. Local plain files; user-readable and deletable.

NameTypeReqDescription
notestringyes–
scopestringyes–

No output schema declared.

No examples provided.

rename_preset ~155

Rename a user preset by copying it to new_name, selecting the copy, and deleting the original. Only user presets can be renamed; system presets are read-only. Because it selects the renamed preset, this leaves it active and discards unsaved config overrides, the same as select_preset, and leaves the last slice invalid, so re-slice afterwards.

NameTypeReqDescription
new_namestringyesNew name for the preset. Should not collide with an existing preset of the same type.
old_namestringyesCurrent name of the user preset to rename, as shown by list_presets.
typestringyesPreset group: 'print', 'filament', or 'printer'.

No output schema declared.

No examples provided.

render_plate ~224

Render a PNG picture of the current plate so you can SEE it. view="editor": the models on the bed BEFORE slicing - use to check orientation, plate contact, and first-layer footprint (an Euler triple is near-unreadable; this is the ground truth). view="preview": the sliced toolpaths colored by feature role AFTER a successful slice - support is visibly distinct, so use it to check where support actually went. angle: iso|top|front|left|right|rear|bottom. frame: "plate" zooms out to the whole bed (where the part sits, footprint), "object" zooms in on the model/toolpaths (detail). Defaults to "plate" for the editor view and "object" for the preview view; pass it explicitly when a side view of a small part would otherwise be a speck on a big bed.

NameTypeReqDescription
anglestring––
frame–––
heightinteger––
viewstring––
widthinteger––

No output schema declared.

No examples provided.

save_gcode ~227

Save the last successful slice's G-code and record the slice (model, a fingerprint of the objects' names and sizes, full settings snapshot, and OrcaSlicer's time and filament estimates) in the local outcome store under that filename. When that file is printed, list_print_history (or klipper-mcp's recorder) matches the finished job by filename, so the real result joins back to these settings. Returns the saved path; hand it to klipper-mcp's start_print. Default filename: <object>_<timestamp>.gcode. Never overwrites an existing file: a name collision gets a -2, -3, ... suffix. Writes into a gcode folder under PRINT_OUTCOMES_DIR if set, else under the shared print-outcomes folder (~/projects/_shared/print-outcomes) if it already exists, else under ~/.orcaslicer-mcp; the folder is created if missing. If the store write fails, the file is still saved and outcome_recorded is False.

NameTypeReqDescription
filename–––

No output schema declared.

No examples provided.

save_preset ~123

Save the currently edited settings as a named user preset (create or update, visible in the GUI immediately). type = print|filament|printer. detach=True saves it standalone instead of inheriting the current base preset; use it when creating a filament preset for a DIFFERENT material than the one selected, otherwise the new preset inherits the base's filament_type and temperatures. Run check_profile_physics first; do not save when verdict=blocked.

NameTypeReqDescription
detachboolean––
namestringyes–
typestringyes–

No output schema declared.

No examples provided.

search_settings ~54

Search settings by keyword across key/label/tooltip; returns compact matches (key, label, category, short tooltip), ranked key/label first. Offline.

NameTypeReqDescription
limitinteger––
querystringyes–

No output schema declared.

No examples provided.

select_plate ~129

Make a plate the current one, exactly like clicking it: slice_and_wait, get_gcode, render_plate, get_slice_status and get_job_status then act on that plate. get_slice_status then reports that plate's own result: its stats if it is still sliced, otherwise idle with "plate N is not sliced". Switching plates leaves unsaved config overrides alone; it changes only which plate is sliced. Selecting the plate that is already current is a no-op.

NameTypeReqDescription
indexintegeryes0-based plate index from list_plates (the window shows plates 1-based).

No output schema declared.

No examples provided.

select_preset ~269

Make the named preset the active one for its group (print, filament, or printer). Discards unsaved overrides in EVERY preset group, not just the one being switched: a filament switch also drops unsaved print and printer edits, including ones made by hand in the OrcaSlicer window. That is deliberate (OrcaSlicer consults the other groups when switching, and any unsaved one would open a modal dialog nothing can dismiss remotely), so call save_preset first if any unsaved edit should survive. Newer slicer builds report which groups were affected as 'discarded_changes' in the reply. This also makes it the canonical way to reset dirty config. It leaves the last slice invalid, so re-slice afterwards. Use list_presets for valid names. Because of this, make filament selections and edits before print-group edits (docs/order-of-operations.md).

NameTypeReqDescription
namestringyesExact name of an existing preset in that group, as returned by list_presets (e.g. '0.20mm Standard'). Unknown names are rejected.
typestringyesWhich preset group to switch: 'print' (process/quality), 'filament' (material), or 'printer' (machine).

No output schema declared.

No examples provided.

set_config ~330

Apply config changes to the active project as unsaved overrides, atomically: if any key is invalid the whole batch is rejected and nothing changes. Returns {applied, errors}. Overrides show as modified in get_status, are not written to any preset file, and revert if the preset is reselected; call save_preset to persist them. Each apply invalidates the last slice, so re-slice afterwards. It does not run the physics gate, so for temperature, speed, acceleration, or flow keys run check_profile_physics before trusting the result. To edit a stored preset rather than the live project, use edit_preset. On a multi-filament setup do filament edits before print edits: changing another slot's value means select_preset for that slot, which discards unsaved print overrides (docs/order-of-operations.md).

NameTypeReqDescription
changesobjectyesMap of OrcaSlicer config key to new value, e.g. {'layer_height': 0.2, 'sparse_infill_density': '15%'}. Values must match each setting's type; percent settings take strings like '15%'. Discover valid…

No output schema declared.

No examples provided.

set_filament_slot_mapping ~362

Choose which CANVAS tray each filament of the plate the next Send would use prints from. Returns the same reply as get_filament_slot_mapping, so check valid and problems. Needs fork v2.4.2-mcp.14 or later and an Elegoo Centauri Carbon 2 with a CANVAS. It reads the printer when no slot list is cached, so it can take up to about 18 seconds, and OrcaSlicer's API serves one request at a time meanwhile, so other tools wait. The list REPLACES the whole mapping set through the API: a filament left out gets no tray from the API, and an empty list clears the API choices so Send falls back to the saved choices and automatic matching. Include every filament you want pinned. This starts nothing. OrcaSlicer's own Send dialog opens pre-filled with this mapping and the user still clicks Send. Each tray can serve only one filament (422 duplicate_tray), the tray must be ready (422 tray_not_ready), and the indexes must exist (422 unknown_filament_index, which also covers a project filament that is not on the plate; unknown_tray, slots_unavailable when the printer could not be read; the reply then says why). Malformed lists get 400: each filament at most once, and integers for filament, canvas_id and tray_id. Use get_printer_slots first to pick trays whose material and colour fit.

NameTypeReqDescription
mappingarrayyesOne entry per filament of the plate the next Send uses (the indexes get_filament_slot_mapping lists): {filament: 0-based filament index, canvas_id, tray_id} from get_printer_slots.

No output schema declared.

No examples provided.

set_height_range ~220

Override the layer height over a Z band of one object (e.g. 0 to 5 mm printed at 0.1 mm for finer detail near the base). Passing the same min_z and max_z again updates that band's height; clear=True removes every band on the object. Bands are per-object and invalidate the last slice, so re-slice afterwards. For a single height across the whole object use set_layer_height instead. Get the id from list_objects.

NameTypeReqDescription
clearboolean–If True, remove all height-range overrides on the object and ignore the z and layer_height args.
layer_height––Layer height in mm to use within the band, e.g. 0.1. Required unless clear=True.
max_z––Upper Z bound of the band in mm. Required unless clear=True.
min_z––Lower Z bound of the band in mm (object-relative). Required unless clear=True.
object_idintegeryesInteger id of the target object, from list_objects.

No output schema declared.

No examples provided.

set_layer_height ~78

Variable layer height for one object. mode='adaptive' (quality 0..1, higher = finer detail) generates an adaptive profile; mode='reset' (aliases: 'default', 'none') restores uniform layers.

NameTypeReqDescription
modestringyes–
object_idintegeryes–
qualitynumber––

No output schema declared.

No examples provided.

Install

How do I install the io.github.MaxEllis/orcaslicer-mcp server?

io.github.MaxEllis/orcaslicer-mcp runs locally as a PyPI package, launched with uvx orcaslicer-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 · orcaslicer-mcp

# add to Claude Code
claude mcp add maxellis-orcaslicer-mcp -- uvx orcaslicer-mcp
Common questions

What is the io.github.MaxEllis/orcaslicer-mcp server?

io.github.MaxEllis/orcaslicer-mcp is listed in the public MCP registry as io.github.MaxEllis/orcaslicer-mcp. Work a running OrcaSlicer with AI: slice, tune, and understand what each setting costs. This page covers its PyPI package (orcaslicer-mcp).

Is the io.github.MaxEllis/orcaslicer-mcp server safe to use?

io.github.MaxEllis/orcaslicer-mcp scores 84 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 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 io.github.MaxEllis/orcaslicer-mcp server expose?

io.github.MaxEllis/orcaslicer-mcp exposes 56 tools: get_status, get_config, set_config, slice, get_slice_status, and 51 more. Their descriptions and schemas cost roughly 7,537 tokens of context every time the server is loaded.

Is the io.github.MaxEllis/orcaslicer-mcp server still maintained?

io.github.MaxEllis/orcaslicer-mcp is still listed as active in the MCP registry. We last reached this channel on 5 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 io.github.MaxEllis/orcaslicer-mcp server under?

io.github.MaxEllis/orcaslicer-mcp declares the AGPL-3.0-only licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

What did VerifyMCP test on the io.github.MaxEllis/orcaslicer-mcp server?

VerifyMCP ran 16 checks on io.github.MaxEllis/orcaslicer-mcp, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.