> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Vivu MCP server

The Vivu MCP connector routes your AI agent's tool calls to Vivu's own MCP server through Scalekit. Each user signs in to Vivu once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 11 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Media, Search
**Tools:** 11: 7 read, 2 write, 2 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Vivu MCP server app
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=VIVUMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Vivu MCP connection

   In **AgentKit > Connections**, create a Vivu MCP connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Vivu MCP server connections use your own OAuth app. Register one with Vivu MCP server and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Vivu MCP connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'vivumcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Vivu MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'vivumcp_vivu_get_account',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "vivumcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Vivu MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="vivumcp_vivu_get_account",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'vivumcp_vivu_get_account',
  toolInput: {},
  connector: 'vivumcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="vivumcp_vivu_get_account",
    tool_input={},
    connection_name="vivumcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `vivumcp_vivu_get_account`

Get connected Vivu account · Read-only

Show the Vivu account connected to this assistant.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `vivumcp_vivu_get_search_results`

Get video search results · Read-only

Wait for a pending video search and return its final results when ready.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `job_id` (`string`, required): Search identifier returned by the search tool.

Example input: `{"job_id":"<job_id>"}`

### `vivumcp_vivu_get_usage`

Get Usage · Read-only

Check the connected account's remaining allowance and plan information.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `vivumcp_vivu_get_video_summary`

Read video summary · Read-only

Read a video's saved overview and optional timestamped section summaries. Use this when asked what a video is about.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Project containing the video.
- `video_id` (`string`, required): Video to summarize.
- `end_ms` (`string`, optional): Optional end of the section range in milliseconds.
- `include_segments` (`boolean`, optional): Include section summaries. Default: `false`.
- `limit` (`integer`, optional): Maximum sections in this response. Default: `50`.
- `offset` (`integer`, optional): Section pagination offset. Default: `0`.
- `start_ms` (`integer`, optional): Start of the section range in milliseconds. Default: `0`.

Example input: `{"project_id":"<project_id>","video_id":"<video_id>"}`

### `vivumcp_vivu_list_projects`

List Vivu projects · Read-only

List the video projects available to the signed-in user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `vivumcp_vivu_list_videos`

List project videos · Read-only

List videos and indexing status in a cloud project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Project to list videos from.

Example input: `{"project_id":"<project_id>"}`

### `vivumcp_vivu_open_upload_page`

Open video upload page · Read-only

Get a secure browser page for uploading videos to a project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Project to upload videos to.

Example input: `{"project_id":"<project_id>"}`

### `vivumcp_vivu_create_project`

Create a Vivu project · Write

Create a cloud video project.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the new project.
- `description` (`string`, optional): Optional description of the project. Default: ``.
- `visibility` (`string`, optional): Who can see the project. One of: `organization`, `private`. Default: `organization`.

Example input: `{"name":"<name>"}`

### `vivumcp_vivu_search_videos`

Search videos · Write

Search a cloud video project for matching moments.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`string`, required): Project to search.
- `query` (`string`, required): Description of the video moments to find.
- `maximum_results` (`integer`, optional): Maximum number of final matching moments to return. Default: `20`.
- `mode` (`string`, optional): Choose faster results or more precise results. One of: `fast`, `precise`. Default: `precise`.

Example input: `{"project_id":"<project_id>","query":"<query>"}`

### `vivumcp_vivu_delete_project`

Delete a Vivu project · Destructive

Permanently delete a project and its videos.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Project to delete.

Example input: `{"project_id":"<project_id>"}`

### `vivumcp_vivu_delete_video`

Delete a project video · Destructive

Permanently delete a video from a project.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Project containing the video.
- `video_id` (`string`, required): Video to delete.

Example input: `{"project_id":"<project_id>","video_id":"<video_id>"}`

## Related

Other Media connectors ([all 23](/agentkit/connectors/?category=media)):

- [Reddit](/agentkit/connectors/reddit/): Scalekit connector, OAuth, 105 tools
- [Diarize](/agentkit/connectors/diarize/): Scalekit connector, Access token, 3 tools
- [YouTube](/agentkit/connectors/youtube/): Scalekit connector, OAuth, 45 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
