Listen to Sadhu
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Read-only semantic search over Vedic scripture verses, commentaries, and recorded lectures.
| Author | app.listentosadhu |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 345 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Listen to Sadhu": {
"url": "https://mcp.listentosadhu.app/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (21)
author_listread-only destructiveList all authors.
Parameters:
lang— string — Slim name to this locale.limit— number — Max items (default 100, max 500).cursor— string — Pagination cursor (last id).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
author_resolveread-only destructiveFind a author by name (fuzzy).
Parameters:
query(required) — string — Name fragment.lang— string — Result language.limit— number — Max matches (default 5, max 20).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
document_getread-only destructiveGet a document (commentary/prose_chapter/letter) by id.
Parameters:
id(required) — string — doc_id.lang— string — Slim bodies to this locale.
Hints: read-only yes · destructive yes · idempotent no · open-world yes
document_listread-only destructiveList documents at a reference / in a book. A verse's purport = document_list(source, tokens, kind:"commentary").
Parameters:
source(required) — string — Book code / source_id.kind— string — commentary|prose_chapter|letter.lang— string — Slim bodies to this locale.limit— number — Max items (default 100, max 500).cursor— string — Pagination cursor (last doc id).tokens— string — A specific reference; omit for the whole book.author_id— string — Commentator.
Hints: read-only yes · destructive yes · idempotent no · open-world yes
excerpt_preparedestructiveGenerate (or fetch, if cached) the audio clip for a lecture passage and return its playable URL. This is the excerpt player's Play action — it is called for you by the player UI on demand. Agents should use excerpt_render to show the player, not call this directly. Idempotent: same track+window returns the same cached clip.
Parameters:
track_id(required) — string — track_id.start_ms(required) — number — Passage start (ms).end_ms(required) — number — Passage end (ms), > start_ms; span <= 600000.
Hints: read-only no · destructive yes · idempotent yes · open-world yes
excerpt_renderdestructiveLet the user HEAR a lecture passage inline. Call this when the user wants to LISTEN to a specific moment in a track — e.g. from a search(types:["track"]) hit, pass its track_id plus start_ms/end_ms. Renders an inline audio player that generates the clip on demand (public share-audio, max 10 minutes).
Parameters:
track_id(required) — string — track_id (from a search track hit or track_list).start_ms(required) — number — Passage start (ms).end_ms(required) — number — Passage end (ms), > start_ms; span <= 600000 (10 min).lang— string — Transcript language (ISO-639-1).
Hints: read-only no · destructive yes · idempotent yes · open-world yes
location_listread-only destructiveList all locations.
Parameters:
lang— string — Slim name to this locale.limit— number — Max items (default 100, max 500).cursor— string — Pagination cursor (last id).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
location_resolveread-only destructiveFind a location by name (fuzzy).
Parameters:
query(required) — string — Name fragment.lang— string — Result language.limit— number — Max matches (default 5, max 20).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
media_renderread-only destructiveShow/play an existing corpus VIDEO clip inline. Call this when the user wants to WATCH a clip found via search(types:["media"]) — pass the hit's media_id. Renders an inline video player.
Parameters:
id(required) — string — Media clip item_id (from a search media hit's media_id).lang— string — Transcript language (ISO-639-1).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
searchread-only destructiveSemantic + lexical search over the corpus. Returns verses, documents, track passages and titles matching a natural-language query, each with the id needed to fetch the full record (verse_id→verse_get, document_id→document_get, track_id+start_ms/end_ms→transcript_window; media_id→media_render to play the clip). Every filter is optional. Use min_score to drop weak matches.
Parameters:
query(required) — string — Natural-language query.kind— string — Document (commentary|prose_chapter|letter) or track (lecture|conversation) subtype.lang— string — Result language (ISO-639-1).limit— number — Max results (default 10, max 50).types— array — Subset of verse|document|track|title|media (default all). A `media` hit is a short video clip playable via media_render.source— string — Restrict to a book ("BG" / source_id).tokens— string — With source, restrict to a reference. A bare chapter number covers the WHOLE chapter ("7" = all of BG ch 7; "5.5" = SB canto 5 ch 5); add the verse for one verse ("7.1"). For tracks it means tracks citing that chapter/verse.date_to— string — Track date upper bound YYYY-MM-DD.author_id— string — Commentator (document) / speaker (track).date_from— string — Track date lower bound YYYY-MM-DD.min_score— number — Drop hits scoring below this cosine floor (0..1, default 0 = no floor).location_id— string — Track location.
Hints: read-only yes · destructive yes · idempotent no · open-world yes
source_getread-only destructiveGet one book by id or code ("source_…" or "BG"/"БГ").
Parameters:
id— string — source_id.code— string — Book code, e.g. "BG" / "БГ".lang— string — Slim code/name to this locale.
Hints: read-only yes · destructive yes · idempotent no · open-world yes
source_listread-only destructiveList all books (Caitanya-caritāmṛta is three sources).
Parameters:
lang— string — Slim code/name to this locale.limit— number — Max items (default 100, max 500).cursor— string — Pagination cursor (last source id).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
source_resolveread-only destructiveFind a book by name (fuzzy): "gita", "бхагаватам", "CC Madhya".
Parameters:
query(required) — string — Book name or code fragment.lang— string — Result language.limit— number — Max matches (default 5, max 20).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
track_getread-only destructiveGet a track (lecture/conversation): metadata, cited references, transcript/pdf availability.
Parameters:
track_id(required) — string — track_id.lang— string — Metadata language.
Hints: read-only yes · destructive yes · idempotent no · open-world yes
track_listread-only destructiveList tracks, filterable by reference (source[+tokens] = tracks citing it), author/location/kind/date/lang. No filter ⇒ recent tracks (date desc).
Parameters:
kind— string — lecture|conversation.lang— string — Has a transcript in this language.limit— number — Max items (default 50, max 200).cursor— string — Pagination cursor.source— string — Book code / source_id — tracks citing this book.tokens— string — With source, filter to tracks citing this reference. A bare chapter number covers the WHOLE chapter ("7" = any BG 7.x lecture); add the verse for one verse ("7.1").date_to— string — YYYY-MM-DD.author_id— string — Speaker.date_from— string — YYYY-MM-DD.location_id— string — Location.
Hints: read-only yes · destructive yes · idempotent no · open-world yes
transcript_windowread-only destructiveRead a track's transcript around a time window (from a search track hit or track_list). Widen with pad_ms.
Parameters:
track_id(required) — string — track_id.start_ms(required) — number — Window start (ms).end_ms(required) — number — Window end (ms), >= start_ms.lang— string — Transcript language.limit— number — Max chunks (default 10, max 50).pad_ms— number — Extra ms each side (default 0).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
verse_getread-only destructiveFetch a verse's raw fields for your own reasoning (NOT for display — to show a verse to the user, use verse_render). Returns original script + transliteration as line arrays; with lang, also the canonical translation inline plus an `alternatives` manifest of other translation kinds in that language (fetch their text with verse_translation, word-by-word with verse_synonyms). Address by ref ("BG 2.13"), source+tokens, or verse id.
Parameters:
id— string — verse_id.ref— string — Reference string, e.g. "BG 2.13".lang— string — Answer language. Set it to get the canonical translation + alternatives manifest.source— string — Book code / source_id (with tokens).tokens— string — Position within the book (with source).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
verse_listread-only destructiveList the verses of a book / chapter. Skips .0 chapter summaries; collapses merged verses into one item with a covers span.
Parameters:
source(required) — string — Book code / source_id.lang— string — Preview language.limit— number — Max items (default 100, max 500).cursor— string — Pagination cursor (last tokens).tokens— string — Chapter/canto prefix, e.g. "2" or "5.5".
Hints: read-only yes · destructive yes · idempotent no · open-world yes
verse_renderread-only destructiveShow a verse to the user. THE DEFAULT way to display/read a scripture verse: renders an inline card with the original script (centered), transliteration in the requested language, the word-by-word, and the translation — all at once. Use this whenever the user asks to see, read, open, or quote a specific verse ("покажи БГ 2.13", "read Bhagavad-gita 2.13"). The other verse_* tools are for fetching raw data; for DISPLAY prefer this one. Address by ref ("BG 2.13"), source+tokens, or id; lang sets the script + translation language.
Parameters:
lang(required) — string — Display language, e.g. "en", "ru".id— string — verse_id.ref— string — Reference string, e.g. "BG 2.13".kind— string — Translation kind; default "canonical".source— string — Book code / source_id (with tokens).tokens— string — Position within the book (with source).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
verse_synonymsread-only destructiveFetch the word-by-word ("Synonyms") as a raw {word, meaning} array for one verse translation (data — verse_render already shows the word-by-word inside the card). Defaults to the canonical rendering; pass `kind` for an alternative.
Parameters:
lang(required) — string — Language of the glosses, e.g. "en", "ru".id— string — verse_id.ref— string — Reference string, e.g. "BG 2.13".kind— string — Translation kind; default "canonical".source— string — Book code / source_id (with tokens).tokens— string — Position within the book (with source).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
verse_translationread-only destructiveFetch the text of ONE translation of a verse (data, not a card — to display a verse use verse_render). Defaults to the canonical (kind=canonical); pass a `kind` from verse_get's `alternatives` manifest to fetch a specific rendering.
Parameters:
lang(required) — string — Translation language, e.g. "en", "ru".id— string — verse_id.ref— string — Reference string, e.g. "BG 2.13".kind— string — Translation kind; default "canonical".source— string — Book code / source_id (with tokens).tokens— string — Position within the book (with source).
Hints: read-only yes · destructive yes · idempotent no · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.