MCP App Store
by KeenEthics
ScormStack icon

ScormStack

By MOOCit SAS

Get New App Alerts

Overview

Create and manage interactive e-learning courses in ScormStack. Designed for instructional designers, educators, and training teams, this connection helps you organize lessons, build quizzes and flashcards, manage course media, translate learning content, and review learner analytics. Find existing courses or create new ones with sections, pages, and interactive content blocks. Edit content from your conversation, then review and refine the course layout in the ScormStack editor. Connect your ScormStack account through OAuth and select the workspace and permissions to authorize. Access is limited to that workspace and your current access rights, and can be revoked in workspace settings. Creation, editing, and deletion actions modify real course content; they do not bypass authorization checks.

Tools

completeAssetUpload

ChatGPT
After the user’s application or upload client has successfully uploaded the bytes using the URL from createAssetUpload, verify the stored object, create or update its asset record, and associate it with the course. ScormStack reads the object's actual MIME type and size from storage before accepting it. This request is safe to retry with the same key. REST: POST /api/v1/assets/uploads/complete

createAssetUpload

ChatGPT
Create a short-lived pre-signed URL for uploading an asset directly to storage without sending the file through the ScormStack API function. The user’s application or an HTTP-capable upload client must send the exact file bytes to data.upload_url with an HTTP PUT, including every header returned in data.headers. This MCP connector cannot upload the bytes itself. Only after that upload succeeds, call completeAssetUpload with the returned key and the same course_id. Do not call completion or claim the asset is uploaded just because a URL was created. The pre-signed URL expires after five minutes. REST: POST /api/v1/assets/uploads

createBlock

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Creates a new content block and adds it to the slide. The content structure varies by block type. See the examples below or use GET /blocks/defaults to get templates for each block type. REST: POST /api/v1/courses/{courseId}/slides/{slideId}/blocks

createCourse

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Creates a new course in the connected space. Personal OAuth creates a personal course owned by the connected user and cannot assign another owner. For a workspace connection, by default it is owned by the token user; optionally provide owner_email (or owner_id) to assign an existing workspace member. Use one selector only. Requires courses:create (or api:*). Set the course language and theme 1. Call GET /themes with courses:read and select a theme ID. 2. Call POST /courses with courses:create: ``json { "title": "Ma formation", "default_locale": "fr", "theme_id": "a1b2c3d4-e5f6-4789-abcd-ef1234567890", "theme_config": { "colors": { "primary": "#1d4ed8" } } } ` Replace the example UUID with an ID from the list. default_locale initializes the course language and built-in learner labels; it does not translate authored content. theme_config is optional and applies only to this course. To change the theme later, send theme_id and/or theme_config to PUT /courses/{courseId} with courses:update. Only supplied fields change. theme_config replaces the full override object; use null to clear it. Changing theme_id alone keeps existing overrides; send theme_config: null to use the selected theme without course overrides. An inaccessible theme returns 403 REFERENCE_FORBIDDEN before the course is written. The same theme fields are supported under course in POST /courses/import`. REST: POST /api/v1/courses

createSection

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Creates a new section in the course. REST: POST /api/v1/courses/{courseId}/sections

createSlide

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Creates a new slide in the course. REST: POST /api/v1/courses/{courseId}/slides

decideCourseAction

ChatGPT
Only the ScormStack confirmation card may call this tool after the user clicks Confirm or Cancel. Confirm executes the exact reviewed action once.

deleteAsset

ChatGPT
Permanently deletes an asset from storage and database. REST: DELETE /api/v1/assets/{assetId}

deleteBlock

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Removes a block from the slide. REST: DELETE /api/v1/courses/{courseId}/slides/{slideId}/blocks/{blockId}

deleteCourse

ChatGPT
Permanently deletes a course and all its contents (sections, slides, blocks). There is no undo. Through MCP, the user must approve the exact request in the in-chat confirmation card or the ScormStack approval page before it can execute. For course deletion, learner analytics deletion, or public-link publication/update, this tool returns CONFIRMATION_REQUIRED and an in-chat confirmation card. The user must click Confirm (executes once) or Cancel. Do not retry after in-chat confirmation. If UI is unavailable, use approval_url for browser approval, then retry identical arguments plus confirmation_id. Never approve on the user's behalf or retry while waiting. Package exports do not require this approval. REST: DELETE /api/v1/courses/{courseId}

deleteCourseLearnerAnalytics

ChatGPT
Permanently deletes up to 1,000 selected learners and their course sessions and interactions. There is no undo. Through MCP, the user must approve the exact course and learner IDs in the in-chat confirmation card or the ScormStack approval page before it can execute. For course deletion, learner analytics deletion, or public-link publication/update, this tool returns CONFIRMATION_REQUIRED and an in-chat confirmation card. The user must click Confirm (executes once) or Cancel. Do not retry after in-chat confirmation. If UI is unavailable, use approval_url for browser approval, then retry identical arguments plus confirmation_id. Never approve on the user's behalf or retry while waiting. Package exports do not require this approval. REST: DELETE /api/v1/courses/{courseId}/analytics/learners

