list_courses
Lists the authenticated creator organization's courses (id, title, status, price).
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | Optional | One of draft, published, or archived. Omit to list all courses. |
Documentation
Model Context Protocol (MCP) is an open standard that lets AI assistants like Claude connect securely to external tools. Connect Edustra's Creator MCP server and your AI assistant can go from an idea, a video, or pasted text straight to a live, priced course — through nothing but a chat conversation.
Setup
Every AI assistant connects to Edustra using a personal access token, generated from your account settings. One token equals full access to your own organization's courses — nothing more.
This is the only time you'll see this token. Copy it now — you won't be able to view it again. If you lose it, revoke it and generate a new one.
Add this as a custom connector (remote MCP server) in Claude or any MCP-compatible client. Paste the server URL below and authenticate with the header Authorization: Bearer <your token>.
Server URL
https://app.edustra.com/api/mcp/creatorInside Claude, the same settings page walks you through:
Your token list shows each token's name, a masked preview (prefix + "****"), when it was created, when it was last used (or "Never used"), and its status — Active or Revoked. Every active token has a "Revoke" action. Revoking is immediate and cannot be undone.
Pick the client you're connecting below. Every client needs the same two things: the server URL and your bearer token.
https://app.edustra.com/api/mcp/creatorclaude mcp add --transport http edustra-creator https://app.edustra.com/api/mcp/creator \
--header "Authorization: Bearer <YOUR_TOKEN>"ChatGPT (on plans that support custom connectors) and other MCP-aware AI products let you add a remote MCP server by URL and a bearer token, similar to the Claude flow above. Exact menu paths vary by product and change over time — check your client's own documentation for the precise steps. Whatever the interface, you'll need these two facts:
https://app.edustra.com/api/mcp/creatorAuthorization: Bearer <YOUR_TOKEN>{
"mcpServers": {
"edustra-creator": {
"url": "https://app.edustra.com/api/mcp/creator",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}Once connected, just talk to your assistant. A few things to try:
The Creator MCP server exposes 10 tools, grouped into three categories. Every tool operates only on your own organization's data.
list_coursesLists the authenticated creator organization's courses (id, title, status, price).
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | Optional | One of draft, published, or archived. Omit to list all courses. |
create_courseCreates a new draft course.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | Required | The course title. Minimum 1 character. |
description | string | Optional | A short course description. |
add_moduleAdds a module (unit) to an existing course.
| Parameter | Type | Required | Description |
|---|---|---|---|
courseId | integer | Required | The ID of the course to add the module to. Must be positive. |
title | string | Required | The module title. Minimum 1 character. |
add_lessonAdds a text lesson to a module. content is the full lesson body in Markdown.
| Parameter | Type | Required | Description |
|---|---|---|---|
moduleId | integer | Required | The ID of the module to add the lesson to. Must be positive. |
title | string | Required | The lesson title. Minimum 1 character. |
content | string | Required | The full lesson body, in Markdown. Minimum 1 character. |
publish_coursePublishes a course. Requires at least one lesson, and a price if the course is paid.
| Parameter | Type | Required | Description |
|---|---|---|---|
courseId | integer | Required | The ID of the course to publish. Must be positive. |
generate_course_from_contentStarts an AI course-generation job from a YouTube video, pasted Instagram caption/post text, or arbitrary pasted text. Returns an importJobId — poll it with get_course_import_status until status is completed (yields courseId) or failed.
PDF sources are NOT supported through this tool. A PDF import requires a presigned file upload, which an AI chat client cannot perform. If a creator has a PDF, direct them to the web uploader at app.edustra.com/workspace/courses/ai-builder instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
sourceType | string | Required | One of youtube, instagram_text, or llm_text. |
url | string | Optional | 1–2000 characters. Required when sourceType is youtube. |
text | string | Optional | 200–120,000 characters. Required when sourceType is instagram_text or llm_text. |
titleHint | string | Optional | 1–150 characters. An optional hint for the generated course title. |
get_course_import_statusPolls the status of a job started by generate_course_from_content.
Returns: status (pending, processing, completed, or failed), courseId (once completed), error (a short reason code if failed), createdAt, completedAt.
| Parameter | Type | Required | Description |
|---|---|---|---|
importJobId | integer | Required | The job ID returned by generate_course_from_content. Must be positive. |
set_course_pricingSets a course's access mode, price, currency, billing model, and optional order bump.
Edustra supports exactly one order bump per course — passing orderBump replaces any existing one.
| Parameter | Type | Required | Description |
|---|---|---|---|
courseId | integer | Required | The ID of the course. Must be positive. |
accessMode | string | Required | free or paid. |
price | number | Optional | The course price. Must be ≥ 0. |
currency | string | Optional | Exactly 3 characters, e.g. BRL or USD. |
billingModel | string | Optional | one_time, subscription_monthly, or subscription_yearly. Default: one_time. |
orderBump | object | Optional | { enabled: boolean, name: string (≤120 chars), description?: string (≤300 chars), price: number (≥0) } |
update_course_tiersReplaces a course's pricing tiers wholesale and sets its pricing mode.
When pricingMode is tiers, at least 2 tiers are required. Switching back to single keeps the tier rows — no data loss — but the storefront ignores them while in single mode.
| Parameter | Type | Required | Description |
|---|---|---|---|
courseId | integer | Required | The ID of the course. Must be positive. |
pricingMode | string | Required | single or tiers. |
tiers | array | Required | Max 6 items. Each item: { name: string (1-80 chars), price: number (≥0), features: string[] (each ≤160 chars, max 20 items), isDefault: boolean, sortOrder: integer } |
set_sales_page_copySets a course's public sales page copy. Only the fields provided are updated.
| Parameter | Type | Required | Description |
|---|---|---|---|
courseId | integer | Required | The ID of the course. Must be positive. |
salesPageSlug | string | Optional | 3-60 characters, lowercase letters, numbers, and hyphens only. |
salesHeadline | string | Optional | ≤200 characters. The main sales page headline. |
salesSubheadline | string | Optional | ≤300 characters. The sales page subheadline. |
promoVideoUrl | string | Optional | Must be a valid URL. |
learnPoints | string[] | Optional | Bullet "what you'll learn" points. |
Yes — we recommend creating one token per AI client you connect (for example, one for Claude Desktop and a separate one for Claude Code), so you can manage and revoke access to each independently.
Access is removed immediately and cannot be undone. Any AI assistant using that token will lose access right away — generate a new token to reconnect it.
Yes, on ChatGPT plans that support custom connectors — see the "Connect your AI assistant" section above for the general setup.
No. Setup is copy and paste — the URL, then your token — and from there, the conversation with your AI assistant drives everything.
No. A token only grants access to your own organization's courses and data — there is no cross-tenant access.