OrcaSlicer MCP
Allows control of Bambu Lab printers (P1, X1, A1, H2) in LAN mode, including printer status, webcam snapshot, file management, upload and print commands.
Allows control of Elegoo Centauri Carbon printers, verified on live hardware, with printer status, file upload, and print commands.
Allows control of any 3D printer running OctoPrint, including printer status, webcam snapshot, file management, upload, and print control (pause/resume/stop).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OrcaSlicer MCPSlice this STL with my draft profile and tell me the print time"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OrcaSlicer MCP
An MCP server that gives Claude (or any MCP client) the full FDM pipeline: slice models headlessly with OrcaSlicer, manage presets, analyze G-code, and control your printer over the local network — Klipper, OctoPrint, Prusa, Duet, Elegoo, or Bambu.
Ask your assistant to "slice this STL with my draft profile and tell me the print time" or "check on the print and show me the camera" — and it can.
Tools
Tool | What it does |
| List machine/process/filament presets (system + user), with search |
| Read a preset with its full inheritance chain resolved |
| Edit a user preset (system presets are read-only) |
| Read what's open in the OrcaSlicer GUI — file + chosen presets/settings |
| STL/3MF/STEP → G-code via the OrcaSlicer CLI; presets default to the open GUI project; returns time/filament/temp stats |
| Parse Orca G-code: time, filament, layers, and the actual commanded temps (M109/M190) |
| What printer we can talk to and what's still needed — run this first |
| Point the server at a printer, verify it answers, save it |
| Live normalized state (idle/heating/printing/paused/error), temps, layer progress |
| Webcam still — check first-layer adhesion remotely |
| Model, firmware, mainboard id |
| List files on the printer (where the firmware allows it) |
| Upload G-code (does not start printing) |
| Start a print — checks the printer is idle first, then verifies the job actually started |
| Pause / resume / stop |
Related MCP server: 3D Printer MCP Server
Printer support
Slicing works for every printer OrcaSlicer supports. Printer control speaks these protocols:
Type | Printers | Needs | Verified |
| Klipper — Voron, RatRig, Sovol, Creality K1, Neptune 4… | host, api_key (only if Moonraker requires one) | docs + mock tests |
| Anything behind OctoPrint (most Marlin printers) | host, api_key (Settings → API) | docs + mock tests |
| Prusa MK4 / MK3.9 / XL / MINI / CORE One | host, password (Settings → Network), user | docs + mock tests |
| Duet 2/3 (RepRapFirmware) | host, password if set | docs + mock tests |
| Elegoo Centauri Carbon | host | live hardware |
| Bambu Lab P1/X1/A1/H2, LAN mode — experimental | host, serial, access_code, | docs only |
You probably don't need to configure anything. If you already set up
network printing in OrcaSlicer, the server reads the printer's address and
protocol from your machine preset (print_host / host_type). Otherwise ask
your assistant to run printer_setup — it scans, reports what it finds, and
tells the assistant to ask you which printer you own rather than guessing.
Honest scope: only the Elegoo path has been exercised on real hardware by this project. The rest were built against each protocol's official docs and source (and fact-checked against them), with mock-transport tests asserting the parts that can bite — including that upload never starts a print (asserted for Moonraker, OctoPrint and PrusaLink, whose APIs have an auto-start flag to suppress; Duet, Elegoo and Bambu have no such flag — starting is a separate call by construction). Reports from real machines are welcome.
Adding a protocol is one small class in backends.py.
Setup
Requirements: Python 3.10+, OrcaSlicer (tested with 2.4.1), and — for printer control — a supported printer on your LAN.
git clone https://github.com/ShreddyKrueger75/orcaslicer-mcp
cd orcaslicer-mcp
uv venv --python 3.11 && uv pip install -e .
claude mcp add orcaslicer -- "$(pwd)/.venv/bin/python" "$(pwd)/server.py"Configuration is optional — sensible defaults are detected per platform:
Env var | Default |
| the standard OrcaSlicer install path for your OS |
| OrcaSlicer's config dir (presets) for your OS |
| read from your OrcaSlicer machine preset's |
| the |
| per-protocol; also readable from the preset or |
| OctoPrint webcam URL (default |
|
|
|
|
Safety model
This server can heat hardware and start multi-day prints, so the dangerous paths are guarded:
Plate type is always pinned. The Orca CLI silently defaults to Cool Plate (45 °C bed) — enough to detach a big part and wreck a hotend (ask us how we know). Every slice sets
curr_bed_typeexplicitly, from the caller, the open GUI project, orDEFAULT_BED_TYPE.Stats report what the machine will do, not what the slicer intended: bed/nozzle temps are parsed from the
M190/M109commands in the G-code.start_printverifies. Some firmwares silently drop start commands sent while busy; the tool refuses to fire unless the printer is idle, then polls until the job demonstrably starts (or reports the error code if it doesn't).Upload never prints. Every backend suppresses its protocol's start-on-upload flag, with tests per protocol that has one.
Filenames are data, never syntax. A name reaches firmware inside a G-code argument (Duet:
M32 "name") and inside URLs;;or"would let a crafted name append arbitrary G-code (M109 S300) or escape the upload directory. Names are validated before they leave the server.No guessing which printer. If several printers are configured and nothing says which you mean, the server asks instead of picking; an unknown
host=is refused rather than driven with another printer's protocol and credentials.Bed type is whitelisted against OrcaSlicer's own
BedTypeenum (all 7 plates, Supertack included). An unrecognized name would silently become Cool Plate;slice_modelrejects invalid values instead.Plate-clear gate. Starting a new job while the previous one is COMPLETED/STOPPED (old part likely still on the plate) requires an explicit
plate_cleared=Trueafter the user confirms — otherwise the toolhead can crash into the finished part. Concurrentstart_printcalls are locked out.resumeonly resumes paused prints — never a stopped/errored job where the nozzle may be sitting in a failure.Preset edits can't become code.
update_profilerefuses thepost_processkey (it executes shell commands at slice time).Your GUI choices win. If a project is open in OrcaSlicer, unset slicing parameters come from it rather than from the model's guesses.
start_print's description instructs clients to confirm with the user — it heats hardware.
Scope note: this is a local, single-user tool. File-path parameters
(model_path, output_dir, gcode_path) operate on your filesystem with
your permissions, like any local CLI.
How headless slicing works (the non-obvious part)
OrcaSlicer user presets are inheritance deltas (inherits: "<parent>", no
type field) and the CLI rejects them as-is. The server resolves the full
inheritance chain into flat JSON configs, tags them with type, and satisfies
the CLI's compatibility check — which compares the process/filament
compatible_printers list against the machine preset's inherits value —
by pinning both to the machine's nearest system ancestor. Verified against the
OrcaSlicer 2.4.1 source (src/OrcaSlicer.cpp, ~line 2560).
Known limits
Centauri Carbon CC1 firmware cannot list/delete files or report disk space over SDCP (CC2 can). Uploads to a full or busy printer fail with HTTP 500 — manage storage on the touchscreen.
OctoPrint and PrusaLink don't report layer counts over their APIs; Duet has no standard camera endpoint. Tools say so instead of failing obscurely.
The plate-clear gate relies on the printer reporting a finished job. Duet (
job.lastFileName) and OctoPrint (100% progress) are inferred; a cancelled OctoPrint job is indistinguishable from idle over its API, so that one case won't trip the gate.On Windows the saved config can't be locked to your user with
chmod; it inherits the folder's ACL. PreferPRINTER_*env vars if that matters.Cloud host types (PrusaConnect, CrealityPrint, Obico, SimplyPrint, 3DPrinterOS) aren't supported — point the server at the printer's own IP.
Editing profiles while the OrcaSlicer GUI is open may be overwritten when the GUI exits.
Slicing timeout is 600 s per call; the CLI reports no progress.
Credits
Elegoo control is pycentauri (Apache-2.0); optional Bambu control is bambulabs-api (MIT); other protocols are spoken directly over HTTP with httpx (BSD-3-Clause). Slicing is OrcaSlicer's own CLI. This project is MIT licensed.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/ShreddyKrueger75/claude-orcaslicer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server