Skip to main content
Glama

Gemini TTS MCP

Multi-key Gemini TTS server (MCP) with automatic API key rotation and model fallback.

No baked-in voice, accent, or persona — all parameters are explicit.

Features

  • 🔄 Key rotation — pool of Gemini API keys; auto-rotates on quota/error

  • 📉 Model fallback — tries gemini-3.1-flash-tts-previewgemini-2.5-flash-preview-tts

  • 🗣️ 30 voices — full catalog with gender, tone, and description

  • 🔍 Filter by gender/tonelist_voices(male/female) or by tone name

  • 🎚️ Pitch controlpitch_factor parameter (ffmpeg-based)

  • 🌐 Multilingual — any voice speaks the language of your input text

  • 🧩 MCP-native — register in any MCP host (Claude Desktop, Hermes Agent, etc.)

Related MCP server: gemini-webapi-mcp

Quick Start

1. Install

⚠️ Not available on PyPI — install from source (see below). pip install mcp google-genai installs dependencies only, not this project.

Option A — Clone the repo (recommended):

git clone https://github.com/alarconcesar/gemini-tts-mcp.git
cd gemini-tts-mcp
pip install mcp google-genai

Option B — From anywhere (source must be in PYTHONPATH):

pip install mcp google-genai
# then clone & run from the repo directory

2. Set up API keys

Create ~/.gemini-tts-mcp/keys.json:

["AIzaSy...key1", "AIzaSy...key2"]

Or set an env var: export GEMINI_API_KEY="AIzaSy...your_key"

3. Run (from the repo directory)

cd gemini-tts-mcp
python -m gemini_tts_mcp.server

4. Register in any MCP host

Hermes Agent (~/.hermes/config.yaml):

mcp_servers:
  gemini-tts:
    command: "python"
    args: ["-m", "gemini_tts_mcp.server"]

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "gemini-tts": {
      "command": "python",
      "args": ["-m", "gemini_tts_mcp.server"]
    }
  }
}

Tools

Tool

Description

generate_speech

Text → audio file (WAV, MP3, OGG, M4A, FLAC)

list_voices

Browse all 30 voices (filter by gender/tone)

list_voices_by_gender

Shortcut: voice "male" or voice "female"

reload_keys

Refresh API key pool from disk/env

pool_status

Check how many keys are configured

generate_speech parameters

Param

Default

Description

text

(required)

Text to vocalize

voice_name

Puck

Any of the 30 voices

style_instruction

""

Speaking style e.g. "softly", "cheerfully", "in a calm tone"

pitch_factor

1.0

>1 = higher pitch, <1 = lower

audio_format

wav

Output format: wav, mp3, ogg, m4a, flac

model

null

Override model (auto fallback if omitted)

output_path

null

Custom WAV path

Voice Catalog

All 30 voices are multilingual — any voice speaks the language of your input text.

Female voices (16):

Voice

Tone

Description

Achernar

Soft

Gentle, mellow tone

Aoede

Breezy

Casual, relaxed delivery

Autonoe

Bright

Clear, vibrant expression

Callirrhoe

Easy-going

Laid-back, comfortable style

Despina

Smooth

Refined, elegant tone

Erinome

Clear

Crisp, distinct articulation

Gacrux

Mature

Experienced, seasoned quality

Kore

Firm

Assertive, confident delivery

Laomedeia

Upbeat

Positive, energetic style

Leda

Youthful

Young-sounding, fresh voice

Pulcherrima

Forward

Direct, straightforward style

Sterope

Forward

Bold, direct presentation

Sulafat

Warm

Comforting, affectionate quality

Vindemiatrix

Gentle

Soft, kind delivery

Zephyr

Bright

High energy, clear articulation

Male voices (15):

Voice

Tone

Description

Achird

Friendly

Warm, approachable tone

Algieba

Smooth

Polished, fluid delivery

Algenib

Gravelly

Rough, textured quality

Alnilam

Firm

Steady, resolute delivery

Charon

Informative

Educational, explanatory style

Enceladus

Breathy

Soft, airy quality

Fenrir

Excitable

Energetic, animated expression

Iapetus

Clear

Precise, well-articulated

Orus

Firm

Strong, authoritative tone

Puck

Upbeat

Cheerful, enthusiastic tone

Rasalgethi

Informative

Educational, instructive

Sadachbia

Lively

Energetic, spirited expression

Sadaltager

Knowledgeable

Expert, well-informed tone

Schedar

Even

Balanced, consistent tone

Umbriel

Easy-going

Relaxed, conversational

Zubenelgenubi

Casual

Informal, conversational

Key management

Keys are loaded from ~/.gemini-tts-mcp/keys.json (a JSON array of strings), with env var fallback. The server rotates through the pool on each request, skipping failed keys per model. If all keys fail on one model, it falls back to the next model.

Use reload_keys() to refresh without restarting.

Security

  • API keys never leave your machine — the MCP server runs locally

  • .gitignore excludes keys.json

  • keys.json.example provided as a template

License

MIT

Available Tools

5 tools
generate_speechA

Generate speech audio from text using Gemini TTS.

Rotates across all configured API keys and falls back between models. Gemini TTS voices are multilingual — any voice speaks the language of the input text automatically.

Args: text: The text content to vocalize. voice_name: Gemini voice (use list_voices to browse). Default: Puck. style_instruction: Optional speaking-style hint prepended to text, e.g. "speak softly", "cheerfully", "in a calm tone". pitch_factor: Pitch adjustment. 1.0 = no change, >1 = higher, <1 = lower. model: Model override. Default: gemini-3.1-flash-tts-preview, falls back to gemini-2.5-flash-preview-tts. output_path: Optional custom output path for the WAV file.

Returns: Absolute path to the generated WAV file, or error description.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
modelNo
voice_nameNoPuck
output_pathNo
pitch_factorNo
style_instructionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses key behaviors: multilingual support, API key rotation, model fallback, style instruction prepending, pitch adjustment, and error return. It does not mention destructive nature or auth requirements, but for a TTS 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?

The description is concise and well-structured: a brief intro, then a bullet-style Args list, then a Returns line. Every sentence adds value with no redundancy.

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 moderate complexity (6 params, 1 required) and the presence of an output schema, the description covers all necessary information: functionality, parameter details, and return type. It is fully self-contained.

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 input schema has 0% description coverage, but the description's Args section explains every parameter (text, voice_name, style_instruction, pitch_factor, model, output_path) with defaults and usage details, fully compensating for the schema's lack of descriptions.

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 generates speech audio from text using Gemini TTS. It mentions the key parameters and distinguishes itself from siblings (list_voices, etc.) by focusing on generation, not listing or management.

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 explains the tool's behavior (rotates API keys, falls back between models) and implicitly tells when to use it (for generating speech). It cross-references list_voices for browsing voices, but does not explicitly state when not to use it.

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

list_voicesA

List all Gemini TTS voices with gender, tone, and description.

Optionally filter by gender and/or tone. Gemini TTS voices are multilingual — any voice speaks the language of the input text.

Args: filter_gender: Filter by "male", "female" (case-insensitive). filter_tone: Filter by tone name, e.g. "Soft", "Bright", "Firm", "Warm", "Upbeat", "Clear", "Smooth", "Informative", "Easy-going", etc. (case-insensitive).

Returns: A formatted table of matching voices.

ParametersJSON Schema
NameRequiredDescriptionDefault
filter_toneNo
filter_genderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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 burden. It explains that voices are multilingual and can be filtered, but it does not disclose any potential behavioral traits such as pagination, rate limits, or data freshness. For a simple listing tool, this is adequate but not outstanding.

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

Conciseness5/5

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

The description is concise: two sentences plus clearly labeled Args and Returns sections. Every sentence adds value, and the structure is easy to parse.

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 only two optional parameters and an existing output schema, the description is mostly complete. It notes the return is a 'formatted table', but could be slightly more specific about the exact fields in the output. Nonetheless, it covers the essential context.

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?

Schema description coverage is 0%, yet the description adds significant value by explaining both parameters with examples and case-insensitivity. For filter_tone, it lists acceptable tone names, which is more informative than the schema alone.

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 action ('List') and resource ('all Gemini TTS voices') and specifies that it includes gender, tone, and description. It distinguishes from sibling 'list_voices_by_gender' which likely only filters by gender, whereas this tool also supports tone filtering.

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 indicates that filtering is optional and provides examples of filter values. However, it does not explicitly state when to use this tool versus the sibling 'list_voices_by_gender', nor does it provide guidance on when not to use it.

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

list_voices_by_genderA

List Gemini TTS voices filtered by gender.

Args: gender: "male" or "female" (case-insensitive).

Returns: A formatted table of matching voices.

ParametersJSON Schema
NameRequiredDescriptionDefault
genderYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 burden. It mentions returning a formatted table, which is helpful, but it does not disclose whether the operation is read-only, any authentication needs, or potential side effects. Given the tool's simplicity, this is acceptable but not exceptional.

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 exceptionally concise (two sentences plus structured Args/Returns) with no superfluous content. The purpose is front-loaded, and each line serves a clear function.

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

Completeness4/5

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

With one required parameter, no annotations, but an output schema assumed to exist, the description adequately covers purpose, parameter semantics, and return format. It omits error handling or empty result behavior, but for a simple filter tool, it is sufficiently complete.

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 schema description coverage is 0%, but the description's Args section explains the gender parameter accepts 'male' or 'female' (case-insensitive), adding meaningful semantics beyond the raw schema. This compensates well for the lack of schema descriptions.

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 Gemini TTS voices filtered by gender, with a specific verb and resource. It distinguishes from the sibling list_voices (which likely lists all voices) by adding the gender filter.

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 implies usage (when you need voices of a specific gender) but does not explicitly state when to use this vs. list_voices or provide exclusions. Sibling context helps but is not leveraged in the description.

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

pool_statusA

Check how many API keys are currently configured.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations exist, but the description accurately conveys a read-only operation checking configured keys, which is sufficient for a simple tool with no side effects.

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, efficient sentence that is front-loaded and contains no unnecessary words.

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

Completeness5/5

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

For a parameterless tool with an output schema, the description completely captures the tool's purpose and behavior.

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?

With zero parameters, the description adds value by specifying what is checked (API key count), going beyond the empty 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 the action ('Check') and the resource ('API keys'), and distinguishes it from sibling tools focused on speech generation and key reloading.

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?

No explicit usage guidelines are provided, but the purpose is simple and obvious, making it adequate for a straightforward status check.

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

reload_keysA

Reload API keys from ~/.gemini-tts-mcp/keys.json or env vars.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations exist, so the description must fully convey behavior. It states it reloads keys but does not disclose side effects (e.g., overwriting, errors), success/failure indications, or whether it affects running requests. This is insufficient for a mutation.

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 one sentence, front-loaded with the verb 'Reload', and contains no filler. Every word is necessary.

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

Completeness4/5

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

With zero parameters and an output schema present, the description adequately covers the key details (sources). However, it could mention that it returns a success status or errors, but given simplicity, it is nearly complete.

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

Parameters4/5

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

There are zero parameters, so the schema provides complete coverage. The description adds value by naming the exact sources (~/.gemini-tts-mcp/keys.json and env vars), which is more specific than the empty 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 the action (reload API keys) and the specific sources (file or env vars). It differentiates from sibling tools (generate speech, list voices) which serve completely different purposes.

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 implies when to use (after updating keys), but does not explicitly state when not to use or provide alternatives. The context is simple, so no exclusion is needed, but guidance is minimal.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observedgenerate_speech
    • First observedlist_voices
    • First observedlist_voices_by_gender
    • First observedpool_status
    • First observedreload_keys

TDQS

A3.9/5.0
Disambiguation2/5

list_voices and list_voices_by_gender are redundant; list_voices already supports gender filtering via an argument, making the latter unnecessary and causing confusion.

Naming Consistency4/5

Most tools follow verb_noun pattern (generate_speech, list_voices, reload_keys), but pool_status is a noun phrase and list_voices_by_gender includes a preposition, breaking the pattern slightly.

Tool Count4/5

5 tools is reasonable for a TTS server, though list_voices_by_gender is redundant and could be removed without loss.

Completeness4/5

Covers core TTS functionality (generation, voice listing, key management), but lacks tools for voice details or configuration persistence.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/alarconcesar/gemini-tts-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server