islamqa-org-mcp
islamqa-org-mcp
让 Claude、Codex 以及任何其他 MCP 客户端访问约 98,000 条有出处的教法判例(fatwa)。
一个面向 IslamQA.org 的 MCP 服务器, 该网站聚合了逊尼派四大教法学派(madhahib)中 47 家独立教法机构(darul ifta)的解答。
网站 · 安装 · ChatGPT · 工具 · 工作原理 · 礼仪
为什么
向语言模型提问一个教法学(fiqh)问题,它会从混杂的训练数据中作答,没有出处、没有教法学派归属,也无法核实。对于这类问题,这种形式是错误的。
这个服务器改变了默认行为。你的助手会搜索一个真实的学者解答档案库,并引用其中一条,附上穆夫提(mufti)、教法学派、机构名称以及一个你可以打开的 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-mcpnpm 包只是一个薄封装——它将任务转交给 uv,由 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 8000ChatGPT 需要的端点即为 https://your-host/mcp。
2. 在此模式下它暴露 search 和 fetch。 除非你开启了开发者模式(Developer Mode),否则 ChatGPT 会拒绝任何工具名称不完全是这两个的连接器,而 Deep Research 只会调用这两个。因此,在通过 HTTP 运行时,服务器会将它们作为 search_fatwas / get_fatwa 之上的适配器添加,采用 OpenAI 要求的格式——search 每条结果返回 {id, title, url},fetch 返回 {id, title, text, url, metadata}。每条结果都带有真实的 islamqa.org URL,因此 ChatGPT 能呈现正确的引用。
它们故意不在 stdio 模式下注册:Claude 和 Codex 获得更丰富的 search_fatwas,而添加一个较弱的别名只会诱导它们使用较差的那个。
不部署就试用
在本地运行它,并将隧道指向它——这正是 ChatGPT 连接器对话框中Tunnel 开关的用途:
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 技能,
随服务器一同提供。它使助手能够:
在回答前询问你遵循哪个教法学派——如果你不遵循任何学派,则并排呈现全部四个学派的立场
绝不发布未经检索的裁决。 不编造圣训(hadith),不凭半吊子记忆说"哈乃斐学派的观点是……",不伪造阿拉伯语引文。如果档案库中没有相关内容,它会如实说明,而不是填补空白
使用传统中实际的分类,而不是将所有事情扁平化为合法/非法(halal/haram)——包括哈乃斐学派的七级分类体系,因此 makrūh taḥrīmī 不会被悄悄降级为"不喜欢"或升级为"haram"
在覆盖不足时说明。 该档案库以哈乃斐学派为主;如果没有马立基学派的解答,它会报告这一点,而不是自行推断
转介处理离婚、继承、监护权以及其他需要真人而非搜索索引的事项
全局安装它:
git clone https://github.com/RealYusufIsmail/islamqa-org-mcp.git /tmp/islamqa-mcp
cp -r /tmp/islamqa-mcp/skills/islamqa-fatwa ~/.claude/skills/当某个问题被判定为裁决类问题时,它会自动激活。
工具
工具 | 功能 |
| 跨档案库全文搜索。可按 |
| 完整获取一条解答:问题、回答、阿拉伯语引文、发布机构。 |
| 全部 47 个 darul ifta 网站及各站解答数量。 |
| 最新解答,可选过滤。 |
| 索引大小、缓存大小、上次重建时间。 |
| 从站点地图刷新索引。很少需要。 |
在 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、教法学派、发布来源以及从 slug 推导出的标题。约 98,000 条解答只需几 MB 和大约一分钟,此后搜索就是本地且即时的。
缓存。 读取一条解答会获取并解析该页面,然后存储它。搜索在覆盖两层的 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 年 8 月探测:
端点 | 结果 |
|
|
|
|
|
|
|
|
|
|
站内搜索框由 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。
配置
全部可选,通过环境变量设置:
变量 | 默认值 | 用途 |
|
| 索引和缓存的存放位置 |
|
| 请求之间的间隔秒数 |
|
| 缓存解答保持新鲜的时间 |
|
| 何时重建索引 |
| 标识此工具 | 随每个请求发送 |
礼仪(adab)
这是一个靠捐赠运营的免费服务,因此它被设计成一个好访客:
每秒一个请求,全局串行化——并发的工具调用 不会爆发成突发流量。
积极缓存。 法特瓦一经发布实际上就是不可变的,因此 每个页面只抓取一次,并在 90 天内重复使用。
只抓取被要求的内容。 批量处理只读取站点地图,而不是 10 万个回答页面。这里没有爬虫。
表明身份,使用指向本仓库的真实 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-