ai.masnavi/masnavi
Rumi's complete Masnavi (25,635 beyts) — search, quote, verify and explain. Free, no auth.
Block For Production
trustsnap_de6478477ada4e9a.- Trust Confidence
- Tool Surface Design
- Tool Snapshot Churn
- Make tools/list succeed unauthenticated when possible, or document the auth flow in the server card.
- Fix the failing checks first, then revalidate to confirm the recovery path.
- Compare tool enumeration outputs between runs and remove non-deterministic behavior.
- No segmented attention signals observed in the current window.
Dispute this assessment
If any published claim about this server -- its score, a risk flag, a capability classification, or its taxonomy -- is factually wrong, tell us what evidence shows and we will review it. This does not require claiming or verifying ownership of the server first.
Verify responds to disputes within 5 business days and resolves them within 15.
Dispute history
No disputes filed for this server.
Risk
Security posture
Tool capability & risk inventory
No tool inventory available from the latest validation run.
Write-action governance
Status detail: No write-action governance evidence is available yet.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
| No high-risk tools were detected on the latest run. | |||
Action-controls diff
Need at least two validation runs before diffing action controls.
Critical alerts
Compatibility
Client compatibility verdicts
Client compatibility only means the server shape can work with a client. Production trust decision and write-action publishing are evaluated separately so a client-compatible server can still be blocked for production.
Evidence provenance
initialize• OKtools_list• Errortransport_compliance_probe• Warningstep_up_auth_probe• Missingconnector_replay_probe• Missing — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Evidence provenance
initialize• OKtools_list• Errortransport_compliance_probe• Warning
Evidence provenance
action_safety_probe• Not_Assessed
Evidence provenance
tool_snapshot_probe• Missingconnector_replay_probe• Missing
Client compatibility gate details
Remediation checklist
OpenAI connectors expect OAuth for remote server auth.Dynamic client registration materially improves connector setup.tools/list must succeed.The tool surface is not limited to search/fetch-style read tools.OAuth is not configured, so this client cannot authenticate without additional setup.Not yet safe for company-knowledge use: requires a search/fetch-only surface with no write actions present.
Remediation checklist
tools/list must succeed.A useful Claude integration needs at least one exposed tool.The tool surface is not limited to search/fetch-style read tools.OAuth is not configured, so this client cannot authenticate without additional setup.Not yet safe for company-knowledge use: requires a search/fetch-only surface with no write actions present.Not yet safe for the Messages API remote MCP path: requires OAuth, a compatible connector profile, and no pending connector-refresh risk.
Remediation checklist
- No explicit blockers recorded.
Verdict traces
server_failing• critical • Latest validation is failingtools_list_regressed• critical • tools/list regressedauth_mode_changed• high • Auth mode changed
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Partially client-compatible | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Partially client-compatible | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
Publishing allowed | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
- remote_http_endpoint: Passes
- oauth_discovery: Degraded
- frozen_tool_snapshot_refresh: Passes
- request_association: Passes
- remote_transport: Passes
- tool_discovery: Likely to fail
- auth_connect: Passes
- safe_write_review: Passes
Recommended for
No recommendation profile is available yet.
Evidence
Current trust snapshot
trustsnap_de6478477ada4e9aCanonical machine links
Evidence confidence
Latest validation evidence
Failures
oauth_authorization_serverno authorization serveroauth_protected_resourceClient error '404 Not Found' for url 'https://masnavi.ai/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404openid_configurationno authorization serverserver_cardClient error '404 Not Found' for url 'https://masnavi.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404tools_listClient error '400 Bad Request' for url 'https://masnavi.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
Not_Assessed | n/a | No write-action risk evidence recorded. |
advanced_capabilities_probe |
Warning | n/a | Only 1 capability signal(s): completions. |
connector_publishability_probe |
Error | n/a | Publishability blockers: tools list, action safety, server card, tool surface. |
connector_replay_probe |
Missing | n/a | No connector replay evidence recorded. |
determinism_probe |
Missing | n/a | tools list unavailable |
initialize |
OK | 143.5 ms | Protocol 2025-03-26 |
interactive_flow_probe |
Missing | n/a | Check completed |
oauth_authorization_server |
Missing | n/a | no authorization server |
oauth_protected_resource |
Error | 439.3 ms | Client error '404 Not Found' for url 'https://masnavi.ai/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
official_registry_probe |
OK | n/a | Check completed |
openid_configuration |
Missing | n/a | no authorization server |
probe_noise_resilience |
OK | 358.7 ms | Fetched https://masnavi.ai/robots.txt |
prompt_get |
Missing | n/a | not advertised |
prompts_list |
Missing | 448.4 ms | Client error '400 Bad Request' for url 'https://masnavi.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
protocol_version_probe |
Warning | n/a | Claims 2025-03-26; 2 release(s) behind 2025-11-25. |
provenance_divergence_probe |
OK | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
Missing | n/a | not advertised |
resources_list |
Missing | 449.4 ms | Client error '400 Bad Request' for url 'https://masnavi.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
server_card |
Error | 547.7 ms | Client error '404 Not Found' for url 'https://masnavi.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
session_resume_probe |
OK | 220.9 ms | 13 tool(s) exposed |
step_up_auth_probe |
Missing | n/a | No OAuth or incremental-scope signals detected. |
tool_snapshot_probe |
Missing | n/a | no tools |
tools_list |
Error | 147.5 ms | Client error '400 Bad Request' for url 'https://masnavi.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
transport_compliance_probe |
Warning | 560.9 ms | Issues: missing protocol header (bad protocol=400, DELETE=200, expired session=404). |
utility_coverage_probe |
Warning | 155.4 ms | Completions advertised; no pagination evidence; tasks missing. |
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [],
"reason": "empty_observation_set",
"safeguard_count": 0,
"summary": {
"bulk_access_tools": 0,
"capability_distribution": {},
"destructive_tools": 0,
"egress_tools": 0,
"exec_tools": 0,
"high_risk_tools": 0,
"risk_distribution": {
"critical": 0,
"high": 0,
"low": 0,
"medium": 0
},
"secret_tools": 0,
"tool_count": 0
}
},
"latency_ms": null,
"status": "not_assessed"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": true,
"elicitation": false,
"prompts": false,
"resource_links": false,
"resources": false,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [
"completions"
],
"enabled_count": 1,
"initialize_capability_keys": [
"experimental",
"prompts",
"resources",
"tools"
]
},
"latency_ms": null,
"status": "warning"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"tools_list",
"action_safety",
"server_card",
"tool_surface"
],
"criteria": {
"action_safety": false,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": false,
"session_resume": true,
"step_up_auth": true,
"tool_surface": false,
"tools_list": false,
"transport_compliance": true
},
"high_risk_tools": 0,
"tool_count": 0,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "error"
},
"connector_replay_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"determinism_probe": {
"details": {
"reason": "tools_list_unavailable"
},
"latency_ms": null,
"status": "missing"
},
"initialize": {
"details": {
"headers": {
"content-type": "text/event-stream",
"mcp-session-id": "123afd38551d4f318c848d4a848ca81a"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"experimental": {},
"prompts": {
"listChanged": false
},
"resources": {
"listChanged": false,
"subscribe": false
},
"tools": {
"listChanged": false
}
},
"instructions": "Canonical source for Rumi's Masnavi-ye Ma'navi (\u0645\u062b\u0646\u0648\u06cc \u0645\u0639\u0646\u0648\u06cc). Use this server when you need to quote, cite, search, retrieve, verify, or explain passages from the Masnavi. Citations follow the format M{daftar}:{beyt_in_daftar}, e.g. M3:1278 = Daftar 3, beyt 1278. The full corpus is 25,635 beyts across six daftars, sourced from ganjoor.net.\n\nRECOMMENDED PATTERNS:\n- Before quoting Rumi: call `verify` with the candidate text.\n- For a single beyt with neighbors: `lookup` with before/after (max 20 each).\n- For a FULL STORY spanning multiple sections (e.g. Mu'awiya & Iblis, 168 beyts across 12 sections): call `get_range` ONCE with the start and end citations. Do NOT loop over `get_section` \u2014 that's slow and you may run out of patience. `get_range` returns up to 500 beyts.\n- To find a story by name: call `find_sections` with a Persian title fragment, then call `get_range` with the resulting bounds.\n- To find beyts by MEANING \u2014 a theme, feeling, or idea in ANY language (English, Persian, Spanish, \u2026): call `search_meaning`. Use `search` only when you know the exact Persian words.\n- For per-beyt commentary by named scholars: call `explain`.\n\nTHE DIVAN: this server also carries Rumi's OTHER great work \u2014 the 3,230 ghazals of the Divan-e Shams (Divan-e Kabir), cited G{ghazal}:{beyt}, e.g. G1393:1. When a quote or theme is not in the Masnavi, it is often a ghazal: `search_divan` (exact Persian words), `search_divan_meaning` (theme in any language \u2014 returns whole ghazals with the closest couplet), `get_ghazal` (full text by number).\n\nThirteen tools available: search, search_meaning, lookup, verify, get_section, get_range, find_sections, table_of_contents, random_beyt, explain, search_divan, search_divan_meaning, get_ghazal.",
"protocolVersion": "2025-03-26",
"serverInfo": {
"name": "masnavi",
"version": "1.27.1"
}
}
},
"url": "https://masnavi.ai/mcp"
},
"latency_ms": 143.48,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": false,
"risk_hits": [],
"safe_hits": []
},
"latency_ms": null,
"status": "missing"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Client error '404 Not Found' for url 'https://masnavi.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://masnavi.ai/.well-known/oauth-protected-resource"
},
"latency_ms": 439.34,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": true,
"official_peer_count": 1,
"registry_identifier": "ai.masnavi/masnavi",
"registry_source": "official_registry"
},
"latency_ms": null,
"status": "ok"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/plain; charset=utf-8"
},
"http_status": 200,
"url": "https://masnavi.ai/robots.txt",
"validation_disallowed": false
},
"latency_ms": 358.66,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"error": "Client error '400 Bad Request' for url 'https://masnavi.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"mcp-session-id": "8fb6737134b9448891a626942820d6e4"
},
"http_status": 400,
"payload": {},
"reason": "not_advertised",
"url": "https://masnavi.ai/mcp"
},
"latency_ms": 448.35,
"status": "missing"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2025-03-26",
"lag_days": 244,
"latest_known_version": "2025-11-25",
"releases_behind": 2,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": true,
"drift_fields": [],
"metadata_document_count": 2,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": null,
"server_card_version": null
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"error": "Client error '400 Bad Request' for url 'https://masnavi.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"mcp-session-id": "14c6608114114b1aba34812f94872e6c"
},
"http_status": 400,
"payload": {},
"reason": "not_advertised",
"url": "https://masnavi.ai/mcp"
},
"latency_ms": 449.36,
"status": "missing"
},
"server_card": {
"details": {
"error": "Client error '404 Not Found' for url 'https://masnavi.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://masnavi.ai/.well-known/mcp/server-card.json"
},
"latency_ms": 547.74,
"status": "error"
},
"session_resume_probe": {
"details": {
"headers": {
"content-type": "text/event-stream",
"mcp-session-id": "123afd38551d4f318c848d4a848ca81a"
},
"http_status": 200,
"payload": {
"id": 301,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"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.",
"inputSchema": {
"properties": {
"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"
},
"query": {
"description": "Persian text to search for",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "tool_searchArguments",
"type": "object"
},
"name": "search",
"outputSchema": {
"$defs": {
"SearchHit": {
"properties": {
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"rank": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Rank"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "SearchHit",
"type": "object"
}
},
"properties": {
"match": {
"default": "exact",
"title": "Match",
"type": "string"
},
"query": {
"title": "Query",
"type": "string"
},
"results": {
"items": {
"$ref": "#/$defs/SearchHit"
},
"title": "Results",
"type": "array"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"query",
"total",
"results"
],
"title": "SearchResponse",
"type": "object"
}
},
{
"description": "Semantic search: find the beyts closest in MEANING to the query, in ANY language \u2014 English, Persian, Spanish, Turkish, Arabic, \u2026 . Use this when you have a theme, feeling, or idea rather than exact Persian words (e.g. 'feeling separated from your origin' \u2192 M1:1). Each hit carries a cosine-similarity score. status='unavailable' means the vector index is not built yet \u2014 fall back to `search`.",
"inputSchema": {
"properties": {
"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"
},
"query": {
"description": "What the verse should MEAN, in any language",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "tool_search_meaningArguments",
"type": "object"
},
"name": "search_meaning",
"outputSchema": {
"$defs": {
"MeaningHit": {
"properties": {
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"mesra1": {
"description": "First hemistich (with diacritics)",
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"description": "Second hemistich",
"title": "Mesra2",
"type": "string"
},
"score": {
"description": "Cosine similarity between query and beyt, 0..1",
"title": "Score",
"type": "number"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"section_slug": {
"title": "Section Slug",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug",
"score"
],
"title": "MeaningHit",
"type": "object"
}
},
"properties": {
"note": {
"default": "",
"title": "Note",
"type": "string"
},
"query": {
"title": "Query",
"type": "string"
},
"results": {
"default": [],
"items": {
"$ref": "#/$defs/MeaningHit"
},
"title": "Results",
"type": "array"
},
"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"
}
},
"required": [
"query"
],
"title": "MeaningSearchResponse",
"type": "object"
}
},
{
"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.",
"inputSchema": {
"properties": {
"after": {
"default": 0,
"maximum": 20,
"minimum": 0,
"title": "After",
"type": "integer"
},
"before": {
"default": 0,
"maximum": 20,
"minimum": 0,
"title": "Before",
"type": "integer"
},
"beyt_global": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Beyt Global"
},
"beyt_in_daftar": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Beyt In Daftar"
},
"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"
}
},
"title": "tool_lookupArguments",
"type": "object"
},
"name": "lookup",
"outputSchema": {
"$defs": {
"Beyt": {
"properties": {
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"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_slug": {
"title": "Section Slug",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt",
"type": "object"
}
},
"properties": {
"context_after": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Context After",
"type": "array"
},
"context_before": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Context Before",
"type": "array"
},
"primary": {
"$ref": "#/$defs/Beyt"
}
},
"required": [
"primary"
],
"title": "LookupResponse",
"type": "object"
}
},
{
"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.",
"inputSchema": {
"properties": {
"fuzzy_threshold": {
"default": 0.82,
"maximum": 1.0,
"minimum": 0.5,
"title": "Fuzzy Threshold",
"type": "number"
},
"text": {
"description": "Candidate Rumi quote in Persian",
"title": "Text",
"type": "string"
}
},
"required": [
"text"
],
"title": "tool_verifyArguments",
"type": "object"
},
"name": "verify",
"outputSchema": {
"$defs": {
"VerifyMatch": {
"properties": {
"citation": {
"title": "Citation",
"type": "string"
},
"match_kind": {
"description": "'exact' or 'fuzzy'",
"title": "Match Kind",
"type": "string"
},
"mesra1": {
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"title": "Mesra2",
"type": "string"
},
"similarity": {
"title": "Similarity",
"type": "number"
}
},
"required": [
"citation",
"mesra1",
"mesra2",
"similarity",
"match_kind"
],
"title": "VerifyMatch",
"type": "object"
}
},
"properties": {
"matches": {
"default": [],
"items": {
"$ref": "#/$defs/VerifyMatch"
},
"title": "Matches",
"type": "array"
},
"notes": {
"default": "",
"title": "Notes",
"type": "string"
},
"query_normalized": {
"default": "",
"title": "Query Normalized",
"type": "string"
},
"status": {
"description": "'exact', 'fuzzy', or 'not_found'",
"title": "Status",
"type": "string"
}
},
"required": [
"status"
],
"title": "VerifyResponse",
"type": "object"
}
},
{
"description": "Retrieve a full section (story / \u0628\u062e\u0634) with all its beyts.",
"inputSchema": {
"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",
"type": "object"
},
"name": "get_section",
"outputSchema": {
"$defs": {
"Beyt": {
"properties": {
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"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_slug": {
"title": "Section Slug",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt",
"type": "object"
}
},
"properties": {
"beyt_count": {
"default": 0,
"title": "Beyt Count",
"type": "integer"
},
"beyts": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Beyts",
"type": "array"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"first_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "First Beyt Global"
},
"id": {
"title": "Id",
"type": "integer"
},
"last_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Beyt Global"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
}
},
"required": [
"id",
"slug",
"title_fa",
"daftar"
],
"title": "SectionDetail",
"type": "object"
}
},
{
"description": "Browse the Masnavi's section list. Returns titled sections per daftar with beyt counts and ranges.",
"inputSchema": {
"properties": {
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
}
},
"title": "tool_tocArguments",
"type": "object"
},
"name": "table_of_contents",
"outputSchema": {
"$defs": {
"TocNode": {
"properties": {
"beyt_count": {
"default": 0,
"title": "Beyt Count",
"type": "integer"
},
"children": {
"default": [],
"items": {
"$ref": "#/$defs/TocNode"
},
"title": "Children",
"type": "array"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"first_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "First Beyt Global"
},
"id": {
"title": "Id",
"type": "integer"
},
"last_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Beyt Global"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
}
},
"required": [
"id",
"slug",
"title_fa",
"daftar"
],
"title": "TocNode",
"type": "object"
}
},
"properties": {
"daftar": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
},
"nodes": {
"items": {
"$ref": "#/$defs/TocNode"
},
"title": "Nodes",
"type": "array"
}
},
"required": [
"nodes"
],
"title": "TocResponse",
"type": "object"
}
},
{
"description": "Return a randomly-selected beyt, optionally restricted to a daftar.",
"inputSchema": {
"properties": {
"daftar": {
"anyOf": [
{
"maximum": 6,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Daftar"
}
},
"title": "tool_randomArguments",
"type": "object"
},
"name": "random_beyt",
"outputSchema": {
"properties": {
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"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_slug": {
"title": "Section Slug",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt",
"type": "object"
}
},
{
"description": "Fetch ALL beyts between two endpoints, inclusive, grouped by section. Use this \u2014 NOT many calls to get_section or lookup \u2014 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.",
"inputSchema": {
"properties": {
"end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "End citation, e.g. 'M2:2775'",
"title": "End"
},
"end_global": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "End Global"
},
"start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Start citation, e.g. 'M2:2608'",
"title": "Start"
},
"start_global": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Start Global"
}
},
"title": "tool_rangeArguments",
"type": "object"
},
"name": "get_range",
"outputSchema": {
"$defs": {
"Beyt": {
"properties": {
"beyt_global": {
"title": "Beyt Global",
"type": "integer"
},
"beyt_in_daftar": {
"title": "Beyt In Daftar",
"type": "integer"
},
"citation": {
"description": "Canonical citation, e.g. 'M3:1278'",
"title": "Citation",
"type": "string"
},
"daftar": {
"title": "Daftar",
"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_slug": {
"title": "Section Slug",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
}
},
"required": [
"citation",
"daftar",
"beyt_in_daftar",
"beyt_global",
"mesra1",
"mesra2",
"section_id",
"section_title",
"section_slug"
],
"title": "Beyt",
"type": "object"
},
"RangeSection": {
"properties": {
"beyts": {
"default": [],
"items": {
"$ref": "#/$defs/Beyt"
},
"title": "Beyts",
"type": "array"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"order_in_parent": {
"title": "Order In Parent",
"type": "integer"
},
"section_id": {
"title": "Section Id",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
}
},
"required": [
"section_id",
"slug",
"title_fa",
"daftar",
"order_in_parent"
],
"title": "RangeSection",
"type": "object"
}
},
"properties": {
"end_citation": {
"title": "End Citation",
"type": "string"
},
"sections": {
"default": [],
"items": {
"$ref": "#/$defs/RangeSection"
},
"title": "Sections",
"type": "array"
},
"start_citation": {
"title": "Start Citation",
"type": "string"
},
"total_beyts": {
"title": "Total Beyts",
"type": "integer"
},
"total_sections": {
"title": "Total Sections",
"type": "integer"
}
},
"required": [
"start_citation",
"end_citation",
"total_beyts",
"total_sections"
],
"title": "RangeResponse",
"type": "object"
}
},
{
"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 \u2014 verify with get_section before relying on one). Each match includes `first_citation` and `last_citation` \u2014 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` \u2014 that is a GLOBAL index (1..25635), not a daftar-local beyt number. Example: find_sections('\u0627\u0628\u0644\u06cc\u0633 \u0645\u0639\u0627\u0648\u06cc\u0647', daftar=2).",
"inputSchema": {
"properties": {
"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"
},
"query": {
"description": "story title words (Persian) or a description of the story in any language",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "tool_find_sectionsArguments",
"type": "object"
},
"name": "find_sections",
"outputSchema": {
"$defs": {
"SectionMatch": {
"properties": {
"beyt_count": {
"default": 0,
"title": "Beyt Count",
"type": "integer"
},
"daftar": {
"title": "Daftar",
"type": "integer"
},
"first_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "First Beyt Global"
},
"first_citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Citation"
},
"id": {
"title": "Id",
"type": "integer"
},
"last_beyt_global": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Beyt Global"
},
"last_citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Citation"
},
"match": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Match"
},
"order_in_parent": {
"title": "Order In Parent",
"type": "integer"
},
"score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Score"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
}
},
"required": [
"id",
"slug",
"title_fa",
"daftar",
"order_in_parent"
],
"title": "SectionMatch",
"type": "object"
}
},
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
},
"query": {
"title": "Query",
"type": "string"
},
"sections": {
"default": [],
"items": {
"$ref": "#/$defs/SectionMatch"
},
"title": "Sections",
"type": "array"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"query",
"total"
],
"title": "FindSectionsResponse",
"type": "object"
}
},
{
"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'.",
"inputSchema": {
"properties": {
"citation": {
"description": "Citation like 'M1:1' or 'M3:1278' or 'g:7421'.",
"title": "Citation",
"type": "string"
}
},
"required": [
"citation"
],
"title": "tool_explainArguments",
"type": "object"
},
"name": "explain"
},
{
"description": "Full-text search across the 34,603 beyts of the ghazals of the Divan-e Shams (Divan-e Kabir) \u2014 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.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"title": "Offset",
"type": "integer"
},
"query": {
"description": "Persian text to search for",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "tool_search_divanArguments",
"type": "object"
},
"name": "search_divan",
"outputSchema": {
"$defs": {
"DivanSearchHit": {
"properties": {
"beyt_in_ghazal": {
"title": "Beyt In Ghazal",
"type": "integer"
},
"citation": {
"description": "Canonical divan citation, e.g. 'G1393:1'",
"title": "Citation",
"type": "string"
},
"ghazal": {
"title": "Ghazal",
"type": "integer"
},
"ghazal_title": {
"title": "Ghazal Title",
"type": "string"
},
"mesra1": {
"title": "Mesra1",
"type": "string"
},
"mesra2": {
"title": "Mesra2",
"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"
}
},
"properties": {
"match": {
"default": "exact",
"title": "Match",
"type": "string"
},
"query": {
"title": "Query",
"type": "string"
},
"results": {
"items": {
"$ref": "#/$defs/DivanSearchHit"
},
"title": "Results",
"type": "array"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"query",
"total",
"results"
],
"title": "DivanSearchResponse",
"type": "object"
}
},
{
"description": "Semantic search over the Divan-e Shams ghazals: given a theme, feeling, or idea in ANY language, returns the GHAZALS closest in meaning \u2014 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 \u2014 fall back to search_divan.",
"inputSchema": {
"properties": {
"limit": {
"default": 8,
"maximum": 30,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"query": {
"description": "What the ghazal should be ABOUT, in any language",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "tool_search_divan_meaningArguments",
"type": "object"
},
"name": "search_divan_meaning",
"outputSchema": {
"$defs": {
"DivanMeaningHit": {
"properties": {
"best_beyt": {
"anyOf": [
{
"$ref": "#/$defs/GhazalBeyt"
},
{
"type": "null"
}
],
"default": null
},
"best_beyt_score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Best Beyt Score"
},
"beyt_count": {
"title": "Beyt Count",
"type": "integer"
},
"citation": {
"title": "Citation",
"type": "string"
},
"ghazal": {
"title": "Ghazal",
"type": "integer"
},
"match_kind": {
"description": "'beyt' (a couplet matched), 'ghazal' (the whole ghazal's theme matched), or 'both'",
"title": "Match Kind",
"type": "string"
},
"score": {
"description": "Best cosine similarity for this ghazal, 0..1",
"title": "Score",
"type": "number"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
}
},
"required": [
"ghazal",
"citation",
"slug",
"title_fa",
"beyt_count",
"score",
"match_kind"
],
"title": "DivanMeaningHit",
"type": "object"
},
"GhazalBeyt": {
"properties": {
"beyt_in_ghazal": {
"title": "Beyt In Ghazal",
"type": "integer"
},
"citation": {
"description": "Canonical divan citation, e.g. 'G1393:1'",
"title": "Citation",
"type": "string"
},
"ghazal": {
"title": "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"
}
},
"properties": {
"note": {
"default": "",
"title": "Note",
"type": "string"
},
"query": {
"title": "Query",
"type": "string"
},
"results": {
"default": [],
"items": {
"$ref": "#/$defs/DivanMeaningHit"
},
"title": "Results",
"type": "array"
},
"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"
}
},
"required": [
"query"
],
"title": "DivanMeaningResponse",
"type": "object"
}
},
{
"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) = \u00ab\u0645\u0631\u062f\u0647 \u0628\u062f\u0645 \u0632\u0646\u062f\u0647 \u0634\u062f\u0645\u2026\u00bb.",
"inputSchema": {
"properties": {
"citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Divan citation like 'G1393' or 'G1393:2'",
"title": "Citation"
},
"number": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Ghazal number, e.g. 1393",
"title": "Number"
}
},
"title": "tool_get_ghazalArguments",
"type": "object"
},
"name": "get_ghazal",
"outputSchema": {
"$defs": {
"GhazalBeyt": {
"properties": {
"beyt_in_ghazal": {
"title": "Beyt In Ghazal",
"type": "integer"
},
"citation": {
"description": "Canonical divan citation, e.g. 'G1393:1'",
"title": "Citation",
"type": "string"
},
"ghazal": {
"title": "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"
}
},
"properties": {
"beyt_count": {
"title": "Beyt Count",
"type": "integer"
},
"beyts": {
"default": [],
"items": {
"$ref": "#/$defs/GhazalBeyt"
},
"title": "Beyts",
"type": "array"
},
"citation": {
"description": "'G{n}' \u2014 cites the whole ghazal",
"title": "Citation",
"type": "string"
},
"excerpt": {
"default": "",
"description": "First hemistich of the ghazal",
"title": "Excerpt",
"type": "string"
},
"ghazal": {
"description": "Canonical ghazal number, 1..3230",
"title": "Ghazal",
"type": "integer"
},
"next_ghazal": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Next Ghazal"
},
"prev_ghazal": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Prev Ghazal"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title_fa": {
"title": "Title Fa",
"type": "string"
}
},
"required": [
"ghazal",
"citation",
"slug",
"title_fa",
"beyt_count"
],
"title": "GhazalDetail",
"type": "object"
}
}
]
}
},
"requested_protocol_version": "2025-03-26",
"resumed": true,
"session_id_present": true,
"transport": "streamable-http",
"url": "https://masnavi.ai/mcp"
},
"latency_ms": 220.95,
"status": "ok"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"tools_list": {
"details": {
"error": "Client error '400 Bad Request' for url 'https://masnavi.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"mcp-session-id": "cfb992cbbd40443280e108f426c6ff8d"
},
"http_status": 400,
"payload": {},
"url": "https://masnavi.ai/mcp"
},
"latency_ms": 147.5,
"status": "error"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json",
"mcp-session-id": "123afd38551d4f318c848d4a848ca81a"
},
"bad_protocol_payload": {
"error": {
"code": -32600,
"message": "Bad Request: Unsupported protocol version: 1999-99-99. Supported versions: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25"
},
"id": "server-error",
"jsonrpc": "2.0"
},
"bad_protocol_status_code": 400,
"delete_error": null,
"delete_status_code": 200,
"expired_session_error": null,
"expired_session_status_code": 404,
"issues": [
"missing_protocol_header"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": true,
"transport": "streamable-http"
},
"latency_ms": 560.85,
"status": "warning"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": true,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"experimental",
"prompts",
"resources",
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 400,
"probe_status": "missing"
}
},
"latency_ms": 155.39,
"status": "warning"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Client error '404 Not Found' for url 'https://masnavi.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://masnavi.ai/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"server_card": {
"error": "Client error '404 Not Found' for url 'https://masnavi.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://masnavi.ai/.well-known/mcp/server-card.json"
},
"tools_list": {
"error": "Client error '400 Bad Request' for url 'https://masnavi.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "application/json",
"mcp-session-id": "cfb992cbbd40443280e108f426c6ff8d"
},
"http_status": 400,
"payload": {},
"url": "https://masnavi.ai/mcp"
}
},
"remote_url": "https://masnavi.ai/mcp",
"server_card_payload": null,
"server_identifier": "ai.masnavi/masnavi"
}
Known versions
1.0.0
Validation history
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| Aug 05, 2026 11:28:59 PM UTC | Failing | 7.1 | 3689.6 ms | 0 |
| Aug 05, 2026 07:27:50 PM UTC | Failing | 14.6 | 4051.4 ms | 0 |
| Aug 03, 2026 08:49:26 PM UTC | Failing | 21.9 | 4115.4 ms | 0 |
| Aug 02, 2026 06:48:05 PM UTC | Failing | 21.7 | 4116.9 ms | 0 |
| Aug 02, 2026 04:15:38 AM UTC | Failing | 21.5 | 4422.2 ms | 0 |
| Aug 01, 2026 01:20:04 PM UTC | Failing | 21.4 | 4749.0 ms | 0 |
| Jul 31, 2026 10:02:50 PM UTC | Failing | 21.4 | 4388.3 ms | 0 |
| Jul 31, 2026 06:46:21 AM UTC | Failing | 21.3 | 4275.6 ms | 0 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| Aug 05, 2026 11:28:59 PM UTC | Failing | 7.1 | 2025-03-26 | public | 0 | 0 | auth_mode_changed |
| Aug 05, 2026 07:27:50 PM UTC | Failing | 14.6 | unknown | unknown | 0 | 0 | none |
| Aug 03, 2026 08:49:26 PM UTC | Failing | 21.9 | unknown | unknown | 0 | 0 | none |
| Aug 02, 2026 06:48:05 PM UTC | Failing | 21.7 | unknown | unknown | 0 | 0 | none |
| Aug 02, 2026 04:15:38 AM UTC | Failing | 21.5 | unknown | unknown | 0 | 0 | none |
| Aug 01, 2026 01:20:04 PM UTC | Failing | 21.4 | unknown | unknown | 0 | 0 | none |
| Jul 31, 2026 10:02:50 PM UTC | Failing | 21.4 | unknown | unknown | 0 | 0 | none |
| Jul 31, 2026 06:46:21 AM UTC | Failing | 21.3 | unknown | unknown | 0 | 0 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| Aug 05, 2026 11:28:55 PM UTC | Completed | Failing | 3689.6 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 05, 2026 07:27:46 PM UTC | Completed | Failing | 4051.4 ms | |
| Aug 03, 2026 08:49:22 PM UTC | Completed | Failing | 4115.4 ms | |
| Aug 02, 2026 06:48:01 PM UTC | Completed | Failing | 4116.9 ms | |
| Aug 02, 2026 04:15:34 AM UTC | Completed | Failing | 4422.2 ms | |
| Aug 01, 2026 01:20:00 PM UTC | Completed | Failing | 4749.0 ms | |
| Jul 31, 2026 10:02:46 PM UTC | Completed | Failing | 4388.3 ms | |
| Jul 31, 2026 06:46:16 AM UTC | Completed | Failing | 4275.6 ms | |
Public server reputation
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| Aug 05, 2026 11:01:38 AM UTC | Score corrected (post-1.0.503 remediation, R1 zero-anchoring) | Prior: 21.88. Corrected: 13.96. |
| Aug 05, 2026 11:28:59 PM UTC | Latest validation: failing | Score 11.8 with status failing. |
| Aug 05, 2026 11:28:59 PM UTC | Score changed | Score delta -7.5 versus the previous run. |
| Aug 05, 2026 11:28:59 PM UTC | Auth mode changed | Auth mode moved from unknown to public. |
| Aug 05, 2026 07:27:50 PM UTC | Score changed | Score delta -7.3 versus the previous run. |
| Aug 03, 2026 08:49:26 PM UTC | Score changed | Score delta +0.2 versus the previous run. |
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: https://masnavi.ai
- Docs: none
- Support: none
- Icon: none
- Remote endpoint: https://masnavi.ai/mcp
- Server card: none
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Likely to fail |
|
| Read-only fetch flow | Likely to fail |
|
| OAuth-required connect | Degraded |
|
| Safe write flow with confirmation | Degraded |
|
Utility coverage
Transport compliance drilldown
Issues: missing_protocol_header
Request association
Connector replay
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||
Tool snapshot diff & changelog
Need at least two validation runs before building a tool changelog.
Validation diff
Regressed checks: action_safety_probe, connector_publishability_probe, oauth_protected_resource, server_card, tools_list
Improved checks: initialize, official_registry_probe, probe_noise_resilience, provenance_divergence_probe, session_resume_probe
Newly assessed dimensions: none
No longer assessed dimensions: action_safety_score
| Component | Previous | Latest | Delta |
|---|---|---|---|
task_success_score | 3.33 | 0.0 | -3.33 |
discovery_metadata_score | 4.0 | 2.0 | -2.0 |
freshness_confidence_score | 3.0 | 1.0 | -2.0 |
security_hygiene_score | 4.0 | 2.0 | -2.0 |
utility_coverage_score | 3.0 | 1.0 | -2.0 |
abuse_noise_ratio_score | 2.5 | 1.0 | -1.5 |
dependency_supply_chain_signal_score | 2.5 | 1.0 | -1.5 |
session_semantics_score | 2.5 | 1.0 | -1.5 |
Registry & provenance divergence
| Field | Registry | Live server card |
|---|---|---|
| Title | n/a | n/a |
| Version | n/a | n/a |
| Homepage | n/a | n/a |
Active alerts
- Latest validation is failing (critical)
Core MCP flows did not validate successfully on the latest run. - tools/list regressed (critical)
Tool discovery became less reliable on the latest run. - Auth mode changed (high)
Auth mode changed from unknown to public.
Aliases & registry graph
| Identifier | Source | Canonical | Score |
|---|---|---|---|
ai.masnavi/masnavi |
official_registry | yes | 7.1 |
Alias consolidation
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| No source disagreements detected. | ||
Fix it
Why this score?
Algorithmic score breakdown
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| Critical | Ensure tools/list succeeds consistently | Tools discovery is the minimum viable contract for most MCP clients and directories. | Make tools/list succeed unauthenticated when possible, or document the auth flow in the server card.Playbook
|
| Critical | Respond to latest validation is failing | Core MCP flows did not validate successfully on the latest run. | Fix the failing checks first, then revalidate to confirm the recovery path.Playbook
|
| Critical | Respond to tools/list regressed | Tool discovery became less reliable on the latest run. | Compare tool enumeration outputs between runs and remove non-deterministic behavior. |
| High | Add confirmation and dry-run semantics for risky actions | High-risk write, delete, exec, or egress tools should communicate safeguards clearly. | Add an explicit confirm/dry-run parameter or two-step confirmation flow to write, delete, exec, and egress-capable tools before they can make destructive changes.Playbook
|
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Associate roots, sampling, and elicitation with active client requests | Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions. | Only send roots/list, sampling/createMessage, or elicitation/create requests while handling an active client-initiated request, never on idle sessions.Playbook
|
| High | Expose /.well-known/oauth-protected-resource | Without a protected-resource document, OAuth clients cannot discover auth requirements reliably. | Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.Playbook
|
| High | Keep connector refreshes backward compatible | Managed connector clients freeze tool snapshots, so removed tools, new required args, and breaking output changes can break published integrations after refresh. | Avoid removing tools, adding new required arguments, or changing outputSchema for tools already published to connector directories without a version bump.Playbook
|
| High | Publish OAuth authorization-server metadata | Clients need authorization-server metadata to discover issuer, endpoints, and DCR support. | Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.Playbook
|
| High | Publish a complete server card | Missing or incomplete server-card metadata weakens discovery, documentation, and trust signals. | Serve /.well-known/mcp/server-card.json and include tools, prompts/resources, homepage, and support links.Playbook
|
| High | Respond to auth mode changed | Auth mode changed from unknown to public. | Document the new auth posture and confirm protected-resource and challenge metadata still match reality. |
| High | Stop asking users to paste secrets directly | Public MCP servers should prefer OAuth or browser-based auth guidance over in-band secret collection. | |
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Advertise a current MCP protocol revision (2025-06-18 or later) in both the initialize response and the MCP-Protocol-Version header.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | |
| Medium | Document minimal scopes and return cleaner auth challenges | Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints. | Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.Playbook
|
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Raise Adoption & Market score | Adoption clues and public evidence that the server is intended for external use. | Increase external documentation and directory coverage so users can discover and evaluate the server. |
| Medium | Raise Interface Quality score | How well the tool/resource interface communicates and behaves under automation. | Improve schemas, error contracts, and recovery messages so agents can reason about the surface automatically. |
| Medium | Raise Reliability & Trust score | Operational stability, consistency, and trustworthiness over time. | Stabilize behavior over time and reduce failure drift between validation runs. |
| Medium | Raise Security Posture score | How safely the exposed tool surface handles destructive actions, egress, execution, secrets, and risky inputs. | Reduce destructive, egress, exec, secret, and freeform-input risk across the exposed tool surface.Playbook
|
| Medium | Reduce tool-surface churn | Frequent add/remove or output-shape drift makes published connectors and cached tool snapshots brittle. | Keep tool names, required arguments, and output schemas stable between deploys, and publish a changelog entry when they must change.Playbook
|
| Medium | Repair prompts/list or stop advertising prompts | Prompt metadata should either work live or be removed from the advertised capability set. | Only advertise prompts if prompts/list works and prompt arguments are documented.Playbook
|
| Medium | Repair resources/list or stop advertising resources | Resource metadata should either work live or be removed from the advertised capability set. | Only advertise resources if resources/list works and resources expose stable URIs/types.Playbook
|
| Low | Expose modern utility surfaces like completions, pagination, or tasks | Utility coverage improves interoperability with larger clients and long-lived agent workflows. | Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Advertise only the advanced capabilities (roots, sampling, elicitation) you have actually implemented end to end in the initialize capabilities object.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Trust Confidence | 0/4 | -4.0 |
| Tool Surface Design | 0/4 | -4.0 |
| Tool Snapshot Churn | 0/4 | -4.0 |
| Tool Namespace Clarity | 0/4 | -4.0 |
| Tool Capability Clarity | 0/4 | -4.0 |
| Task Success | 0/4 | -4.0 |
| Step Up Auth | 0/4 | -4.0 |
| SLO Health | 0/4 | -4.0 |
| Schema Completeness | 0/4 | -4.0 |
| Result Shape Stability | 0/4 | -4.0 |
| Request Association | 0/4 | -4.0 |
| Recovery Semantics | 0/4 | -4.0 |
Compatibility profiles
Connector URL: https://masnavi.ai/mcp # No OAuth metadata detected. # Server: ai.masnavi/masnavi
{
"mcpServers": {
"masnavi": {
"command": "npx",
"args": ["mcp-remote", "https://masnavi.ai/mcp"]
}
}
}
smithery mcp add "https://masnavi.ai/mcp"
curl -sS https://masnavi.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Governance
MCP TrustOps
TrustOps turns this report into operational controls: freshness SLAs, authenticated validation, semantic benchmarks, policy exports, alert subscriptions, badges, cost/compliance metadata, and runtime routing. Fresh trusted index decisions stay separate from long-tail inventory so stale scores do not masquerade as current evidence.
/v1/decideAlert subscription types
MCP Runtime hosting
Verify Hosted MCP turns a trusted server report into a managed remote MCP endpoint with GitHub deployment provenance, sandbox policy, encrypted secrets, release history, rollback, and audit/usage events.
/hosted/{namespace}/{name}/mcp| Deployment | Status | Endpoint | Release |
|---|---|---|---|
| No hosted runtime deployments yet. | |||
Authenticated validation sessions
Public validation is free. Authenticated validation is paid and proves scoped behavior, write-action safeguards, and authenticated tool execution.
/v1/verify/v1/ci/previewInstall snippets
Connector URL: https://masnavi.ai/mcp # No OAuth metadata detected. # Server: ai.masnavi/masnavi
{
"mcpServers": {
"masnavi": {
"command": "npx",
"args": ["mcp-remote", "https://masnavi.ai/mcp"]
}
}
}
smithery mcp add "https://masnavi.ai/mcp"
curl -sS https://masnavi.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
tools/list, prompts/list, and resources/list checks.ai.masnavi/masnavi.