Skip to main content
Glama

@paxalabs/mcp

npm CI node license Claude Desktop bundle

Add to Cursor Install in VS Code

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

Claude 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.

Add to Cursor Install in VS Code

Related MCP server: Google Live Translate MCP Server

Tools

Tool

What it does

Credits

speak

Synthesize a short line and play it through the speakers, blocking until done

15 per 1000 chars

queue_speech

Read long content aloud: auto-chunks, synthesizes ahead while playing, returns immediately

15 per 1000 chars

control_playback

Control the shared audio queue: status, pause, resume, skip, clear

free

play_audio

Play a local audio file through the speakers

free

text_to_speech

Synthesize speech to an audio file (mp3, opus, wav) without playing it

15 per 1000 chars

translate_to_thai

Translate any language into Thai, with formality, glossary, and context controls

25 per 1000 chars

ocr_document

OCR a local PDF, PNG, JPEG, or WebP into Markdown or structured blocks

6.5 per page

transcribe_audio

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

list_voices

The TTS voice roster with character notes

free

list_models

Available models, limits, and pricing

free

get_account

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

Then 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

PAXA_API_KEY

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

PAXA_OUTPUT_DIR

no

working directory

Where text_to_speech saves files

PAXA_DEFAULT_VOICE

no

nomyen

Voice used when a tool call does not pick one. English text usually sounds best with an English voice (donut, cookie, toast, latte)

PAXA_VOCABULARY

no

Keyword pinning for transcribe_audio: comma-separated names and terms the transcript should spell as written (product names, people, jargon)

PAXA_VOCABULARY_FILE

no

A text file with one term per line (# starts a comment), also pinned on every transcription. Read at call time, so edits apply without a restart

PAXA_BASE_URL

no

https://api.paxalabs.com

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

afplay (built in)

mpg123, ffplay, or mpv if installed

yes

Linux

ffplay, mpv, mpg123, paplay, or aplay

mpg123, ffplay, or mpv

yes

Windows

ffplay if installed, else PowerShell (wav)

mpg123, ffplay, or mpv if installed

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.mjs

Available Tools

10 tools
control_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

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

Usage Guidelines4/5

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 creditsA
Read-onlyIdempotent

Show the API key's account: credit balance, plan, and rate limits. Free.

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

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 modelsA
Read-onlyIdempotent

List available Paxa models with their limits and credit pricing. Free.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

List the Paxa TTS voice roster: ids, names, gender, language, and character notes. Free.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
outputNo"markdown" (default) returns prose; "structured" returns typed blocks as JSON
file_pathYesPath to a local PDF, PNG, JPEG, or WebP file

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesPath to a local audio file (mp3, wav, opus, ogg, flac, m4a, aac)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to read aloud, Thai or English
voiceNoVoice id from list_voices (default "nomyen")

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

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

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to speak, Thai or English, up to 2000 characters
voiceNoVoice id from list_voices (default "nomyen")

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)A
Destructive

Synthesize speech with Paxa TTS and save it as an audio file without playing it. Costs 15 credits per 1000 characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to synthesize, up to 5000 characters
voiceNoVoice id from list_voices (default "nomyen")
formatNoAudio format (default "mp3")
output_pathNoWhere to save the file. Relative paths resolve against PAXA_OUTPUT_DIR (or the working directory).

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to translate: one string, or an array of segments translated together
formatNoTreat input as plain text, Markdown, or HTML
contextNoBackground material that improves accuracy, billed at the lower reference rate
glossaryNoTerm pairs applied contextually
formalityNo
instructionsNoFree-form guidance for the translator
borrowed_wordsNoHow to render foreign loanwords: transliterate into Thai script, or preserve as-is
do_not_translateNoStrings preserved verbatim

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updatesv0.1.0-beta.3
    • First observedcontrol_playback
    • First observedget_account
    • First observedlist_models
    • First observedlist_voices
    • First observedocr_document
    • First observedplay_audio
    • First observedqueue_speech
    • First observedspeak
    • First observedtext_to_speech
    • First observedtranslate_to_thai

TDQS

A4.3/5.0

Scored across 10 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers