Skip to content

Listen to Sadhu

by listentosadhu.app · remote · no sign-in to list tools · v1.0.1 · published by app.listentosadhu

Read-only semantic search over Vedic scripture verses, commentaries, and recorded lectures.

Deletes · 21

21 tools: 21 can delete or cancel things.

Scanned Oct 21, 2026

34 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http corpus https://mcp.listentosadhu.app/mcp

Findings

Matches of fixed checks, with the text they matched.

34 warn
  • The server marks "author_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_list" says "list": a word for reading.

    What this check looks for
  • The server marks "author_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_list" says "list": a word for reading.

    What this check looks for
  • The server marks "author_resolve" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_resolve" says "resolve": a word for reading.

    What this check looks for
  • The server marks "author_resolve" destructive (destructiveHint: true), and its name says "resolve", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_resolve" says "resolve": a word for reading.

    What this check looks for
  • The server marks "document_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_get" says "get": a word for reading.

    What this check looks for
  • The server marks "document_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_get" says "get": a word for reading.

    What this check looks for
Show 28 more findings
  • The server marks "document_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_list" says "list": a word for reading.

    What this check looks for
  • The server marks "document_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_list" says "list": a word for reading.

    What this check looks for
  • The server marks "location_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_list" says "list": a word for reading.

    What this check looks for
  • The server marks "location_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_list" says "list": a word for reading.

    What this check looks for
  • The server marks "location_resolve" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_resolve" says "resolve": a word for reading.

    What this check looks for
  • The server marks "location_resolve" destructive (destructiveHint: true), and its name says "resolve", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_resolve" says "resolve": a word for reading.

    What this check looks for
  • The server marks "media_render" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "show": a word for reading.

    What this check looks for
  • Warnsearch

    The server marks "search" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "search" says "search": a word for reading.

    What this check looks for
  • Warnsearch

    The server marks "search" destructive (destructiveHint: true), and its name says "search", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "search" says "search": a word for reading.

    What this check looks for
  • The server marks "source_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_get" says "get": a word for reading.

    What this check looks for
  • The server marks "source_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_get" says "get": a word for reading.

    What this check looks for
  • The server marks "source_get" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_get" says "get": a word for reading.

    What this check looks for
  • The server marks "source_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_list" says "list": a word for reading.

    What this check looks for
  • The server marks "source_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_list" says "list": a word for reading.

    What this check looks for
  • The server marks "source_resolve" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_resolve" says "resolve": a word for reading.

    What this check looks for
  • The server marks "source_resolve" destructive (destructiveHint: true), and its name says "resolve", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_resolve" says "resolve": a word for reading.

    What this check looks for
  • The server marks "track_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_get" says "get": a word for reading.

    What this check looks for
  • The server marks "track_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_get" says "get": a word for reading.

    What this check looks for
  • The server marks "track_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_list" says "list": a word for reading.

    What this check looks for
  • The server marks "track_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_list" says "list": a word for reading.

    What this check looks for
  • The server marks "transcript_window" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "read": a word for reading.

    What this check looks for
  • The server marks "verse_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_get" says "get": a word for reading.

    What this check looks for
  • The server marks "verse_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_get" says "get": a word for reading.

    What this check looks for
  • The server marks "verse_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_list" says "list": a word for reading.

    What this check looks for
  • The server marks "verse_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_list" says "list": a word for reading.

    What this check looks for
  • The server marks "verse_render" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "show": a word for reading.

    What this check looks for
  • The server marks "verse_synonyms" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.

    What this check looks for
  • The server marks "verse_translation" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

21 tools

