Skip to content
cursareDocs
Sign inGet started

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
  • Links
  • Insights and reports

Admin

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

Developer

  • Integrations
  • Learner UI registry
  • API keys & webhooks
  • MCP server
  • API reference
Explore the API

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
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.

161 tools, generated from the live API contracts

Organization

get_organizationget_minor_organization_settingsupdate_minor_organization_settingsget_seller_profileupdate_seller_profileupdate_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

Media

upload_image

Contents

list_contentscreate_contentget_contentupdate_contentdelete_contentpublish_contentduplicate_contentget_document_schemaget_content_documentreplace_content_document

Learner delivery

get_learner_content

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

Links

list_tracked_linkscreate_tracked_linkget_tracked_linkupdate_tracked_linkarchive_tracked_linkdelete_tracked_linkget_tracked_link_insights

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 recursive draft. Every content uses the same schema and can combine learning blocks with reference blocks that point to other contents. Offers independently decide whether a content is sellable. The loop is always read the schema, read, modify, write:

  1. get_document_schema returns the shared JSON schema, limits, and examples. Call it before touching a document.
  2. get_content_document returns { version: 2, header, body }, the complete structured document.
  3. The assistant edits typed blocks and attributes while preserving stable ids.
  4. replace_content_document writes the modified draft back, replacing it whole.
  5. publish_content makes it live. References must point to same-organization contents without cycles; learner navigation uses the published manifest.

This makes prompts like rewrite the introduction to be friendlier or add a five-question quiz to the second referenced content work end to end.

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 quizzes, references, polls, and sections carry stable ids. Regenerating graded or structural ids detaches learners from saved answers or progress. Preserve them while editing. The header contains the title, description, and single canonical content image; the complete 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 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

The technical Tag Manager container is required to apply your choices. Analytics and marketing cookies and storage remain optional and stay off until you authorize them. Privacy Policy.

Sign-in, security, core functions and consent enforcement.

Audience measurement such as Google Analytics.

Marketing storage, campaign attribution and optional tags.