v1.2.0 — richer media authoring + QTI 2.1 export
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_slidemulti-block (blocks[]) — optional ordered list of{html}/{asset_id, caption?}
blocks → interleaveparagraph → image → paragraph → imagein one screen (no more 3-consecutive-slide
workaround). Falls back tobody_html/media_asset_idwhenblocksis absent;body_htmlis now optional.- Per-item images — optional
image_asset_idonaccordionandtabsitems, ontimeline
events;front_asset_id/back_asset_idonflashcards. All optional/backward-compatible. reorder_screenstool (24th MCP tool) — reorder a project's screens to an explicit id order
(validates the set matches all existing screens).add_screenstill appends.- Inline images in
*_html— sanitizer now allowsdata:URIs on<img>(inline base64
icons), and{{asset:<id>}}tokens in any*_htmlinterpolate 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_qtitool (23rd MCP tool) +core/qti.py: quiz screens → IMS QTI 2.1assessmentItem
XML.mcq/true_false→choiceInteraction,fill_blank→textEntryInteraction, with
correctResponse+ standardmatch_correctresponse 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}]}. Seedocs/QTI.md.
Full changelog: https://github.com/kemalyy/edumints-scorm-mcp/blob/main/CHANGELOG.md#120--2026-06-24