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:
| Annotation | Value |
|---|---|
readOnlyHint | true |
destructiveHint | false |
idempotentHint | true |
openWorldHint | false |
Which tool for which task
| Task | Call |
|---|---|
| Find what the organization's sources say about something | search_knowledge, then read_knowledge_source on a result's handle |
| Find a module, or check whether it is live | list_modules |
| Follow an outline run from the earlier planning flow | get_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
organizationSlugandorganizationId(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].textand asstructuredContent. A failure returnsisError: truewith an error object, except for the two knowledge tools, which report most failures in the result itself withsuccess: false. See Errors and limits. - IDs.
moduleIdis a UUID, as returned bylist_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:
| Field | Meaning |
|---|---|
handle | Opaque handle to pass to read_knowledge_source. Do not build or edit it. |
sourceKind | One of the kinds above. |
title, path, documentId | What the match is. documentId is set for sources. |
excerpt, excerptOffset, excerptEndOffset, excerptTruncated | The matching passage and where it sits in the source text. |
suggestedReadOffset | When present, the offset of the best-matching section. Start read_knowledge_source there. |
score, relevance, matchedFields | How the match was ranked. |
originalContentLength, sourceMetadata | Size 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:
| Field | Meaning |
|---|---|
content | The text, as markdown. |
contentOffset | Where the slice starts. |
contentTruncated | true when more text follows. |
nextOffset | Present when more text follows: pass it as offset to continue. |
remainingChars, originalContentLength | What is left, and the full length. |
In-band failures. success: false with status:
"rejected": the handle did not come fromsearch_knowledgefor 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:
| Field | Meaning |
|---|---|
plannerRunId | The planning run that wrote the outline. Pass it to get_operation as operationId. |
phase | Where the run is. |
outlineReady, readyForApproval | true once the outline is written. |
planDocument | The outline as markdown, present once it is ready. |
isOutlineBuilding | true while it is being written. |
documentsReady | Present, as false, while the run waits for its sources. |
outlineError, success | Set 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" }
}statusis"waiting_for_approval"when the outline is ready,"failed"when it could not be written, and otherwise the run's current phase.terminalistrueforwaiting_for_approvalandfailed.pollAfterMsis 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