High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.
MCP server for OrcaSlicer control
This repo provides an MCP server for a live OrcaSlicer build. An agent can connect to OrcaSlicer, load and arrange models, tune settings, slice, inspect G-code breakdowns, and read plate renders and diagnostics.

Builders who want their agent to control OrcaSlicer, inspect slices, and compare print settings without leaving the slicer.
You can ask an agent to prepare and analyze 3D prints while keeping OrcaSlicer as the source of truth.
What it does
Model and plate control
Loads `.stl`, `.obj`, `.3mf`, and supported `.step`/`.stp` files, then arranges, orients, duplicates, transforms, and deletes objects on the plate.
Live settings editing
Reads and writes OrcaSlicer configuration, including preset management, object overrides, layer height ranges, and key search.
Slicing and comparison
Slices the current plate, waits for completion, returns warnings and G-code, and compares multiple setting variants in one run.
Plate inspection
Returns plate renders as PNGs and textual plate descriptions so an agent can judge placement, seams, support, and first-layer contact.
Settings knowledge and checks
Ships an offline settings reference, search and compare tools, and a deterministic physics check for invalid speed, flow, temperature, and cooling changes.
Memory and print history
Stores notes locally, saves successful slice artifacts, and recalls past print outcomes through the companion print-outcomes store.
How to get it
- 1compare_slices slices the current plate under several named variants and returns one…
Recommended: 0.4mm - fastest with no warnings. variant time filament vs 0.4mm (baseline) 0.3mm 8h 10m 41.0 g +1h 30m (+22%), -7.0 g (-15%) 0.4mm * 6h 40m 48.0 g baseline 0.5mm 5h 20m 53.4 g -1h 20m (-20%), +5.4 g (+11%) 0.6mm 4h 35m 57.1 g -2h 05m (-31%), +9.1 g (+19%) thin-wall warning
- 2The MCP server runs as a local stdio process and opens no connection except to…
uv venv && uv pip install -e ".[dev]" uv run pytest # unit tests against a mock API, plus a guarded live smoke test
README
OrcaSlicer MCP
Let Claude work alongside you in a real, running OrcaSlicer. It loads models, arranges the plate, tunes settings, slices, and reads the result back as numbers you can question: which feature ate the print time, what a setting actually does, whether a profile breaks your printer's physics. Every change lands in the GUI while you watch, so the slicer stays yours and you get better at it as you go.
This package is an MCP server: it bundles no model and talks to nothing but OrcaSlicer, at an address you configure, localhost by default. The model comes from your MCP client. If that client uses a hosted one, your conversation goes there as any chat does; your models, profiles, and gcode stay on the machine running the slicer. Point the client at a local model and nothing leaves at all.
What it can do
Knowing what the settings mean
An offline settings reference ships with the package, carrying the authoritative label, tooltip, type, range, enum, and default for each key, so describe_setting, search_settings, and compare_settings answer from OrcaSlicer's own source instead of guessing. consult composes curated slicing knowledge and your saved notes by topic, symptom, or goal.
check_profile_physics is a deterministic gate. It overlays proposed changes on the live config, runs flow, temperature, geometry, and cooling math, then returns ok, warnings, or blocked. Accelerations your printer cannot reach and speeds past the flow ceiling get caught before they reach a print.
Settings
Read and write any of roughly 800 OrcaSlicer settings on the live config, for the whole plate or scoped narrower: get_config, set_config, find_config_keys, set_layer_height, set_height_range for a band of layers, and set_object_config for one object's overrides.
Presets
list_presets, select_preset, get_preset_config, edit_preset, save_preset, rename_preset, delete_preset.
Slicing, and reading the result back
slice, slice_and_wait, apply_and_slice, cancel_slice, get_slice_status, get_slice_warnings, get_gcode.
get_slice_breakdown returns per-feature time, filament, and flow. OrcaSlicer shows the same information in the legend beside its preview, sized for a screen; this returns it as numbers an assistant can compare and act on:
role time share filament mean flow
inner_wall 5m 41s 30.8% 6.43 g 16.0 mm3/s
outer_wall 3m 19s 18.0% 3.20 g 13.6 mm3/s
sparse_infill 3m 07s 17.0% 3.57 g 17.0 mm3/s
internal_solid_infill 2m 01s 11.0% 1.72 g 11.8 mm3/s
bridge 52s 4.7% 0.26 g 4.4 mm3/s
support_interface 36s 3.2% 0.52 g 12.3 mm3/s
overhang_perimeter 28s 2.5% 0.13 g 3.7 mm3/s
internal_bridge 21s 1.9% 0.45 g 19.9 mm3/s
top_surface 19s 1.7% 0.29 g 12.5 mm3/s
brim 12s 1.1% 0.21 g 14.7 mm3/s
bottom_surface 7s 0.7% 0.10 g 11.8 mm3/s
18m 24s 16.89 g
It answers which feature is eating the time without slicing repeatedly to find out. A prediction_check rides along and flags any role where the profile's requested speed got throttled at the flow ceiling.
compare_slices slices the current plate under several named variants and returns one comparison, so "what does layer height actually cost me?" is a single question rather than four manual slices. It applies each variant over your original config, restores it when done, and hands back a verdict plus a table with every delta already worked out:
Recommended: 0.4mm - fastest with no warnings.
variant time filament vs 0.4mm (baseline)
0.3mm 8h 10m 41.0 g +1h 30m (+22%), -7.0 g (-15%)
0.4mm * 6h 40m 48.0 g baseline
0.5mm 5h 20m 53.4 g -1h 20m (-20%), +5.4 g (+11%)
0.6mm 4h 35m 57.1 g -2h 05m (-31%), +9.1 g (+19%) thin-wall warning
It only crowns a winner when one variant genuinely beats the rest on time, filament, and warnings; when they trade off, it names the fastest, the lightest, and where the warnings landed, and leaves the choice in front of you. Pass detail=True for the per-feature split of each variant.
Models and the plate
load_model (.stl, .obj, .3mf, plus .step and .stp on fork v2.3.2-mcp.3 and later), list_objects with each object's world-space bounding box and an on_plate flag, transform_object, duplicate_object, delete_object, arrange_plate, auto_orient, check_placement, diagnose_plate, get_job_status.
Plate renders
render_plate hands back a PNG, so the assistant can look instead of inferring from coordinates. A rotation reads instantly as a picture and barely at all as three Euler angles. Seven camera angles cover iso, top, front, left, right, rear, and bottom. Use frame="plate" to stand back for the whole bed, or frame="object" to lean in on the part. Requires fork v2.3.2-mcp.4 or later.
view="editor" | view="preview" |
|---|---|
![]() | ![]() |
| Your models on the bed. Answers orientation, plate contact, and first-layer footprint. | Sliced toolpaths coloured by feature role, so support placement is plain to see. |
describe_plate answers the same questions as numbers and one sentence per object, computed from the sliced G-code: how the part stands (flat, tilted, or on an edge or corner, from first-layer contact against its widest layer), the first-layer footprint as islands, where overhang extrusions concentrate by height band, where support stands and where it touches the part, and which side the seams sit on, checked against seam_position. It exists because an assistant reads a sentence more reliably than a picture. Copies of an object are aggregated; the islands still show each copy's contact patch. On a plate of three tilted connector copies it reads: "Body4.stl (3 copies) stands on an edge or corner: first-layer contact is 5% of its widest layer, in 3 islands of about 50 mm2 each. Overhang extrusions concentrate at Z 0 to 10 mm. Support is present from Z 0.4 to 56.8 mm, standing in 3 places and touching the part in 7 zones. Seams align on the +Y side (91%), matching seam_position=back."
Live state and memory
get_status and watch_events report what the slicer is doing now. remember persists machine, user, and project facts for later sessions, as plain local files in ~/.orcaslicer-mcp/notes/, relocatable with ORCA_MCP_NOTES_DIR.
Learning from real prints
save_gcode saves the last successful slice's G-code and records the model, geometry, and full settings snapshot that produced it. Set PRINT_OUTCOMES_DIR to say exactly where; otherwise it writes into the shared print-outcomes folder (~/projects/_shared/print-outcomes/) if that folder already exists on this machine, and into ~/.orcaslicer-mcp/ (the same folder remember uses) if it does not. recall_prints reads the shared folder before you slice, so the assistant can say how past prints of this model actually went: success, cancelled, or the verdict you gave it, and the settings used.
Recording and recall both depend on a companion service, the klipper-mcp server, whose klipper-mcp-capture process writes the real print result into the same store once your printer finishes the job, and whose start_print tool uploads the file save_gcode saved under the same filename. Without that companion, save_gcode still writes the G-code file (its folder is created on first use even so) but records nothing, and recall_prints returns available: false and does nothing else. Neither tool makes the server contact you on its own; the assistant only sees new outcomes when it calls recall_prints again in a later session.
What you need
Stock OrcaSlicer ships without a control API, so a matching build does that half of the job.
- The OrcaSlicer MCP build. OrcaSlicer 2.3.2 with an embedded local API, token-authenticated and bound to localhost until you say otherwise. Get it from the releases page. If no binary is up for your platform yet, build the
remote-apibranch from source. - This package (
orcaslicer-mcp). The MCP server that connects your AI client to that build.
Updating: take new builds from the releases page, never from inside the app. The in-app updater offers stock OrcaSlicer, which drops the control API. Builds mcp.2 and later turn that updater off for you. On an older build, click Skip this Version if a "new version available" prompt appears.
Quickstart
Install uv first, because it provides the uvx command that runs the server. One line does it: curl -LsSf https://astral.sh/uv/install.sh | sh on macOS and Linux, or irm https://astral.sh/uv/install.ps1 | iex in PowerShell on Windows.
-
Install the OrcaSlicer MCP build, launch it, and finish the one-time setup by picking your printer. A fresh install may show a “Bambu Network Plug-in Required” dialog. Click Skip for Now, since that plug-in only serves Bambu cloud printing. The control API starts once setup is finished.
-
Open Preferences (Ctrl+P), go to Remote API, and tick Enable Remote API. Copy the token shown on that page. Access stays localhost-only unless you also switch on "Allow LAN access".
-
Connect your MCP client.
Claude Desktop: download
orcaslicer-mcp-<version>.mcpbfrom the releases page and open the file. Claude Desktop offers to install it. Open the extension's settings afterwards, paste the token from step 2, and enable it.Ignore any guide that tells you to hand-edit
claude_desktop_config.json. Current Claude Desktop builds rewrite that file themselves and drop addedmcpServersentries, so the edit will not stick. The extension leaves the file alone and findsuvxby itself.Claude Code and other MCP clients: add the server to your client's MCP config. For Claude Code that means a project
.mcp.json:{ "mcpServers": { "orcaslicer": { "command": "uvx", "args": ["orcaslicer-mcp"], "env": { "ORCA_API_TOKEN": "<token from Preferences>" } } } }ORCA_API_URLdefaults tohttp://127.0.0.1:13130. Set it only if you changed the port, or if OrcaSlicer runs on another machine with LAN access enabled there.macOS note for GUI clients other than Claude Desktop: apps launched from the Dock do not inherit your terminal's PATH, so
"command": "uvx"can fail silently. Runwhich uvxin Terminal, then paste the full path it prints into"command". It is usually~/.local/bin/uvx. -
Restart your client and ask: "Load benchy.stl, slice it with the current profile, and tell me the print time."
Security
- The control API binds 127.0.0.1 only by default. LAN access is an explicit opt-in in Preferences.
- Every request must carry the API token. OrcaSlicer generates it on first run and can regenerate it at any time.
- The MCP server runs as a local stdio process and opens no connection except to OrcaSlicer. No telemetry.
Development
uv venv && uv pip install -e ".[dev]"
uv run pytest # unit tests against a mock API, plus a guarded live smoke test
The live smoke test skips itself unless ORCA_API_URL and ORCA_API_TOKEN point at a running OrcaSlicer MCP build.
Protocol notes, design specs, and verification results live in docs/.
Privacy policy
The server talks to OrcaSlicer's local API at the address you configure, localhost by default, and to nothing else. It has no backend, so there is no service of ours for anything to reach. What leaves your machine is whatever your MCP client sends its model: the conversation, plus any settings or file contents you or the assistant put into it. Their terms govern that traffic, and it is the same traffic any other use of that client produces. A local model removes it entirely.
- Data collection: none. The server collects nothing about you or your usage.
- Usage and storage: models, settings, and gcode stay on the computer running OrcaSlicer, held in memory only for the duration of each request. The API token authenticates the server to OrcaSlicer, and your MCP client stores it. Claude Desktop keeps extension settings in the operating system's credential store.
- Third-party sharing: none by this server, which has no analytics and no backend. Traffic between your client and its model provider sits outside this project and falls under their policies.
- Data retention: the only data written to disk is notes you save yourself with
remember, stored as plain files under~/.orcaslicer-mcp/notes/, and the G-code plus slice records thatsave_gcodewrites: under~/projects/_shared/print-outcomes/when that shared folder already exists, otherwise under~/.orcaslicer-mcp/(either relocatable withPRINT_OUTCOMES_DIR), read back byrecall_printsand joined with real print results by the separate klipper-mcp project. Read or delete either folder whenever you like. Delete them and nothing remains. - Contact: questions and concerns go in an issue.
Status
Early public release, soft launch. The server carries 183 unit tests and gets exercised on real print jobs. Prebuilt OrcaSlicer MCP builds cover Windows, macOS, and Linux on the releases page. Issues and reports are welcome.
Support
The project is free and stays that way. If it saves you time and you feel like saying thanks, you can buy me a coffee.
License
AGPL-3.0, matching OrcaSlicer, from whose source the bundled settings schema derives. See LICENSE.
Files in the repo
- .github
- docs
- mcpb
- scripts
- src
- tests
- .dockerignore
- .gitignore
- CHANGELOG.md
- Dockerfile
- glama.json
- lhm.plugin.json
- LICENSE
- pyproject.toml
- README.md
- server.json
- uv.lock
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More connectors

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code
Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.
Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.
Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.
20 MB lightweight cross-platform database client for 90+ databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具,支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90+ 数据库,提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。

