# Tools · Courses

> MCP tools for courses: listing and viewing courses with their modules and lessons, building a whole course with the product that sells it, editing and deleting the course, adding, editing, moving and deleting modules and lessons, and the student's side: enrollment and progress.

Building and maintaining courses: a whole course in one call (space, modules, lessons and the sales product), the cover and the status, and then the modules and lessons: adding, renaming, reordering, moving a lesson to another module and deleting. Students enroll and mark their progress through the conversation. Each lesson's content (text, video) still goes in through the dashboard.

Each tool carries a badge: <span class="tool-kind tool-kind-read">Read-only</span> changes nothing, <span class="tool-kind tool-kind-write">Changes</span> creates or changes something right away, and <span class="tool-kind tool-kind-confirm">Asks to confirm</span> only acts after your yes to a summary. See [Money and confirmation](/mcp/dinheiro-e-confirmacao).

## In short

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| [`list_courses`](#list-courses) | The community's courses | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_course`](#get-course) | A course with its modules and lessons | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_course`](#create-course) | Space, course, modules, lessons and the product, in one go | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_course`](#update-course) | Edits a course's title, level, status and cover | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`create_course_module`](#create-course-module) | Adds a module to a course | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`create_lesson`](#create-lesson) | Adds a lesson to a module | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_course_module`](#update-course-module) | Renames a module or changes its position | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_lesson`](#update-lesson) | Changes a lesson, or moves it to another module | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_course_module`](#delete-course-module) | Deletes a module with its lessons | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`delete_lesson`](#delete-lesson) | Deletes a lesson | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`delete_course`](#delete-course) | Deletes a course | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`enroll_in_course`](#enroll-in-course) | Enrolls you in a published course | Member (not finance) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`complete_lesson`](#complete-lesson) | Records your progress in a lesson | Member (not finance) | <span class="tool-kind tool-kind-write">Changes</span> |

## `list_courses`

<span class="tool-kind tool-kind-read">Read-only</span>

**List courses.** The community's courses. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space_id` | id | No | Only the courses in one courses space |

**Returns:** the courses, with id, slug, title, level and status.

**Ask like this:** *"Which courses already exist?"*

## `get_course`

<span class="tool-kind tool-kind-read">Read-only</span>

**View a course with modules and lessons.** A course with its full structure. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `course` | text | Yes | The course id or slug |

**Returns:** the course, the modules (with the id `create_lesson` needs) and each module's lessons.

**Ask like this:** *"Show me the structure of the Excel from Scratch course."*

## `create_course`

<span class="tool-kind tool-kind-write">Changes</span>

**Create a complete course.** Courses space → course → modules → lessons → (optional) the product that unlocks the space. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `title` | text, up to 255 | Yes | The course title |
| `description` | plain text | No | No formatting: Markdown marks are stripped |
| `level` | `beginner`, `intermediate`, `advanced` | No | Default: `beginner` |
| `space_id` | id | No | An existing Courses space |
| `section_id` | id | No | Where to create the space, if `space_id` isn't given |
| `space_title` | text | No | Default: the course title |
| `icon` | one of the icons in the list | No | The icon of the space it creates. See [Icons](/mcp/ferramentas-comunidade#icons) |
| `image_url` | link | No | The course cover. See [Images](/mcp/ferramentas#images) |
| `modules` | list, up to 30 | No | Each with `title` (required) and `lessons` |
| `sale` | object | No | The product that sells the course (see below) |
| `idempotency_key` | text, up to 100 | No | |

Each **module** has `title` and `lessons`, a list of up to 50, and each **lesson** has `title` (required), `type` (`text`, `video`, `link`, `image`; default `text`) and `duration` (e.g. *12 min*).

The **sale** (and the **ticket**, in `create_event`):

| Field | Type | Description |
|---|---|---|
| `price` | number, in reais | Required |
| `title` | text, 3 to 255 | Default: the course title (or *Ingresso — event title*) |
| `type` | `ONE_TIME`, `INSTALLMENT`, `SUBSCRIPTION` | Default: `ONE_TIME` (one-time) |
| `interval` | `MONTHLY`, `YEARLY` | Only for `SUBSCRIPTION` |
| `max_installments` | 1 to 12 | Up to how many card installments |
| `stock` | number | Quantity on sale |
| `direct_link` | yes or no | Sold by direct link |
| `publish` | yes or no | Put on sale right away. Default: draft |

**Returns:** the space (and whether it was just created), the course (id, title, slug, status), the modules with their lessons, and the product (id, title, price, status), if any.

**Ask like this:** *"Build the Excel from Scratch course in the courses space, with the modules Basics, Formulas and Pivot tables, 3 video lessons in each, and a R$ 297 product in up to 10 installments, as a draft."*

**Notes:** lessons store title, type and duration; the content goes in through the dashboard. The product unlocks the course space for buyers.

## `update_course`

<span class="tool-kind tool-kind-write">Changes</span>

**Edit a course.** Changes the title, description, level, status (`draft`, `published`, `archived`) and the cover. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `course` | id, slug or link | Yes | |
| `title`, `description` | text | No | |
| `level` | `beginner`, `intermediate`, `advanced` | No | |
| `status` | `draft`, `published`, `archived` | No | |
| `image_url` or `image_base64` | link or file | No | The new cover |

**Ask like this:** *"Publish the Excel from Zero course and swap the cover for this one."*

**Notes:** modules and lessons change with [`update_course_module`](#update-course-module), [`update_lesson`](#update-lesson) and the delete tools.

## `create_course_module`

<span class="tool-kind tool-kind-write">Changes</span>

**Add a module to a course.** Adds a module to the end of an existing course. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `course_id` | id | Yes | From `list_courses` or `create_course` |
| `title` | text | Yes | |

**Returns:** the new module, with the id `create_lesson` needs.

**Ask like this:** *"Add a Charts module to the Excel from Scratch course."*

**Notes:** to rename it or change its position later, [`update_course_module`](#update-course-module).

## `create_lesson`

<span class="tool-kind tool-kind-write">Changes</span>

**Add a lesson to a module.** Adds a lesson to the end of a module. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `module_id` | id | Yes | From `get_course` |
| `title` | text | Yes | |
| `type` | `text`, `video`, `link`, `image` | No | Default: `text` |
| `duration` | text | No | E.g. *12 min* |

**Returns:** the new lesson.

**Ask like this:** *"In the Charts module, create the lessons Line charts (8 min) and Pie charts (6 min), both video."*

**Notes:** the lesson stores title, type and duration. The content (the text, the video) isn't saved through MCP yet: add it in the dashboard.

## `update_course_module`

<span class="tool-kind tool-kind-write">Changes</span>

**Edit course module.** Renames a module or changes its position. Only what you send changes. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `module_id` | id | Yes | From `get_course` |
| `title` | text, up to 255 | No | |
| `order` | number, from 0 | No | The position in the course |

**Ask like this:** *"Rename the Formulas module to Essential formulas and make it second."*

## `update_lesson`

<span class="tool-kind tool-kind-write">Changes</span>

**Edit lesson.** Changes a lesson's title, type, duration or position, or moves it to another module of the same course. Only what you send changes. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `lesson_id` | id | Yes | From `get_course` |
| `title` | text, up to 255 | No | |
| `type` | `text`, `video`, `link`, `image` | No | |
| `duration` | text | No | E.g. *12 min* |
| `order` | number, from 0 | No | The position in the module |
| `module_id` | id | No | Moves the lesson to this module (of the same course). Without `order`, it goes to the end |

**Ask like this:** *"Move the Pie chart lesson to the Fundamentals module, as the last lesson."*

**Notes:** the lesson's content still goes in through the dashboard.

## `delete_course_module`

<span class="tool-kind tool-kind-confirm">Asks to confirm</span>

**Delete course module.** Deletes a module and all its lessons. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `module_id` | id | Yes | From `get_course` |
| `course` | id, slug or link | No | The course, so the summary shows the names of the module and its lessons |

**Notes:** the progress of whoever already watched is kept.

## `delete_lesson`

<span class="tool-kind tool-kind-confirm">Asks to confirm</span>

**Delete lesson.** *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `lesson_id` | id | Yes | From `get_course` |
| `course` | id, slug or link | No | The course, so the summary shows the lesson's name |

**Notes:** the progress of whoever already watched is kept.

## `delete_course`

<span class="tool-kind tool-kind-confirm">Asks to confirm</span>

**Delete course.** The course is archived and leaves the feed. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `course` | id, slug or link | Yes | |

**Returns:** on the first call, the title, how many modules and enrollments the course has, and the confirmation code.

## `enroll_in_course`

<span class="tool-kind tool-kind-write">Changes</span>

**Enroll in course.** Enrolls you in a published course. *Role: owner, admin, moderator or member.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `course` | id, slug or link | Yes | |

**Ask like this:** *"Enroll me in the Excel from Scratch course."*

## `complete_lesson`

<span class="tool-kind tool-kind-write">Changes</span>

**Record lesson progress.** Marks a lesson as completed, or records a percentage, in a course you're enrolled in. *Role: owner, admin, moderator or member.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `course` | id, slug or link | Yes | |
| `lesson_id` | id | Yes | From `get_course` |
| `completed` | yes or no | No | Default yes |
| `progress_percent` | from 0 to 100 | No | |

**Ask like this:** *"Mark the Basic formulas lesson as watched."*

## Related

- [Tools](/mcp/ferramentas)
- [Recipes](/mcp/receitas)
- [Money and confirmation](/mcp/dinheiro-e-confirmacao)
