Skip to content

Releases: kemalyy/edumints-scorm-mcp

v1.4.0 — Institutional readiness hardening (W9 P0+P1)

Choose a tag to compare

@kemalyy kemalyy released this 23 Jul 13:54
3b13081

Accessibility alt-text (10 classes + missing_alt_text lint), per-principal rate limiting, audit
logging, real pip-audit --strict CI gate, mechanized anti-slop rules (A1/A2/A3/B3), SCORM Cloud
CI conformance gate (private repo), and a new non-blocking WCAG game a11y audit tool
(npm run a11y-audit in CI). Still 25 MCP tools, all additive — no server-side LLM.

Full changelog: https://github.com/kemalyy/edumints-scorm-mcp/blob/main/CHANGELOG.md#140--2026-07-23

v1.3.0 — SVG assets, block sizing, opt-in narration

Choose a tag to compare

@kemalyy kemalyy released this 09 Jul 11:33

SVG diagram pipeline + block sizing + opt-in narration. 25 MCP tools. All additive — existing
specs unchanged, no server-side LLM.

Added

  • svg_to_asset tool (25th tool) — turn a Claude-generated SVG string into a packaged asset without
    base64 (raw svg_content); validates <svg>, returns an AssetRef (id) to use in
    media_asset_id / image_asset_id / block asset_id. Optional rasterize=true → PNG (needs
    cairosvg; clear rasterize_unavailable error otherwise). Fixes the "inline <svg> in body_html
    gets sanitized away" pitfall — use the asset pipeline (rendered as <img src=…svg>).
  • content_slide blocks[] per-block width (e.g. "60%") — image blocks can be sized + centered
    (margin-inline:auto); omitted → full width.
  • build_from_spec auto_tts (opt-in, default false) + tts_voice — auto-generates Piper
    narration for screens that have narration_text and no narration_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_unavailable error 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

v1.2.0 — richer media authoring + QTI 2.1 export

Choose a tag to compare

@kemalyy kemalyy released this 09 Jul 11:35

Richer media authoring (content_slide blocks, per-item images, inline assets), screen reorder, and
QTI 2.1 export. 24 MCP tools. All additive — existing specs unchanged, no server-side LLM.

Added — richer media authoring + screen reorder (W9)

  • content_slide multi-block (blocks[]) — optional ordered list of {html} / {asset_id, caption?}
    blocks → interleave paragraph → image → paragraph → image in one screen (no more 3-consecutive-slide
    workaround). Falls back to body_html/media_asset_id when blocks is absent; body_html is now optional.
  • Per-item images — optional image_asset_id on accordion and tabs items, on timeline
    events; front_asset_id/back_asset_id on flashcards. All optional/backward-compatible.
  • reorder_screens tool (24th MCP tool) — reorder a project's screens to an explicit id order
    (validates the set matches all existing screens). add_screen still appends.
  • Inline images in *_html — sanitizer now allows data: URIs on <img> (inline base64
    icons), and {{asset:<id>}} tokens in any *_html interpolate to the packaged asset (self-contained,
    unlike external <img src>). Validator extended to check per-item / block asset references.

Added — QTI 2.1 export (W8a)

  • export_qti tool (23rd MCP tool) + core/qti.py: quiz screens → IMS QTI 2.1 assessmentItem
    XML. mcq/true_falsechoiceInteraction, fill_blanktextEntryInteraction, with
    correctResponse + standard match_correct response processing. Deterministic XML (lxml), so
    content becomes portable to QTI-compatible systems. Unmappable types are silently skipped (no fake
    conversion); no server-side LLM. Returns {count, items:[{filename, xml}]}. See docs/QTI.md.

Full changelog: https://github.com/kemalyy/edumints-scorm-mcp/blob/main/CHANGELOG.md#120--2026-06-24