Skip to main content
Glama

yovoice is an open-source, local-first audio and music creation studio for macOS, Windows and Linux.

Turn text into expressive speech, natural cloned voices, complete vocal songs, and multi-track scores right on your machine. Featuring zero-shot voice cloning, emotional performance controls, AI music generation with lyrics, and General MIDI score arranging—all running 100% locally with zero cloud API calls, zero per-character fees, and zero Python environment headaches.

yovoice creation workspace — browser preview


Why yovoice?

  • 🔒 100% Local Privacy: Runs entirely on your local GPU/CPU. Your manuscripts, reference voices, and creations never leave your computer.

  • 💸 Zero Recurring Fees: Say goodbye to per-character/per-minute meters and expensive cloud voice/music subscriptions.

  • ⚡ Native C++ Performance (No Python Hell): Powered by audio.cpp v0.9.3. Ships with bundled Windows CUDA 12.4/13.3 runtimes and native macOS Metal support. Double-click and create—no Conda or PyTorch conflicts.

  • 🎛️ Creator Workstation: Multi-take versioning for side-by-side comparison, waveform trimming, timeline scrolling, and clean stems/MIDI export.

  • 🤖 MCP & AI Agent Ecosystem: Chat with DeepSeek, Qwen, Claude, OpenAI, or local Ollama to create and edit works end to end. Includes a native Model Context Protocol (MCP) server for Cursor and Claude Code.


Related MCP server: local_ai_gen

Features

  • Speech, voice design and cloning — clone a reference voice, design a voice from a description, adjust emotion and delivery, and edit takes on a timeline.

  • Story dubbing — import text or subtitle files, assign a character to each line, and generate line by line.

  • Music — write a style and lyrics with section markers, then generate songs or instrumentals with ACE-Step 1.5, or songs and score-based instrumentals with YuE2, or instrumental music and sound effects from an English description with Stable Audio 3; the playback page syncs lyrics to the vocals.

  • Score — write parts by bar and beat, import MIDI or let an Agent compose, render with a General MIDI sound font, and export MIDI and stems. See Score.

  • Optional AI service — the built-in assistant panel chats with DeepSeek, Qwen, Kimi, OpenAI, Anthropic, Ollama or any compatible API and acts on your works: it writes arrangements and lyrics, edits text, assigns voices and starts generation; keys stay on this computer. See AI service.

  • 12 interface languages — English, 简体中文, 繁體中文, 日本語, 한국어, Español, Français, Deutsch, Português (Brasil), Русский, Italiano and Tiếng Việt; switch anytime in Settings, no restart needed.


Supported Models

Use

Models

Voice cloning and emotion

IndexTTS 2.0 / 2.5, Qwen3-TTS Base

Voice design and cloning

VoxCPM2, OmniVoice, Qwen3-TTS VoiceDesign, Breeze TTS 2

Built-in voices

Kokoro-82M, Qwen3-TTS CustomVoice

Songs and instrumentals

ACE-Step 1.5 Turbo / XL Turbo, YuE2 3B

Instrumentals and sound effects

Stable Audio 3 Small Music / Small SFX / Medium

All models are downloaded inside the App or with the CLI. See model selection for file sizes, hardware requirements, inputs and examples. OmniVoice, YuE2 and Breeze TTS 2 weights are restricted to non-commercial use; Stable Audio 3 is free below USD 1M annual revenue under the Stability AI Community License.


Installation

Choose the package for your platform from the repository’s Releases tab or visit the official website.

Platform

Package

Install

macOS 14+ · Apple Silicon

.dmg

Open the disk image and drag yovoice to Applications

Windows 10/11 · x64

-setup.exe

Run the installer, then open yovoice from the Start menu

Windows 10/11 · x64 · NVIDIA GPU

-cuda12.4-setup.exe

Bundles the CUDA 12.4 runtime; works with older GPUs and drivers and uses the GPU from first launch

Windows 10/11 · x64 · NVIDIA GPU

-cuda13.3-setup.exe

Bundles the CUDA 13.3 runtime; needs a newer driver, smaller download

Linux · x64 (Debian/Ubuntu)

-linux-x64.deb

sudo apt install ./yovoice-<version>-linux-x64.deb, then open yovoice from the application menu

Linux · x64 (other distributions)

-linux-x64.tar.gz

Extract and run ./install.sh to add yovoice to the application menu for the current user

