AI-native SVG editor MCP App for Claude Science and Wisp Science. Edit matplotlib and ggplot scientific figures by hand or natural language.
SVG Editor MCP demonstrates solid tool design with clear naming (verb_noun pattern), comprehensive descriptions (avg 180 chars), and well-structured schemas using Zod validation. All 8 tools have input/output schemas and descriptions. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are properly applied. Key strengths: surgical edit operations with detailed selector documentation, clear error handling via fail() wrapper, and resource linking. Weaknesses: some parameter descriptions lack format constraints (e.g., svg content max 1000000 bytes stated in description but not enforced in schema); operations array in svg_apply uses oneOf with implicit discriminator rather than explicit tagged union; svg_commit visibility restricted to 'app' only, limiting discoverability.
Apply surgical operations to the live SVG: set_text, set_fill, set_stroke, set_font, set_attr, set_style, translate, scale, hide, show, delete, duplicate, recolor, replace_svg. Selectors: #id, [data-se-id=eN], CSS-like tag/id/class, text:Exact, text:~partial, comma lists. Never redraw the whole figure unless replace_svg is explicitly required.
App-only: persist the current canvas SVG after a manual edit.
Return a self-contained HTML editor preloaded with the current (or provided) SVG. Use this fallback when the host does not mount the live MCP App. The tool does not write a file.
Return the current live SVG document and a short catalog preview.
List the live SVG's editable elements (seId, id, tag, text, fill, stroke, font). Call this before svg_apply so selectors hit the intended nodes. Does not prove the App is visible.
Open the interactive SVG editor MCP App. Pass svg/content to load a figure, or omit for the sample two-panel figure. A successful result requests the live App; it does not prove the host mounted a frame. Prefer surgical later edits via svg_inspect + svg_apply instead of regenerating the SVG.
svg_apply operations array uses oneOf discriminator without explicit 'op' field tagging in schema definition. LLMs may struggle to construct valid operation objects without seeing concrete examples of each operation type.
svg_commit restricted to 'app' visibility only (uiMeta(['app'])), making it invisible to the model. This breaks the tool chain: svg_apply → svg_commit workflow is hidden from LLM planning.
Parameter descriptions state max byte/char limits (e.g., 'max 1000000 bytes') but Zod schemas do not enforce these constraints. Validation happens at runtime but LLM has no machine-readable constraint to guide input sizing.
Error handling via fail() function returns generic 'The SVG editor could not complete the request' when error.message is empty. Does not categorize errors as retryable vs. fatal or provide recovery guidance.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Redo the last undone SVG document change.
Undo the last svg_apply, svg_commit, or load on the live document.
svg_open_editor and svg_create_artifact accept both 'svg' and 'content' parameters as alternatives. Documentation does not clarify precedence or mutual exclusivity, risking ambiguous LLM behavior.