{"openapi":"3.1.0","info":{"title":"Tarteel MCP Server Docs","version":"2.0.0","description":"Tarteel MCP server exposing Quran tools over Streamable HTTP.\nCompatible with Claude, Gemini, and OpenAI MCP clients.\nPrimary MCP endpoint pattern: POST /mcp.\nTransport requirements: clients must send Accept: application/json, text/event-stream.\nMethod constraints: /mcp rejects GET and DELETE; POST is required.\n\nAvailable tools:\n- `ayah_mutashabihat`: Show repeated phrase metadata for one ayah with an interactive display. Use this when: You need repeated phrase IDs/counts for a specific ayah. You want phrase candidates before drilling into phrase_mutashabihat. Limits: Single ayah lookup.\n- `phrase_mutashabihat`: Show phrase mutashabihat occurrences with an interactive display. Use this when: The user provides phrase text and asks where it appears in the Quran. You already have a phrase_id and need all its occurrences. Notes: Provide exactly one of phrase_id or phrase_text.\n- `ayah_translation`: Show Quran ayah translations with an interactive display. Use ISO 639-1 codes in queries[].languages. Use this when: The user asks for non-Arabic translations as a final visual presentation. The user requests translations from specific translator slugs and wants an interactive display. Limits: Maximum 50 queries per call. Maximum 200 ayahs per request. Maximum 10 resolved translations per query. Notes: queries[].languages accepts ISO 639-1 codes (e.g., en, ur), not language names like 'english'. Do not use 'ar' in queries[].languages. Arabic ayah text is already included and Arabic translation is unsupported. Use queries[].translations with translator slugs when you need specific translators.\n- `ayah_tafsir`: Show Quran ayah tafsir with an interactive commentary display. Use this when: The user asks for commentary/explanation of ayah meaning as a final visual presentation. The user asks for tafsir entries by language or specific tafsir slugs and wants an interactive display. Limits: Maximum 20 queries per call. Maximum 50 ayah+tafsir items per request.\n- `ayah_search`: Search Quran ayahs by Arabic text with an interactive result list (SQLite FTS5, diacritic-insensitive). Use this when: The user asks where a phrase appears in the Quran as a final visual presentation. The user wants to find an ayah from a remembered Arabic fragment. Limits: Maximum 100 results per request. Notes: Query must be Arabic script; Latin queries return no results. A numeric-only query matches ayahs by that ordinal number (e.g., '255' returns ayahs ending in ':255'). For intermediate lookups before chaining into other tools, prefer search_ayahs_text (no widget).\n- `list_reciters`: Browse available Quran reciters in an interactive list. Use this when: The user explicitly wants to explore or browse reciters visually. For intermediate lookups before play_ayahs, prefer lookup_reciters instead.\n- `list_tafsirs`: Browse available Quran tafsirs in an interactive list with optional language filtering. Use this when: The user explicitly wants to explore tafsir collections visually. For intermediate lookups before ayah_tafsir, prefer lookup_tafsirs instead.\n- `list_translations`: Browse available Quran translations in an interactive list with optional language filtering by ISO 639-1 code. Use this when: The user explicitly wants to explore translation options visually. For intermediate lookups before ayah_translation, prefer lookup_translations instead. Notes: Use language codes like 'en' in language filter input, not language names like 'english'. language_name in the output is display text; do not pass it into ayah_translation queries[].languages.\n- `play_ayahs`: Play Quranic ayah audio with an interactive player widget. Use this when: The user asks to play/listen to ayahs. If the user hasn't specified a reciter, call lookup_reciters first to find the right reciter_id, then call this tool. Limits: Maximum 50 queries per call. Maximum 200 ayahs per request.\n- `prayer_times`: Get Islamic prayer times for a city with an interactive timetable display. Use this when: The user asks for salah times in a location. The user asks for prayer times using a specific calculation method. Notes: Prayer calculations depend on city geocoding and selected method.\n- `lookup_reciters`: Look up available reciter IDs and names as plain data (no UI). Use this when: Preparatory step before play_ayahs — resolve a reciter ID from a name. Answering factual questions about available reciters without an interactive display. Notes: Widget counterpart: list_reciters. Returns content only (no structuredContent).\n- `lookup_tafsirs`: Look up available tafsir slugs and metadata as plain data (no UI). Use this when: Preparatory step before ayah_tafsir — discover valid tafsir slugs for a language. Answering factual questions about available tafsir collections without an interactive display. Notes: Widget counterpart: list_tafsirs. Returns content only (no structuredContent).\n- `lookup_translations`: Look up available translation slugs as plain data (no UI). Use this when: Preparatory step before ayah_translation — discover valid translation slugs for a language. Answering factual questions about available translations without an interactive display. Notes: Widget counterpart: list_translations. Returns content only (no structuredContent). Use language codes like 'en', not language names like 'english'.\n- `get_translation_text`: Fetch translation text as plain data for inline quoting or comparison (no UI). Use this when: You need to incorporate translation excerpts directly into your response text. You want to compare translations without rendering a widget. Limits: Maximum 50 queries per call. Maximum 200 ayahs per request. Maximum 10 resolved translations per query. Notes: Widget counterpart: ayah_translation. Returns content only (no structuredContent). Do not use 'ar' in queries[].languages.\n- `get_tafsir_text`: Fetch tafsir commentary as plain text for inline quoting or summarizing (no UI). Use this when: You need to reference or summarize tafsir content directly in your response. The user asks what a specific scholar says about an ayah and expects a quoted answer. Limits: Maximum 20 queries per call. Maximum 50 ayah+tafsir items per request. Notes: Widget counterpart: ayah_tafsir. Returns content only (no structuredContent).\n- `search_ayahs_text`: Search Quran ayahs by Arabic text; returns plain JSON (no UI). Diacritic-insensitive, BM25-ranked. Use this when: Preparatory step before play_ayahs, ayah_tafsir, or ayah_translation — find matching ayah keys to pass along. Inline quoting of matching ayahs when no interactive display is needed. Limits: Maximum 100 results per request. Notes: Widget counterpart: ayah_search. Returns content only (no structuredContent). Query must be Arabic script; Latin queries return no results."},"servers":[{"url":"https://mcp.tarteel.ai","description":"Canonical MCP server origin used for docs and connector onboarding."}],"tags":[{"name":"System","description":"Operational endpoints."},{"name":"MCP","description":"Model Context Protocol endpoints."},{"name":"Utility","description":"Utility endpoints used by widget workflows."},{"name":"Docs","description":"Programmatic documentation endpoints."}],"paths":{"/health":{"get":{"tags":["System"],"summary":"Health probe","responses":{"200":{"description":"Server health status.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"timestamp":{"type":"string"},"startedAt":{"type":"string"}},"required":["status","timestamp","startedAt"],"additionalProperties":false}}}}}}},"/ready":{"get":{"tags":["System"],"summary":"Readiness probe","responses":{"200":{"description":"Server is ready to serve traffic.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ready"},"timestamp":{"type":"string"}},"required":["status","timestamp"],"additionalProperties":false}}}},"503":{"description":"Server is still initializing.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"initializing"},"timestamp":{"type":"string"}},"required":["status","timestamp"],"additionalProperties":false}}}}}}},"/audio-proxy":{"get":{"tags":["Utility"],"summary":"Proxy approved Quran audio assets","parameters":[{"in":"query","name":"url","schema":{"type":"string","format":"uri","description":"HTTPS source URL from an allowed audio host."},"required":true,"description":"HTTPS source URL from an allowed audio host."}],"responses":{"200":{"description":"Audio stream response.","content":{"audio/mpeg":{"schema":{"type":"string","format":"binary","description":"Audio bytes streamed from approved host."}}}},"400":{"description":"Missing or invalid query parameters.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Audio host is not allow-listed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"502":{"description":"Upstream audio fetch failed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/mcp":{"options":{"tags":["MCP"],"summary":"CORS preflight for browser clients","description":"Returns CORS headers for browser preflight requests before POST /mcp calls.","responses":{"204":{"description":"CORS preflight accepted.","headers":{"Access-Control-Allow-Origin":{"schema":{"type":"string"},"description":"Allowed origin (`*` for public no-auth usage)."},"Access-Control-Allow-Methods":{"schema":{"type":"string"},"description":"Allowed methods (`POST, OPTIONS`)."},"Access-Control-Allow-Headers":{"schema":{"type":"string"},"description":"Allowed request headers for browser requests."}}}}},"post":{"tags":["MCP"],"summary":"MCP Streamable HTTP endpoint","description":"POST-only MCP endpoint. Supports MCP Streamable HTTP semantics. Clients must send Accept including both application/json and text/event-stream. Request body shown here models JSON-RPC tools/call payloads for all published tools.","requestBody":{"required":true,"description":"JSON-RPC request for MCP tool invocation.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"ayah_mutashabihat"},"arguments":{"type":"object","properties":{"surah":{"type":"integer","minimum":1,"maximum":114,"description":"Surah number from 1 to 114."},"ayah":{"type":"integer","minimum":1,"maximum":286,"description":"Ayah number within the selected surah."},"same_surah_only":{"description":"When true, only include repeated phrase matches found in the same surah as the input ayah.","anyOf":[{"type":"boolean"},{"type":"null"},{"type":"string","enum":["1","true"]},{"type":"string","enum":["0","false",""]},{"type":"number","const":1},{"type":"number","const":0}]}},"required":["surah","ayah"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Show repeated phrase metadata for one ayah with an interactive display."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"phrase_mutashabihat"},"arguments":{"type":"object","properties":{"phrase_id":{"description":"Mutashabihat phrase ID. Provide phrase_id or phrase_text, but not both.","anyOf":[{"type":"null"},{"type":"integer","minimum":1,"maximum":9007199254740991}]},"phrase_text":{"description":"Arabic phrase text to search for. Provide phrase_text or phrase_id, but not both.","anyOf":[{"type":"null"},{"type":"string","minLength":1}]},"same_surah_only":{"description":"When true, only include occurrences from the same surah as each matched ayah.","anyOf":[{"type":"boolean"},{"type":"null"},{"type":"string","enum":["1","true"]},{"type":"string","enum":["0","false",""]},{"type":"number","const":1},{"type":"number","const":0}]}}}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Show phrase mutashabihat occurrences with an interactive display."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"ayah_translation"},"arguments":{"type":"object","properties":{"queries":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"start_ayah":{"type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$","description":"Start ayah key in 'surah:ayah' format (for example '2:255')."},"end_ayah":{"description":"Optional end ayah key in 'surah:ayah' format. Omit to fetch only start_ayah.","type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$"},"languages":{"description":"Optional. ISO 639-1 language codes only (for example 'en', 'ur', 'fr'). Omit the field entirely if you don't want language-based selection; an empty array is treated the same as omitted. Do not use language names like 'english'. Do not include 'ar'; Arabic is not available as a translation language in this tool.","type":"array","items":{"type":"string","minLength":1}},"translations":{"description":"Optional. Translator slug values (for example 'en-sahih-international'). Omit the field entirely if you don't want slug-based selection; an empty array is treated the same as omitted. Use list_translations to discover valid slugs.","type":"array","items":{"type":"string","minLength":1}}},"required":["start_ayah"],"description":"One translation query. Must include ayah range and at least one of languages or translations."},"description":"Translation queries. Each query defines an ayah range plus languages or slugs."}},"required":["queries"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Show Quran ayah translations with an interactive display. Use ISO 639-1 codes in queries[].languages."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"ayah_tafsir"},"arguments":{"type":"object","properties":{"queries":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"start_ayah":{"type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$","description":"Start ayah key in 'surah:ayah' format (for example '2:255')."},"end_ayah":{"description":"Optional end ayah key in 'surah:ayah' format. Omit to fetch only start_ayah.","type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$"},"tafsir_slugs":{"description":"Optional. Specific tafsir slug values (for example 'en-tafsir-mokhtasar'). Omit the field entirely if you don't want slug-based selection; an empty array is treated the same as omitted. Use list_tafsirs to discover valid slugs.","type":"array","items":{"type":"string","minLength":1}},"languages":{"description":"Optional. ISO 639-1 language codes for default tafsir selection (for example 'en', 'ar'). Omit the field entirely if you don't want language-based selection; an empty array is treated the same as omitted. Use codes, not tafsir slugs.","type":"array","items":{"type":"string","minLength":1}}},"required":["start_ayah"],"description":"One tafsir query. Must include ayah range and at least one of languages or tafsir_slugs."},"description":"Tafsir queries. Each query defines an ayah range plus tafsir slugs or languages."}},"required":["queries"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Show Quran ayah tafsir with an interactive commentary display."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"ayah_search"},"arguments":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500,"description":"Search query in Arabic script. Diacritics and punctuation are stripped automatically; matching is diacritic-insensitive and ranked by BM25 relevance. Numeric fragments (e.g. '255') match ayahs with that ordinal number."},"max_results":{"default":20,"description":"Maximum number of ayah results to return (1-100, default 20).","type":"integer","minimum":1,"maximum":100}},"required":["query"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Search Quran ayahs by Arabic text with an interactive result list (SQLite FTS5, diacritic-insensitive)."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"list_reciters"},"arguments":{"type":"object","properties":{},"additionalProperties":false,"description":"No input fields. Pass an empty arguments object."}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Browse available Quran reciters in an interactive list."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"list_tafsirs"},"arguments":{"type":"object","properties":{"languages":{"description":"Optional ISO 639-1 language code filters (for example ['en', 'ar']).","type":"array","items":{"type":"string","minLength":1}}}}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Browse available Quran tafsirs in an interactive list with optional language filtering."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"list_translations"},"arguments":{"type":"object","properties":{"language":{"description":"Optional ISO 639-1 language code filter (for example 'en'). Do not pass language names like 'english'.","type":"string","minLength":1},"locale":{"description":"Optional locale/language code for response localization (for example 'en' or 'ar').","type":"string","minLength":1}}}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Browse available Quran translations in an interactive list with optional language filtering by ISO 639-1 code."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"play_ayahs"},"arguments":{"type":"object","properties":{"queries":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"start_ayah":{"type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$","description":"Start ayah key in 'surah:ayah' format (for example '1:1')."},"end_ayah":{"description":"Optional end ayah key in 'surah:ayah' format. Omit to fetch only start_ayah.","type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$"},"reciter_id":{"description":"Optional reciter ID override for this query. If omitted, default_reciter_id is used.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["start_ayah"],"description":"One audio query. reciter_id is optional and defaults to default_reciter_id when omitted."},"description":"Audio playlist queries. Each query defines an ayah range and optional reciter."},"default_reciter_id":{"default":20,"description":"Default reciter ID used when a query omits reciter_id.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["queries"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Play Quranic ayah audio with an interactive player widget."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"prayer_times"},"arguments":{"type":"object","properties":{"city":{"type":"string","minLength":2,"maxLength":100,"description":"City name for prayer time calculation (for example 'Cairo')."},"country":{"description":"Optional country name to disambiguate city lookup (for example 'Egypt').","type":"string","minLength":1},"method":{"default":"ISNA","description":"Prayer time calculation method (for example 'ISNA', 'MWL', or 'Makkah').","type":"string","enum":["MWL","ISNA","Egypt","Makkah","Karachi","Tehran","Jafari","Qatar","Kuwait","moonsighting","Dubai","Singapore","JAKIM","Turkey","Russia"]}},"required":["city"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Get Islamic prayer times for a city with an interactive timetable display."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"lookup_reciters"},"arguments":{"type":"object","properties":{},"additionalProperties":false,"description":"No input fields. Pass an empty arguments object."}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Look up available reciter IDs and names as plain data (no UI)."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"lookup_tafsirs"},"arguments":{"type":"object","properties":{"languages":{"description":"Optional ISO 639-1 language code filters (for example ['en', 'ar']).","type":"array","items":{"type":"string","minLength":1}}}}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Look up available tafsir slugs and metadata as plain data (no UI)."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"lookup_translations"},"arguments":{"type":"object","properties":{"language":{"description":"Optional ISO 639-1 language code filter (for example 'en'). Do not pass language names like 'english'.","type":"string","minLength":1},"locale":{"description":"Optional locale/language code for response localization (for example 'en' or 'ar').","type":"string","minLength":1}}}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Look up available translation slugs as plain data (no UI)."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"get_translation_text"},"arguments":{"type":"object","properties":{"queries":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"start_ayah":{"type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$","description":"Start ayah key in 'surah:ayah' format (for example '2:255')."},"end_ayah":{"description":"Optional end ayah key in 'surah:ayah' format. Omit to fetch only start_ayah.","type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$"},"languages":{"description":"Optional. ISO 639-1 language codes only (for example 'en', 'ur', 'fr'). Omit the field entirely if you don't want language-based selection; an empty array is treated the same as omitted. Do not use language names like 'english'. Do not include 'ar'; Arabic is not available as a translation language in this tool.","type":"array","items":{"type":"string","minLength":1}},"translations":{"description":"Optional. Translator slug values (for example 'en-sahih-international'). Omit the field entirely if you don't want slug-based selection; an empty array is treated the same as omitted. Use list_translations to discover valid slugs.","type":"array","items":{"type":"string","minLength":1}}},"required":["start_ayah"],"description":"One translation query. Must include ayah range and at least one of languages or translations."},"description":"Translation queries. Each query defines an ayah range plus languages or slugs."}},"required":["queries"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Fetch translation text as plain data for inline quoting or comparison (no UI)."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"get_tafsir_text"},"arguments":{"type":"object","properties":{"queries":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"start_ayah":{"type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$","description":"Start ayah key in 'surah:ayah' format (for example '2:255')."},"end_ayah":{"description":"Optional end ayah key in 'surah:ayah' format. Omit to fetch only start_ayah.","type":"string","minLength":1,"pattern":"^\\d{1,3}:\\d{1,3}$"},"tafsir_slugs":{"description":"Optional. Specific tafsir slug values (for example 'en-tafsir-mokhtasar'). Omit the field entirely if you don't want slug-based selection; an empty array is treated the same as omitted. Use list_tafsirs to discover valid slugs.","type":"array","items":{"type":"string","minLength":1}},"languages":{"description":"Optional. ISO 639-1 language codes for default tafsir selection (for example 'en', 'ar'). Omit the field entirely if you don't want language-based selection; an empty array is treated the same as omitted. Use codes, not tafsir slugs.","type":"array","items":{"type":"string","minLength":1}}},"required":["start_ayah"],"description":"One tafsir query. Must include ayah range and at least one of languages or tafsir_slugs."},"description":"Tafsir queries. Each query defines an ayah range plus tafsir slugs or languages."}},"required":["queries"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Fetch tafsir commentary as plain text for inline quoting or summarizing (no UI)."},{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string","const":"tools/call"},"params":{"type":"object","properties":{"name":{"type":"string","const":"search_ayahs_text"},"arguments":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500,"description":"Search query in Arabic script. Diacritics and punctuation are stripped automatically; matching is diacritic-insensitive and ranked by BM25 relevance. Numeric fragments (e.g. '255') match ayahs with that ordinal number."},"max_results":{"default":20,"description":"Maximum number of ayah results to return (1-100, default 20).","type":"integer","minimum":1,"maximum":100}},"required":["query"]}},"required":["name","arguments"],"additionalProperties":false}},"required":["jsonrpc","id","method","params"],"additionalProperties":false,"description":"Search Quran ayahs by Arabic text; returns plain JSON (no UI). Diacritic-insensitive, BM25-ranked."}]},"examples":{"ayah_mutashabihat":{"summary":"Show repeated phrase metadata for one ayah with an interactive display.","value":{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ayah_mutashabihat","arguments":{"surah":2,"ayah":255,"same_surah_only":false}}}},"phrase_mutashabihat":{"summary":"Show phrase mutashabihat occurrences with an interactive display.","value":{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"phrase_mutashabihat","arguments":{"phrase_id":1452,"same_surah_only":false}}}},"ayah_translation":{"summary":"Show Quran ayah translations with an interactive display. Use ISO 639-1 codes in queries[].languages.","value":{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"ayah_translation","arguments":{"queries":[{"start_ayah":"1:1","end_ayah":"1:3","languages":["en"]}]}}}},"ayah_tafsir":{"summary":"Show Quran ayah tafsir with an interactive commentary display.","value":{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"ayah_tafsir","arguments":{"queries":[{"start_ayah":"2:255","languages":["en"]}]}}}},"ayah_search":{"summary":"Search Quran ayahs by Arabic text with an interactive result list (SQLite FTS5, diacritic-insensitive).","value":{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"ayah_search","arguments":{"query":"الرحمن الرحيم","max_results":5}}}},"list_reciters":{"summary":"Browse available Quran reciters in an interactive list.","value":{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"list_reciters","arguments":{}}}},"list_tafsirs":{"summary":"Browse available Quran tafsirs in an interactive list with optional language filtering.","value":{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"list_tafsirs","arguments":{"languages":["en"]}}}},"list_translations":{"summary":"Browse available Quran translations in an interactive list with optional language filtering by ISO 639-1 code.","value":{"jsonrpc":"2.0","id":8,"method":"tools/call","params":{"name":"list_translations","arguments":{"language":"en"}}}},"play_ayahs":{"summary":"Play Quranic ayah audio with an interactive player widget.","value":{"jsonrpc":"2.0","id":9,"method":"tools/call","params":{"name":"play_ayahs","arguments":{"default_reciter_id":20,"queries":[{"start_ayah":"1:1","end_ayah":"1:5","reciter_id":20}]}}}},"prayer_times":{"summary":"Get Islamic prayer times for a city with an interactive timetable display.","value":{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"prayer_times","arguments":{"city":"San Francisco","country":"United States","method":"ISNA"}}}},"lookup_reciters":{"summary":"Look up available reciter IDs and names as plain data (no UI).","value":{"jsonrpc":"2.0","id":11,"method":"tools/call","params":{"name":"lookup_reciters","arguments":{}}}},"lookup_tafsirs":{"summary":"Look up available tafsir slugs and metadata as plain data (no UI).","value":{"jsonrpc":"2.0","id":12,"method":"tools/call","params":{"name":"lookup_tafsirs","arguments":{"languages":["en"]}}}},"lookup_translations":{"summary":"Look up available translation slugs as plain data (no UI).","value":{"jsonrpc":"2.0","id":13,"method":"tools/call","params":{"name":"lookup_translations","arguments":{"language":"en"}}}},"get_translation_text":{"summary":"Fetch translation text as plain data for inline quoting or comparison (no UI).","value":{"jsonrpc":"2.0","id":14,"method":"tools/call","params":{"name":"get_translation_text","arguments":{"queries":[{"start_ayah":"2:255","languages":["en"]}]}}}},"get_tafsir_text":{"summary":"Fetch tafsir commentary as plain text for inline quoting or summarizing (no UI).","value":{"jsonrpc":"2.0","id":15,"method":"tools/call","params":{"name":"get_tafsir_text","arguments":{"queries":[{"start_ayah":"1:1","languages":["en"]}]}}}},"search_ayahs_text":{"summary":"Search Quran ayahs by Arabic text; returns plain JSON (no UI). Diacritic-insensitive, BM25-ranked.","value":{"jsonrpc":"2.0","id":16,"method":"tools/call","params":{"name":"search_ayahs_text","arguments":{"query":"الحمد لله","max_results":5}}}}}}}},"responses":{"200":{"description":"Successful MCP response over JSON or SSE.","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"result":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}},"required":["type"],"additionalProperties":{}}},"structuredContent":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"isError":{"type":"boolean"}},"additionalProperties":{}}},"required":["jsonrpc","id","result"],"additionalProperties":{}}},"text/event-stream":{"schema":{"type":"string","description":"Server-sent event stream carrying JSON-RPC frames."}}}},"405":{"description":"Method not allowed for /mcp.","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"error":{"type":"object","properties":{"code":{"type":"number","description":"JSON-RPC error code"},"message":{"type":"string","description":"JSON-RPC error message"},"data":{}},"required":["code","message"],"additionalProperties":{}}},"required":["jsonrpc","error"],"additionalProperties":{}}}}},"406":{"description":"Client Accept header does not support required media types.","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"error":{"type":"object","properties":{"code":{"type":"number","description":"JSON-RPC error code"},"message":{"type":"string","description":"JSON-RPC error message"},"data":{}},"required":["code","message"],"additionalProperties":{}}},"required":["jsonrpc","error"],"additionalProperties":{}}}}},"500":{"description":"Internal server error while handling MCP request.","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"error":{"type":"object","properties":{"code":{"type":"number","description":"JSON-RPC error code"},"message":{"type":"string","description":"JSON-RPC error message"},"data":{}},"required":["code","message"],"additionalProperties":{}}},"required":["jsonrpc","error"],"additionalProperties":{}}}}}}}},"/openapi.json":{"get":{"tags":["Docs"],"summary":"OpenAPI document","responses":{"200":{"description":"OpenAPI 3.1 JSON document for this service.","content":{"application/json":{"schema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}}}}}},"/docs":{"get":{"tags":["Docs"],"summary":"Documentation site","responses":{"200":{"description":"VitePress HTML documentation pages.","content":{"text/html":{"schema":{"type":"string"}}}}}}}}}