Skip to main content
Glama
Halozen-Inc

supertonic3-mcp

by Halozen-Inc

supertonic3-mcp

Local, on-device TTS for Claude & Cursor, powered by Supertonic 3. No API key. No cloud. An internal tool open-sourced by Halozen — we build AI compliance intelligence for construction.

Not affiliated with Supertone Inc.

Expose speak, list_voices, and list_expressions to Claude Desktop, Cursor, or any MCP client over STDIO.

Quick start (TTHW < 3 min)

git clone https://github.com/nextic-tech/supertonic3-mcp && cd supertonic3-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

# Optional: pre-download model for offline use (~400MB)
supertonic3-mcp preload

# Run MCP server (STDIO)
supertonic3-mcp

Cursor MCP config

Add to .cursor/mcp.json (or Cursor Settings → MCP):

{
  "mcpServers": {
    "supertonic3": {
      "command": "/absolute/path/to/supertonic-tts/.venv/bin/supertonic3-mcp",
      "args": []
    }
  }
}

First server start downloads the Supertonic model into ~/.cache/supertonic3/ unless you ran preload first.

Related MCP server: Kokoro MCP Server

Tools

Tool

Description

speak

Synthesize text to a WAV file; returns absolute path + metadata

list_voices

Built-in voices (voice_id, gender)

list_expressions

Inline tags (<laugh>, <breath>, …) with descriptions

speak parameters

  • text — 1–5000 characters; expression tags allowed

  • voice_id — optional (M1, F1, …)

  • language — ISO 639-1 (en, ko, ja, …). For non-English text, always set language=. Defaults to en.

  • speed0.7 to 2.0 (SDK range)

  • play — if true, plays audio on this machine via afplay (macOS) or aplay (Linux). Unsupported on Windows.

WAV files are written to /tmp/supertonic_*.wav (macOS/Linux). Windows is not supported for synthesis output paths in v1.0.

Example return:

Audio saved to /tmp/supertonic_abc123.wav (1.4s, voice: M1, lang: en)

Performance (this repo)

Measured on Apple M3, supertonic 1.3.1 — see benchmark/results.md.

Scenario

Median FSL

Warm (model loaded)

~0.82s

Cold (new TTS() per call)

~0.81s

FSL = time from synthesize() through WAV written (no streaming, no play=True).

Re-run: python benchmark/run.py

Offline use

supertonic3-mcp preload

Downloads ONNX weights atomically to ~/.cache/supertonic3/ and prints SHA256 checksums. After preload, synthesis works without network access.

Development

pip install -e ".[dev]"
pytest

Tests mock the Supertonic SDK (no network in CI).

Coming in v1.1

  • listen() — Whisper speech-to-text (pip install supertonic3-mcp[stt])

  • SSE transport + Docker image for remote agents

  • PyPI publish workflow

License

MIT (this package). Supertonic SDK is MIT; model weights use OpenRAIL-M.

Disclaimer

AI-generated speech is not a substitute for certified safety, legal, or medical guidance. For demonstration purposes only.

Available Tools

3 tools
list_expressionsA

List inline expression tags (e.g. ) usable inside speak() text.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The verb 'List' conveys a read-only behavior, and the example and usage context add value. It does not discuss side effects, auth, or rate limits, but for a simple listing tool this is sufficient.

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?

A single, front-loaded sentence conveys the action, resource, example, and usage context. Every word earns its place with no fluff.

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 list tool with an output schema available, the description fully covers what the tool does and where the result applies. The sibling context further clarifies differentiation.

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, so the baseline per rubric is 4. The description adds no parameter information because none is needed.

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 lists inline expression tags, with an example (<laugh>), and specifies their context (usable inside speak() text). This distinguishes it from siblings list_voices (lists voices) and speak (performs speech).

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 implicitly provides usage context by mentioning 'usable inside speak() text', indicating when to use it. It does not explicitly mention alternatives or exclusions, but the sibling names make the distinction clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_voicesA

