VoiceLabs MCP server
VoiceLabs exposes a remote MCP (Model Context Protocol) server, so an AI agent can generate speech, transcribe audio, and read your VoiceLabs data on your behalf. The transport is streamable HTTP and the server is stateless. Authorization is OAuth 2.1 — authorization code with PKCE and dynamic client registration — so the agent signs in as you and gets only what you consent to.
One command in Claude Code
claude mcp add --transport http voicelabs https://app.voicelabs.now/api/mcpAny MCP client that supports streamable HTTP plus OAuth discovery works the same way: point it at https://app.voicelabs.now/api/mcp and it discovers the authorization server, registers itself, and walks you through consent in your browser.
Five tools, two scopes
| TOOL | SCOPE | WHAT IT DOES |
|---|---|---|
| speak | voice:generate | Synthesize speech from text in one of your voices. Asynchronous: it returns a generation id, which you poll with get_generation for the audio URL. |
| transcribe | voice:generate | Transcribe an audio clip (up to 10 MiB of base64) with VoiceLabs' Whisper, returning the transcript and the capture it created. |
| get_generation | voice:read | Poll a generation by id for its status — generating, completed, or failed — and, once complete, its audio URL. |
| list_captures | voice:read | List your recent captures (dictations, recordings, uploads) with transcripts. Paginated. |
| list_voice_profiles | voice:read | List your voice profiles — cloned voices and presets — with language, engine, and usage counts. |
Because speak is asynchronous and polling happens through get_generation (a read tool), a client that generates should request both scopes.
What you are consenting to
- voice:read
- Read your voices, profiles, and past generations.
- voice:generate
- Generate speech and transcribe audio on your behalf.
The OIDC scopes (openid, profile, email, offline_access) handle identity and token refresh; they grant no API access of their own.
Consent, and revoke, at any time
Every connection starts with an explicit consent screen in your browser that names the agent and the scopes it asked for. You can disconnect an agent at any time from your connections page. Revocation is immediate: the next request from that agent is rejected even if its access token has not yet expired.
Metadata endpoints
- https://app.voicelabs.now/.well-known/oauth-protected-resource
- RFC 9728 protected-resource metadata — points clients at the authorization server.
- https://app.voicelabs.now/.well-known/oauth-authorization-server
- OAuth 2.1 authorization-server metadata, including the dynamic client registration endpoint.
A request without a valid OAuth access token gets a 401 with a WWW-Authenticate header pointing at that resource metadata.
What does not work yet
- Browser-based (cross-origin) MCP clients are not supported yet. Use a native client such as Claude Code or Claude Desktop.
- Generation requires a signed-in VoiceLabs account with an active free trial or subscription. Generation runs on our GPU servers and is metered server-side against your plan; an agent that runs out gets a structured
QUOTA_EXCEEDEDdenial telling it where to fix that, never a raw upstream error. - Audio URLs returned by
get_generationare short-lived signed links, scoped to that one generation for about 15 minutes. Fetch them promptly; polling again mints a fresh one.
You need an account with an active trial or subscription to generate.