varg

AI video, image, speech and music generation — Kling, Seedance, Veo, Sora, Flux, ElevenLabs via one hosted MCP server (OAuth) or npx @vargai/mcp.

Hosted MCP Server

npx add-mcp 'https://mcp.varg.ai/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

MCP Server

Connect Claude, ChatGPT, VS Code, Cursor, and other AI tools to varg.ai

Connect your AI tools to varg.ai for image, video, speech, and music generation — no code required. The varg MCP server gives any MCP-compatible client the full varg catalog — every model, every option — with inline media previews.

Connect

Connect via Custom Connectors on [claude.ai](https://claude.ai).
<Steps>
  <Step title="Open connectors">
    Go to [Settings → Connectors](https://claude.ai/customize/connectors) in Claude.
  </Step>

  <Step title="Add custom connector">
    Click **+** → **Add custom connector**, then paste:

    ```
    https://mcp.varg.ai/mcp
    ```
  </Step>

  <Step title="Authorize">
    Click **Add**. A browser window opens — log in to your varg.ai account and click **Approve**. You're connected.
  </Step>
</Steps>

Tip

Available on Free, Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector.

Add to your `claude_desktop_config.json`:
```json theme={null}
{
  "mcpServers": {
    "varg": {
      "url": "https://mcp.varg.ai/mcp"
    }
  }
}
```

Restart Claude Desktop. A browser window opens — log in and click **Approve**.

Info

On macOS, the config file is at ~/Library/Application Support/Claude/claude_desktop_config.json.

Connect via Custom Connectors on [chatgpt.com](https://chatgpt.com).
<Steps>
  <Step title="Open connectors">
    Go to [Settings → Connectors](https://chatgpt.com/settings/connectors) in ChatGPT.
  </Step>

  <Step title="Add custom connector">
    Click **Add custom connector**, then enter the server URL:

    ```
    https://mcp.varg.ai/mcp
    ```

    For **Registration method**, select **DCR** (Dynamic Client Registration). Leave Client ID and Client Secret blank.
  </Step>

  <Step title="Authorize">
    Click **Add**. A browser window opens — log in to your varg.ai account and click **Approve**. You're connected.
  </Step>
</Steps>

Tip

Available on Free, Plus, Pro, and Team plans. You can also use varg via the OpenAI Responses API by passing server_url directly.

Add the remote MCP server to your project's `.mcp.json`:
```json theme={null}
{
  "mcpServers": {
    "varg": {
      "type": "http",
      "url": "https://mcp.varg.ai/mcp"
    }
  }
}
```

Or add via the CLI:

```bash theme={null}
claude mcp add --transport http varg https://mcp.varg.ai/mcp
```

Claude Code will prompt you to authorize on first use.

Info

For local mode without OAuth, use npx @vargai/mcp with stdio transport instead. See the Claude Code setup guide for the full skill installation.

Add to `.vscode/mcp.json` in your project:
```json theme={null}
{
  "servers": {
    "varg": {
      "url": "https://mcp.varg.ai/mcp"
    }
  }
}
```

Or add globally via command line:

```bash theme={null}
code --add-mcp '{"name":"varg","url":"https://mcp.varg.ai/mcp"}'
```

VS Code will prompt you to authorize on first use.
Add to `.cursor/mcp.json` in your project:
```json theme={null}
{
  "mcpServers": {
    "varg": {
      "url": "https://mcp.varg.ai/mcp"
    }
  }
}
```

Cursor will prompt you to authorize on first use.
Run the MCP server locally via stdio — no remote connection needed:
```bash theme={null}
npx @vargai/mcp
```

Uses your API key from `~/.varg/credentials` or `VARG_API_KEY` env var.

Log in first if you haven't:

```bash theme={null}
bunx vargai login
```

On the consent screen you also pick which account this connection works in — your personal one or a team. Each client you connect keeps its own. See Which account it works in.

Available tools

Generation

Start here. One tool per thing you want, with defaults chosen for you — describe the result and you get it in a single call.

ToolDescription
generate_imageAn image from a description. Pass reference_image to edit an existing one instead
generate_videoA video from a prompt, from an image (from_image), or from footage (from_video). Set with_audio for native sound
generate_speechText to speech, in any language
analyze_videoWatch a video by URL and get a structured report: summary, timeline with timestamps, transcript, on-screen text. 6¢, repeats are cached and free
search_voicesFind a voice by name, by metadata, or by describing one (intent: "warm female narrator")
generate_video({ prompt: "a fox in snow, cinematic", duration: 5, aspect_ratio: "16:9" })

Images and speech are fast, so they block until ready. Video returns a job_id immediately — pass wait: true to block instead.

The full catalog

The tools above cover the common cases with one model each. varg has hundreds, and each accepts its own options; a fixed tool per capability could only ever expose the fields they all share. So anything model-specific goes through the registry, where your assistant discovers the catalog at the moment it needs it.

ToolDescription
list_toolsList capabilities: image, video, speech, music, transcription, ffmpeg, render, pipeline
get_toolGet the input schema for a capability — with model set, the exact schema for that model, including provider-specific options
call_toolRun a capability. Returns a job id immediately; pass wait: true to block until the result is ready
call_tool({
  tool: "video",
  input: { model: "kling-v3", prompt: "a fox in snow", duration: 5, aspect_ratio: "16:9" }
})

Your assistant calls list_tools once, get_tool when it needs a model's specifics, then call_tool. A model added to varg shows up immediately — there is no MCP release to wait for.

Jobs

ToolDescription
get_jobCheck a job and collect its result
list_jobsList your recent jobs
cancel_jobStop a running job before it spends more credits

Rendering and templates

ToolDescription
render_videoRender a multi-scene video from TSX using varg's component library
find_templatesBrowse and search published templates, or list your own with mine: true
get_templateGet a template's details and TSX source
use_templateRender a template as-is
delete_templateWithdraw one of your own templates

Note

Templates render as published — there is no variable substitution. To customise one, read its source with get_template, edit the TSX, and pass it to render_video.

Catalog and cost

ToolDescription
list_modelsAll models across capabilities, with routes and price estimates
estimate_costPrice a generation before running it
search_presetsFind voices and other presets. Describe what you want (intent: "warm female narrator") for ranked suggestions
check_balanceRemaining credits on the account this connection works in

Files and folders

ToolDescription
upload_fileUpload from a URL or base64 and get a hosted URL
list_files / get_file / delete_fileManage your files
get_lineageRecover how a file was made — job, tool, model, and exact input
list_workspaces / create_workspaceFolders to keep a session's output together

Folders belong to one account, so list_workspaces returns the ones in whichever team the connection works in. A personal folder is not visible from a team connection, and the reverse.

Teams

ToolDescription
list_teamsThe teams you can work in, and which one this connection uses
get_current_teamWhere this connection is working right now, and whether that is still valid
set_teamPoint this connection at a team, or back at your personal account

See Which account it works in.

Which account it works in

Each connection is bound to one account — your personal one, or a team you belong to. Generations are billed to that account's balance and files land in its library.

The binding is per connection, not per user. Claude Desktop, Cursor, and VS Code each register separately, so each gets its own. One agent can work in Marketing while another works in Product.

You choose when you connect. The consent screen has a Works in picker listing your teams, defaulting to your personal account; if you are in no teams, it shows Personal and there is nothing to pick.

To change it later, ask the assistant:

"switch to the Marketing team"     → set_team
"which team are you working in?"   → get_current_team

set_team takes effect immediately, including for work already running, and is remembered for future sessions. It chooses among teams you are already in — it cannot grant you access to a new one. It also takes an optional workspace_id, the folder new output is filed into when a call does not name one. Settings → Connected Apps shows each connection's account read-only.

Note

If you are removed from a team a connection is bound to, that connection stops running anything and says so. It does not quietly fall back to your personal account — that would spend the wrong balance. Use list_teams and set_team to move it, or ask a team owner to restore your membership.

Info

This applies to OAuth connections. In local stdio mode (npx @vargai/mcp) the account is whichever one your API key belongs to.

How it works

Your AI tool (Claude, ChatGPT, VS Code, Cursor)
    │
    │  OAuth 2.1 + PKCE
    ▼
mcp.varg.ai (MCP server — resource server)
    │
    │  your access token, forwarded
    ▼
api.varg.ai (varg API, /v2)
    │
    ▼
AI providers (fal, ElevenLabs, Higgsfield, HeyGen, PiAPI, etc.)

Connecting for the first time runs a standard OAuth 2.1 authorization code flow with PKCE:

  1. Your client discovers the authorization server from mcp.varg.ai
  2. It registers itself automatically — no client id to copy
  3. You log in to varg.ai, pick which account it works in, and approve on a consent screen
  4. Your client receives a short-lived access token and a refresh token, and renews on its own

No API key is created. The connection is a grant you can see and revoke under Settings → Connected Apps, separately from any API keys you manage yourself. Revoking stops the client renewing; whatever token it holds expires shortly after.

A connected app can generate media and spend credits from the account it is bound to. It cannot create API keys, change your account settings, or reach admin functions — those are restricted to your own signed-in sessions. Membership is re-checked on every request, so a connection bound to a team you have left can spend nothing.

Inline media previews

generate_image, generate_video, generate_speech, call_tool, get_job, render_video, and use_template return an inline preview in your chat. It shows progress while the job runs, then picks a player from the result:

  • Images — displayed inline with click-to-open fullscreen
  • Videos — embedded player with play/pause controls
  • Audio — compact player with progress bar and seek

Multi-output jobs (an ffmpeg slice, a multi-image model) preview the first file and report how many others there are.

These work in Claude Desktop, claude.ai, and VS Code (via MCP Apps). In clients without MCP Apps support the tools still return the result URLs as normal text.

Pricing

varg uses a credit system. 1 credit = $0.01 USD.

GenerationCreditsCost
Image (Flux Schnell)5$0.05
Image (Flux Pro)10$0.10
Image (Nano Banana Pro)5$0.05
Image (Recraft v3)10$0.10
Image (Recraft v4 Pro)30$0.30
Image (Grok Imagine)3$0.03
Video (Kling v3, 5s)150$1.50
Video (Kling v3 Standard, 5s)100$1.00
Video (Wan 2.5, 5s)80$0.80
Video (Minimax, 5s)80$0.80
Video (Seedance 2, 5s)250$2.50
Video (LTX-2, 5s)50$0.50
Speech (ElevenLabs v3)25$0.25
Speech (ElevenLabs Turbo)20$0.20
Music30$0.30
Lipsync (Sync v2 Pro)80$0.80
Lipsync (OmniHuman)100$1.00
Transcription (Whisper)10$0.10
Transcription (Groq Whisper Turbo)3$0.03
FFmpeg Trim5$0.05
FFmpeg Resize5$0.05
FFmpeg Slice5$0.05
FFmpeg (custom command)5$0.05
Probe Media5$0.05

Cached results are free. Use check_balance to see the remaining credits of the account the connection works in.

Sign up and get your API key Browse all available models with pricing Pre-built video templates Full REST API documentation

This documentation is built and hosted on Mintlify, a developer documentation platform.