orca-slicer-mcp
Allows sending G-code to a Creality printer via SSH and its web UI, including uploading and starting print jobs.
Click on "Deploy 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., "@orca-slicer-mcpSlice model.stl to output.gcode"
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.
orca-slicer-mcp
An MCP server that drives OrcaSlicer headlessly on a private Xvfb
display, so an agent can import a model, slice it, and export G-code without a
physical screen.
It exists because OrcaSlicer has no scripting API for slicing profiles the way
its GUI does. Rather than click buttons by screen coordinate (fragile across
versions and resolutions), this server drives OrcaSlicer through its
single-instance IPC channel: a short-lived orca-slicer <arg> process
forwards its argument over DBus to the already-running GUI. Model paths load
via Plater::load_files; a small source patch adds an
orca-cmd:export:<path> command that slices the current plate and writes the
G-code straight to a file. No coordinate clicking, no file-chooser scripting.
Requirements
System binaries on PATH:
orca-slicer2.4.2, patched (see "OrcaSlicer patch" below)Xvfbopenboxxdotoolscrot
Python deps are declared in pyproject.toml (mcp, Pillow).
uv venv .venv
uv pip install --python .venv/bin/python -e .Related MCP server: Klipper MCP Server
OrcaSlicer patch
The DBus-command tools require a patched OrcaSlicer: patches/orca-mcp.patch
adds one IPC command, orca-cmd:export:<path>, that slices the current plate
and exports the G-code to <path> with no file dialog. It touches four files
(InstanceCheck.{hpp,cpp}, Plater.{hpp,cpp}): a new
EVT_EXPORT_GCODE_OTHER_INSTANCE event, its parsing in
OtherInstanceMessageHandler::handle_message, and Plater::export_gcode_to(),
which reuses the existing slice+export path (priv::export_gcode with
FORCE_EXPORT).
Apply it in the AUR PKGBUILD (portable, survives OrcaSlicer updates): add
orca-mcp.patch to source=()/sha256sums=() and
prepare() {
cd "$srcdir/OrcaSlicer-${pkgver}"
patch -p1 < "$srcdir/orca-mcp.patch"
}then rebuild with makepkg. The patch applies cleanly with patch -p1 against
the v2.4.2 source tree.
Single-instance IPC is only active when app.single_instance is true in
~/.config/OrcaSlicer/OrcaSlicer.conf; start_session sets this automatically
before launching. (The --single-instance CLI flag is not used - it is not
a valid OrcaSlicer 2.4.x option and is rejected by read_cli() before the IPC
code runs.)
Running
.venv/bin/orca-slicer-mcp # stdio MCP serverRegister it with your MCP client, e.g. for Claude Code:
claude mcp add orca-slicer -- /home/USER/forge/orca-slicer-mcp/.venv/bin/orca-slicer-mcpTools
Tool | Purpose |
| Launch Xvfb + openbox + OrcaSlicer; enable single-instance IPC; dismiss first-run/crash dialogs. Call first. |
| Terminate OrcaSlicer, openbox and Xvfb. |
| Report running state and current windows. |
| Return the current screen as a PNG image. |
| Load STL/OBJ/3MF/STEP/AMF/SVG into the running instance via single-instance IPC ( |
| Slice the current plate and export G-code to |
| Convenience: import + export. |
| Ship a local G-code to the Creality printer and start it (see Printing). |
| Low-level primitives for dialogs not yet covered by the high-level tools. |
Printing (Creality K1 Max)
print_gcode(gcode_path, start=True) closes the loop: it takes a G-code file
this server just exported and gets it printing without you walking to the
machine.
The printer's own web UI does expose starting a print, but only as a right-click/tap context-menu item per file — easy to miss and awkward on a phone. This tool drives the exact same two web actions programmatically:
upload —
POST /upload/<name>(multipart, fieldfile), andstart — a WebSocket
seton/wsapiwithopGcodeFile: "printprt:<gcode_dir>/<name>".
It reaches the Creality web UI through the docker container that serves it,
bypassing the public oauth2-proxy gate — the local side only runs scp and
ssh <host>; the HTTP upload and WebSocket start execute on the docker host
(see creality_print_remote.py), the only machine on the printer's LAN.
Configuration (environment variables):
Variable | Default | Meaning |
|
| SSH alias of the host running the Creality docker stack. |
|
| Docker container serving the web UI; talked to directly, bypassing oauth2-proxy. |
|
| Upload directory on the printer, used to build the |
Requires on the docker host: docker, curl, and Python with
websocket-client. Pass start=False to stage a file without printing.
Why each moving part exists (hard-won lessons)
These are baked into session.py; do not "simplify" them away:
A window manager is mandatory. Without one there is no
_NET_ACTIVE_WINDOW; focus and window management silently misbehave.openboxis launched with a bundledopenbox-rc.xmlthat makes every window undecorated and maximized.Commands travel over single-instance IPC, not the CLI action API. A second
orca-slicer <arg>process passes CLI validation (the arg is a plain positional, not an option), reachesinstance_check, and — becauseapp.single_instanceis enabled — forwards the whole command line over DBus to the running instance, then exits.--single-instancemust not be passed: it is not a valid 2.4.x option andread_cli()rejects it beforeinstance_checkruns, so the sender would error out or spawn a second GUI.app.single_instancemust betruebefore launch. It lives nested under the"app"object inOrcaSlicer.conf(not at the top level);start()sets it and OrcaSlicer preserves it across runs.Export completion is detected by the G-code file on disk, not by any GUI signal:
export_gcodepolls until the file stops growing across several samples (so a mid-write stall cannot yield a truncated read).Dialogs block the main window. The first-run SSL-certificate dialog, the update-check dialog, and — after any unclean exit — the crash "Restore" dialog all prevent the main window from being created.
start()interleaves dismissing them with waiting for the main window, in one loop.The main window's title varies ("Unnamed Window", "*Untitled", a project name), so it is detected by size (>=90% of screen width), not by title.
Every
xdotool/scrotcall has a timeout. A single blocked call (e.g. if the X server dies) would otherwise freeze every polling loop.Long-lived processes are owned by the server. They are spawned with
start_new_session=Trueand held by theOrcaSessionobject; launching them from an ephemeral shell that then exits would kill them.
Testing
.venv/bin/python test_e2e.pyRuns the full import -> export against a sample STL on a fresh Xvfb and asserts a non-trivial G-code is produced.
Available Tools
12 toolsclickA
Click at absolute screen coordinates (button 1=left, 3=right).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| button | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose prerequisites, side effects, or system requirements for the click action. Insufficient for a simulation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence that is front-loaded and contains no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists (not shown), which may help, but the description lacks context about coordinate system, bounds, or whether the operation is synchronous. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds meaning by stating coordinates are absolute and mapping button values (1=left, 3=right). However, it omits the default button value and does not explain button 2.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it clicks at absolute screen coordinates, distinguishing it from keyboard and other input tools. It specifies button numbers, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs siblings, but the tool name and description imply it is for mouse clicking. Lacks exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_gcodeA
Slice the current plate and export G-code to an absolute path.
Sends a single orca-cmd:export:<path> command over the single-instance
DBus channel. Inside OrcaSlicer this slices the current plate and writes the
G-code straight to (Plater::export_gcode_to), bypassing the file
dialog entirely. Completion is detected by the G-code file appearing on
disk. Returns a summary parsed from the generated G-code header.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It details internal mechanism (Plater::export_gcode_to, DBus channel), completion detection (file appearance), and return value (parsed header summary). This is fairly transparent, though it omits potential side effects like overwriting existing files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a purpose: action statement, technical mechanism, and outcome. No superfluous content; front-loaded with key verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While an output schema exists and the description mentions return value, the timeout parameter is undocumented. Error conditions or prerequisites are not covered, leaving some gaps for a moderate-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only mentions 'path' implicitly (absolute path) but does not explain the 'timeout' parameter or its default of 180. This leaves significant meaning undocumented beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool slices the current plate and exports G-code to an absolute path, specifying the verb (slice/export) and resource (current plate, G-code). It distinguishes from siblings like print_gcode which prints instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool bypasses the file dialog and sends a DBus command, providing clear context for use. However, it does not explicitly state when not to use or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_modelA
Import a model (STL/OBJ/3MF/STEP/AMF/SVG) into the running instance.
Delivers the file path to the already-running OrcaSlicer over the
single-instance DBus channel (orca-slicer <path> with single-instance
mode enabled in the app config), which routes it to Plater::load_files - no
coordinate clicking. Waits until a top-level window title reflects the
loaded model.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it uses DBus single-instance channel, routes to Plater::load_files, and waits for window title change. It also notes 'no coordinate clicking' to clarify non-interactivity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero waste. First sentence states purpose and formats; second sentence explains detailed behavior. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and an output schema, the description provides sufficient context about the import process, waiting behavior, and file path delivery, making it complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 1 parameter (path) with 0% coverage, so the description must compensate. It mentions 'file path' but does not specify absolute/relative or format constraints, adding limited meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'import' and the resource 'model', listing supported formats (STL/OBJ/3MF/STEP/AMF/SVG). It differentiates from sibling tools like 'process_model' by specifying loading into a running instance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the mechanism (DBus single-instance, no clicking) and implies when to use (to load a model file). However, it does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyA
Send a key or chord in xdotool syntax (e.g. 'ctrl+i', 'Return', 'Escape').
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes full burden. It discloses that the tool expects xdotool syntax and sends a key/chord, which is sufficient for a simple action. No side effects or auth needs are mentioned, but the tool's nature doesn't require extensive disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the action and immediately provides syntax and examples, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no enums, the description is complete. It specifies input format and examples, and the presence of an output schema means return value explanation is not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides 'Keys' with no additional info. The description adds critical meaning by specifying xdotool syntax and providing concrete examples, fully compensating for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Send' and resource 'key or chord', with examples like 'ctrl+i' and 'Return', clearly distinguishing it from siblings like type_text (for text strings) and click (mouse clicks).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states xdotool syntax and gives examples, indicating when to use the tool for key presses or chords. It does not explicitly state when not to use it, but the context of sibling tools implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_gcodeA
Send a local .gcode file to the Creality printer and start printing it.
Reaches the printer's web UI through the docker container on the configured SSH host, bypassing the public oauth2-proxy gate, and drives the same two web actions a human would: upload the file, then start the print.
Set start=False to upload only and leave the file staged on the printer.
Configuration (environment variables): CREALITY_SSH_HOST (default t580), CREALITY_PROXY_CONTAINER (default creality-proxy), CREALITY_GCODE_DIR (default /usr/data/printer_data/gcodes).
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | ||
| gcode_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool bypasses the public oauth2-proxy gate, interacts with the printer's web UI, and performs two web actions (upload and start). It also explains the optional upload-only behavior. While it doesn't elaborate on error handling or printer state, it adequately conveys the non-obvious internal process.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of three sentences. It front-loads the primary purpose, then explains the mechanism, and finishes with the optional parameter and configuration. Each sentence adds unique value without redundancy or extraneous detail, though slightly verbose with configuration details that could be assumed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, mechanism, optional behavior, and configuration variables. It does not detail return values (but output schema exists) or error handling. For a tool that sends a file and starts a print, the description is reasonably complete given the presence of an output schema and the complexity of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description adds substantial meaning to both parameters. It explains that 'gcode_path' is the local file to send (implicitly via 'Send a local .gcode file') and explicitly describes the 'start' parameter (default true to start print, false to only upload). This compensates for the lack of per-parameter documentation in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Send' and the resource 'local .gcode file', with the specific outcome 'start printing it'. This distinguishes it from siblings like export_gcode (exporting) and process_model (processing 3D models), providing unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to send and print a gcode file), includes an important usage variant (set start=False to upload only), and details the underlying mechanism (via docker container, bypassing oauth). It does not explicitly state when not to use or list alternatives, but the context from siblings and the clear purpose make usage guidelines sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
process_modelA
Convenience: import a model then slice + export G-code in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| stl_path | Yes | ||
| gcode_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It describes the sequence but does not disclose side effects like file overwriting or prerequisites (e.g., active session). Basic behavioral cues are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the word 'Convenience', no wasted words. Efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the basic operation but lacks details on prerequisites (session), output (return value), and potential side effects. Given the tool's role in a workflow, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds no explanation about the parameters (stl_path, gcode_path). No constraints, formats, or usage hints are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a convenience function that imports a model, slices, and exports G-code in one call. It uses specific verbs and resources, and distinguishes itself from siblings like import_model and export_gcode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is an alternative to calling import_model and export_gcode separately, but does not explicitly state when to use this tool versus the individual steps. No exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotA
Capture the current OrcaSlicer screen and return it as a PNG image.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It states the tool captures and returns a PNG, but it fails to detail what area is captured (full window, specific region), whether any side effects occur, or if it works in all application states. This is insufficient for a tool with zero annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It efficiently captures the essential purpose and output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and is straightforward, the description is mostly complete. However, it lacks details about the exact screen area captured and any potential size or resolution considerations. The absence of an output schema is not fully compensated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is 100%. The description does not need to add parameter information, but it could have explained any implicit inputs. According to the rubric, zero parameters baseline is 4, and the description meets this standard.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool captures the current screen of OrcaSlicer and returns a PNG image. The verb 'capture' and resource 'OrcaSlicer screen' are specific, and the output format is explicitly defined, distinguishing it from sibling tools like click, export_gcode, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a screenshot is needed, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or constraints. The context is clear but lacks exclusions or when-not-to-use advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_statusA
Report whether a session is running and list its top-level windows.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly states the tool reports status and lists windows, implying a read-only operation, but does not explicitly confirm non-destructiveness or side-effect-free behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words. The purpose is front-loaded: 'Report whether a session is running' immediately conveys the primary function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the two key outputs (session status and window list). With an output schema available, the agent can understand the return format. It lacks details like whether the list is filtered or ordered, but it's sufficient for a simple status tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%. The description adds no parameter information because none is needed. This is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reports session status and lists top-level windows. The verb 'report' combined with the resource 'session' gives a specific, unambiguous purpose. It distinguishes itself from sibling tools like start_session and stop_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While no explicit when-to-use or when-not-to-use guidance is given, the context of sibling tools (start_session, stop_session) implies this is for checking state. The description is clear enough for a zero-parameter tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_sessionA
Start a private Xvfb display with openbox and launch OrcaSlicer on it.
Must be called before any other tool. Dismisses the first-run SSL and update dialogs. Returns a status string.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| height | No | ||
| display | No | :99 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses starting a display, launching an application, dismissing dialogs, and returning a status string. It hints at state creation (must be called first) but lacks details on idempotency or resource cleanup. Overall adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences cover the core action, usage prerequisite, dialog handling, and return value. Every sentence is purposeful with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's role as a session initializer and the presence of an output schema, the description covers key aspects: what it does, when to call it, and what it returns. Lacks mention of environment prerequisites or behavior on repeated calls, but sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no explanation of the parameters (width, height, display), despite 0% schema description coverage. The parameters are self-explanatory, but the tool definition does not help the agent understand how to configure them beyond defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: starting a private Xvfb display with openbox and launching OrcaSlicer. It uses a specific verb-resource combination and distinguishes itself from siblings by indicating it must be called before any other tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the tool must be called before any other tool, providing clear when-to-use guidance. It does not list explicit when-not-to-use scenarios or alternatives, but the context implies it is the initial setup step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_sessionA
Terminate OrcaSlicer, openbox and Xvfb, freeing the display.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the destructive behavior (terminating processes) and what is freed (display). It is clear and sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is front-loaded and gets straight to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple action and the presence of an output schema, the description adequately covers the tool's behavior. It might be improved by mentioning return value handling, but the output schema presumably addresses that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100%. According to the rubric, a baseline of 4 is appropriate. The description adds context about what is terminated but does not need to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool terminates three specific processes (OrcaSlicer, openbox, Xvfb) and frees the display, using a specific verb and resource. This distinguishes it from sibling tools like start_session and session_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to end a session by terminating processes, but it does not explicitly state when to use it vs alternatives or provide any prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textC
Type literal text into the focused widget.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose behaviors like whether it simulates keystrokes, handles special characters, or works only on certain widgets. It omits these details, leaving the agent to assume basic text insertion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with one sentence, but it lacks structure such as parameter listing or usage hints. It is appropriately sized for a simple tool but could be more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description covers the basic action but does not address scenarios like missing focus or handling of newlines. It is adequate but leaves potential questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'text' is self-explanatory from its name, but the description only repeats 'literal text' without adding format constraints or examples. Given zero schema coverage, the description provides minimal added value beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Type literal text') and the target ('focused widget'), making the tool's purpose understandable. However, it could elaborate on what constitutes a 'widget' (e.g., any UI input field) to improve clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'press_key' or 'click'. The description does not mention prerequisites (e.g., widget must be focused) or cases where other tools are more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zoomC
Zoom the 3D view. Positive steps zoom in, negative out, over (x,y).
When x/y are left at -1 the screen centre of the active session is used.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| steps | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses zoom direction and center behavior, but omits side effects, limits, or whether the view is permanently changed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with front-loaded main purpose. Efficient but could be more structured, e.g., listing parameters explicitly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return value not needed. Parameter count is low, but description lacks context on when zoom is appropriate and what 'active session' means, leaving gaps for a new user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description adds meaning: steps direction and default x/y behavior. However, x and y semantics (likely coordinates for zoom center) are vague, and steps lacks scaling context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool zooms the 3D view and explains the direction of steps (positive in, negative out). It distinguishes from sibling tools like click or import_model, but lacks specificity about the 3D context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description only explains default behavior for x/y coordinates, not when to choose zoom over other view-manipulation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
click - First observed
export_gcode - First observed
import_model - First observed
press_key - First observed
print_gcode - First observed
process_model - First observed
screenshot - First observed
session_status - First observed
start_session - First observed
stop_session - First observed
type_text - First observed
zoom
TDQS
Scored across 12 tools
Each tool has a distinct purpose: UI actions (click, press_key, type_text), file operations (export_gcode, import_model, process_model), session management (start/stop_session, session_status), printer control (print_gcode), view manipulation (zoom), and capture (screenshot). No overlapping functionality.
Most tools follow a verb_noun pattern (e.g., import_model, start_session). However, 'screenshot' is a noun, 'zoom' is a single verb, and 'session_status' uses noun_noun, introducing a few inconsistencies.
12 tools cover the core workflow (session lifecycle, model import, slicing, printing, UI interaction) without being excessive. Each tool justifies its existence for automating OrcaSlicer.
The set covers major workflows but lacks direct tools for model editing (e.g., scale, rotate) and printer status. However, UI tools like click and press_key can compensate, and the core slice-and-print path is complete.
Maintenance
Related MCP Connectors
MCP server for Hailuo (MiniMax) AI video generation
MCP server for Qwen Image 3 AI image generation
Cloud Blender for AI agents: scenes, assets, renders, MP4, STL, GLB — over hosted remote MCP.
MCP server for Grok Imagine AI video generation
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables interaction with 3D printer management systems through an MCP server, supporting STL file manipulation, slicing, and control of printers like OctoPrint, Klipper, Duet, and more.62231GPL 2.0
- FlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI assistants to control and monitor Klipper 3D printers via the Moonraker API. It supports comprehensive printer management, including G-code execution, toolchanger operations, and real-time status monitoring.22-
- AlicenseNot gradedqualityAmaintenanceMCP server for generating print-ready 3D models from text descriptions via a multi-agent pipeline, enabling AI assistants to create and optimize STL files.1MIT
- AlicenseAqualityAmaintenanceEnables headless slicing with OrcaSlicer, preset management, G-code analysis, and printer control over LAN for Klipper, OctoPrint, Prusa, Duet, Elegoo, and Bambu printers.15MIT