Skip to content
You're reading the dev preview docs. Some features here aren't in the released app yet. Released docs

Learning Studio / agents

Connect through MCP

Use the same validated course-editing path as the editor.

Connect a compatible assistant to read and edit courses through Learning Studio’s validated operations. The assistant acts with your account’s permissions.

Configure your MCP client with the Learning Studio app origin followed by /mcp, then complete OAuth authorization. Use the app origin, not this help center’s domain.

Task Tools
Discover and read list_courses, get_course, list_course_versions
Course workspace create_course, duplicate_course, rename_course, archive_course, delete_course, move_course
Folders list_folders, create_folder, rename_folder, delete_folder
Check and reuse validate_course, get_course_alignment, list_templates
Edit content apply_course_ops
AI draft_course, suggest_course_edit, suggest_blueprint, suggest_design, build_from_blueprint, rewrite_text, suggest_distractors, suggest_objective_levels, draft_rubric, record_ai_decision
Review comments list_comments, add_comment, resolve_comment
Reports get_assessment_plan, export_alignment_csv
Dev build only list_frameworks, get_framework, create_checkpoint, add_media_from_url, export_package, import_package_from_url, get_publication, publish_course, unpublish_course
Founder only, dev build only founder_* tools for reviewers, access, join links, Reviewer Mode feedback, agent-test quiz grading and AI evaluation

Check the tools discovered by your client for their exact argument schemas. Workspace writes and apply_course_ops take an idempotency key. AI drafting has a separate retry boundary described below. Read the latest version before applying course operations.

  1. Create or locate the course.
  2. Read its content and version.
  3. Prepare native operations with fresh IDs.
  4. Apply operations, then read back and validate.
  5. Check the rendered result in the app.

AI edit, blueprint, design, rewrite, wrong-answer, objective-level and rubric tools return suggestions. Apply design, level and rubric operations with apply_course_ops and the baseVersion those tools return, not a version from a later read. Then call record_ai_decision with the suggestion’s eventId. If the save conflicts, the course changed: request the suggestion again. draft_course creates a new course; it is not a suggestion-only operation. Comments are saved on the review thread and do not change course content. list_frameworks, get_framework, create_checkpoint and add_media_from_url appear only when the dev build enables them. A production build does not. add_media_from_url stores the file in a course the caller owns; it does not place a block on a page. Use archive when you want to keep the course for later; delete only when you intend permanent removal.

The founder_* tools are for the founder’s own agents on the dev build. Every call checks that the signed-in account is a founder and refuses anyone else. Tools that send email, delete reviewers, end access or revoke a join link do nothing unless the call includes confirm: true and an idempotencyKey; repeating a call with the same key returns the first result. founder_submit_quiz_attempt grades answers without saving an attempt, so it never affects quiz gating or results.

export_package, import_package_from_url, get_publication, publish_course and unpublish_course are also on the dev build only, for the signed-in caller. export_package returns a download link that lasts 15 minutes and does not change the course. Importing, publishing and unpublishing do nothing unless the call includes confirm: true and an idempotencyKey. Import accepts an https zip up to 32 MB and refuses private addresses the same way add_media_from_url does.

If a package import ends without a confirmed result, repeat the same request with the same idempotencyKey, URL, title, and folder. The import may already have committed. Once the archive has been staged, retries reuse that copy rather than downloading the URL again; do not start a new key just because the URL later expires. A successful response includes courseId and replayed, which is true when the existing import result was reused.

An agent can plan a course the way Backward Design does in Learning Design: results first, then evidence, then pages.

  1. Read the course and its objective IDs with get_course.
  2. Ask for that plan with suggest_design, or apply one course.design.update yourself. The tool takes the current version, a brief, and approach (academic or performance). It returns unsaved ops: course.settings.update for the objectives and course.design.update for the design. Apply them with the returned baseVersion, then call record_ai_decision. A design you write yourself is the whole plan: the approach, the outcome, roles and tasks (performance) or transfer goals and understandings (academic), links from objectives to them, and the evidence learners will produce.
  3. Plan pages with suggest_blueprint or course.blueprint.update, then build them.
  4. Send the design again with each evidence item’s realisedBy pointing at the page, block or question that carries it.
  5. Call get_course_alignment. With backward design on it returns designChecks, each with a message, why and helpSlug (the help-center section that explains it). They are advice and never block anything. Add a check’s checkId and subjectId to design.dismissed to hide one that doesn’t apply.

Understand course quality checks lists every check. The repository’s external agent guide has a complete example design.

courseId and folderId are UUID strings. Optional fields are marked with ?. Workspace write keys are 8–100 characters; use a new key for a different intended write.

