orcaslicer-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ORCA_API_URL | No | URL of the OrcaSlicer MCP build's local API. Set only if you changed the port or if OrcaSlicer runs on another machine with LAN access enabled. | http://127.0.0.1:13130 |
| ORCA_API_TOKEN | Yes | The API token from OrcaSlicer Preferences > Remote API, used to authenticate to the local API. | |
| ORCA_MCP_NOTES_DIR | No | Directory for persistent notes saved with `remember`. Defaults to ~/.orcaslicer-mcp/notes/. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_statusA | App/project/preset status, dirty keys, slice validity, and whether a slice is running. |
| get_configA | Read merged config values (optionally filtered to |
| set_configB | Apply config changes atomically. Returns {applied, errors}. On any invalid key, nothing is applied. |
| sliceA | Start slicing the current plate. Returns started / already_valid / conflict. |
| get_slice_statusA | Current/last slice state, stats, and warnings. |
| get_slice_warningsA | 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. |
| get_slice_breakdownA | 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. [needs fork breakdown build] |
| cancel_sliceA | Abort a running slice, or unwedge a stale 'slicing' state (e.g. after an object outside the bed). Safe when idle. [needs F2 build] |
| slice_and_waitA | Slice (or reuse a valid result) and wait for completion; return final stats + warnings. |
| apply_and_sliceA | Apply config changes, then slice and report the resulting stats/warnings. |
| compare_settingsA | For each value of Non-destructive: the original value of |
| list_objectsA | List objects on the current plate: id (stable), name, size_mm, and transform (offset/rotation/scale). [needs M4b] |
| set_object_configA | Set per-object config overrides on an object by id, e.g. {"wall_loops": 4, "sparse_infill_density": "30%"}. Atomic (nothing applied if any key is invalid). [needs M4c] |
| duplicate_objectA | Duplicate an object on the plate by id (adds a copy, offset from the original). [needs M4b] |
| delete_objectB | Delete an object from the current plate by its id. [needs M4b] |
| transform_objectA | Move/rotate/scale an object by id. translate=[dx,dy,dz] mm (relative), rotate=[rx,ry,rz] degrees (relative), scale=[sx,sy,sz] absolute factor. Provide at least one. [needs M4b] |
| arrange_plateA | Auto-arrange all objects on the plate (async job; poll get_job_status until idle). [needs M4b] |
| auto_orientA | Auto-orient all objects for printing (async job; poll get_job_status until idle). [needs M4b] |
| get_job_statusA | Whether the plate job worker is idle (poll after arrange_plate/auto_orient). [needs M4b] |
| watch_eventsA | Collect live events (slice.*/config.changed/project.opened) over a bounded window. |
| find_config_keysA | Find config keys containing |
| diagnose_plateA | 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. |
| check_placementA | 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. [needs M4b] |
| consultA | 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. |
| check_profile_physicsA | Deterministic pre-save gate: fetches the live config, overlays optional
proposed |
| rememberA | Persist a context fact for future sessions. scope: 'machine:/', 'user', or 'project:'. Local plain files; user-readable and deletable. |
| describe_settingA | Authoritative definition of one OrcaSlicer setting: label, tooltip, type, unit, range, enum values, default. Offline; works even when OrcaSlicer is not running. |
| search_settingsA | Search settings by keyword across key/label/tooltip; returns compact matches (key, label, category, short tooltip), ranked key/label first. Offline. |
| load_modelA | 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. [needs M4a] |
| select_presetA | Select a named preset. type = print|filament|printer. [needs M4a] |
| save_presetA | 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. [needs preset/save] Run check_profile_physics first; do not save when verdict=blocked. |
| list_presetsA | 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. |
| set_layer_heightA | 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. [needs M4c build] |
| set_height_rangeA | Set a per-height-band layer height on an object (e.g. 0-5mm at 0.1mm). Same exact range again = update; clear=True removes all ranges. [needs M4c build] |
| get_preset_configA | Read the full settings of a named preset without selecting it. type = print|filament|printer. [needs preset-CRUD build] |
| delete_presetA | Delete a USER preset (system presets and the currently-selected one are refused). type = print|filament|printer. [needs preset-CRUD build] |
| edit_presetA | Edit a named preset's settings and persist them: selects it, applies the changes atomically, saves under the same name. [needs preset/save build] |
| rename_presetA | Rename a USER preset: save a copy under the new name, select it, delete the old. [needs preset-CRUD build] |
| get_gcodeA | Retrieve the last successful slice's G-code as text. [needs M4a] |
| render_plateA | 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. [needs plate_render capability, fork v2.3.2-mcp.4+] |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| slice-a-model | Guided load -> check -> slice -> read-back workflow for one model file. |
| optimize-print-time | Data-driven print-time reduction from a real slice breakdown, never adjectives alone. |
| edit-preset-safely | Preset change with the physics gate: consult -> set_config -> check_profile_physics -> save_preset. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| knowledge_index_resource | Index of the curated slicing knowledge base shipped with this server; each entry lists its orca://knowledge/{slug} URI. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MaxEllis/orcaslicer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server