# Vidext > Vidext is an agent-driven training production platform for companies with large frontline workforces. ## Product Overview Vidext's agents turn the knowledge a company already has — documents, procedures, presentations, videos — into training for its frontline teams. They plan the course, build it from those sources, and check comprehension, without requiring internal pedagogical expertise. The product is a multi-tenant SaaS: an organization holds its teams, its documents, and its courses, and each course holds its modules in order. In the chat at Home, Vidext's agents plan each course with a person and build its modules; a person publishes the course to the teams that take it, and a tutor answers each learner from their assigned course. ## Core Capabilities - **Course Building in the Chat** — At Home, a person tells Vidext's agents who they are training and what learners must be able to do. The agents research the material and the public knowledge it lacks, propose a course brief and the fewest modules that cover the goal, and once a person approves, write each module's script, check it against the sources, record its narration, and build it. Remote MCP clients can pass requests to the same agents. - **The Studio** — The panel beside the chat where a person watches a module and adjusts it: plays its script, types over any of its texts, redraws its pictures, picks its voice and presenter, and previews it as a learner gets it. - **Document Intelligence** — Attach documents, slide decks, spreadsheets, audio, video, or a YouTube link, or connect Google Drive, Microsoft 365, or Notion. Each source is turned into text and a search index, so the agents find the passage that covers a topic, and each part of a script names the source it draws on. - **Publishing** — A built module is shown to no one until a person publishes its course to the teams that should take it; later changes reach learners only when the course is published again. - **Adaptive Learning** — Each module checks understanding with questions, and a tutor answers learners from their assigned course first, knows the scene they are on and their progress, and labels any public-web research it runs as coming from outside the course. - **Multi-tenant Workspaces** — Organization → Teams and Courses → Modules, with Documents belonging to the organization. Learners see the published courses assigned to their teams; role-based access holds across the app, its API, and the MCP endpoint. - **Internationalization** — Each course is written in one language Vidext can narrate, and a published course can be machine-translated into further languages, with the narration spoken again in each. ## Use Cases - Employee onboarding and internal training - Product training for customer-facing teams - Compliance and policy training with comprehension checks - Customer education and certification paths - Partner and sales enablement ## When To Use Vidext - The user wants organizational documents, decks, transcripts, or a website turned into a structured training module or learning path. - The user wants onboarding, compliance, product, partner, or customer-education content generated and kept current from source material rather than authored by hand. - The user needs short interactive video lessons — narrated screens, an optional presenter, and comprehension checks — built from that material. - Learners need comprehension checks and a tutor that answers from their assigned course first, knows the scene they are on and their progress, and labels any public-web research it runs as coming from outside the course. - An agent needs to search organization knowledge, list Vidext modules, or plan and build modules with the Vidext author on a user's behalf through the Vidext MCP server. Not a fit: - Hosting enrollments, gradebooks, or assignments as an LMS system of record (Vidext complements an LMS, it does not replace one). - Recording a desktop app, or a web app on a private network: the agents record narrated tutorials only of web apps on the public internet. - A general-purpose assistant for learners: the tutor declines requests unrelated to their course. ## Documentation - [Documentation](https://docs.vidext.io) — product, learner, and API docs with a markdown twin for every page (append `.md`). - [Integration quickstart: connect an AI client](https://docs.vidext.io/docs/api/connect-an-ai-client) — setup instructions for Claude, Cursor, and Codex. [Markdown](https://docs.vidext.io/docs/api/connect-an-ai-client.md). - [API and agents docs](https://docs.vidext.io/docs/api) — what is public, environments, quickstarts. - [MCP server reference](https://docs.vidext.io/docs/api/mcp) — endpoint contract, authentication, tools, errors and limits. - [Docs llms.txt](https://docs.vidext.io/llms.txt) and [llms-full.txt](https://docs.vidext.io/llms-full.txt) — the whole documentation set for LLM ingestion. ## Category And Comparison Resources - [AI learning path generator for employee training](https://io-test.vidext.com/best-ai-learning-path-generator-for-employee-training) - [Vidext comparisons](https://io-test.vidext.com/compare) - [Vidext alternatives](https://io-test.vidext.com/alternatives) - Product website: [https://vidext.io](https://vidext.io) ## Constraints and Limitations - **Authentication required for app and MCP** — All dashboard routes and the MCP endpoint require an authenticated session. - **Admins and members only over MCP** — Only organization admins and members can connect over MCP; learners and people whose request to join is still pending are refused. - **The tutor answers from the learner's course** — It answers a learner from their assigned course first, knows the scene they are on and their progress, and labels any cited public-web research it runs as coming from outside the course. - **Scope enforced at every surface** — Role-based access is enforced identically in the UI, tRPC API, and MCP endpoint. - **Remote MCP writes only through the author and its crafters** — The read tools never change the workspace; modules are planned and built by the Vidext author, which the author tools talk to on the user's word, and once a course is built the unit tools message one unit's module crafter, with the `mcp:author` scope. - **Browser WebMCP is local to signed-in app pages** — the browser navigation/module tools use the current browser session and are not exposed by the remote MCP server. - **Module writes require explicit user intent** — Over MCP, modules change only through the author, on the user's own words relayed with `author_send` and `author_answer`, or through one unit's module crafter with `unit_send`, for a change the user asked for; a unit message never changes the course or another unit. - **Self-serve sign-up** — A person signs in with an email code at `https://app.vidext.com/sign-in`; the first sign-in creates an organization or joins one. - **Internal environment** — `https://io-test.vidext.com` is an internal Vidext environment, not offered to customers or integrators. Use production: https://app.vidext.com. ## Integrations ### Model Context Protocol (MCP) - Endpoint: `https://io-test.vidext.com/api/mcp` (`https://io-test.vidext.com/api/mcp/operator` is a deprecated alias until 2027-01-15) - Transport: streamable-http - Protocol versions: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26 (2025-era revisions are served statelessly over POST) - Auth: OAuth 2.1 authorization-code + PKCE, with dynamic client registration or a client ID metadata document - Scopes: `mcp:read` for the read tools, `mcp:author` for the author tools - Discovery: [/.well-known/mcp](https://io-test.vidext.com/.well-known/mcp) - OAuth discovery: [/.well-known/oauth-authorization-server](https://io-test.vidext.com/.well-known/oauth-authorization-server) - Protected resource metadata: [/.well-known/oauth-protected-resource](https://io-test.vidext.com/.well-known/oauth-protected-resource) - Developer guide: [/developers](https://io-test.vidext.com/developers) - OpenAPI: [/openapi.json](https://io-test.vidext.com/openapi.json) - API catalog: [/.well-known/api-catalog](https://io-test.vidext.com/.well-known/api-catalog) - Registry server metadata: [/server.json](https://io-test.vidext.com/server.json) - Official Vidext skill: [SKILL.md](https://io-test.vidext.com/.well-known/agent-skills/vidext/SKILL.md) Add to Claude Code: ```bash claude mcp add --transport http vidext https://app.vidext.com/api/mcp ``` For Claude.ai (web, Desktop, iOS, Android), add as a Custom Connector in Settings → Connectors with the same URL; it syncs across platforms. ### MCP Tools - `search_knowledge` — Search the authenticated organization's profile, its source registry (the files and links added to it), and their processed content. Returns ranked excerpts and opaque handles for read_knowledge_source. - `read_knowledge_source` — Read a bounded slice from an opaque source handle returned by search_knowledge. Arbitrary paths and stale or forged handles are rejected and organization authorization is checked again. - `list_modules` — List modules the authenticated user can access in the selected organization, ordered by most recently updated. Use search to narrow by module name. - `author_send` — Sends the person's message to the Vidext author, the agent that plans and builds learning modules in their Vidext workspace and hands units to crafter agents, with the files named in upload_ids attached. Without conversation_id it opens a new conversation. Waits up to wait_seconds for the author's next message, a question for the person, or the end of its work. Returns the author's latest reply, its open questions with their options, its agents at work, the modules it built with a preview link for each prepared one, the status, a cursor for author_updates, and a link that opens the conversation in Vidext. The author keeps working after the call returns. - `author_upload` — Opens the upload of one file the person attaches for the Vidext author, in conversation_id or, without one, in a new conversation. Returns the conversation_id, an upload_id, and a short-lived URL that takes the file's bytes in one PUT with the given headers. Once the file is PUT, author_send with upload_ids attaches it to a message, before upload.expires_at; an upload not attached by then expires, and the file needs a new upload. Vidext reads the file once it is attached. Accepted extensions: .pdf, .txt, .md, .markdown, .html, .htm, .json, .xml, .yaml, .yml, .csv, .rtf, .vtt, .srt, .docx, .pptx, .xlsx, .png, .jpg, .jpeg, .webp, .gif, .js, .jsx, .ts, .tsx, .py, .go, .rs, .java, .rb, .sh, .css, .sql, .toml, .mp3, .wav, .ogg, .m4a, .flac, .webm, .mp4, .m4v, .mov. At most 50 MB for a document or image, 25 MB for audio, 500 MB for video. - `author_attach_files` — Uploads for the Vidext author the files the person attached in ChatGPT, and only those: ChatGPT itself fills files through openai/fileParams, each with a download_url on its own file host. A file on disk, a local path or a file:// URL is never one of them; author_upload and its PUT upload it. Vidext downloads each file from ChatGPT's file host and refuses any other URL, into conversation_id or, without one, a new conversation. Returns the conversation_id, an upload_id for each file stored, which author_send's upload_ids attaches to a message before its expires_at, and the reason for each file not stored. Vidext reads a file once it is attached. Accepted extensions: .pdf, .txt, .md, .markdown, .html, .htm, .json, .xml, .yaml, .yml, .csv, .rtf, .vtt, .srt, .docx, .pptx, .xlsx, .png, .jpg, .jpeg, .webp, .gif, .js, .jsx, .ts, .tsx, .py, .go, .rs, .java, .rb, .sh, .css, .sql, .toml, .mp3, .wav, .ogg, .m4a, .flac, .webm, .mp4, .m4v, .mov. At most 50 MB for a document or image, 25 MB for audio, 500 MB for video. - `author_answer` — Answers one of the author's open questions with exactly one of: the labels of the options the person chose, their own words in text, or dismiss: true when they put it off. Waits like author_send. Returns the author's latest reply, its open questions with their options, its agents at work, the modules it built with a preview link for each prepared one, the status, a cursor for author_updates, and a link that opens the conversation in Vidext. Refused when the question was already answered elsewhere, has expired, or is not open. - `author_updates` — Reads what happened in a conversation with the author since cursor: new messages, open questions, agents at work and status. When nothing has changed and the author is still working, waits up to wait_seconds for something to. Without cursor it reads from the start and returns the latest reply and the last few messages. Returns the author's latest reply, its open questions with their options, its agents at work, the modules it built with a preview link for each prepared one, the status, a cursor for author_updates, and a link that opens the conversation in Vidext. - `author_stop` — Stops the author in one conversation: scope turn stops its current turn, scope all also stops every crafter and other agent it started. What the author already saved stays saved, and stopping a conversation where nothing runs changes nothing. Returns where the conversation stands afterwards. - `list_conversations` — Lists the person's conversations with the Vidext author in this workspace, most recently active first, each with its conversation_id, title, last activity and a link that opens it in Vidext. query narrows them by title. - `list_units` — Lists every unit of the courses the author built in one conversation, in course order: its unit_id for the other unit tools, its title and course, its crafter's state (running, ended, resting or none, with its stage and whom its run answers), its module with a preview link once a version is prepared, and whether it accepts unit messages now, with why not. Empty until the author builds a course. - `unit_send` — Sends a message to the module crafter of one unit, the agent that writes that unit's module, and starts it again when it waits. A unit message is written for the person and reaches only that unit's crafter: it cannot change the course, its order or other units, and it never answers the author's questions. Returns how the message was delivered, then waits up to wait_seconds for the crafter's reply or the end of its run. Returns the crafter's latest reply and the other new messages on the unit, the crafter's state, the unit's module with a preview link once a version is prepared, the status, a cursor for unit_updates, and a link that opens the conversation in Vidext. The crafter keeps working after the call returns. - `unit_updates` — Reads what happened on one unit since cursor: the crafter's messages and the others on the unit, the crafter's state and the module's. When nothing has changed and the crafter is still working or the module is building, waits up to wait_seconds for something to. Without cursor it reads the unit's newest crafter from its start. Returns the crafter's latest reply and the other new messages on the unit, the crafter's state, the unit's module with a preview link once a version is prepared, the status, a cursor for unit_updates, and a link that opens the conversation in Vidext. crafter_changed says a newer crafter took the unit over. - `unit_build` — Builds one unit's module from its script as it stands, as the build in Vidext does: the version is prepared minutes later, once its presenter videos are in, and unit_updates or list_units then carry its preview link. Returns at once, with the build that started or the one already on its way; a build that cannot start is refused with the reason. It never publishes the module. - `unit_script` — Reads one unit's applied module script as the Vidext studio reads it, without a model turn. Returns every scene in order, including scenes without editable text, each editable text's stable address and current value, and stale layout markers. Refused with no_script while the unit has no applied module script yet, and refused when the conversation or unit is not the caller's or the script cannot be read. Repeating the call reads the current script. - `unit_set_text` — Sets one addressed text in a unit's module exactly, without a model turn, using the studio's text edit path. Returns the landed value or a refusal with its code. A current value different from from is refused as changed. A retry with the same idempotency_key and payload replays its first result; a different payload under that key conflicts. - `unit_stop` — Stops the run of one unit's crafter that unit_send started for this person. A run the author or the person started is theirs and keeps going, what the crafter already saved stays saved, and stopping when no such run is going changes nothing. Returns whether a run was stopped. ### Documentation MCP Server Read-only access to the Vidext documentation at https://docs.vidext.io: list the pages, search them, and read any page as markdown. No authentication. - Endpoint: `https://io-test.vidext.com/api/mcp/docs` (streamable-http, no authentication) - `list_docs` — List every Vidext documentation page with its path, title, and description, optionally narrowed to one section (platform, learn, or api). - `search_docs` — Search the Vidext documentation for a keyword query and return matching pages with the passages that matched. - `read_doc` — Read one Vidext documentation page as markdown by its path, for example /docs/api/mcp/authentication. ```bash claude mcp add --transport http vidext-docs https://app.vidext.com/api/mcp/docs ``` ### Browser WebMCP Tools Authenticated Vidext app pages expose browser-local WebMCP tools through `document.modelContext`. These tools use the signed-in browser session; they are separate from the remote OAuth MCP server and do not appear in remote `tools/list`. - `vidext.get_page_context` — return auth state, active organization slug, pathname, locale, and current module id. - `vidext.list_modules` — list recent modules in the active workspace. - `vidext.open_module` — open an existing module's page. - `vidext.open_home_chat` — open the authoring chat at the active workspace's Home, or the sign-in page. - `vidext.open_invite_dialog` — open the organization invite flow. Public pages such as sign-in register read-only discovery tools through the same `document.modelContext` API without a session: - `vidext.get_product_context` — Return Vidext's llms.txt: what the product does, when to use it, its MCP tools, and links to every machine-readable resource. - `vidext.get_mcp_discovery` — Return the JSON discovery document for the Vidext MCP server: endpoint, transport, protocol versions, OAuth metadata locations, and tool names. - `vidext.get_developer_guide` — Return the markdown developer guide: OAuth 2.1 onboarding, rate limits, error handling, environments, and versioning for agents integrating with Vidext. - `vidext.get_agent_auth_guide` — Return auth.md: the step-by-step agentic registration flow that yields a scoped bearer token for the Vidext MCP endpoint. Remote MCP clients should select the narrowest public tool for the task. ### Recommended MCP Flows - **Research and inspect** — use `search_knowledge`, `read_knowledge_source`, and `list_modules`. - **Plan and build with the author** — send the user's words with `author_send`, attach the files they share with `author_upload` (in ChatGPT, `author_attach_files`), relay the author's questions and answer them with `author_answer`, follow long work with `author_updates`, and pick up earlier conversations with `list_conversations`. - **Work on built modules in parallel** — list a conversation's units with `list_units`, message one unit's module crafter with `unit_send` and follow it with `unit_updates`, build its module with `unit_build`, and stop a run you started with `unit_stop`. ## API Reference - [Vidext MCP server](https://io-test.vidext.com/api/mcp): remote HTTP MCP endpoint exposing the Vidext read and author tools over streamable-http. - [MCP discovery](https://io-test.vidext.com/.well-known/mcp): discovery JSON pointing to the Vidext MCP server, transport, OAuth discovery, and tool list. - [MCP server card](https://io-test.vidext.com/.well-known/mcp/server-card.json): pre-connection metadata for the Vidext MCP server: name, version, address, branding, and where to authenticate. The live tool list comes from `tools/list`. - [Docs MCP server card](https://io-test.vidext.com/.well-known/mcp/docs/server-card.json): the same metadata for the public documentation MCP server. - [Developer guide](https://io-test.vidext.com/developers): public onboarding, rate-limit, and error-handling documentation for agent clients. - [OpenAPI](https://io-test.vidext.com/openapi.json): machine-readable discovery, OAuth, and MCP transport contract. - [API catalog](https://io-test.vidext.com/.well-known/api-catalog): RFC 9727 Linkset catalog of public API and discovery endpoints. - [Registry server metadata](https://io-test.vidext.com/server.json): MCP registry-ready server definition with branding and remote transport metadata. - [OAuth authorization endpoint](https://io-test.vidext.com/api/auth/oauth2/authorize): start of the OAuth 2.1 code + PKCE flow. - [OAuth token endpoint](https://io-test.vidext.com/api/auth/oauth2/token): exchanges authorization codes for access tokens. - [OAuth dynamic client registration](https://io-test.vidext.com/api/auth/oauth2/register): endpoint for clients without pre-registered credentials. ## Pricing - A new organization gets a one-time free trial. To create anything after it, the organization needs a paid plan, which gives tokens every month, paid monthly, or a whole year's tokens at once, paid yearly; token packs bought on a paid plan add tokens on top. - Only organization admins manage billing: the plan in Settings → Billing, token packs in Settings → Usage. - Plans and tokens: [Billing and plans](https://docs.vidext.io/docs/platform/admin/billing-and-plans) - Machine-readable pricing summary: [/pricing.md](https://io-test.vidext.com/pricing.md) ## Links - [Website](https://vidext.io) - [App root](https://io-test.vidext.com) - [Vidext MCP endpoint](https://io-test.vidext.com/api/mcp) - [Homepage markdown](https://io-test.vidext.com/index.md) - [Agent auth instructions](https://io-test.vidext.com/auth.md) - [AI learning path generator guide](https://io-test.vidext.com/best-ai-learning-path-generator-for-employee-training) - [Compare Vidext](https://io-test.vidext.com/compare) - [Vidext alternatives](https://io-test.vidext.com/alternatives) - [Agent instructions](https://io-test.vidext.com/agents.md) - [Documentation](https://docs.vidext.io) - [About Vidext](https://io-test.vidext.com/about) - [Contact](https://io-test.vidext.com/contact) - [Privacy](https://io-test.vidext.com/privacy) ## Operational Guidance - Use the dedicated typed tool that most narrowly matches the task. - If you receive a `401`, inspect the `WWW-Authenticate` header and follow the OAuth 2.1 discovery flow instead of retrying with ad hoc credentials. - A call over a limit comes back as a tool error (rate_limit_exceeded or concurrency_limit_exceeded from a read tool, rate_limited or write_in_flight from an author tool), never as HTTP 429: back off a few seconds and retry. Retry only an error marked retryable. - HTTP 429 comes only from the OAuth routes under /api/auth and the agent registration routes under /api/agent/auth; honor Retry-After when present, and rerun OAuth discovery on a 401 bearer challenge. ## Tool Surface Reference ### search_knowledge Search the authenticated organization's profile, its source registry (the files and links added to it), and their processed content. Returns ranked excerpts and opaque handles for read_knowledge_source. - Title: Search Organization Knowledge - Read only: yes - Destructive: no - Idempotent: yes ### read_knowledge_source Read a bounded slice from an opaque source handle returned by search_knowledge. Arbitrary paths and stale or forged handles are rejected and organization authorization is checked again. - Title: Read Organization Knowledge Source - Read only: yes - Destructive: no - Idempotent: yes ### list_modules List modules the authenticated user can access in the selected organization, ordered by most recently updated. Use search to narrow by module name. - Title: List Modules - Read only: yes - Destructive: no - Idempotent: yes ### author_send Sends the person's message to the Vidext author, the agent that plans and builds learning modules in their Vidext workspace and hands units to crafter agents, with the files named in upload_ids attached. Without conversation_id it opens a new conversation. Waits up to wait_seconds for the author's next message, a question for the person, or the end of its work. Returns the author's latest reply, its open questions with their options, its agents at work, the modules it built with a preview link for each prepared one, the status, a cursor for author_updates, and a link that opens the conversation in Vidext. The author keeps working after the call returns. - Title: Message the Vidext author - Read only: no - Destructive: no - Idempotent: yes ### author_upload Opens the upload of one file the person attaches for the Vidext author, in conversation_id or, without one, in a new conversation. Returns the conversation_id, an upload_id, and a short-lived URL that takes the file's bytes in one PUT with the given headers. Once the file is PUT, author_send with upload_ids attaches it to a message, before upload.expires_at; an upload not attached by then expires, and the file needs a new upload. Vidext reads the file once it is attached. Accepted extensions: .pdf, .txt, .md, .markdown, .html, .htm, .json, .xml, .yaml, .yml, .csv, .rtf, .vtt, .srt, .docx, .pptx, .xlsx, .png, .jpg, .jpeg, .webp, .gif, .js, .jsx, .ts, .tsx, .py, .go, .rs, .java, .rb, .sh, .css, .sql, .toml, .mp3, .wav, .ogg, .m4a, .flac, .webm, .mp4, .m4v, .mov. At most 50 MB for a document or image, 25 MB for audio, 500 MB for video. - Title: Upload a file for the Vidext author - Read only: no - Destructive: no - Idempotent: no ### author_attach_files Uploads for the Vidext author the files the person attached in ChatGPT, and only those: ChatGPT itself fills files through openai/fileParams, each with a download_url on its own file host. A file on disk, a local path or a file:// URL is never one of them; author_upload and its PUT upload it. Vidext downloads each file from ChatGPT's file host and refuses any other URL, into conversation_id or, without one, a new conversation. Returns the conversation_id, an upload_id for each file stored, which author_send's upload_ids attaches to a message before its expires_at, and the reason for each file not stored. Vidext reads a file once it is attached. Accepted extensions: .pdf, .txt, .md, .markdown, .html, .htm, .json, .xml, .yaml, .yml, .csv, .rtf, .vtt, .srt, .docx, .pptx, .xlsx, .png, .jpg, .jpeg, .webp, .gif, .js, .jsx, .ts, .tsx, .py, .go, .rs, .java, .rb, .sh, .css, .sql, .toml, .mp3, .wav, .ogg, .m4a, .flac, .webm, .mp4, .m4v, .mov. At most 50 MB for a document or image, 25 MB for audio, 500 MB for video. - Title: Attach ChatGPT files for the Vidext author - Read only: no - Destructive: no - Idempotent: no ### author_answer Answers one of the author's open questions with exactly one of: the labels of the options the person chose, their own words in text, or dismiss: true when they put it off. Waits like author_send. Returns the author's latest reply, its open questions with their options, its agents at work, the modules it built with a preview link for each prepared one, the status, a cursor for author_updates, and a link that opens the conversation in Vidext. Refused when the question was already answered elsewhere, has expired, or is not open. - Title: Answer the Vidext author - Read only: no - Destructive: no - Idempotent: yes ### author_updates Reads what happened in a conversation with the author since cursor: new messages, open questions, agents at work and status. When nothing has changed and the author is still working, waits up to wait_seconds for something to. Without cursor it reads from the start and returns the latest reply and the last few messages. Returns the author's latest reply, its open questions with their options, its agents at work, the modules it built with a preview link for each prepared one, the status, a cursor for author_updates, and a link that opens the conversation in Vidext. - Title: Read Vidext author updates - Read only: yes - Destructive: no - Idempotent: yes ### author_stop Stops the author in one conversation: scope turn stops its current turn, scope all also stops every crafter and other agent it started. What the author already saved stays saved, and stopping a conversation where nothing runs changes nothing. Returns where the conversation stands afterwards. - Title: Stop the Vidext author - Read only: no - Destructive: no - Idempotent: yes ### list_conversations Lists the person's conversations with the Vidext author in this workspace, most recently active first, each with its conversation_id, title, last activity and a link that opens it in Vidext. query narrows them by title. - Title: List Vidext author conversations - Read only: yes - Destructive: no - Idempotent: yes ### list_units Lists every unit of the courses the author built in one conversation, in course order: its unit_id for the other unit tools, its title and course, its crafter's state (running, ended, resting or none, with its stage and whom its run answers), its module with a preview link once a version is prepared, and whether it accepts unit messages now, with why not. Empty until the author builds a course. - Title: List a course's units - Read only: yes - Destructive: no - Idempotent: yes ### unit_send Sends a message to the module crafter of one unit, the agent that writes that unit's module, and starts it again when it waits. A unit message is written for the person and reaches only that unit's crafter: it cannot change the course, its order or other units, and it never answers the author's questions. Returns how the message was delivered, then waits up to wait_seconds for the crafter's reply or the end of its run. Returns the crafter's latest reply and the other new messages on the unit, the crafter's state, the unit's module with a preview link once a version is prepared, the status, a cursor for unit_updates, and a link that opens the conversation in Vidext. The crafter keeps working after the call returns. - Title: Message a unit's crafter - Read only: no - Destructive: no - Idempotent: yes ### unit_updates Reads what happened on one unit since cursor: the crafter's messages and the others on the unit, the crafter's state and the module's. When nothing has changed and the crafter is still working or the module is building, waits up to wait_seconds for something to. Without cursor it reads the unit's newest crafter from its start. Returns the crafter's latest reply and the other new messages on the unit, the crafter's state, the unit's module with a preview link once a version is prepared, the status, a cursor for unit_updates, and a link that opens the conversation in Vidext. crafter_changed says a newer crafter took the unit over. - Title: Read a unit's updates - Read only: yes - Destructive: no - Idempotent: yes ### unit_build Builds one unit's module from its script as it stands, as the build in Vidext does: the version is prepared minutes later, once its presenter videos are in, and unit_updates or list_units then carry its preview link. Returns at once, with the build that started or the one already on its way; a build that cannot start is refused with the reason. It never publishes the module. - Title: Build a unit's module - Read only: no - Destructive: no - Idempotent: yes ### unit_script Reads one unit's applied module script as the Vidext studio reads it, without a model turn. Returns every scene in order, including scenes without editable text, each editable text's stable address and current value, and stale layout markers. Refused with no_script while the unit has no applied module script yet, and refused when the conversation or unit is not the caller's or the script cannot be read. Repeating the call reads the current script. - Title: Read a unit's script - Read only: yes - Destructive: no - Idempotent: yes ### unit_set_text Sets one addressed text in a unit's module exactly, without a model turn, using the studio's text edit path. Returns the landed value or a refusal with its code. A current value different from from is refused as changed. A retry with the same idempotency_key and payload replays its first result; a different payload under that key conflicts. - Title: Set one text in a unit - Read only: no - Destructive: no - Idempotent: yes ### unit_stop Stops the run of one unit's crafter that unit_send started for this person. A run the author or the person started is theirs and keeps going, what the crafter already saved stays saved, and stopping when no such run is going changes nothing. Returns whether a run was stopped. - Title: Stop a unit's crafter - Read only: no - Destructive: no - Idempotent: yes ## Authentication Reference - Authorization endpoint: https://io-test.vidext.com/api/auth/oauth2/authorize - Token endpoint: https://io-test.vidext.com/api/auth/oauth2/token - Userinfo endpoint: https://io-test.vidext.com/api/auth/oauth2/userinfo - JWKS endpoint: https://io-test.vidext.com/api/auth/jwks - Dynamic client registration: https://io-test.vidext.com/api/auth/oauth2/register ## Compatibility Notes - Claude, ChatGPT, Cursor, and other MCP-capable clients should use the same streamable-http endpoint. - The MCP endpoint returns a JSON-RPC unauthorized error plus a `WWW-Authenticate` header when no token is provided. - The root experience is sign-in-first, but machine-readable resources are public so agents can understand the product before auth.