LearnOS docs
MCP server

Tools

list_courses, search_lessons, list_lessons, get_lesson, get_chunk, create_flashcard, append_note, generate_presentation, create_presentation, update_presentation, replace_presentation_slides, add_presentation_slide, update_presentation_slide, get_presentation, list_presentations, get_transcript, create_audio_overview, get_audio_overview, get_audio_overview_url, get_course_progress, get_recent_activity.

Read

list_courses

List every course with its id and completion progress. Call this first to discover course ids for scoping.

Returns
Markdown list of courses with id and N/total lesson progress.
search_lessons

Hybrid semantic + keyword search across lesson content (local embeddings, no API key). Returns the most relevant sections.

Parameters
NameTypeDefaultDescription
query*string—Natural-language search query.
course_idstring—Restrict to one course id (from list_courses). Omit to search the whole library.
limitinteger (1–20)8Max sections to return.
Returns
Markdown listing each hit: lesson title, heading path, course, lesson_id, anchor, and the section text (truncated to ~2400 chars with a get_chunk hint).
list_lessons

List lesson titles within a course, optionally filtered to one module.

Parameters
NameTypeDefaultDescription
course_title*string—Course title substring (case-insensitive).
module_namestring—Optional module-name substring filter.
Returns
Markdown list of lessons with their lesson_id.
get_lesson

Fetch the full markdown body of one lesson by lesson_id.

Parameters
NameTypeDefaultDescription
lesson_id*string—The lesson UUID (from search_lessons or list_lessons).
Returns
Markdown — header with course/module + the lesson body (capped to ~24k chars).
get_chunk

Fetch one lesson section by lesson_id + anchor, as returned by search_lessons. Use to read a hit in full when the preview was truncated.

Parameters
NameTypeDefaultDescription
lesson_id*string—The lesson UUID.
anchor*string—The chunk anchor slug from a search hit.
Returns
Markdown — the section's heading path and full body.

Write

These tools add flashcards and notes to the lessons in your library. Note text enters semantic search asynchronously.

create_flashcard

Create a flashcard (front question + back answer) on a lesson. Appears in the lesson's deck immediately.

Parameters
NameTypeDefaultDescription
lesson_id*string—The lesson UUID the card belongs to.
question*string—Front / question.
answer*string—Back / answer.
Returns
A confirmation message.
append_note

Append a timestamped markdown note entry to a lesson's notes.

Parameters
NameTypeDefaultDescription
lesson_id*string—The lesson UUID the note belongs to.
content_md*string—Markdown body of the note.
Returns
A confirmation message. Note: the search index is NOT updated here.

Presentations

Short slide decks for team kickoffs when a course is assigned. View at /presentations/<id>; download .pptx from /api/presentations/<id>/pptx. Ready decks are readable by anyone with course access; only the owner can edit.

generate_presentation

AI-generate a 6–12 slide deck from a course, module, or lesson. Default purpose is intro (syllabus-aware kickoff template).

Parameters
NameTypeDefaultDescription
scope_type*'lesson' | 'module' | 'course'—Prefer 'course' for team intros.
course_id*string—Course UUID.
lesson_idstring—Required when scope_type='lesson'.
module_namestring—Required when scope_type='module'.
purpose'intro' | 'overview' | 'summary'introDeck intent.
forcebooleanfalseBypass sources_hash cache.
Returns
Confirmation with id, title, slide count, view path, and pptx path.
create_presentation

Create a presentation from an explicit slides array (agent-authored).

Parameters
NameTypeDefaultDescription
course_id*string—Course UUID.
title*string—Deck title.
slides*array—Ordered slides with title, optional body_md / speaker_notes_md / layout.
scope_type'lesson' | 'module' | 'course'courseScope.
purpose'intro' | 'overview' | 'summary'introDeck intent.
Returns
Confirmation with id, title, slide count, view path, and pptx path.
update_presentation

