@paxalabs/mcp
OfficialThis server is an official MCP integration for Paxa Labs that lets agents speak through the machine's speakers, manage an audio queue, save speech to files, translate to Thai, OCR documents, and inspect voices, models, and account usage.
Speak out loud – synthesize a short Thai/English line and play it through the speakers (up to 2,000 chars, 15 credits per 1,000 chars).
Queue long-form speech – read articles/books aloud with auto-chunking and gap-free playback (up to 200,000 chars), returning immediately.
Control playback – status, pause, resume, skip, or clear the shared audio queue.
Play local audio files – play mp3, wav, opus, ogg, flac, m4a, or aac through the speakers for free.
Text to speech (file only) – synthesize speech and save as mp3, opus, or wav without playing it.
Translate to Thai – translate a string or up to 200 segments from any language into Thai with formality, glossary, context, borrowed-word, and do-not-translate controls.
OCR documents – extract text from local PDF, PNG, JPEG, or WebP files as Markdown or structured blocks (up to 50 pages, 6.5 credits/page).
List voices – see the TTS voice roster with character notes.
List models – see available models, limits, and pricing.
Get account info – check credit balance, plan, and rate limits.
Click on "Deploy 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., "@@paxalabs/mcpOCR this PDF and read the text aloud in English."
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.
@paxalabs/mcp
Official MCP server for the Paxa Labs API: Thai and English speech AI for your agent, including local audio playback.
An agent connected to this server can speak out loud through your machine's speakers, read long content aloud as a managed playback queue, save speech to audio files, transcribe recordings with subtitles, translate any language into Thai, and read PDFs and images with OCR.
Beta. The tool set is complete and tested end to end, but tool names and behavior may still change before 1.0 as feedback comes in. Report problems at https://github.com/paxalabs/mcp/issues.
Quick start
You need a Paxa API key from paxalabs.com. New accounts include free credits.
Claude Code
claude mcp add paxa -e PAXA_API_KEY=pxa_your_key_here -- npx -y @paxalabs/mcpClaude Desktop, Cursor, and other MCP clients
Add to your client's MCP configuration (for Claude Desktop:
claude_desktop_config.json):
{
"mcpServers": {
"paxa": {
"command": "npx",
"args": ["-y", "@paxalabs/mcp"],
"env": {
"PAXA_API_KEY": "pxa_your_key_here"
}
}
}
}One click for Cursor or VS Code: the buttons install the same entry
into ~/.cursor/mcp.json or VS Code's MCP settings. Then replace
pxa_your_key_here in the paxa entry with your key.
Related MCP server: Google Live Translate MCP Server
Tools
Tool | What it does | Credits |
| Synthesize a short line and play it through the speakers, blocking until done | 15 per 1000 chars |
| Read long content aloud: auto-chunks, synthesizes ahead while playing, returns immediately | 15 per 1000 chars |
| Control the shared audio queue: | free |
| Play a local audio file through the speakers | free |
| Synthesize speech to an audio file (mp3, opus, wav) without playing it | 15 per 1000 chars |
| Translate any language into Thai, with formality, glossary, and context controls | 25 per 1000 chars |
| OCR a local PDF, PNG, JPEG, or WebP into Markdown or structured blocks | 6.5 per page |
| Transcribe a local recording (Thai, English, mixed) to text, with optional speaker labels, word timings, and srt or vtt subtitles saved next to it | 8.33 per minute |
| The TTS voice roster with character notes | free |
| Available models, limits, and pricing | free |
| Credit balance, plan, and rate limits | free |
All audio flows through one ordered queue, so sounds never overlap: speak
lines slip in ahead of queued long-form segments, and queue_speech keeps a
book or article flowing gap-free by synthesizing the next segment while the
current one plays.
With a streaming-capable player installed (see below), speech starts on the first bytes from the API instead of after the full download: about 0.3 s to the first word regardless of length, versus 0.7 s for a short line and 2.5 s for a long paragraph when buffered.
Voice mode for Claude Code
Three pieces turn Claude Code into something you can walk away from: it talks when it has news, and it calls you when it needs you.
1. Install the server (Quick start above).
2. Tell Claude when to talk. Add this to ~/.claude/CLAUDE.md, or to
one project's CLAUDE.md:
## Voice
I have the Paxa MCP server (tools: speak, queue_speech, control_playback).
I am often away from the screen, so use voice like this:
- At the end of a turn where you did real work, call speak with a one or
two sentence summary before writing the final message: what you did,
what is next, and anything you need from me.
- When you need a decision from me, speak the question too.
- Keep it short and conversational. Never read code, file paths, logs, or
long lists aloud. Those stay in text.
- Do not speak for quick back-and-forth or trivial answers.
- If I ask to hear something long, use queue_speech.
- Speak in the language I write in.3. Get told when Claude needs you. When Claude Code waits for a
permission or an answer, the model is not running, so it cannot call
speak. Claude Code fires a hook at those moments instead, and paxa say
turns the hook into a spoken phrase such as "Permission needed." Put
the paxa command on your PATH:
npm install -g @paxalabs/mcpThen add to ~/.claude/settings.json:
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt|idle_prompt|agent_needs_input",
"hooks": [{ "type": "command", "command": "paxa say" }]
}
]
}
}paxa say takes the key from PAXA_API_KEY, or from the paxa entry in
~/.claude.json when that is unset, so step 1 is all the setup it needs.
A Stop hook configured the same way speaks "Done." at the end of every
turn.
The built-in phrases are synthesized once per voice and kept in your
user cache directory (~/Library/Caches/paxa/say on macOS,
~/.cache/paxa/say on Linux, %LOCALAPPDATA%\paxa\cache\say on
Windows). After that first play, which costs well under one credit, a
notification plays from disk: no network round trip and no credits.
To change the words, write your own text in the hook command and add
--cache so it gets the same treatment. One entry per event, since the
matcher picks the event:
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [{ "type": "command", "command": "paxa say --cache \"Hey, need your OK\"" }]
},
{
"matcher": "idle_prompt|agent_needs_input",
"hooks": [{ "type": "command", "command": "paxa say --cache --voice cookie \"Your turn\"" }]
}
]
}
}Without --cache, nothing you type or pipe into paxa say is written to
disk, and messages carried inside a hook payload never are.
On macOS the built-in afplay needs about half a second just to start
and stop, which is most of the delay you hear on a short phrase. With
brew install mpg123 (or ffmpeg) installed, cached phrases play
through that instead: mpg123 starts in about 50 ms, ffplay in about 300 ms.
paxa say also works on its own:
paxa say "Build finished"
paxa say --voice cookie "Deploy is live"If your editor or desktop app was not launched from a terminal, its PATH
may not include your node bin directory, and the hook will fail silently.
Use the absolute path to paxa in the hook command if that happens.
Environment variables
Variable | Required | Default | Purpose |
| yes | Your API key. The server starts without it, but every tool that calls the API then fails with setup instructions the agent can relay | |
| no | working directory | Where |
| no |
| Voice used when a tool call does not pick one. English text usually sounds best with an English voice ( |
| no | Keyword pinning for | |
| no | A text file with one term per line ( | |
| no |
| API origin override |
To pin a different list per project, set the vocabulary variables in a
project-scope server entry (Claude Code's project scope, .cursor/mcp.json,
.vscode/mcp.json). On each call the tool takes the call's own terms first,
then the configured ones, deduplicated and cut at the API's limit of 50, and
reports how many it pinned.
Playback support
Platform | File player | Streaming player | Pause/resume |
macOS |
|
| yes |
Linux |
|
| yes |
Windows |
|
| no |
Streaming needs a player that reads from stdin. On macOS, brew install mpg123 (the quickest to start) or ffmpeg enables it; without one,
speech still plays through afplay after the download completes. If no player is found at all, speech
tools report it clearly and text_to_speech still works.
Claude Desktop extension
Each release on GitHub ships a .mcpb bundle. Download it, open it with
Claude Desktop, and enter your API key in the extension settings. The bundle
carries its own copy of the server and its dependencies, so it works without
Node.js or npm on the machine.
Development
pnpm install
pnpm build # compile to dist/
pnpm typecheck
pnpm mcpb # build release/paxalabs-mcp-<version>.mcpb for Claude Desktop
# live smoke test (spends a few credits, plays audio out loud)
PAXA_API_KEY=pxa_... TEST_OUT_DIR=/tmp/paxa-out node scripts/e2e.mjsAvailable Tools
10 toolscontrol_playbackPlayback controlA
Inspect and control the shared audio queue. status reports what is playing, what is queued, and any synthesis failures. pause and resume halt and continue playback (not supported on Windows). skip drops the current segment. clear stops playback and empties the queue.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the sparse annotations, including what status reports, the effect of each action, and the Windows limitation for pause/resume. It also discloses that clear stops playback and empties the queue, which is important side-effect information for an agent.
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 compact sentences deliver the purpose upfront and then map each action to its effect without wasted words. The structure is easy to parse and every phrase contributes meaningful 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?
For a tool with one enum parameter and no output schema, the description covers all actions, the scope of the queue, what status includes, and a platform caveat. Nothing essential for correct invocation is missing.
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 single parameter 'action' is an enum with 0% schema description coverage, so the description carries the full semantic burden. It explains each enum value—status, pause, resume, skip, clear—with specific behavioral meaning, which is exactly what the agent needs to choose correctly.
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 and resource: 'Inspect and control the shared audio queue,' which clearly distinguishes the tool from siblings like play_audio, speak, and queue_speech. It then enumerates each action and its concrete effect, leaving no ambiguity about what the tool does.
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 establishes a clear context for use: manipulating the shared audio queue, including status inspection, pausing, resuming, skipping, and clearing. It includes a platform exclusion for pause/resume on Windows, but does not explicitly name sibling tools or state when to prefer this over starting playback or queueing speech.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountAccount and creditsARead-onlyIdempotent
Show the API key's account: credit balance, plan, and rate limits. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds a meaningful behavioral fact beyond annotations: the operation is 'Free,' meaning it does not consume credits, which is highly relevant for an account/credits tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that front-loads the action and resource, then lists the key returned fields. The additional 'Free.' note is short, purposeful, and earns its place by conveying cost behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an empty input schema and no output schema, the description provides sufficient information: the resource, the main fields returned, and the cost implication. Nothing critical is missing 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?
The input schema has zero parameters, and schema description coverage is 100%, so there is no parameter documentation burden for the description to carry. The description appropriately focuses on what the tool returns rather than 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 uses a specific verb ('Show') and a clear resource ('the API key's account'), and lists the concrete outputs: credit balance, plan, and rate limits. This fully differentiates it from the unrelated sibling tools, which are all about speech, translation, OCR, or model listing.
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 it clear this is the tool for retrieving account-level information such as credits, plan, and rate limits. There are no account-related sibling tools, so no exclusion or alternative routing is needed; the context is sufficiently clear for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsList modelsARead-onlyIdempotent
List available Paxa models with their limits and credit pricing. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description is not burdened with restating those. It adds useful behavioral context by noting the tool is free and that results include limits and credit pricing, which helps the agent set expectations beyond the raw schema.
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 extremely concise, using one sentence plus a short standalone 'Free.' statement. It front-loads the core purpose and includes only necessary information, with no filler 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 simple, zero-parameter, read-only listing tool, the description is complete enough. It names the resource, indicates what kind of data is returned (limits and credit pricing), and states cost behavior. No output schema exists, but the description sufficiently orients an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty with 100% coverage, so the baseline of 4 applies. The description adds no parameter detail because none is needed; it instead clarifies the content of the returned model listing.
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 specific verb 'List' and the resource 'Paxa models', and adds valuable detail about what is included ('limits and credit pricing'). It is readily distinguishable from sibling tools like list_voices because it explicitly names models as the subject.
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?
There is no explicit guidance on when to use this tool versus alternatives, nor any mention of what it is not for. The description implies a simple informational listing, but provides no exclusions or decision criteria relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_voicesList voicesARead-onlyIdempotent
List the Paxa TTS voice roster: ids, names, gender, language, and character notes. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is established. The description adds behavioral value by specifying the contents of the roster and adding 'Free,' which signals cost/auth expectations beyond the 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?
The description is a single sentence with no wasted words, front-loading the verb and resource before listing the output fields. The extra 'Free' marker is short and adds meaningful context.
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 parameterless, read-only list operation with no output schema, the description adequately covers what the agent will receive. It lacks explicit notes on pagination or sorting, but those are not essential for a simple voice roster and would be unexpected at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage, so there are no parameter semantics for the description to clarify. A baseline of 4 is appropriate because nothing is missing or ambiguous.
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 ('List') and a clearly identified resource ('Paxa TTS voice roster'), then enumerates the returned fields: ids, names, gender, language, and character notes. This distinguishes it from sibling tools like list_models, speak, or get_account.
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 use case clear: an agent needing voice metadata for Paxa TTS should call this tool. It does not explicitly name alternatives or exclusions, but the resource-specific wording leaves little ambiguity about when it applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ocr_documentOCR a documentARead-onlyIdempotent
Run Paxa OCR on a local PDF, PNG, JPEG, or WebP file and return its content as GitHub-flavored Markdown (or structured blocks). Up to 50 pages and 10 MiB per file. Costs 6.5 credits per page.
| Name | Required | Description | Default |
|---|---|---|---|
| output | No | "markdown" (default) returns prose; "structured" returns typed blocks as JSON | |
| file_path | Yes | Path to a local PDF, PNG, JPEG, or WebP file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds substantial extra context: supported file types, hard limits (50 pages, 10 MiB), cost per page, and the two return modes. This goes well beyond what annotations or schema alone convey.
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?
Three concise sentences with no filler. The core operation and return format are front-loaded, followed by practical limits and cost. Every sentence adds useful 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?
For a simple two-parameter tool with safety covered by annotations, the description is complete: it specifies input path, supported formats, size/page limits, output format, and cost. No critical information for selecting or invoking the tool is missing.
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%, so both parameters are already documented, providing a baseline of 3. The description adds meaningful constraints on file_path (local file, format limits, size/page limits) and clarifies output as Markdown or structured blocks, which is useful context beyond 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 clearly states a specific verb ('Run Paxa OCR') and resource (local PDF, PNG, JPEG, or WebP files) and specifies what is returned (content as GitHub-flavored Markdown or structured blocks). It is unambiguous and readily distinguished from the unrelated sibling tools.
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 conditions for use: local files of specific formats, up to 50 pages and 10 MiB, and notes the output modes. It does not explicitly name alternative tools or when-not-to-use cases, but no OCR alternative appears among the siblings, so the lack of an explicit exclusion is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_audioPlay an audio fileA
Play a local audio file through this machine's speakers, for example a file produced earlier by text_to_speech. Blocks until playback finishes. Free (no API call).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to a local audio file (mp3, wav, opus, ogg, flac, m4a, aac) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: 'Blocks until playback finishes' and 'Free (no API call)'. Since the annotations are all false and provide little behavioral signal, the description carries the transparency burden and does so adequately for a simple playback tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what it plays, how it behaves (blocking), and its cost profile. The most important purpose is front-loaded. There is no redundant or filler content.
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 single-parameter tool with no output schema and minimal annotations, this description covers the essential facts: local file input, speaker output, blocking behavior, and cost. An agent has enough context to select and invoke the tool correctly without missing critical information.
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%, and the only parameter, file_path, is already fully documented with supported formats. The tool description adds only 'local' and 'through speakers', which is already implied by the schema, so it provides no significant additional parameter meaning.
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 + resource ('Play a local audio file') and clarifies the output destination ('through this machine's speakers'). It also distinguishes itself from sibling generation tools by referencing files produced earlier by text_to_speech, so an agent can tell this is playback rather than speech synthesis.
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 usage context: use this when you have a local audio file (e.g. one produced by text_to_speech) and want to hear it through the speakers. It also implies cost guidance with 'Free (no API call)', though it does not explicitly contrast with alternatives like speak or queue_speech.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_speechQueue long-form speechA
Read long content aloud (stories, articles, books). Splits the text into segments, synthesizes ahead while playing, and returns immediately; segments play in order after anything already queued. Monitor and control with the control_playback tool. Costs 15 credits per 1000 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to read aloud, Thai or English | |
| voice | No | Voice id from list_voices (default "nomyen") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond the annotations: it splits text into segments, synthesizes ahead while playing, returns immediately, preserves queue order, and costs 15 credits per 1000 characters. This is substantial behavioral context that annotations alone do not provide. No contradiction with readOnlyHint=false or idempotentHint=false.
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?
Three dense, purposeful sentences. The main action is front-loaded, followed by the queuing behavior, control path, and cost. No filler or redundant restatement of the schema.
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 two-parameter tool with no output schema, the description covers the key runtime behavior, return timing, queue ordering, cost, and monitoring mechanism. An agent has enough information to select, invoke, and manage this tool 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%, so the baseline is 3. The description adds extra meaning by relating the text parameter to cost per 1000 characters and by explaining how the text is processed into segments. This goes slightly beyond merely restating 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 and resource: 'Read long content aloud (stories, articles, books).' It clearly identifies the long-form, queued reading behavior and sets it apart from simpler or shorter utterances. The segmentation and ordering details make the tool's role unambiguous.
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: use it for long content, and it queues after existing audio. It also routes follow-up control to control_playback. However, it does not explicitly name when to prefer a sibling like speak or text_to_speech, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
speakSpeak out loudA
Synthesize a short line with Paxa TTS and play it through this machine's speakers. Blocks until playback finishes. Waits for the currently playing audio but jumps ahead of queued long-form segments. For long content use queue_speech. Costs 15 credits per 1000 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to speak, Thai or English, up to 2000 characters | |
| voice | No | Voice id from list_voices (default "nomyen") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key runtime behaviors: it blocks until playback finishes, waits for currently playing audio but jumps ahead of queued long-form segments, and costs 15 credits per 1000 characters. This adds substantial behavioral context without contradicting the 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?
The description is tightly written in three sentences, with the core purpose front-loaded first. Every sentence adds value: purpose, blocking/queue behavior, long-content alternative, and cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, the description covers the essential operational context: what it does, how it behaves in relation to other audio, its cost, and when to use a different tool. Nothing critical is missing 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 description coverage is 100%, so the schema already documents both parameters clearly: text content and voice id with default. The description adds minimal parameter-level meaning beyond labeling the call as 'short', so baseline 3 is appropriate.
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 and resource: synthesize a short line with Paxa TTS and play it through this machine's speakers. It also explicitly differentiates from the queue_speech sibling by scoping this tool to short content, so an agent can tell them apart.
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 for when to use speak: short lines needing immediate playback, with blocking behavior. It explicitly names the alternative for long content ('For long content use queue_speech'), satisfying the when/when-not guidance requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_to_speechText to speech (file only)ADestructive
Synthesize speech with Paxa TTS and save it as an audio file without playing it. Costs 15 credits per 1000 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to synthesize, up to 5000 characters | |
| voice | No | Voice id from list_voices (default "nomyen") | |
| format | No | Audio format (default "mp3") | |
| output_path | No | Where to save the file. Relative paths resolve against PAXA_OUTPUT_DIR (or the working directory). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavior beyond annotations by disclosing the credit cost and the fact that it saves a file instead of playing audio. It does not mention overwrite behavior, although destructiveHint: true already signals potential destructiveness.
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 no filler: the action is front-loaded, the file-only behavior is explicit, and the credit cost is a worthwhile addition.
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 tool with four well-documented parameters and annotations covering read/write behavior, the description is sufficient for selection and invocation. A brief pointer to list_voices or overwrite semantics would be more complete, but these are optional given the 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?
Schema description coverage is 100%, so the input schema already documents text, voice, format, and output_path. The description adds no parameter-level meaning beyond what the schema provides, matching the baseline for full 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: synthesize speech with Paxa TTS and save it as an audio file. The phrase 'without playing it' and the title '(file only)' distinguish it from playback-focused siblings like speak and play_audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies this tool is for file generation rather than immediate playback, and the cost note helps agents considering batch use. It does not explicitly name alternatives or say when not to use it, so it stops 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.
translate_to_thaiTranslate to ThaiARead-onlyIdempotent
Translate text from any language into Thai with Paxa Translate. Accepts a single string or up to 200 segments that share context. Costs 25 credits per 1000 text characters (minimum 2 credits); context and glossary characters bill at 8 per 1000.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to translate: one string, or an array of segments translated together | |
| format | No | Treat input as plain text, Markdown, or HTML | |
| context | No | Background material that improves accuracy, billed at the lower reference rate | |
| glossary | No | Term pairs applied contextually | |
| formality | No | ||
| instructions | No | Free-form guidance for the translator | |
| borrowed_words | No | How to render foreign loanwords: transliterate into Thai script, or preserve as-is | |
| do_not_translate | No | Strings preserved verbatim |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable non-structural details: the segment-sharing context requirement and the credit billing model (25 per 1000 characters, minimum 2, with context/glossary at 8 per 1000), which are not available in annotations or schema.
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 no wasted words. The main purpose is front-loaded, and the second sentence packs essential operational constraints (segment limit, billing) efficiently.
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 an 8-parameter tool, the description captures core input modes, cost model, and shared-context behavior, while high schema coverage handles the remaining parameters and annotations cover safety. A minor gap is the lack of return-shape information, but the operation is straightforward and no output schema exists.
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 88%, so the baseline is 3. The description adds meaning beyond the schema by clarifying that array input segments 'share context' and explaining the cost implications for context and glossary. This is a meaningful supplement, though formality and other parameters remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb-resource pair: 'Translate text from any language into Thai.' It also names the engine (Paxa Translate) and is unmistakably distinct from sibling speech/OCR/account tools.
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?
Provides clear context: accepts a single string or up to 200 segments, making it obvious when to use this tool for Thai translation. It doesn't explicitly name alternatives or exclusions, but none of the sibling tools serve the same purpose, so there is little ambiguity.
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.
10 tool updates
v0.1.0-beta.3- First observed
control_playback - First observed
get_account - First observed
list_models - First observed
list_voices - First observed
ocr_document - First observed
play_audio - First observed
queue_speech - First observed
speak - First observed
text_to_speech - First observed
translate_to_thai
TDQS
Scored across 10 tools
Most tools target distinct actions such as synthesizing, queueing, controlling playback, translating, OCRing, and account checks. The TTS trio (speak, queue_speech, text_to_speech) overlaps in purpose, but the descriptions provide enough guidance to choose correctly.
Names mostly follow a clear verb_noun pattern like list_voices, play_audio, queue_speech, and control_playback. Minor inconsistencies like bare 'speak' and compound 'text_to_speech' are present, but the overall naming scheme is readable and predictable.
Ten tools is well-scoped for a server covering TTS, translation, OCR, model info, and account management. Each tool has a distinct role, and the count feels appropriate rather than bloated or sparse.
The core TTS lifecycle is well covered including voice listing, synthesis, playback, queueing, file output, and queue control, with translation, OCR, and account tools also present. Minor gaps exist around advanced synthesis options and platform-specific playback limitations, but core workflows are supported.
Maintenance
Related MCP Connectors
Hosted speech-to-text + speech emotion/tone analysis for agents. No install; trial keys built in.
Text to speech for your AI. Your AI can send text to Doc Player to read it aloud. You will see a reader window with the text and you can control the playback sentence by sentence. Find an example here: https://documentplayer.com/connect-ai/
Transcribe audio & video to text for AI agents: 100+ languages, speaker labels, webhooks.
Pronunciation assessment, phoneme scoring, speaker voice ID, audio transcription, speech synthesis.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables text-to-speech conversion with smart language detection (using Google TTS for Chinese) and audio file playback with playback controls for Claude Desktop.2MIT
- FlicenseNot gradedqualityDmaintenanceProvides translation and language detection tools to AI agents, processing text, audio, and Google Meet recordings with emotional voice style preservation via Google's Gemini Live API.1-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to generate high-quality speech with 54+ voices in multiple languages via MCP tools.19Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents and applications to send audio notifications with text-to-speech, message streaming, agent-to-agent conversations, and web push notifications through a persistent message store and MCP integration.197 npm1MIT