mcpField
S
SCORM Packager (HTML → SCORM 2004)

SCORM Packager (HTML → SCORM 2004)

ローカル
github.com科学・教育68 週間前に更新

SCORM Packager (HTML → SCORM 2004) について

SCORM Packagerは、HTMLコースや対応する学習プラットフォームのエクスポートをSCORM 2004または1.2のパッケージに変換します。コース制作者やLMS運用者向けで、HTMLを保ちつつオフライン用アセットと学習トラッキングを追加し、既存パッケージも検証できます。

主な機能

  1. 01HTMLをSCORM 2004または1.2に変換
  2. 02オフライン用アセットのインライン化
  3. 03完了度・進捗・スコアの記録
  4. 04コース群の一括変換
  5. 05既存SCORMパッケージの検証

活用シーン

  1. 01HTML教材のLMSインポート準備
  2. 02モバイル学習コンテンツの移行
  3. 03LMSがパッケージを拒否する原因の調査

MCP 対応

MCPサーバーは、パッケージ作成用の`scorm_package`、SCORMアーカイブ検証用の`scorm_validate`、ヘルスチェック用の`scorm_selftest`を提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
npmscorm-mcp-server2.3.0
mcpbscorm-mcp-server-2.3.0.mcpb2.3.0

ツール

3

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
htmlstringいいえ変換する生の HTML コンテンツ(Claude Design の出力など)。これか input_path のどちらかを指定します。
batchbooleanいいえinput_path を複数のコースを含む DIRECTORY として扱います(各サブディレクトリ、.zip、.html ファイルが 1 コース)。コースごとに 1 つのパッケージと統合レポートを生成します。コースタイトルのデフォルトはフォルダー/ファイル名です。`title` はプレフィックスとして使用されます。
titlestringいいえコース/モジュールのタイトル。LMS に表示される manifest、organization、item のタイトルとして使用します。HTML 入力では必須です。モバイル学習の Excel エクスポートでは任意で、テンプレートファイル名から生成されます。
formatenumいいえ入力形式。'auto'(デフォルト)では署名から Claude Design .dc バンドルを検出します。上書きすると特定の処理パイプラインを強制できます。auto | self-contained-html | claude-design
base_urlstringいいえネットワーク経由で相対/ルート相対アセット参照を解決するベース URL です(HTML が相対 URL を使用し、input_path が指定されていない場合にのみ必要です)。
languagestringいいえコンテンツの言語タグ(BCP-47)。例:'fr-FR'、'en-US'、'it-IT'。デフォルト:'fr-FR'。ソースで宣言されていない場合は <html lang> に適用されます。
identifierstringいいえManifest 識別子。省略時は title から自動生成されます。
input_pathstringいいえディスク上の HTML ファイルの絶対パス。そのフォルダーを相対アセットの解決に使用します。これか html のどちらかを指定します。
output_dirstringいいえ.zip パッケージの出力先ディレクトリ。デフォルトは $SCORM_OUTPUT_DIR または ~/scorm-packages です。
vendor_cdnbooleanいいえClaude Design(.dc)バンドルの場合:CDN ライブラリ(React/Babel…)をパッケージにダウンロードし、オフラインで実行できるようにします(window.__resources 経由、ソースのパッチ適用は不要)。デフォルト:true。
mastery_scorenumberいいえ合格しきい値 0..1。スコアに基づく合否判定(cmi.score.scaled から passed/failed を設定)を有効にし、manifest に sequencing objectives を追加します。コンテンツは window.SCORM2004.score(raw,min,max) または 'scorm:score' CustomEvent を通じてスコアを報告します。
scorm_versionenumいいえ生成するパッケージの SCORM エディションです。'2004'(デフォルト、第 4 版)または旧式の LMS 用の '1.2' を指定します。挿入されるランタイムは両方の LMS API に適応して動作します。この指定は manifest と同梱 schemas を制御します。2004 | 1.2
auto_milestonesbooleanいいえHTML に [data-jalon] マイルストーンが宣言されていない場合、ドキュメント構造(sections、次に articles、次に headings。最大 8 個)から 'view' マイルストーンを自動生成します。デフォルト:true。
success_on_completionbooleanいいえモジュール完了時に cmi.success_status='passed' も報告します(data-scorm-success="on-completion" の追加と同等)。デフォルト:false。

詳細

scorm-mcp-server

自己完結型の HTML、Claude Design の .dc バンドル、または モバイルラーニングプラットフォームのコンテンツエクスポート(Excel のアクティビティテンプレート+メディア)を、あらゆる LMS にインポートできる SCORM 2004(または 1.2) パッケージに変換します。アセットを埋め込んで 100%オフラインで動作し、完了状況/進捗/スコアのトラッキングを追加し、ADL スキーマを同梱します。

オンラインで試す giacomomaria81/scorm-mcp-server MCP server npm ライセンス:MIT Node SCORM MCP テスト 検証済み

SCORM テストハーネスのデモ

同梱のローカルハーネス(scorm-test-harness.html)でパッケージを再生した様子:進捗 0 → 100%、完了状況、LMS API 呼び出しのライブログ(エラー 0 件)。イメージ画像。

3 つのツールを提供する MCP サーバーです。scorm_package は完成した HTML 学習モジュールを、SCORM 準拠のあらゆる LMS にインポートできる .zip(PIF)に変換します。scorm_validate は既存の SCORM zip(どのツールで作成されたものでも)を検査し、LMS が拒否する理由を正確に説明します。scorm_selftest は 1 秒で完了するヘルスチェックです。

原則:書き換えずにラップする。 HTML はそのまま保持され、ツールが行うのは次の処理だけです。

  1. すべてのアセット(CSS、@import、フォント、JS、画像、srcset、ファビコン)をデータ URI として埋め込みます → 100%オフラインで動作します。
  2. 小さなランタイムを追加し、セッションをまたいだ 再開に対応しながら、完了状況、進捗(%)、所要時間を報告します。
  3. マニフェストを生成し、公式 ADL XSD スキーマ 15 個を同梱します — マニフェストはスキーマに照らして検証されます(単なる「整形式」ではなく、実際の適合性を確認します)。

✅ 状況 — 実際の LMS で検証済み

  • 自動チェック 325/325 件に合格:コンバーター 23 件 · ランタイム 15 件 · MCP 15 件 · スキーマ適合性(xmllint)1 件 · セキュリティ 6 件 · 機能 11 件 · 自動マイルストーン 13 件 · V2(バンドル/.dc/スコア)21 件 · 出力ディレクトリ 10 件 · トラッキングシグナル 9 件 · 強化 32 件 · SCORM 1.2 29 件 · CLI/バッチ 12 件 · Web UI 16 件 · モバイルラーニング移行 44 件 · パッケージ検証 35 件 · 設問レベルのインタラクション 33 件 — さらに、追加の厳格ランタイムチェック(scorm-again)6 件。
  • SCORM Cloud(実際の LMS): 問題なくインポートされ(SCORM 2004 4th Ed. と認識、「マニフェストに問題はありません」)、ダッシュボードには 完了状況 = 完了、合格状況 = 合格、時間を記録済みと表示されます。

入力形式

入力(input_path または html)処理
自己完結型の単一 .html(例:Claude Design の「standalone HTML」エクスポート)アセットを埋め込み、ランタイムを追加 — v1 の処理経路
フォルダーまたは .zip(複数ファイルのモジュール)ツリー全体を保持し、エントリー HTML にアセットを埋め込み、すべてのファイルをマニフェストに記載
Claude Design の .dc バンドル(*.dc.html + support.js + _ds/)自動検出し、CDN ライブラリ(React/Babel など)を window.__resources 経由でオフライン用に同梱(ソースのパッチ不要)。ランタイムは support.js の前に追加
モバイルラーニングプラットフォームのコンテンツエクスポート(Excel のアクティビティテンプレート+media/)自動検出し、テンプレートからインタラクティブな HTML コースを再構築します — 情報/トランジション/フラッシュカード、クイズの設問、メディアコード([media:…]、[H1:…]、[quote:…]、!!)、cmi.score を報告する採点付きクイズ — その後パッケージ化します。コースのタイトルはテンプレート名から取得します。--batch を使うと、カタログ全体を一度の実行で移行できます

.dc バンドルはフォルダーまたは .zip として渡してください(単独の .dc.html は、関連ファイルがないと機能しません)。

スコアとクイズ(任意)

mastery_score(0..1)を設定すると、スコアに基づく合否判定が有効になり、マニフェストにシーケンス目標が追加されます。コンテンツからスコアを1行で報告してください。SCORM の知識は不要です。

window.SCORM2004.score(8, 0, 10);                                   // raw, min, max
window.dispatchEvent(new CustomEvent("scorm:score",    { detail: { raw: 8, min: 0, max: 10 } }));
window.dispatchEvent(new CustomEvent("scorm:progress", { detail: 0.5 }));  // 0..1
window.dispatchEvent(new CustomEvent("scorm:complete"));

ランタイムはこれらを cmi.score.* に対応付け、mastery_score に基づいて success_status = passed/failed を設定し、完了状況と進捗を報告します。(dc:* イベント名もエイリアスとして使用できます。)

設問単位のトラッキング(v2.3) — 各回答を cmi.interactions レコードとして報告することで、LMS の成績表に合計点だけでなく、どの設問を間違えたかも表示できます。

window.SCORM2004.interaction({
  id: "quiz1-q3", type: "choice",
  description: "Which colour is the brand?",
  learnerResponse: "Blue", correctResponse: "Red",
  result: false, latencyMs: 12000,
});
// or, without touching the API:
window.dispatchEvent(new CustomEvent("scorm:interaction", { detail: { id: "q3", result: true } }));

方言に対応(2004 の learner_response/timestamp と 1.2 の student_response/time、incorrect と wrong)しており、設計上、可能な範囲で処理します。LMS がインタラクションの書き込みを拒否した場合は警告がログに記録され、セッションは続行されます。モバイルラーニングの移行で生成されたクイズは、各設問について、設問文、学習者の回答、正答、回答時間を含むレコードを1件ずつ、自動的にインタラクションとして報告します。

SCORM 1.2、バッチモード、CLI(v2.1)

SCORM 1.2 — scorm_version: "1.2" を渡すと、1.2 のマニフェストが生成されます(同梱の 1.2 XSD で検証され、mastery_score が設定されている場合は adlcp:masteryscore も含まれます)。注入されるランタイムは適応型で、ホスト側の LMS が公開する API(API_1484_11 または API)に接続し、データモデル(単一の lesson_status、0-100 のスコア、HH:MM:SS 形式のセッション時間、4096 文字の中断データ)を対応付けます。また、passed ステータスをより低いステータスに変更することはありません。

バッチ — batch: true を指定すると、input_path をコースのディレクトリとして扱います(各サブディレクトリ、.zip、または .html が1つのコースになります)。コースごとに1つのパッケージが生成され、統合された batch-report.json が作成されます。1つのコースに問題があっても、ほかのコースには影響しません。

CLI — MCP クライアントは不要です。

npx -y scorm-mcp-server ui            # local drag & drop web UI
npx -y scorm-mcp-server pack course.html --title "My course"
npx -y scorm-mcp-server pack ./courses --batch --scorm-version 1.2
npx -y scorm-mcp-server validate pkg.zip   # conformance-check an existing package
npx -y scorm-mcp-server selftest      # 1-second health check