The Windows installer downloads and installs WebView2 Runtime if needed. Models are downloaded inside the app; uninstalling preserves user data in ~/.yovoice.

On Linux the app needs WebKitGTK 4.1 (libwebkit2gtk-4.1-0 on Debian/Ubuntu, webkit2gtk4.1 on Fedora, webkit2gtk-4.1 on Arch); the .deb installs it automatically. Linux runs on the CPU out of the box, and a Vulkan GPU runtime can be downloaded in Settings → Inference engine. The Linux app doesn't update itself yet; download new versions from Releases.

Check for updates from the app menu on macOS or Windows. Updates are also checked and downloaded in the background; restart to install when ready. Windows updates download only the app (-update.exe) and keep the installed runtime; when a release recommends a newer runtime you can upgrade it in Settings → Inference engine.


Quick Start

  1. Set up a model. Download a model in Settings (e.g. Kokoro-82M for fast narration, or VoxCPM2 for cloning).

  2. Create a project. Choose Story dubbing, Speech generation, Music, or Score.

  3. Add content. Enter text, lyrics, or notes, then pick a character and adjust style.

  4. Generate audio. Select Generate, then preview, compare takes, edit, and export.


CLI & Agent Skill

Give your agent the yovoice Skill link and ask it to install the Skill and set up the local CLI, engine, and model:

Install this Skill and set up yovoice for local speech generation: https://github.com/leemysw/yovoice/tree/main/skills/yovoice

Then describe what you want:

Read narration.txt using voice.wav as the reference voice, with a calm delivery, and save it as narration.wav.

The agent runs the standalone CLI without opening the desktop app. See the CLI guide for details.


Run yovoice serve to provide an authenticated HTTP API and MCP inference service for other machines. See the API / MCP deployment guide for deployment and client examples.

Development

make install
make app-run

See the development guide for prerequisites. It also covers browser preview, tests, and project structure. For how the processes and packages fit together, see Architecture.


Community

Scan the QR code with WeChat to join the yovoice user group. If the code has expired, open an issue and we will post a new one.


Contributing

Bug reports, feature suggestions, and pull requests are welcome. Include your platform, model, and steps to reproduce when reporting a problem. Run make check before submitting code changes.


Acknowledgements

  • audio.cpp by ShugoAI — the local audio inference engine.

  • VoxCPM — voice design and cloning models, licensed under Apache-2.0.

  • IndexTTS — the speech synthesis models behind yovoice.

  • OmniVoice — voice design and cloning models.

  • Qwen3-TTS — voice cloning, built-in voices, and text-guided voice design.

  • ACE-Step — music generation from style prompts and lyrics.

  • YuE — full vocal song generation from lyrics.

  • Stable Audio 3 by Stability AI — instrumental music and sound effects from text. Powered by Stability AI.

  • Breeze TTS 2 — Chinese and English voice design and cloning.

  • go-meltysynth, MuseScore General, GeneralUser GS and SGM-V2.01 by David Shan — the SoundFont synthesizer and sound fonts behind score rendering.

  • Kokoro — lightweight speech synthesis with built-in voices: Kokoro-82M and Kokoro-82M-v1.1-zh.


Star History


License

Apache-2.0. Dependencies retain their original licenses; IndexTTS models are covered separately by their model license.

Available Tools

9 tools
cancel_generationB

按 requestId 取消任务;取消后查询至终态,终态任务保持不变

NameRequiredDescriptionDefault
requestIdYes

TDQS

B3.4/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; it does disclose two useful behaviors: cancellation is followed by polling to a terminal state, and already-terminal tasks are left unchanged (idempotent/no-op). It omits what happens on an unknown requestId, whether cancellation is reversible, and what the call returns, so disclosure is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the action front-loaded and the follow-up polling behavior attached after the semicolon. Nothing is wasted, though the phrasing is dense enough that the post-cancellation polling instruction could be missed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation tool with no annotations and no output schema, the description covers the action, the post-cancel state check, and idempotency on terminal tasks. It still leaves the agent unsure about failure modes (invalid/completed requestId) and return value, which matters more here because no structured fields fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single parameter, so the description must compensate. '按 requestId' tells the agent the id identifies the task to cancel, which is the essential meaning, but gives no format, source (where to obtain the requestId), or error behavior for an invalid id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource — cancel a task — and the keying parameter (requestId), which separates it cleanly from generate, submit_generation and get_generation. It stops short of explicitly contrasting itself with a sibling (e.g. get_generation for polling), so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'取消后查询至终态' implies the agent should poll for a terminal state after cancelling, and '终态任务保持不变' implicitly tells the agent that cancelling a finished task is a no-op. However it never names the polling tool (status/get_generation) or states explicit preconditions such as which task states are cancellable, so usage is only implied.

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