Tool Inputs
list_courses, list_folders No arguments
list_templates kind? (block or section)
get_course, list_course_versions, validate_course, get_course_alignment courseId
create_course title (1–200 characters), idempotencyKey, language? (up to 16), folderId? (UUID or null)
duplicate_course, rename_course courseId, title (1–200), idempotencyKey
archive_course courseId, archived (boolean), idempotencyKey
delete_course courseId, idempotencyKey
move_course courseId, folderId (UUID or null), idempotencyKey
create_folder name (1–120), idempotencyKey
rename_folder folderId, name (1–120), idempotencyKey
delete_folder folderId, idempotencyKey
apply_course_ops courseId, baseVersion (integer ≥1), idempotencyKey, ops (1–500), label? (up to 200)
draft_course text (up to 60,000), mode? (prompt or document), title?, language?
suggest_course_edit courseId, baseVersion, instruction (3–2,000), scopeSectionId?, scopeBlockId?
suggest_blueprint courseId, baseVersion, brief (10–4,000), length? (short, medium, long)
suggest_design courseId, baseVersion, brief (10–20,000), approach (academic or performance), audience? (customers or employees). audience applies only to performance: omit it to use the course audience, or customers when the course has none. Academic ignores it. Returns baseVersion, ops (course.settings.update and course.design.update), rationale, sources, promptVersion, and eventId. Nothing is saved
build_from_blueprint courseId, baseVersion
rewrite_text courseId, text (1–8,000 characters), instruction (3–1,000), context? (up to 8,000)
suggest_distractors courseId, sectionId, blockId, questionId, count (1–5). The question must be single choice or multiple choice, with at least one correct option
suggest_objective_levels courseId, baseVersion, objectiveIds? (at most 12 stored ids). Omit objectiveIds to cover every objective that is not retired. Apply the returned ops with the returned baseVersion
draft_rubric courseId, baseVersion, and objectiveIds? and/or evidenceId. Apply the returned ops with the returned baseVersion
record_ai_decision eventId (the suggestion id), decision (accepted, rejected, edited, or expired), targetIds?
list_comments courseId, status? (open or resolved)
add_comment courseId, body (1–4,000), and either threadId or both sectionId and blockId
resolve_comment courseId, threadId, status (open or resolved)
get_assessment_plan courseId, format (markdown or csv)
export_alignment_csv courseId
list_frameworks No arguments. Present only on a dev build that enables founder tools
get_framework frameworkId (for example bloom-revised)
create_checkpoint courseId, label (1–120 characters)
add_media_from_url courseId (a course the caller owns), url (https only, up to 50 MB, image, video, audio or PDF)

get_course_alignment also returns a strength array, as GET /courses/:id/alignment does, with one entry per objective × scored-question link. Each entry includes objectiveId, questionId, blockId, sectionId, and strength (aligned, below_level, kind_too_weak, or unclassified). When a framework drove the result, the entry also includes frameworkId, objectiveLevelId, and questionLevelId; when the question type limited rigor, ceilingLevelId. An author acceptance adds overrideReason and the link counts as aligned. The same response includes assessmentBlueprint (scored-point shares by objective and framework level, optional targets, and deviations with id blueprint_weight_deviation). Set targets through apply_course_ops with course.settings.update and assessmentTargets, as in the HTTP alignment section. Pass format: "csv" to get the alignment CSV as text instead; the default JSON response also includes timeEstimates.

For suggest_course_edit, provide a content page’s scopeSectionId or a block’s scopeBlockId. The schema marks them optional, but the current runtime requires a valid page scope and rejects the cover or a chapter. If both are present they must refer to the same page. Suggestions cannot edit other pages.

MCP does not expose the HTTP dryRun option. Use the HTTP operation endpoint when validation without saving is required.

draft_course requires at least 20 trimmed characters for a prompt or 200 for document text. It creates a course and has no idempotency key. If its response is interrupted, list courses and check whether creation completed before trying again. Suggestion tools can also invoke paid model requests on each retry even though they do not save course content.

List visible courses from the Projects page

Section titled “List visible courses from the Projects page”

A browser-local WebMCP tool exposes the filtered course list to an agent. The list_visible_courses tool is read-only and respects the active search, folder, and label filters on the Projects page, so an agent can see the same courses the author sees.

Search course titles in the Your courses table. Folder, label, and archive filters are separate controls. Full-resolution PNG
On narrow screens, course search and folder and label filters remain available below Recently edited. Full-resolution PNG

Last updated · Kite v0.25.6

Same update, your timezone

Pacific · Nov 6
Central · Nov 6
Eastern · Nov 6

Made with love by the team at EdStratum Labs AI