
SCORM Packager (HTML → SCORM 2004)
io.github.giacomomaria81由 GitHub 帳號 giacomomaria81 發布v2.3.0更新於 Oct 25, 2026
Turn HTML or mobile-learning exports into SCORM 2004/1.2 packages, and validate any SCORM zip.
概覽
一個本機 MCP 伺服器,可將 HTML 學習模組打包成 SCORM 2004 或 1.2 的 zip 檔,並驗證既有的 SCORM 套件。
- 可以做什麼
- 將完成的 HTML 模組、資料夾、zip、設計包或行動學習匯出內容打包成 SCORM zip,資源內嵌以便離線執行,並注入完成度、進度與分數追蹤,支援 SCORM 2004 或 1.2,也可依課程目錄批次處理。驗證任何 SCORM zip(包括其他工具產生的),說明 LMS 為何會拒絕它。執行快速自我測試,打包內建範例,以區分伺服器故障與輸入問題。
- 適用情境
- 當你已有完成的 HTML 課程或學習匯出內容、需要產生可匯入 LMS 的 SCORM 套件時使用;也適合 LMS 拒絕某個 SCORM zip、需要診斷原因時。適合課程作者與線上學習流程,而非一般程式開發工作。
- 執行需求
- 以 Node.js 本機程序執行(Node 20 或更新版本),可透過 npx 或桌面擴充套件啟動;不需帳號或 API 金鑰。需將 SCORM_OUTPUT_DIR 設為產生 zip 的絕對輸出資料夾,預設為目前工作目錄。僅在下載你自己 HTML 引用的資源時存取網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 SCORM Packager (HTML → SCORM 2004),將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
scorm-mcp-server
Turn self-contained HTML, a Claude Design
.dcbundle or a mobile-learning platform content export (Excel activity templates + media) into a SCORM 2004 (or 1.2) package ready to import into any LMS — assets inlined for 100% offline, completion / progress / score tracking injected, ADL schemas bundled.
[Try it online] [giacomomaria81/scorm-mcp-server MCP server] [npm] [License: MIT] [Node] [SCORM] [MCP] [Tests] [Validated]
The bundled local harness (scorm-test-harness.html) playing a package: progress 0 → 100%, completion, and the live LMS API-call log (0 errors). Illustration.
An MCP server exposing three tools: scorm_package converts a finished HTML learning module into a .zip (PIF) any SCORM-compliant LMS can import, scorm_validate checks any existing SCORM zip (made by any tool) and explains exactly why an LMS would reject it, and scorm_selftest is a 1-second health check.
Principle: WRAP, don't rewrite. Your HTML is preserved; the tool only:
- Inlines every asset (CSS,
@import, fonts, JS, images,srcset, favicons) as data URIs → runs 100% offline. - Injects a small runtime that reports completion, progress (%) and time spent, with resume across sessions.
- Generates the manifest and bundles the 15 official ADL XSD schemas — the manifest is validated against them (real conformance, not just "well-formed").
✅ Status — validated on a real LMS
- 325/325 automated checks green: 23 converter · 15 runtime · 15 MCP · 1 schema conformance (
xmllint) · 6 security · 11 features · 13 auto-milestones · 21 V2 (bundle /.dc/ score) · 10 output-dir · 9 tracking-signal · 32 hardening · 29 SCORM 1.2 · 12 CLI/batch · 16 web UI · 44 mobile-learning migration · 35 package validation · 33 question-level interactions — plus 6 bonus strict-runtime checks (scorm-again). - SCORM Cloud (real LMS): imports cleanly (recognized as SCORM 2004 4th Ed., "manifest looks great"), and the dashboard reports completion = complete, success = passed, time tracked.
Input formats
Pass a .dc bundle as its folder or .zip (not the lone .dc.html, which is inert without its siblings).
Scores & quizzes (optional)
Set mastery_score (0..1) to enable score-based success and add sequencing objectives to the manifest. Report the score from your content in one line — no SCORM knowledge required:
The runtime maps these to cmi.score.*, sets success_status = passed/failed against mastery_score, and reports completion/progress. (dc:* event names are accepted as aliases.)
Question-level tracking (v2.3) — report each answer as a cmi.interactions record, so the LMS gradebook shows which questions were missed, not just the total:
Dialect-aware (2004 learner_response/timestamp vs 1.2 student_response/time, incorrect vs wrong) and best-effort by design: an LMS that refuses interaction writes gets a logged warning and the session carries on. Quizzes generated by the mobile-learning migration report their interactions automatically — one record per question, with the question text, the learner's answer, the expected answer and the latency.
SCORM 1.2, batch mode, CLI (v2.1)
SCORM 1.2 — pass scorm_version: "1.2" and you get a 1.2 manifest (validated
against the bundled 1.2 XSDs, with adlcp:masteryscore when mastery_score is
set). The injected runtime is adaptive: it speaks to whichever API the hosting
LMS exposes (API_1484_11 or API), maps the data model (single
lesson_status, 0-100 score, HH:MM:SS session time, 4096-char suspend data)
and never downgrades a passed status.
Batch — batch: true treats input_path as a directory of courses (each
sub-directory, .zip or .html = one course). One package per course, one
consolidated batch-report.json, and a broken course never sinks the others.
CLI — no MCP client required:
Web UI — ui opens a localhost page: drop an .html or .zip, pick the SCORM
edition and an optional pass mark, download the package. Runs entirely on your
machine; nothing is uploaded anywhere.
Library — buildPackage() is a public API for pipelines and SaaS backends:
Diagnostic — the scorm_selftest MCP tool packages a constant built-in HTML
and reports version, duration and output path: it separates "server broken"
from "input problem" in one second.
Validate any SCORM package (v2.3)
"Why does my LMS reject this zip?" — scorm_validate answers it for any SCORM package, not only those produced here, and the input is never modified:
Checks: zip readability, imsmanifest.xml at the ROOT (detects the classic "zipped the folder instead of its contents" mistake and says how to fix it), well-formed manifest, SCORM edition detection (2004/1.2), launchable organization/item/resource chain, launch file and every <file href> present in the archive (case-only mismatches flagged — they work on Windows and fail on Linux LMS servers), and full XSD validation against the official ADL schemas — using the package's own XSDs first and falling back to the embedded copies, so packages that ship without schemas validate too. Exit code 0/1 for CI pipelines; also exposed as the scorm_validate MCP tool and the validatePackage() library API.
Install
Option 0 — try it online, no install
https://scormpackager.vercel.app — drop a course, pick the SCORM edition, download the package. Files are processed in memory and never stored, but they do travel to a server; for real work use the local options below, where nothing leaves your machine (and there is no 4 MB limit).
Option A — one-click (recommended)
Download scorm-mcp-server-x.y.z.mcpb from the Releases, then in Claude Desktop → Settings → Extensions, drag-drop the .mcpb, pick an output folder, and enable it.
Option B — npm (any MCP client)
No install step: add this to your client's MCP config (~/Library/Application Support/Claude/claude_desktop_config.json for Claude Desktop):
Registry name: io.github.giacomomaria81/scorm-mcp-server (MCP registry).
Option C — from source (developer)
Then point the config at node /ABSOLUTE/PATH/scorm-mcp-server/dist/index.js.
Restart Claude. The scorm_package tool is now available.
Usage
In a conversation: build your module with Claude Design, then say "package this module as SCORM." Claude calls scorm_package and returns the path to the .zip.
Progress & completion — it just works
You don't have to prepare anything: if your HTML declares no milestone, the packager auto-generates them from the document structure (sections → articles → headings, capped at 8, trigger view). Plain HTML gets meaningful progress out of the box. Disable with auto_milestones: false. Want success_status = passed on completion without touching the HTML? Pass success_on_completion: true.
Declarative milestones (recommended for fine control)
Mark the meaningful steps directly in your HTML — explicit milestones always take precedence over auto-generation. The runtime computes progress_measure = milestones_reached / total, and sets completion_status = "completed" once all are reached.
Recommended: 4–8 milestones per micro-module. Resume is automatic (cmi.suspend_data + cmi.location); progress never regresses.
Programmatic milestones — window.SCORM2004.reach("quiz-passed") works even if the id has no data-jalon element: unknown ids are declared on the fly and count in the total. To register one before it's reached (accurate denominator), use window.SCORM2004.declare("quiz-passed") early. Both survive resume.
Success status (opt-in) — add data-scorm-success="on-completion" on any element (e.g. <body>) and the runtime also sets cmi.success_status="passed" when the module completes. Without it, success_status is never written.
Language — the tool's language (BCP-47, default fr-FR) is applied as <html lang="…"> when the source HTML doesn't declare one.
Security — asset references are confined to the module folder: ../ or absolute paths outside it are never inlined (a warning is emitted instead).
Test it without an LMS account
Open scorm-test-harness.html via a tiny local server and drop a generated .zip into it:
You'll see live progress %, completion, and the full log of LMS API calls (0 errors expected).
Build & test
Requirements: Node ≥ 20, and xmllint (libxml2-utils) for the schema test.
Project structure
Privacy Policy
This extension runs entirely locally: no data collection, no telemetry, no third parties. The only network activity is downloading assets that your own HTML references, to embed them into the offline package. Full policy: PRIVACY.md.
License
來源:README.md,提交 fd5f110
工具
0版本歷史
1- v2.3.0最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分