Vivu MCP reference: authentication, requests, responses, limits, errors.
This is the working reference for calling Vivu from an MCP client. It covers how a session is established, the shape of an indexing call and a search call, what a result carries, what the current limits are, and what each failure means. Vivu returns exact moments from video a team already has; it does not edit or generate video.
Applies to the shipped Vivu MCP server. Last updated 2026-08-17.
Authentication
Every call runs inside an authenticated session. vivu_sign_in establishes it against a Vivu account; the session carries an expiry and must be re-established when it lapses. vivu_status is the check: it reports whether the client is configured, whether the session is valid, and whether the backend is reachable.
vivu_status()
{
"auth": { "configured": true, "signed_in": true, "expires_at": 1786673020553 },
"backend": { "ok": true, "runtime": "production" }
}There is no anonymous access. An unauthenticated caller cannot list projects, index, or search.
Reading local files is a second permission, granted per folder with vivu_grant_directory_access and listable and revocable with vivu_list_directory_access and vivu_revoke_directory_access. Signing in does not grant file access.
Projects and scope
A project is the unit of scope. Indexing puts material into one project and a search runs inside one project — there is no cross-project search. Use vivu_list_projects to find one and vivu_create_project to make one.
Indexing: request and status
Indexing is asynchronous. The index call returns a batch id straight away; progress is read separately. A file is searchable when its indexing finishes, not when its upload does — the two are reported as different things on purpose.
vivu_index_folder({ folder: "/Volumes/Media/2026-q3", project_id: "prj_q3" })
// or a specific list
vivu_index_files({ files: ["/Volumes/Media/2026-q3/all-hands.mp4"], project_id: "prj_q3" })
{ "batch_id": "bat_31ac9" }
vivu_get_upload_batch({ batch_id: "bat_31ac9" })
{
"batch_id": "bat_31ac9",
"upload": { "completed": 4, "total": 6 },
"indexing": { "completed": 2, "in_progress": 2, "failed": 0 }
}vivu_get_job and vivu_get_jobs report the status and progress of a single indexing or refinement job.
Search: request and response
vivu_search_videos takes a plain-language query, a project, and a mode.
| Parameter | Required | Meaning |
|---|---|---|
query | yes | What to find, described in plain language. |
project_id | yes | The single project to search. |
mode | no | fast returns candidates directly; precise (default) refines and is asynchronous. |
maximum_results | no | Upper bound on returned moments. Defaults to 20. |
In precise mode the call returns a search id, then vivu_get_search_results is called repeatedly with the same id until complete is true. Each call waits and reports progress rather than returning a partial ranking.
vivu_get_search_results({ search_id: "srch_8f21c4", wait_seconds: 45 })
// still working
{ "complete": false, "progress": { "stage": "refining", "done": 12, "total": 40 } }
// finished
{
"complete": true,
"results": [
{
"source_id": "vid_4a19",
"source_title": "q3-all-hands.mp4",
"start_ms": 754000,
"end_ms": 791000,
"evidence": "spoken: \"...from October the tiers collapse into two...\"",
"why": "Direct statement of the pricing change by the speaker on screen."
}
],
"result_page": "https://<vivu-result-page>/s/…"
}Opening a moment
vivu_get_preview_links creates short-lived playable links for chosen results. They stream the moment; they are not downloads and not exports. Exporting local clips is a separate call, vivu_export_results, and is confirmed by the user first.
Limits
- One project per search; no cross-project queries.
- Precise search is asynchronous and must be polled to completion.
- Only explicitly authorised directories can be read.
- Indexing and upload are reported separately; do not treat a completed upload as searchable.
- The public one-video trial on /try has its own, tighter caps and does not go through MCP.
Errors
| Condition | Cause | Recovery |
|---|---|---|
| Not signed in | No session, or the session expired. | Call vivu_sign_in, then confirm with vivu_status. |
| Directory not authorised | The folder was never granted, or the grant was revoked. | Grant it with vivu_grant_directory_access. |
| Project not found | Wrong id, or the account cannot reach that project. | List reachable projects with vivu_list_projects. |
| Upload failed for a file | Transfer interrupted, or the file was unreadable. | Retry the batch with vivu_retry_upload_batch. |
| Search never completes | Refinement is still running. | Keep calling vivu_get_search_results with the same id until complete is true. |
| Backend unreachable | vivu_status reports backend.ok: false. | Retry; if it persists, contact Vivu. |
Direct HTTP access
The MCP server is the documented developer surface. The HTTP service behind it is internal and not published: it has no anonymous access and no public stability guarantee, so integrating against it directly is arranged with Vivu rather than reverse-engineered. Contact sales if a direct integration is what you need.
Further reading
All pagesRead the contract, then check the retrieval.
Try Vivu on one video, or talk to us about wiring it into your stack.