MCP Server
Era Voice ships a built-in Model Context Protocol server, so AI agents like Claude can speak with your voices directly. It listens at POST /mcp (streamable HTTP) and authenticates with the same Bearer ev_… API keys as the REST API.
Tools
voice_speak— generate speech from text; the audio is stored and the tool returns an authed download URL.voice_dialogue— generate ordered multi-voice dialogue and return inline audio plus usage metadata. Requires the tts scope and an audio-capable MCP client; no audio is stored for later download.voice_list— list your voices and the preset library.voice_clone— clone from a base64 sample. Disabled by default; the server operator must setMCP_CLONE_ENABLED=true.
Dialogue accepts 1–50 turns and up to 10,000 combined characters, with a 115-second work deadline and at most 15 minutes of audio. Choose WAV or MP3 for broad playback support. Inline audio is base64-encoded, so the response is larger than the audio file; client response limits may be lower than the server limit. Save the returned audio in your client.
Claude Code
claude mcp add --transport http era-voice https://voice.erasmuslabs.ai/mcp \
--header "Authorization: Bearer ev_your_key" claude.ai / Claude Desktop (custom connector)
- Settings → Connectors → Add custom connector
- URL:
https://voice.erasmuslabs.ai/mcp - Advanced → add header
Authorization: Bearer ev_your_key
On the wire
One JSON-RPC 2.0 message per POST, plain JSON responses (no SSE stream). Notifications are acknowledged with 202.
curl -X POST https://voice.erasmuslabs.ai/mcp \
-H "Authorization: Bearer ev_your_key" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2025-06-18", "capabilities": {}, "clientInfo": {"name": "curl", "version": "0"}}}'