These docs are an early preview — some sections are still being expanded.
Vidext Docs

Tool reference

Every tool on the Vidext Operator MCP server — arguments, limits, defaults, results, and which one to call for each task.

The server exposes five tools. All of them are deterministic reads that run no model, and all carry the same annotations:

AnnotationValue
readOnlyHinttrue
destructiveHintfalse
idempotentHinttrue
openWorldHintfalse

Which tool for which task

TaskCall
Find what the organization's sources say about somethingsearch_knowledge, then read_knowledge_source on a result's handle
Find a module, or check whether it is livelist_modules
Follow an outline run from the earlier planning flowget_module_status, then get_operation (legacy)

Not available over MCP: courses, a module's scenes or script, building or publishing, and learner progress. Do those in the Vidext app.

Conventions

  • Arguments are strict. Each tool accepts only the arguments listed here. An unknown tool, a missing required argument, an extra argument, or a value outside its limits is refused with JSON-RPC InvalidParams (-32602). Fix the call; retrying it unchanged cannot succeed.
  • Organization selector. Every tool also accepts organizationSlug and organizationId (strings, 1–255 characters). Leave both out to use the organization bound to the token. See organization scoping.
  • Results. A successful call returns its JSON object twice: as text in content[0].text and as structuredContent. A failure returns isError: true with an error object, except for the two knowledge tools, which report most failures in the result itself with success: false. See Errors and limits.
  • IDs. moduleId is a UUID, as returned by list_modules.

search_knowledge

Search the organization's knowledge and return ranked excerpts, each with an opaque handle for read_knowledge_source.

It searches:

  • the organization profile (org_profile);
  • the source catalog, the title and metadata of every source the organization has added (source_registry);
  • the processed text of those sources (source_content);
  • a legacy organization wiki (generated_org_wiki), where an organization still has one. It is read but no longer updated.

Sources are added in the app, and a source is searchable once it has been processed.

Prop

Type

Result. success: true, mode: "search", status ("indexed", or "empty" when there was nothing to search), the query, matchedResults, and results, ordered by relevance. Each result carries:

FieldMeaning
handleOpaque handle to pass to read_knowledge_source. Do not build or edit it.
sourceKindOne of the kinds above.
title, path, documentIdWhat the match is. documentId is set for sources.
excerpt, excerptOffset, excerptEndOffset, excerptTruncatedThe matching passage and where it sits in the source text.
suggestedReadOffsetWhen present, the offset of the best-matching section. Start read_knowledge_source there.
score, relevance, matchedFieldsHow the match was ranked.
originalContentLength, sourceMetadataSize of the full text, and the source's catalog metadata.

The result also carries diagnostic counters (such as retrievalTrace). They describe how the search ran; do not build on them.

In-band failures. success: false with status: "invalid" (an empty or too vague query) or status: "unavailable" (knowledge could not be read; reason: "timeout" when the 15-second budget ran out). Unavailable searches can be retried.

read_knowledge_source

Read a bounded slice of one source, by a handle that search_knowledge returned. Arbitrary paths, and stale or altered handles, are refused, and organization access is checked again.

Prop

Type

Result. success: true, mode: "read", the handle, sourceKind, title, path, documentId, sourceMetadata, and the slice:

FieldMeaning
contentThe text, as markdown.
contentOffsetWhere the slice starts.
contentTruncatedtrue when more text follows.
nextOffsetPresent when more text follows: pass it as offset to continue.
remainingChars, originalContentLengthWhat is left, and the full length.

In-band failures. success: false with status:

  • "rejected": the handle did not come from search_knowledge for this organization, or no longer matches the source. Search again.
  • "missing" or "empty": the source, or its processed text, is no longer there.
  • "unavailable": knowledge could not be read right now (reason: "timeout" after 15 seconds). Retry.
  • "invalid": no handle was given.

list_modules

List the organization's modules, most recently updated first. Admins and members see every module in the organization.

Prop

Type

Result.

{
  "organizationId": "…",
  "modules": [
    {
      "id": "018f1111-2222-7333-8444-555555555555",
      "name": "Incident response",
      "description": "…",
      "color": "…",
      "published": true,
      "createdAt": "…",
      "updatedAt": "…"
    }
  ]
}

published is true while the module is live: its course is published and learners can see it. A module that is built but not live, or still a draft, has published: false. The result has no cursor; it returns at most limit modules, so narrow with search to find older ones. It does not include the module's course.

get_module_status (legacy)

Read the outline of a module's planning run, from the earlier planning flow. Modules built in the chat by Vidext's agents have no planning run, so this tool has nothing useful to say about them. It never reports whether a module is built or live; use list_modules for that.

Prop

Type

Result. organizationId, moduleId, and outline:

FieldMeaning
plannerRunIdThe planning run that wrote the outline. Pass it to get_operation as operationId.
phaseWhere the run is.
outlineReady, readyForApprovaltrue once the outline is written.
planDocumentThe outline as markdown, present once it is ready.
isOutlineBuildingtrue while it is being written.
documentsReadyPresent, as false, while the run waits for its sources.
outlineError, successSet when the run failed (success: false).

get_operation (legacy)

Poll one outline run of a module until it ends.

Prop

Type

Result.

{
  "operationId": "…",
  "moduleId": "018f1111-2222-7333-8444-555555555555",
  "kind": "outline",
  "status": "outline",
  "terminal": false,
  "pollAfterMs": 1500,
  "snapshot": { "…": "the outline object from get_module_status" }
}
  • status is "waiting_for_approval" when the outline is ready, "failed" when it could not be written, and otherwise the run's current phase.
  • terminal is true for waiting_for_approval and failed.
  • pollAfterMs is present while the run is not terminal. Wait at least that long, then call again with the same arguments.

An operationId that is not the module's current run is refused with the tool error operation_not_found.

Last updated on

On this page