generateA

同步生成,长耗时优先使用 submit_generation。完整生成语音,返回 id、duration 和音频位置。path 为本机 WAV 文件的绝对路径

NameRequiredDescriptionDefault
textYes需要朗读的正文
settingsNo声音参数,与 HTTP API 同名,例如 modelId、voiceId、voxMode、voiceDescription、speaker、referenceText、seed、modelOptions

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does disclose the most important trait, namely that this is a blocking synchronous call, and it names the return values, but it says nothing about side effects on disk (whether an existing WAV file is overwritten), permissions or authentication, timeouts, or how a failure is reported.

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?

Four short clauses, with the sync-vs-async routing rule front-loaded before the functional description and the return/path clarification last. Every clause carries information, and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter speech-generation tool with no annotations and no output schema, the description does cover the return shape (which is good, since no output schema exists). However, it leaves the open `settings` object undefined beyond "same names as the HTTP API", so an agent cannot tell which keys are valid, and it omits blocking and timeout behavior for a call that produces a local file.

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%, with both `text` and `settings` documented in the schema, so the baseline is 3. The mention of "path" clarifies a returned field rather than an input parameter, and the nested `settings` object is described only by reference to the HTTP API, a point the description does not expand on.

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 names a specific verb and resource ("完整生成语音" / fully generate speech) and explicitly distinguishes this tool from its async sibling submit_generation through the word "同步生成" (synchronous generation). Because it also names the return fields (id, duration, audio location), an agent can select this tool over status/get_generation without opening the schema.

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 states the condition for choosing the alternative: "长耗时优先使用 submit_generation" tells the agent to route long-running work elsewhere. This is a clear when-to-use rule, but it does not explain what counts as "long" or how this tool relates to siblings such as get_generation or cancel_generation.

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

get_generationA

按 requestId 查询任务;建议每2–5秒查询,completed 后用 downloadPath 下载(本机模式直接返回 path)

NameRequiredDescriptionDefault
requestIdYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden; it does disclose the polling cadence and the completed→download handoff, plus the local-mode variation. It omits error/failed-state behavior, whether polling is rate-limited server-side, and any auth or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the action and key front-loaded, followed by the polling and download instructions. No wasted clauses, though the parenthetical local-mode note is slightly compressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should convey the return shape; it names downloadPath and the local-mode path but never enumerates possible status values beyond 'completed', leaving the agent to guess pending/failed semantics on a polling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single requestId parameter, so the description must compensate. It does explain that requestId identifies the task to query, but adds no format, origin, or validity detail (e.g., where the id comes from in generate/submit_generation).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: query a task by requestId, which names both the action and the key it operates on. An agent can tell it apart from generate/submit_generation, though the overlap with the sibling 'status' tool is not addressed.

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?

Gives concrete operational guidance: poll every 2–5 seconds, then use downloadPath once status is completed. It stops short of stating when to prefer this over the sibling 'status' tool or what to do on failure/cancellation.

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

list_modelsA

查询模型 ID、安装状态和高级参数定义;生成前选择已安装模型

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/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: 查询 signals a read-only operation, and the field list (ID, install status, advanced parameters) tells the agent what comes back. It says nothing about auth requirements, whether uninstalled models are included, or result ordering/size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the query scope front-loaded and the usage note after the semicolon. Dense but every clause carries information; no 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?

For a zero-param listing tool with no output schema, the description does the necessary work by naming the returned fields and tying the call to the generation workflow. Output format and filtering behavior remain unspecified but are minor for a simple enumeration.

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 takes zero parameters, so the baseline is 4. The description correctly implies a no-argument listing call and doesn't invent filtering options that don't exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (查询) plus resource (模型) and it enumerates the returned fields: model ID, install status, advanced parameter definitions. It implicitly separates itself from list_voices (voices vs models) and points at generation, though it never names the sibling tools outright.

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?

'生成前选择已安装模型' gives a clear usage context – call this before generate to pick an installed model. It states when to use it but offers no exclusions or explicit alternative-tool routing.

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

list_voicesA

列出已上传参考音色及 voiceId

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/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 behavioral burden. It discloses that the result includes uploaded reference voices and their voiceId, but says nothing about ordering, pagination, empty results, or permissions. Listing is inherently read-only, but the description does not state that explicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. Every word contributes to identifying the resource and the key return field.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description should more fully explain the return shape. It mentions voiceId, which helps, but leaves the agent unsure whether the response is a simple array, an object, or includes additional metadata.

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 is 4. There are no parameters whose meaning needs to be disambiguated in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb-resource pair: '列出' (list) '已上传参考音色' (uploaded reference voices) and 'voiceId'. It distinguishes itself from upload_voice by listing uploaded items rather than uploading, though it does not explicitly contrast with list_models.

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?

Usage is only implied: an agent can infer this is how to discover available voiceId values before calling generate. There is no explicit statement of when to use this versus list_models or other siblings, and no prerequisites or exclusions are given.

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

render_scoreA

把编曲乐谱渲染为混音 WAV,返回 id、duration 和音频位置(远程为 downloadPath,本机为 path)。乐谱以小节和拍为单位:tempo、timeSignature、可选 sections(段落及变速),tracks 每个声部含 program(GM 音色号)或 drums、role(melody/piano/strings/bass/drums/pad/arp/other,决定默认电平)、notes(bar、beat 从 1 开始、pitch 为 MIDI 音高、length 以拍计、velocity),可选 level、pan、reverb、humanize、dynamics。soundFont 选择已安装的音色库(musescore-general-sf2 默认、generaluser-gs-sf2、sgm-v2-sf2)

NameRequiredDescriptionDefault
scoreYes乐谱
titleNo作品标题
soundFontNo音色库 ID,默认 musescore-general-sf2

TDQS

A4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does add real value by disclosing the return shape and the remote-vs-local difference between downloadPath and path, plus the default soundFont. However, it never says whether rendering is synchronous or long-running, how expensive it is, or how failures surface — material gaps for an audio-rendering tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph with no filler sentences; every clause conveys semantics or output information. It is somewhat run-on, and the return-value note is buried mid-sentence rather than front-loaded as a separate line.

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 deeply nested input schema with no output schema and no annotations, the description covers the score model thoroughly and explains the return payload. What is missing is operational context — sync versus async behavior, and how this tool relates to the generation siblings — which leaves a small but real gap.

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 description goes well beyond the schema: it explains units and conventions (bar/beat 1-based, pitch as MIDI note number, length in beats), what program means (GM instrument number) versus drums, and what role does (selects default level) with its enumerated values. It also lists the installed soundFont IDs and the default, none of which appear in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+output: rendering an arranged score into a mixed-down WAV, and names exactly what comes back (id, duration, audio location). This is clearly distinguishable from siblings like generate/submit_generation/get_generation, which operate on a different pipeline.

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?

Usage is only implied by the object shape: the caller must supply a score with tempo, timeSignature and tracks. There is no explicit statement of when to pick render_score over generate or submit_generation, and no prerequisites or exclusions are given.

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

statusB

查看推理引擎及当前任务状态

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations at all, the description carries the full burden, yet it says nothing about behavior: whether the call blocks, whether it returns progress percentages or queue positions, or whether it has rate/latency considerations. It only restates the read intent implied by '查看'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, front-loading the resource being inspected. It is efficient but so terse that it borders on under-specification rather than exemplary conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a zero-parameter read with no output schema, so the description is the only place to convey what come back (engine health? job progress? queue depth?). It gestures at that but does not enumerate the returned fields, leaving an agent to guess at the payload.

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 takes zero parameters and the schema is closed (additionalProperties: false), so there is no parameter semantics for the description to explain. Baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('查看'/view) and two resources: the inference engine and the current task status. An agent can distinguish it from sibling generation/voice tools. However, 'current task status' is not qualified (which task, whose task), so scope stays slightly generic.

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 indication of when to call this versus siblings like get_generation (which also exposes task state) or how often to poll it. The purpose is self-evident enough that an agent can infer a diagnostic use, but nothing is stated explicitly.

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

submit_generationA