deleteSection

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Deletes a section. Slides in this section will be moved out of the section. REST: DELETE /api/v1/courses/{courseId}/sections/{sectionId}

deleteSlide

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Permanently deletes a slide and all its blocks. REST: DELETE /api/v1/courses/{courseId}/slides/{slideId}

exportTranslations

ChatGPT
Exports course translations in XLIFF format for use with external translation tools (Lokalise, Phrase, Crowdin, memoQ, etc.). Query Parameters: - locale (required): The target language code (e.g., 'fr', 'de', 'es') - type: Type of content to export - 'all' (default), 'system_labels', 'content', or 'general' - version: XLIFF version - '1.2', '2.0' (default), or '2.1' - format: Response format - 'xml' (default) or 'json' Response: With format=xml, returns the XLIFF file directly with Content-Type: application/xliff+xml. With format=json, returns { success, data: { xliff, filename, metadata } }. The XLIFF version is selected independently with version (for example, format=json&version=2.1). REST: GET /api/v1/locales/courses/{courseId}/export

getAsset

ChatGPT
Retrieves details of a specific asset by ID. REST: GET /api/v1/assets/{assetId}

getBlock

ChatGPT
Retrieves details of a specific block. REST: GET /api/v1/courses/{courseId}/slides/{slideId}/blocks/{blockId}

getBlockDefaults

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Retrieves default content templates for all block types. Use this endpoint to discover available block types and their content structures. Returns real examples you can copy and modify when creating blocks. REST: GET /api/v1/blocks/defaults

getCourse

ChatGPT
Retrieves details of a specific course by ID. REST: GET /api/v1/courses/{courseId}

getFullCourse

ChatGPT
Retrieves an import-compatible full course payload including course settings, default locale, sections, variants, slides, blocks, and checkpoints. The response data object can be edited externally and posted to POST /courses/import to create a new copy. REST: GET /api/v1/courses/{courseId}/full

getPublishStatus

ChatGPT
Retrieves the status, saved settings, dates, and result URL for a publication request. The requestId path parameter accepts the export_id returned by creation or the exports list. REST: GET /api/v1/courses/{courseId}/publish/{requestId}

getSection

ChatGPT
Retrieves details of a specific section. REST: GET /api/v1/courses/{courseId}/sections/{sectionId}

getSlide

ChatGPT
Retrieves details of a specific slide. REST: GET /api/v1/courses/{courseId}/slides/{slideId}

importCourse

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Creates a complete course tree (course, optional sections, variants, slides, blocks, and checkpoints) from a single payload. Courses stay personal for personal OAuth, or are attached to the token workspace for workspace connections. Personal access cannot assign another owner. Optional course.owner_email (or course.owner_id) assigns ownership to an existing workspace member; provide one selector only. Otherwise the token user owns the course. REST: POST /api/v1/courses/import

importTranslations

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Imports translations from an XLIFF file. Supports files from external translation tools like Lokalise, Phrase, Crowdin, memoQ, etc. Request Options: - Option A: Send raw XML body with Content-Type: application/xliff+xml - Option B: Send multipart form with a 'file' field containing the XLIFF file MCP: Call importTranslations with the XLIFF XML string in body. The connector sends it as raw XML with the correct content type; do not JSON-encode the string yourself. Keep the file and unit identifiers from the export. Imports update locale targets, and omitted content and general fields keep their existing values. Invalid XML or files with no non-empty targets return an error. For linked library blocks, imports save overrides in this course's locale. They never modify the shared library translation. Course overrides take priority field by field, with library translations as fallback, in the localization panel, XLIFF exports and course exports. Import counts: Each non-empty recognized unit is counted only in its own group (systemLabels, content, or general). added means no previous target existed; modified means an existing target changed; unchanged means it stayed the same. For system labels, existing targets include built-in translations shown by export, with saved overrides taking priority. Section titles are counted individually. content.skipped reports units referencing blocks not found in this course; they are not counted as added or modified. Query Parameters: - locale (required): Target language code (e.g., 'fr', 'de', 'es') If the locale doesn't exist, it will be created automatically. REST: POST /api/v1/locales/courses/{courseId}/import

listAssets

ChatGPT
Retrieves a paginated list of assets (images, videos, audio, PDFs) owned by the authenticated user. REST: GET /api/v1/assets

listBlocks

ChatGPT
Retrieves all blocks on a slide, in display order. REST: GET /api/v1/courses/{courseId}/slides/{slideId}/blocks

listCourseExports

ChatGPT
Lists completed exports created through the app or API, newest creation first (ID breaks ties). Includes saved settings, dates, public links, and dynamic package export_id values usable as target_export_id. Requires courses:read, courses:update, or legacy courses:publish and access to the connected workspace's course. This is the current state of each export, not a revision history: dynamic refresh updates the same record. Pending, failed, and deleted exports are excluded. Multiple records can refer to the same hosted embed ID. REST: GET /api/v1/courses/{courseId}/exports

listCourseLearnerAnalytics

