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/. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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. |
| cancel_sliceA | Abort a running slice, or unwedge a stale 'slicing' state (e.g. after an object outside the bed). Safe when idle. |
| 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 |
| compare_slicesA | 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 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. |
| list_objectsA | List objects on the current plate: id (stable), name, size_mm, and transform (offset/rotation/scale). |
| 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). |
| duplicate_objectA | Duplicate an object on the plate by id (adds a copy, offset from the original). |
| delete_objectB | Delete an object from the current plate by its id. |
| 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. |
| arrange_plateA | Auto-arrange all objects on the plate (async job; poll get_job_status until idle). |
| auto_orientA | Auto-orient all objects for printing (async job; poll get_job_status until idle). |
| get_job_statusA | Whether the plate job worker is idle (poll after arrange_plate/auto_orient). |
| 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. |
| 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. |
| select_presetC | Select a named preset. type = print|filament|printer. |
| 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. 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. |
| 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. |
| get_preset_configA | Read the full settings of a named preset without selecting it. type = print|filament|printer. |
| delete_presetA | Delete a USER preset (system presets and the currently-selected one are refused). type = print|filament|printer. |
| edit_presetA | 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). |
| rename_presetA | Rename a USER preset: save a copy under the new name, select it, delete the old. |
| get_gcodeA | Retrieve the last successful slice's G-code as text. |
| 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. |
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