Skip to content
CursareDocs
Sign in

Start here

  • Overview
  • Getting started
  • Platform concepts

Create

  • Content
  • Editor and blocks
  • Block reference

Publish & access

  • Publishing and access
  • Custom domain & white-label

Learners

  • Learner experience
  • Learners and enrollments
  • Progress and certificates

Teams & cohort

  • Teams
  • Cohorts

Sales

  • Offers & checkout
  • Payments & payouts
  • Affiliates
  • Insights and reports

Admin

  • Organization & security
  • Plans, trial & billing
  • Appearance
  • Members & roles
  • Audit log

Developer

  • Integrations
  • API keys & webhooks
  • MCP server
  • API reference
Explore the API
Developer

MCP server

Cursare ships an MCP server (Model Context Protocol) so AI clients — Codex, ChatGPT, Claude, Cursor, and any MCP-compatible agent — can operate your organization in natural language: browse and edit contents, enroll learners, issue refunds, summarize insights. This page covers connecting a client, how authentication and permissions work, what the tools cover, and how to author course content with an AI assistant.

What it is

The server lives at https://mcp.cursare.com and exposes one tool per operational API contract, generated from the same zod contracts that drive the REST API and its OpenAPI document. Each tool is the snake_case form of the API operation — list_contents, enroll_learner, refund_purchase — with the exact same request and response schemas. The REST API's self-describing index and public OpenAPI document are deliberately not tools; every organization operation is. A connected assistant invokes them from plain language: the client picks the tool, fills the arguments, and shows you the result.

Because the tools and the REST API share one contract source, they never drift: a field added to the API appears in the matching tool on the same deploy.

Connect

The recommended path is Settings → Developer → MCP → Add assistant. Choose the client first; Cursare uses browser OAuth where supported and creates a dedicated one-year organization API key for headless clients. The key is shown once. Advanced manual setup keeps the endpoint and raw snippets available without making them the starting point.

During OAuth, the consent screen requires an explicit organization. A valid active dashboard organization is preselected; an ambiguous external start requires a choice. The grant stores that organization permanently, so switching dashboard organizations never retargets an existing assistant.

Codex and ChatGPT

Add Cursare to Codex CLI, then sign in through the browser:

codex mcp add cursare --url https://mcp.cursare.com
codex mcp login cursare

The same MCP configuration is available to the Codex IDE extension and ChatGPT desktop when they run on the same Codex host. In ChatGPT desktop, you can also open Settings → MCP servers and add https://mcp.cursare.com directly. ChatGPT on the web receives remote MCP tools through an installed app or plugin rather than the local Codex configuration.

claude.ai and Claude Desktop

  1. Open Settings → Connectors → Add custom connector.
  2. Paste https://mcp.cursare.com and confirm.
  3. A browser window opens — sign in with Cursare (your existing session is reused if you have one).
  4. Review the consent screen and click Allow.

The connector is now available in your chats, acting as you, with your roles.

Claude Code

With OAuth (a browser login, same consent flow as above):

claude mcp add --transport http cursare https://mcp.cursare.com

Or headless, with a dedicated key from Settings → Developer → MCP → Add assistant:

claude mcp add --transport http cursare https://mcp.cursare.com --header "Authorization: Bearer cr_live_..."

Cursor and other MCP clients

Any client that speaks MCP over Streamable HTTP works the same way: point it at https://mcp.cursare.com. If the client supports OAuth, an unauthenticated request triggers the browser sign-in automatically; otherwise, configure a bearer header with a cr_live_ API key. In Cursor, for example, add the server URL to your MCP configuration and optionally set the Authorization header.

A quick sanity check

Whichever client you connected, ask it something read-only first — list my courses or how many learners enrolled this week? — and confirm the answer matches your dashboard. A working read means the credential, the organization, and the tool wiring are all correct before you let the assistant write anything.

Authentication and permissions

The server accepts two kinds of credentials, and which one you use decides what the assistant is allowed to do:

OAuth user tokenOrganization API key
IdentityThe signed-in user plus the explicitly selected organizationThe organization itself
PermissionsThe user's real team roles apply — editor, finance, cohort, learnersOrg-admin authority over the whole organization
How you get itBrowser sign-in + consent screen, handled by the clientCreated at Settings → Developer → MCP (cr_live_…)
RevocationRevoke the exact assistant/member/organization connection under Developer → MCPRevoke or replace the dedicated key on the same MCP page
Best forPersonal assistants — Codex, ChatGPT desktop, Claude, CursorHeadless agents, CI, shared automation

A finance-role member connected via OAuth can read sales but cannot rewrite a course; an API key can do both. Pick the narrower credential when the narrower one is enough.

Tokens are secrets

An OAuth token acts as the user who authorized it — everything the assistant does is done in their name, with their roles. An API key acts with org-admin scope. Treat both as secrets: never place them in course content, frontend code, or screenshots, and revoke anything that leaks.

School login OAuth is a different boundary

The short OAuth exchange that signs a learner into a school host is not an MCP grant. It has fixed identity-only scopes, is consumed once by the school, and is rejected as a Bearer credential by both MCP and /api/v1.

What the tools cover

The callable API contracts are grouped by resource:

GroupExample tools
OrganizationProfile/members, custom domain, organization shape, audit events, API-key list/revoke, MCP connections, resolve_reference
Contentslist_contents, create_content, get_content, update_content, delete_content, publish_content, duplicate_content, promote_content, demote_content
Offerslist_offers, list_content_offers, create_offer, get_offer, update_offer, duplicate_offer, set_primary_offer, archive_offer
Authoringget_document_schema, get_content_document, replace_content_document — the document format reference plus full draft read and replace
LearnersList/enroll/update/unenroll, single and bulk progress reset, mastery, enrollment-request list/summary/approve/reject
Cohortslist_content_cohorts, create_cohort, update/delete, assign/move/remove learner, set_cohort_member_role
Cohort discussionlist_cohort_discussion, create_cohort_discussion_post, resolve_discussion_post, pin_discussion_post, delete_discussion_post
Intake formslist/create/get/update/delete
Campaignslist_campaigns, create/update/delete
Teamslist/create/get/update/delete, add/remove member, set_team_member_roles
Sales & payoutslist_sales, purchase list/get/by-content, refund_purchase, get_payouts
AffiliatesProgram get/update, affiliate list/approve/block, commission override and settlement
Insightsget_insights, get_insights_series, get_content_insights, get_content_sales, list_content_reviews
IntegrationsFour-capability status plus Google, WhatsApp, video uploads, and payment operations
Webhookslist/create/update/delete, list_webhook_deliveries, test_webhook

The same deliberate gaps as the REST API apply: no personal authentication, no acting as a learner, no API-key minting.

Complete tool reference

This inventory is rendered from the live contract registry, so it includes every currently callable tool and updates automatically with the code.

152 tools, generated from the live API contracts

Organization

get_organizationget_minor_organization_settingsupdate_minor_organization_settingsupdate_organizationlist_membersget_organization_shaperesolve_referenceget_custom_domainset_custom_domainverify_custom_domaindelete_custom_domainlist_audit_eventslist_api_keysrevoke_api_key

Sales and payouts

list_salesrefund_purchaselist_purchasesget_purchaselist_content_purchasesget_payouts

Insights

get_insightsget_analytics_healthget_google_insightsget_commerce_insightsget_academic_insightsget_insights_seriesget_content_insightsget_content_sales

Reports and safety

create_safety_caseget_safety_case_statuslist_safety_caseslist_safety_subjectslist_safety_subject_casesget_safety_caseupdate_safety_case

Minor accounts

begin_child_sponsorshiplist_guardian_linksrevoke_guardian_linkdispute_guardian_linktransfer_primary_guardianset_minor_usage_limitget_minor_usagecomplete_adulthood_transition

Minor safety

create_minor_safety_caselist_minor_safety_casesupdate_minor_safety_case

Offers

review_offer_for_minorslist_offerslist_content_offerscreate_offerget_offerupdate_offerrotate_offer_access_linkrevoke_offer_access_linkduplicate_offerset_primary_offerarchive_offer

Contents

list_contentscreate_contentget_contentupdate_contentdelete_contentpublish_contentduplicate_contentpromote_contentdemote_contentget_document_schemaget_content_documentreplace_content_document

Learners and enrollment

list_learnerslist_content_learnersenroll_learnerunenroll_learnerupdate_learnerreset_learner_progressreset_learner_progress_bulkget_learner_masterylist_enrollment_requestsget_pending_request_summaryapprove_enrollment_requestreject_enrollment_request

Cohorts and discussion

list_content_cohortscreate_cohortupdate_cohortdelete_cohortadd_cohort_memberremove_cohort_memberset_cohort_member_rolelist_cohort_discussioncreate_cohort_discussion_postresolve_discussion_postpin_discussion_postdelete_discussion_post

Intake forms

list_intake_formscreate_intake_formget_intake_formupdate_intake_formdelete_intake_form

Campaigns

list_campaignscreate_campaignupdate_campaigndelete_campaign

Teams

