WellSaid Claude Connector
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WellSaid Claude Connectorlist WellSaid voices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WellSaid Claude Connector
Generate lifelike WellSaid Labs voiceover from text — right inside Claude.
This is a Model Context Protocol server that wraps the WellSaid Labs text-to-speech API and exposes it as Claude tools. Ask Claude to "list WellSaid voices" or "voice this script with Wade C., a little slower and deeper," and it renders audio (plus captions if you want them).
Runs as a local stdio connector (Claude Desktop custom connectors + Claude Code) or as a remote Streamable-HTTP connector. No build step — plain Node ESM.
What Claude can do with it
Tool | What it does |
| List voice avatars and their |
| Summarize the distinct styles/accents/genders/languages to narrow a search. |
| Convert text → audio with a chosen voice. Supports model ( |
| Render speech plus word timing and SRT/VTT captions — the API's zip is extracted to individual files. |
| Start an async TTS job (good for long or batched scripts). |
| Check a clip's status and download it when ready. |
| List recent clips on the account. |
| Stitch multiple clips into one file with custom pauses. |
| Get pronunciation respellings for a tricky name/term. |
| Advanced escape hatch — call any WellSaid endpoint directly. |
Generated files are written to your output folder (default ./output, or set WELLSAID_OUTPUT_DIR).
Prosody & pronunciation (AI Director)
WellSaid's expressive controls run on the caruso model via AI Director tags embedded in the text. wellsaid_generate_speech exposes them two ways:
Whole-line convenience: pass
pitch,tempo, and/orloudness— the connector wraps your text in the right tags and automatically selects thecarusomodel. Approximate ranges: pitch[-45, 100], tempo[0.7, 2.3], loudness[-15, 9].Fine control: embed tags directly in
text, e.g.The <emphasis>best</emphasis> value is <respell value="PEET-suh">pizza</respell>.Usewellsaid_get_respelling_suggestionsto find respelling values.
Output format can be mp3 (default), wav, or s16le, with an optional sample_rate.
Related MCP server: MCP FishAudio Server
Prerequisites
Node.js ≥ 18.17 (uses the built-in
fetch). Developed on Node 24..envauto-loads via a built-in on Node ≥ 20.12, with a manual fallback on older versions.A WellSaid API key — create one at wellsaidlabs.com (Studio → API) or the Developer Portal. Sent as the
X-Api-Keyheader. Default keys are rate-limited to ~3 requests/second and 1,000 characters per synchronous request.
Install & verify
cd wellsaid-connector
npm install
cp .env.example .env # then paste your key into WELLSAID_API_KEY
npm run doctor # checks config + connectivity to /tts/avatarsnpm run doctor prints your config and, if the key works, the number of available voices.
Add it to Claude
Claude Code
claude mcp add wellsaid --env WELLSAID_API_KEY=YOUR_KEY -- node /absolute/path/to/wellsaid-connector/src/index.jsThen in a session: "List my WellSaid voices" → "Generate speech for '…' with speaker_id 3, a little deeper."
Claude Desktop (config file)
Settings → Developer → Edit Config, and merge the mcpServers block from
claude_desktop_config.example.json. Replace the API key, the
args path, and the output dir with your own install location. Fully quit and reopen Claude Desktop;
the tools then appear under the 🔌 connector menu.
Claude Desktop (one-click extension)
The repo ships a manifest.json so it can be packaged as a Desktop Extension
(.mcpb) that prompts for the API key in the UI — no JSON editing:
npx @anthropic-ai/mcpb pack . # produces wellsaid.mcpbDrag wellsaid.mcpb into Claude Desktop → Settings → Extensions, and paste your key when prompted.
The extension defaults the output folder to your Downloads folder (see the config note below).
Remote / hosted connector — public, OAuth (src/remote.js)
This is the path to a public connector anyone can add by URL. src/remote.js is an OAuth 2.1–protected
MCP server (Dynamic Client Registration + PKCE) that shows a consent page where each user pastes their
own WellSaid key; that key is bound to their token and used only for their requests.
npm run start:remote # OAuth MCP server on http://localhost:8788/mcpDeploy it to a public HTTPS URL, then in Claude → Settings → Connectors → Add custom connector →
paste https://your-url/mcp. Full instructions (Docker / Render / Fly / tunnel) are in
DEPLOY.md. This hosted server is also the prerequisite for a
Connectors Directory submission — see
PRIVACY.md for the required privacy policy template.
There's also an authless local HTTP mode for quick testing (
npm run start:http, port 8787) — stateless, no auth, 4 MB body cap. Usestart:remote(OAuth) for anything shared.
Configuration
All configuration is via environment variables (or .env):
Variable | Required | Default | Purpose |
| ✅ | — | Your WellSaid key ( |
|
| Override the API base URL. | |
|
| Where audio/caption files are saved (see note). | |
|
|
| |
|
| Port for HTTP transport. |
Output-dir note: the code default is the connector's
./outputfolder, used whenWELLSAID_OUTPUT_DIRis unset (Claude Code /.envinstalls). The one-click Desktop Extension (.mcpb) and the example Claude Desktop config instead default to your~/Downloadsfolder, because a packaged extension has no writable./output. Any tool call can override withoutput_dir.
Development
npm test # unit + in-process + stdio + http suites
node test/unit.test.js # client helpers, safe file writing, zip reader
node test/inmemory.test.js # tool behavior against a mocked API (real body-building)
node test/stdio.smoke.js # spawns the real process, exercises the MCP handshake
node test/http.smoke.js # Streamable-HTTP transport
npm run inspect # opens the MCP Inspector against the serverNotes on API coverage
wellsaid_list_voices(GET /v1/tts/avatars) andwellsaid_generate_speech(POST /v1/tts/stream) are built against WellSaid's documented request/response shapes, including the integerspeaker_id,model,audio_configs, andlibrary_idsfields and inline AI Director tags.wellsaid_generate_speech_with_timingposts to/v1/tts/word-timingand unpacks the returned zip.wellsaid_combine_clipsusesclip_ids+pause_durationsper the combine endpoint.If WellSaid changes a field,
wellsaid_requestlets Claude call any endpoint directly while this connector is updated.
Security
Your API key stays in your local environment / MCP client config; it is only sent to
api.wellsaidlabs.com(or yourWELLSAID_API_BASE) asX-Api-Key, and is never logged or written to disk.Output filenames are reduced to a bare basename, so a tool call can never write outside your configured output folder.
License
MIT
Available Tools
10 toolswellsaid_combine_clipsCombine clips into one fileA
Merge multiple existing clips into a single audio file with optional pauses. Provide clip ids in order. pause_durations is a single number applied between all clips, or an array of length (clip_ids.length - 1) for per-gap control.
| Name | Required | Description | Default |
|---|---|---|---|
| clip_ids | Yes | Clip ids to combine, in order. | |
| filename | No | ||
| output_dir | No | ||
| pause_durations | No | Seconds of pause between clips: one number, or an array of size clip_ids.length - 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds useful detail about pause behavior but does not disclose whether existing clips are altered, whether output files are overwritten, or other side effects. No contradiction with annotations, but the openWorldHint is not clarified.
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 two sentences, front-loaded, and every clause is informative. It avoids fluff and directly gives operational instructions for ordering and pause durations.
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 core usage and the tricky pause_durations parameter, but it omits information about filename/output_dir semantics and does not describe the output format. For a tool with 4 parameters and no output schema, this is a moderate gap.
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 description explains clip_ids ordering and pause_durations format in detail, supplementing the schema descriptions. However, filename and output_dir are not described in the schema nor in the description, leaving two of four parameters semantically under-specified.
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 ('Merge') and resource ('existing clips') and clearly states the outcome ('single audio file'). This distinguishes it from sibling tools like list_clips or generate_speech, which do not combine existing clips.
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 description gives clear context: combine existing clips in order, with optional pauses. It does not explicitly name alternatives or state when not to use it, but the phrase 'existing clips' implicitly separates it from generation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_create_clip_asyncCreate a TTS clip asynchronouslyA
Start an asynchronous TTS render and return the clip id/status. Use for long or batched jobs, then poll with wellsaid_get_clip. Returns the raw job record from the API.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to speak. | |
| model | No | ||
| speaker_id | Yes | Voice speaker_id. | |
| library_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true) already set the safety profile. The description adds valuable context by stating the return value is a raw job record and that the render is asynchronous, which goes beyond the annotations without contradicting them.
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 sentences with all content earning its place. The action, usage context, polling step, and return type are efficiently packed. No verbosity or repetition.
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 job-starting tool with no output schema, the description explains the async behavior, return status, and next-step polling. It lacks parameter details and potential side effects, but given the annotations and schema, it is reasonably complete. Could be improved by mentioning model/library_ids options.
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 only 50% (text and speaker_id have descriptions; model and library_ids do not). The description does not mention any parameters or compensate for the undocumented ones, leaving library_ids completely unexplained. This is a clear 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 clearly states the tool starts an asynchronous TTS render and returns the clip id/status. It is distinct from synchronous generation, though it does not explicitly contrast with wellsaid_generate_speech. The verb 'start' and 'asynchronous' make the purpose specific.
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 description says to use it for long or batched jobs and instructs polling with wellsaid_get_clip. This provides clear context and an alternative, though it does not explicitly say when not to use it (e.g., for short jobs), so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_generate_speechGenerate speechA
Convert text to speech with a WellSaid voice and save it to disk. Synchronous. Text is limited to 1000 characters (any AI Director markup counts). Optional prosody (pitch/tempo/loudness) wraps the text in AI Director tags and uses the 'caruso' model — when you pass these, the text is treated as literal (special characters escaped), so don't also hand-author inline tags in the same call. For hand-authored inline tags (e.g. ), leave pitch/tempo/loudness unset. Get a speaker_id from wellsaid_list_voices first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to speak. May contain inline AI Director tags (caruso model). | |
| model | No | Model to use (default legacy; caruso enables AI Director). | |
| pitch | No | AI Director pitch, roughly [-45, 100]. Forces the caruso model. | |
| tempo | No | AI Director tempo, roughly [0.7, 2.3]. Forces the caruso model. | |
| format | No | Output format (default mp3). | |
| filename | No | Output filename (extension added if missing). Defaults to a slug of the text. | |
| loudness | No | AI Director loudness, roughly [-15, 9]. Forces the caruso model. | |
| output_dir | No | Directory to write into. Defaults to WELLSAID_OUTPUT_DIR or ./output. | |
| speaker_id | Yes | Voice speaker_id from wellsaid_list_voices. | |
| embed_audio | No | Also return the audio inline (base64). Off by default. | |
| library_ids | No | Replacement-library ids to apply. | |
| sample_rate | No | Sample rate in Hz (e.g. 24000, 44100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate read/write and open-world hints. The description adds significant behavioral context: the 1000-character limit (including markup), that prosody parameters wrap text in AI Director tags and force the caruso model, that text becomes literal (escaped) when prosody is used, and that inline tags should not be mixed with prosody. This goes far beyond what annotations provide.
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 concise and front-loaded: the first sentence states the core purpose, the word 'Synchronous' is a compact critical qualifier, and the remaining sentences cover the essential caveats (length limit, prosody behavior, inline tag handling) without redundant filler. Every sentence contributes distinct information.
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 12 parameters, no output schema, and no explicit return type, the description covers the essential operational context: synchronization, disk output, character limit, and the prosody/tag interaction. It does not describe the response payload, but it does mention optional inline base64 audio (embed_audio) and the file-saving behavior, which partially compensates for the missing output schema.
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?
While the schema covers 100% of parameters with descriptions, the tool description adds crucial meaning: that pitch/tempo/loudness force the caruso model and cause the text to be treated as literal (escaping special characters), and that inline tags require leaving those parameters unset. This clarifies interactions not fully captured in the 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?
The description opens with a specific verb+resource: 'Convert text to speech with a WellSaid voice and save it to disk.' It also explicitly states 'Synchronous,' which distinguishes it from the async sibling wellsaid_create_clip_async, and its focus on direct speech generation differentiates it from wellsaid_generate_speech_with_timing.
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 description provides clear usage context: it is synchronous, requires obtaining a speaker_id from wellsaid_list_voices first, and explains when to avoid passing prosody parameters (if hand-authoring inline tags). It does not explicitly name alternative tools but gives strong contextual guidance and exclusions for the main usage pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_generate_speech_with_timingGenerate speech with word timing / captionsA
Render text to speech and also get word-level timing and caption files. The API returns a zip (audio + JSON timing + SRT + VTT); this tool extracts and saves each file. Supports the same voice/model/prosody options as wellsaid_generate_speech.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to speak (may contain inline AI Director tags). | |
| model | No | ||
| pitch | No | ||
| tempo | No | ||
| format | No | Audio format inside the zip (default mp3). | |
| filename | No | Base filename (no extension) for the extracted files. | |
| loudness | No | ||
| output_dir | No | Directory to write files into. | |
| speaker_id | Yes | Voice speaker_id from wellsaid_list_voices. | |
| library_ids | No | ||
| sample_rate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the API returns a zip containing audio, JSON timing, SRT, and VTT, and that the tool extracts and saves each file. This goes beyond the annotations (readOnlyHint=false, destructiveHint=false) by specifying the actual write behavior and output artifacts, providing useful context.
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 sentences, front-loaded with the primary purpose. Each sentence adds value: purpose, extraction behavior, and compatibility note. There is no fluff or repetition of schema fields.
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 behavior and artifact types but lacks information about return values (since there is no output schema) and relies on the sibling for parameter details. It does not mention what happens after saving (e.g., returns file paths or nothing), leaving a gap for a complex 11-parameter tool.
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 low (45%), so the description must compensate for undocumented parameters. However, it only references 'the same voice/model/prosody options as wellsaid_generate_speech' without explaining any specific parameters or their semantics. It does not add meaning beyond the schema for most of the 11 parameters.
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 clearly states the tool renders text to speech and additionally provides word-level timing and caption files. It distinguishes itself from the sibling wellsaid_generate_speech by explicitly mentioning the timing/caption extraction and referencing the sibling for option compatibility.
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 description implies this tool is the right choice when timing/captions are needed by saying 'and also get word-level timing and caption files.' It also references the sibling 'wellsaid_generate_speech' for option compatibility, but does not explicitly state when not to use it or contrast alternatives beyond that sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_get_clipGet a TTS clipARead-only
Fetch the status/metadata of a clip by id. If download is true and the clip is ready, save its audio to disk (when the API returns a URL or audio payload).
| Name | Required | Description | Default |
|---|---|---|---|
| clip_id | Yes | The clip id from wellsaid_create_clip_async. | |
| download | No | If ready, download the audio to disk. | |
| filename | No | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds conditional disk-writing behavior, which is a local side effect not covered by annotations. It discloses when download happens and the dependency on API response shape ('when the API returns a URL or audio payload'), providing valuable context beyond annotations.
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 sentences, front-loaded with the primary action. No redundant phrases or filler; every word earns its place.
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 core fetch and conditional download behavior, but lacks guidance on return value/status, error handling, or the role of filename/output_dir. Without an output schema, the agent is left guessing the response format and how to use the optional parameters.
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 descriptions cover clip_id and download, but filename and output_dir have no descriptions. The description does not explain these parameters or their defaults; it only mentions 'save its audio to disk' without specifying the filename/output_dir semantics. This leaves 50% of parameters under-specified.
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 'Fetch the status/metadata of a clip by id' – a specific verb and resource with clear scope. The conditional download behavior is also described. This clearly distinguishes from sibling 'wellsaid_list_clips', which lists clips, and 'wellsaid_create_clip_async', which creates 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?
Implies usage from 'by id' and references 'wellsaid_create_clip_async' in the schema, indicating it's for a single clip from creation. However, it does not explicitly contrast with alternatives like 'wellsaid_list_clips' or state when download should or should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_get_respelling_suggestionsGet pronunciation respelling suggestionsARead-only
Get WellSaid respelling suggestions for a word. Use the returned value in an inline AI Director tag, e.g. pizza, to control pronunciation.
| Name | Required | Description | Default |
|---|---|---|---|
| word | Yes | The word or term to look up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds valuable behavioral context by explaining that the output is intended for a specific tag format, which is beyond what annotations provide. It does not contradict annotations.
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 sentences, no filler. The first sentence states the action and target, the second explains how to use the result. Information is front-loaded and every sentence earns its place.
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 one-parameter lookup tool with no output schema, the description covers purpose and usage sufficiently. It could elaborate on the exact return format (e.g., whether it returns a single string or a list), but the included example makes the expected output clear enough for an agent to invoke it correctly.
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 100% because the single 'word' parameter has a description ('The word or term to look up.'). The tool description adds no further parameter semantics beyond restating that it's for a word, so it meets the baseline for high schema coverage.
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 action ('Get WellSaid respelling suggestions') and identifies the resource (a word), which clearly distinguishes it from sibling tools focused on voices, clips, and speech generation. It is not a tautology and provides concrete use context.
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 description gives a clear usage context: use the returned value in an inline AI Director tag to control pronunciation. It does not explicitly name alternatives or exclusion criteria, but the guidance is sufficient for a unique lookup tool with no overlapping siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_list_clipsList recent TTS clipsARead-only
List recent clips created on the account (id, status, metadata).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max clips to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to cover safety. It adds the account scope and returned fields, and the 'recent' scoping implies time-based ordering. However, it does not mention any additional behavior, such as whether results are limited by default or if there is pagination, beyond what the schema's limit parameter already states.
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 a single, front-loaded sentence that includes the action, the resource, and a parenthetical list of returned fields. There is no redundancy or unnecessary detail, making it highly efficient.
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 list tool with one optional parameter and read-only annotations, the description is complete enough. It names the resource, scope, and returned fields, and the absence of an output schema means the description does not need to detail return formats. A minor gap is the lack of clarification on the default limit or ordering, but this is acceptable given the simplicity.
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 input schema has 100% coverage for the single parameter 'limit', which is well-described. The tool description does not add any additional meaning to parameters beyond what the schema already provides, so the baseline score of 3 applies.
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 clearly states the verb 'List', the resource 'recent clips', and the scope 'on the account', along with the specific fields returned (id, status, metadata). This distinguishes it from sibling list tools like wellsaid_list_voices, which focus on different resources.
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 description makes the tool's purpose unambiguous: it is for listing clips, not for other actions like generation or combining. However, it does not explicitly name alternatives or provide when-not-to-use guidance, so it falls short of a 5 but is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_list_voice_criteriaList voice filter criteriaARead-only
Summarize the distinct styles, accents, genders, languages, and characteristics across all voices — useful for narrowing a wellsaid_list_voices search.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint: true and openWorldHint: true, so the tool is known to be read-only and open-world. The description adds behavioral scope by stating it summarizes distinct attributes 'across all voices', which clarifies the aggregation behavior. It does not describe return format, but with zero parameters and a simple summarization role, this is acceptable.
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 a single sentence that leads with the action ('Summarize'), lists the specific criteria, and closes with a practical use case. Every phrase contributes meaning with no wasted words.
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?
Given the tool's simplicity (no parameters, no output schema, read-only aggregation), the description fully covers what the tool does and why it is useful. It is complete and self-contained.
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?
There are zero parameters, and the schema coverage is 100% as it is empty. The description does not need to add parameter details, and according to the rubric, a zero-parameter tool gets a baseline of 4.
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 the specific verb 'summarize' and identifies the resource (styles, accents, genders, languages, characteristics across all voices), clearly distinguishing it from the sibling tool wellsaid_list_voices which lists voices themselves.
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?
Explicitly states it is 'useful for narrowing a wellsaid_list_voices search', giving a clear context for when to use this tool. It does not mention exclusions or alternative tools, but the pointer to wellsaid_list_voices is sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_list_voicesList WellSaid voicesARead-only
List the available WellSaid voice avatars. Returns each voice's speaker_id (the value you pass to wellsaid_generate_speech) plus name, style, accent, gender, and language when the API provides them. Optionally filter with a case-insensitive substring search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max voices to return. | |
| search | No | Case-insensitive substring matched against any voice field. | |
| refresh | No | Bypass the in-memory cache and re-fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, so the bar is lower. The description adds value by disclosing that fields like name, style, accent, gender, and language are returned 'when the API provides them,' acknowledging potential data variability. It also implies a caching mechanism via the refresh parameter (though not in the description itself), but does not mention rate limits or other behaviors.
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 two sentences, front-loaded with the primary action, followed by essential output details and filter capability. Every sentence earns its place with no redundancy or fluff.
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 list tool with readOnlyHint and full schema coverage, the description is sufficiently complete: it states what is returned, the optional filter, and the connection to speech generation. It lacks only explicit mention of pagination/limit behavior, but the schema covers that. Given the tool's simplicity and available annotations, this is adequate.
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 100%, so baseline is 3. The description repeats the search filter concept but adds no new semantics beyond the schema. It does not explain limit or refresh beyond what the schema already does, so no additional value is provided.
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 opens with 'List the available WellSaid voice avatars' — a specific verb and resource. It further clarifies the tool's role by stating it returns speaker_id (the value passed to wellsaid_generate_speech), which distinguishes it from sibling tools like wellsaid_list_voice_criteria.
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 description gives clear context by linking the output to wellsaid_generate_speech, implying this tool is for selecting voices for speech generation. It does not explicitly state when not to use it or list alternatives (e.g., wellsaid_list_voice_criteria), but the context is sufficient for most use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellsaid_requestCall any WellSaid endpoint (advanced)A
Escape hatch for endpoints without a dedicated tool (e.g. replacement libraries). Makes an authenticated request to any path under the API base. JSON responses return as text; binary responses are saved to disk when save_as is provided.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body. | |
| path | Yes | Path relative to the API base, e.g. "/tts/avatars". | |
| query | No | Query parameters. | |
| accept | No | Accept header, e.g. "audio/mpeg" for binary. | |
| method | No | HTTP method (default GET). | |
| save_as | No | If the response is binary, save it to this filename (basename only). | |
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds useful behavior beyond annotations: authenticated requests, JSON responses as text, binary responses saved to disk with save_as. This complements the openWorldHint annotation by describing concrete response handling, though it doesn't cover all edge cases.
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 sentences, front-loaded with purpose, then response handling. Every word earns its place; no fluff.
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 behavior and response handling, but with 7 parameters and no output schema, it lacks details on error handling, authentication specifics, and the role of output_dir. It's adequate for an advanced escape hatch but has clear gaps.
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 86%, so the schema already explains most parameters. The description adds context about save_as for binary saving, but leaves output_dir undocumented in both schema and description. Overall, it offers some added value but doesn't fully compensate 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?
Description clearly identifies it as an escape hatch for endpoints without a dedicated tool, distinguishing it from siblings. The specific verb 'makes an authenticated request' plus 'any path under the API base' defines the scope precisely.
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?
Explicitly states when to use: 'for endpoints without a dedicated tool' (e.g. replacement libraries). This implies not using when a dedicated tool exists, providing clear guidance.
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. Dates show when Glama detected each change.
10 tool updates
v1.1.0- First observed
wellsaid_combine_clips - First observed
wellsaid_create_clip_async - First observed
wellsaid_generate_speech - First observed
wellsaid_generate_speech_with_timing - First observed
wellsaid_get_clip - First observed
wellsaid_get_respelling_suggestions - First observed
wellsaid_list_clips - First observed
wellsaid_list_voice_criteria - First observed
wellsaid_list_voices - First observed
wellsaid_request
TDQS
Most tools have clearly distinct purposes (listing voices, summarizing criteria, generating speech, managing clips, combining clips, respelling suggestions, and a request escape hatch). However, the three generation tools—generatespeech, generatespeech_with_timing, and createclip_async—overlap in function, though descriptions clearly distinguish sync vs async and timing output.
All tool names follow a consistent wellsaid_verb_noun snake_case pattern (e.g., wellsaid_list_voices, wellsaid_generate_speech, wellsaid_combine_clips). No mixing of styles or inconsistent verb choices.
10 tools is well within the ideal range, covering the full TTS workflow—voice discovery, generation (sync/async/timing), clip management, combination, and respelling—without unnecessary bloat.
The tool surface is comprehensive for TTS generation and clip management, including sync/async rendering, timing/captions, and clip combination. Minor gaps like no dedicated update/delete for clips are mitigated by the wellsaid_request escape hatch, but the core lifecycle lacks these operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
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.
MCP server for Text-to-Speech
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Related MCP Servers
- 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.171MIT
- AlicenseBqualityFmaintenanceAn MCP (Model Context Protocol) server that provides seamless integration between Fish Audio's Text-to-Speech API and LLMs like Claude, enabling natural language-driven speech synthesis.24713MIT
- AlicenseAqualityDmaintenanceA cross-platform MCP server that enables Claude to speak using Microsoft Edge TTS with support for over 300 voices across 50+ languages. It requires no API keys and allows for customization of speech rate, volume, and pitch.32MIT
- AlicenseAqualityCmaintenanceMCP server that brings ElevenLabs to Claude Code — text-to-speech, sound effects, music generation, voice cloning, speech-to-speech, transcription, and voice isolation. 8 tools for industry-leading AI audio.8MIT
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/billyatminyawns/wellsaid-connector'
If you have feedback or need assistance with the MCP directory API, please join our Discord server