Skip to content

Itera Docs

Author lessons in Itera from an AI assistant. One MCP endpoint, an author-role token, and the whole Program → Unit → Lesson → Activity surface.

Itera is a lesson platform. This site documents how whoever creates the lessons — an internal DFL teacher, a partner company’s instructor, or an automated content pipeline — authors them.

Authoring happens through itera-mcp, a Model Context Protocol server live at https://mcp.iterahq.dev/mcp. An AI assistant (Claude Code, Cursor, codex, the Anthropic SDK, or any MCP client) drives 21 tools over the Itera content graph, and every write runs as you, under Row-Level Security keyed to your Itera identity and an author role. There is no service_role — the MCP never bypasses your permissions.

One MCP endpoint

https://mcp.iterahq.dev/mcp — a Streamable-HTTP MCP. Add it to any client with an Authorization: Bearer <jwt> header and the 21 authoring tools appear.

Author-role, RLS-scoped

You present an Itera Supabase user-JWT with an author membership. Writes succeed only in tenants where you hold an authoring role — enforced in Postgres, not in the app.

Program → Unit → Lesson → Activity

A four-level content graph. Ten activity kinds (diagram, document, quiz, code, concept, single/multi choice, match, order, video). spec + rubric are free-form JSON.

LLM-native docs

This whole site is published as llms.txt / llms-full.txt — point an LLM at one URL and it learns the entire authoring surface.

flowchart LR
  client["MCP client<br/><small>Claude Code · Cursor · codex · SDK</small>"]

  subgraph auth["Auth — once"]
    jwt["Itera Supabase JWT<br/><small>author role · RLS-scoped</small>"]
  end

  mcp["itera-mcp<br/><small>mcp.iterahq.dev/mcp</small>"]

  subgraph contentGraph["Content graph (itera.* schema)"]
    direction TB
    program["Program"]
    unit["Unit"]
    lesson["Lesson"]
    activity["Activity<br/><small>kind · spec · rubric</small>"]
    program --> unit --> lesson --> activity
  end

  api["itera-api<br/><small>api.iterahq.dev · pull-only</small>"]
  db[("Itera Supabase<br/><small>RLS — as YOU</small>")]

  client -->|"Bearer &lt;JWT&gt;"| mcp
  client -.->|"first run"| jwt
  jwt -.->|"token"| client
  mcp -->|"create_* / update_* (as you)"| contentGraph
  contentGraph --> db
  api -->|"read results / progress (tenant key)"| db

Authoring is MCP (write, user-JWT + author RLS). Reading learners’ results back out is itera-api (pull-only REST, per-tenant API key). There is no REST write/authoring API today — authoring in v1 is MCP-only.