Skip to main content
Glama
billyatminyawns

WellSaid Claude Connector

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

wellsaid_list_voices

List voice avatars and their speaker_id (name, style, accent, gender, language), with optional search.

wellsaid_list_voice_criteria

Summarize the distinct styles/accents/genders/languages to narrow a search.

wellsaid_generate_speech

Convert text → audio with a chosen voice. Supports model (legacy/caruso), AI Director prosody (pitch/tempo/loudness), output format, and replacement libraries.

wellsaid_generate_speech_with_timing

Render speech plus word timing and SRT/VTT captions — the API's zip is extracted to individual files.

wellsaid_create_clip_async

Start an async TTS job (good for long or batched scripts).

wellsaid_get_clip

Check a clip's status and download it when ready.

wellsaid_list_clips

List recent clips on the account.

wellsaid_combine_clips

Stitch multiple clips into one file with custom pauses.

wellsaid_get_respelling_suggestions

Get pronunciation respellings for a tricky name/term.

wellsaid_request

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/or loudness — the connector wraps your text in the right tags and automatically selects the caruso model. 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>. Use wellsaid_get_respelling_suggestions to 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. .env auto-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-Key header. 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/avatars

npm 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.js

Then 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.mcpb

Drag 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/mcp

Deploy 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. Use start:remote (OAuth) for anything shared.


Configuration

All configuration is via environment variables (or .env):

Variable

Required

Default

Purpose

WELLSAID_API_KEY

Your WellSaid key (X-Api-Key).

WELLSAID_API_BASE

https://api.wellsaidlabs.com/v1

Override the API base URL.

WELLSAID_OUTPUT_DIR

./output

Where audio/caption files are saved (see note).

MCP_TRANSPORT

stdio

stdio or http.

PORT

8787

Port for HTTP transport.

Output-dir note: the code default is the connector's ./output folder, used when WELLSAID_OUTPUT_DIR is unset (Claude Code / .env installs). The one-click Desktop Extension (.mcpb) and the example Claude Desktop config instead default to your ~/Downloads folder, because a packaged extension has no writable ./output. Any tool call can override with output_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 server

Notes on API coverage

  • wellsaid_list_voices (GET /v1/tts/avatars) and wellsaid_generate_speech (POST /v1/tts/stream) are built against WellSaid's documented request/response shapes, including the integer speaker_id, model, audio_configs, and library_ids fields and inline AI Director tags.

  • wellsaid_generate_speech_with_timing posts to /v1/tts/word-timing and unpacks the returned zip.

  • wellsaid_combine_clips uses clip_ids + pause_durations per the combine endpoint.

  • If WellSaid changes a field, wellsaid_request lets 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 your WELLSAID_API_BASE) as X-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 tools
wellsaid_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clip_idsYesClip ids to combine, in order.
filenameNo
output_dirNo
pause_durationsNoSeconds of pause between clips: one number, or an array of size clip_ids.length - 1.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to speak.
modelNo
speaker_idYesVoice speaker_id.
library_idsNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to speak. May contain inline AI Director tags (caruso model).
modelNoModel to use (default legacy; caruso enables AI Director).
pitchNoAI Director pitch, roughly [-45, 100]. Forces the caruso model.
tempoNoAI Director tempo, roughly [0.7, 2.3]. Forces the caruso model.
formatNoOutput format (default mp3).
filenameNoOutput filename (extension added if missing). Defaults to a slug of the text.
loudnessNoAI Director loudness, roughly [-15, 9]. Forces the caruso model.
output_dirNoDirectory to write into. Defaults to WELLSAID_OUTPUT_DIR or ./output.
speaker_idYesVoice speaker_id from wellsaid_list_voices.
embed_audioNoAlso return the audio inline (base64). Off by default.
library_idsNoReplacement-library ids to apply.
sample_rateNoSample rate in Hz (e.g. 24000, 44100).

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to speak (may contain inline AI Director tags).
modelNo
pitchNo
tempoNo
formatNoAudio format inside the zip (default mp3).
filenameNoBase filename (no extension) for the extracted files.
loudnessNo
output_dirNoDirectory to write files into.
speaker_idYesVoice speaker_id from wellsaid_list_voices.
library_idsNo
sample_rateNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 clipA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
clip_idYesThe clip id from wellsaid_create_clip_async.
downloadNoIf ready, download the audio to disk.
filenameNo
output_dirNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 suggestionsA
Read-only

Get WellSaid respelling suggestions for a word. Use the returned value in an inline AI Director tag, e.g. pizza, to control pronunciation.

ParametersJSON Schema
NameRequiredDescriptionDefault
wordYesThe word or term to look up.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 clipsA
Read-only

List recent clips created on the account (id, status, metadata).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax clips to return.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 criteriaA
Read-only

Summarize the distinct styles, accents, genders, languages, and characteristics across all voices — useful for narrowing a wellsaid_list_voices search.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 voicesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax voices to return.
searchNoCase-insensitive substring matched against any voice field.
refreshNoBypass the in-memory cache and re-fetch.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body.
pathYesPath relative to the API base, e.g. "/tts/avatars".
queryNoQuery parameters.
acceptNoAccept header, e.g. "audio/mpeg" for binary.
methodNoHTTP method (default GET).
save_asNoIf the response is binary, save it to this filename (basename only).
output_dirNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 10 tool updatesv1.1.0
    • First observedwellsaid_combine_clips
    • First observedwellsaid_create_clip_async
    • First observedwellsaid_generate_speech
    • First observedwellsaid_generate_speech_with_timing
    • First observedwellsaid_get_clip
    • First observedwellsaid_get_respelling_suggestions
    • First observedwellsaid_list_clips
    • First observedwellsaid_list_voice_criteria
    • First observedwellsaid_list_voices
    • First observedwellsaid_request

TDQS

A4.1/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    17
    1
    MIT
  • A
    license
    B
    quality
    F
    maintenance
    An 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.
    2
    47
    13
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    3
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP 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.
    8
    MIT

Latest Blog Posts

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