提交异步语音生成,立即返回任务状态。requestId 为客户端生成的32位十六进制随机ID;相同ID和参数重试不会重复生成。随后用 get_generation 查询,完成后取得音频。优先使用此工具避免长连接超时

NameRequiredDescriptionDefault
textYes
settingsNo
requestIdYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it discloses the important traits: async submission, an immediate status return, and idempotency (same requestId plus same params will not duplicate generation). It does not cover failure modes after submission or what the immediate status payload contains, so it is strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short clauses, front-loaded with the async submit behavior and the return semantics. The idempotency note and follow-up routing each earn their place; only the trailing 'prefer this tool' sentence is slightly tacked on rather than integrated.

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?

No output schema exists, so the description correctly explains what comes back (immediate task status) and how to get the final audio. The gap is the opaque `settings` object, which an agent may need to populate but gets no guidance on here or in 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 0%, so the description must compensate. It does add genuine meaning for `requestId` (client-generated, 32-char hex, idempotency key), but `text` and especially the nested `settings` object (additionalProperties: true) remain undocumented in both schema and description.

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 specific verb and resource ('提交异步语音生成,立即返回任务状态') and makes the async/non-blocking nature explicit. This clearly differentiates it from the synchronous sibling `generate` and from the polling sibling `get_generation`, so an agent can select it without opening a schema.

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?

Gives a clear usage rule: prefer this tool to avoid long-connection timeouts, and follow up with `get_generation` to poll and retrieve the audio. The comparison to the `generate` sibling is implied by 'avoid long-connection timeouts' rather than named outright, so it falls just short of fully explicit 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.

upload_voiceA

导入参考音频,返回 voiceId。传 path(本机音频文件路径,常见格式自动转换)或 Base64 编码的 audio,限 20 MB、1–60 秒

NameRequiredDescriptionDefault
nameNo音色名称
pathNo本机音频文件路径,仅 yovoice mcp(stdio)可用
audioNo参考音频的纯 Base64 字符串,不含 data URL 前缀

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden; it does disclose the return value (voiceId), automatic format conversion, and size/duration caps — solid for an import tool. It omits whether the upload persists permanently, what permissions are needed, what happens on failure (e.g. audio too long), and whether name is required for later reference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads purpose, then return value, then accepted inputs, then limits — every clause carries information. It is slightly run-on with multiple parentheticals, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter mutation tool with no annotations and no output schema, the description is adequate but leaves gaps: the role of the optional 'name' parameter and its default behavior, failure modes, and whether repeated uploads create new voices are all unstated.

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, but the description adds genuine value the schema lacks: it states that path and audio are alternatives (the schema marks neither required and has no oneOf), which prevents an agent from omitting both. It also reiterates the limits applying to the audio payload, which the schema does not encode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('导入参考音频') and states the return value ('返回 voiceId'), which is more than most import tools offer. It is clearly distinguishable from siblings like list_voices, generate, or render_score, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the two input modes (path or Base64 audio) and hard limits (20 MB, 1–60 s), which is useful operational guidance. However, it never says when to prefer this tool over alternatives, nor any prerequisites such as auth, quota, or whether an existing voice with the same name conflicts.

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. 9 tool updatesv0.1.0
    • First observedcancel_generation
    • First observedgenerate
    • First observedget_generation
    • First observedlist_models
    • First observedlist_voices
    • First observedrender_score
    • First observedstatus
    • First observedsubmit_generation
    • First observedupload_voice

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target clearly different resources or actions (upload_voice, list_voices, list_models, render_score, cancel_generation are all distinct). The only real overlap is generate vs submit_generation (sync vs async) and status vs get_generation, but the descriptions explicitly explain the difference and which to prefer, so an agent can choose correctly.

Naming Consistency4/5

Seven of nine names follow a clean verb_noun pattern (list_voices, list_models, get_generation, submit_generation, cancel_generation, upload_voice, render_score). The bare noun 'status' and bare verb 'generate' are the only deviations, and both remain readable.

Tool Count5/5

Nine tools is well within a comfortable range and every tool maps to a distinct need: voice import/listing, model discovery, engine status, sync/async generation, polling, cancel, and score rendering. Nothing feels padded or missing at the count level.

Completeness4/5

The voice lifecycle (upload → list → generate → poll → cancel) plus model discovery and score rendering is covered end to end. Minor gaps exist: no delete/replace voice, and no way to list past generations without knowing a requestId, but agents can work around these.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers