MCP server for Inkscape 1.4.2 — AI-assisted SVG creation, editing, query, and export
Server has 20 tools with mostly complete schemas and descriptions. Naming is verb-first and clear (document_create, element_update, etc.). Descriptions are detailed (100-300 chars typical), explaining WHAT and WHEN. However, several critical gaps: (1) ask_user tool lacks proper elicitation support (marked as READ_ONLY but requests user input, contradictory); (2) run_actions and trace_bitmap expose raw action names without enum constraints, inviting hallucinated values; (3) some parameter descriptions lack format/constraint details (e.g., 'transform' in transform_element just says 'SVG transform string' without examples or validation rules); (4) error handling is present but recovery guidance is sparse; (5) output schemas are documented in code but not formally in tool definitions visible here. Composition is strong, tools chain well (document_create → element_create → export_document). Security is good (path validation, no secrets in params). Overall: solid mid-range server with room for constraint formalization and error messaging.
Request user input or confirmation (elicitation).
Create a linear or radial gradient and return its ID for use in fill/stroke.
Create a pattern fill and return its ID for use in fill/stroke.
Create a new empty SVG document and return its {document_path}. width/height are the canvas size in user units. view_box defaults to "0 0 width height"; pass it explicitly to decouple the coordinate system from the pixel size. Use the returned document_path in every later call (element_create, render_preview, export_document, ...). Files land in the workspace (see workspace_info).
Create one SVG element via DOM and return its generated id. element_type + the keys to put in `properties` (units = user units): - "rect": x, y, width, height; optional rx, ry (corner radius) - "circle": cx, cy, r - "ellipse": cx, cy, rx, ry (use this for ovals — no arc-path needed) - "path": d (an SVG path data string, e.g. "M10 10 L90 90 Z") - "text": x, y, text; optional font_family, font_size Paint/style keys work on any type: fill, stroke, stroke_width, opacity, fill_opacity, stroke_opacity, stroke_dasharray, stroke_linecap, stroke_linejoin, transform, ... Both snake_case (stroke_width) and the raw SVG hyphen name (stroke-width) are accepted; any key not consumed by the type above passes straight through to the SVG attribute, so nothing is silently dropped. fill/stroke take a CSS color ("#ff0000", "red") or "url(#id)" from create_gradient/create_pattern, or "none". Example: element_create(document_path=..., element_type="rect", properties={"x":10,"y":10,"width":80,"height":40,"rx":6, "fill":"#3366cc","stroke":"black","stroke_width":2}) Appends on top (end of document = highest z-order) by default. Pass before_id to insert this element directly BENEATH an existing one (e.g. a shadow under a shape); see reorder_element to restack later.
run_actions and trace_bitmap expose raw action/mode names without enum constraints. LLMs will hallucinate invalid action names (e.g., 'rotate_45_degrees' instead of valid Inkscape action syntax). Requires enum or strict validation with recovery guidance.
ask_user marked as READ_ONLY but requests user input, contradictory risk classification. Elicitation tools should be explicitly marked and documented with expected response format and how to handle user cancellation.
transform_element parameter 'transform' lacks format constraints. Description says 'SVG transform string' but does not specify valid syntax, examples, or validation rules. LLMs may pass malformed transforms.
Error handling present in code (parse_stderr, custom exceptions) but recovery guidance sparse in tool descriptions. Tools like export_document and run_actions should include 'If export fails, check file permissions and disk space' or similar actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2025-06-18+ | v2 |
Change attributes of an existing element (found by object_id) via DOM. `properties` uses the SAME keys as element_create: geometry (x, y, width, height, cx, cy, r, rx, ry, d, text, ...) and paint/style (fill, stroke, stroke_width, opacity, transform, "url(#id)" fills, ...). Only the keys you pass are changed; others are left as-is. snake_case and hyphenated SVG names both work; unknown keys pass through to the attribute.
Export document to PNG, SVG, PDF, or other format.
Send action commands to a live Inkscape GUI window.
Close a live Inkscape GUI window and terminate the session.
Export the current state of a live Inkscape GUI window.
Open a live Inkscape GUI window for interactive editing.
Import an image file into the SVG document as an <image> element.
Query object bounding boxes (user-unit coordinates).
Render a PNG preview of the current document state.
Change the stacking order (z-order) of an element.
Run a sequence of Inkscape actions (escape hatch for advanced operations).
Trace a bitmap image (embedded or external) into SVG path geometry.
Apply a transform (translate, rotate, scale, skew) to an element.
Get information about the workspace directory and available files.
Write raw SVG content to a document file.
workspace_info description is minimal (50 chars). Should explain what files/dirs are returned, typical use case (e.g., 'Call this first to discover available documents'), and structure of response.