gnani-mcp
Official Gnani AI MCP server. Exposes Gnani Speech-to-Text (Prisma v2.5 / v3.0), Text-to-Speech (Timbre v2.5 / v3.0), and Voice Clone APIs as first-class MCP tools, so any MCP-aware client (Claude Desktop, Claude Code, Cursor, Windsurf, Zed) can call them with zero boilerplate.
Cross-platform Python package: macOS, Windows, and Linux (Python 3.10+).
Quickstart
1. Get your API key
Sign up or log in at app.gnani.ai and copy your API key.
2. Add to your MCP client
Paste this into your MCP config JSON:
{
"mcpServers": {
"gnani": {
"command": "uvx",
"args": ["gnani-mcp"],
"env": {
"GNANI_API_KEY": "your-api-key"
}
}
}
}
Replace your-api-key with your actual API key.
If you have installed via pip install gnani-mcp, use the console script directly:
{
"mcpServers": {
"gnani": {
"command": "gnani-mcp",
"env": {
"GNANI_API_KEY": "your-api-key"
}
}
}
}
3. Config file locations
| Client | Config path |
|---|---|
| Cursor | ~/.cursor/mcp.json (macOS/Linux) · %USERPROFILE%\.cursor\mcp.json (Windows) |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) · %APPDATA%\Claude\claude_desktop_config.json (Windows) |
| Claude Code | claude mcp add gnani --env GNANI_API_KEY=your-api-key -- uvx gnani-mcp |
| Windsurf | Cascade panel → MCPs → Open MCP config file (~/.config/devin/mcp_config.json on macOS/Linux, %APPDATA%\devin\mcp_config.json on Windows; older installs use ~/.codeium/windsurf/mcp_config.json). Uses the same mcpServers JSON as above. |
| Zed | settings.json (zed: open settings file) → context_servers, see below. Or Settings → AI → MCP Servers → Add Server. |
Zed uses a different key (context_servers) than the JSON above:
{
"context_servers": {
"gnani": {
"command": "uvx",
"args": ["gnani-mcp"],
"env": {
"GNANI_API_KEY": "your-api-key"
}
}
}
}
Alternative: credentials file
Instead of setting GNANI_API_KEY in the JSON config, you can store it in ~/.gnani/credentials:
api_key = your-api-key
The server checks GNANI_API_KEY env var first, then falls back to ~/.gnani/credentials.
Install
# Option A: run directly (no install needed)
uvx gnani-mcp
# Option B: install globally
pip install gnani-mcp
Tools
| Tool | What it does |
|---|---|
gnani_stt_transcribe |
Transcribe a short clip (≤ 30 s) in 10 Indian languages — WAV, MP3, OGG, FLAC, AAC, M4A. model: prisma-v2.5 (default) or prisma-v3.0 |
gnani_stt_batch_transcribe |
Transcribe long (up to 4 h) or remote audio: create → start → poll → fetch, in one call. Supports both models |
gnani_stt_batch_list_jobs |
List Batch STT jobs (status filter + cursor pagination) |
gnani_stt_batch_status / _get_transcripts / _cancel |
Check, download, or cancel an existing Batch job |
gnani_tts_synthesize |
Synthesize speech. model: timbre-v2.5 (default, 42 voices) or timbre-v3.0 (13 voices, all 10 languages, inline audio tags) |
gnani_tts_list_voices |
Browse the voice catalog for either TTS model (language, gender, persona, description) |
gnani_vc_generate_embedding |
Extract a speaker embedding from a reference audio clip (step 1 of voice cloning) |
gnani_vc_synthesize |
Synthesize speech in a cloned voice using a speaker embedding (step 2) |
Choosing a model
Both new models are opt-in — omit model and behaviour is unchanged (Prisma v2.5 / Timbre v2.5).
Prisma v3.0 (model="prisma-v3.0") on gnani_stt_transcribe and gnani_stt_batch_transcribe:
language_code="indic-auto"lets the model identify the language, or pass 1–4 comma-separated codes ("hi-IN,en-IN") as hints. REST results includedetected_language_code.formataddscodemix(English words stay Latin) and, on REST only,transliterate(Latin-letter output). Whenformatis omitted v3.0 picks a style per request (digits for a singlehi-IN/en-IN) — passformatexplicitly to keep v2.5-style output.- Context hints:
keyterms,topic,speaker_names, and (REST only)previous_text. On Batch only one ofkeyterms,topic,topic + keyterms, orspeaker_namesis accepted, andtopicmust be 30–1,600 characters.
Timbre v3.0 (model="timbre-v3.0") on gnani_tts_synthesize:
- Voices are not shared between models: Shivani, Lakshmi, Kalpana, Chetana, Vasudha, Riyaa, Tarika (F); Avinash, Shubham, Prakash, Devansh, Yashraj, Harshad (M). Every voice speaks all 10 languages.
- Inline audio tags in
text:<laugh>,<giggle>,<sigh>,<exhales>,<sniffles>,<yawns>,<coughs>,<clears throat>,<whispers>,<shouting>,<excited>,<slow>,<pauses>(silence, never spoken). A tag applies until the next tag; tags are billed as characters. With v2.5 they are stripped, and the tool returns a warning.
Configuration
| Env var | Default | Description |
|---|---|---|
GNANI_API_KEY |
— | Required. Your Gnani API key. |
GNANI_API_BASE_URL |
https://api.vachana.ai |
Override for testing / staging. |
GNANI_MCP_BASE_PATH |
~/Desktop |
Directory where audio output files are saved. |
Running over HTTP
By default the server speaks MCP over stdio. To serve it over HTTP instead:
gnani-mcp --transport http --host 127.0.0.1 --port 8000 --path /mcp
--transport accepts stdio (default), http, sse, or streamable-http.
Supported Languages
STT (Prisma v2.5 / v3.0)
| Language | Code |
|---|---|
| Bengali | bn-IN |
| English (India) | en-IN |
| Gujarati | gu-IN |
| Hindi | hi-IN |
| Kannada | kn-IN |
| Malayalam | ml-IN |
| Marathi | mr-IN |
| Punjabi | pa-IN |
| Tamil | ta-IN |
| Telugu | te-IN |
TTS (Timbre v2.5 / v3.0) — also supports Hinglish (hi-en) and auto
Timbre v2.5: 42 voices across all 10 Indian languages plus Hinglish, one preferred language each. Timbre v3.0: 13 voices that each speak all 10 languages. Use gnani_tts_list_voices (with model) to browse.
Voice Clone Workflow
# Step 1 — generate embedding from reference audio (do this once per voice)
embedding_result = gnani_vc_generate_embedding(audio_path="/path/to/reference.wav")
speaker_embedding = embedding_result["speaker_embedding"]
# Step 2 — synthesize with the cloned voice (reuse embedding as many times as needed)
audio_result = gnani_vc_synthesize(
text="नमस्ते, आप कैसे हैं?",
speaker_embedding=speaker_embedding,
)
print(audio_result["audio_file"]) # path to saved WAV file
Print client config
gnani-mcp --print
gnani-mcp --api-key=your-key --print
This prints the MCP client config JSON for your machine (using uvx if it's installed).
License
Metadata
Release files for gnani-mcp 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| gnani_mcp-0.2.1.tar.gz | 40.6 kB | With provenance | Details for gnani_mcp-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| gnani_mcp-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for gnani_mcp-0.2.1-py3-none-any.whl |
Total release size: 87.6 kB
Release files / gnani_mcp-0.2.1.tar.gz
| Download URL | gnani_mcp-0.2.1.tar.gz |
|---|---|
| Size | 40.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f706004f1be33fa054de95b2660b9e79dbe4c2fc3608b9a68019a405b05537ca
|
|
BLAKE2b-256 checksum How to use checksums |
4a5c33e0dae4a58ff91c2ab00c83a71083c7a28d22b4cb2cfc1c80b78d48cca8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logRelease files / gnani_mcp-0.2.1-py3-none-any.whl
| Download URL | gnani_mcp-0.2.1-py3-none-any.whl |
|---|---|
| Size | 47.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
82111243ac5a952edfa576576239fd5be1ad2dbd86a579937ac921beee5bcff0
|
|
BLAKE2b-256 checksum How to use checksums |
38882d30b665ecd80ff8b3ebbac3e0b403bff521f825dda35dfb4588d8a7a96d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logSecurity for gnani-mcp 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for gnani_mcp-0.2.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.