FlowSpeech MCP Server
FlowSpeech MCP Server lets MCP clients generate and save FlowSpeech text-to-speech audio, including two-speaker dialogue, and inspect available voices, with README-documented job recovery and quota helpers.
Convert text to speech with a selectable voice and optional output path, saving a local WAV file.
Generate two-speaker dialogue using
Speaker1:andSpeaker2:labels with separate voices.List available voices, including descriptions and gender, with optional
male/female/allfiltering.Per the README, also generate local request IDs, check quota, and look up job status for recovery.
README notes generation in 0.2.1 requires a caller-retained
request_id, though the provided schema does not show it.Supports local output configuration, timeouts, trusted API base URL, result validation, atomic no-overwrite saving, and credential-free audio downloads.
FlowSpeech MCP Server
0.2.1 Security Update
Read-only tools and returned job errors reject the configured API key in diagnostic codes. Returned job errors contain only the validated code, not remote messages or extra fields. Recovery IDs and successful result links remain available.
Use FlowSpeech speech generation from an MCP client. Version 0.2.1 uses the public API v1: create a job, wait for completion, download the WAV, and save it locally.
Related MCP server: TTS-MCP
Requirements
Node.js 20.3 or newer.
A FlowSpeech developer API key from API settings.
Active paid Basic, Pro or Scale API access for generation. Trials do not include API access; generated speech consumes account credits.
Keep keys in your MCP client's local environment or secret manager, not in prompts or public configuration files.
Configuration
Set FLOWSPEECH_API_KEY in the environment used to launch your MCP client. A stdio configuration is:
{
"mcpServers": {
"flowspeech": {
"command": "npx",
"args": ["-y", "mcp-flowspeech-server@0.2.1"]
}
}
}The MCP client must pass the key to its child process. Clients which do not inherit environment variables need a private env entry or their own secret configuration.
Variable | Meaning | Default |
| Required developer key | None |
| Local output directory; |
|
| Total operation deadline, at most 7200000 ms |
|
| Trusted API origin; never use an untrusted key recipient |
|
HTTP is allowed only for loopback test servers. Audio downloads never include the API key. Redirects are rejected, and audio downloads are limited to 100 MiB.
Tools
Tool | Arguments | Result |
| None; no API key needed | Fresh UUID generated locally without network access |
| Required | Local WAV path, job ID, request ID and usage |
| Required labelled | Local WAV path and recovery IDs |
| Optional | Current authenticated voice catalog |
| None | Available, remaining and reserved credits |
| Exactly one UUID: | Current job status and result; never creates work |
Call flowspeech_new_request_id first and retain its request_id before invoking
either generation tool. Never use a fresh UUID merely because a call was interrupted.
All tools reject unknown fields and incorrect argument types at runtime.
Model, source, speed and format options are unsupported. Output paths are validated
and preflighted before paid submission; the final write still uses atomic
no-overwrite protection in case another process creates the file meanwhile.
Two-speaker input uses one label per turn. Continuation lines belong to the preceding speaker:
Speaker1: Welcome.[pause:2s]Let's begin.
Speaker2: Thanks for inviting me.
Speaker1: What should we cover first?Output is 24 kHz, mono, 16-bit PCM WAV. The client validates all result fields
(url, mimeType, sampleRate, channels, bitsPerSample, access),
usage counters, UUID correlation, RIFF length, chunk boundaries and padding,
PCM format, and nonempty sample-aligned data before saving. Existing output files
are never overwritten. Anyone holding a result URL can download it, so keep job
results and recordings private when appropriate.
Recovery and migration
Version 0.1.0 called the retired synchronous endpoint. Upgrade the npm package and
restart your MCP client. All API tools require a developer key, including voice
listing; only flowspeech_new_request_id is entirely local. All five existing
tool names remain available.
Breaking change in 0.2.0: both generation tools now require request_id;
automatic UUID creation inside a blocking generation call has been removed.
The TypeScript client's generate(input, requestId, signal?) likewise requires a
caller-known UUID. UUIDs are normalized to lowercase. The client rejects
responses whose request or job identity does not match the requested operation.
The server submits { "input": ... } with a UUID idempotency key, polls no faster
than five seconds (including status retries), honors a longer Retry-After,
and downloads result.url. A received cooldown still applies if reading the
response body fails. It does not expect an API Base64 response. Transient API
retries preserve the exact request ID and body, with at most five attempts per
API request. Redirects and size-validation failures are not retried.
Recovery workflow:
Call
flowspeech_new_request_idand retain the returned UUID.Pass that UUID as
request_idto generation with the intended text and voices.After a timeout or cancellation, call
flowspeech_get_jobwith{"request_id":"YOUR_RETAINED_UUID"}. If a job ID was already returned,{"job_id":"YOUR_JOB_UUID"}is also supported.While queued, running, merging or settling, wait at least five seconds between status calls. On success, use the existing
result.urlfor a credential-free download. Do not request another recording to retry a download.If lookup returns 404, retry the original generation with the same UUID and unchanged text and voices. To retry local saving through MCP, replay that same request with an unused output path; idempotency prevents new generation.
Caller cancellation is passed to HTTP requests, response reads and polling waits.
It never sends a server-side cancellation request. MCP clients may time out
earlier than FLOWSPEECH_TIMEOUT_MS (the SDK default is 60 seconds); configure
their timeout as appropriate. Cancelled MCP requests may not receive a final
error response, which is why retaining the UUID before submission is required.
A deleted success result has no downloadable audio. A terminal failed/cancelled
job requires a new UUID only when intentionally requesting a new attempt.
Development and tests
npm ci --ignore-scripts
npm test
npm run test:packedTests cover mocked v1 contracts, real WAV fixtures and a loopback HTTP server exercised through the built MCP stdio process. Packed tests rebuild the tarball, inspect its members and credentials patterns, compare packaged bytes with local files, and rerun the client and stdio suites against the extracted package. They never call paid production generation. Node 20 and 22 CI run both suites. See CHANGELOG.md and the public API documentation.
License
MIT
Available Tools
6 toolsflowspeech_get_jobA
Read an existing job by job UUID or caller-known request UUID without creating a recording. Supply exactly one ID.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | ||
| request_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden: it does disclose the read-only nature ('without creating a recording') and the exactly-one-ID constraint, which is useful. But it omits auth requirements, what happens if the ID is unknown, and whether the returned job may still be in progress, which matters for a job-status tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and the key constraint, with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param read tool this is close, but with no annotations, no output schema, and no parameter descriptions, the description should say more about what a job read returns (status fields?) and error behavior for unknown IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains that job_id is the job UUID, request_id is the caller-known request UUID, and that exactly one must be supplied (matching the oneOf). It adds genuine semantics the schema lacks, though it doesn't clarify format or how to obtain each ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('an existing job'), and names both lookup keys. It also implicitly distinguishes itself from the sibling TTS tools by saying 'without creating a recording', though it doesn't name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without creating a recording' implies this is the non-mutating lookup path, which hints at when to use it versus flowspeech_tts. However, there is no explicit when/when-not guidance, no mention of flowspeech_new_request_id as the source of request_id, and no stated alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flowspeech_list_voicesC
Retrieve the current voice catalog from FlowSpeech.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Retrieve' implies a read operation, but there is no mention of permissions, rate limits, whether results are cached, or whether the catalog is paginated — all of which matter for a listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no wasted words and the verb-resource pair front-loaded. It is efficient but borders on under-specified rather than deliberately terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should say what the catalog contains (voice IDs, names, languages, genders) so an agent knows what it can extract. That information is absent, leaving the agent unable to plan the follow-up call to flowspeech_tts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single optional 'gender' parameter (enum male/female/all with default 'all') is never acknowledged in the description. The schema's enum values are self-explanatory, but the description adds nothing about what filtering means or how 'all' behaves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Retrieve) plus specific resource (voice catalog) from a named service. The resource is clearly distinct from sibling tools like flowspeech_tts, flowspeech_quota, and flowspeech_get_job, though the description never explicitly contrasts with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives, nor any note that it is the discovery step for voice IDs consumed by flowspeech_tts / flowspeech_tts_multi. The reader must infer that from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flowspeech_new_request_idA
Generate a fresh request UUID locally, without network access or an API key. Keep it before starting one recording.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description does real work: it discloses that generation is local, requires no network, and needs no API key — covering the auth and side-effect questions an agent would otherwise have to guess at. It stops short of saying whether the UUID is persisted or how it relates to server-side records.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and its constraints. The second sentence is worth including but its phrasing is loose enough to require a re-read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter utility with no output schema, the description covers purpose, execution environment, and timing well enough to call it correctly; the return value (a UUID string) is only implied by the word 'UUID' but is inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies no configuration is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a fresh request UUID') plus the key execution constraint ('locally, without network access or an API key'). No sibling tool (tts, tts_multi, list_voices, quota, get_job) overlaps with this operation, so an agent can identify it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence ('Keep it before starting one recording') implies a call-ordering rule but is awkwardly phrased and never names which sibling operation starts a recording, nor what happens if an ID is reused. Usage is implied rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flowspeech_quotaA
Read available, remaining and reserved API credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. "Read" correctly signals a non-mutating operation, but it says nothing about whether this call itself consumes credits, whether it requires authentication, or whether the numbers are cached/realtime — all relevant for a billing-adjacent endpoint. Adequate for a trivial zero-arg read, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, nine words, front-loaded with the verb and enumerating exactly the three values returned. No filler, no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool this is close to sufficient — the description names the three returned quantities so the agent knows what to expect. Slightly short of 5 because units/format of the returned credits and any auth or rate-limit expectations are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The description correctly implies a global account-scoped read with no filtering knobs, consistent with the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("Read") plus a precise resource ("available, remaining and reserved API credits"), including the three credit buckets returned. Nothing in the sibling list (tts, tts_multi, list_voices, get_job, new_request_id) overlaps with a credit-balance read, so an agent can route here unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the noun "quota" — an agent would call this to check balance before or after synthesis requests — but the description never says when to call it (pre-flight check? error diagnosis? periodic polling?) or that no alternatives exist. No exclusions or triggering conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flowspeech_ttsA
Generate a WAV recording with FlowSpeech. Requires a caller-known request UUID, an API key and paid API access; consumes account credits.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| voice | No | Kore | |
| request_id | Yes | Required caller-known UUID. Get one with flowspeech_new_request_id; reuse only for unchanged text and voices. | |
| output_path | No | Optional output WAV file path. An existing file is not overwritten. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well by disclosing auth needs, paid access, credit consumption, and WAV output. It still omits operational behavior such as whether generation is synchronous or job-based and how failures are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the main action and requirements front-loaded. Every clause earns its place by communicating purpose, prerequisites, or cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, prerequisites, and cost, which is useful. But with no output schema, it does not explain what is returned—file path, job identifier, or otherwise—and the presence of flowspeech_get_job suggests result handling may matter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description mainly restates that a caller-known request UUID is required. It does not add meaning for text, voice, or output_path beyond what the schema already provides, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and output resource: generate a WAV recording with FlowSpeech. It is clear what the tool does, but it does not distinguish this single-recording tool from the sibling flowspeech_tts_multi.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives prerequisites—caller-known request UUID, API key, paid API access, and credit consumption—which helps determine whether the tool is usable. However, it does not say when to choose this over flowspeech_tts_multi or how to obtain the UUID without relying on the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flowspeech_tts_multiA
Generate a two-speaker WAV recording with a caller-known request UUID. Each turn starts with Speaker1: or Speaker2:. Consumes account credits.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| voice_a | No | Charon | |
| voice_b | No | Kore | |
| request_id | Yes | Required caller-known UUID. Get one with flowspeech_new_request_id; reuse only for unchanged text and voices. | |
| output_path | No | Optional output WAV file path. An existing file is not overwritten. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that it consumes account credits and produces a WAV recording, but it does not cover permissions, failure behavior, idempotency, or what the caller receives back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, front-loaded with the core action and output format. Every sentence adds useful information: the output type, the turn-prefix format, and the credit consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no annotations and no output schema, the description is only partially complete. It covers the output artifact and text-turn format, but omits the speaker-to-voice mapping, where the resulting WAV is written, and what the tool returns to the caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 40%, so the description must compensate. It adds critical meaning for the text parameter by explaining that each turn begins with Speaker1: or Speaker2:, but it does not explain how voice_a and voice_b map to those speaker labels, nor does it clarify text formatting beyond the prefix rule.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Generate a two-speaker WAV recording.' The 'two-speaker' qualifier implicitly distinguishes it from the single-speaker sibling flowspeech_tts, though that sibling is not named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'two-speaker' and the need for a caller-known request UUID, which suggests when this tool is appropriate. However, it never explicitly says when to use this instead of flowspeech_tts or what prerequisites are required beyond getting a UUID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.2.1- Added
flowspeech_get_job - Changed
flowspeech_list_voices2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / gender / descriptionRemoved value: -"Filter by gender. Default: \"all\""
- Added
flowspeech_new_request_id - Added
flowspeech_quota - Changed
flowspeech_tts6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / output_path / descriptionPrevious value: -"File path to save audio. Defaults to a timestamped file in ~/.flowspeech-mcp/audio"New value: +"Optional output WAV file path. An existing file is not overwritten." - added
Input schema / properties / request_idAdded value: +{ + "description": "Required caller-known UUID. Get one with flowspeech_new_request_id; reuse only for unchanged text and voices.", + "format": "uuid", + "type": "string" +} - removed
Input schema / properties / text / descriptionRemoved value: -"Text to convert to speech. Supports emotion stage directions inside ***(say <style>: text)***: e.g. \"***(say cheerfully: Hello!)***\"" - removed
Input schema / properties / voice / descriptionRemoved value: -"Voice name to use. Default: \"Kore\". Available: Puck, Fenrir, Zephyr, Autonoe, Laomedeia, Sadachbia, Leda, Aoede, Charon, Rasalgethi, Kore, Orus, Alnilam, Erinome, Iapetus, Schedar, Pulcherrima, Sadaltager, Umbriel, Callirrhoe, Achird, Zubenelgenubi, Algieba, Despina, Enceladus, Algenib, Sulafat, Vindemiatrix, Achernar, Gacrux" - changed
Input schema / requiredPrevious value: -[ - "text" -]New value: +[ + "text", + "request_id" +]
- Changed
flowspeech_tts_multi7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / output_path / descriptionPrevious value: -"File path to save audio. Defaults to a timestamped file in ~/.flowspeech-mcp/audio"New value: +"Optional output WAV file path. An existing file is not overwritten." - added
Input schema / properties / request_idAdded value: +{ + "description": "Required caller-known UUID. Get one with flowspeech_new_request_id; reuse only for unchanged text and voices.", + "format": "uuid", + "type": "string" +} - removed
Input schema / properties / text / descriptionRemoved value: -"Dialogue text with speaker labels. Example:\n\"Speaker1: Good morning!\nSpeaker2: Good morning! How are you?\"" - removed
Input schema / properties / voice_a / descriptionRemoved value: -"Voice for Speaker1. Default: \"Charon\"" - removed
Input schema / properties / voice_b / descriptionRemoved value: -"Voice for Speaker2. Default: \"Kore\"" - changed
Input schema / requiredPrevious value: -[ - "text" -]New value: +[ + "text", + "request_id" +]
3 tool updates
v0.1.0- First observed
flowspeech_list_voices - First observed
flowspeech_tts - First observed
flowspeech_tts_multi
TDQS
Scored across 6 tools
Each tool has a clearly distinct role: single-speaker TTS, two-speaker TTS, voice catalog, quota, job lookup, and local request-ID generation. The main potential overlap between tts and tts_multi is resolved by descriptions specifying single- versus two-speaker output.
All tools share the flowspeech_ prefix and lowercase snake_case, making them predictable. The only minor inconsistency is that some names are verb-led (list_voices, get_job) while others are noun/acronym-led (tts, quota, new_request_id).
Six tools is well-scoped for a focused TTS API surface. Each tool appears to serve a distinct necessary purpose without obvious redundancy.
The surface covers the core workflow: request-ID creation, single- and multi-speaker synthesis, voice discovery, quota checking, and job status lookup. Minor gaps may exist around job listing/cancellation or explicit audio retrieval, but the essential lifecycle is represented.
Maintenance
Related MCP Connectors
MCP server for Text-to-Speech
Hosted text-to-speech MCP server: 66 voices in 9 languages, long-form narration, podcasts.
MCP server exposing the AceDataCloud Fish Audio API (text-to-speech with voice conditioning)
AI voice generation: text-to-speech and voice cloning from any MCP client.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that provides text-to-speech capabilities using the Kokoro TTS model, offering multiple voice options and customizable speech parameters.430 npm1MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that integrates high-quality text-to-speech capabilities with Claude Desktop and other MCP-compatible clients, supporting multiple voice options and audio formats.11 npm1MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI models to generate and play high-quality text-to-speech audio through your device's native audio system using Rime's voice synthesis API.1202 npm27-

ElevenLabs MCP Serverofficial
AlicenseBqualityFmaintenanceAn official Model Context Protocol (MCP) server that enables AI clients to interact with ElevenLabs' Text to Speech and audio processing APIs, allowing for speech generation, voice cloning, audio transcription, and other audio-related tasks.271,544MIT