Skip to main content
Glama

botverse-mcp

MCP server and command-line tool for Botverse — video transcoding and document conversion for AI agents and the humans who configure them.

npm

What it does

  • Video transcoding — MP4 (H.264), WebM (VP9), ProRes 422, GIF, MP3 extraction · $0.25/job

  • Video/audio conform — mux a separate video and audio source into one output, reconciling frame-rate and duration mismatches (including true pulldown-style speed conforms, e.g. 24→25fps) · $0.30/job

  • Conform splice — concatenate video and/or still-image segments into one output: head slates/bumpers, tail slates/end cards, mid-roll inserts/cutaways, or joining clips together · from $0.30/job

  • Document conversion — Markdown ↔ DOCX ↔ PDF ↔ HTML ↔ XLSX · $0.05/file

  • Transcription — speaker-labelled transcripts (diarization + AI speaker naming) → txt/srt/vtt/docx/pdf · ~$3/hour

  • Workflows — chain multiple Botverse operations (transcode, convert, transcribe, conform, splice) into a single multi-step job with automatic dependency ordering and parallel branches, instead of orchestrating each call yourself · convert-only steps run on wallet balance ($0.05/step); transcode/transcribe steps bill by source duration and require auto-refill

Two ways to use it: an MCP server for your AI agents, and a botverse CLI for the shell — evaluation, CI/CD, cron, scripts, and local coding agents. No AWS. No FFmpeg. No infrastructure.

Related MCP server: arcframe-mcp

Setup

  1. Sign up at botverse.cloud — free to try: $1 credit on signup, no card required. A card + 2FA are only needed at your first top-up ($5 min). No monthly fees.

  2. Get an API key or connector URL from your dashboard

  3. Add to your MCP client config

Usage

Claude Desktop / Cursor / Windsurf

{
  "mcpServers": {
    "botverse": {
      "command": "npx",
      "args": ["-y", "botverse-mcp"],
      "env": {
        "BOTVERSE_API_KEY": "bv_live_..."
      }
    }
  }
}

Or with a connector URL (recommended for claude.ai):

{
  "mcpServers": {
    "botverse": {
      "command": "npx",
      "args": ["-y", "botverse-mcp"],
      "env": {
        "BOTVERSE_CONNECTOR_URL": "https://botverse.cloud/mcp?token=bv_sess_..."
      }
    }
  }
}

Command line (botverse)

The same package ships a botverse CLI for the shell — it reads files from disk and streams them straight to the API (no content goes through an LLM), so it's the fast path for evaluation, automation, and local coding agents.

export BOTVERSE_API_KEY=bv_live_…        # or BOTVERSE_CONNECTOR_URL=…?token=bv_sess_…

npx botverse convert report.md --to pdf
npx botverse convert *.md --to docx,pdf -o ./out
npx botverse transcode clip.mov --to mp4 -o ./out
npx botverse transcribe call.mp4 --to docx --attendees "Sarah Chen,Mike Torres"
npx botverse conform video.mp4 audio.wav --to mp4 --method speed_conform --target-framerate 25
npx botverse balance

Each job uploads → polls → downloads the finished file to -o (default: current dir). Globs and multiple --to formats run as a batch.

Sandbox note: the CLI needs outbound network to botverse.cloud and Botverse's file storage host, so it does not run inside sandboxed agent environments (claude.ai / Claude Desktop), whose egress is allowlisted. There, use the MCP tools (e.g. convert_content) instead.

Tools (MCP)

Tool

Description

get_upload_url

Get a presigned URL to upload a file for use with the _media/_file/_video (object-key-based) tools

transcode_from_url

Transcode video from a public URL

transcode_video

Transcode an uploaded video file

conform_from_url

Mux a separate video + audio source (public URLs) into one output

conform_media

Mux an uploaded video + audio source into one output

conform_splice_from_url

Concatenate video/image segments (public URLs) — slates, bumpers, end cards, inserts, joined clips

conform_splice_media

Concatenate uploaded video/image segments — same use cases

convert_content

Convert document content inline (up to 4 MB; sandbox-safe)

convert_from_url

Convert a document from a public URL

convert_file

Convert an uploaded document

submit_workflow

Submit a multi-step BWDL workflow chaining several of the above tools together, with dependency ordering and parallel branches

get_workflow_status

Poll a workflow (and its per-step status) until it reaches a terminal state

cancel_workflow

Cancel an in-progress workflow; already-completed steps are billed, the rest are not

get_job_status

Poll a job until complete

get_download_url

Get the signed download URL

get_wallet_balance

Check wallet balance

Workflows

submit_workflow chains multiple Botverse tools (transcode, convert, transcribe, conform, splice) into one server-side job — e.g. transcribe → clip extraction → delivery — instead of your agent making each call and polling each one individually.

  • Workflow definitions use BWDL (Botverse Workflow Definition Language): a JSON object with a workflow_id and a steps array. Each step has an id, a tool (any MCP tool name), an inputs object, and an optional depends_on array of prior step ids.

  • Steps run in dependency order; steps that share the same depends_on run in parallel.

  • A later step can reference an earlier step's output with "$.steps.<step_id>.output_key", and a workflow-level parameter with "$.params.<name>" — no other template syntax is supported.

  • Submit with submit_workflow, poll with get_workflow_status every 5–10 seconds until the status is COMPLETED, FAILED, PARTIALLY_FAILED, or CANCELLED, and stop early with cancel_workflow if needed (you're only billed for steps that already completed).

  • Billing: convert-only workflows run on wallet balance at $0.05/step. Workflows containing a transcode or transcribe step require auto-refill to be enabled (billing scales with source duration).

Example — a two-step conversion chain (URL → DOCX → PDF):

{
  "workflow_id": "md-to-pdf-via-docx",
  "steps": [
    {
      "id": "to_docx",
      "tool": "convert_from_url",
      "inputs": {
        "source_url": "https://example.com/report.md",
        "output_format": "docx"
      }
    },
    {
      "id": "to_pdf",
      "tool": "convert_file",
      "depends_on": ["to_docx"],
      "inputs": {
        "object_key": "$.steps.to_docx.output_key",
        "output_format": "pdf"
      }
    }
  ]
}

Pricing

  • Video transcode (≤5 min): $0.25/job

  • Video overage: +$0.08/min

  • ProRes 422: $0.35/source-min ($0.50 min)

  • Document conversion: $0.05/file

Credits never expire. Full pricing →

Available Tools

12 tools
cancel_workflowA
Idempotent

Cancel an in-progress workflow. All queued and dispatched steps are marked CANCELLED. Completed steps are not reversed. You are only billed for steps that completed before cancellation.

Inputs: workflow_id (required). Returns: workflow_id, cancelled, status

convert_contentA

Offload an inline document conversion to Botverse — pass the content directly as a string. ONLY use this tool for content you generated yourself (e.g. Markdown you just wrote). HARD LIMIT: content must be under 10,000 characters. If the content is longer than 10,000 characters, or came from an uploaded or external file, DO NOT use this tool — tell the user to make the file available at a public URL (Google Drive share link, Dropbox, object storage, etc.) and use convert_from_url instead. Supported inputs: md, html, rst, txt (plain text), docx (base64). Supported outputs: docx (Word), pdf, html, txt, md, rst, xlsx. Flat fee $0.05 per file.

Inputs: content (required), input_format (required), output_format (required), encoding. Returns: job_id, status, estimated_seconds

convert_fileA

Offload a document conversion to Botverse using an already-uploaded file. Workflow: (1) call get_upload_url to get a presigned upload URL, (2) PUT the raw file bytes to that URL, (3) call convert_file with the object_key — Botverse handles the rest server-side. Returns a job_id immediately so you can continue with other tasks while conversion runs. Supported inputs: md, html, rst, txt, docx. Supported outputs: docx, pdf, html, txt, md, rst, xlsx. Poll get_job_status until complete, then get_download_url. Flat fee $0.05 per file.

Inputs: object_key (required), output_format (required). Returns: job_id, status, estimated_seconds

convert_from_urlA

Offload a document conversion to Botverse — runs server-side in seconds, returns a download link, and frees you to continue with other tasks while it processes. Use this when the source document is at a public URL — including Dropbox, Google Drive, OneDrive, SharePoint, and Box share links (pass the share URL as-is). If you already have the content as a string, use convert_content instead — no upload step needed. Supported inputs: md, html, rst, txt, docx. Supported outputs: docx (Word), pdf, html, txt, md, rst, xlsx (tables extracted). Returns a job_id immediately. Poll get_job_status every 5s until 'complete', then get_download_url. Flat fee $0.05 per file.

Inputs: source_url (required), output_format (required). Returns: job_id, status, estimated_seconds

get_download_urlA
Read-onlyIdempotent

Get a presigned HTTPS URL to download the completed output file. Call after get_job_status returns 'complete'. URL expires in 24 hours.

Inputs: job_id (required). Returns: download_url, filename, expires_at, size_bytes

get_job_statusA
Read-onlyIdempotent

Poll the status of a transcode or convert job. Call every 5 seconds until status is 'complete' or 'failed'. Status 'queued' or 'processing' is normal — large files take 5–15 minutes. Keep polling indefinitely until a terminal status is reached. Do not stop polling after a fixed number of attempts.

Inputs: job_id (required). Returns: job_id, status, progress_pct, output_key, +2 more

get_upload_urlA

Get a presigned PUT URL to upload any file — video, audio, or document (markdown, HTML, DOCX, etc.). The URL expires in 15 minutes. PUT raw file bytes directly to the URL. After upload, pass the object_key to transcode_video (for video) or convert_file (for documents).

Inputs: filename (required), content_type (required). Returns: upload_url, object_key, expires_in

get_wallet_balanceA
Read-onlyIdempotent

Check the current prepaid wallet balance for this Botverse account. Use before large batch jobs to confirm sufficient funds.

Inputs: no named parameters. Returns: balance_usd, auto_refill_enabled, refill_threshold_usd, refill_amount_usd

get_workflow_statusA
Read-onlyIdempotent

Get the current status of a workflow and all its steps. Each call may advance the workflow by dispatching steps whose dependencies have completed. Poll every 5–10 seconds until status is COMPLETED, FAILED, PARTIALLY_FAILED, or CANCELLED.

Inputs: workflow_id (required). Returns: workflow_id, status, total_cost_usd, steps, +1 more

submit_workflowA
Idempotent

Submit a multi-step workflow to the Botverse workflow engine. Steps execute in dependency order; parallel branches (multiple steps with the same depends_on) run simultaneously. Returns a workflow_id immediately — poll get_workflow_status every 5–10 seconds until terminal. Requires auto-refill to be enabled at botverse.cloud/dashboard/billing to prevent mid-workflow balance failures. Workflow definition uses BWDL (Botverse Workflow Definition Language) — schema at botverse.cloud/schemas/workflow/v1.json.

Inputs: definition (required). Returns: workflow_id, status, step_count, already_exists

transcode_from_urlA

Offload a video or audio transcode to Botverse using a public URL — no upload step needed. Accepts Dropbox, Google Drive, OneDrive, SharePoint, and Box share links directly — pass the share URL as-is, no manual conversion needed. Also works with any direct HTTPS download URL (CDN, object storage, etc.). Limited to 2 GB. Returns a job_id immediately. IMPORTANT: tell the user the job_id right away so they can track it. Then poll get_job_status every 5 seconds. Large video files (>100 MB) can take 5–15 minutes — keep polling until status is 'complete' or 'failed', no matter how many polls it takes. Never give up early. Wallet debited on completion. Use options.start_time and options.duration to trim — e.g. start_time='00:01:00', duration=120 for a 2-minute clip.

Inputs: source_url (required), output_format (required), options. Returns: job_id, status, estimated_seconds

transcode_videoA

Offload a video transcode to Botverse — encoding runs server-side so you can continue with other tasks. Returns a job_id immediately. Source must be ≤ 10 minutes and ≤ 5 GB. Poll get_job_status every 5 seconds until 'complete', then get_download_url. Wallet debited on completion.

Inputs: object_key (required), output_format (required), options. Returns: job_id, status, estimated_seconds

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 12 tools

    Disambiguation4/5

    Most tools have distinct purposes, but confusion exists between transcode_video and transcode_from_url. transcode_video does not specify how to provide the source file, while transcode_from_url explicitly handles URLs. Additionally, the distinction between convert_file and transcode_video (both involve upload but different processing) could be clearer.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using snake_case (e.g., cancel_workflow, get_upload_url, transcode_video). Prepositions like 'from_url' are uniformly appended, creating a predictable and readable naming scheme.

    Tool Count5/5

    With 12 tools, the surface is well-scoped for a media processing service covering upload, conversion, transcoding, workflow management, and account queries. Each tool has a clear role, and the number is neither too few nor excessive.

    Completeness4/5

    Core operations (upload, convert, transcode, download, workflow) are covered, but there are minor gaps: no tool to cancel a non-workflow job, and the transcode_video tool lacks documentation linking it to an upload step, potentially causing dead ends. The wallet balance tool is useful for billing awareness.

    Maintenance

    ActivitySlowing
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers