Connect agents to MultiVoice MCP

Agents do not log in themselves. Configure the MCP URL; a human completes browser OAuth.

Paid actions always require a server-issued quote and confirmation_handle. The agent must show the total to the human before execute_create.

MCP URL

https://db.multivoice.ai/mcp

What you can order via MCP

  • Classic audiobook order_type_id 1 — Professional audiobook with multi-voice AI narration in Russian, German, English, French or Latvian. Results: audio per chapter.
  • Subtitles order_type_id 4 — Automatic subtitles from audio or video. language_from must be one of these ids from get_create_options languages[]: af am ar as az ba be bg bn bo br bs ca cs cy da de el en es et eu fa fi fo fr gl gu ha he hi hr ht hu hy id is it ja jv ka kk km kn ko la lb ln lo lt lv mg mi mk ml mn mr ms mt my nb ne nl nn no oc pa pl ps pt ro ru sa sd si sk sl sn so sq sr su sv sw ta te tg th tk tl tr tt uk ur uz vi yi yo zh. Other ISO codes (sm, zu, …) are rejected as invalid_create_payload. When recognition is ready (status 3/3), download six original-track files via get_artifacts / prepare_download: simple, speaker-labeled and full × SRT and VTT (artifact_type_id 115–120).
  • Transcription order_type_id 5 — Transcription of phone calls, lectures, meetings and webinars. Same language_from catalog as subtitles: af am ar as az ba be bg bn bo br bs ca cs cy da de el en es et eu fa fi fo fr gl gu ha he hi hr ht hu hy id is it ja jv ka kk km kn ko la lb ln lo lt lv mg mi mk ml mn mr ms mt my nb ne nl nn no oc pa pl ps pt ro ru sa sd si sk sl sn so sq sr su sv sw ta te tg th tk tl tr tt uk ur uz vi yi yo zh.
  • Dubbing order_type_id 7 — Dubbed audio or video. language_from (speech in the film) must be one of: af am ar as az ba be bg bn bo br bs ca cs cy da de el en es et eu fa fi fo fr gl gu ha he hi hr ht hu hy id is it ja jv ka kk km kn ko la lb ln lo lt lv mg mi mk ml mn mr ms mt my nb ne nl nn no oc pa pl ps pt ro ru sa sd si sk sl sn so sq sr su sv sw ta te tg th tk tl tr tt uk ur uz vi yi yo zh. languages_to must be de en fr lv ru (German, English, French, Latvian, Russian).

Subtitles and dubbing come in two modes: fully automatic without human review (human_check omitted or "self"; faster and cheaper), or reviewed by a native speaker (human_check = source language, human_translation_check = target languages; costs more and takes longer). The agent must ask the human which mode to use; the quote shows the price.

Download — type 4 subtitles

When speech recognition is ready (status 3, substatus 3), list files with orders.get_artifacts, then mint a short-lived URL with orders.prepare_download (scope artifacts:download). Original track only; empty cues and SyntOriginal rows are skipped. Range requests are not supported.

  • 115 export_srt_simple — simple SRT
  • 116 export_vtt_simple — simple VTT
  • 117 export_srt_speaker — speaker-labeled SRT
  • 118 export_vtt_speaker — speaker-labeled VTT
  • 119 export_srt_full — full SRT (speaker, gender, role)
  • 120 export_vtt_full — full VTT (speaker, gender, role)

Example requests from a human

  • «Make a multi-voice English audiobook from my book and send me the chapters.»
  • «Download simple, speaker and full SRT/VTT for my finished subtitle order.»
  • «Transcribe this webinar recording from Google Drive.»
  • «Transcribe this local MPEG/audio file from my computer. Show the price first.»
  • «Dub this video into German and French with native-speaker review. Show me the price first.»

Canonical facts

Config namemultivoice
MCP URLhttps://db.multivoice.ai/mcp
TransportNo standalone GET stream. MCP requests use POST; responses may be JSON or SSE-framed according to negotiated protocol/client
GET /mcpGET /mcp returns 405 with Allow: POST — expected
Resourcehttps://db.multivoice.ai/mcp
Issuerhttps://db.multivoice.ai
PRMhttps://db.multivoice.ai/.well-known/oauth-protected-resource/mcp
AS metadatahttps://db.multivoice.ai/.well-known/oauth-authorization-server
Authorizehttps://db.multivoice.ai/oauth/authorize
Tokenhttps://db.multivoice.ai/oauth/token
RegisterCIMD primary; DCR fallback at https://db.multivoice.ai/oauth/register
AuthOAuth 2.1 Authorization Code + PKCE S256, public client
MCP revisions2025-11-25 (initialize negotiation), 2026-07-28 (per-request revision, validated). Streamable HTTP, Stateless.
Quote TTL5 minutes; confirmation_handle from prepare_create
Sellable via MCPOrder types 1 (classic audiobook), 4 (subtitles), 5 (transcription), 7 (dubbing). Types 2 and 3 are closed via MCP.

Cursor

  1. Settings → MCP → Add HTTP server.
  2. URL: https://db.multivoice.ai/mcp, name: multivoice.
  3. Or project .cursor/mcp.json:
{
  "mcpServers": {
    "multivoice": {
      "url": "https://db.multivoice.ai/mcp"
    }
  }
}

Connect → browser OAuth (human login). Do not put API keys or JWTs in JSON. First smoke: multivoice.account.get.

Codex

codex mcp add multivoice --url https://db.multivoice.ai/mcp
codex mcp login multivoice

Agent rules

  • Do not use GET on /mcp as transport (405 is normal). Responses to POST may be JSON or SSE-framed.
  • Do not start stdio/npx wrappers. Do not call LLM/synthesis servers instead of MCP.
  • Write only the URL into client config. Never insert tokens, passwords, CLIENT_API_KEY.
  • Stop and ask the human to Connect / codex mcp login.
  • Sell only order types 1, 4, 5 and 7. Types 2 and 3 are closed via MCP.
  • Orders: orders.get_create_options → URL sources: sources.inspect; local files: sources.prepare_upload (basename + size + duration, never a path) → orders.prepare_create → show total to the human → orders.execute_create with quote_id, confirmation_handle and a new operation_id. For local files, after execute upload 10 MiB MD5 chunks to /mcp-uploads (scope uploads:write is granted automatically with orders:create), then poll uploads.get_status. Retry with the same operation_id does not create a second charge.
  • Download type-4 subtitles with orders.get_artifacts then orders.prepare_download. Six original-track files: 115 simple SRT, 116 simple VTT, 117 speaker SRT, 118 speaker VTT, 119 full SRT, 120 full VTT. Ready at recognition status 3/3. Translated tracks are not in this catalog.
  • Do not call prepare_action / execute_action (disabled).
  • Wallet top-up: billing.prepare_topup with topup_amount (EUR). Show the amount to the human; return checkout_url. The human pays in the browser. This is not orders.execute_create and does not spend from the wallet.
  • Language ids lowercase from get_create_options languages[] only. Example: ru, not RU. Codes such as sm are rejected.
  • Tool names, JSON keys and shell commands stay English.

Tools

ToolAccessCreates orderConfirmationScope
account.getreadno—account:read
billing.get_walletreadno—billing:read
billing.prepare_topupwritenoconfirmation_handlebilling:read
services.listreadno—services:read
orders.listreadno—orders:history
orders.getreadno—orders:read
orders.get_statusreadno—orders:read
orders.get_actionsreadno—orders:read
orders.get_create_optionsreadno—orders:create
orders.get_artifactsreadno—orders:read
orders.get_operationreadno—orders:read
uploads.get_statusreadno—uploads:read
sources.inspectreadno—orders:create
sources.prepare_uploadreadno—orders:create
orders.prepare_downloadwriteno—artifacts:download
orders.prepare_createwriteno—orders:prepare
orders.execute_createwriteyesconfirmation_handleorders:execute

Examples

// 1) Smoke
multivoice.account.get

// 2) Audiobook (type 1)
multivoice.orders.get_create_options { "order_type_id": 1 }
multivoice.orders.prepare_create { "order_type_id": 1, "book": { ... } }

// 3) Subtitles (type 4), URL source
multivoice.sources.inspect { "source_type_id": ..., "source_url": "https://www.youtube.com/watch?v=..." }
multivoice.orders.prepare_create {
  "order_type_id": 4,
  "source_handle": "...",
  "language_from": "ru",           // must be from get_create_options languages[]
  "human_check": "self"            // or "<language.id>" for native-speaker review
}

// 4) Transcription (type 5), local file — never send a filesystem path
multivoice.sources.prepare_upload {
  "source_type_id": 12,
  "file_name": "meeting.mpeg",
  "file_size_bytes": 12861888,
  "duration_seconds": 1607.7
}
multivoice.orders.prepare_create { "order_type_id": 5, "source_handle": "...", "language_from": "ru" }

// show total to human, then:
multivoice.orders.execute_create {
  "quote_id": "...",
  "confirmation_handle": "...",
  "operation_id": "<new UUID; reuse on retry>"
}
// local file only: POST /mcp-uploads/init|chunk|complete (10 MiB + MD5), poll uploads.get_status

// 5) Download type-4 subtitles when status is 3/3
multivoice.orders.get_artifacts { "order_code": "SO-…" }
multivoice.orders.prepare_download { "order_code": "SO-…", "artifact_type_id": 115 }
// 115 simple SRT · 116 simple VTT · 117 speaker SRT · 118 speaker VTT · 119 full SRT · 120 full VTT

Also see /llms.txt for crawlers and agents.