v1.3.0 — SVG assets, block sizing, opt-in narration
SVG diagram pipeline + block sizing + opt-in narration. 25 MCP tools. All additive — existing
specs unchanged, no server-side LLM.
Added
svg_to_assettool (25th tool) — turn a Claude-generated SVG string into a packaged asset without
base64 (rawsvg_content); validates<svg>, returns anAssetRef(id) to use in
media_asset_id/image_asset_id/ blockasset_id. Optionalrasterize=true→ PNG (needs
cairosvg; clearrasterize_unavailableerror otherwise). Fixes the "inline<svg>inbody_html
gets sanitized away" pitfall — use the asset pipeline (rendered as<img src=…svg>).content_slideblocks[]per-blockwidth(e.g."60%") — image blocks can be sized + centered
(margin-inline:auto); omitted → full width.build_from_specauto_tts(opt-in, defaultfalse) +tts_voice— auto-generates Piper
narration for screens that havenarration_textand nonarration_asset_id, setting
narration_asset_id. Silently skipped when Piper is unavailable (build never breaks).
Changed
render_motion_video: when the render subprocess fails because Chromium is missing, return a clear
render_unavailableerror with workarounds (PNG+TTS video, static SVG/PNG asset, or local render)
instead of a raw HyperFrames stderr dump.
Full changelog: https://github.com/kemalyy/edumints-scorm-mcp/blob/main/CHANGELOG.md#130--2026-06-26