List built-in Supertonic voice styles.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. The verb 'List' implies a read-only operation, which provides basic transparency about safety, but it does not disclose any potential side effects, auth requirements, or rate limits. For a simple list tool, the risk is low, so the implicit read-only nature is adequate but not highly transparent.

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, focused sentence with no extraneous detail. It front-loads the action and the resource, making it highly efficient and easy to parse.

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 (zero parameters, output schema present), the description is sufficiently complete. It states what the tool lists, and the output schema covers return value specifics. The lack of sibling differentiation is a minor gap but not critical for understanding this tool's core function.

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, so schema coverage is 100% and baseline for this dimension is 4. The description does not need to elaborate on parameter semantics since there are none to explain.

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 'List' with the resource 'built-in Supertonic voice styles', clearly identifying both the action and the target. This distinguishes it from sibling tools like 'list_expressions' by specifying the object type (voices vs expressions).

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?

No guidance is provided on when to use this tool versus the sibling tools 'list_expressions' or 'speak'. There is no explicit context about prerequisites, use cases, or alternative tools, leaving the agent without direction on selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

speakA

Convert text to speech and save a WAV file. Returns the absolute path and metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
playNoIf true, play audio on this machine (STDIO/local use only).
textYes1–5000 characters; may include expression tags from list_expressions().
speedNoPlayback speed in [0.7, 2.0].
languageNoISO 639-1 code (en, ko, ja, …). Required for reliable non-English output.
voice_idNoBuilt-in voice (M1–M5, F1–F5). See list_voices().

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses the primary behavior (saving a WAV file) and return value (absolute path and metadata), but does not mention side effects like file overwriting, execution context, or any required permissions. This is a minimal but acceptable level of disclosure for a straightforward conversion 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 two short sentences, front-loaded with the core action and output. Every word earns its place, and there is no redundant information or filler.

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?

Given the moderate complexity (5 parameters, output schema present), the description adequately covers the tool's purpose and return value. It could improve by referencing the sibling helper tools (list_voices, list_expressions) to guide the agent toward parameter discovery, but the existing schema already includes those references, so the gap is minor.

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% description coverage for all five parameters, including text constraints, speed range, language code, voice IDs, and the play flag. The description adds no additional parameter-level meaning beyond what the schema already provides, so a baseline of 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 clearly states the tool converts text to speech and saves a WAV file, with a specific verb and resource. It also mentions returning the absolute path and metadata, distinguishing it from sibling tools like list_voices and list_expressions, which are list-only functions.

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?

The description gives a clear context for when to use the tool (text-to-speech conversion) but provides no explicit guidance on when not to use it or how it relates to alternatives. The sibling tools list_voices and list_expressions are referenced in the parameter schema, but the description does not connect the dots for the agent, leaving usage coordination to inference.

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. 3 tool updatesv1.0.0
    • First observedlist_expressions
    • First observedlist_voices
    • First observedspeak

TDQS

A4.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: listing voice styles, listing expression tags, and performing text-to-speech conversion. No overlap or ambiguity between the tools.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: list_voices, list_expressions, and speak. The naming is predictable and uniform.

Tool Count5/5

With only three tools, the server is well-scoped for a text-to-speech domain. Each tool is essential and earns its place.

Completeness5/5

The tool set covers the core workflow: discovering available voices and expressions, then speaking text. No obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Adds text-to-speech capabilities to Cursor IDE, allowing your AI assistant to speak responses, summaries, and explanations out loud using OpenAI or ElevenLabs.
    1
    Apache 2.0
  • A
    license
    A
    quality
    F
    maintenance
    MCP server for the Supertone TTS API. Generate natural speech, browse and preview the voice catalog, predict synthesis cost, and create cloned voices — directly from Claude Desktop, Cursor, or any MCP-compatible client. Supports Korean, English, Japanese, and 20+ other languages, with speed, pitch, and emotion-style control.
    14
    4
    MIT