Deletes or cancels 21Claude Code: deny
  • author_listList all authors.2 findings

    Why it is in this group

    • The name "author_list" says "list": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "author_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_list" says "list": a word for reading.

      What this check looks for
    • Warn

      The server marks "author_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_list" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    List all authors.

    Annotations the server declares

    • title: List authors
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • author_resolveFind a author by name (fuzzy).2 findings

    Why it is in this group

    • The name "author_resolve" says "resolve": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "author_resolve" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_resolve" says "resolve": a word for reading.

      What this check looks for
    • Warn

      The server marks "author_resolve" destructive (destructiveHint: true), and its name says "resolve", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "author_resolve" says "resolve": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Find a author by name (fuzzy).

    Annotations the server declares

    • title: Find author
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • document_getGet a document (commentary/prose_chapter/letter) by id.2 findings

    Why it is in this group

    • The name "document_get" says "get": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "document_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_get" says "get": a word for reading.

      What this check looks for
    • Warn

      The server marks "document_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_get" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Get a document (commentary/prose_chapter/letter) by id.

    Annotations the server declares

    • title: Get document
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • document_listList documents at a reference / in a book.2 findings

    Why it is in this group

    • The name "document_list" says "list": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "document_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_list" says "list": a word for reading.

      What this check looks for
    • Warn

      The server marks "document_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "document_list" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    List documents at a reference / in a book. A verse's purport = document_list(source, tokens, kind:"commentary").

    Annotations the server declares

    • title: List documents
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • excerpt_prepareGenerate (or fetch, if cached) the audio clip for a lecture passage and return its playable URL.No findings

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Generate (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.

    Annotations the server declares

    • title: Prepare excerpt audio
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
  • excerpt_renderLet the user HEAR a lecture passage inline.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Let 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).

    Annotations the server declares

    • title: Play excerpt
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
  • location_listList all locations.2 findings

    Why it is in this group

    • The name "location_list" says "list": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "location_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_list" says "list": a word for reading.

      What this check looks for
    • Warn

      The server marks "location_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_list" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    List all locations.

    Annotations the server declares

    • title: List locations
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • location_resolveFind a location by name (fuzzy).2 findings

    Why it is in this group

    • The name "location_resolve" says "resolve": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "location_resolve" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_resolve" says "resolve": a word for reading.

      What this check looks for
    • Warn

      The server marks "location_resolve" destructive (destructiveHint: true), and its name says "resolve", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "location_resolve" says "resolve": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Find a location by name (fuzzy).

    Annotations the server declares

    • title: Find location
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • media_renderShow/play an existing corpus VIDEO clip inline.1 finding

    Why it is in this group

    • The description's first verb is "show": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "media_render" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "show": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Show/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.

    Annotations the server declares

    • title: Play video
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • source_getGet one book by id or code ("source_…" or "BG"/"БГ").3 findings

    Why it is in this group

    • The name "source_get" says "get": a word for reading.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "source_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_get" says "get": a word for reading.

      What this check looks for
    • Warn

      The server marks "source_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_get" says "get": a word for reading.

      What this check looks for
    • Warn

      The server marks "source_get" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_get" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Get one book by id or code ("source_…" or "BG"/"БГ").

    Annotations the server declares

    • title: Get book
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • source_listList all books (Caitanya-caritāmṛta is three sources).2 findings

    Why it is in this group

    • The name "source_list" says "list": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "source_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_list" says "list": a word for reading.

      What this check looks for
    • Warn

      The server marks "source_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_list" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    List all books (Caitanya-caritāmṛta is three sources).

    Annotations the server declares

    • title: List books
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • source_resolveFind a book by name (fuzzy): "gita", "бхагаватам", "CC Madhya".2 findings

    Why it is in this group

    • The name "source_resolve" says "resolve": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "source_resolve" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_resolve" says "resolve": a word for reading.

      What this check looks for
    • Warn

      The server marks "source_resolve" destructive (destructiveHint: true), and its name says "resolve", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "source_resolve" says "resolve": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Find a book by name (fuzzy): "gita", "бхагаватам", "CC Madhya".

    Annotations the server declares

    • title: Find book
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • track_getGet a track (lecture/conversation): metadata, cited references, transcript/pdf availability.2 findings

    Why it is in this group

    • The name "track_get" says "get": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "track_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_get" says "get": a word for reading.

      What this check looks for
    • Warn

      The server marks "track_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_get" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Get a track (lecture/conversation): metadata, cited references, transcript/pdf availability.

    Annotations the server declares

    • title: Get lecture
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • track_listList tracks, filterable by reference (source[+tokens] = tracks citing it), author/location/kind/date/lang.2 findings

    Why it is in this group

    • The name "track_list" says "list": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "track_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_list" says "list": a word for reading.

      What this check looks for
    • Warn

      The server marks "track_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "track_list" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    List tracks, filterable by reference (source[+tokens] = tracks citing it), author/location/kind/date/lang. No filter ⇒ recent tracks (date desc).

    Annotations the server declares

    • title: List lectures
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • transcript_windowRead a track's transcript around a time window (from a search track hit or track_list).1 finding

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "transcript_window" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "read": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Read a track's transcript around a time window (from a search track hit or track_list). Widen with pad_ms.

    Annotations the server declares

    • title: Read transcript
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • verse_getFetch a verse's raw fields for your own reasoning (NOT for display — to show a verse to the user, use verse_render).2 findings

    Why it is in this group

    • The name "verse_get" says "get": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "verse_get" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_get" says "get": a word for reading.

      What this check looks for
    • Warn

      The server marks "verse_get" destructive (destructiveHint: true), and its name says "get", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_get" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Fetch 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.

    Annotations the server declares

    • title: Get verse
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • verse_listList the verses of a book / chapter.2 findings

    Why it is in this group

    • The name "verse_list" says "list": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "verse_list" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_list" says "list": a word for reading.

      What this check looks for
    • Warn

      The server marks "verse_list" destructive (destructiveHint: true), and its name says "list", a word for reading.

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The name "verse_list" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    List the verses of a book / chapter. Skips .0 chapter summaries; collapses merged verses into one item with a covers span.

    Annotations the server declares

    • title: List verses
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • verse_renderShow a verse to the user.1 finding

    Why it is in this group

    • The description's first verb is "show": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "verse_render" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "show": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Show 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.

    Annotations the server declares

    • title: Show verse
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • verse_synonymsFetch 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).1 finding

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "verse_synonyms" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Fetch 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.

    Annotations the server declares

    • title: Word-by-word
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • verse_translationFetch the text of ONE translation of a verse (data, not a card — to display a verse use verse_render).1 finding

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    • The server marks it destructive (destructiveHint: true).
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "verse_translation" both read-only (readOnlyHint: true) and destructive (destructiveHint: true).

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Fetch 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.

    Annotations the server declares

    • title: Get translation
    • readOnlyHint: true
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http corpus https://mcp.listentosadhu.app/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [],
    "ask": [],
    "deny": [
      "mcp__corpus__author_list",
      "mcp__corpus__author_resolve",
      "mcp__corpus__document_get",
      "mcp__corpus__document_list",
      "mcp__corpus__excerpt_prepare",
      "mcp__corpus__excerpt_render",
      "mcp__corpus__location_list",
      "mcp__corpus__location_resolve",
      "mcp__corpus__media_render",
      "mcp__corpus__search",
      "mcp__corpus__source_get",
      "mcp__corpus__source_list",
      "mcp__corpus__source_resolve",
      "mcp__corpus__track_get",
      "mcp__corpus__track_list",
      "mcp__corpus__transcript_window",
      "mcp__corpus__verse_get",
      "mcp__corpus__verse_list",
      "mcp__corpus__verse_render",
      "mcp__corpus__verse_synonyms",
      "mcp__corpus__verse_translation"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as corpus. Review it before you use it.