{"name":"ai.masnavi/masnavi","slug":"masnavi","title":null,"description":"Rumi's complete Masnavi (25,635 beyts) — search, quote, verify and explain. Free, no auth.","url":"https://mcp.market/server/masnavi","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"search","tags":["search","security"],"presence":{"score":14,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-06-12T19:48:25.000Z","license":null},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T11:35:36.988Z","last_ok_at":"2026-11-04T11:35:36.988Z","latency_ms":118},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/shahhoseini/masnavi-mcp","website":"https://masnavi.ai","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://masnavi.ai/mcp"}],"packages":[],"tools":[{"name":"explain","description":"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'.","write_action":false,"price_micros":0,"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"}},{"name":"find_sections","description":"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).","write_action":false,"price_micros":0,"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"}},{"name":"get_ghazal","description":"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) = «مرده بدم زنده شدم…».","write_action":false,"price_micros":0,"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"}},{"name":"get_range","description":"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.","write_action":false,"price_micros":0,"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"}},{"name":"get_section","description":"Retrieve a full section (story / بخش) with all its beyts.","write_action":false,"price_micros":0,"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"}},{"name":"lookup","description":"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.","write_action":false,"price_micros":0,"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"}},{"name":"random_beyt","description":"Return a randomly-selected beyt, optionally restricted to a daftar.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"daftar":{"anyOf":[{"maximum":6,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Daftar"}},"title":"tool_randomArguments"}},{"name":"search","description":"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.","write_action":false,"price_micros":0,"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"}},{"name":"search_divan","description":"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.","write_action":false,"price_micros":0,"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"}},{"name":"search_divan_meaning","description":"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.","write_action":false,"price_micros":0,"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"}},{"name":"search_meaning","description":"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`.","write_action":false,"price_micros":0,"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"}},{"name":"table_of_contents","description":"Browse the Masnavi's section list. Returns titled sections per daftar with beyt counts and ranges.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"daftar":{"anyOf":[{"maximum":6,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Daftar"}},"title":"tool_tocArguments"}},{"name":"verify","description":"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.","write_action":false,"price_micros":0,"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"}}],"scan":{"score":80,"grade":"B","scanned_at":"2026-09-27T05:28:37.534Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T05:28:37.522Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 690ms"]},"poisoning":{"score":15,"max":15,"notes":["13 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":8,"max":15,"notes":["last push 106 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://masnavi.ai/mcp","reachable":true,"authRequired":false,"latencyMs":690,"serverInfo":{"name":"masnavi","version":"1.27.1"}}],"packages":[],"repo":{"found":true,"owner":"shahhoseini","repo":"masnavi-mcp","archived":false,"pushedAt":"2026-06-12T19:48:25Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/5360121?v=4","ownerCreatedAt":"2013-09-01T20:23:35Z"},"icon":{"url":"https://masnavi.ai/static/favicon-180.png?v=0b4bff9e71","source":"site","width":180,"height":180},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":null,"lastPushAt":"2026-06-12T19:48:25.000Z","score":14}}}},"grade_history":[],"reviews":[]}