ofaudio-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MUREKA_API_KEY | No | Mureka key — music. Prepaid API credits. | |
| MUREKA_API_KEYS | No | Comma-separated Mureka keys for multi-account pool. Music. Prepaid API credits. | |
| MUREKA_BASE_URL | No | Override API base URL for Mureka. | |
| OFAUDIO_OUT_DIR | No | Where audio files are written. | ./ofaudio-out |
| OFAUDIO_STATE_DIR | No | Job records (JSON) and presets.json. | <OUT_DIR>/.state |
| ELEVENLABS_API_KEY | No | ElevenLabs key — voice + SFX. Works with a subscription tier or pure pay-as-you-go. | |
| ELEVENLABS_API_KEYS | No | Comma-separated ElevenLabs keys for multi-account pool. Voice + SFX. | |
| ELEVENLABS_BASE_URL | No | Override API base URL for ElevenLabs. | |
| OFAUDIO_JOB_TIMEOUT | No | Max seconds to wait for one generation. | 300 |
| OFAUDIO_MUREKA_LANES | No | Concurrent requests per Mureka key (Mureka caps at 1/account). | 1 |
| OFAUDIO_MUREKA_MODEL | No | Pin a Mureka model (e.g. the V9 flagship string) once confirmed on a live key. | auto |
| OFAUDIO_POLL_INTERVAL | No | Seconds between polls for async (Mureka) jobs. | 5 |
| OFAUDIO_ELEVENLABS_LANES | No | Concurrent requests per ElevenLabs key. | 3 |
| OFAUDIO_ELEVENLABS_MODEL | No | TTS model; drop to eleven_multilingual_v2 if v3 isn't on the key's tier. | eleven_v3 |
| OFAUDIO_ELEVENLABS_VOICE | No | Default voice id when a call doesn't specify one. | Rachel |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| generate_musicA | Generate music — a theme, background track, song, or instrumental bed. Returns immediately with a job_id; the audio is produced in the background. Poll it with check_jobs([job_id]) to get the file path when it's ready. Fire several calls to mass-produce variants without waiting. Args:
prompt: What to make, in plain language ("uplifting orchestral intro, soaring strings"
/ "warm lo-fi study loop"). For a sung song, this is the theme/style and Mureka
writes the lyrics; pass Returns: {"job_id": ..., "status": "queued", "engine": ...} or {"error": ...}. When a job finishes, check_jobs also returns song_id if store_for_inpainting was set. |
| generate_lyricsA | Write song lyrics from a theme/description (Mureka) — returns text, not audio. Synchronous: returns immediately with the lyrics so an agent can read/review or edit them before spending song credits, then pass them to generate_music(lyrics=...). Great for getting the words right first, or generating lyrics on their own. Args: prompt: The theme/brief ("a hopeful song about starting over in a new city"). Returns: {"title": ..., "lyrics": ...} or {"error": ...}. |
| generate_sfxA | Generate a sound effect — a one-shot, ambience, or seamless loop. Returns a job_id immediately; poll with check_jobs([job_id]) for the file path. Args: prompt: The sound to make ("heavy wooden door creak", "sci-fi UI blip", "rain on a tin roof, distant thunder"). duration_seconds: Length 0.5–30, or None to let the model choose. loop: True to produce a seamlessly loopable clip (great for ambience/BGM beds). prompt_influence: 0–1 (default ~0.3) — higher sticks closer to the prompt, lower gives the model more creative latitude. model: SFX model id override (default the current text-to-sound model). engine: Provider override. Defaults to ElevenLabs for SFX. format: Output format ("mp3" default, "wav" where supported). Returns: {"job_id": ..., "status": "queued", "engine": ...} or {"error": ...}. |
| generate_speechA | Generate spoken dialogue / character voice acting. Returns a job_id immediately; poll with check_jobs([job_id]) for the file path. Fire several calls to voice a whole scene without waiting. Two ways to shape delivery, and they combine:
Args: text: The line(s) to speak, optionally with inline v3 audio tags. voice: An ElevenLabs voice name (see list_voices) or a voice id. Overrides any voice pinned by the profile. Omit for the default voice. profile: A saved/built-in profile name to preset delivery. model: Model id (default eleven_v3 for expressive character acting). stability: v3 delivery mode — "creative" (most expressive/tag-responsive), "natural" (balanced), or "robust" (locked-in) — or a 0-1 float. style: 0-1, amplifies the speaker's stylistic character (default 0). speed: Playback speed, 1.0 = normal (roughly 0.7-1.2 is usable). similarity_boost: 0-1, adherence to the reference voice (default 0.75). use_speaker_boost: Boost speaker similarity (slightly higher latency). seed: Fix sampling (0-4294967295) for more reproducible takes. Best-effort, NOT bit-exact (especially on v3) — a character's identity comes from its voice and settings, not the seed. previous_text / next_text: Surrounding lines, for prosody continuity in a scene. language_code: ISO 639-1 code to pin the language (not for multilingual_v2). with_timestamps: Also return per-character alignment (word/char timings) as a sidecar JSON next to the audio — for lip-sync, captions, and cut timing. variants: Generate N takes of this line in parallel (2-8) so a human can pick the best — v3 varies run-to-run. Returns {"job_ids": [...]} instead of one job_id. pronunciation: One or more pronunciation-dictionary names (or ids) to apply so lore names/terms are said a fixed way — up to 3. Create one with create_pronunciation_dictionary. engine: Provider override. Defaults to ElevenLabs for speech. format: Output format ("mp3" default, "wav"/PCM where the tier supports it). Returns: {"job_id": ..., "status": "queued", "engine": ...} or {"error": ...}. |
| generate_dialogueA | Generate a multi-speaker dialogue scene in a single call (ElevenLabs Text-to-Dialogue). One request renders all turns with natural back-and-forth timing — better than stitching N separate generate_speech calls. Up to 10 distinct voices, ~2000 characters total. Args: lines: Ordered turns, each {"voice": , "text": }. An optional "speaker" label is allowed for your own clarity. v3 audio tags work in the text (e.g. "[laughs] no way!"). model: Dialogue model id (default eleven_v3). seed: Best-effort determinism for the whole scene. language_code: ISO 639-1 language pin. apply_text_normalization: "auto" | "on" | "off". engine: Provider override (defaults to ElevenLabs). format: Output format ("mp3" default). Returns: {"job_id": ..., "status": "queued", "engine": ...} or {"error": ...}. check_jobs returns the mixed dialogue audio path. |
| save_profileA | Save a reusable speech profile (a persona/mood preset) under A profile bundles delivery settings so generate_speech(profile="") reproduces it.
Pin Args: name: Handle to save under (e.g. "kael", "villain-calm"). voice: ElevenLabs voice name or id to pin (optional). model: Model id to pin (optional). stability: "creative"/"natural"/"robust" or a 0-1 float. style: 0-1. speed: Playback speed (1.0 = normal). similarity_boost: 0-1. use_speaker_boost: Boost speaker similarity. tag: An audio tag prepended to every line, e.g. "angry" → "[angry] ...". seed: Fix sampling for consistency (0-4294967295). description: Human note shown in list_profiles. |
| list_profilesA | List speech profiles — built-in delivery presets plus any saved via save_profile. Each entry shows its name, whether it's built-in, and the delivery settings it presets. Use a name as generate_speech(profile=""). |
| save_speakerA | Save a reusable SPEAKER — a pinned voice + its base delivery — under a workspace. A speaker is the identity ("narrator"); a profile is a mood ("angry"). Speak one with
speak(speaker, text, mood?) and the mood layers on top. Group speakers by
Args: name: Speaker handle (e.g. "narrator"). voice: The voice to pin — an ElevenLabs voice name/id, or a saved voice/clone name. workspace: Workspace namespace (default "default"). model / stability / style / speed / similarity_boost / use_speaker_boost / seed: The speaker's BASE delivery (all optional; each overridable per line). pronunciation: A pronunciation-dictionary name/id (or list) to apply automatically whenever this speaker talks — so it always says lore names the same way. description: Human note. |
| speakA | Speak a line as a saved SPEAKER, optionally in a MOOD. Resolves the speaker (voice + base delivery), layers a mood Args: speaker: A saved speaker name (see list_speakers). text: The line (v3 audio tags work). mood: Optional profile name (built-in like "angry"/"whisper", or a saved one) to layer over the speaker's base delivery for this one line. workspace: Which workspace's speaker (default "default"). stability / style / speed / seed: Per-line overrides (win over speaker + mood). with_timestamps: Also emit an alignment sidecar (lip-sync/captions). variants: Generate N takes (2-8) to preview and pick the best. engine / format: as generate_speech. |
| list_speakersA | List saved speakers (voice + base delivery), optionally within one workspace. |
| list_workspacesA | List workspace namespaces that currently hold speakers. |
| preview_voicesA | Preview voices for a role — search the Voice Library and return top candidates, each with a ready-made preview_url to listen to. No generation, no voice slots consumed. Pick one, then add_speaker_from_library(name, public_owner_id, voice_id) to add + save it as a speaker. (Library voices sound better than designed ones — search here first.) Args: query: Short role term ("narrator", "villain", "host") — one or two words. gender / age / accent / use_case: Optional label filters. n: How many candidates to return (default 5). |
| add_speaker_from_libraryA | Add a Voice Library voice to the account AND save it as a speaker, in one step. Combines add_library_voice + save_speaker. Consumes a voice slot. After this, speak('', text, workspace=...) uses it. Args:
name: Speaker/voice handle to save under.
public_owner_id, voice_id: From a |
| search_voice_libraryA | Search ElevenLabs' shared Voice Library — thousands of ready-made voices. This is how you pick a voice instead of dialing one out of parameters: search for "warm narrator", "raspy villain", "friendly host", filter by age/gender/accent, then add the one you like with add_library_voice(...) and use it by name in generate_speech. Keep Args: query: Short free-text term ("narrator", "host", "villain"). One or two words. gender / age / accent: Label filters (e.g. age="old", gender="male"). use_case: e.g. "characters_animation", "narrative_story", "video_games". category: "professional", "famous", or "high_quality". descriptives: Extra descriptive terms (e.g. ["raspy", "gruff"]). page_size: Max results (1-100, default 20). Returns: {"voices": [{public_owner_id, voice_id, name, description, gender, age, accent, preview_url, ...}], "count": N}. Pass public_owner_id + voice_id to add_library_voice. |
| add_library_voiceA | Add a shared Voice Library voice to the account and save it under Take public_owner_id + voice_id from search_voice_library. After this, generate_speech(voice="") uses that character. NOTE: consumes one custom-voice slot on the ElevenLabs account (tiers cap how many you can hold). Returns: {"voice_id": , "name": ...} or {"error": ...}. |
| design_voiceA | Design a brand-new custom voice from a text description (ElevenLabs Voice Design). Describe the character ("elderly gruff grandfather, warm but gravelly, slight wheeze") and get back a few preview clips saved to the output dir. Audition them, then keep one with save_voice(name, generated_voice_id) — or pass save_as to auto-keep the first. Args: description: The voice to synthesize, in plain language. save_as: If set, immediately save the first preview as a permanent voice under this name (consumes one custom-voice slot). text: Optional preview line (100-1000 chars); omit to auto-generate suitable text. model: Voice-design model ("eleven_multilingual_ttv_v2" default, or "eleven_ttv_v3"). guidance_scale: 0-100ish; higher sticks closer to the prompt (default ~5). loudness: -1 (quiet) to 1 (loud), default 0.5. seed: Fix generation for reproducible previews. Returns: {"previews": [{generated_voice_id, path, duration}], "preview_text": ..., optionally "saved": {name, voice_id}} or {"error": ...}. |
| save_voiceA | Save a designed voice preview (from design_voice) as a permanent, reusable voice. Consumes one custom-voice slot on the account. After this, generate_speech(voice="") uses it. Args: name: Handle to save under. generated_voice_id: The preview id from design_voice. description: Optional description stored on the voice. |
| delete_voiceA | Delete a custom voice from the ElevenLabs account, freeing a voice slot. DESTRUCTIVE and irreversible — you must pass confirm=True. Resolves a name to its id first and refuses if the name is ambiguous (pass the exact voice_id then). Premade voices can't be deleted. Also removes local nickname aliases and warns if a saved profile still pins the voice. Args: voice: The voice name or id to delete. confirm: Must be True to actually delete. |
| clone_voiceA | Clone a voice from audio sample(s) — ElevenLabs Instant Voice Cloning. A human provides the audio FILES on the machine ofaudio runs on; pass their paths.
~1-2 minutes of clean, single-speaker audio clones best. The result is saved under
IMPORTANT: only clone a voice you have the rights/consent to use. Args: name: Handle to save the cloned voice under. audio_paths: Path(s) to audio files (mp3/wav/…) readable on this machine. description: Optional description stored on the voice. remove_background_noise: Run ElevenLabs' denoiser on the samples first. |
| list_voicesA | List the ElevenLabs voices available on the account, plus saved speech profiles. Returns {"account": [ {voice_id, name, category, labels, description}, ... ],
"profiles": [ ... ]}. Use a voice |
| account_statusA | Credits + quotas for ALL configured providers in one call — check before fan-out. Returns a section per available provider (only those with a configured key):
Use it to avoid mid-batch failures (out of credits / voice slots) and to pick a supported
audio |
| list_modelsA | List ElevenLabs models available on the account, with capability flags. Each: {model_id, name, can_do_tts, can_do_voice_conversion, max_characters, languages}.
Use to pick or confirm a model id before pinning it via |
| transcribeA | Transcribe speech to text (ElevenLabs Scribe) — for podcasts, meetings, captions, dubbing prep. Args: audio: A local audio/video file path, OR a URL (hosted file, YouTube, TikTok). language: ISO code (639-1 or -3) to force; omit to auto-detect. diarize: True to label speakers (who said what). captions: "srt" or "vtt" to also write a subtitle file (from word timings) and return its path. Returns: {"text", "language_code", "words": , "captions_path"?} or {"error"}. |
| forced_alignmentA | Align a KNOWN script to existing audio → exact per-word timings (ElevenLabs). Use when you already have the exact transcript (a recorded VO + its script) and want
precise timings for captions/lip-sync/cut timing. (Unlike Args: audio: Local audio file path. text: The exact transcript/script spoken in the audio. captions: "srt" or "vtt" to also write a subtitle file from the aligned words. Returns: {"words": , "characters": , "loss", "captions_path"?} or {"error"}. |
| isolate_audioA | Remove background noise / isolate the voice from an audio file (ElevenLabs). For cleaning up field recordings, podcast takes, or noisy clips before further use. Args: audio: Local path to the audio file to clean. Returns: {"path": } or {"error"}. |
| convert_voiceA | Re-voice a recorded performance onto another voice (ElevenLabs speech-to-speech). Keeps the delivery/timing of the input recording but swaps the voice — for dubbing, ADR, or turning your own take into a character's voice. Args: audio: Local path to the source audio (the performance to convert). voice: Target voice — a saved name or an ElevenLabs voice id. remove_background_noise: Clean the input before converting. format: Output format ("mp3"/"wav"; wav auto-downgrades to mp3 on sub-Pro tiers). seed: Optional determinism hint. Returns: {"path": } or {"error"}. |
| create_pronunciation_dictionaryA | Create a pronunciation dictionary so specific words/names are ALWAYS said a fixed way. Great for a game/story cast: lock how lore names, places, and invented terms are
pronounced, then apply it to any speech so every character says them consistently. Save
it once (by Args: name: A name to save this dictionary under (reuse it later by name). rules: The easy form is a {word: say-it-like-this} map, e.g. {"Kaelthas": "kal-thass", "Y'ffre": "iffray"} (alias rules). For precise IPA control, pass a list of ElevenLabs rule objects ({"type":"phoneme","string_to_replace":"...","phoneme":"...","alphabet":"ipa"}). description: Optional note. Returns: {"name", "id", "version_id", "rules": } or {"error"}. |
| add_pronunciation_rulesB | Add rules to an existing pronunciation dictionary (by saved name or id). Args: dictionary: A saved dictionary name (or an ElevenLabs dictionary id). rules: {word: say_as} map or a list of EL rule objects (see create_pronunciation_dictionary). Returns: {"id", "version_id", "added": } or {"error"}. |
| get_voiceA | Details for one voice (by name or id): category, labels, description, preview_url. |
| list_pronunciation_dictionariesA | List saved pronunciation dictionaries (name → id/version). Apply one via
generate_speech/speak |
| list_presetsA | List everything saved in the presets registry: speaker voices and music identities. |
| check_jobsA | Batch-poll jobs by id. This is the companion to fan-out generation. Returns one status record per id: {job_id, kind, status, provider, and — when done — path, duration, format, seed}. status is one of queued/running/succeeded/failed; failed records include an "error". Unknown ids come back with status "unknown". |
| list_jobsA | List recent jobs (newest first), optionally filtered by status. Args: status: Filter to one of queued/running/succeeded/failed, or omit for all. limit: Max records to return (default 50). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DuragonYama/ofaudio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server