Academy

Active

academy · v1.0.0

Universal education module for ANY subject — lesson scenarios with concept, example, exercise, visual, summary and a concept wiki.

Schema Version:
1.0.0
Collection Type:
Curriculum

Section Types

IDName
conceptConcept
exampleExample
exerciseExercise
visualVisual
summarySummary
wikiWiki

MCP Tools

NameDescription
academy_create_scenarioCreate a new academy (universal education) scenario in DRAFT status. Returns { scenarioId, slug, title, sectionIds[] }. Slug auto-generated. Required: title. Optional: description, tags, subject (free text, e.g. "programlama"), level (beginner|intermediate|advanced). When seedDefaults=true the 5 default sections (concept/example/exercise/visual/summary) are pre-populated; otherwise the scenario starts empty (use academy_add_section to populate). Caller must be authenticated.
academy_add_sectionAppend a typed section to an existing academy scenario. Accepts scenarioId (cuid or slug) + sectionType (concept|example|exercise|visual|summary) + content (typed per sectionType — pass null/omit to use the type default) + optional chapterId (same scenario; sections read in chapter.order → section.order). Returns { sectionId, key, order, typeId, versionId }. Validates moduleId === "academy". Auto-assigns next order; key defaults to "<typeId>-<order>" if omitted. For multi-chapter authoring with parallel agents, split by chapter or use academy_add_sections to write a whole chapter atomically.
academy_add_sectionsAppend MULTIPLE typed sections to an academy scenario in ONE atomic call — the array order IS the reading order, so parallel agents cannot interleave even within the same chapter. Accepts scenarioId (cuid or slug) + optional chapterId (same scenario; ALL sections placed there) + sections[] (1-50, each { sectionType, content?, label?, key? }; content null/omit → type default). Prefer one add_sections call per chapter. Returns { scenarioId, scenarioSlug, chapterId, sections: [{ sectionId, key, order, typeId, versionId }] }.
academy_update_sectionUpdate an academy section's content and/or label. content is FULL replace (no field merge) — caller sends whole content object, validated against the section's typeId schema (concept/example/exercise/visual/summary). Creates a new SectionVersion when content changes, no-op when hash matches. Caller must own the parent scenario. Returns { sectionId, versionId, version, contentHash, contentChanged, labelChanged }. At least one of content/label required. label:null removes the label. For wiki sections use academy_wiki_* tools.
academy_convert_sectionConvert an academy section to a DIFFERENT section type (e.g. example → exercise) IN PLACE: order, chapterId and key are preserved so the section keeps its exact position. Because typeId is immutable, this deletes the old section and recreates it at the same slot with the new type — the section's id changes and the OLD version history is discarded (expected). content is the FULL new content object, validated against targetType's schema (concept/example/exercise/visual/summary). targetType MUST differ from the current type (use academy_update_section for same-type edits). Caller must own the parent scenario. Returns { oldSectionId, newSectionId, fromType, toType, key, order, chapterId, versionId, version }.
academy_delete_sectionDelete an academy section and all its versions. Caller must own the parent scenario. Returns { deletedSectionId, scenarioId, scenarioSlug, deletedVersionCount }. Hard delete — irreversible.
academy_update_scenarioUpdate an academy scenario's metadata (title/description/tags/status). At least one field required. tags is PUT semantics. description:null clears stored summary. Use academy_publish_scenario for the canonical publish path. Caller must own the scenario. Returns { scenarioId, slug, title, status, tags, description }.
academy_publish_scenarioPublish an academy scenario — creates a new ScenarioVersion snapshot (sectionManifest pointer list) and flips status to PUBLISHED. Re-publishing increments the version. Empty scenarios are rejected. Caller must own the scenario. Returns { scenarioId, versionId, version, publishedAt, sectionCount }.
academy_add_to_collectionAdd a scenario to an academy-typed collection (type=Curriculum). Caller must own the collection. Cross-module items allowed. Duplicate check: fails if scenario already in collection. order optional — defaults to append. Returns { collectionId, scenarioId, itemId, order, scenarioModuleId }.
academy_remove_from_collectionRemove a scenario from an academy-typed collection (type=Curriculum). Caller must own the collection. Returns { collectionId, scenarioId, removed:true }. Throws if scenario is not in the collection. Other items keep their order (no compaction).
academy_add_wiki_sectionCreate a new EMPTY wiki section on an academy scenario. The section starts with zero concepts — call academy_wiki_add_concept for each glossary entry. Accepts scenarioId (cuid) or slug. Returns { sectionId, key, order, versionId, scenarioSlug }. Section label defaults to 'Kavramlar' when omitted. Caller must own the scenario.
academy_wiki_add_conceptAppend a single concept card to an academy scenario's wiki section. The section must already exist (call academy_add_wiki_section first). slug must be unique within the section. definition is the 1-2 sentence collapsed-card summary; overview is the long markdown body. examples and references default to empty arrays. Creates a new SectionVersion. Returns { sectionId, conceptSlug, versionId, version, conceptCount }.
academy_wiki_update_conceptPatch a single concept in an academy scenario's wiki section. Identified by slug (slug itself is immutable). patch is partial: any field omitted is unchanged. Pass examples: [] or references: [] to clear arrays. Creates a new SectionVersion if content actually changed. Returns { sectionId, conceptSlug, versionId, version, contentChanged }.
academy_wiki_remove_conceptRemove a single concept from an academy wiki section by slug. The section itself stays (even if it becomes empty — drop via delete_section). Creates a new SectionVersion. Returns { sectionId, removedSlug, versionId, version, conceptCount }.

Usage Modes

IDName
tutormodules.academy.usageModes.tutor

Example Scenarios