Web UI — ui を実行すると、localhost のページが開きます。.html または .zip をドロップし、SCORM のエディションと任意の合格点を選んで、パッケージをダウンロードできます。すべてお使いのマシン上で実行され、ファイルがアップロードされることはありません。

ライブラリ — buildPackage() は、パイプラインや SaaS バックエンド向けの公開 API です。

import { buildPackage } from "scorm-mcp-server";
const r = await buildPackage({ html, title: "My course", scormVersion: "1.2", masteryScore: 0.6 });
// r.zip (Buffer) · r.fileName · r.warnings · r.milestoneIds …

診断 — scorm_selftest MCP ツールは、組み込みの固定 HTML をパッケージ化し、バージョン、所要時間、出力パスを報告します。これにより、「サーバーの問題」と「入力の問題」を1秒で切り分けられます。

任意の SCORM パッケージを検証(v2.3)

「この zip が LMS に拒否されるのはなぜ?」— scorm_validate は、ここで生成されたものに限らず、あらゆる SCORM パッケージを検証します。入力は変更されません。

npx -y scorm-mcp-server validate course.zip          # human-readable report
npx -y scorm-mcp-server validate course.zip --json   # machine-readable

検証項目:zip の読み取り可否、ルートにある imsmanifest.xml(よくある「フォルダーごと zip にした」間違いを検出し、修正方法を提示します)、マニフェストの形式、SCORM エディション(2004/1.2)の検出、起動可能な組織/アイテム/リソースの連鎖、起動ファイルとアーカイブ内のすべての <file href> の存在(大文字・小文字のみが異なる不一致に警告します。Windows では動作しても、Linux の LMS サーバーでは失敗します)、さらに公式 ADL スキーマに対する完全な XSD 検証。パッケージ内の XSD を優先して使い、ない場合は埋め込みコピーにフォールバックするため、スキーマが同梱されていないパッケージも検証できます。CI パイプライン向けに終了コード 0/1 を返します。また、scorm_validate MCP ツールと validatePackage() ライブラリ API としても利用できます。

インストール

オプション 0 — インストールせずにオンラインで試す

https://scormpackager.vercel.app — コースをドロップし、SCORM のエディションを選んで、パッケージをダウンロードできます。 ファイルはメモリ上で処理され、保存されませんが、サーバーには送信されます。 実際の作業には、何もマシンの外部に送信されない以下のローカルオプションをお使いください (4 MB の制限もありません)。

オプション A — ワンクリック(推奨)

Releases から scorm-mcp-server-x.y.z.mcpb をダウンロードし、Claude Desktop → Settings → Extensions で .mcpb をドラッグ&ドロップして、出力フォルダーを選び、有効にします。

オプション B — npm(任意の MCP クライアント)

インストール手順は不要です。クライアントの MCP 設定に以下を追加します(Claude Desktop の場合は ~/Library/Application Support/Claude/claude_desktop_config.json)。

{
  "mcpServers": {
    "scorm": {
      "command": "npx",
      "args": ["-y", "scorm-mcp-server"],
      "env": { "SCORM_OUTPUT_DIR": "/ABSOLUTE/PATH/scorm-packages" }
    }
  }
}

レジストリ名:io.github.giacomomaria81/scorm-mcp-server(MCP レジストリ)。

オプション C — ソースから(開発者向け)
git clone <this-repo> && cd scorm-mcp-server
npm install        # dist/ is prebuilt; npm run build is optional

次に、設定で node /ABSOLUTE/PATH/scorm-mcp-server/dist/index.js を指定します。

Claude を再起動します。これで scorm_package ツールを利用できます。

使い方

会話の中で、Claude Design を使ってモジュールを作成し、**「このモジュールを SCORM としてパッケージ化して」**と伝えます。Claude が scorm_package を呼び出し、.zip のパスを返します。

進捗と完了 — そのまま使えます

事前準備は不要です。HTML でマイルストーンが宣言されていない場合、パッケージャーがドキュメント構造から自動生成します(セクション → 記事 → 見出し、最大 8 個、トリガーは view)。通常の HTML でも、最初から意味のある進捗を確認できます。auto_milestones: false で無効にできます。HTML に手を加えず、完了時に success_status = passed にしたい場合は、success_on_completion: true を渡します。

宣言型マイルストーン(細かく制御する場合に推奨)

意味のあるステップを HTML に直接指定します。明示的に指定したマイルストーンは常に自動生成より優先されます。ランタイムは progress_measure = milestones_reached / total を計算し、すべてに到達すると completion_status = "completed" に設定します。

属性効果
data-jalon="unique-id"マイルストーンを宣言します
data-trigger="view"表示範囲内にスクロールされたときに到達します(デフォルト)
data-trigger="click"クリック時に到達します
data-trigger="ended"動画または音声の再生終了時に到達します
<section data-jalon="intro"       data-trigger="view">…</section>
<button  data-jalon="read-pitch"  data-trigger="click">I read it</button>
<video   data-jalon="demo"        data-trigger="ended">…</video>

推奨:マイクロモジュールあたり 4~8 個のマイルストーン。再開は自動です(cmi.suspend_data + cmi.location)。進捗が後退することはありません。

プログラムによるマイルストーン — window.SCORM2004.reach("quiz-passed") は、ID を持つ data-jalon 要素がなくても動作します。未登録の ID はその場で宣言され、合計数に加算されます。正確な分母を保つため、到達前に登録するには、早い段階で window.SCORM2004.declare("quiz-passed") を使用します。どちらも再開後に保持されます。

成功ステータス(オプトイン) — 任意の要素(例:<body>)に data-scorm-success="on-completion" を追加すると、モジュールの完了時にランタイムが cmi.success_status="passed" も設定します。指定しない場合、success_status は書き込まれません。

言語 — ソース HTML で言語が宣言されていない場合、ツールの language(BCP-47、デフォルトは fr-FR)が <html lang="…"> に適用されます。

セキュリティ — アセット参照はモジュールフォルダー内に制限されます。フォルダー外を指す ../ または絶対パスはインライン化されず、警告が出力されます。

LMS アカウントなしでテストする

小さなローカルサーバー経由で scorm-test-harness.html を開き、生成した .zip をドロップします。

python3 -m http.server 8000   # then open http://localhost:8000/scorm-test-harness.html

進捗率、完了状態、LMS API 呼び出しの全ログがリアルタイムで表示されます(エラーは 0 件が想定されます)。

ビルドとテスト

npm install
npm run build     # tsc -> dist/
npm test          # 325 checks across 17 suites (xmllint required for the schema tests)

# bonus: validate against a strict independent SCORM 2004 runtime
npm i -D scorm-again && node test/scorm-again.test.mjs

要件:Node ≥ 20、およびスキーマテスト用の xmllint(libxml2-utils)。

プロジェクト構成

src/        index.ts (MCP server + CLI) · converter.ts (inlining + manifest + zip) · runtime.ts (injected SCORM runtime) · validate.ts (package conformance checker) · tom.ts (mobile-learning migration) · ui.ts (local web UI)
dist/       compiled output (shipped)
schemas/    15 ADL XSD (SCORM 2004 4th Ed.) + schemas12/ (4 XSD SCORM 1.2), bundled into every package
test/       17 suites (converter / runtime / mcp / schema / validation / interactions / migration…) + fixtures
ARCHITECTURE.md           design decisions, data flow, testing strategy
scorm-test-harness.html   local browser SCORM player (fake LMS, no account)
manifest.json             MCPB manifest (for building the .mcpb desktop extension)

プライバシーポリシー

この拡張機能は完全にローカルで実行されます。データ収集、テレメトリー、第三者への送信はありません。ネットワークを使用するのは、オフラインパッケージに埋め込むために、ユーザー自身の HTML が参照するアセットをダウンロードする場合のみです。ポリシー全文:PRIVACY.md。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。