Update title and/or purpose on a presentation you own.

Parameters
NameTypeDefaultDescription
presentation_id*string—Presentation UUID.
titlestring—New deck title.
purpose'intro' | 'overview' | 'summary'—New purpose.
Returns
Confirmation with updated metadata.
replace_presentation_slides

Replace ALL slides on a presentation you own.

Parameters
NameTypeDefaultDescription
presentation_id*string—Presentation UUID.
slides*array—New ordered slides array.
Returns
Confirmation with new slide count.
add_presentation_slide

Append or insert one slide on a presentation you own.

Parameters
NameTypeDefaultDescription
presentation_id*string—Presentation UUID.
title*string—Slide title.
body_mdstring—Markdown body.
positioninteger—0-based insert index; omit to append.
Returns
Confirmation with new slide count.
update_presentation_slide

Patch one slide by 0-based position on a presentation you own.

Parameters
NameTypeDefaultDescription
presentation_id*string—Presentation UUID.
position*integer—0-based slide index.
titlestring—New title.
body_mdstring—New body.
Returns
Confirmation for the patched slide.
get_presentation

Read one presentation by id — metadata plus ordered slides (owner any status; others only ready + course access).

Parameters
NameTypeDefaultDescription
id*string—Presentation UUID.
Returns
Metadata header plus each slide's title, body, and notes.
list_presentations

List presentations. Default: yours. mine_only=false includes course-shared ready decks.

Parameters
NameTypeDefaultDescription
course_idstring—Optional course UUID filter.
mine_onlybooleantrueSet false to include shared ready decks.
Returns
Markdown list of presentations with id, purpose, and view path.

Video lessons

Read the timestamped transcript behind a video lesson in your library.

get_transcript

Fetch a video lesson's raw timestamped transcript (one [h:mm:ss] line per segment).

Parameters
NameTypeDefaultDescription
lesson_id*string—The video lesson's UUID.
Returns
Markdown — a header plus the timestamped transcript (capped to ~24k chars). Empty for non-video lessons.

Audio overviews

A roughly five-minute spoken overview (mp3) of a lesson, module, or course.

create_audio_overview

Generate a single-voice audio overview. Takes about 60–120 seconds; re-running on unchanged content returns the cached overview instantly.

Parameters
NameTypeDefaultDescription
scope_type*lesson | module | course—What the overview covers.
course_id*string—Course id (from list_courses or get_lesson).
lesson_idstring—Required when scope_type is lesson.
module_namestring—Required when scope_type is module.
forcebooleanfalseGenerate a fresh overview even if one exists for this content.
Returns
The overview id, status, duration, and a signed mp3 URL valid for 15 minutes.
get_audio_overview

Read one audio overview: status, scope, duration, and its script once ready.

Parameters
NameTypeDefaultDescription
id*string—The audio overview id.
Returns
The overview's status, scope, duration, and script.
get_audio_overview_url

Get a fresh signed URL for an overview's mp3 when the previous one expired.

Parameters
NameTypeDefaultDescription
id*string—The audio overview id.
ttl_secondsinteger900URL lifetime in seconds (60–3600).
Returns
A signed mp3 URL.

Progress & activity

get_course_progress

Where you left off in one course: the lesson to resume, your most recent activity, a grouped recap, and completion counts.

Parameters
NameTypeDefaultDescription
course_id*string—Course id (from list_courses).
Returns
Resume target, latest activity, recap, and completion counts.
get_recent_activity

Your recent learning activity, newest first: notes, highlights, completions, chat citations, flashcard reviews, and generated reviews.

Parameters
NameTypeDefaultDescription
course_idstring—Only activity in this course.
lesson_idstring—Only activity on this lesson.
kindsstring[]—Filter: note, highlight, completion, chat_citation, flashcard_review, review_generated.
limitinteger25Max rows (1–100).
Returns
Activity entries in time order.

On this page

Command Palette

Search for a command to run...