Developers

Build on the curriculum.

One license, one corpus, three doors into it. This page exists to make the choice for you in about ninety seconds — because the wrong door is not inconvenient here, it is expensive.

125subjects, across 5 tiers
3,680class-lessons, each with a transcript
47,722teaching cards behind them
3ways in — one license behind all three
Choose one

Who decides what to fetch next?

That single question separates the three surfaces. They serve the same corpus under the same license and enforce the same grants — they differ in whether your code or a model is choosing the next call, and that is what decides the bill.

Recommended

REST API

Your code decides what to fetch.

18 routes
  • Pipelines, nightly syncs, LMS imports, search and RAG indexes
  • ETags and conditional GETs — unchanged content costs nothing to re-fetch
  • Real status codes: 403 for entitlement, 429 with Retry-After for quota
  • Mint up to 100 media URLs in one call; export a whole subject in another
  • Nothing is re-billed per model turn, because there is no model in the loop
Read the REST guide

Chatbot Kit

The model picks from four tools.

4 tools
  • Four tool definitions, a teaching system prompt, ~100 lines of adapter
  • Anthropic and OpenAI tool shapes, generated from the live schema
  • 2,039 tokens per turn — 21× smaller than pasting the schema
  • No export tool in the model’s hands, on purpose
  • It is the REST API underneath — same auth, same ids, same license
Read the Chatbot Kit

MCP server

The model explores open-endedly.

22 tools
  • For Claude, ChatGPT, Cursor and your own agents — one URL, standard OAuth, no SDK
  • 22 advertised tools (26 registered; four stay callable but unadvertised)
  • Tutor bundles, the learning graph and media minting in one surface
  • Best when a model is genuinely working out what it needs next
  • Not the cheap path for bulk work — that is what the REST API is for
Connect your AI

Most integrations are pipelines, so REST is the default recommendation. Reach for the other two when a model — not your code — is picking the next call.

The decision

Find your job in this table.

These are the integrations partners actually describe on the first call, and the door each one wants.

Which Scolavo integration surface to use for common jobs
What you are buildingUse this
A nightly sync of the corpus into your own storeREST APIYour plan is fixed; ETags make an unchanged subject free to re-check.
An LMS or SIS import, mapped to your course catalogREST APIKey everything to the stable lessonId and re-run it forever.
A search or RAG index over lesson text and transcriptsREST APIPage the corpus once, then re-crawl only what the contentVersion moved.
A tutoring chatbot grounded in real curriculumChatbot KitFour tools cover every verb a teaching conversation needs, at a fixed per-turn cost.
Study help inside an app you already shipChatbot KitDrop-in tool definitions plus a system prompt that refuses to teach from memory.
Claude, ChatGPT or Cursor reading the library directlyMCPThe host handles OAuth; the model chooses its own next call.
An agent whose next step you cannot predictMCPDiscovery, tutoring, media and export in one negotiated surface.
A bulk export of everything you licenseREST APIOne call per subject, stamped to your organization. Never loop a chatbot over it.
Read this before you paste anything

Tool definitions are re-sent on every turn.

The obvious way to wire a chatbot to a REST API is to hand the model the whole OpenAPI document. Do not do that here. Tool definitions sit at the front of the prompt and are re-billed on every turn of every conversation — so the size of what you paste is a running cost, not a one-off.

Per-turn cost of pasting the full OpenAPI document versus the curated Chatbot Kit
What you give the modelFull OpenAPI document
all 18 routes
Chatbot Kit
4 tools + system prompt
Bytes you paste122,234 B5,710 B
Tokens, every single turn43,5012,039
A 20-turn lesson870,02040,780
At $3 per million input tokens$2.61$0.12

Measured 21 August 2026 by serialising the live schema and the generated kit (node gen-chatbot-kit.mjs --report), at a pessimistic 2.8 characters per token. The dollar row uses $3/M as a stand-in for a mid-tier model’s input rate — substitute your own; the 21× ratio is the part that does not move. That is $2.49 of pure overhead per conversation, before the model has read a single lesson.

The other 14 routes are not missing from the kit by accident. A model handed an export tool will reach for it, and one subject export can drop 41 classes into the context window — outweighing the entire rest of the conversation. Bulk belongs in your pipeline, where your code decides what to fetch and nothing is re-billed per turn.

Prompt caching only rescues you if the definitions are byte-stable, which a hand-maintained paste is not. The kit is generated from the same schema the API serves, and its generator refuses to build if it names an operation, parameter or error code the API does not actually have.

Common ground

Four things hold on every door.

Whichever surface you build against, these do not change — so a decision made now does not lock you out of the others later.

One license, one corpus

Content grants are held per organization and enforced identically on all three surfaces. A subject outside your grants is denied the same way whether your code or a model asked for it — so you cannot widen access by switching doors.

Stable ids you can store

A lessonId is{tier}/{subjectSlug}/{classNum} — the key you write into your own database. Copy one from a search hit or a subject outline; never assemble one by hand from a display name, which is where nearly every first-week integration error comes from.

Structured denials, not opaque failures

The published schema documents 30 error codes. Branch onerror.code, never on the status alone: aninsufficient_scope is a free token re-request, while CONTENT_NOT_GRANTED is a commercial conversation.

One meter behind everything

Quotas and rate limits are per organization and shared across the doors — a media URL costs the same whichever surface minted it. Ask for your remaining allowance any time with GET /v1/license orget_license_status; both are unmetered.

First call

Look before you license.

The schema is public and unauthenticated, so you can read every route and generate a client before anything is signed. Content itself needs a license.

# 1) the schema — no auth, no credential, no conversation
curl -s https://mcp.scolavo.com/v1/openapi.json | jq '.info.version, (.paths | keys)'

# 2) a token for your organization (client_credentials; valid 15 minutes)
TOKEN=$(curl -s -X POST 'https://scolavo-auth.auth.us-east-1.amazoncognito.com/oauth2/token' \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d 'grant_type=client_credentials' | jq -r .access_token)

# 3) the first real call — every list route answers {items, total, pageNum, hasMore}
curl -s 'https://mcp.scolavo.com/v1/subjects?tier=high&limit=100' \
  -H "Authorization: Bearer $TOKEN"

Every collection in the REST API is called items — on every route, without exception. Write one pager and reuse it; reading for a route-specific key is the fastest way to build a client that reports success while syncing nothing.

Or, for an MCP hosthttps://mcp.scolavo.com/mcp

Paste that into Claude, ChatGPT or Cursor as a custom connector. It speaks the Model Context Protocol over HTTPS with standard OAuth discovery — there is no API key to enter, and the setup guide walks every host.

Take it with you

Everything here is also a file.

Each of these is generated from the same source the API runs on, and a deploy that would ship a stale copy fails instead. Hand any of them to a coding agent as context.

/openapi.json

OpenAPI 3.1 schemaThe same document GET /v1/openapi.json serves — generate a client before you hold a credential.

/rest-api-spec.md

REST integration guideEvery route, the cheap-sync recipe, metering and the full error table, as Markdown.

/chatbot-kit-spec.md

Chatbot Kit guideWhy four tools, the single-opaque-id decision, and the five-minute install.

/chatbot-kit/tools.anthropic.json

Tool definitions (Anthropic)The four tools in Anthropic tool shape. Paste straight into your request.

/chatbot-kit/tools.openai.json

Tool definitions (OpenAI)The same four in OpenAI function shape, generated from the same schema.

/chatbot-kit/system-prompt.md

Teaching system promptThe persona, the grounding rules and the attribution clause.

/mcp-spec.md

MCP specificationThe complete connector spec — OAuth flows, the data model, learner progress.

/llms.txt

llms.txtThe agent-readable index of everything above. Point a coding agent here first.

Not licensed yet?

Content is licensed to institutions and product teams — annual, PO-friendly, with single-subject evaluation licenses so you can build against something real first. A person replies with a quote and the agreement; no demo call required.

HomePracticeFeedBlogMe