Skip to main content

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 include detected_language_code.
  • format adds codemix (English words stay Latin) and, on REST only, transliterate (Latin-letter output). When format is omitted v3.0 picks a style per request (digits for a single hi-IN/en-IN) — pass format explicitly to keep v2.5-style output.
  • Context hints: keyterms, topic, speaker_names, and (REST only) previous_text. On Batch only one of keyterms, topic, topic + keyterms, or speaker_names is accepted, and topic must 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

MIT

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)

Source distribution for gnani-mcp 0.2.1
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)

Table of built distributions (wheels) for gnani-mcp 0.2.1
File Interpreter ABI Platform Actions
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 log

Release 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 log

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

Select from 2 files

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 log

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

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page