masnavi
Rumi's complete Masnavi (25,635 beyts) — search, quote, verify and explain. Free, no auth.
Should I use this
Quality & Safety
Findings (1)
- LOWin random_beyt
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"masnavi": {
"url": "https://masnavi.ai/mcp"
}
}
}Remote endpoints
https://masnavi.ai/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢search(query, daftar, limit, offset)
Full-text search across the Masnavi. Returns beyts that contain the query terms, ranked by relevance. Useful for finding where a theme, word, or phrase appears.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Persian text to search for",
"title": "Query",
"type": "string"
},
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Restrict to a single daftar (1-6)",
"title": "Daftar"
},
"limit": {
"default": 10,
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"title": "Offset",
"type": "integer"
}
},
"required": [
"query"
],
"title": "tool_searchArguments"
}Output Schema
{
"type": "object",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"total": {
"title": "Total",
"type": "integer"
},
"results": {
"items": {
"$ref": "#/$defs/SearchHit"
},
"title": "Results",
"type": "array"
},
"match": {
"default": "exact",
"title": "Match",
"type": "string"
}
},
"required": [
"query",
"total",
"results"
],
"$defs": {
"SearchHit": {
"properties": {
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
},
"rank": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Rank"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "SearchHit",
"type": "object"
}
},
"title": "SearchResponse"
}🟢search_meaning(query, daftar, limit)
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`.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "What the verse should MEAN, in any language",
"title": "Query",
"type": "string"
},
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Restrict to a single daftar (1-6)",
"title": "Daftar"
},
"limit": {
"default": 10,
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "tool_search_meaningArguments"
}Output Schema
{
"type": "object",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"status": {
"default": "ok",
"description": "'ok' | 'unavailable' (index not built / no key) | 'error'",
"title": "Status",
"type": "string"
},
"total_indexed": {
"default": 0,
"title": "Total Indexed",
"type": "integer"
},
"results": {
"default": [],
"items": {
"$ref": "#/$defs/MeaningHit"
},
"title": "Results",
"type": "array"
},
"note": {
"default": "",
"title": "Note",
"type": "string"
}
},
"required": [
"query"
],
"$defs": {
"MeaningHit": {
"properties": {
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
},
"score": {
"description": "Cosine similarity between query and beyt, 0..1",
"title": "Score",
"type": "number"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug",
"score"
],
"title": "MeaningHit",
"type": "object"
}
},
"title": "MeaningSearchResponse"
}🟢lookup(citation, daftar, beyt_in_daftar, beyt_global, before, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Citation like 'M3:1278' or 'g:7421'",
"title": "Citation"
},
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
},
"beyt_in_daftar": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Beyt In Daftar"
},
"beyt_global": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Beyt Global"
},
"before": {
"default": 0,
"maximum": 20,
"minimum": 0,
"title": "Before",
"type": "integer"
},
"after": {
"default": 0,
"maximum": 20,
"minimum": 0,
"title": "After",
"type": "integer"
}
},
"title": "tool_lookupArguments"
}Output Schema
{
"type": "object",
"properties": {
"primary": {
"$ref": "#/$defs/Beyt"
},
"context_before": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Context Before",
"type": "array"
},
"context_after": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Context After",
"type": "array"
}
},
"required": [
"primary"
],
"$defs": {
"Beyt": {
"properties": {
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt",
"type": "object"
}
},
"title": "LookupResponse"
}🟢verify(text, fuzzy_threshold)
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.
Input Schema
{
"type": "object",
"properties": {
"text": {
"description": "Candidate Rumi quote in Persian",
"title": "Text",
"type": "string"
},
"fuzzy_threshold": {
"default": 0.82,
"maximum": 1,
"minimum": 0.5,
"title": "Fuzzy Threshold",
"type": "number"
}
},
"required": [
"text"
],
"title": "tool_verifyArguments"
}Output Schema
{
"type": "object",
"properties": {
"status": {
"description": "'exact', 'fuzzy', or 'not_found'",
"title": "Status",
"type": "string"
},
"matches": {
"default": [],
"items": {
"$ref": "#/$defs/VerifyMatch"
},
"title": "Matches",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"query_normalized": {
"default": "",
"title": "Query Normalized",
"type": "string"
}
},
"required": [
"status"
],
"$defs": {
"VerifyMatch": {
"properties": {
"citation": {
"title": "Citation",
"type": "string"
},
"mesra1": {
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"title": "Mesra2",
"type": "string"
},
"similarity": {
"title": "Similarity",
"type": "number"
},
"match_kind": {
"description": "'exact' or 'fuzzy'",
"title": "Match Kind",
"type": "string"
}
},
"required": [
"citation",
"mesra1",
"mesra2",
"similarity",
"match_kind"
],
"title": "VerifyMatch",
"type": "object"
}
},
"title": "VerifyResponse"
}🟢get_section(section_id, slug)
Retrieve a full section (story / بخش) with all its beyts.
Input Schema
{
"type": "object",
"properties": {
"section_id": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Section Id"
},
"slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Stable URL slug",
"title": "Slug"
}
},
"title": "tool_get_sectionArguments"
}Output Schema
{
"type": "object",
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"first_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "First Beyt Global"
},
"last_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Beyt Global"
},
"beyt_count": {
"default": 0,
"title": "Beyt Count",
"type": "integer"
},
"beyts": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Beyts",
"type": "array"
}
},
"required": [
"id",
"slug",
"title_fa",
"daftar"
],
"$defs": {
"Beyt": {
"properties": {
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt",
"type": "object"
}
},
"title": "SectionDetail"
}⚪table_of_contents(daftar)
Browse the Masnavi's section list. Returns titled sections per daftar with beyt counts and ranges.
Input Schema
{
"type": "object",
"properties": {
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
}
},
"title": "tool_tocArguments"
}Output Schema
{
"type": "object",
"properties": {
"daftar": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
},
"nodes": {
"items": {
"$ref": "#/$defs/TocNode"
},
"title": "Nodes",
"type": "array"
}
},
"required": [
"nodes"
],
"$defs": {
"TocNode": {
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"first_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "First Beyt Global"
},
"last_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Beyt Global"
},
"beyt_count": {
"default": 0,
"title": "Beyt Count",
"type": "integer"
},
"children": {
"default": [],
"items": {
"$ref": "#/$defs/TocNode"
},
"title": "Children",
"type": "array"
}
},
"required": [
"id",
"slug",
"title_fa",
"daftar"
],
"title": "TocNode",
"type": "object"
}
},
"title": "TocResponse"
}⚪random_beyt(daftar)
Return a randomly-selected beyt, optionally restricted to a daftar.
Input Schema
{
"type": "object",
"properties": {
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
}
},
"title": "tool_randomArguments"
}Output Schema
{
"type": "object",
"properties": {
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt"
}🟢get_range(start, end, start_global, end_global)
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.
Input Schema
{
"type": "object",
"properties": {
"start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Start citation, e.g. 'M2:2608'",
"title": "Start"
},
"end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "End citation, e.g. 'M2:2775'",
"title": "End"
},
"start_global": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Start Global"
},
"end_global": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "End Global"
}
},
"title": "tool_rangeArguments"
}Output Schema
{
"type": "object",
"properties": {
"start_citation": {
"title": "Start Citation",
"type": "string"
},
"end_citation": {
"title": "End Citation",
"type": "string"
},
"total_beyts": {
"title": "Total Beyts",
"type": "integer"
},
"total_sections": {
"title": "Total Sections",
"type": "integer"
},
"sections": {
"default": [],
"items": {
"$ref": "#/$defs/RangeSection"
},
"title": "Sections",
"type": "array"
}
},
"required": [
"start_citation",
"end_citation",
"total_beyts",
"total_sections"
],
"$defs": {
"Beyt": {
"properties": {
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt",
"type": "object"
},
"RangeSection": {
"properties": {
"section_id": {
"title": "Section Id",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"order_in_parent": {
"title": "Order In Parent",
"type": "integer"
},
"beyts": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Beyts",
"type": "array"
}
},
"required": [
"section_id",
"slug",
"title_fa",
"daftar",
"order_in_parent"
],
"title": "RangeSection",
"type": "object"
}
},
"title": "RangeResponse"
}🟢find_sections(query, daftar, limit)
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).
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "story title words (Persian) or a description of the story in any language",
"title": "Query",
"type": "string"
},
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
},
"limit": {
"default": 30,
"maximum": 100,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "tool_find_sectionsArguments"
}Output Schema
{
"type": "object",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"total": {
"title": "Total",
"type": "integer"
},
"sections": {
"default": [],
"items": {
"$ref": "#/$defs/SectionMatch"
},
"title": "Sections",
"type": "array"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"query",
"total"
],
"$defs": {
"SectionMatch": {
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"order_in_parent": {
"title": "Order In Parent",
"type": "integer"
},
"first_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "First Beyt Global"
},
"last_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Beyt Global"
},
"first_citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Citation"
},
"last_citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Citation"
},
"beyt_count": {
"default": 0,
"title": "Beyt Count",
"type": "integer"
},
"match": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Match"
},
"score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Score"
}
},
"required": [
"id",
"slug",
"title_fa",
"daftar",
"order_in_parent"
],
"title": "SectionMatch",
"type": "object"
}
},
"title": "FindSectionsResponse"
}🟢explain(citation)
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'.
Input Schema
{
"type": "object",
"properties": {
"citation": {
"description": "Citation like 'M1:1' or 'M3:1278' or 'g:7421'.",
"title": "Citation",
"type": "string"
}
},
"required": [
"citation"
],
"title": "tool_explainArguments"
}🟢search_divan(query, limit, offset)
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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Persian text to search for",
"title": "Query",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"title": "Offset",
"type": "integer"
}
},
"required": [
"query"
],
"title": "tool_search_divanArguments"
}Output Schema
{
"type": "object",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"total": {
"title": "Total",
"type": "integer"
},
"results": {
"items": {
"$ref": "#/$defs/DivanSearchHit"
},
"title": "Results",
"type": "array"
},
"match": {
"default": "exact",
"title": "Match",
"type": "string"
}
},
"required": [
"query",
"total",
"results"
],
"$defs": {
"DivanSearchHit": {
"properties": {
"citation": {
"description": "Canonical divan citation, e.g. 'G1393:1'",
"title": "Citation",
"type": "string"
},
"ghazal": {
"title": "Ghazal",
"type": "integer"
},
"beyt_in_ghazal": {
"title": "Beyt In Ghazal",
"type": "integer"
},
"mesra1": {
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"title": "Mesra2",
"type": "string"
},
"ghazal_title": {
"title": "Ghazal Title",
"type": "string"
},
"rank": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Rank"
}
},
"required": [
"citation",
"ghazal",
"beyt_in_ghazal",
"mesra1",
"mesra2",
"ghazal_title"
],
"title": "DivanSearchHit",
"type": "object"
}
},
"title": "DivanSearchResponse"
}🟢search_divan_meaning(query, limit)
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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "What the ghazal should be ABOUT, in any language",
"title": "Query",
"type": "string"
},
"limit": {
"default": 8,
"maximum": 30,
"minimum": 1,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "tool_search_divan_meaningArguments"
}Output Schema
{
"type": "object",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"status": {
"default": "ok",
"title": "Status",
"type": "string"
},
"total_indexed_beyts": {
"default": 0,
"title": "Total Indexed Beyts",
"type": "integer"
},
"total_indexed_ghazals": {
"default": 0,
"title": "Total Indexed Ghazals",
"type": "integer"
},
"results": {
"default": [],
"items": {
"$ref": "#/$defs/DivanMeaningHit"
},
"title": "Results",
"type": "array"
},
"note": {
"default": "",
"title": "Note",
"type": "string"
}
},
"required": [
"query"
],
"$defs": {
"DivanMeaningHit": {
"properties": {
"ghazal": {
"title": "Ghazal",
"type": "integer"
},
"citation": {
"title": "Citation",
"type": "string"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
},
"beyt_count": {
"title": "Beyt Count",
"type": "integer"
},
"score": {
"description": "Best cosine similarity for this ghazal, 0..1",
"title": "Score",
"type": "number"
},
"match_kind": {
"description": "'beyt' (a couplet matched), 'ghazal' (the whole ghazal's theme matched), or 'both'",
"title": "Match Kind",
"type": "string"
},
"best_beyt": {
"anyOf": [
{
"$ref": "#/$defs/GhazalBeyt"
},
{
"type": "null"
}
],
"default": null
},
"best_beyt_score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Best Beyt Score"
}
},
"required": [
"ghazal",
"citation",
"slug",
"title_fa",
"beyt_count",
"score",
"match_kind"
],
"title": "DivanMeaningHit",
"type": "object"
},
"GhazalBeyt": {
"properties": {
"citation": {
"description": "Canonical divan citation, e.g. 'G1393:1'",
"title": "Citation",
"type": "string"
},
"ghazal": {
"title": "Ghazal",
"type": "integer"
},
"beyt_in_ghazal": {
"title": "Beyt In Ghazal",
"type": "integer"
},
"mesra1": {
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"title": "Mesra2",
"type": "string"
}
},
"required": [
"citation",
"ghazal",
"beyt_in_ghazal",
"mesra1",
"mesra2"
],
"title": "GhazalBeyt",
"type": "object"
}
},
"title": "DivanMeaningResponse"
}🟢get_ghazal(number, citation)
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) = «مرده بدم زنده شدم…».
Input Schema
{
"type": "object",
"properties": {
"number": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Ghazal number, e.g. 1393",
"title": "Number"
},
"citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Divan citation like 'G1393' or 'G1393:2'",
"title": "Citation"
}
},
"title": "tool_get_ghazalArguments"
}Output Schema
{
"type": "object",
"properties": {
"ghazal": {
"description": "Canonical ghazal number, 1..3230",
"title": "Ghazal",
"type": "integer"
},
"citation": {
"description": "'G{n}' — cites the whole ghazal",
"title": "Citation",
"type": "string"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
},
"beyt_count": {
"title": "Beyt Count",
"type": "integer"
},
"excerpt": {
"default": "",
"description": "First hemistich of the ghazal",
"title": "Excerpt",
"type": "string"
},
"beyts": {
"default": [],
"items": {
"$ref": "#/$defs/GhazalBeyt"
},
"title": "Beyts",
"type": "array"
},
"prev_ghazal": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Prev Ghazal"
},
"next_ghazal": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Next Ghazal"
}
},
"required": [
"ghazal",
"citation",
"slug",
"title_fa",
"beyt_count"
],
"$defs": {
"GhazalBeyt": {
"properties": {
"citation": {
"description": "Canonical divan citation, e.g. 'G1393:1'",
"title": "Citation",
"type": "string"
},
"ghazal": {
"title": "Ghazal",
"type": "integer"
},
"beyt_in_ghazal": {
"title": "Beyt In Ghazal",
"type": "integer"
},
"mesra1": {
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"title": "Mesra2",
"type": "string"
}
},
"required": [
"citation",
"ghazal",
"beyt_in_ghazal",
"mesra1",
"mesra2"
],
"title": "GhazalBeyt",
"type": "object"
}
},
"title": "GhazalDetail"
}Recommended Prompts
searchsearchget_sectionget_sectionsearchget_sectionCommunity
Evidence