scorm-mcp-server
scorm-mcp-server
自己完結型のHTML、Claude Designの
.dcバンドル、またはモバイル学習プチューットフォームのコンテンツ書き出し(エクエル・アクティビティ・テンプレート+メディア)を、どのLMSにでもインプート可能なSCORM 2004(または1.2)パッケージに変換します。アセットは真オフラインのためインライン化され、完了/進捗/スコアのトcollaborativeイングが注入され、ADLスキーマも同梆されます。
[![Try it online上で試す]…
同梆のローカル・ハーネ(scorm-test-harness.html)がパッケージを実ブ: 進捗 0→100%、完了、そして live なLMS、API呼び出しログ(エラー0)。イラスト。
証 明すべきM三等MCPサーバー: scorm_package は完成済みのHTML学習モジュールを、SCORM準拠のLMSであれどもインポートできる.zip(PI)に変換します。scorm_valideate は、どのツールで作られたものでも既存のSCORM zipを検証し、LMSがそれを拒否する理由を厳しく説明します。scorm_self test は、1秒で完了すヘチエックです。
**原理 : WRAP(包む)であって、書換ではありません。**あなたのHTMLは保られます。ツールは次のみを行みます:
すべてのアセット(CSS、
@import、フォント、JS、画像、srcset、ファビコン)をdata URIとしてインライン化 → 100%のラタイン動作。小さなラ・タイムを注入します。これが完了、進捗(%)、滞在時マを報告し、セッションのまタ再開(sum)にます。
マニフェストを生成し、定の的人であるADL XSDスキーマ 15件を同梆します。マニフェストはそれラのスキーマにタ基づいいて検証されます(単なる「well-formed」ではなく、実な準拠性)。
✅ 状況 — 実のLMSで検証済み
自動チエック 325/325 件:コンバータ 23・ラ・タイム 15・MCP 15・スキーマ準拠1(
xllint)・六セキュリュリ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): クリーンにインポートされ、ダッシュボードに完了と成功、所要時間が報告されます。
Related MCP server: Connectry Architect Cert
入力形式
入力( | 処理 |
自己完結型 | アセットをインライン化、ラ・タイムを注入 — v1パス |
フォルダまた | ツリー全部保持、イandトリー HTML インライン化、マニフェストに全ファイルを一覧 |
Claude Design | 自動検出。CDNラブラリ(React/Babel…)は |
モバイル学習プチーフォームのコンテンツ書き出し(Excelアクティビティテンプレート+ | 自動検出。テンプレートからインターアクティブな HTMLコースを再构築します:情報、移、フラッシュカード、クイズ問、メディア・コード( |
.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 = passe or failed を設定、完了/を報告します。(表記に)、ci:* イベント名をエイリア・スとしてもトします。)
質問レベルのトラッキング(v2.3) : 各问答解を cmi.inteactions レコードとして報告するため、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版は enner_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.2XSDで検証され、mastery_score が設定されてる場合は adlp:masteryscore も含む)。注入るラ・タイムは****適応的**: ホスティングLMSが提所属すAPI(API_1484_11ま API)に担架し、データモデル(lesson_status 一、0-100スコア、HH:MM:SS セッション時間、4096字のサスペンドデータ)に対応。passed ステータス・チるダウングレードすることはありません。
バッチ: batch: true を渡すと input_path はコースのディレートリとして扱われ(各サブデレクトリ、.zip、または .html がコース)。コースごとにパッケージ、統合られたbatch-report.jsonが生成され、壊れたコースが他のコースに壊影響をえることはありません。
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 checkWebUI: ui を指定すると、ローカルホストのページが開きます。.htl また.zip をドップロッ、SCORM版、任意の合格値、そして「パッケージをダウンロード」を選択。すべてあなたのマシン上で動作し、どこかにップロードされることはありません。
ライブラリ: パイプリンとSaaS のバックエンドに「公開API」として buildPackage() を提供:
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)
「どうして私のLMSがこのzipを拒否するの?」— 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)、起動可能な組織・item・resource チェーン、起動ファ・イとアーカイブ内の全<file href>(Windowsでは有効、LinuxのLMSサーバーでは失効する大文字・小文字だの不一致も検出)、そして公式ADLスキーマに対する完全なXSD検証。パッケージ自身のXSDを優先し、なければ環込みコピーにフォルバックするため、XSDを同梆しないパッケージも検証できます。終了コー0/1でCIパイプリンに利用可。scorm_validate MCPツールと validatePackage() ライブラリAPIとしても公開。
セットアップ
オプション0 — インストールせすにオンラインで試す
<https://scp的方式で — https色packager.vercel.app> — コースをドップロパ、SCORM エデッシンを選択、してパッケージを入手。ファ・イはメモリ上で理され、保存されないません。たたし、サーバーには送られます。本番半の作業なら、以下地のローカルな手順を使ってください。何もあなたのマシン外に出ません(そして4MB制限もありません)。
オプション A — ワンクリック(推奨)
Release から**scorm-mcp-server-1.2.3.Ifc** をダウンロードし、Claude Desktop → 経由 → 拡張機能 で .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(名前レジスト。
オプション 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/dis.t/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") は、data-moment 要素が無くっても動作ります。未知のIDはその場で定義され、全体に加算されます。正確な「分母」を確保ために、その前に window.SCORM2004.declare を呼び出しておきます。どちらも再開後も継続されます。
成功ステータス(オプトイン): 任意の要素(例:<body>)に data-scorm-success="on-completion" を追加すると、ランタイムは、完了時に cmi.success_status="passed" も設定します。「それなし」では、scop と success_status は決して書かれません。
言語 — ツールの language(BCP、47、デフォルトは fr-FR)は、ソースHTMLが言語を宣言していない場合、< html lang="…"> として適用されます。
セキュリティ — アセット参照はモジュールフォルダ内に限定され、モジュールフォルダ外を参照する ../ や絶対パスはインライン化されません(代わりに警告が出力されます)。
LMSアカウントなしでテストする
小さなローカルサーバーで scorm-test-hrness.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 # 102 checks: converter + runtime + mcp + schema + security + v2 (xmllint required)
# 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
ライセンス
Available Tools
3 toolsscorm_packagePackage HTML as SCORM (2004 or 1.2)ADestructive
Convert a self-contained HTML document, a folder, a .zip, a Claude Design (.dc) bundle OR a mobile-learning platform content export (Excel activity templates + media) into a SCORM package (.zip) — SCORM 2004 4th Edition by default, or SCORM 1.2 for legacy LMSs.
Use this to turn a finished learning module (for example HTML produced by Claude Design) into a file that any SCORM-compliant LMS can import. The conversion is faithful: the HTML is preserved, external assets are inlined as data URIs so the package runs 100% offline, and a small runtime is injected to report completion and progress.
MIGRATION FROM MOBILE-LEARNING PLATFORMS: if the input zip/folder contains Excel activity templates (mobile course cards, quiz games...) plus a media folder — the format produced by the platform's content export — the tool rebuilds an interactive HTML course from them (info/transition/flash cards, scored quizzes reporting cmi.score, media embedded, the platform's layout codes rendered) and packages it. No title needed: it is derived from the template file names. Combined with batch mode this migrates a whole course catalogue in one call.
PROGRESS / COMPLETION MODEL (milestones): The author can mark meaningful steps with data-jalon + optional data-trigger:
J'ai lu (counts on click)
... (counts when playback ends) AUTOMATIC FALLBACK: if the HTML declares NO milestone, they are generated automatically from the document structure (sections → articles → h2 → h3, capped at 8, trigger "view"). So plain HTML "just works" with meaningful progress — you do NOT need to ask the author to add attributes first. Explicit data-jalon attributes always take precedence (recommended for click/video steps). The runtime reports cmi.progress_measure = milestones_reached / total, and sets cmi.completion_status = "completed" once all milestones are reached. Progress and scroll position resume across sessions via cmi.suspend_data / cmi.location. Content can also call window.SCORM2004.reach(id) / declare(id).
Args:
html (string, optional): HTML content. Provide this OR input_path.
input_path (string, optional): path to an HTML file on disk. Provide this OR html.
title (string): course/module title shown in the LMS. Required for HTML inputs; optional for a mobile-learning Excel export (derived from the templates).
language (string, optional): BCP-47 tag, default 'fr-FR'.
identifier (string, optional): manifest id; auto-generated from title if omitted.
base_url (string, optional): base URL for resolving relative asset paths over the network.
output_dir (string, optional): where to write the .zip. Default: $SCORM_OUTPUT_DIR or ~/scorm-packages.
auto_milestones (boolean, optional, default true): auto-generate milestones when none are declared.
success_on_completion (boolean, optional, default false): also set cmi.success_status='passed' on completion.
scorm_version ('2004' or '1.2', optional, default '2004'): SCORM edition of the package. Choose '1.2' for older LMSs that reject 2004. The injected runtime is adaptive and works with both LMS APIs either way; this controls the manifest and bundled schemas.
mastery_score (number 0..1, optional): pass threshold; enables score-based success.
batch (boolean, optional): treat input_path as a DIRECTORY of courses (each sub-directory, .zip or .html = one course). Produces one package per course plus a consolidated batch-report.json; a broken course never blocks the others. The title argument becomes a prefix.
Returns JSON: { "output_path": string, // absolute path to the generated .zip "file_name": string, "scorm_version": "2004 4th Edition" or "1.2", "milestone_count": number, // milestones in the package "milestone_ids": string[], "milestones_auto": boolean, // true if they were auto-generated "size_bytes": number, "warnings": string[] }
Notes:
Validate the resulting package on SCORM Cloud (cloud.scorm.com) before production rollout.
Offline completion that syncs later is provided by the LMS mobile app downloading this package; verify your target LMS apps support offline SCORM.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | Raw HTML content to convert (e.g. the output of Claude Design). Provide this OR input_path. | |
| batch | No | Treat input_path as a DIRECTORY containing several courses (each sub-directory, .zip or .html file = one course). Produces one package per course plus a consolidated report. Course titles default to the folder/file name; `title` is used as a prefix. | |
| title | No | Course / module title, used as the manifest, organization and item title shown in the LMS. Required for HTML inputs; optional for a mobile-learning Excel export, where it is derived from the template file names. | |
| format | No | Input format. 'auto' (default) detects Claude Design .dc bundles by signature; override to force a pipeline. | |
| base_url | No | Base URL to resolve relative/root-relative asset references over the network (only needed if the HTML uses relative URLs and no input_path is given). | |
| language | No | Content language tag (BCP-47), e.g. 'fr-FR', 'en-US', 'it-IT'. Default: 'fr-FR'. Applied as <html lang> when the source declares none. | |
| identifier | No | Manifest identifier. Auto-generated from the title if omitted. | |
| input_path | No | Absolute path to an HTML file on disk. Its folder is used to resolve relative assets. Provide this OR html. | |
| output_dir | No | Directory to write the .zip package into. Defaults to $SCORM_OUTPUT_DIR or ~/scorm-packages. | |
| vendor_cdn | No | For Claude Design (.dc) bundles: download CDN libs (React/Babel…) into the package so it runs offline (via window.__resources, no source patch). Default: true. | |
| mastery_score | No | Pass threshold 0..1. Enables score-based success (passed/failed from cmi.score.scaled) and adds sequencing objectives to the manifest. Content reports the score via window.SCORM2004.score(raw,min,max) or a 'scorm:score' CustomEvent. | |
| scorm_version | No | SCORM edition of the produced package. '2004' (default, 4th Edition) or '1.2' for legacy LMSs. The injected runtime is adaptive and works with both LMS APIs; this choice controls the manifest and bundled schemas. | |
| auto_milestones | No | When the HTML declares no [data-jalon] milestone, auto-generate 'view' milestones from the document structure (sections, then articles, then headings; max 8). Default: true. | |
| success_on_completion | No | Also report cmi.success_status='passed' when the module completes (equivalent to adding data-scorm-success="on-completion"). Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already flag this as non-read-only and destructive, the description adds substantial behavioral context: assets are inlined as data URIs for 100% offline operation, a runtime is injected for progress/completion reporting, auto-fallback milestone generation is explained, and batch mode ensures 'a broken course never blocks the others'. It also discloses suspend_data/location resumption and window.SCORM2004 reach/declare methods.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with clear section labels (MIGRATION, PROGRESS/COMPLETION MODEL, Args, Returns, Notes). Every paragraph delivers distinct value—input types, milestone tagging, parameter detail, return schema, and validation advice. The only minor issue is length; a few redundant phrases could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 14 parameters, multiple input formats, a milestone system, and return-value expectations, this description is exceptionally complete. It covers the input types (including mobile-learning export), the progress/completion model with data-jalon and auto-fallback, batch isolation, the JSON return structure, and post-conversion validation advice (SCORM Cloud). It could mention format/vendor_cdn more, but the schema fills that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all 14 parameters, but the description's Args section adds practical nuance: for scorm_version it explains the adaptive runtime and manifest/schema implications; for mastery_score it mentions window.SCORM2004.score() and CustomEvent; for batch it explains the prefix behavior. However, it omits format and vendor_cdn from the Args narrative, though they appear in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Convert a self-contained HTML document, a folder, a .zip, a Claude Design (.dc) bundle OR a mobile-learning platform content export into a SCORM package (.zip)'. This clearly distinguishes it from the sibling scorm_selftest, which is for testing. The title 'Package HTML as SCORM (2004 or 1.2)' reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to turn a finished learning module (for example HTML produced by Claude Design) into a file that any SCORM-compliant LMS can import.' It gives context for legacy LMSs ('Choose '1.2' for older LMSs that reject 2004') and batch usage, but does not explicitly name alternatives (e.g., scorm_selftest), leaving the contrast implied via the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scorm_selftestSCORM packager self-testAIdempotent
Diagnostic tool with NO arguments: packages a constant built-in HTML and reports version, duration and output path. Distinguishes 'server broken' from 'input problem' in one second. Writes one small file (selftest-scorm2004.zip) into the output directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it writes a specific file (selftest-scorm2004.zip) into the output directory, which complements the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true). It also mentions reporting version, duration, and output path, providing additional behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences effectively convey purpose, use case, and side effects. The key information is front-loaded, and every sentence contributes meaning without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool, the description fully covers what it does, the output file, the reported data, and the time frame. There is no output schema, but the reporting details are sufficient. The description is complete for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage. The description explicitly states 'NO arguments', which is consistent and adds clarity for an agent, meeting the baseline for no-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a diagnostic self-test: it packages a constant built-in HTML and reports version, duration, and output path. It distinguishes itself from the sibling tool by being diagnostic with no arguments, which is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool is positioned as a diagnostic to differentiate 'server broken' from 'input problem' in one second, giving a clear use case. However, it does not explicitly name the alternative (scorm_package) or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scorm_validateValidate an existing SCORM packageARead-onlyIdempotent
Check whether an EXISTING SCORM .zip (made by this tool or by ANY other authoring tool) is conformant and will import into an LMS — and if not, explain exactly why.
Use this when an LMS rejects a package, before uploading a package to production, or to audit a batch of courses received from a vendor. The input is never modified.
Checks performed:
the archive is a readable zip with imsmanifest.xml at its ROOT (detects the classic "zipped the folder instead of its contents" mistake and says how to fix it)
the manifest is well-formed XML and the SCORM edition is identified (2004 or 1.2)
an with a launchable exists, resolving to a scormType="sco" with an href
the launch file and every listed in the manifest actually exist in the archive (case-only mismatches are flagged: they work on Windows but fail on the Linux servers most LMSs run on)
the manifest validates against the official ADL XSD schemas (XSDs bundled in the package are used first; missing ones are supplied from the copies embedded in this tool, so packages that ship without schemas can still be validated). Requires xmllint; skipped with a warning otherwise.
Args:
input_path (string, required): path to the .zip to validate.
Returns JSON: { ok, scorm_version, title, entry_href, files_in_zip, checks: [{id, label, ok, detail}], errors, warnings, schema_validation }
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | Path to the SCORM .zip file to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent, and the description goes well beyond them by detailing exact checks performed, such as root-level imsmanifest detection, case-only mismatch flags, XSD validation strategy, and the xmllint dependency warning. It also explicitly states "The input is never modified," reinforcing the non-destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well structured with front-loaded purpose, a summary usage sentence, a bulleted list of checks, and a clearly labeled Args section. It is dense with useful information; a slight redundancy in the Args section prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the send total parameter, no output schema, and the complexity of SCORM validation, the description is thorough. It explains what validation covers, how edge cases like casing mismatches are detected, and even describes the return JSON shape. An agent has everything needed to invoke the tool and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents input_path with a clear description. The description adds little beyond restating the path, which is expected at high schema coverage. No parameter semantics are missing from the schema, so the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: "Check whether an EXISTING SCORM .zip ... is conformant and will import into an LMS." It distinguishes the tool from siblings by emphasizing validation of existing packages, including those from other authoring tools, and by noting the input is never modified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: when an LMS rejects a package, before uploading to production, or when auditing vendor courses. It does not name specific sibling tools or describe when NOT to use this tool, but the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The three tools map to clearly distinct roles: packaging source content into SCORM, validating an existing SCORM package, and running a server-side self-test. There is no meaningful overlap in inputs, purposes, or expected usage.
All tools share the scorm_ prefix and snake_case style, making them predictable. The slight deviation is that scorm_package and scorm_validate read as verb-first, while scorm_selftest reads as a noun, but the pattern is still easy to follow.
Three tools is well-scoped for this server's purpose: one to create packages, one to validate packages, and one to diagnose the environment. Each tool earns its place and the count is appropriate for the domain.
The toolset covers the full relevant workflow: converting content to packages, validating existing packages against SCORM standards, and self-testing when issues arise. Input flexibility, batch mode, and detailed validation reporting address the main gaps a SCORM authoring server could face.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Compiles structured specs into SCORM 1.2/2004 e-learning packages. 30 tools, quality gate, no LLM.
Create, edit, translate, and export SCORM eLearning modules from a connected AI assistant.
AI-powered LMS course builder: 89 tools, 17 skills, SCORM/xAPI export, agentic UI
Publish HTML from Claude or ChatGPT to a live URL with a QR code — no developer needed.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates Claude Desktop with Super Singularity's course creation API, enabling creation and management of courses with multiple card types (content, quiz, poll, form, video, audio, link), ElevenLabs text-to-speech generation, and Azure Blob Storage for audio hosting.
- AlicenseAqualityCmaintenanceFree certification prep for the Claude Certified Architect exam. 390 scenario-based questions, guided capstone build, 30 concept handouts, 6 reference projects, practice exams, interactive UI with clickable answer cards, progress dashboard, spaced repetition, and deterministic grading. Everything runs locally — no cloud, no accounts, no telemetry.2188233MIT
- FlicenseNot gradedqualityDmaintenanceEnables generation of educational content like MCQs, lesson plans, and flashcards without relying on external LLMs, fully offline and compatible with Claude Desktop.4
- AlicenseNot gradedqualityCmaintenanceCompiles websites, docs, and repositories into agent-ready SKILL.md packages for AI coding agents.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/giacomomaria81/scorm-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server