The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Vivideo listing page.
The developer + agent integration layer for the Vivideo API — a shared client, an MCP server, a CLI, and Skills. Agents are a primary user, not an afterthought.
Everything sits on top of the public API (the source of truth). No backend business logic is duplicated here — the toolchain only adds client-side ergonomics and guardrails.
One client, one set of types, derived from packages/core/openapi.yaml. The MCP server and CLI both call @vivideo/core — there is exactly one representation of each request/response, so the tools, CLI, docs and OpenAPI stay consistent.
@vivideo/core adds only client-side concerns, never business logic:
| Guardrail | What it does |
|---|---|
| Rate limiting | Token-bucket cap on request rate (default 8/s) — the client can't become a request flood. |
| Concurrency cap | Semaphore limits in-flight requests (default 4). |
| Bounded retries | Retries only retryable failures, with full-jitter backoff, capped attempts. |
Honors Retry-After | On 429 it waits the API-specified delay before retrying. |
| Idempotency | Every video-create sends an Idempotency-Key; retries reuse it → no duplicate charges. |
| Timeouts | Per-request AbortController timeout (default 30s). |
| Safe waiting | waitForVideo polls at the API's suggested interval, with a hard timeout — never a while(true). |
| Secret redaction | API keys / signing secrets are stripped from every log, error, and output. |
These complement — and never bypass — the API's own auth, rate limits, idempotency, credit checks, premium gates, ownership and error model.
Once published: npm i -g @vivideo/cli (gives vivideo), and npx @vivideo/mcp for the server.
VIVIDEO_API_KEY env → ~/.vivideo/config.json (written owner-only 0600).configure stores it without echoing it.Requires Node ≥ 18.17.