Silhouette Studio MCP Server
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., "@Silhouette Studio MCP Server Create a 100 mm circle with a 10 mm hole, export DXF, and open it in Silhouette Studio."
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.
Silhouette Studio MCP Server (v1.1.0)
A production-hardened Model Context Protocol (MCP) server (stdio) for programmatically creating, validating, nesting, previewing, and exporting vector cut designs in millimetres (mm) for Silhouette Studio (including Standard/Basic Edition, which opens DXF files natively but does not import SVG natively).
Because Silhouette Studio exposes no public live API, this server models designs as persistent .design.json scenes, converts vector geometry, external SVGs, TrueType/OpenType text, offsets, registration marks, nested layouts, and parametric box dielines into clean DXF (R2000/R12), SVG, and PNG preview files, and opens them directly in Silhouette Studio.
Key Features
28 MCP Tools covering canvas presets, geometric primitives, TrueType/OpenType text vectorization (
fontTools+ built-in geometric vector fallback), hardened contour offsetting (round/miter/bevel), deterministic 2D sheet nesting (silhouette_nest_shapesvia MaxRects), grid duplication, transforms withflip_x/flip_y, hardened SVG path import, Print & Cut registration marks, parametric packaging templates, PNG visual proofs, DXF/SVG export, and Silhouette Studio launch.Layer & Line-Color Workflow: Built-in layer mapping (
CUT,SCORE/FOLD,PERF,ENGRAVE,REGMARK) using AutoCAD Color Index (ACI) values for DXF and matching hex strokes for SVG/PNG so Silhouette Studio's Cut by Line Color panel separates cut lines from creases and perforations automatically.Inter-Process Concurrency & Crash Recovery: Protected by
_InterProcessLock(combining re-entrantthreading.RLockwith OS-level locking on.silhouette.lockviamsvcrt.lockingon Windows andfcntl.flockon POSIX),os.fsyncatomic temp-file writes, monotonically incrementedrevisiontracking, and automatic recovery from.design.json.bakon corrupted primary files.Security & Hard Limits: Rejects
bool-as-int coercion,NaN/inf, extreme coordinates (abs <= 100000 mm), oversized canvases (10..5000 mm), oversized text (<= 500chars), self-intersecting closed contours, XML DTD/<!ENTITY/<script/external URI payloads in SVG (10 MB,10000elements, depth64,100000points,defusedxmlwhen available), and atomically enforcesMAX_SHAPES = 5000across all batch tools.MCP v2 Error Reporting, Annotations & STDIO Hygiene: Dual-inheritance exceptions (
SilhouetteValueError,SilhouetteRuntimeError) preserve full diagnostic messages in MCP v2is_error=Truetool responses while remaining standardValueError/RuntimeErrorsubclasses for Python callers. Operational logs route exclusively tosys.stderrso JSON-RPCstdoutis never corrupted.Clean Silhouette-Ready DXF: Sets
$INSUNITS/$EXTMIN/$EXTMAXheaders, avoids duplicate closing vertices on closed polylines (LWPOLYLINE), and flattens curves within a0.05 mmchord tolerance (CHORD_TOL_MM).
Related MCP server: SmartCut
Requirements
Python:
>= 3.10Dependencies (
pyproject.toml):mcp>=1.3.0ezdxf>=1.4.0svgelements>=1.9.0fonttools>=4.40.0Pillow>=10.0.0
Dev Dependencies:
pytest>=8.0.0pytest-cov>=5.0.0
Installation
git clone https://github.com/WarlemJung/Silhouette-Studio-MCP-Server.git
cd Silhouette-Studio-MCP-Server
pip install -e ".[dev]"For runtime-only installation:
pip install -e .MCP Client Configuration
Add the server to your MCP host configuration (stdio transport):
{
"mcpServers": {
"silhouette-studio": {
"command": "python",
"args": ["/absolute/path/to/silhouette_studio_mcp/src/silhouette_mcp/server.py"]
}
}
}If installed as a package (pip install -e .), you can also launch the console script entry point:
{
"mcpServers": {
"silhouette-studio": {
"command": "silhouette-studio-mcp"
}
}
}Optional Environment Variables
Variable | Default | Description |
|
| Directory where |
|
| DXF export version ( |
| Auto-detected | Explicit path to the Silhouette Studio executable ( |
|
| Logger verbosity written exclusively to |
Coordinate System, Layers & Presets
Coordinate System & Operational Limits
Units: Millimetres (
mm)Origin: Top-left
(0, 0)of the page/matAxes:
+Xgrows right,+Ygrows downRotation: Degrees, clockwise
Safety Limits: Warns on details smaller than
MIN_FEATURE_MM = 2.0 mmor shapes extending outsidecut_margin_mm; enforcesMIN_PAGE_MM = 10.0 mm,MAX_PAGE_MM = 5000.0 mm,MAX_COORD_MM = 100000.0 mm,MAX_TEXT_LENGTH = 500,MAX_ARC_SEGMENTS = 512,MAX_POINTS_PER_SHAPE = 20000,MAX_SVG_BYTES = 10 MB,MAX_SVG_ELEMENTS = 10000,MAX_SVG_DEPTH = 64,MAX_SVG_TOTAL_POINTS = 100000, and atomic pre-checkedMAX_SHAPES = 5000per design.
Supported Layers
Layer | DXF ACI Color | SVG / PNG Color | Preview Style | Intended Use |
|
|
| Solid | Full perimeter / blade cut |
|
|
| Dashed | Fold / score creases |
|
|
| Dashed | Alias for fold creases |
|
|
| Dashed | Perforation / tear lines |
|
|
| Solid | Sketch / foil / engraving |
|
|
| Solid | Print & Cut registration marks |
|
|
| Solid | Fallback layer |
Page / Mat Presets
Preset | Dimensions ( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MCP Tools Reference (28 Tools)
1. Design Lifecycle (6 tools)
Tool | Signature | Description |
|
| Returns all built-in page/mat presets and dimensions in mm. |
|
| Creates a new design file ( |
|
| Lists saved designs in |
|
| Returns full JSON geometry and metadata for a design. |
|
| Deletes the |
|
| Removes all shapes from an existing design while keeping page setup. |
2. Vector Primitives (7 tools)
Tool | Signature | Description |
|
| Adds a sharp or rounded rectangle. |
|
| Adds a circle (exported natively as DXF |
|
| Adds an optionally rotated ellipse. |
|
| Adds a regular polygon ( |
|
| Adds a symmetric star ( |
|
| Adds a solid line or batched dashed line segments (ideal for |
|
| Adds an open or closed polyline from |
3. Typography, Registration Marks & Parametric Templates (3 tools)
Tool | Signature | Description |
|
| Converts text into cuttable vector contours using TrueType/OpenType system fonts (or an explicit font file path) via |
|
| Places standard Print & Cut marks (top-left square + top-right/bottom-left L-brackets) with |
|
| Generates a full packaging dieline with |
4. Editing, Offsetting, Nesting, Duplication & SVG Import (7 tools)
Tool | Signature | Description |
|
| Mirrors ( |
|
| Creates an outward ( |
|
| Deterministic MaxRects ( |
|
| Creates deep-copied stepped duplicates offset by |
|
| Duplicates a shape across a |
|
| Removes a single shape by its |
|
| Validates SVG security bounds, parses paths/primitives via |
5. Inspection, Export, Calibration & Launch (5 tools)
Tool | Signature | Description |
|
| Summarizes shape counts, |
|
| Exports any combination of |
|
| Renders a color-coded PNG visual proof ( |
|
| Generates |
|
| Safely validates |
Documentation
docs/architecture.md— Layeredserver -> tools -> services -> {core, persistence, exporters, integrations}architecture, dependency matrix, and STDIO transport isolation.docs/geometry.md— Y-down/CAD Y-up coordinate mapping, polygon validation, self-intersection detection, and hardened contour offsetting.docs/nesting.md— Modularcore/nesting/2D MaxRects (BSSF + BAF) packing domain, collision/clearance validation, andREGMARKpreservation.docs/security.md— SVG/XXE protections, numeric/capacity bounds, atomic batch enforcement, and desktop subprocess security.docs/testing.md— Layered automated test suite (unit/,integration/,regression/,performance/), real STDIO end-to-end integration, and benchmarks.CHANGELOG.md— Release history (0.2.0->1.0.0->1.1.0).
Silhouette Studio DXF Calibration
Run
silhouette_make_calibration_file()to generatecalibration-100mm.dxf.Open the file in Silhouette Studio (
silhouette_open_in_studio("calibration-100mm.dxf")).Verify the imported square measures 100.0 mm × 100.0 mm.
If the dimensions differ, configure Silhouette Studio Preferences -> Import -> DXF -> Open As Is (Centered or As-Is, 1:1 / mm units) instead of Fit to Page.
Note on Homologation:
silhouette_open_in_studioverifies OS process launch (process_launched: true) and returnshomologated_import: falsebecause visual DXF verification inside the desktop GUI and physical blade cuts require manual inspection.
Examples
examples/create_sample_design.py: Builds a rounded tag with a keyhole perforation, exports DXF + SVG, and opens it in Silhouette Studio.examples/generate_caixa_milk.py: Standalone script demonstrating programmatic packaging generation withCUT,SCORE, andENGRAVElayers.
Package Architecture
The project follows a clean layered src/ + categorized tests/ layout configured in pyproject.toml (silhouette-studio-mcp = "silhouette_mcp.server:main"), organizing responsibilities under src/silhouette_mcp/ and tests into unit/{core,services,tools,exporters,persistence}/, integration/{mcp,persistence,studio}/, regression/, performance/, and fixtures/:
src/silhouette_mcp/config/settings.py: Presets, layer palettes, limits,_DynamicStderrHandler, and monkeypatch-transparent runtime resolution (get_runtime_attr()).src/silhouette_mcp/core/&core/nesting/: Exceptions & MCP v1/v2 shims (exceptions.py), validators (validators.py), shape models (models.py), 2D geometry/offset engine (geometry_engine.py), and pure 2D nesting domain (nesting/{models,collision,maxrects,metrics}.py).src/silhouette_mcp/persistence/: Cross-process.silhouette.lock(_InterProcessLock) & atomic writes (storage.py) plus.design.json.bakcrash recovery (repository.py).src/silhouette_mcp/exporters/&integrations/: DXF, SVG, and PNG exporters plus Windows/OS Silhouette Studio launcher (silhouette_studio.py).src/silhouette_mcp/services/: Use-case orchestration layer (document_service,geometry_service,nesting_service,export_service,import_service,template_service) decoupled from MCP transport.src/silhouette_mcp/tools/&server.py: 28 thin MCP adapter tools registered centrally viaTOOL_REGISTRATIONS(self-bootstrapping STDIO entrypoint).
See docs/architecture.md for the full layered diagram and dependency matrix.
Testing, Benchmarks & Verification
Run the automated test suite with coverage reporting:
python -m pytest -v -p no:cacheprovider --cov=silhouette_mcp --cov-report=term-missingAll tests automatically isolate SILHOUETTE_OUTPUT_DIR to a temporary directory via tests/conftest.py and mock OS GUI launches. Latest verified status: 94 passed, 0 failed, 0 skipped, 96% line coverage (2224 statements across src/silhouette_mcp/), covering:
Strict AST architectural dependency boundaries across
core/,services/, andtools/Pure
core/nesting/unit validation + deterministic MaxRects 2D nesting invariants (tests/unit/core/test_nesting.py)Direct
services/orchestration tests + 4-process parallel concurrency (subprocess.Popen+_InterProcessLock) and.design.json.bakcrash recoveryHardened convex, concave, self-intersecting, and inradius-exceeded contour offsets + seeded property invariants
Atomic
MAX_SHAPES = 5000batch guards and SVG XXE/<script>/depth/element/URI protectionsUnmocked real MCP STDIO JSON-RPC client-server end-to-end execution (
list_tools,new_design,add_rectangle,add_text,nest_shapes,export dxf/svg/png,delete_design)Automated performance sanity checks in
tests/performance/test_benchmarks.py(with full100to5,000shape scale tables published indocs/testing.md)
Available Tools
28 toolssilhouette_add_box_templateB
Generate a ready-to-cut parametric packaging / papercraft template with CUT and SCORE layers. Supported templates: 'milk-box-luxo', 'milk-box', 'cube-box', 'pillow-box', 'gift-tag'.
Inputs: design (required), x_mm, y_mm, depth_mm, +4 more.
silhouette_add_circleB
Add a circle centred at (cx_mm, cy_mm). Exported as a true DXF CIRCLE.
Inputs: cx_mm (required), cy_mm (required), design (required), radius_mm (required), +2 more.
silhouette_add_ellipseB
Add an ellipse centred at (cx_mm, cy_mm) with radii rx_mm (horizontal) and ry_mm (vertical), rotated clockwise by rotation_deg.
Inputs: cx_mm (required), cy_mm (required), rx_mm (required), ry_mm (required), +4 more.
silhouette_add_lineB
Add a straight line between (x1_mm, y1_mm) and (x2_mm, y2_mm). If dashed=true, creates perforated segments ideal for folding cardstock/papercraft. dash_len_mm: cut segment length (default 3mm); gap_len_mm: un-cut gap length (default 2mm). layer: 'CUT', 'SCORE', 'PERF', etc.
Inputs: x1_mm (required), x2_mm (required), y1_mm (required), y2_mm (required), +6 more.
silhouette_add_polygonA
Add a regular polygon (3-64 sides) inscribed in a circle of radius_mm, centred at (cx_mm, cy_mm). With rotation_deg=0 one vertex points up.
Inputs: cx_mm (required), cy_mm (required), sides (required), design (required), +4 more.
silhouette_add_polylineB
Add a custom path through the given [x, y] points (in mm, Y down). closed=true makes a closed shape (>= 3 points); closed=false makes an open line (>= 2 points).
Inputs: design (required), points (required), label, layer, +1 more.
silhouette_add_rectangleA
Add a rectangle whose top-left corner is at (x_mm, y_mm). corner_radius_mm > 0 rounds the corners (clamped to half of the smaller side). rotation_deg rotates clockwise around the rectangle center. layer defaults to 'CUT' (or 'SCORE', 'PERF').
Inputs: x_mm (required), y_mm (required), design (required), width_mm (required), +5 more.
silhouette_add_registration_marksA
Add standard Silhouette Print & Cut 3-corner registration marks (top-left square, top-right L-bracket, bottom-left L-bracket) on layer 'REGMARK'.
Inputs: design (required), layer, inset_mm, arm_len_mm, +2 more.
silhouette_add_starA
Add a star with the given number of points (3-64). inner_radius_mm must be smaller than outer_radius_mm (about 40% gives a classic star). With rotation_deg=0 one tip points up.
Inputs: cx_mm (required), cy_mm (required), design (required), inner_radius_mm (required), +5 more.
silhouette_add_textA
Convert text into vector cut/score outlines using a system/custom TTF/OTF font (or built-in geometric vector fallback) and add the glyph contours to the design. x_mm, y_mm mark the top edge anchored horizontally by align ('left', 'center', 'right').
Inputs: text (required), x_mm (required), y_mm (required), design (required), +7 more.
silhouette_clear_shapesBDestructiveIdempotent
Remove all shapes from a design without resetting page dimensions.
Inputs: design (required).
silhouette_delete_designADestructive
Delete a design file. If delete_files=true, also removes any exported .dxf, .svg and .png files.
Inputs: design (required), delete_files.
silhouette_describe_designARead-onlyIdempotent
Summarise a design: page size, every shape with its bounding box, overall bounds and any warnings (outside the page, inside the safety margin, tiny details).
Inputs: design (required).
silhouette_duplicate_shapeB
Duplicate an existing shape count times, offsetting each consecutive copy by (dx_mm, dy_mm).
Inputs: design (required), shape_id (required), count, dx_mm, +1 more.
silhouette_exportAIdempotent
Export the design to cut/preview files in the output folder. formats is a comma-separated list of 'dxf', 'svg', and/or 'png'. DXF is required for the free Standard Edition. filename (optional) overrides the base file name. Returns file paths, bounds and warnings.
Inputs: design (required), formats, filename.
silhouette_get_designBRead-onlyIdempotent
Get the full raw JSON data of a design, including all shapes and canvas properties.
Inputs: design (required).
silhouette_grid_duplicatesB
Arrange copies of an existing shape in a 2D cols x rows matrix (sheet nesting). The original shape occupies cell (0, 0) and (cols * rows - 1) copies fill the remaining cells.
Inputs: cols (required), rows (required), design (required), shape_id (required), +2 more.
silhouette_import_svgA
Read an SVG file from disk, convert outlines (curves flattened to mm segments) and add them to the design for DXF export. This bridges SVG artwork into Silhouette Studio Standard Edition (which cannot open SVG natively). target_width_mm / target_height_mm > 0 scale artwork (uniformly if only one is given); artwork's top-left corner is placed at (x_mm, y_mm). Text and embedded images are skipped (convert text to outlines or use silhouette_add_text).
Inputs: design (required), svg_path (required), x_mm, y_mm, +4 more.
silhouette_list_designsBRead-onlyIdempotent
List the designs saved in the output folder along with exported files if any.
Inputs: no named parameters.
silhouette_list_page_presetsARead-onlyIdempotent
List the built-in page/mat presets (name -> width/height in mm). These are page sizes, not the exact cutting area of the machine; keep a safety margin.
Inputs: no named parameters.
silhouette_make_calibration_fileAIdempotent
Create and export a calibration DXF: a 100 x 100 mm square with a 50 mm circle, a 40 x 20 mm rounded rectangle, and a 100 mm perforated score line. Open it in Studio and measure it: if the square is not 100 mm (3.937 in), set Studio Preferences > Import Options > DXF to 'As-is'.
Inputs: no named parameters.
silhouette_nest_shapesB
Optimise 2D rectangular sheet nesting (MaxRects Best Short Side Fit) to pack shapes inside the usable cutting area with zero overlap and guaranteed spacing_mm clearance. Automatically skips and avoids any REGMARK registration marks on the page. Set dry_run=true to compute placement metrics without modifying shape coordinates.
Inputs: design (required), dry_run, margin_mm, shape_ids, +3 more.
silhouette_new_designADestructiveIdempotent
Create an empty design (the working canvas). Use a preset (see silhouette_list_page_presets) or give custom width_mm AND height_mm (they override the preset). cut_margin_mm is a safety margin used only for warnings. Fails if the design exists unless overwrite=true.
Inputs: name (required), preset, width_mm, height_mm, +2 more.
silhouette_offset_shapeB
Create a new inward (< 0) or outward (> 0) offset contour from an existing circle or closed polygon (ideal for print-and-cut bleed borders, shaker frames and layered mats). join: 'round', 'miter', or 'bevel'.
Inputs: design (required), shape_id (required), offset_mm (required), join, +2 more.
silhouette_open_in_studioA
Open a cut file previously exported (.dxf or .svg) directly in Silhouette Studio. Accepts full paths, paths relative to the output folder, or just design/file names. Set reveal_in_explorer=true to also select the file in Windows Explorer.
Inputs: path (required), reveal_in_explorer.
silhouette_remove_shapeBDestructive
Remove one shape (by the id shown in silhouette_describe_design).
Inputs: design (required), shape_id (required).
silhouette_render_previewAIdempotent
Render a colour-coded PNG preview of the design (with 10 mm grid and safety margin) for visual inspection before cutting. Returns the PNG path, pixel dimensions and warnings.
Inputs: design (required), dpi, filename.
silhouette_transform_shapeA
Move (dx_mm, dy_mm), scale, rotate, and optionally mirror (flip_x, flip_y) an existing shape by its id. Scaling, flipping and rotation are centred at the shape's bbox center.
Inputs: design (required), shape_id (required), dx_mm, dy_mm, +4 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Each tool targets a distinct resource or action, with the main overlap being duplicate_shape vs grid_duplicates vs nest_shapes—but descriptions differentiate them (sequential offset, matrix fill, optimized packing). Shape primitives (rectangle, circle, ellipse, polygon, star, line, polyline, text) are cleanly separable, and export/preview/open_in_studio are clearly scoped.
All tools use a uniform silhouette_ prefix followed by snake_case verb_noun (add_rectangle, transform_shape, delete_design, export). A few names like make_calibration_file and open_in_studio are still verb-led and readable, with no style mixing.
28 tools is on the heavy side for the stated 16-25 borderline band, though most earn their place as distinct shape primitives and lifecycle operations. The surface is broad but not padded with redundant aliases.
Design lifecycle covers create/list/get/delete, shapes cover add/remove/transform/duplicate/offset/nest/clear, plus export, render, calibration, and open-in-Studio. Gaps exist—no canvas resize after creation, no boolean union/subtract, no shape grouping, and no DXF import—but agents can work around most.
Maintenance
Related MCP Connectors
Cutting optimization: 2D panels, 1D bars, timber and true-shape nesting via the CutOptim API.
Write, check and render parametric laser-cutting designs in KerfScript, as SVG or DXF.
Vectorize images to SVG, PDF, EPS or DXF, and check a DXF before cutting.
Headless CAD engine & MCP server for 2D/3D drafting, solids, DXF/SVG export, and automation.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 2D irregular polygon nesting (bin-packing) with tools to design, preview, get reports, and export DXF files for laser cutting or CNC routing.MIT

SmartCutofficial
FlicenseNot gradedqualityCmaintenanceSmartCut is a hosted cutting-optimisation API. It turns a list of parts and available stock into machine-ready cutting patterns for sheet materials (plywood, MDF, glass, plastic, sheet metal), linear stock (timber, bar, pipe, extrusion) and roll goods. Guillotine and true-shape nesting modes, with grain direction, per-part orientation locks, edge banding, blade kerf and stock trim.3-- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to automate 2D architectural drafting and CAD file management, including DXF/DWG parsing, SVG/PNG/PDF rendering, wall extrusion to 3D STL meshes, room and beam analysis, block/script library access, and persistent depot storage via a REST API and MCP tools.18MIT
- AlicenseAqualityAmaintenanceFree, open-source 2D nesting for fixed sheets (laser, CNC, plasma, waterjet, fabric): SVG/DXF import, part-in-part nesting across several sheets, validation and export. Runs as an MCP server, on the command line and in the browser.517MIT