Create an imsmanifest.xml file at the root of your course directory; include a metadata block, an organizations block defining the item hierarchy, and a resources block listing all SCOs with adlcp:scormType='sco'
Ensure each SCO HTML file contains JavaScript that calls the SCORM 2004 API (window.API_1484_11) methods Initialize, GetValue, SetValue, Commit, and Terminate
Set at minimum cmi.completion_status ('completed' or 'incomplete') and cmi.success_status ('passed', 'failed', or 'unknown') via SetValue before calling Terminate
Zip the entire course directory (with imsmanifest.xml at the root of the zip, not inside a subfolder) to create the Package Interchange File (PIF)
Upload the PIF via the LMS's standard import UI or a vendor-specific REST API; validate the upload by launching the course and confirming the LMS records completion
Known gotchas
Nesting the course folder inside the zip (so the path is course/imsmanifest.xml rather than imsmanifest.xml) is the single most common packaging error and causes most LMS importers to reject the package
SCORM 2004 has four editions (1st through 4th); sequencing and navigation rules differ significantly between editions, and many LMS implementations only fully support 3rd or 4th edition
Calling SetValue after Terminate has been called results in a runtime error; ensure your exit/unload handlers call Commit then Terminate in the correct order
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp