protogrid

Search / io.github.jonkludt/varosity

varosity

R2· OAuth, once

One key for AI video, voice, music, and image across 40+ frontier models. BYOK zero markup.

v0.1.1 · active · repository · website · descriptor JSON · versions

An agent can connect after a one-time OAuth consent by a human.Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.
Quality89good
Trust88of 100
Uptime, 30 days84%
Latency p50845 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "varosity": {
      "type": "http",
      "url": "https://varosity.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer ${VAROSITY_TOKEN}"
      }
    }
  }
}
claude mcp add --transport http varosity https://varosity.ai/api/mcp --header "Authorization: Bearer ${VAROSITY_TOKEN}"
[mcp_servers.varosity]
url = "https://varosity.ai/api/mcp"
bearer_token_env_var = "VAROSITY_TOKEN"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "varosity": {
      "type": "remote",
      "url": "https://varosity.ai/api/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {env:VAROSITY_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "varosity": {
      "type": "http",
      "url": "https://varosity.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer ${VAROSITY_TOKEN}"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=varosity&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdmFyb3NpdHkuYWkvYXBpL21jcCIsImhlYWRlcnMiOnsiQXV0aG9yaXphdGlvbiI6IkJlYXJlciAke1ZBUk9TSVRZX1RPS0VOfSJ9fQ%3D%3D"
}
{
  "servers": {
    "varosity": {
      "type": "http",
      "url": "https://varosity.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer ${VAROSITY_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "varosity": {
      "httpUrl": "https://varosity.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer ${VAROSITY_TOKEN}"
      }
    }
  }
}
extensions:
  "varosity":
    enabled: true
    name: "varosity"
    type: streamable_http
    uri: "https://varosity.ai/api/mcp"
    headers:
      "Authorization": "Bearer ${VAROSITY_TOKEN}"
    timeout: 300

Placeholders to fill from your own secret store: ${VAROSITY_TOKEN}. The registry never accepts secret values.

Quality 89 / 100good

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorization100 · weight 15
  • pass
    auth.prmProtected Resource Metadata (RFC 9728) published
  • pass
    auth.as_metadataauthorization server metadata reachable
  • pass
    auth.cimdClient ID Metadata Documents supported
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations43 of 43 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: list_voices (idempotentHint, openWorldHint); suggest_storyboard_mode (idempotentHint, openWorldHint); generate_voice (idempotentHint, openWorldHint); …
  • pass
    tools.token_costabout 5,598 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes43 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependencies100 · weight 15
  • pass
    deps.known_vulnsno known advisory in 1 resolved packages
  • n/a
    deps.mcp_sdk_versionthe official MCP SDK is not in the dependency graph
  • pass
    deps.resolvable@varosity/[email protected] resolved: 1 packages

43 tools, about 5,598 tokens to load them all · tool set 49a4d31ae921 · tools last changed 2026-10-10 · checked 2026-10-19 10:20 UTC

Tool changes

  • govern_assetchangedtitle, annotations
  • verify_assetchangedtitle, annotations
  • delete_webhookchangedtitle, annotations
  • test_webhookchangedtitle, annotations
  • create_webhookchangedtitle, annotations
  • list_webhookschangedtitle, annotations
  • generate_musicchangedtitle, annotations
  • clip_audiochangedtitle, annotations
  • transcribe_audiochangedtitle, annotations
  • voice_changerchangedtitle, annotations

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 88 / 100

provenance90
liveness93
freshness65
hygiene100

+repository +namespace-matches-repo +website +reachable +uptime-84% ~updated-96d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@varosity/[email protected] npm0 dependencies, resolved · advisories checked 2026-10-19

No known advisory affects this dependency graph.

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://varosity.ai/api/mcp streamable-httpoauth2 AS: https://varosity.aiyes84%845 ms–2026-10-19
packageregistryversionruntimesecrets
@varosity/mcp-servernpm0.1.1–VAROSITY_API_KEY

Tools (43)

clip_audioTrim one source recording into one or more hosted mp3 clips. Provide segments as [{start,end}] in seconds; returns { clips: [{url,start,end,bytes}] }. The clip URLs feed straight into clone_voice as sampleUrls. Scope required: generate:voice.
clone_voiceClone a voice from audio samples (Instant Voice Cloning). Pass name + sampleUrls (public audio URLs; 30s–2min of clean speech works best) and optionally provider (elevenlabs default, cartesia, fish-audio). Returns { voiceId } usable immediately in generate_voice (set voiceModel to the matching provider for cartesia/fish). The clone is private to you. Scope required: generate:voice.
create_projectCreate a new empty project. Returns { projectId, slug }. Pass projectId to generate_video so all shots from a run land in one project. Create once per run, not once per shot.
create_project_from_templateClone a template into a fresh project owned by the caller. Returns { projectId, shotCount }.
create_webhookRegister a new webhook. Returns the signing secret ONCE — store it server-side.
delete_projectdestructivePermanently delete a project and all its shots. Cannot be undone.
delete_webhookdestructiveRevoke a webhook by id. Irreversible.
design_voiceDesign a brand-new voice from a text description (ElevenLabs Voice Design). Returns audition previews [{ generatedVoiceId, audioUrl }]. Pass voiceName to also save the first preview as a reusable voice and get its { voiceId }. Scope required: generate:voice.
gate_decideApply an operator decision to a run's open gate. Decisions: approved | revised | rejected | auto_approved. Run status transitions: approved/auto_approved → 'approved', revised → 'briefing', rejected → 'rejected'.
generate_creative_biblev4 Bible step — generates a creative bible for a run BEFORE storyboard planning. Calls Claude to produce a premise, visual philosophy, and cast of characters/locations with locked descriptions, then generates one Flux reference image per character and location. Writes the result to runs.bible and returns the BibleDocument. Open a bible-phase approval gate after calling this so the operator can review the character references before any storyboard is planned.
generate_end_cardGenerates a branded end-card PNG from brand identity (name, tagline, color palette, logo). Uploads the image to varosity-assets and attaches it to the brand as role='end_card'. The render bridge automatically picks up this asset for the next project stitch. Returns { asset_id, url }.
generate_imageGenerate or EDIT an image. This is the tool for ALL image models (kind=image — flux-1-schnell, recraft-v3, aurora, dall-e-3, gemini-3.1-flash-image, nano-banana, etc.). Synchronous (1–3 s): returns { imageUrl, modelId } DIRECTLY — there is no job to poll and no get_job step (that's video only). IMAGE-TO-IMAGE: pass referenceImageUrl (a public image URL) to edit/restyle a source image while preserving its subjects — use modelId "nano-banana" for best identity/element preservation (e.g. keep a logo or face, redesign around it). Do NOT pass image models to generate_video. For end-user choice among candidates, prefer pick_reference_images. Scope required: generate:image.
generate_musicGenerate a music track. Returns trackId + audioUrl when ready.
generate_storyboard_audioGenerate voiceover + music for a storyboard from its plan.audio section (ElevenLabs BYOK). Writes voiceover_url and music_url to the storyboard row — render_storyboard then injects them into the project's audio tracks. Non-fatal when ElevenLabs is not configured; returns { ok: false, reason } instead of throwing.
generate_storyboard_gridGenerate a single composite grid image covering all shots in a storyboard — best when shots share a consistent visual style or the operator wants one unified reference sheet. Binds the result to the storyboard and auto-attaches it to every shot at render time. Use generate_storyboard_keyframes instead when each shot has meaningfully distinct content. Call suggest_storyboard_mode first if unsure. Requires storyboards:write scope.
generate_storyboard_keyframesGenerate one keyframe still per shot in parallel — best when shots have distinct content (different characters, locations, or visual moods). Returns ordered asset IDs bound to the storyboard. Use generate_storyboard_grid instead when shots share a unified visual style and a single reference sheet suffices. Call suggest_storyboard_mode first if unsure. Requires storyboards:write scope.
generate_videoSubmit a VIDEO render job — modelId must be a video model (kind=video; e.g. veo-3.1, kling-3.0, ws-pika-2.2). For images use generate_image (NOT this tool — image models like flux-1-schnell/recraft-v3 are not video). Returns { jobId, projectId }. jobId == shotId — poll status via get_job until status='succeeded', then retrieve outputUrl. Always call pick_reference_images first if the user has not supplied a reference image; pass the chosen URL as reference_image_url. For AVATAR / LIP-SYNC models (omnihuman, heygen-photo-avatar, muapi-latentsync): pass the source photo as reference_image_url AND the spoken audio track as audio_url (a public mp3/wav URL) — the avatar's lips track THAT audio instead of provider-generated TTS. For muapi-latentsync, reference_image_url is the source VIDEO url. Per-model knobs (e.g. HeyGen avatarId/voiceId/engine) ride on providerOptions. Pass project_id from create_project to group all shots from a run into one project. Scope required: generate:video.
generate_voiceSynthesize speech from text. Returns { audioUrl }. Pass voiceId for the provider's voice. Optionally set modelId to a Varosity voice model (elevenlabs-tts, openai-tts-1, deepgram-aura-2); defaults to ElevenLabs. Scope required: generate:voice.
get_jobread-onlyPoll a video render job (jobId == shotId). Returns status + outputUrl when done. Video renders take time: fast models (LTX, ws-pika) ~30s; Kling 3.0 / Veo 3.1 / Seedance 60–120s; up to ~3min under load. `running` past 60s is NORMAL — keep polling every ~5–8s until status is `succeeded` or `failed`. Do not conclude a job is hung before ~3–4 minutes. `succeeded` always carries an outputUrl.
get_projectread-onlyFetch a single project + its shot list.
govern_assetMake any AI-generated asset compliance-grade: embeds a signed C2PA manifest, an invisible watermark + perceptual fingerprint (durable re-discovery), a visible per-jurisdiction disclosure label, a Claude claim-risk scan, and a tamper-evident audit-log entry. Works across any model.
list_brand_agentsread-onlyList the caller's brand agents. Brand-scoped tokens see only their permitted brands.
list_modelsread-onlyList available generation models with pricing and capabilities. Filter by kind (video, voice, music, image) to narrow results. byokPricePerSec = BYOK/agent rate (your own API key); creditsPricePerSec = platform credits rate (byokPricePerSec × 1.05). Check unavailable=true before submitting — unavailable models reject immediately. Use suggest_model for AI-assisted selection.
list_projectsread-onlyList the user's projects, most recently updated first (max 50). Returns id, name, slug, aspect_ratio. Use get_project to fetch shots for a specific project. For brand-agent runs, call create_project first and reuse its id across all generate_video calls — do not create a new project per shot.
list_templatesread-onlyCurated storyboard templates (Product demo, Testimonial, Social hook, Explainer). Clone with create_project_from_template.
list_voicesread-onlyList voices available to generate_voice. Returns the built-in provider voices (ElevenLabs / OpenAI TTS / Deepgram Aura 2) plus the user's saved library. Each entry has { voiceModel, voiceId, name, description } — pass voiceModel as modelId and voiceId as voiceId to generate_voice. Voice IDs are provider-specific (e.g. Deepgram wants 'aura-2-thalia-en', not 'aura'); use these exact ids.
list_webhooksread-onlyList the caller's configured webhook endpoints (secrets are masked).
pick_reference_imagesGenerate N candidate reference images in parallel for the user to choose from BEFORE video generation. Call this when the user has not supplied their own reference image. Returns an array of {index, imageUrl} objects — show all of them to the user with their index numbers and ask which one they prefer. Pass the chosen imageUrl as reference_image_url in the subsequent generate_video call. Default count is 3. Uses the same image model as generate_image.
plan_brand_runClaude-powered brand run planner. Reads the brand's identity pack and recent memory (characters, locations, past performance, published assets) and returns a structured RunPlan with per-shot imagePromptHint, voiceover script, and platform routing. Call before generate_video when operating as a brand agent. Requires brand:read scope.
plan_storyboardv4 Director — Claude-powered storyboard planner. Emits an 8-section plan (premise / visual_style / characters / locations / shots / audio / continuity / mode_recommendation) and persists it to varosity.storyboards. Brand context, project Style Bible, and typed Asset Library reuse all flow into the prompt. Caller can pass mode_hint to force grid vs keyframes; otherwise the Director picks.
refresh_skillsFetch the latest versions of all Varosity-managed skills from varosity.ai. Returns an array of {slug, version, content, suggested_paths} for each skill. suggested_paths lists install locations for common MCP runtimes (Hermes, Claude Code, Claude Desktop, generic). Write content to the path that matches your runtime. Call at the start of any video production session or when tool schemas feel stale.
regenerate_keyframev4 Director — re-rolls a single keyframe panel without disturbing the others. Replaces the asset_id at storyboards.keyframe_asset_ids[shot_index]. Optional prompt_override redirects that one panel.
render_projectStitch every shot in a project into a single MP4. Returns the final URL.
render_shotRender video for an existing idle shot created by render_storyboard. Reads the shot's model, prompt, duration, and bound reference images from the DB, then submits to the provider. Returns { jobId, modelId, projectId }; poll via get_job.
render_storyboardv4 Director — materializes an approved storyboard into the existing Studio primitives: ensures a project, inserts one shot per plan.shots[] (storyboard_shot_index set), binds the grid asset to every shot (Mode A) or the per-shot keyframe (Mode B) via shot_assets. Idempotent on a single storyboard. Returns project_id + ordered shot_ids; callers kick off per-shot generate + stitch via existing endpoints.
run_brand_agentKick off a single run for a brand. Inserts a varosity.runs row with status='queued' and returns it. The agent loop walks the run forward via `generate_video`, the runs PATCH endpoint, and `gate_decide`.
sound_effectGenerate a sound effect from a text prompt (ElevenLabs sound generation). Returns { audioUrl }. Optionally set durationSeconds (0.5–30) and promptInfluence (0–1). Scope required: generate:voice.
suggest_modelread-onlyRecommend the best models for a shot. Pass aspectRatio and budgetPriority for better results. Returns ranked list with reasoning.
suggest_storyboard_moderead-onlyv4 Director — heuristic-only routing between Mode A (grid) and Mode B (keyframes) for a brief. Cheap, no LLM call. Used by the canvas brief bar pre-plan; the Director's mode_recommendation is canonical once a plan exists.
test_webhookFire a dummy shot.generation.completed event at one of your webhooks (signature-verify smoke test).
transcribe_audioSpeech-to-text + optional speaker diarization (ElevenLabs Scribe). Returns { languageCode, durationSec, text, speakers, segments } where segments are contiguous same-speaker runs with start/end seconds — use them to pick clean windows (e.g. for clip_audio → clone_voice). Scope required: transcribe:audio.
verify_assetread-onlyVerify whether an asset is AI-generated and inspect its provenance: C2PA content credentials (present/valid/issuer), durable watermark + fingerprint match, and history. Public — no API key required. Satisfies the EU AI Act Article 50 detection obligation.
voice_changerSpeech-to-speech: convert a source recording (audioUrl) into a target voice (voiceId) while keeping the original delivery/performance. Returns { audioUrl }. Scope required: generate:voice.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.jonkludt/varosity",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://varosity.ai/api/mcp",
      "type": "streamable-http",
      "headers": [
        {
          "name": "Authorization",
          "isSecret": true,
          "isRequired": true,
          "description": "Bearer vsk_... — Varosity API key issued at https://varosity.ai/app/keys/api-keys"
        }
      ]
    }
  ],
  "version": "0.1.1",
  "packages": [
    {
      "version": "0.1.1",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@varosity/mcp-server",
      "registryType": "npm",
      "environmentVariables": [
        {
          "name": "VAROSITY_API_KEY",
          "format": "string",
          "isSecret": true,
          "isRequired": true,
          "description": "Varosity API key (vsk_...) issued at https://varosity.ai/app/keys/api-keys"
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/jonkludt/varosity-ai",
    "source": "github",
    "subfolder": "packages/mcp-server"
  },
  "websiteUrl": "https://varosity.ai",
  "description": "One key for AI video, voice, music, and image across 40+ frontier models. BYOK zero markup."
}