For AI agents (MCP)
klangzeile as tools for Claude, Cursor, VS Code and every other MCP client: same API key, same prices, same free allowance as the REST API.
Endpoint and key
≈ 30 shttps://klangzeile.com/mcp
Remote MCP over Streamable HTTP. Authentication is your API key as
Authorization: Bearer sk_live_… (or X-API-Key: sk_live_…).
No key yet? Create an account and press Create
key in the dashboard — the free allowance needs no payment details.
Connect your client
≈ 1 minClaude Code
claude mcp add --transport http klangzeile https://klangzeile.com/mcp \
--header "Authorization: Bearer $KEY"
Claude Desktop
In claude_desktop_config.json (Settings → Developer → Edit
config), via the mcp-remote bridge (needs Node.js):
{
"mcpServers": {
"klangzeile": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://klangzeile.com/mcp", "--header", "Authorization:${AUTH}"],
"env": { "AUTH": "Bearer sk_live_…" }
}
}
}
Cursor
~/.cursor/mcp.json (all projects) or
.cursor/mcp.json (one project):
{
"mcpServers": {
"klangzeile": {
"url": "https://klangzeile.com/mcp",
"headers": { "Authorization": "Bearer sk_live_…" }
}
}
}
VS Code
.vscode/mcp.json — VS Code asks for the key once
and stores it encrypted:
{
"inputs": [{ "type": "promptString", "id": "klangzeile-key",
"description": "klangzeile API key", "password": true }],
"servers": {
"klangzeile": {
"type": "http",
"url": "https://klangzeile.com/mcp",
"headers": { "Authorization": "Bearer ${input:klangzeile-key}" }
}
}
}
Other clients
Any client that speaks Streamable HTTP and can send a header works. The server is stateless (no session id, JSON responses, no SSE stream) and negotiates protocol versions 2024-11-05 to 2026-07-28. By hand:
curl https://klangzeile.com/mcp \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
Tools
| list_voices | The voices (id, language). Free. |
| synthesize_speech | Text → MP3/WAV/OGG, returned in the response (base64). Per character. |
| create_transcription | Start a job from a public https URL or a base64 file (≤ 10 MB); speakers, summary, subtitles, translation. Per started minute. |
| get_transcription_status | Status and progress; never consumes the result. Free. |
| get_transcription_result | JSON, SRT or VTT - delivered once, then deleted. |
| get_credit | Credit, free allowance left, prices. Free. |
Results come back inside the tool response:
audio as an audio item (base64), subtitles as an embedded text resource,
transcripts as JSON. Nothing is kept for later pickup; a result over ~6 MB is refused
with RESPONSE_TOO_LARGE (not billed, not consumed) — fetch that one with
the REST API. audio_url must be a public https address (port 443); private
and internal addresses are refused (AUDIO_URL_REJECTED), unreachable ones
answer AUDIO_URL_UNREACHABLE. A transcript is kept encrypted until it is
fetched (24 h at most) and delivered once: get_transcription_status
never consumes it, get_transcription_result does. Pass an
idempotency_key to create_transcription: a retry after a
timeout returns the same job.
Costs, limits, errors
Every tool call runs through the same code as the REST API: the monthly
free allowance first, then prepaid credit; when both are used up the tool answers
CREDIT_EXHAUSTED with a top-up link — nothing beyond your credit is ever
billed. Each tool call counts against your key's rate limit like one API request;
listing tools does not. Billable tools accept an optional
idempotency_key: a retry with the same key and input is billed once (run
again, nothing stored but a hash; up to 3 retries within an hour, then
IDEMPOTENCY_KEY_EXHAUSTED). Errors come
back as MCP tool errors with the same error_code as the API
(table in the quickstart). Usage shows up in the dashboard
like any other request.
Machine-readable: OpenAPI · MCP server card · llms.txt · API reference