Skip to content

ai.masnavi/masnavi

by masnavi.ai · remote · no sign-in to list tools · v1.0.0 · published by ai.masnavi

Rumi's complete Masnavi (25,635 beyts) — search, quote, verify and explain. Free, no auth.

Changes · 1

13 tools: 1 change things and 12 only read.

Scanned Oct 21, 2026

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

claude mcp add --transport http masnavi https://masnavi.ai/mcp

Tools

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

13 tools

Changes things 1Claude Code: ask
  • verifyGiven a candidate quote attributed to Rumi's Masnavi, check whether it actually appears.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.
    Description, as the server wrote it
    Given a candidate quote attributed to Rumi's Masnavi, check whether it actually appears. Returns status='exact' (with citation), 'fuzzy' (with similar candidates), or 'not_found'. USE THIS BEFORE QUOTING RUMI to avoid hallucination.
Only reads 12Claude Code: allow
  • explainGet commentary (Persian + English) for a specific beyt of the Masnavi, attributed to a primary source (e.g.No findings

    Why it is in this group

    • The name "explain" says "explain": a word for reading.
    Description, as the server wrote it
    Get commentary (Persian + English) for a specific beyt of the Masnavi, attributed to a primary source (e.g. Abdolkarim Soroush's lectures). Returns the beyt text along with structured commentary entries. Each entry has source, author, language, body markdown, and confidence ('ai-draft' / 'reviewed' / 'verbatim'). Use this when a user asks 'what does this beyt mean' or 'what does <scholar> say about M1:1'.
  • find_sectionsFind sections (stories) by TITLE.No findings

    Why it is in this group

    • The name "find_sections" says "find": a word for reading.
    Description, as the server wrote it
    Find sections (stories) by TITLE. Exact words first (phrase, then AND-of-tokens); when NO title contains the words, falls back to MEANING matches in any language (hits carry match='meaning' + a cosine score — verify with get_section before relying on one). Each match includes `first_citation` and `last_citation` — ready-to-use canonical citations (e.g. 'M2:2608'). To read a whole multi-section story, call get_range with the FIRST match's `first_citation` as start and the LAST match's `last_citation` as end. Do NOT construct a citation from `first_beyt_global` — that is a GLOBAL index (1..25635), not a daftar-local beyt number. Example: find_sections('ابلیس معاویه', daftar=2).
  • get_ghazalFetch ONE complete ghazal of the Divan-e Shams by its canonical number (1..3230) or citation ('G1393' / 'G1393:2').No findings

    Why it is in this group

    • The name "get_ghazal" says "get": a word for reading.
    Description, as the server wrote it
    Fetch ONE complete ghazal of the Divan-e Shams by its canonical number (1..3230) or citation ('G1393' / 'G1393:2'). Returns every beyt plus prev/next ghazal numbers. Famous example: get_ghazal(1393) = «مرده بدم زنده شدم…».
  • get_rangeFetch ALL beyts between two endpoints, inclusive, grouped by section.No findings

    Why it is in this group

    • The name "get_range" says "get": a word for reading.
    Description, as the server wrote it
    Fetch ALL beyts between two endpoints, inclusive, grouped by section. Use this — NOT many calls to get_section or lookup — when a user asks for a full story, a long passage, or a sequence of beyts spanning multiple sections. Endpoints are canonical citations like 'M2:2608' and 'M2:2775', or global indices via start_global / end_global. Max range: 500 beyts.
  • get_sectionRetrieve a full section (story / بخش) with all its beyts.No findings

    Why it is in this group

    • The name "get_section" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve a full section (story / بخش) with all its beyts.
  • lookupFetch a specific beyt by its citation (e.g.No findings

    Why it is in this group

    • The name "lookup" says "lookup": a word for reading.
    Description, as the server wrote it
    Fetch a specific beyt by its citation (e.g. 'M3:1278'), by daftar+beyt number, or by global beyt index. Optionally include surrounding beyts for context.
  • random_beytReturn a randomly-selected beyt, optionally restricted to a daftar.No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Return a randomly-selected beyt, optionally restricted to a daftar.
  • search_divanFull-text search across the 34,603 beyts of the ghazals of the Divan-e Shams (Divan-e Kabir) — Rumi's lyric work, distinct from the Masnavi.No findings

    Why it is in this group

    • The name "search_divan" says "search": a word for reading.
    Description, as the server wrote it
    Full-text search across the 34,603 beyts of the ghazals of the Divan-e Shams (Divan-e Kabir) — Rumi's lyric work, distinct from the Masnavi. Returns beyts with divan citations (G{ghazal}:{beyt}, e.g. G1393:1). Use when you know the exact Persian words; use search_divan_meaning for a theme in any language.
  • search_divan_meaningSemantic search over the Divan-e Shams ghazals: given a theme, feeling, or idea in ANY language, returns the GHAZALS closest in meaning — each with its best-matching couplet as a p…No findings

    Why it is in this group

    • The name "search_divan_meaning" says "search": a word for reading.
    Description, as the server wrote it
    Semantic search over the Divan-e Shams ghazals: given a theme, feeling, or idea in ANY language, returns the GHAZALS closest in meaning — each with its best-matching couplet as a preview and a cosine score. Both couplet-level and whole-ghazal vectors are searched, so a ghazal whose overall theme matches is found even when no single couplet does. Fetch a full ghazal with get_ghazal. status='unavailable' means the index is not built — fall back to search_divan.
  • search_meaningSemantic search: find the beyts closest in MEANING to the query, in ANY language — English, Persian, Spanish, Turkish, Arabic, … .No findings

    Why it is in this group

    • The name "search_meaning" says "search": a word for reading.
    Description, as the server wrote it
    Semantic search: find the beyts closest in MEANING to the query, in ANY language — English, Persian, Spanish, Turkish, Arabic, … . Use this when you have a theme, feeling, or idea rather than exact Persian words (e.g. 'feeling separated from your origin' → M1:1). Each hit carries a cosine-similarity score. status='unavailable' means the vector index is not built yet — fall back to `search`.
  • table_of_contentsBrowse the Masnavi's section list.No findings

    Why it is in this group

    • The description's first verb is "browse": a word for reading.
    Description, as the server wrote it
    Browse the Masnavi's section list. Returns titled sections per daftar with beyt counts and ranges.

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.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http masnavi https://masnavi.ai/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": [
      "mcp__masnavi__search",
      "mcp__masnavi__search_meaning",
      "mcp__masnavi__lookup",
      "mcp__masnavi__get_section",
      "mcp__masnavi__table_of_contents",
      "mcp__masnavi__random_beyt",
      "mcp__masnavi__get_range",
      "mcp__masnavi__find_sections",
      "mcp__masnavi__explain",
      "mcp__masnavi__search_divan",
      "mcp__masnavi__search_divan_meaning",
      "mcp__masnavi__get_ghazal"
    ],
    "ask": [
      "mcp__masnavi__verify"
    ],
    "deny": []
  }
}

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 masnavi. Review it before you use it.