islamqa-org-mcp
islamqa-org-mcp
Дайте Claude, Codex и любому другому MCP-клиенту доступ к ~98 000 фетв с указанием источников.
MCP-сервер для IslamQA.org, который агрегирует ответы 47 независимых дар-уль-ифта из четырёх суннитских мазхабов.
Веб-сайт · Установка · ChatGPT · Инструменты · Как это работает · Этикет
Зачем
Задайте языковой модели вопрос по фикху — и она ответит из размытой массы обучающих данных, без источника, без мазхаба и без возможности проверить ответ. Это неправильная форма для такого рода вопросов.
Этот сервер меняет настройку по умолчанию. Ваш ассистент ищет в настоящем архиве учёных ответов и цитирует один из них с указанием муфтия, мазхаба, учреждения и URL, который вы можете открыть. Когда школы расходятся во мнениях, вы видите, что они расходятся, вместо того чтобы получить одну позицию, поданную как единственное исламское решение.
You: Can I wipe over ordinary cotton socks in wudu?
Claude: [searches IslamQA.org]
The Hanafi position (Askimam.org, Mufti Ebrahim Desai) is that masah
is only valid on socks with the characteristics of leather khuffayn —
thick enough that water does not seep through, able to stand upright
unaided, and durable over three to four miles of walking. Ordinary
cotton socks do not qualify.
https://islamqa.org/hanafi/askimam/127638/...
Bin Bayyah (Maliki) notes the Hanbali school permits wiping over cloth
socks, while the Maliki position restricts it to leather.
https://islamqa.org/maliki/binbayyah/29891/...Related MCP server: quran-mcp
Установка
Никакого клонирования, никакой ручной настройки. Выбирайте тот раннер, который у вас уже есть.
С помощью uv (рекомендуется — именно он фактически запускает сервер):
uvx --from git+https://github.com/RealYusufIsmail/islamqa-org-mcp islamqa-mcpС помощью npx, если вам удобнее Node:
npx -y islamqa-mcpПакет npm — это тонкая обёртка: он передаёт управление uv, который загружает и запускает Python-сервер в изолированном кэшированном окружении. Вам всё равно понадобится установленный uv; обёртка подскажет, как его установить, если он отсутствует.
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
brew install uv # Homebrew
powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # WindowsClaude Code
claude mcp add islamqa -- uvx --from git+https://github.com/RealYusufIsmail/islamqa-org-mcp islamqa-mcpClaude Desktop
Добавьте в claude_desktop_config.json — на macOS это
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"islamqa": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/RealYusufIsmail/islamqa-org-mcp",
"islamqa-mcp"
]
}
}
}Codex
Добавьте в ~/.codex/config.toml:
[mcp_servers.islamqa]
command = "uvx"
args = ["--from", "git+https://github.com/RealYusufIsmail/islamqa-org-mcp", "islamqa-mcp"]Перезапустите клиент. Первый поиск строит локальный индекс (около минуты, ~22 запроса); всё, что после, — мгновенно.
git clone https://github.com/RealYusufIsmail/islamqa-org-mcp.git
cd islamqa-org-mcp && uv syncЗатем укажите клиенту на него с помощью
uv --directory /absolute/path/to/islamqa-org-mcp run islamqa-mcp.
ChatGPT
ChatGPT отличается от клиентов выше: он не может запускать локальный процесс, поэтому ему нужен сервер, размещённый по публичному HTTPS-URL. Отсюда два следствия.
1. Запустите его по HTTP вместо stdio.
islamqa-mcp --transport streamable-http --host 0.0.0.0 --port 8000Тогда конечная точка, которую ожидает ChatGPT, — https://your-host/mcp.
2. В этом режиме он предоставляет search и fetch. ChatGPT отклоняет любой коннектор, у которого нет инструментов именно с такими именами, если вы не включили Developer Mode, а Deep Research вызывает только эти два. Поэтому при работе по HTTP сервер добавляет их как адаптеры поверх search_fatwas / get_fatwa в требуемой OpenAI форме — search возвращает {id, title, url} для каждого результата, fetch возвращает {id, title, text, url, metadata}. Каждый результат несёт реальный URL islamqa.org, так что ChatGPT формирует корректные цитаты.
Они не регистрируются для stdio — намеренно: Claude и Codex получают более богатый search_fatwas, а добавление более слабого алиаса лишь побудило бы их использовать худший вариант.
Попробовать без развёртывания
Запустите его локально и направьте на него туннель — именно для этого предназначен переключатель Tunnel в диалоге коннектора ChatGPT:
islamqa-mcp --transport streamable-http --port 8000
cloudflared tunnel --url http://localhost:8000 # or: ngrok http 8000Затем в ChatGPT: Settings → Apps → Advanced → Developer mode, добавьте коннектор, указывающий на https://<your-tunnel>/mcp, аутентификация None.
Правильное размещение
Включён Dockerfile, который работает на Render, Railway, Fly.io или Cloud Run:
docker build -t islamqa-mcp .
docker run -p 8000:8000 islamqa-mcpОн строит индекс URL на этапе сборки образа, и это важно: индекс стоит ~22 запросов к islamqa.org, и встраивание его в образ означает, что это происходит один раз за релиз, а не при каждом холодном старте каждой реплики. Без этого автоскейлящийся бесплатный тариф пересканировал бы карту сайта весь день. Это также делает первый пользовательский поиск мгновенным.
Прежде чем открывать публичный доступ: коннектор без аутентификации открыт для любого, кто найдёт URL, и каждый их запрос — это запрос к islamqa.org от имени вашего сервера. Поместите его за OAuth или прокси с аутентификацией, если он не только для вас, и сохраните ограничение частоты запросов как есть.
Навык (skill)
MCP-сервер даёт модели инструменты. Но он не говорит ей, как использовать их хорошо — а для фикха как важнее, чем что.
skills/islamqa-fatwa — это
навык Claude, который поставляется вместе с сервером. Он заставляет ассистента:
Спрашивать, какого мазхаба вы придерживаетесь, прежде чем отвечать — или представлять все четыре позиции рядом, если вы не следуете ни одному
Никогда не выносить решение, которое он не получил из архива. Ни выдуманных хадисов, ни полузабытых «по ханафитскому мнению…», ни сфабрикованных арабских цитат. Если в архиве ничего нет, он так и говорит, вместо того чтобы заполнять пробел
Использовать реальные категории традиции, а не сводить всё к халяль/харам — включая ханафитскую семичастную схему, чтобы макрух тахрими не был тихо понижен до «нежелательно» или повышен до «харам»
Сообщать, когда охват скуден. Архив в основном ханафитский; если нет маликитского ответа, он сообщает об этом, а не выводит его умозрительно
Перенаправлять дальше по вопросам развода, наследования, опеки и другим делам, где нужен человек, а не поисковый индекс
Установите его глобально:
git clone https://github.com/RealYusufIsmail/islamqa-org-mcp.git /tmp/islamqa-mcp
cp -r /tmp/islamqa-mcp/skills/islamqa-fatwa ~/.claude/skills/Он активируется сам, когда вопрос оказывается вопросом о религиозном решении.
Инструменты
Инструмент | Что делает |
| Полнотекстовый поиск по архиву. Фильтрация по |
| Один ответ полностью: вопрос, ответ, арабские цитаты, выдавшее учреждение. |
| Все 47 сайтов дар-уль-ифта с количеством ответов по каждому. |
| Последние ответы, опционально с фильтром. |
| Размер индекса, размер кэша, время последней пересборки. |
| Обновить индекс из карты сайта. Требуется редко. |
По HTTP добавляются search и fetch для совместимости с ChatGPT — см. ChatGPT.
Каждый ответ возвращается с указанием авторства и примечанием, напоминающим модели цитировать URL и рассматривать решение как позицию одного муфтия, а не универсальную.
Командная строка
Те же операции без MCP-клиента:
uv run islamqa search "wiping over socks" --madhhab hanafi
uv run islamqa get https://islamqa.org/hanafi/askimam/127638/can-i-wipe-make-masah-over-the-new-socks/
uv run islamqa sources
uv run islamqa statusКак это работает
IslamQA.org работает на WordPress с отключённым REST API, поэтому JSON-эндпоинта для вызова нет. Зато он публикует полную карту сайта и серверно отрисованные страницы — те же публичные страницы, которые видит любой читатель или краулер поисковой системы.
Сервер работает в два слоя:
Индекс. Один проход по карте сайта (~22 запроса) фиксирует URL каждого ответа вместе с его ID, мазхабом, источником и заголовком, полученным из слага. Это ~98 000 ответов на несколько мегабайт и около минуты, и это означает, что поиск с этого момента локальный и мгновенный.
Кэш. Чтение ответа загружает и разбирает эту одну страницу, затем сохраняет её. Поиск выполняется по индексу SQLite FTS5 по обоим слоям, так что ответ можно найти по заголовку сразу, а по полному тексту — после того как кто-то его прочитал: архив становится тем более доступным для поиска, чем больше вы им пользуетесь.
sitemap ──► index (~98k URLs + titles) ──┐
├──► FTS5 (BM25) ──► search_fatwas
answer page ──► parse ──► cache (full) ──┘ get_fatwaПоскольку ответы были импортированы с 47 разных сайтов в течение многих лет, страницы бывают трёх шаблонных форм, и все три обрабатываются: современные обёртки .ai-question / .ai-answer-content; голые абзацы с явными метками Question: / Answer:; и голые абзацы без меток вовсе. Лишние префиксы Q: и хвостовой текст «Original Source Link» удаляются, а арабские сноски с цитатами из классических текстов выделяются в отдельное поле citations, так что ответ читается чисто, не теряя стоящих за ним доказательств.
Есть ли у islamqa.org API?
Нет публичного JSON API. Сайт работает на WordPress, но REST API отключён на всём сайте. Проверено в августе 2026:
Эндпоинт | Результат |
|
|
|
|
|
|
|
|
|
|
Поле поиска на сайте отрисовывается на стороне клиента через ElasticPress, поэтому его результаты тоже отсутствуют в HTML — именно поэтому этот сервер строит собственный индекс, а не проксирует поиск по сайту.
Что доступно машиночитаемо и открыто:
Эндпоинт | Формат | Примечания |
| XML | 22 дочерние карты сайта |
| XML | 5 000 URL ответов на страницу, с |
| RSS 2.0 | Последние ответы по всему сайту |
| RSS 2.0 | Последние ответы по каждому учреждению |
Страницы ответов | HTML + JSON-LD | Схема |
| — | Возвращается пустым: ничего не запрещено |
Этот сервер использует карту сайта и страницы ответов. RSS-ленты — лёгкий вариант, если вам нужны только новые ответы и не нужен поиск: им не нужны ни индекс, ни скрейпинг:
curl -s https://islamqa.org/hanafi/askimam/feed/URL ответов структурированы, поэтому вы можете обратиться к любому ответу напрямую:
https://islamqa.org/{madhhab}/{source}/{post_id}/{slug}/
hanafi askimam 127638 can-i-wipe-make-masah-over-the-new-socksЕсли islamqa.org когда-нибудь включит свой REST API, этот сервер должен переключиться на него — откройте issue, если заметите, что он вернулся.
Конфигурация
Всё опционально, задаётся через переменные окружения:
Переменная | По умолчанию | Назначение |
|
| Где живут индекс и кэш |
|
| Секунды между запросами |
|
| Как долго кэшированный ответ свеж |
|
| Когда пересобирать индекс |
| идентифицирует этот инструмент | Отправляется с каждым запросом |
Этикет (адаб)
Этот сервис читает бесплатный ресурс, который существует на пожертвования, поэтому он построен так, чтобы быть хорошим гостем:
Один запрос в секунду, глобально сериализованный — параллельные вызовы инструментов не могут превратиться в всплеск.
Агрессивное кэширование. Фетвы по сути неизменяемы после публикации, поэтому страница загружается один раз и переиспользуется в течение 90 дней.
Загружает только то, что запрошено. Массовый проход читает sitemap, а не 100 000 страниц с ответами. Здесь нет краулера.
Идентифицирует себя настоящим User-Agent, указывающим на этот репозиторий.
Привязан к одному хосту. Каждый URL проверяется по белому списку до открытия сокета, поэтому никакой аргумент от модели не может превратить это в открытый прокси.
Указывает источник всего. Выдавшее учреждение, муфтий, если он назван, и ссылка на собственную копию darul ifta сопровождают каждый ответ.
Если вы поддерживаете islamqa.org и хотите что-то изменить здесь — лимит запросов, User-Agent или само существование инструмента — пожалуйста, откройте issue, и это будет рассмотрено.
Об использовании. Это ответы квалифицированных муфтиев, но фетва даётся конкретному человеку в конкретном контексте. Результат поиска — не решение по вашей ситуации, а языковая модель, передающая его, — не учёный. По любым важным вопросам обращайтесь напрямую к квалифицированному специалисту.
Разработка
uv sync --extra dev
uv run pytest # 81 tests, no network — runs against saved fixtures
uv run ruff check .
uv run mypy src/islamqa_mcpТесты парсера запускаются на урезанных копиях реальных страниц. Если islamqa.org изменит свой шаблон, они громко упадут, и это намеренно: тихая регрессия парсинга незаметно подавала бы модели пустые ответы.
Лицензия
MIT — см. LICENSE.
Лицензия распространяется только на это программное обеспечение. Фетвы принадлежат учёным и учреждениям, которые их издали. Этот инструмент читает публичные страницы и даёт ссылки; он не распространяет архив.
Available Tools
6 toolsbrowse_fatwasARead-only
List the most recent fatwas, optionally filtered to one madhhab or issuing source. For browsing; prefer search_fatwas to answer a specific question.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results. | |
| offset | No | Skip this many results. | |
| source | No | Issuing site slug. | |
| madhhab | No | Restrict to one school. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it returns the 'most recent' fatwas (ordering behavior) and mentions optional filters, which goes beyond annotations. It omits details like pagination, but that is standard and the bar is lower given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence delivers the core function, the second gives usage guidance. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so the return format is covered. Annotations handle safety. The description covers the purpose, filtering, and usage distinction. For a read-only browse tool with optional filters, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter (limit, offset, source, madhhab) already described. The description only reiterates the madhhab and source filters ('optionally filtered to one madhhab or issuing source') without adding new semantics, so it adds marginal value beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('most recent fatwas'), and explicitly differentiates from the sibling search_fatwas by noting that browsing is for exploration while search is for specific questions. This makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'For browsing; prefer search_fatwas to answer a specific question.' This gives clear when-to-use guidance and a direct alternative, which is exactly what the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fatwaARead-only
Fetch one full fatwa from IslamQA.org by URL: the original question, the mufti's answer, the Arabic citations of classical texts, the issuing darul ifta and a link to their own copy. Cached locally after the first read.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | An islamqa.org answer URL, as returned by search_fatwas. | |
| refresh | No | Bypass the local cache and re-fetch the page. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it discloses local caching after first read and the existence of a refresh parameter to bypass cache. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The main purpose is front-loaded, and the caching/refresh detail is placed logically after. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and an output schema present (stated in context), the description covers the essential usage details: what it fetches, the source URL, and caching behavior. An agent can call it correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both url and refresh already well-described in the schema. The description adds the note 'as returned by search_fatwas' for url and mentions caching for refresh, but both are also implied in the schema. Baseline 3 is appropriate since the description adds minimal extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches one full fatwa by URL and enumerates the specific content (question, answer, citations, issuing darul ifta, link). This is a specific verb+resource and distinguishes it from sibling tools like search_fatwas (search) and browse_fatwas (browse).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes the URL comes from search_fatwas, which implies its usage context, and mentions caching behavior. However, it does not explicitly state when to prefer this over alternatives or provide when-not-to-use guidance. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_statusARead-only
Report how many fatwas are indexed, how many have been read into the local full-text cache, and when the index was last rebuilt.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is clearly a safe read operation. The description adds valuable context by specifying exactly what metrics are reported (number indexed, number in cache, last rebuild time), which goes beyond the annotations. It does not contradict the annotations and provides helpful detail about the tool's output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately states the core function. It is front-loaded with the action ('Report') and lists the three key metrics in a clear, organized manner. There is no redundancy or filler, making it highly efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no complex inputs) and the presence of an output schema, the description is complete. It explains what the tool reports without needing to describe return values (which are covered by the output schema). For a status-reporting tool with this straightforward scope, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially 100% described. The description does not need to explain parameters, and the baseline for zero-parameter tools is 4. The description focuses on the output, which is appropriate given there are no inputs to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reporting on fatwa index status, including counts and last rebuild time. It uses the specific verb 'report' with a clear resource 'index status', and it distinguishes itself from siblings like search_fatwas, list_sources, get_fatwa, and rebuild_index by focusing on status metrics rather than data retrieval or modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking index health and statistics, but it does not explicitly state when to use this tool versus alternatives. For instance, it doesn't mention 'use this before searching to ensure the index is up-to-date' or 'use this to diagnose why search results may be incomplete.' The purpose makes usage obvious, but there is no explicit guidance or mention of exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesARead-only
List every darul ifta indexed by IslamQA.org, grouped by madhhab, with how many answers each contributed. Use to discover valid 'source' values for search_fatwas, or to see how the schools are represented.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and destructiveHint, so the description adds value by disclosing that the list is exhaustive ('every'), grouped by madhhab, and includes answer counts. These are behavioral traits beyond the safety annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first states the core function, the second gives actionable usage guidance. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format details are unnecessary. The description covers purpose, scope, grouping, and ties to sibling usage, making it fully adequate for an agent to know when and why to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100%, so there is nothing to explain. The description correctly focuses on what the output provides (grouped list with counts), which still aids the agent in interpreting results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (darul ifta indexed by IslamQA.org), with grouping and count detail. It also explicitly ties to searching for valid source values, distinguishing it from sibling tools like search_fatwas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear, explicit use cases ('discover valid source values' and 'see how schools are represented') and implicitly positions it as a prerequisite to search_fatwas. It does not state when not to use it, but the purpose is sufficiently distinct from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rebuild_indexA
Rebuild the local URL index from islamqa.org's sitemap. Rarely needed — the index builds itself on first search and refreshes when stale. Takes about a minute and makes roughly 22 requests to the site.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint: false, destructiveHint: false, openWorldHint: true) are already present, but the description adds concrete behavioral details: it takes ~1 minute and makes ~22 requests to an external site. This discloses side effects (network traffic, delay) beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences: purpose, when-to-use, and cost. Every sentence adds value and the most important guidance (rarely needed) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, side-effectful maintenance tool, the description covers purpose, usage context, behavior, and cost. The presence of an output schema further reduces the need to explain return values. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema already fully documents this aspect (coverage 100%). No parameter description is needed; the baseline of 4 applies since there's nothing to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Rebuild') and resource ('local URL index from islamqa.org's sitemap'), making the core function clear. It does not explicitly differentiate from siblings like index_status, but the uniqueness is implied given it's a one-off maintenance operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Rarely needed' and explains the index 'builds itself on first search and refreshes when stale.' This gives clear guidance on when NOT to call it and contrasts with automatic behavior. Also adds cost information (time, requests) that discourages casual use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_fatwasARead-only
Search roughly 100,000 fatwas (Islamic legal answers) on IslamQA.org by keyword or question. Use this whenever a question concerns Islamic rulings, fiqh, worship or practice and you want sourced scholarly answers rather than your own knowledge. Returns ranked results with title, madhhab, issuing source and URL; call get_fatwa on a result to read the full answer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results. | |
| query | Yes | Keywords or a question, e.g. 'wiping over socks in wudu'. | |
| source | No | Restrict to one issuing site's slug, e.g. 'askimam'. See list_sources. | |
| madhhab | No | Restrict to one school of law. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful behavioral details: it returns ranked results with title, madhhab, source and URL, and explicitly says the full text requires a separate get_fatwa call. However, it does not mention pagination, sorting behavior, or any rate limits, so transparency is only partially enhanced beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured sentences, with the core purpose front-loaded and the usage guidance following. Every sentence earns its place, providing purpose, scope, result format, and a directive to the next step without any fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with an existing output schema and clear annotations, the description provides sufficient context: when to use, what results contain, and how to proceed (call get_fatwa). It omits any explanation of limit semantics or result ordering, but the schema covers limits and the output schema defines the return structure, so the description is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds value by giving an example query ('wiping over socks in wudu') and by explicitly pointing to list_sources when using the source parameter. Yet it does not explain parameter relationships or default behaviors beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (search) on a specific resource (fatwas on IslamQA.org) and the scope (keyword or question). It also distinguishes itself from siblings like get_fatwa by noting that it returns summaries and that full answers require a follow-up call, though it doesn't explicitly contrast with browse_fatwas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use the tool ('whenever a question concerns Islamic rulings, fiqh, worship or practice and you want sourced scholarly answers rather than your own knowledge') and provides a clear trigger condition. It also hints at an alternative (using own knowledge) but does not explicitly mention when to use siblings like browse_fatwas, so a small gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
browse_fatwas - First observed
get_fatwa - First observed
index_status - First observed
list_sources - First observed
rebuild_index - First observed
search_fatwas
TDQS
Scored across 6 tools
Each tool serves a unique, clearly defined purpose: search for fatwas, browse recent ones, fetch a specific fatwa, list sources, check index status, and rebuild the index. There is no overlap or ambiguity between them.
All six tools follow the verb_noun pattern in snake_case (search_fatwas, list_sources, get_fatwa, browse_fatwas, index_status, rebuild_index), with consistent verb choices that clearly indicate the action taken.
Six tools is well within the ideal range for a domain-specific server. Each tool is necessary and none are redundant; the count is neither too sparse nor too heavy for the server's stated purpose of accessing IslamQA fatwas.
The tool surface covers the full workflow: searching, browsing, retrieving individual fatwas, understanding available sources, and maintaining the local index. There are no obvious missing operations for a read-only scholarly answer API.
Maintenance
Related MCP Connectors
Search and retrieve Quran ayahs, tafsir commentary, hadith, and detailed hadith records.
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Semantic search across 6,236 Quran verses and 12,416 authentic Hadiths for Islamic guidance.
- DikeOAuthio.github.fr3on
Grounded MENA legal search, reasoning, citation resolution, and citation-graph traversal.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables fetching and searching canonical hadith texts (Arabic and English) with cross-references and citation-safe URLs for assistants, built on FastMCP.3GPL 3.0
- FlicenseNot gradedqualityDmaintenanceProvides canonical Quran text, translations, and tafsir commentary via MCP for accurate AI citation.102-
- AlicenseNot gradedqualityDmaintenanceMCP server to search and retrieve passages from a corpus of 7,872 classical Islamic books via the Sahifah API, with full citations and mu'tabar filtering.14 npmMIT
- FlicenseAqualityCmaintenanceServes a scholar-approved Islamic corpus of Qur'an and hadith passages to any MCP client with server-side refusal enforcement. Enables natural-language questioning, retrieval, policy checking, and honest corpus coverage reporting while preventing fabricated answers.6-