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