The Mini Course Generator MCP connector routes your AI agent's tool calls to Mini Course Generator's own MCP server through Scalekit. Each user signs in to Mini Course Generator once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 73 tools.
- Tools
- 73
- What they doRead · write · destructive
- 15 · 45 · 1315 read45 write13 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Mini Course Generator MCP connection
In AgentKit > Connections, create a Mini Course Generator MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Mini Course Generator MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'minicoursegeneratormcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Mini Course Generator MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'minicoursegeneratormcp_whoami',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "minicoursegeneratormcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Mini Course Generator MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="minicoursegeneratormcp_whoami",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolminicoursegeneratormcp_course_analyticsAggregate learner analytics for a Course: how many are assigned, how many engaged, how many completed it, certificates and badges issued, and the mean quiz score.Read-onlyCourseAnalytics
Aggregate learner analytics for a Course: how many are assigned, how many engaged, how many completed it, certificates and badges issued, and the mean quiz score. No personal data — counts only. Pass moduleId to narrow the same report to one Module. Start here before reaching for the per-learner lists — and for a public Course this is the ONLY reach figure, because a public Course enrols nobody and so has no learner list at all.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
minicoursegeneratormcp_course_finishersThe learners who completed a whole Course, with their mean score, when they finished, and their certificate URL where one was issued.Read-onlyCourseFinishers
The learners who completed a whole Course, with their mean score, when they finished, and their certificate URL where one was issued. Use `from` to ask only about recent completions. Rows carry the learner's real name and email — the connected shop's own learners. Treat them as personal data: use them to answer what was asked, and do not republish a roster elsewhere.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
fromstring- Only learners who finished on or after this ISO 8601 date.
pageinteger- Zero-based page. Default 0.
pageSizeinteger- Rows per page. Default 20, max 100.
minicoursegeneratormcp_course_learnersThe learners on a Course — one row each with name and email, how far they got, their score, whether they earned the certificate and when they were last active.Read-onlyCourseLearners
The learners on a Course — one row each with name and email, how far they got, their score, whether they earned the certificate and when they were last active. Paginated (20 per page, max 100). A public Course enrols nobody, so this returns no rows and a `note` saying so — report that note, not "no learners", and use course_analytics for its reach. Rows carry the learner's real name and email — the connected shop's own learners. Treat them as personal data: use them to answer what was asked, and do not republish a roster elsewhere.
Inputs
courseIdstringrequired- Course id from course_list.
pageinteger- Zero-based page. Default 0.
pageSizeinteger- Rows per page. Default 20, max 100.
minicoursegeneratormcp_course_listList the courses in the connected account (a Course is the top-level program).Read-onlyCourseList
List the courses in the connected account (a Course is the top-level program). Paginated — 20 per page by default, 100 max. An account can hold far more courses than one page, so check `hasNextPage` and keep paging before you conclude anything about the whole account; `totalCount` tells you how many there are in total.
Inputs
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
minicoursegeneratormcp_get_content_formatThe MCG Course Authoring Guide — how to plan, structure, and write a course, the lesson content format, and landing-page copy.Read-onlyGetContentFormat
The MCG Course Authoring Guide — how to plan, structure, and write a course, the lesson content format, and landing-page copy. Read it before creating anything.
Inputs
This tool takes no inputs.
minicoursegeneratormcp_learner_getOne learner's full record: every Course they can reach, how far they got in each, their score, when they finished, and whether a certificate was issued — plus per-module detail inside each course.Read-onlyLearnerGet
One learner's full record: every Course they can reach, how far they got in each, their score, when they finished, and whether a certificate was issued — plus per-module detail inside each course. This answers "which courses has this person completed" in one call. Rows carry the learner's real name and email — the connected shop's own learners. Treat them as personal data: use them to answer what was asked, and do not republish a roster elsewhere.
Inputs
learnerstringrequired- The learner's email, username, or the session id from learner_list.
startedOnlyboolean- Skip Courses they were given but never opened. Default false.
minicoursegeneratormcp_learner_listThe account's learners across EVERY Course, one row each with how many courses they were given, started and completed.Read-onlyLearnerList
The account's learners across EVERY Course, one row each with how many courses they were given, started and completed. Use this — not a course_learners call per course — to answer questions about people rather than about one course ("who has finished anything", "which of our learners are stalled", "find this person"). `search` matches name, email or username. Paginated (20 per page, max 100). Rows carry the learner's real name and email — the connected shop's own learners. Treat them as personal data: use them to answer what was asked, and do not republish a roster elsewhere.
Inputs
completedOnlyboolean- Only learners who completed at least one Course. Default false.
pageinteger- Zero-based page. Default 0.
pageSizeinteger- Rows per page. Default 20, max 100.
registeredOnlyboolean- Skip anonymous public-link learners, who have no name or email to report. Default false.
searchstring- Match on name, email or username. Omit for everyone.
minicoursegeneratormcp_lesson_getGet a Lesson (title, type, and the rendered HTML body).Read-onlyLessonGet
Get a Lesson (title, type, and the rendered HTML body).
Inputs
lessonIdintegerrequired- The integer ID of the lesson to retrieve.
minicoursegeneratormcp_lesson_selectionsGet a quiz/survey Lesson's selections — the authored options (id, text, and whether each is flagged correct).Read-onlyLessonSelections
Get a quiz/survey Lesson's selections — the authored options (id, text, and whether each is flagged correct). No learner/response data.
Inputs
lessonIdintegerrequired- The integer ID of the quiz or survey lesson whose answer options to retrieve.
minicoursegeneratormcp_module_analyticsAggregate learner analytics for one Module: assigned, engaged, completed, badges earned and the mean quiz score.Read-onlyModuleAnalytics
Aggregate learner analytics for one Module: assigned, engaged, completed, badges earned and the mean quiz score. No personal data — counts only.
Inputs
moduleIdintegerrequired- Module id from module_list.
minicoursegeneratormcp_module_answersOne learner's answer to every question in a Module: the question, the options they picked (or the text they typed), which options were correct, and whether they got it right.Read-onlyModuleAnswers
One learner's answer to every question in a Module: the question, the options they picked (or the text they typed), which options were correct, and whether they got it right. This is the only tool that returns per-question answers — the analytics and finisher tools carry scores only. Covers BOTH quiz Lessons and the questions inside activity blocks (crossword, wordle, word search, riddle, jumble, pixel quest, SCORM). Each row says which in `source`, and activity rows carry `blockType`. So this is the whole picture for a module — there is no second tool to call for games. Two shapes not to misread: `isCorrect: null` means the question is ungraded OR they never reached it — NOT that they got it wrong; and a SCORM row has an `answer` but no question text (it comes back empty), because a SCORM package reports its outcome without telling us what was asked. That is a real answer, not missing data. Rows carry the learner's real name and email — the connected shop's own learners. Treat them as personal data: use them to answer what was asked, and do not republish a roster elsewhere.
Inputs
learnerstringrequired- The learner's email, username, or — for someone who took a public course by link — the session id from learner_list.
moduleIdintegerrequired- Module id from module_list.
minicoursegeneratormcp_module_finishersThe learners who completed one Module, with completion percentage, quiz score, and start/finish times.Read-onlyModuleFinishers
The learners who completed one Module, with completion percentage, quiz score, and start/finish times. Use this to see where a specific module is landing. Rows carry the learner's real name and email — the connected shop's own learners. Treat them as personal data: use them to answer what was asked, and do not republish a roster elsewhere.
Inputs
moduleIdintegerrequired- Module id from module_list.
fromstring- Only learners who finished on or after this ISO 8601 date.
pageinteger- Zero-based page. Default 0.
pageSizeinteger- Rows per page. Default 20, max 100.
minicoursegeneratormcp_module_getGet a Module with its Sections and Lessons (and their ids — needed to edit them).Read-onlyModuleGet
Get a Module with its Sections and Lessons (and their ids — needed to edit them). Also reports publish state: the module's `status` (draft | published | published_with_changes), `pendingLessonCount`, and a `status` per lesson. Check this before telling someone a module is live.
Inputs
moduleIdintegerrequired- The numeric id of the module to retrieve. Retrieve it from module_list.
minicoursegeneratormcp_module_listList the Modules inside a Course (each with id, name, and section/lesson counts).Read-onlyModuleList
List the Modules inside a Course (each with id, name, and section/lesson counts). courseId is the Course (collection) id from course_list / course_create.
Inputs
courseIdstringrequired- The id of the course whose modules to list.
minicoursegeneratormcp_whoamiReturns the MCG account this connection is authenticated as (user id, email, shop id).Read-onlyWhoami
Returns the MCG account this connection is authenticated as (user id, email, shop id). Use it to confirm you connected the correct account.
Inputs
This tool takes no inputs.
minicoursegeneratormcp_audio_uploadHost an audio file on MCG for a lesson `audio` block (narration, a podcast clip, a pronunciation sample).WriteAudioUpload
Host an audio file on MCG for a lesson `audio` block (narration, a podcast clip, a pronunciation sample). Stage the file with `media_upload_url` (get an upload URL, PUT the file to it), then call this with the returned **`downloadUrl`** as `url`. Returns { documentId, url } — put the **`url`** in the `audio` block. Do NOT put a `media_upload_url` downloadUrl in a lesson: it expires in ~2h, this one is durable. mp3/wav/ogg/flac/aac/m4a/wma.
Inputs
urlstringrequired- Publicly-reachable URL of the audio file — use the `downloadUrl` from media_upload_url.
fileNamestring- File name (its extension picks the MIME type; defaults to the URL's base name).
replaceIdstring- Optional documentId to replace, keeping the same hosted url.
minicoursegeneratormcp_course_add_certificateAdd a completion certificate to a Course — learners who finish the whole Course earn it.WriteCourseAddCertificate
Add a completion certificate to a Course — learners who finish the whole Course earn it. Creates the default certificate (its copy and pass threshold can be tuned later in the MCG admin UI). Certificates live at the Course level, not per Module.
Inputs
courseIdstringrequired- The id of the course to add a certificate to. Retrieve it from course_list or course_create.
minicoursegeneratormcp_course_answersRetrieve one learner's per-question responses in a Course (integer courseId), including quiz pages and supported activity blocks (crossword, wordle, word search, riddle, jumble, pixel quest, and SCORM).WriteCourse Answers
Retrieve one learner's per-question responses in a Course (integer courseId), including quiz pages and supported activity blocks (crossword, wordle, word search, riddle, jumble, pixel quest, and SCORM). Returns selected options or text answers and grading where available; source and blockType identify the activity. isCorrect: null means ungraded or unanswered, not an incorrect answer. SCORM responses can lack question text. Contains learner personal data from the connected account.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
learnerstringrequired- The learner's email, username, or — for someone who took a public learning path by link — the session id from learner_list.
minicoursegeneratormcp_course_createCreate a Course — the top-level program.WriteCourseCreate
Create a Course — the top-level program. A Course holds several Modules (add them with module_push, one per topic); use module_push directly only for a single standalone topic. Pass `landingPage` (marketing copy) to create the course's landing page with it. See get_content_format.
Inputs
learningPathIdstringrequired- Parent Learning path id (a GUID) from learning_path_list.
namestringrequired- Course name
descriptionstring- Optional course description, saved after creation.
languagestring- ISO language code (default en)
minicoursegeneratormcp_course_getRetrieve a Course (integer courseId) in the connected account with its Sections and Pages: sectionIds are GUIDs, pageIds are integers.WriteCourse Get
Retrieve a Course (integer courseId) in the connected account with its Sections and Pages: sectionIds are GUIDs, pageIds are integers. Returns course and per-page publish status (draft, published, or published_with_changes), pendingPageCount, its parent learningPathId, and authored content. Use to inspect structure or pending changes before editing or publishing.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
minicoursegeneratormcp_course_learner_addGive someone access to a Course, creating their learner account if this account has never seen them.WriteCourseLearnerAdd
Give someone access to a Course, creating their learner account if this account has never seen them. Pass `email` (and optionally `name`); `username` defaults to the email. Adding someone who is already on the Course is a no-op and comes back with alreadyMember: true. Check `errors` on the result — a non-empty list means they were NOT added. This does not email them; send the course link yourself.
Inputs
courseIdstringrequired- Course id from course_list.
emailstring- The learner's email address.
namestring- The learner's display name — what a certificate is made out to.
sendInviteboolean- Also email them the course's invite with their sign-in link. Default false. Emails a real person — confirm with the user first.
usernamestring- Optional username. Defaults to the email.
minicoursegeneratormcp_course_learner_inviteEmail a Course's invite to learners already on it in the connected account, using the course's saved invite subject and body; each learner gets their own sign-in (magic) link.WriteCourse Learner Invite
Email a Course's invite to learners already on it in the connected account, using the course's saved invite subject and body; each learner gets their own sign-in (magic) link. This emails real people — confirm the recipients with the user before calling. Pass up to 20 emails or usernames. Learners not on the course are skipped (add them with course_learner_add first), as are learners without an email address and anyone invited in the last 10 minutes. onlyNotYetInvited (default true) also skips anyone ever sent this invite; set it false to resend. Returns sent and skipped (with a reason for each). Does not change course access.
Inputs
courseIdstringrequired- Course id from course_list.
learnersarrayrequired- Emails or usernames of learners already on the Course. At most 20.
onlyNotYetInvitedboolean- Skip anyone who was ever sent this course's invite. Default true; false resends.
minicoursegeneratormcp_course_moveChange a Course's zero-based position within its Learning path.WriteCourse Move
Change a Course's zero-based position within its Learning path. Other courses retain their relative order and shift around it. This replaces the saved ordering and can immediately change the sequence shown to learners. Use course_list to inspect the current order.
Inputs
courseIdintegerrequired- Course id (an integer) to move.
learningPathIdstringrequired- Learning path id (a GUID) the course belongs to.
orderintegerrequired- New zero-based position within the learning path (lower comes first)
minicoursegeneratormcp_course_publishPublish a Course (integer courseId) and every Page inside it, including all pending page edits.WriteCourse Publish
Publish a Course (integer courseId) and every Page inside it, including all pending page edits. Pending edits overwrite the previous live content and can remove quiz options; this tool does not retain the previous version. Learners gain access under the learning path's access rules, including anyone with the link for public learning paths. Returns publish state and published page count. Repeating the call refreshes the publication timestamp. Use for a request to make the entire course live.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
minicoursegeneratormcp_course_pushCreate a new draft Course with its Sections and Pages from a kind: Course YAML spec (apiVersion: mcg.io/v4).WriteCourse Push
Create a new draft Course with its Sections and Pages from a kind: Course YAML spec (apiVersion: mcg.io/v4). Optional spec.landingPage supplies landing-page content; learningPathId (a GUID) overrides the spec's spec.learningPathId as the parent Learning path. Image prompts and landing-page covers can trigger external image generation; page images and generated covers consume MCG AI credits (with insufficient credits the landing page is saved without a cover). Third-party image urls (image blocks, quiz images, landing covers) are copied into MCG storage first, without credits. The course requires course_publish for learner access. dryRun validates and renders page content locally without creating resources or generating images. Normal calls create another course on every retry and may leave partial content if a later step fails. Returns the new courseId (an integer). Optional description is saved separately; failures appear as descriptionWarning. See get_content_format for the spec.
Inputs
specstringrequired- The full Course spec as YAML (apiVersion: mcg.io/v4, kind: Course, spec.sections[].pages[]).
descriptionstring- Optional course description, saved after creation; ignored for dryRun.
dryRunboolean- Default false. When true, validate the spec and render page content locally without API writes or image generation; returns a plan, not a saved course.
learningPathIdstring- Optional parent Learning path id (a GUID) to attach the course to (overrides spec.learningPathId).
minicoursegeneratormcp_course_themeReplace supplied Course theme settings (integer courseId): layout, typography, colors, and optional background image URL.WriteCourse Theme
Replace supplied Course theme settings (integer courseId): layout, typography, colors, and optional background image URL. Omitted settings remain unchanged. Theme changes apply immediately to a published course; learner browsers load the supplied background image URL. Use get_content_format for styling individual page content blocks instead.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
backgroundColorstring- Page background colour as CSS hex
bodyBackgroundImagestring- Background image URL loaded by learner browsers; can reference an external host.
buttonColorstring- Button colour as CSS hex
cardAlignmentstring- Vertical alignment of page content: top, center or bottomone of
topcenterbottom cardBackgroundColorstring- Content card background colour as CSS hex
fontstring- Font family, e.g. "Open Sans"
fontColorstring- Text colour as CSS hex, e.g. "#1e293b"
fontSizestring- S, M or Lone of
SML layoutinteger- 0 default, 1 left/right, 2 native, 3 bottomone of
0123 lineHeightstring- S, M or Lone of
SML
minicoursegeneratormcp_course_unpublishUnpublish a Course (integer courseId) and revoke learner access to it immediately.WriteCourse Unpublish
Unpublish a Course (integer courseId) and revoke learner access to it immediately. The learner preview link stops working. Content and progress are retained so the course can be published again. Use for a request to take the whole course offline.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
minicoursegeneratormcp_course_updateRename a Course or change its description.WriteCourseUpdate
Rename a Course or change its description. courseId is the id from course_list / course_create. Only the fields you pass change.
- Idempotent
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
coverImageUrlstring- Use an existing image as the cover/thumbnail: an image_upload url, or any public image url (a third-party image is copied into MCG storage first). No generation, no credits.
descriptionstring- New course description
languagestring- New learner-interface language (ISO code, e.g. en, tr, de)
namestring- New course name
minicoursegeneratormcp_image_uploadDownload an image from the supplied public URL and host it on MCG storage, adding it to the Media Library.WriteImage Upload
Download an image from the supplied public URL and host it on MCG storage, adding it to the Media Library. Accepts a staged downloadUrl from media_upload_url. Returns imageId and a durable url to use as a lesson image block's url (instead of prompt): the image is placed as-is, with no AI generation and no AI credits. Each call creates a new image. Supported formats: png, jpg, gif, webp, svg (sanitized: scripts and external references are removed), tiff, and ico. Tools that take an image url copy third-party urls into MCG storage on their own; use this for local files or to get the url first.
Inputs
urlstringrequired- Publicly-reachable URL of the image — any hosted image, or the `downloadUrl` from media_upload_url for a local file.
fileNamestring- File name to record (defaults to the URL's base name). The format is detected from the image itself; the extension is only a fallback.
minicoursegeneratormcp_learning_path_add_certificateAdd the default completion-certificate configuration to a Learning path (learningPathId GUID) in the connected account, or return its existing configuration.WriteLearning Path Add Certificate
Add the default completion-certificate configuration to a Learning path (learningPathId GUID) in the connected account, or return its existing configuration. New certificates use the default 85% success threshold, adjustable in the MCG admin interface. This configures learning-path-level certificate eligibility; it does not issue or email a certificate to a learner during this call.
Inputs
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
minicoursegeneratormcp_learning_path_analyticsRetrieve aggregate analytics for a Learning path (learningPathId, a GUID) in the connected account: assigned, engaged and completed learners, certificates, badges, and mean quiz score.WriteLearning Path Analytics
Retrieve aggregate analytics for a Learning path (learningPathId, a GUID) in the connected account: assigned, engaged and completed learners, certificates, badges, and mean quiz score. Optional courseId (an integer) narrows the report to one Course. Returns counts and aggregate scores without learner identities or individual answers. Public learning paths have no enrollment roster; use these engagement figures for their reach.
Inputs
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
courseIdinteger- Optional: narrow the report to this Course (an integer id from course_list).
minicoursegeneratormcp_learning_path_createCreate a new Learning path (the top-level program that groups Courses) in the connected MCG account with a default landing page and public-link access.WriteLearning Path Create
Create a new Learning path (the top-level program that groups Courses) in the connected MCG account with a default landing page and public-link access. The learning path landing page can be viewed by anyone with its link; Courses are created inside it separately as drafts (course_push or course_create). Optional landingPage YAML supplies custom copy and triggers background cover-image generation through MCG's image provider, unless coverImageUrl or the YAML's cover_image.url names an existing image, which is used as-is with no generation or credits (a third-party image url is first copied into MCG storage). A generated cover consumes MCG AI credits at the page-image rate; if credits are insufficient the landing page is saved without a cover. Returns id (the new learningPathId, a GUID) and previewUrl. Each call creates another learning path, and a later landing-page failure can leave the learning path created. See get_content_format for the YAML format.
Inputs
namestringrequired- Learning path name
coverImageUrlstring- Use an existing image as the cover/thumbnail: an image_upload url, or any public image url (a third-party image is copied into MCG storage first). No generation, no credits.
descriptionstring- Optional learning path description
landingPagestring- Optional landing-page YAML: introduction, audience, learning_outcomes, program_details, keywords, and cover_image: {style, model} to generate a cover or {url} to use an existing image as-is (third-party urls are copied into MCG storage). Saves custom copy and starts cover-image generation unless a url is given; a generated cover consumes AI credits, and without enough credits the page is saved without a cover.
minicoursegeneratormcp_learning_path_finishersList learners who completed a whole Learning path (learningPathId, a GUID) in the connected account, with identity, mean score, completion time, and certificate URL when issued.WriteLearning Path Finishers
List learners who completed a whole Learning path (learningPathId, a GUID) in the connected account, with identity, mean score, completion time, and certificate URL when issued. Optional from filters by completion date. Paginated: default 20 rows, maximum 100. Contains learner personal data.
Inputs
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
fromstring- Only learners who finished on or after this ISO 8601 date.
pageinteger- Zero-based page. Default 0.
pageSizeinteger- Rows per page. Default 20, max 100.
minicoursegeneratormcp_learning_path_learner_addAdd a learner to a Learning path's default team (learningPathId, a GUID) in the connected account, creating a learner account if needed.WriteLearning Path Learner Add
Add a learner to a Learning path's default team (learningPathId, a GUID) in the connected account, creating a learner account if needed. Supply email and/or username; username defaults to email. This grants team-based access to the learning path and its courses without changing its access rule. By default no email is sent. sendInvite: true also emails the learner the learning path's invite (its saved invite subject and body, with their personal sign-in link) — this emails a real person, so confirm with the user before setting it. Returns accountCreated, alreadyMember, and errors; a non-empty errors list means enrollment failed. With sendInvite, inviteSent and inviteError report the email; a learner invited in the last 10 minutes is not emailed again. Existing membership is not duplicated.
Inputs
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
emailstring- The learner's email address.
namestring- The learner's display name — what a certificate is made out to.
sendInviteboolean- Also email them the learning path's invite with their sign-in link. Default false. Emails a real person — confirm with the user first.
usernamestring- Optional username. Defaults to the email.
minicoursegeneratormcp_learning_path_learner_inviteEmail a Learning path's invite (learningPathId, a GUID) to learners already on it in the connected account, using its saved invite subject and body; each learner gets their own sign-in (magic) link.WriteLearning Path Learner Invite
Email a Learning path's invite (learningPathId, a GUID) to learners already on it in the connected account, using its saved invite subject and body; each learner gets their own sign-in (magic) link. This emails real people — confirm the recipients with the user before calling. Pass up to 20 emails or usernames. Learners not on the learning path are skipped (add them with learning_path_learner_add first), as are learners without an email address and anyone invited in the last 10 minutes. onlyNotYetInvited (default true) also skips anyone ever sent this invite; set it false to resend. Returns sent and skipped (with a reason for each). Does not change access.
Inputs
learnersarrayrequired- Emails or usernames of learners already on the Learning path. At most 20.
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
onlyNotYetInvitedboolean- Skip anyone who was ever sent this learning path's invite. Default true; false resends.
minicoursegeneratormcp_learning_path_learnersList a Learning path's enrolled learners (learningPathId, a GUID) with identity, progress, score, certificate state, and last activity.WriteLearning Path Learners
List a Learning path's enrolled learners (learningPathId, a GUID) with identity, progress, score, certificate state, and last activity. Paginated: default 20 rows, maximum 100. Public learning paths have no enrollment roster and return no rows with an explanatory note; this does not mean nobody viewed them. Use learning_path_analytics for engagement. Contains personal data from the connected account.
Inputs
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
pageinteger- Zero-based page. Default 0.
pageSizeinteger- Rows per page. Default 20, max 100.
minicoursegeneratormcp_learning_path_listList the Learning paths in the connected MCG account.WriteLearning Path List
List the Learning paths in the connected MCG account. Hierarchy: Learning path → Course → Section → Page; a Learning path is the top-level program that groups Courses. Each item's id is a learningPathId (a GUID) for course_list, course_create, and the learning_path_* tools. Returns a page of items with totalCount and hasNextPage; default page size is 20, maximum 100. Retrieve further pages when the requested result requires all learning paths.
Inputs
pageinteger- Zero-based page. Default 0.
pageSizeinteger- Learning paths per page. Default 20, max 100.
minicoursegeneratormcp_learning_path_updateReplace an existing Learning path's name, description, and/or cover image in the connected account.WriteLearning Path Update
Replace an existing Learning path's name, description, and/or cover image in the connected account. learningPathId is a GUID. Only supplied non-empty fields change; at least one is required. coverImageUrl takes an image_upload url or any public image url (a third-party image is copied into MCG storage first); it replaces the cover, landing-page header image, and thumbnail without generating one. Changes can appear immediately on its public landing page. Does not edit landing-page body copy. To edit a Course (integer courseId) use course_update.
Inputs
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
coverImageUrlstring- Use an existing image as the cover/thumbnail: an image_upload url, or any public image url (a third-party image is copied into MCG storage first). No generation, no credits.
descriptionstring- New learning path description
namestring- New learning path name
minicoursegeneratormcp_lesson_createAdd a Lesson to an existing Section.WriteLessonCreate
Add a Lesson to an existing Section. For a content lesson, pass `content` in the MCG content-authoring format (a `content:` document) — call get_content_format first. The CLI compiles it to HTML.
Inputs
moduleIdintegerrequired- The integer ID of the module that owns this section.
sectionIdstringrequired- The unique identifier of the section to add the lesson to.
titlestringrequired- The title of the new lesson.
contentstring- For an info lesson: the body as a content-authoring `content:` YAML document. For a quiz lesson: a YAML with `question:` and `choices:`.
typestring- Lesson type — `info` for a content lesson or `quiz` for an interactive quiz lesson.one of
infoquiz
minicoursegeneratormcp_lesson_moveReorder a Lesson within its Module by setting its order (lower comes first).WriteLessonMove
Reorder a Lesson within its Module by setting its order (lower comes first). Optionally move it into another Section of the same module by passing sectionId. moduleId is the lesson's module.
- Idempotent
Inputs
lessonIdintegerrequired- The integer ID of the lesson to reorder or move.
moduleIdintegerrequired- The integer ID of the module that owns this lesson.
orderintegerrequired- The new 1-based position of the lesson within its section. Lower numbers appear first.
sectionIdstring- The section to move the lesson into. Must be a section within the same module. Omit to keep the lesson in its current section.
minicoursegeneratormcp_lesson_publishPublish one Lesson — a draft lesson goes live, or the pending edits on a live lesson replace what learners are reading.WriteLessonPublish
Publish one Lesson — a draft lesson goes live, or the pending edits on a live lesson replace what learners are reading. Use this to ship part of a module while leaving unfinished lessons as drafts. Only meaningful inside a published module: publishing a lesson in a draft module shows it to nobody, because the module itself is not on the air (use module_publish first).
- Idempotent
Inputs
lessonIdintegerrequired- Lesson id
minicoursegeneratormcp_media_upload_urlStage a media file (a video, a SCORM zip) for upload.WriteMediaUploadUrl
Stage a media file (a video, a SCORM zip) for upload. Returns a temporary **`uploadUrl`** (presigned PUT) and **`downloadUrl`** (presigned GET, ~2h). Flow: (1) call this with the `fileName` (and `contentType`); (2) **PUT the file's bytes to `uploadUrl`** from your shell — e.g. `curl -T <file> -H "Content-Type: <contentType>" "<uploadUrl>"` — so the bytes go straight to storage and never pass through this conversation; (3) pass `downloadUrl` as the `url` to `video_upload` / `scorm_upload`. Use this for video and SCORM (don't base64 big files).
Inputs
fileNamestringrequired- File name to stage, e.g. "welcome.mp4" or "quiz.zip".
contentTypestring- MIME type to sign the PUT with, e.g. "video/mp4" or "application/zip" (default application/octet-stream).
minicoursegeneratormcp_module_createCreate an empty Module inside a Course.WriteModuleCreate
Create an empty Module inside a Course. A Module groups Sections; Sections hold Lessons. courseId is the id from course_list / course_create. Pass a short `description` — modules should always have one. To create a module WITH content in one step, prefer module_push. The module is created as a DRAFT: nobody can reach it until module_publish runs.
Inputs
courseIdstringrequired- The id of the course to add this module to.
namestringrequired- Module name.
descriptionstring- Short module description (1-2 sentences). Always set one.
languagestring- ISO language code for the learner interface (default en).
minicoursegeneratormcp_module_moveReorder a Module within its Course by setting its zero-based position (lower comes first).WriteModuleMove
Reorder a Module within its Course by setting its zero-based position (lower comes first). The other modules keep their relative order and shift around it, so to place one module you only pass that module — not the whole ordering. Use module_list to see the current order.
- Idempotent
Inputs
courseIdstringrequired- Course (collection) id the module belongs to
moduleIdintegerrequired- Module id to move
orderintegerrequired- New zero-based position within the course (lower comes first)
minicoursegeneratormcp_module_publishPublish a Module: it and every Lesson in it become visible to learners, and its previewUrl starts working.WriteModulePublish
Publish a Module: it and every Lesson in it become visible to learners, and its previewUrl starts working. Modules are created as DRAFTS, so a module you just created or pushed is not reachable by anyone until this runs — if you hand someone the link first, it will not work. Publishing is public: only call it when the person has said they want the module live.
- Idempotent
Inputs
moduleIdintegerrequired- Module id
minicoursegeneratormcp_module_pushCreate one complete Module (sections + lessons) from a `kind: Module` YAML spec — a Module is one focused unit; a full course is several Modules in a Course (see course_create).WriteModulePush
Create one complete Module (sections + lessons) from a `kind: Module` YAML spec — a Module is one focused unit; a full course is several Modules in a Course (see course_create). Include a top-level `landingPage` in the spec. Follow get_content_format for the content format; use dryRun:true to validate. Pass a short `description` — the spec has no description field, so this is how a created module gets one (every module should have a description). The module is created as a DRAFT — the previewUrl it returns will not work for anyone else until module_publish runs. Say so rather than handing over a link that looks broken, and publish only once the person has said they want it live.
Inputs
specstringrequired- A `kind: Module` YAML spec defining sections and lessons. See get_content_format for the required structure.
courseIdstring- The id of the parent course. Retrieve it from course_list or course_create.
descriptionstring- Short module description (1-2 sentences).
dryRunboolean- If true, validate the spec without creating anything.
minicoursegeneratormcp_module_themeSet how the learner sees a Module: page layout, typography and colours.WriteModuleTheme
Set how the learner sees a Module: page layout, typography and colours. Use it to match an author's brand — they often supply a palette or a style sheet. A merge patch: only the fields you pass change. Colours are CSS hex. Note this themes the whole module; to tint one box inside a lesson use the `background`/`text_color` box fields instead (see get_content_format).
- Idempotent
Inputs
moduleIdintegerrequired- Module id
backgroundColorstring- Page background colour as CSS hex
bodyBackgroundImagestring- Page background image url
buttonColorstring- Button colour as CSS hex
cardAlignmentstring- top, center or bottomone of
topcenterbottom cardBackgroundColorstring- Card background colour as CSS hex
fontstring- Font family, e.g. "Open Sans"
fontColorstring- Text colour as CSS hex, e.g. "#1e293b"
fontSizestring- S, M or Lone of
SML layoutinteger- 0 default, 1 left/right, 2 native, 3 bottomone of
0123 lineHeightstring- S, M or Lone of
SML
minicoursegeneratormcp_module_updateRename a Module, change its description, or change its learner-interface language.WriteModuleUpdate
Rename a Module, change its description, or change its learner-interface language. Only the fields you pass change. `language` switches the interface chrome (buttons/labels) the learner sees to that language's defaults — it does NOT translate the authored lesson content.
- Idempotent
Inputs
moduleIdintegerrequired- Module id
coverImageUrlstring- Use an existing image as the cover/thumbnail: an image_upload url, or any public image url (a third-party image is copied into MCG storage first). No generation, no credits.
descriptionstring- New module description
languagestring- New learner-interface language (ISO code, e.g. en, tr, de)
namestring- New module name
minicoursegeneratormcp_page_createCreate a new draft info or quiz Page in an existing Course (integer courseId) and Section (sectionId GUID from course_get).WritePage Create
Create a new draft info or quiz Page in an existing Course (integer courseId) and Section (sectionId GUID from course_get). Info content uses a content: YAML document; quiz content requires question and choices. See get_content_format. Image prompts trigger background generation through MCG's image provider and consume MCG AI credits; third-party `url:` images are copied into MCG storage without credits. Returns the new pageId (an integer). Learner access requires publishing; each call creates another page.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
sectionIdstringrequired- Section id (a GUID) from course_get.
titlestringrequired- Page title
contentstring- For an info page: the body as a content-authoring `content:` YAML document. For a quiz page: a YAML with `question:` and `choices:` (each a `text:`, with `correct: true` on the right one). Choices render in the supplied order. A quiz may also carry an optional `image:` (`prompt:`, `alt:`, `model:`, or `url:` for an existing image) above the question. Image prompts trigger generation and consume MCG AI credits; a `url:` image does not.
typestring- info (content) or quiz. Default info.one of
infoquiz
minicoursegeneratormcp_page_discard_changesDiscard a Page's unpublished edits (integer pageId) and restore its published version as the working copy.WritePage Discard Changes
Discard a Page's unpublished edits (integer pageId) and restore its published version as the working copy. Removes draft content, newly added draft options, and pending option/setting changes without an undo operation. Intended for a page with published_with_changes status; does not unpublish its live version.
Inputs
pageIdintegerrequired- Page id (an integer) from course_get.
minicoursegeneratormcp_page_getRetrieve a Page (integer pageId) in the connected account, including its title, type, sectionId, and rendered HTML body in text.WritePage Get
Retrieve a Page (integer pageId) in the connected account, including its title, type, sectionId, and rendered HTML body in text. Does not return the original authoring YAML. Use course_get for publish status and page_selections for authored quiz options.
Inputs
pageIdintegerrequired- Page id (an integer) from course_get.
minicoursegeneratormcp_page_moveReplace a Page's saved order within its Course and optionally its Section assignment within the same course.WritePage Move
Replace a Page's saved order within its Course and optionally its Section assignment within the same course. pageId and courseId are integers; sectionId is a GUID. Lower order values come first. These structural changes apply immediately to a published course; they do not wait for page_publish.
Inputs
courseIdintegerrequired- Course id (an integer) the page belongs to.
orderintegerrequired- New position within the course (lower comes first)
pageIdintegerrequired- Page id (an integer) to move.
sectionIdstring- Optional: move the page into this Section (a GUID) of the same course.
minicoursegeneratormcp_page_publishPublish one Page (integer pageId) or apply its pending edits to the live version.WritePage Publish
Publish one Page (integer pageId) or apply its pending edits to the live version. Overwrites previous live content and can remove quiz options without retaining the prior version. Learners can see it only if its Course is also published, under the learning path's access rules (public learning paths allow anyone with the link). Use for a request to make this page or its edits live.
Inputs
pageIdintegerrequired- Page id (an integer) from course_get.
minicoursegeneratormcp_page_selectionsRetrieve a quiz or survey Page's authored options (integer pageId), including each option's ID, text, and correct-answer flag.WritePage Selections
Retrieve a quiz or survey Page's authored options (integer pageId), including each option's ID, text, and correct-answer flag. Does not return learner responses; use course_answers for one learner's answers.
Inputs
pageIdintegerrequired- Page id (an integer) from course_get.
minicoursegeneratormcp_page_unpublishUnpublish one Page (integer pageId) and revoke learner access to it immediately, while leaving the rest of its Course unchanged.WritePage Unpublish
Unpublish one Page (integer pageId) and revoke learner access to it immediately, while leaving the rest of its Course unchanged. Retains its content, pending edits, ID, and progress records so it can be published again.
Inputs
pageIdintegerrequired- Page id (an integer) from course_get.
minicoursegeneratormcp_page_updateEdit a Page's title, its entire body, or a quiz's question and choices (pageId is an integer).WritePage Update
Edit a Page's title, its entire body, or a quiz's question and choices (pageId is an integer). At least one non-empty field is required. For an info page, content is an MCG content: YAML document that replaces the whole body. For a quiz page, content is the same YAML page_create accepts (question: and/or choices:, each choice a text: with correct: true on the right one); omit question: or choices: to keep it. choices: is the complete new list, matched to the existing options by position: option ids (and learners' past answers) are preserved, extra choices are added and surplus options removed; returns each option with its status. A content: body sent to a quiz, or content that compiles to an empty body, is rejected rather than overwriting the question. On published pages, text, question and answer-key edits remain pending until page_publish. Image prompts also trigger external image generation, consume MCG AI credits, and can modify the stored live image body. Repeating image-bearing updates can generate and charge again. Third-party `url:` images are copied into MCG storage (no credits). **Keep existing images:** read the page with page_get first and write each image you are keeping as `url: <its img src>` instead of `prompt:` — a `url:` image is placed as-is, never regenerated. Use `prompt:` only for an image that is new or that the user asked to replace. See get_content_format for the content format.
Inputs
pageIdintegerrequired- Page id (an integer) from course_get.
contentstring- For an info page: the complete replacement body as a content: YAML document. For a quiz page: a YAML with `question:` and/or `choices:` (each a `text:`, with `correct: true` on the right one), the same shape page_create takes; an omitted key keeps the current value. Choices are matched to the existing options by position, keeping their ids. Image prompts generate images and consume AI credits.
titlestring- New page title
minicoursegeneratormcp_scorm_uploadHost an interactive SCORM package (an AI-authored, self-contained scored activity) on MCG for a lesson `scorm` block.WriteScormUpload
Host an interactive SCORM package (an AI-authored, self-contained scored activity) on MCG for a lesson `scorm` block. You generate a SCORM 1.2 zip yourself (a self-contained HTML interactive that reports cmi.core.score/lesson_status via the SCORM API, plus a minimal imsmanifest.xml — read get_content_format's SCORM reporting rules first: report each interaction and commit as it happens, not once at the end, or partial attempts record nothing). Stage the zip with `media_upload_url` (get an upload URL, PUT the file to it), then call this with the returned **`downloadUrl`** as `url`. Returns { packageId, entryPointUrl, title, version, fileName } — put the **`packageId`** (and the returned entryPointUrl/title/version/fileName) in the `scorm` block.
Inputs
urlstringrequired- Publicly-reachable URL of the SCORM .zip — use the `downloadUrl` from media_upload_url.
fileNamestring- Optional display name for the SCORM package.
minicoursegeneratormcp_section_createAdd a Section to an existing Module.WriteSectionCreate
Add a Section to an existing Module.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
titlestringrequired- Section title
minicoursegeneratormcp_section_updateRename a Section.WriteSectionUpdate
Rename a Section.
- Idempotent
Inputs
sectionIdstringrequired- The unique identifier of the section to rename.
titlestringrequired- The new title for the section.
minicoursegeneratormcp_video_uploadHost a video on Vimeo through MCG (server-side — no third-party account needed) for a lesson `video` block.WriteVideoUpload
Host a video on Vimeo through MCG (server-side — no third-party account needed) for a lesson `video` block. **Any MP4 works** — pass any publicly-reachable video `url` directly, or stage a local file with `media_upload_url` (get an upload URL, PUT the file to it) and pass the returned **`downloadUrl`** as `url`. Returns { shopClipId, clipId, playerUrl } — put the **`shopClipId`** in the `video` block's `shopClipId`. MCG renders its own native player and bakes the playback URL in server-side once Vimeo finishes transcoding.
Inputs
urlstringrequired- Publicly-reachable URL of the video file — any hosted MP4, or the `downloadUrl` from media_upload_url.
fileNamestring- Optional display name for the video on Vimeo.
minicoursegeneratormcp_course_deleteDelete a Course (integer courseId) in the connected account together with its Sections and Pages.DestructiveCourse Delete
Delete a Course (integer courseId) in the connected account together with its Sections and Pages. Removes it from learner access if published. Content cannot be restored through this tool.
Inputs
courseIdintegerrequired- Course id (an integer) from course_list or course_get.
minicoursegeneratormcp_course_learner_removeTake someone off a Course.DestructiveCourseLearnerRemove
Take someone off a Course. This revokes access only — their account, their progress and any certificate they earned are kept, so adding them back restores where they were. Removing someone who is not on the Course is a no-op and comes back with removed: false.
- Idempotent
Inputs
courseIdstringrequired- Course id from course_list.
learnerstringrequired- The learner's email address or username.
minicoursegeneratormcp_learning_path_learner_removeRemove a learner from every team granting access to a Learning path (learningPathId, a GUID) in the connected account.DestructiveLearning Path Learner Remove
Remove a learner from every team granting access to a Learning path (learningPathId, a GUID) in the connected account. Revokes team-based access and can also remove access to other learning paths shared by those teams. Does not block public-link access to public learning paths. Retains the learner account, progress, and certificates; re-adding to this learning path does not restore all prior team memberships. Returns removed: false when no matching membership exists. Does not send email.
Inputs
learnerstringrequired- The learner's email address or username.
learningPathIdstringrequired- Learning path id (a GUID) from learning_path_list.
minicoursegeneratormcp_lesson_deleteDelete a Lesson.DestructiveLessonDelete
Delete a Lesson. This is destructive.
Inputs
lessonIdintegerrequired- The integer ID of the lesson to permanently delete.
minicoursegeneratormcp_lesson_discard_changesThrow away a Lesson's unpublished edits and restore the content learners currently see.DestructiveLessonDiscardChanges
Throw away a Lesson's unpublished edits and restore the content learners currently see. Irreversible — the working copy is gone, not archived. Only affects a lesson whose status is published_with_changes.
- Idempotent
Inputs
lessonIdintegerrequired- Lesson id
minicoursegeneratormcp_lesson_unpublishPull one Lesson out of the live module, back to draft.DestructiveLessonUnpublish
Pull one Lesson out of the live module, back to draft. It keeps its content and its id, so learner progress and analytics still line up, but learners no longer see it.
- Idempotent
Inputs
lessonIdintegerrequired- Lesson id
minicoursegeneratormcp_lesson_updateEdit a Lesson.DestructiveLessonUpdate
Edit a Lesson. Pass `title` to rename, and/or `content` (the MCG content-authoring format) to replace the body — the CLI recompiles it to HTML and replaces the whole body. Authoring is always in content-format, never raw HTML; call get_content_format for the spec.
- Idempotent
Inputs
lessonIdintegerrequired- The integer ID of the lesson to edit.
contentstring- Replacement body in the MCG content-authoring format. The CLI compiles it to HTML and replaces the entire existing body. Call get_content_format for the authoring spec. Omit to leave the body unchanged.
titlestring- New title for the lesson. Omit to leave the title unchanged.
minicoursegeneratormcp_module_deleteDelete a Module and all its Sections and Lessons.DestructiveModuleDelete
Delete a Module and all its Sections and Lessons. This is destructive.
Inputs
moduleIdintegerrequired- The numeric id of the module to delete.
minicoursegeneratormcp_module_unpublishMove a Module back to draft.DestructiveModuleUnpublish
Move a Module back to draft. Learners lose access immediately and the previewUrl stops working. Content and learner progress are kept, so it can be published again.
- Idempotent
Inputs
moduleIdintegerrequired- Module id
minicoursegeneratormcp_page_deleteDelete a Page (integer pageId) from the connected account.DestructivePage Delete
Delete a Page (integer pageId) from the connected account. Removes the page from learner access if published. Its content cannot be restored through this tool.
Inputs
pageIdintegerrequired- Page id (an integer) from course_get.
minicoursegeneratormcp_scorm_deleteDelete a hosted SCORM package.DestructiveScormDelete
Delete a hosted SCORM package. This is destructive: any lesson `scorm` block still referencing this packageId will break, so remove or repoint those lessons first. To swap in a corrected activity, prefer `scorm_replace` — it keeps the packageId and the lessons intact.
- Idempotent
Inputs
packageIdstringrequired- SCORM packageId to delete (GUID).
minicoursegeneratormcp_scorm_replaceCorrect or update an already-hosted SCORM activity **in place**, keeping the same `packageId`.DestructiveScormReplace
Correct or update an already-hosted SCORM activity **in place**, keeping the same `packageId`. Every lesson whose `scorm` block references that packageId picks up the new activity with no content edit — so use this instead of deleting and re-adding. Generate the corrected SCORM 1.2 zip, stage it with `media_upload_url`, then call this with the returned `downloadUrl` as `url` and the existing `packageId`.
- Idempotent
Inputs
packageIdstringrequired- The existing SCORM packageId to replace (GUID).
urlstringrequired- Publicly-reachable URL of the new SCORM .zip — use the `downloadUrl` from media_upload_url.
fileNamestring- Optional file name to record (defaults to the URL's base name).
minicoursegeneratormcp_section_deleteDelete a Section and its Lessons.DestructiveSectionDelete
Delete a Section and its Lessons. This is destructive.
Inputs
sectionIdstringrequired- The unique identifier of the section to delete. All lessons inside it will also be permanently deleted.
No tools match.