CAD to Print MCP
Allows inspecting FreeCAD .FCStd documents and exporting named solids to STL for downstream slicing and printing workflows.
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., "@CAD to Print MCPexport the bracket from my FreeCAD doc, slice it, then upload the G-code"
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.
CAD to Print MCP
A local MCP server that lets Codex and other MCP clients move a design through FreeCAD → STL → OrcaSlicer configuration → G-code → Moonraker printer. It uses stock OrcaSlicer's command-line interface and keeps every exported STL, derived preset, slice manifest, and G-code in a separate output location.
What it does
Inspect a FreeCAD
.FCStddocument and export a named solid to STL.Find, inspect, and derive OrcaSlicer machine, process, and filament presets. Derived presets are copies; originals stay untouched.
Preview and run a slice with specified presets and settings. Each run records input hashes, command arguments, effective settings, logs, and output artifacts.
Read G-code metadata, query a Moonraker printer, upload G-code, and start an uploaded print as a distinct step.
It does not edit the open OrcaSlicer GUI, paint supports, create CAD geometry from a text description, or control printers other than Moonraker yet. Agents can use their own CAD tools to create .FCStd files before using this server. OrcaSlicer itself is not bundled.
Related MCP server: FreeCAD Robust MCP Server
Requirements
Python 3.10 or newer
FreeCAD with
FreeCADCmdfor.FCStdinspection/exportOrcaSlicer with command-line mode
Optional: a printer running Moonraker for status, upload, and print start
The server runs locally over MCP stdio. It does not open a listening port.
Install
git clone https://github.com/Kayrim/cad-to-print-mcp.git
cd cad-to-print-mcp
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .On macOS/Linux, use python3 -m venv .venv and .venv/bin/python -m pip install -e ..
Set these environment variables in your MCP client or shell:
Variable | Purpose |
| Path to |
| Path to |
| Optional user profile directory override |
| Optional output directory; defaults to |
| Moonraker URL, such as |
| Optional Moonraker API key; never put it in a repository |
Connect Codex
Use the Python executable from your new virtual environment. On Windows:
codex mcp add cad-to-print -- "C:\absolute\path\to\cad-to-print-mcp\.venv\Scripts\python.exe" -m cad_to_print_mcp.server
codex mcp listFor other MCP clients, configure a local stdio server with the same executable and -m cad_to_print_mcp.server arguments. Restart the client after adding it.
Example agent workflow
check_setupandinspect_freecad_documentto choose the printable solid.export_freecad_stlto create a mesh from the chosen FreeCAD object.find_profilesfor compatible machine, process, and filament presets.read_profileandderive_profilecan make a variant with support, infill, speed, or other settings.preview_slice, thenrun_slice. Or callprepare_print_jobto export the selected FreeCAD object and slice it in one step. Review the manifest, logs, and generated G-code. The preset files should match the actual printer, nozzle, material, and firmware.get_printer_status, thenupload_print_file. Uploading alone never starts a print.When ready, call
start_uploaded_printusing the returned upload ID. It refuses to start while the printer reports an active or paused job.
The run_slice tool accepts a .3mf with embedded settings or an STL/OBJ/STEP with all three preset JSON files. Common overrides such as layer_height, enable_support, support_type, sparse_infill_density, and wall_loops are directly validated. For other settings, derive a copy of a bundled preset and pass that copy to run_slice. OrcaSlicer validates the resulting configuration during slicing.
Safety and privacy
The server never runs shell commands assembled from tool inputs. It invokes FreeCAD and OrcaSlicer with argument arrays.
It never edits original CAD files or OrcaSlicer presets.
derive_profilerefuses script, G-code, print host, and credential fields.read_profileredacts credentials.upload_print_fileandstart_uploaded_printare separate calls. Print start checks that Klipper is ready and no job is active.Generated files and manifests can contain model names and local paths. The
outputs/directory is Git-ignored.Review G-code and printer preparation before starting a physical print. The server cannot check bed clearance, filament loading, or hardware condition.
Development
.\.venv\Scripts\python.exe -m unittest discover -s tests -vTests use local fixtures and mocked process/printer calls. A live smoke test should be run with your own FreeCAD, OrcaSlicer, presets, and Moonraker setup before printing. See docs/architecture.md for the adapter boundaries and roadmap.
License
MIT. This project is independent of FreeCAD, OrcaSlicer, and Moonraker.
Available Tools
15 toolscheck_setupB
Check local FreeCAD, OrcaSlicer and profile locations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does not state that the tool is read-only/non-mutating, whether it touches the filesystem or launches anything, or what happens when an installation is missing — all relevant for a local environment check.
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 short sentence with no filler, and the key scope (what is checked) is front-loaded. Nothing is wasted or redundant.
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?
With an output schema present, return-value detail is not required, and a zero-parameter tool needs little argument prose. However, absent annotations the description should still convey that this is a safe, non-mutating check and how failures surface; that gap keeps it at minimum-viable.
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 takes zero parameters, so there are no argument semantics to explain; the schema is empty and fully self-describing. Baseline 4 applies.
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 gives a concrete verb ('Check') and names the three specific resources it inspects (local FreeCAD, OrcaSlicer, and profile locations), so an agent knows it is an environment/path validation tool. It does not, however, differentiate itself from sibling discovery tools such as find_profiles or list_user_profiles, which also touch profile locations.
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?
There is no explicit guidance on when to call this versus alternatives, nor any stated prerequisites or follow-up actions. A reader can infer it is a preflight/diagnostic step, but the description never says so or routes to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
derive_profileB
Create an isolated copy with new settings; original OrcaSlicer preset is unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| changes | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load. It does disclose the single most important behavioral trait for a mutation tool: the original preset is left unchanged, so the operation is effectively non-destructive. However, it says nothing about permissions/auth requirements, where the derived copy is written or named, or what happens on a path conflict.
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 tight sentence with the create semantics front-loaded and the non-destructive guarantee immediately after. Nothing is wasted, though the brevity borders on under-specification rather than deliberate concision.
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?
An output schema exists, so return values need not be described, and the key safety trait is covered. But for a two-parameter mutation tool with a nested 'changes' object and zero annotation support, the absence of any detail on parameter format or the destination of the derived profile leaves meaningful gaps.
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% for both parameters. 'With new settings' loosely maps to the 'changes' object, but the description never says it is a key/value override bag, and 'path' is entirely unexplained (source preset vs. destination for the copy). A nested-object parameter at 0% coverage needs much more compensation than this.
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?
States a specific verb ('Create an isolated copy') and the resource it operates on ('OrcaSlicer preset'), so the agent knows this produces a derived, non-mutating profile artifact. It does not distinguish itself from siblings like read_profile or list_user_profiles, which the agent must infer from names alone.
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?
There is no explicit when-to-use guidance and no named alternative. The agent must infer that this is the tool to reach for when it wants a modified profile without touching the original, rather than any of the read/list profile siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_freecad_stlB
Export one selected FreeCAD object to STL without altering the CAD document.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| object_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the CAD document is not altered, which is important safety context, but it omits file-write behavior, overwrite semantics, required document state, and any permission or selection prerequisites.
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 definition is a single front-loaded sentence with no filler or repetition. Every phrase contributes to purpose or scope.
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?
Although an output schema exists, so return values need not be explained, the description is thin for a tool with no annotations and 0% schema coverage. It leaves both required parameters and the file-writing behavior largely undocumented.
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 the description must explain the parameters, but it does not. It hints that object_name refers to a selected FreeCAD object, but the required path parameter is never described in terms of format, destination, or overwrite behavior.
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 states a specific verb and resource: export a FreeCAD object to STL. It also scopes the operation to one selected object and clarifies non-mutation of the CAD document. An agent can easily distinguish this from inspection, slicing, or setup siblings.
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?
It implies the tool is used to create an STL file, but gives no explicit when-to-use guidance, prerequisites, or alternatives. There is no mention of when to choose export_freecad_stl versus inspect_freecad_document, preview_slice, or run_slice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_profilesB
Find bundled or user OrcaSlicer machine, process, or filament presets by name.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| limit | No | ||
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no matching semantics (substring vs exact, case sensitivity), no statement that it is read-only, no paging behavior. The output schema exists but covers only returns, not call 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 zero filler, front-loaded with the verb and resource and immediately bounded by scope. Appropriate size for a three-parameter lookup tool.
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?
An output schema means return values need not be explained, and the description covers the core kind/query concepts. But with no annotations and 0% schema description coverage, matching behavior and the limit parameter are left undocumented, so an agent lacks enough to invoke it precisely.
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%, so the description must compensate. It does explain two parameters implicitly: 'machine, process, or filament' enumerates the kind values and 'by name' describes query. It says nothing about the limit parameter, leaving a third of the schema undocumented.
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?
States a specific verb (find) and resource (profiles) and scopes it to bundled or user OrcaSlicer machine/process/filament presets matched by name. This is more precise than a generic 'find', though it never explicitly contrasts itself with the sibling list_user_profiles or read_profile.
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 phrase 'by name' implies a name-based search, hinting that this is the lookup path versus listing siblings like list_user_profiles. However, no when-to-use condition, prerequisite, or alternative tool is named, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_printer_statusA
Read Moonraker connection and current print state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Read' does imply a non-mutating operation and the scope of returned state is named, but there is nothing about auth, rate limits, or whether this polls a live connection.
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 short sentence with no filler, and the two pieces of returned state are front-loaded. Nothing in it is redundant against the name or schema.
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 zero-argument status read with a dedicated output schema, the description is nearly sufficient — the return shape is documented elsewhere and no parameters need explaining. The only shortfall is the missing routing against 'check_setup' and any hint about freshness or connection failures.
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 takes zero parameters, so there are no parameter semantics to explain; the baseline for a parameterless tool is 4. The schema's empty properties object is consistent with the description.
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 a specific verb ('Read') with two concrete resources ('Moonraker connection' and 'current print state'), so an agent knows exactly what data comes back. It does not, however, differentiate itself from the sibling 'check_setup', which plausibly overlaps with connection-state checking.
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?
There is no explicit when-to-use or when-not-to-use guidance, and no alternative is named. The overlap risk with 'check_setup' is left for the agent to resolve on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_freecad_documentB
List solid objects, dimensions and validity from a FreeCAD .FCStd document.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies read-only inspection and it names returned data, but it does not state that the document is not modified, error behavior, or file access requirements. This is minimal but adequate for an inspect operation.
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 front-loaded sentence with no wasted words. It delivers the tool's purpose and scope immediately.
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?
An output schema exists, so return values need not be explained in the description. The description covers what is listed and the file type to inspect; only path parameter semantics and explicit read-only confirmation are missing for this low-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 coverage is 0% for the single required path parameter, and the schema only labels it 'Path' with no description. The description adds that the path refers to a FreeCAD .FCStd document but does not specify path format, extension expectations, or whether it must be absolute.
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?
States a specific verb ('List') and resources ('solid objects, dimensions and validity') scoped to a FreeCAD .FCStd document. It is easy to distinguish from export_freecad_stl by the inspection verb, but it never references or differentiates from any sibling explicitly.
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 when/when-not guidance or alternatives are given. The intended use case (inspect a FreeCAD document) is implied by the verb and resource, so there is minimal but inferable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_settingsA
List the validated print settings accepted by this server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. "List" implies a read-only, side-effect-free operation, but it does not state that explicitly, nor does it mention auth requirements, rate limits, or whether the returned set is static or depends on the connected printer/profile.
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 front-loaded sentence with no filler; the verb and the resource arrive immediately. Nothing is redundant with the schema or could be cut.
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?
An output schema exists, so return structure need not be explained, and with no parameters there is little left to document. It could go slightly further by tying these settings to the slicing/profile workflow used by the sibling tools, but nothing critical is missing for correct invocation.
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 takes zero parameters, so there is nothing for the description to disambiguate; the schema is trivially complete. Baseline 4 applies when there are no parameters to document.
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?
States a specific verb ("List") and a specific resource ("the validated print settings accepted by this server"), which distinguishes it from the other list_* sibling (list_user_profiles). It never names or contrasts with any sibling tool, so differentiation still requires the agent's own inference.
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?
Usage is only implied: the phrase "accepted by this server" hints this is the discovery step before submitting settings, but there is no explicit when-to-use rule, no prerequisite (e.g. must call check_setup first), and no named alternative. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_profilesB
List local machine, process, and filament JSON presets available for slicing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state that this is a read-only operation, whether results are paginated, or how 'local' presets differ from any remote/cloud set. Only the 'local' qualifier adds real behavioral information.
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 front-loaded sentence with no filler; the verb and resource lead. Slightly opaque jargon ('JSON presets') is the only cost, but it stays tight.
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?
An output schema exists, so return values need no explanation, and a zero-parameter list tool has a small surface. What is missing is routing guidance against the three profile-related siblings, which leaves the agent with a real ambiguity when deciding which profile tool to invoke.
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 takes zero parameters, so per the rubric the baseline is 4. There are no argument semantics to explain and the description does not need to compensate for anything.
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?
States a specific verb ('List') and a well-defined resource: local machine, process, and filament JSON presets. It even scopes the resource to those used for slicing. It stops short of distinguishing itself from the sibling 'find_profiles', which reads similarly, so it does not fully earn a 5.
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 phrase 'available for slicing' hints at context, but there is no explicit when-to-use guidance and no mention of the closely named siblings (find_profiles, read_profile, derive_profile). An agent cannot tell from the description alone whether to call this or find_profiles first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_print_jobC
Export one FreeCAD solid and slice it with explicit OrcaSlicer presets.
| Name | Required | Description | Default |
|---|---|---|---|
| cad_path | Yes | ||
| settings | No | ||
| object_name | Yes | ||
| machine_profile | Yes | ||
| process_profile | Yes | ||
| timeout_seconds | No | ||
| filament_profile | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a mutation (writing exported geometry and a slice result), yet says nothing about where output lands, whether existing files are overwritten, what OrcaSlicer/FreeCAD executables must be installed, or that the 600s default timeout signals a long-running operation. Sibling check_setup exists precisely because environment prerequisites matter here, and the description never mentions them.
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 front-loaded sentence with no filler or repetition, and the core action leads. Its brevity is a virtue for scanning, though it tips into under-specification rather than tightness.
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?
An output schema exists, so return values need not be explained. For a multi-stage CAD-export-plus-slicing tool with 7 parameters, no annotations, and zero parameter documentation, the description omits the pipeline prerequisites, profile-parameter format, timeout semantics, and output location — a large gap given 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?
Schema description coverage is 0% across 7 parameters, five of which are required, so the description must compensate and does not. 'Explicit OrcaSlicer presets' loosely gestures at machine/process/filament_profile, but cad_path, object_name, settings, and timeout_seconds get no clarification whatsoever — notably whether profile params take names, keys, or file paths.
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 sentence names two specific verbs (export, slice) and both resources (a FreeCAD solid, OrcaSlicer presets), so the compound end-to-end nature of the tool is clear. It does not, however, distinguish itself from the sibling pair export_freecad_stl + run_slice, which an agent could compose to achieve the same result.
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?
There is no when-to-use statement, no prerequisite list, and no named alternative. The phrase 'explicit OrcaSlicer presets' faintly implies this is for callers who already have profile names rather than using find_profiles/derive_profile, but the agent must infer that entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_sliceA
Validate a slice request and show inputs, settings, and hashes without slicing.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| settings | No | ||
| machine_profile | No | ||
| process_profile | No | ||
| filament_profile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the single most important behavioral trait: it validates and reports inputs, settings, and hashes without performing a slice, i.e. no side effects on the model. It is silent on auth needs, failure modes, or rate limits, but the critical safety profile is stated.
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 front-loaded sentence with the differentiating clause last and zero redundant text. Nothing could be removed without losing meaning.
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?
An output schema exists, so return values need not be described, and the dry-run behavior is clear. But with five undocumented parameters, no annotations, and no explicit routing against run_slice, the definition leaves gaps the agent must guess around.
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% for all five parameters, so the description would need to compensate, and it does not. 'Inputs, settings, and hashes' refers to the preview output, not to arguments like model, settings, machine_profile, process_profile, or filament_profile, none of which are explained.
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 gives a specific verb (validate) and resource (slice request) plus the scope-limiting clause 'without slicing', which tells the agent this is a dry-run counterpart to the write path. It does not name run_slice directly, so differentiation is implied rather than explicit.
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?
'Without slicing' implies this is the safe pre-flight check before run_slice, which is usable guidance. However, it never states an explicit when-to-use/when-not-to-use rule or names the alternative, leaving the agent to infer the workflow ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_gcode_summaryB
Read available print time, filament, and layer metadata from G-code or sliced 3MF.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does add real value by declaring which file formats are accepted and by hedging that metadata is only 'available' (fields may be absent), but it says nothing about permissions, error behavior on unsliced files, or cost.
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 front-loaded sentence naming the action, the returned data, and the accepted inputs, with zero filler.
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?
With only one parameter and an output schema already present to describe return values, the description needs little more. It covers the input formats and the data returned; only the path semantics and usage routing are thin.
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 single required 'path' parameter has no schema description. The description partially compensates by constraining the path to G-code or sliced 3MF artifacts, but it gives no format, relative-vs-absolute, or extension guidance.
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?
States a specific verb (read) plus the resource and the exact payload (print time, filament, layer metadata), and names the accepted inputs (G-code or sliced 3MF). It is clearly distinguishable from slicing siblings like run_slice or preview_slice, though it never names those siblings explicitly.
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?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as preview_slice or get_printer_status. The only implicit signal is that a G-code/3MF artifact must already exist, which the agent has to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_profileB
Read a preset's settings, with credential fields redacted.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 usefully discloses that credential fields are redacted in the returned settings, which is a real behavioral trait, but says nothing about permissions, path resolution, or error behavior for an invalid path.
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 tight sentence with no filler, and the redaction caveat is attached directly to the action it modifies. Nothing to trim.
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?
An output schema exists, so return values need not be explained, and the redaction note covers the most surprising behavior. However, with an undocumented required parameter and no usage context, the definition is only minimally sufficient for correct invocation.
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 single required parameter 'path' has 0% schema description coverage, and the description does not explain what the path points to (preset file, profile directory, etc.) or its expected format. The schema does no work here, and the description only obliquely implies the path identifies a preset.
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?
States a specific verb (Read) and resource (a preset's settings) and adds a scope qualifier about redaction. It implicitly separates itself from list_user_profiles and find_profiles by reading a single preset, but never names or contrasts those siblings explicitly.
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 when-to-use statement and no routing guidance among the many profile-related siblings (find_profiles, list_user_profiles, derive_profile). The agent must infer that this is the tool for fetching one profile's contents by path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_sliceC
Slice with stock OrcaSlicer in a unique output folder; return artifacts and logs.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | ||
| settings | No | ||
| machine_profile | No | ||
| process_profile | No | ||
| timeout_seconds | No | ||
| filament_profile | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two useful traits: output goes to a unique folder (avoiding collisions) and the result is artifacts plus logs. It stays silent on runtime expectations, permission/auth needs, whether prior outputs are overwritten, and failure behavior for a tool that shells out to a slicer.
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 compact sentence with the action front-loaded and the output behavior appended; nothing is padded or redundant.
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?
An output schema exists, so return values need no explanation, but for a 6-parameter, annotation-free execution tool the description leaves the argument space entirely undocumented and gives no guidance on when to prefer it over preview_slice.
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% across 6 parameters, so the schema explains nothing, and the description adds no meaning for model, settings, the three profile arguments, or timeout_seconds. The only faint signal is 'stock' implying defaults, which does not compensate for the complete gap.
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?
States a specific verb ('Slice') plus the engine (stock OrcaSlicer) and its write behavior (unique output folder, returns artifacts and logs). It does not distinguish itself from the close siblings preview_slice and prepare_print_job, so an agent must still infer which slicing-stage tool to pick.
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?
There is no when-to-use guidance and no explicit alternative named, despite preview_slice and prepare_print_job sitting in the same family. The 'stock OrcaSlicer' phrasing only loosely implies this is the real/full slice rather than a preview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_uploaded_printA
Start an uploaded G-code file after checking the printer is ready and idle.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose one real behavioral trait — a readiness/idle gate before starting — which is useful for an action tool. It omits what happens on failure (does it error, queue, or silently abort), whether the call blocks until the print starts, and whether the action is reversible, all of which matter for a physical printer operation.
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 tight sentence with the action front-loaded and the precondition attached as a subordinate clause. No filler, nothing to trim.
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?
An output schema exists, so return values need not be explained. But for a hardware-mutating action with no annotations and an undocumented required parameter, the description is thin: it says nothing about failure modes, blocking behavior, or printer-state errors that an agent must anticipate.
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% for the single upload_id parameter, so the schema adds no meaning on its own. The description partially compensates by indicating the id refers to a previously uploaded G-code file, but it gives no format, provenance, or example of the id, leaving a real gap.
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?
Specific verb+resource: 'Start an uploaded G-code file' names both the action and the target, and 'uploaded' implicitly scopes it to a file already on the device, distinguishing it from upload_print_file and prepare_print_job. It does not explicitly name or rule out any sibling, so it stops short of a 5.
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 phrase 'after checking the printer is ready and idle' implies a precondition that routes the agent toward get_printer_status first, which is genuine usage context. However, it never explicitly says when to use this instead of prepare_print_job or upload_print_file, nor what to do when the check fails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_print_fileA
Upload G-code to Moonraker without starting the printer; return an upload ID.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses two key facts — the print is NOT started and an upload ID is returned — but omits auth requirements, storage location, and overwrite/duplicate handling, leaving meaningful gaps for an upload mutation.
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 tightly-worded sentence with the non-start constraint and return value front-loaded. Every clause earns its place with no filler.
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?
An output schema exists, so the return value ('upload ID') need not be explained, though the description mentions it anyway. The remaining adequacy gap is the undocumented 'path' parameter plus no annotation coverage; the core purpose is otherwise clear.
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 single 'path' parameter has 0% schema description coverage, and the description never explains it (remote path? local file? filename only?). The description gives upload context but does not compensate for the undocumented parameter.
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?
States a specific verb+resource ('Upload G-code to Moonraker') and immediately scopes it with 'without starting the printer', which cleanly separates it from the sibling start_uploaded_print. An agent can distinguish its role without opening any schema.
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 clause 'without starting the printer' conveys the when-not condition and implicitly routes the agent to start_uploaded_print for the actual print step. It does not explicitly name that alternative or state prerequisites, so it stops short of a 5.
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.
15 tool updates
v0.1.0- First observed
check_setup - First observed
derive_profile - First observed
export_freecad_stl - First observed
find_profiles - First observed
get_printer_status - First observed
inspect_freecad_document - First observed
list_supported_settings - First observed
list_user_profiles - First observed
prepare_print_job - First observed
preview_slice - First observed
read_gcode_summary - First observed
read_profile - First observed
run_slice - First observed
start_uploaded_print - First observed
upload_print_file
TDQS
Scored across 15 tools
Most tools have clearly distinct roles (inspect vs export vs preview vs run), but prepare_print_job strongly overlaps with export_freecad_stl + run_slice, and find_profiles vs list_user_profiles could be confused at a glance.
Predominantly consistent verb_noun snake_case (check_setup, inspect_freecad_document, run_slice), with only minor deviations where the verb is omitted (get_printer_status) or the pattern shifts to adjective_noun (list_supported_settings).
15 tools is a well-scoped set for a CAD-to-print pipeline spanning discovery, inspection, slicing, and printer upload; each tool has a distinct phase in the workflow.
The surface covers the full lifecycle from CAD inspection through slicing to printer control, but lacks cancellation or print-job status/monitoring beyond a single get_printer_status, which agents would likely need in practice.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Headless CAD engine & MCP server for 2D/3D drafting, solids, DXF/SVG export, and automation.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables 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.30119 npm256GPL 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with FreeCAD for 3D modeling, macros, and debugging via MCP.MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to create, edit, and export CAD models and drawings in a locally installed FreeCAD via MCP.3-
- AlicenseNot gradedqualityBmaintenanceEnables secure local control of Anycubic Slicer Next and compatible printers, supporting slicing, 3MF/CAD operations, printer control, spool registry, and camera access through MCP tools.MIT