ChatGPT
Returns the same learner rows and summary metrics shown in Courses Analytics → Learners. Search applies to learner ID, email, name, and nickname. REST: GET /api/v1/courses/{courseId}/analytics/learners

listCourseLocales

ChatGPT
Retrieves all locales (languages) configured for a course, including translation progress. REST: GET /api/v1/locales/courses/{courseId}

listCourses

ChatGPT
Retrieves courses in the connected space. Personal OAuth returns only courses owned by the connected user with no workspace. Workspace connections return only currently accessible courses in that workspace; folder and collaborator permissions still apply. Requires courses:read (or api:*). Results are sorted by creation date (newest first), then ID for stable pagination. Follow pagination.totalPages to retrieve the complete list (up to 100 courses per page). REST: GET /api/v1/courses

listSections

ChatGPT
Retrieves all sections in a course, ordered by their position. REST: GET /api/v1/courses/{courseId}/sections

listSlides

ChatGPT
Retrieves all slides in a course, optionally filtered by section. REST: GET /api/v1/courses/{courseId}/slides

listThemes

ChatGPT
Lists system themes, themes owned by the token user, and themes shared through courses the user can access in the token workspace. Deduplicated and sorted by creation date (newest first), then ID. Requires courses:read (or api:*). Use a returned id as theme_id when creating or updating a course. Theme creation and editing are not exposed by this API. REST: GET /api/v1/themes

publishCourse

ChatGPT
Starts publication of a course using the same export options exposed in the app. Package exports return either a signed download URL immediately or a request_id plus status_url when background processing is required. When a package is ready, configured workspace webhooks receive a signed course_published event. To refresh an existing dynamic package, send only refresh_dynamic_content_only: true, target_export_id (the export_id returned by creation or GET /courses/{courseId}/exports), and optionally notify_webhooks: false. The response is HTTP 200 with the same export_id (also returned as request_id). Saved export settings and hosted data URLs are preserved; the LMS ZIP does not need to be replaced. No new export slot is consumed. By default, configured webhooks receive dynamic_course_updated. Static, incomplete, deleted, and public-link exports cannot use this mode. Use the public-link update mode below for hosted links. The courseId must belong to the connected space. Personal OAuth only supports owned courses without a workspace. Use format: "public_link" to create or update a hosted learner URL. Password protection is off unless explicitly enabled. Through MCP, the user must approve the exact public-link request in the in-chat confirmation card or the ScormStack approval page before it can execute. The email and linkedin share options only record the preferred sharing mode; this tool does not send email or post to LinkedIn. For course deletion, learner analytics deletion, or public-link publication/update, this tool returns CONFIRMATION_REQUIRED and an in-chat confirmation card. The user must click Confirm (executes once) or Cancel. Do not retry after in-chat confirmation. If UI is unavailable, use approval_url for browser approval, then retry identical arguments plus confirmation_id. Never approve on the user's behalf or retry while waiting. Package exports do not require this approval. REST: POST /api/v1/courses/{courseId}/publish

readAuthoringGuidelines

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design.

updateBlock

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Updates an existing block's content and/or variant in place, preserving its ID and comments. A variant-only update preserves all stored content. Supported variants are listed by /blocks/defaults. REST: PUT /api/v1/courses/{courseId}/slides/{slideId}/blocks/{blockId}

updateCourse

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Updates an existing course in the connected personal or workspace space. Personal OAuth cannot update a workspace course or transfer ownership. Only supplied fields change. Set owner_email (or owner_id) to assign an existing workspace member as owner; use one selector only. Ownership and supplied metadata update atomically. The former owner remains an editor and the new owner becomes course admin. Requires courses:update (or api:*). REST: PUT /api/v1/courses/{courseId}

updateSection

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Updates an existing section. REST: PUT /api/v1/courses/{courseId}/sections/{sectionId}

updateSlide

ChatGPT
READ FIRST: Before authoring or changing course content or layout, read the ScormStack authoring guidelines provided at initialization, or call readAuthoringGuidelines if they are not already in context. Apply them as defaults; explicit user instructions and user-provided course or organization guidelines take precedence. For a targeted edit, preserve unrelated content and design. Updates an existing slide. REST: PUT /api/v1/courses/{courseId}/slides/{slideId}

uploadAsset

ChatGPT
Upload a small asset file through the API function. This legacy multipart endpoint is suitable only when the complete request is below the hosting platform's 4.5MB payload limit. For videos and other large files, use the three-step direct upload flow: 1. POST /assets/uploads to obtain a pre-signed URL 2. PUT the file directly to that URL 3. POST /assets/uploads/complete to register the asset Supported file types: - Images: JPEG, PNG, GIF, WebP, SVG (max 10MB) - Videos: MP4, WebM, MOV, AVI (max 100MB; 250MB with Pro; 250MB with Enterprise) - Audio: MP3, WAV, OGG, FLAC, M4A (max 100MB) - PDF: PDF documents (max 50MB) Usage: Send a multipart/form-data request with: - file (required): The file to upload - course_id (required): The course to associate the asset with REST: POST /api/v1/assets

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

Similar Apps