list_teamscreate_teamget_teamupdate_teamdelete_teamadd_team_memberremove_team_memberset_team_member_roles

Affiliates

get_affiliate_programupdate_affiliate_programlist_affiliatesapprove_affiliateblock_affiliateset_affiliate_commissionsettle_affiliate

Reviews

list_content_reviews

Integrations and assistants

get_integrationsget_google_integrationauthorize_google_integrationreconnect_google_integrationlist_google_resourcesselect_google_resourceactivate_google_integrationdisable_google_integrationconfigure_google_server_deliveryclear_google_server_deliveryselect_google_reporting_resourceauthorize_google_reportingclear_google_reporting_resourcedisconnect_google_integrationget_google_oauth_resultauthorize_google_gtm_managementpreview_google_gtm_changespublish_google_gtm_changesconnect_whatsapp_integrationreplace_whatsapp_credentialsupdate_whatsapp_settingsdelete_whatsapp_integrationtest_whatsapp_integrationdelete_video_integrationcreate_video_uploaddelete_payment_integration

MCP

list_mcp_connectionsrevoke_mcp_connection

Webhooks

list_webhookscreate_webhookupdate_webhookdelete_webhooklist_webhook_deliveriestest_webhook

Authoring with AI

The most powerful pair of tools is get_content_document and replace_content_document: together they let an assistant read and rewrite a complete draft. A Course is the sellable package: its rich public Presentation tells the sales story, its ordered Curriculum contains only Material references, and courseRelated contains course recommendations in the same document. A Material contains the lessons, activities, and assessments. Recommendations never grant access or progress. The loop is always select the target profile, read, modify, write:

  1. get_document_schema?kind=course|material returns the selected profile, exact node attrs, rigid header and a minimal valid document. Call it before touching a document.
  2. get_content_document returns the draft as ProseMirror JSON. The persisted target kind — never a caller-supplied field — determines which profile the mutation enforces.
  3. The assistant edits a course's public Presentation or its Curriculum references; lesson sections and graded blocks are edited in a Material.
  4. replace_content_document writes the modified draft back, replacing it whole.
  5. publish_content makes it live. Presentation and Curriculum may be empty; any Curriculum references that are present must point to published same-organization Materials without cycles.

This makes prompts like rewrite the course Presentation to be friendlier or add a five-question quiz to the second Material work end to end without mixing sales copy with learner progress.

For risk-free experiments, duplicate_content first: the copy gets its own draft with no learners attached, so an assistant can restructure it aggressively while the original stays untouched.

Preserve node ids and respect the shape

Existing quiz questions, flashcards, and sections carry ids that are grading and progress keys — an assistant that regenerates them detaches learners from their saved answers and completed sections. Edit around the ids, never rewrite them. The document header (cover, icon, title, description) has a rigid structure the server validates, and the whole document is capped at 2 MB.

Example prompts

Once connected, these are the kinds of requests that resolve to one or two tool calls:

  • Create a 20% coupon called LAUNCH20 for the Zero to Production course, limited to 50 uses.
  • Enroll ana@example.com in the Onboarding course and put her in the March cohort.
  • Summarize this month's sales against last month and flag any refunds.
  • Draft a new section on error handling after the API basics section, matching the course tone.
  • Who signed up this week but has not started anything yet?
  • Approve all pending enrollment requests that answered yes to the prerequisite question.

Limits and errors

  • Rate limits are shared with the REST API: 240 reads/min and 60 writes/min per credential. When a call is throttled, the API's rate-limit message comes back inside the tool result.
  • Failed calls are not protocol errors — they return as tool results flagged isError, carrying the HTTP status and the API's error message, so the assistant can read the reason and adjust.
  • Stateless — the server keeps no session between calls. Every call authenticates independently, and there is nothing to resume or clean up.

Protocol notes

For client authors: the transport is Streamable HTTP with plain JSON responses — the server supports initialize, tools/list, and tools/call, and does not open an SSE stream. Unauthenticated requests get a 401 with a WWW-Authenticate challenge, which triggers OAuth discovery and dynamic client registration automatically in compliant clients — that is the whole magic behind the browser sign-in.

API keys and webhooksCreate the credentials the MCP server and the REST API share.API referenceThe interactive OpenAPI reference the tools are generated from.Block referenceEvery node type an assistant will meet inside a course document.
PreviousAPI keys & webhooks

Your privacy choices

Necessary cookies keep Cursare working. Analytics and marketing technologies are optional and stay off until you choose them. Privacy Policy.

Sign-in, security and core platform functions.

Audience measurement such as Google Analytics.

Tag Manager and campaign attribution.