Islamic Content MCP Server
This MCP server lets AI applications retrieve authentic Islamic content (Quran, Hadith, books, fatwas, articles, audio/video) and integrate it into LLM workflows.
Quran services: List and fetch Quran translations by surah/ayah, get ayah audio, and list/submit translation notes via QuranEnc and IslamHouse.
IslamHouse Quran: Browse Quran categories, reciters/authors, surah details, and recitations.
Hadith services: Explore HadeethEnc languages, categories/root categories, list hadiths, and get detailed translations and explanations.
IslamHouse Library: Browse books, audios, videos, fatwas, articles, authors, categories, languages, item details, attachments, translations, and author/source listings.
Bayan Al-Islam: Fetch Muslim/non-Muslim content lists, single content details, lookups, recent contents, name searches, and content/attachment translations.
Risalat Al-Haramain: Access full/content feeds, fatwas, hadiths, Quran lists, content searches, translations, and language/type lookups.
Al-Montaka: Retrieve content, comments, categories, age groups, entities, expert levels, ideologies, persons, sections, tags, targeted groups, and YouTube channels.
LLM integration: Use the built-in client to gather context for RAG, or expose MCP tools to Gemini, OpenAI, Anthropic, and Python clients for agentic tool calling.
Enables Google Gemini models to access authentic Islamic content including Quran translations, Hadith details, and IslamHouse library items through MCP tools.
Enables OpenAI GPT models to access authentic Islamic content such as Quran translations, Hadith collections, and IslamHouse library items via MCP tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Islamic Content MCP ServerGet the English translation of Surah Al-Fatiha."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Islamic Content Model Context Protocol (MCP) Server
An official Model Context Protocol (MCP) Server developed for The Association for Multi-lingual Islamic Content designed to connect AI applications, custom LLM agents, and AI assistants to authentic Islamic content (the Holy Qur'an, Hadith, and Islamic resources) in multiple languages.
This server acts as a bridge for the islamic-content-sdk, exposing its endpoints as tools and documentation as resources so that AI models can fetch live content and learn how to develop code using both the NPM (JS/TS) and PIP (Python) libraries.
Official SDKs
NPM Package:
islamic-content-sdkPyPI Package:
islamic-content-sdk
Related MCP server: Quran Cloud MCP Server
Features
Quran Services: Consolidated endpoint
quran_servicesandislamhouse_quranfor translations, audio, reciters, and categories.Hadith Services: Consolidated endpoint
hadeethenc_servicesfor categories, translations, and explanations.IslamHouse Library: Centralized endpoint
islamhouse_libraryfor books, audios, videos, fatwas, articles, author data, and translations.Bayan Al-Islam & Risalat Al-Haramain: Powerful endpoints
bayan_al_islamandrisalat_al_haramainfor specialized Islamic databases, lookup tables, and targeted content lists.
LLM Integration & Custom Clients (Code Integration)
This MCP server is designed primarily to connect authentic Islamic content directly to your AI applications and custom LLM workflows.
1. Install Dependencies
npm install islamic-content-mcp-server
# Also install your preferred LLM library (e.g., openai, @google/genai, @anthropic-ai/sdk)2. Simple Integration (RAG / Context Retrieval)
The easiest way is to use the built-in client to gather context programmatically and feed it to the LLM:
import { IslamicContentMCPClient } from "islamic-content-mcp-server";
import OpenAI from "openai";
// 1. Initialize and connect the client (starts the server internally via stdio)
const client = new IslamicContentMCPClient();
await client.connect();
// 2. Fetch structured context (customize these values to fit your application's user search)
const context = await client.getContext({
topic: "Prayer", // Replace with your dynamic topic (e.g., "Fasting", "Charity", "Faith")
sources: ["quran", "hadith"], // Specify sources: "quran", "hadith", or both
language: "en" // Language context: "en", "ar", etc.
});
// 3. Feed the context to your LLM
const openai = new OpenAI();
const completion = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{
role: "system",
content: `Use the following authentic context to answer the user's question:\n\n${context}`
},
{
role: "user",
content: "What does the Quran say about prayer?"
}
]
});
console.log(completion.choices[0].message.content);
// 4. Clean up
await client.disconnect();3. Agentic Integration (Dynamic Tool Calling)
You can also pass the MCP tools directly to the LLM so it can dynamically decide when to call specific tools (e.g. searching Hadiths, loading suras, or fetching audio) to answer user prompts.
Click below to view the integration code for your preferred platform:
import { IslamicContentMCPClient } from "islamic-content-mcp-server";
import { GoogleGenAI } from '@google/genai';
// Initialize and connect the client (starts the server internally via stdio)
const client = new IslamicContentMCPClient();
await client.connect();
const tools = await client.getTools();
const geminiTools = tools.map(tool => ({
functionDeclarations: [{
name: tool.name,
description: tool.description,
parameters: tool.inputSchema
}]
}));
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const userPrompt = "Tell me a Hadith about Prayer from authentic sources.";
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: userPrompt,
config: { tools: geminiTools }
});
const functionCalls = response.functionCalls;
if (functionCalls && functionCalls.length > 0) {
const call = functionCalls[0];
const toolResult = await client.callTool(call.name, call.args);
const finalResponse = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: [
{ role: 'user', parts: [{ text: userPrompt }] },
{ role: 'model', parts: [{ functionCall: call }] },
{ role: 'user', parts: [{ functionResponse: { name: call.name, response: { content: toolResult } } }] }
]
});
console.log("Gemini response:\n", finalResponse.text);
} else {
console.log("Gemini response:\n", response.text);
}
await client.disconnect();import { IslamicContentMCPClient } from "islamic-content-mcp-server";
import OpenAI from "openai";
const client = new IslamicContentMCPClient();
await client.connect();
const tools = await client.getTools();
const openaiTools = tools.map(tool => ({
type: "function",
function: {
name: tool.name,
description: tool.description,
parameters: tool.inputSchema
}
}));
const openai = new OpenAI();
const messages = [{ role: "user", content: "Tell me the translation of Hadith number 66512 in English." }];
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages,
tools: openaiTools
});
const toolCalls = response.choices[0].message.tool_calls;
if (toolCalls && toolCalls.length > 0) {
const toolCall = toolCalls[0];
const toolResult = await client.callTool(toolCall.function.name, JSON.parse(toolCall.function.arguments));
messages.push(response.choices[0].message);
messages.push({
role: "tool",
tool_call_id: toolCall.id,
content: JSON.stringify(toolResult)
});
const finalResponse = await openai.chat.completions.create({
model: "gpt-4o",
messages
});
console.log("OpenAI response:\n", finalResponse.choices[0].message.content);
} else {
console.log("OpenAI response:\n", response.choices[0].message.content);
}
await client.disconnect();import { IslamicContentMCPClient } from "islamic-content-mcp-server";
import Anthropic from "@anthropic-ai/sdk";
const client = new IslamicContentMCPClient();
await client.connect();
const tools = await client.getTools();
const claudeTools = tools.map(tool => ({
name: tool.name,
description: tool.description,
input_schema: tool.inputSchema
}));
const anthropic = new Anthropic();
const userPrompt = "Fetch the translation of Surah Al-Fatiha in English.";
const response = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
tools: claudeTools,
messages: [{ role: "user", content: userPrompt }]
});
const toolUse = response.content.find(block => block.type === "tool_use");
if (toolUse) {
const toolResult = await client.callTool(toolUse.name, toolUse.input);
const finalResponse = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
tools: claudeTools,
messages: [
{ role: "user", content: userPrompt },
{ role: "assistant", content: response.content },
{
role: "user",
content: [
{
type: "tool_result",
tool_use_id: toolUse.id,
content: JSON.stringify(toolResult)
}
]
}
]
});
console.log("Claude response:\n", finalResponse.content[0].text);
} else {
console.log("Claude response:\n", response.content[0].text);
}
await client.disconnect();import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
# Launches the Node server via npx on stdio
server_params = StdioServerParameters(
command="npx",
args=["-y", "islamic-content-mcp-server"]
)
async def run():
async with stdio_client(server_params) as (read_stream, write_stream):
async with ClientSession(read_stream, write_stream) as session:
# Initialize connection
await session.initialize()
# List available tools
tools = await session.list_tools()
print(f"Loaded {len(tools.tools)} tools.")
# Call tool: quranenc_translation_aya
result = await session.call_tool("quranenc_translation_aya", {
"translationKey": "english_saheeh",
"suraNumber": 1,
"ayaNumber": 1
})
print("Translation Result:")
print(result.content[0].text)
if __name__ == "__main__":
asyncio.run(run())Connecting to AI Desktop & IDE Clients
You can load this MCP server directly into AI-powered IDEs and desktop assistants. Click below to view the configurations:
Add the server config to your Claude Desktop configuration file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add the following block under mcpServers:
{
"mcpServers": {
"islamic-content": {
"command": "npx",
"args": [
"-y",
"islamic-content-mcp-server"
]
}
}
}Note: Replace npx with the absolute path to npm/npx if your client cannot locate it globally.
Go to Settings > Features > MCP.
Click + Add New MCP Server.
Fill in the details:
Name:
Islamic ContentType:
stdioCommand:
npx -y islamic-content-mcp-server
Click Save.
Add the configuration block under mcpServers inside your MCP settings file:
Windows:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json(or similar depending on the extension version)macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
{
"mcpServers": {
"islamic-content": {
"command": "npx",
"args": [
"-y",
"islamic-content-mcp-server"
]
}
}
}Add the configuration block under mcpServers in your Windsurf MCP configuration file:
Path:
~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"islamic-content": {
"command": "npx",
"args": [
"-y",
"islamic-content-mcp-server"
]
}
}
}Add the configuration block under mcpServers in your Antigravity configuration file:
Windows:
C:\Users\<YourUsername>\.gemini\antigravity-ide\mcp_config.jsonmacOS:
~/.gemini/antigravity-ide/mcp_config.json
{
"mcpServers": {
"islamic-content": {
"command": "npx",
"args": [
"-y",
"islamic-content-mcp-server"
]
}
}
}Exposed Tools (Consolidated)
To optimize for AI Context Windows and LLM Tool Calls, the server exposes 6 powerful, parameter-driven tools. Use the action parameter to select the behavior of the tool.
1. quran_services (QuranEnc)
Fetch Quran translations and audio via QuranEnc.
Actions:
list_translations,get_sura_translation,get_aya_translation,get_aya_audio
2. islamhouse_quran
Fetch Quran categories, reciters, and audio from IslamHouse.
Actions:
list_categories,get_category,get_author,get_author_recitations,get_sura_details,get_sura_recitations,get_recitation_details
3. hadeethenc_services
Fetch Hadith categories, lists, and translations from HadeethEnc.
Actions:
list_languages,list_categories,list_root_categories,list_hadiths,get_hadith_details
4. islamhouse_library
Access the IslamHouse Library for books, audios, videos, fatwas, articles, and author data.
Actions:
get_types,get_categories,get_categories_tree,get_child_categories,get_category_basic,get_sub_categories,get_category_types,get_category_languages,list_items,get_author_items,get_category_items,get_latest_items,get_highlighted_items,get_items_count,get_item_details,get_item_attachments,get_item_tree,get_item_card_translations,get_item_translations,list_authors,get_author_details,get_author_card_translations,get_author_available_types,get_author_available_locales,list_languages,get_language_terms,get_language_availability
5. bayan_al_islam
Access Bayan Al-Islam for targeted Islamic content.
Actions:
list_languages,list_muslim_content,list_non_muslim_content,get_content,list_paginated_languages,get_recent_contents,get_lookups,search_name,get_available_languages,get_content_translation,get_attachments_translation
6. risalat_al_haramain
Access Risalat Al-Haramain for fatwas, hadeeths, and contents.
Actions:
get_full_contents,get_contents,get_content,search_name,search_contents,get_available_languages,get_content_translation,get_fatwas,get_hadeeths,get_quran,get_lookups_languages,get_lookups_content_types
Developer Guide (Local Development)
If you want to clone, modify, or run the server locally:
1. Clone the Repository
git clone https://github.com/2yousefreda/islamic-content-mcp.git
cd islamic-content-mcp2. Install Dependencies & Build
npm install
npm run build3. Run Locally (via Stdio)
node dist/bin.jsTo configure your AI client to use your local development folder, change the config to:
"command": "node",
"args": ["/path/to/islamic-content-mcp/dist/bin.js"]Donation & Support
You can support the projects and efforts of The Association for Multi-lingual Islamic Content through the following official channels:
License
This project is licensed under the ISC License.
Available Tools
6 toolsbayan_al_islamA
Access Bayan Al-Islam to fetch specialized Islamic content targeting Muslims and Non-Muslims, including translated articles and structured lookups. Unlike the general IslamHouse library, this provides curated content categorized by the target audience's faith perspective.
Behavior: Read-only. Idempotent. No authentication. Falls back to default language if translation is missing. Usage Guidelines:
Use when seeking content specifically tailored for non-Muslims, or curated responses to common questions.
Do NOT use for raw Hadith (use
hadeethenc_services) or Quran recitations (useislamhouse_quranorquran_services). Action Mapping:list_languages,list_paginated_languages:language,page(int), [name] -> Returns { languages: [{ code, name }] }list_muslim_content,list_non_muslim_content:language-> Returns { paths: [] }get_content,search_name:id(int) orname(string),language-> Returns { id, title, body, matchingResults: [] }get_recent_contents:ids(array of ints),init(bool),lang(overrideslanguage) -> Returns { recentItems: [] }get_lookups,get_available_languages:id(int),language-> Returns { metadata: [] }get_content_translation,get_attachments_translation:id(int),targetLanguage(ISO-639-1),language-> Returns { translatedBody, attachments: [] } Returns: Concrete JSON payload { id, title, body, paths: [], recentItems: [] } containing targeted content.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| ids | No | ||
| init | No | ||
| lang | No | ||
| name | No | ||
| page | No | ||
| action | Yes | Required. One of: 'list_languages', 'list_muslim_content', 'list_non_muslim_content', 'get_content', 'list_paginated_languages', 'get_recent_contents', 'get_lookups', 'search_name', 'get_available_languages', 'get_content_translation', 'get_attachments_translation' | |
| language | No | ||
| targetLanguage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It clearly states 'Read-only. Idempotent. No authentication. Falls back to default language if translation is missing,' which goes well beyond the schema and helps the agent predict side effects and failure modes. No contradictions exist.
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 well-structured with distinct sections (Behavior, Usage Guidelines, Action Mapping, Returns) and front-loaded purpose. Every sentence adds value: behavior traits, usage criteria, parameter mapping, and return shapes are all necessary and not redundant. Despite being lengthy, it is tightly organized and earns its length.
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 tool with 9 parameters, no annotations, and no output schema, the description is remarkably complete. It covers all actions, parameter semantics, return payload shapes, fallback behavior, and exclusions against siblings. An agent has everything needed to invoke it correctly without external lookup.
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?
With only 11% schema description coverage, the description must compensate, and it does. The Action Mapping section enumerates every action, maps each to its relevant parameters with types (`page` int, `ids` array of ints, `targetLanguage` ISO-639-1), and explains special semantics like `lang` overriding `language`. This fully clarifies the otherwise bare parameters.
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 explicitly states a specific verb ('fetch'), a resource ('Bayan Al-Islam'), and a target scope (specialized Islamic content for Muslims and Non-Muslims). It also differentiates from siblings by contrasting with the general IslamHouse library and naming alternatives like `hadeethenc_services` and `islamhouse_quran`, so an agent can distinguish it without opening schemas.
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 provides explicit when-to-use guidance ('Use when seeking content specifically tailored for non-Muslims, or curated responses to common questions') and clear when-not-to-use instructions with named alternatives ('Do NOT use for raw Hadith (use `hadeethenc_services`) or Quran recitations (use `islamhouse_quran` or `quran_services`)'). This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hadeethenc_servicesA
Access HadeethEnc to fetch authentic Hadith texts, categories, and translations in multiple languages. This is the only tool dedicated exclusively to Hadith texts and their detailed explanations.
Behavior: Read-only. Idempotent. No authentication. No strict rate limits. Returns empty if ID not found. Usage Guidelines:
Use when the user asks for Prophetic sayings, Hadith translations, or scholarly explanations.
Do NOT use for official fatwas or general books (use
islamhouse_libraryorrisalat_al_haramain). Action Mapping:list_languages,list_categories,list_root_categories:languageCode(ISO-639-1) -> Returns { categories: [{ id, title, hadeeths_count }] }list_hadiths:language,categoryId(int),page(int),perPage(int) -> Returns { data: [{ id, title }] }get_hadith_details:id(int),language(ISO-639-1) -> Returns { id, hadeeth, explanation, translations: [] } Returns: JSON array for lists or a detailed JSON object containing specific Hadith text and translations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Hadith ID | |
| page | No | Page number | |
| action | Yes | Required. One of: 'list_languages', 'list_categories', 'list_root_categories', 'list_hadiths', 'get_hadith_details' | |
| perPage | No | Items per page | |
| language | No | Language code for lists/details (e.g. 'en') | |
| categoryId | No | Category ID | |
| languageCode | No | Language code for categories (e.g. 'en') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and meets it: it discloses read-only, idempotent, no authentication, no strict rate limits, and empty response for missing IDs. It also outlines the JSON return shape for list and detail actions, so the agent knows what to expect.
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 organized into Behavior, Usage Guidelines, Action Mapping, and Returns, with the core purpose front-loaded. Each section earns its place by adding operational or routing value; there is no filler or tautology.
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 7-parameter service with no output schema and no annotations, the description is complete: it explains every action's parameters, return shape, behavior, and usage boundary. An agent has what it needs to select and call the tool correctly.
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?
Although the schema has 100% description coverage, the description goes further by mapping each action to its relevant parameters and return shape (e.g., list_languages uses languageCode and yields { categories: [...] }, get_hadith_details uses id and language and yields translations). This is meaning the schema alone does not provide.
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 opens with a specific verb ('fetch') and resource ('Hadith texts, categories, and translations'), and immediately distinguishes this service by calling it 'the only tool dedicated exclusively to Hadith texts and their detailed explanations.' This lets an agent separate it from quran_services and other Islamic-content siblings without inspecting schemas.
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?
Explicit Usage Guidelines state use for Prophetic sayings, Hadith translations, and scholarly explanations, and explicitly say not to use for official fatwas or general books, naming islamhouse_library and risalat_al_haramain as the alternatives. This is clear when-to-use vs when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
islamhouse_libraryA
Access IslamHouse Library for books, audios, videos, fatwas, articles, and author metadata. Excludes Quran recitations (use 'islamhouse_quran') and Hadith texts (use 'hadeethenc_services').
Behavior: Read-only, idempotent, public access (no auth/rate limits). Cached dynamically with real-time freshness. Fallback to English on missing translations; returns empty arrays for unknown IDs; returns 400 error payload on invalid actions or malformed parameters.
Usage Guidelines:
Use for: Scholarly books, articles, fatwas, multimedia, and author biographies.
Do NOT use for: Raw Quran text/audio ('islamhouse_quran' / 'quran_services') or Hadith collections ('hadeethenc_services').
Parameters & Enums:
action: API operation (see Action Groups below).type: Content format enum:books,audios,videos,fatwas,articles.period: Trending window enum:daily,weekly,monthly.sort: Ordering enum:popular,newest,oldest.kind: Scope filter enum:main,sub.language,siteLang,contentLang,slang,locale: 2-letter ISO-639-1 codes (e.g., 'en', 'ar').page,limit: Integer pagination controls.id,categoryId,authorId: Positive integer identifiers.
Action Groups & Returns:
Taxonomy (
list_categories,list_types,get_categories_tree): Requireslanguage-> Array of{ id: number, name: string, parentId?: number }.Listings (
list_items,get_latest_items,get_highlighted_items): Usespage,limit,type, [categoryId/authorId/period/sort/contentLang] ->{ data: ItemSummary[], total: number, page: number }.Aggregations (
get_items_count): Usestype, [categoryId/contentLang] ->{ type: string, total: number }.Details (
get_item_details,get_item_attachments,get_item_translations): Requiresid, [language] -> Detailed{ id, title, description, attachments: Attachment[], locales: string[] }.Authors (
list_authors,get_author_details): Usespage,limitorid, [language] -> Author profile with{ id, name, biography, itemsCount: number }.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| kind | No | ||
| page | No | ||
| sort | No | ||
| type | No | ||
| limit | No | ||
| slang | No | ||
| action | Yes | Required. Action to perform, e.g. 'get_types', 'get_categories', 'get_categories_tree', 'get_child_categories', 'get_category_basic', 'get_sub_categories', 'get_category_types', 'get_category_languages', 'list_items', 'get_author_items', 'get_category_items', 'get_latest_items', 'get_highlighted_items', 'get_items_count', 'get_item_details', 'get_item_attachments', 'get_item_tree', 'get_item_card_translations', 'get_item_translations', 'list_authors', 'get_author_details', 'get_author_card_translations', 'get_author_available_types', 'get_author_available_locales', 'list_languages', 'get_language_terms', 'get_language_availability' | |
| locale | No | ||
| period | No | ||
| authorId | No | ||
| language | No | ||
| siteLang | No | ||
| categoryId | No | ||
| contentLang | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries full disclosure burden. It discloses read-only/idempotent behavior, public access with no auth/rate limits, caching/freshness, fallback to English, empty arrays for unknown IDs, and 400 errors on invalid actions. This is comprehensive behavioral context.
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 long but well-structured with bold headers, bullet lists, and dense, non-redundant content. Each section (Behavior, Usage Guidelines, Parameters, Action Groups) earns its place, and the purpose/exclusions are 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?
Given 15 parameters, many action variants, and no output schema, the description includes action-group-specific return payload shapes (e.g., taxonomy arrays, listing objects with data/total/page), error behavior, and parameter compatibility. This gives an agent everything needed to invoke it correctly across action families.
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 only 7%, with no enums in schema, but the description adds a 'Parameters & Enums' section explaining each parameter group, including enum values for type, period, sort, kind, ISO codes, pagination, and ID types. It also maps parameters to action groups, fully compensating for the schema's sparse coverage.
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 and resource – 'Access IslamHouse Library' – and enumerates content types: books, audios, videos, fatwas, articles, and author metadata. It explicitly excludes Quran recitations and Hadith texts, naming sibling tools, which distinguishes it from siblings.
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?
Provides a dedicated 'Usage Guidelines' section with clear use-for and do-not-use-for lists, explicitly naming islamhouse_quran and hadeethenc_services as alternatives. This leaves no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
islamhouse_quranA
Access IslamHouse to fetch Quranic audio recitations, reciter (author) profiles, and Sura recitation metadata. Unlike quran_services, this specializes in high-quality, full-Sura audio recitations and reciter catalogs rather than textual translations.
Behavior: Read-only. Idempotent. No authentication. Returns 404/empty on invalid IDs, with safe fallbacks on missing audio. Usage Guidelines:
Use for full audio recitations of the Quran or reciter information (e.g., Al-Sudais).
Do NOT use for fetching written Quran text/translations (use
quran_servicesinstead). Action Mapping:list_categories:language(ISO-639-1) -> Category[] { id: number, title: string }get_category,get_author:language(ISO-639-1),id(int) -> { id, title, description, count }get_author_recitations:id(author ID, int),language(ISO-639-1) -> { data: [{ recitationId, title }] }get_sura_details,get_sura_recitations:suraId(int 1-114),language(ISO-639-1) -> { suraId, name, recitations: [] }get_recitation_details:id(recitation ID, int),language(ISO-639-1) -> { id, reciterId, audioUrl, duration }
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Category, Author, or Recitation ID | |
| action | Yes | Required. One of: 'list_categories', 'get_category', 'get_author', 'get_author_recitations', 'get_sura_details', 'get_sura_recitations', 'get_recitation_details' | |
| suraId | No | Surah ID (1-114) | |
| language | Yes | Language code (e.g. 'ar', 'en') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: it states 'Read-only. Idempotent. No authentication. Returns 404/empty on invalid IDs, with safe fallbacks on missing audio.' This goes beyond basic safety to disclose error behavior and fallback semantics, far exceeding the minimum expected.
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 structured with clear headers (Behavior, Usage Guidelines, Action Mapping) and front-loaded purpose. Every section contributes distinct information—no filler. While longer than average, the length is justified by the tool's multi-action nature, and the formatting makes it easy to scan.
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 absence of an output schema and the tool's breadth (7 actions), the description comprehensively covers required contexts: purpose, alternatives, behavior, parameter usage per action, and output shapes. It includes error handling and fallback behavior, leaving no obvious gaps an agent would need to call this tool correctly.
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?
Although schema coverage is 100%, the description adds significant value by mapping each action to the exact parameters it expects (e.g., list_categories→language, get_author_recitations→id+language) and by specifying output shapes like { data: [{ recitationId, title }] }. This clarifies the polymorphic 'id' parameter across actions, which the schema alone does not fully explain.
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 opens with a specific verb and resource: 'fetch Quranic audio recitations, reciter (author) profiles, and Sura recitation metadata.' It also differentiates itself from the sibling quran_services by explicitly stating it focuses on audio and reciter catalogs rather than textual translations, giving unambiguous purpose clarity.
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 contains explicit Usage Guidelines: use for full audio recitations or reciter info, and 'Do NOT use for fetching written Quran text/translations (use quran_services instead).' It also provides a detailed Action Mapping that ties each action to its expected parameters and output, effectively guiding tool selection for every intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quran_servicesA
Access QuranEnc to fetch Quran textual translations, translations lists, and ayah-level audio. Unlike islamhouse_quran, this tool specializes strictly in text-based translations of meanings and single-ayah audio, rather than full recitations or reciter data.
Behavior: Read-only. Idempotent. No authentication required. No strict rate limits. Usage Guidelines:
Use this tool when you need the textual translation of an Ayah or Sura in a specific language, or a short audio clip of one Ayah.
Do NOT use this tool for full Sura recitations or fetching reciter profiles (use
islamhouse_quraninstead). Action Mapping & Parameters:list_translations: Requireslanguage(optionallocalization). Returns a JSON array of available translations.get_sura_translation: RequirestranslationKeyandsuraNumber. Returns a JSON object with the translation of the full Sura.get_aya_translation: RequirestranslationKey,suraNumber, andayaNumber. Returns a JSON object with the specific Ayah's text.get_aya_audio: RequirestranslationKey,suraNumber, andayaNumber. Returns a JSON object with an audio URL for the Ayah. Returns: A JSON array or object containing the requested QuranEnc data.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Required. One of: 'list_translations', 'get_sura_translation', 'get_aya_translation', 'get_aya_audio' | |
| language | No | Language code (e.g. 'en') | |
| ayaNumber | No | Ayah number | |
| suraNumber | No | Surah number (1-114) | |
| localization | No | Localization language (e.g. 'en') | |
| translationKey | No | Translation identifier (e.g. 'en_sahih') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and meets it: 'Read-only. Idempotent. No authentication required. No strict rate limits.' It also describes what each action returns, giving the agent a clear behavioral contract.
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 well-structured with clear sections: purpose, behavior, usage guidelines, action mapping, and returns. Every sentence adds practical value, and the most important differentiator 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 tool with 6 parameters, no annotations, and no output schema, the description is remarkably complete: it covers safety, idempotency, authentication, rate limits, action-specific parameter requirements, return types, and when to use the sibling tool instead.
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?
Although the input schema has 100% field-level coverage, the description adds substantial meaning by mapping each action to its required and optional parameters. This tells the agent which parameters to provide for list_translations, get_sura_translation, get_aya_translation, and get_aya_audio—information not present in the schema alone.
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 opens with a specific verb and resource: 'Access QuranEnc to fetch Quran textual translations, translations lists, and ayah-level audio.' It explicitly contrasts with islamhouse_quran, so an agent can distinguish this tool from its sibling without inspecting schemas.
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?
Provides explicit when-to-use guidance: 'Use this tool when you need the textual translation of an Ayah or Sura in a specific language, or a short audio clip of one Ayah.' It also gives a clear exclusion: 'Do NOT use this tool for full Sura recitations or fetching reciter profiles (use islamhouse_quran instead).'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
risalat_al_haramainA
Access Risalat Al-Haramain to fetch official Haramain (Two Holy Mosques) fatwas, Friday sermons, specific hadeeths, and institutional contents. Specializes in official decrees and sermons originating from Mecca and Medina, distinguishing it from general libraries.
Behavior: Read-only. Idempotent. Public endpoints have no auth. Lookup endpoints require apiKey. Handles rate limits via graceful empty returns.
Usage Guidelines:
Use for Friday sermons from the Haramain, official fatwas from Haramain scholars, or institutional news.
Do NOT use for general Islamic books (use
islamhouse_library). Action Mapping:get_full_contents,get_contents:language,lang-> Returns { data: [{ id, title, date }] }get_fatwas,get_hadeeths,get_quran:language,lang, [isFeatured(0/1)] -> Returns { data: [{ id, content }] }get_content:id(int),language-> Returns { id, title, body, mediaUrls: [] }search_contents,search_name:query/name(string),language-> Returns { results: [{ id, title }] }get_available_languages,get_content_translation:id(int),language,targetLanguage(ISO-639-1) -> Returns { translations: [] }get_lookups_languages,get_lookups_content_types:language, [apiKey] -> Returns { lookups: [] } Returns: Concrete JSON object { data: [], lookups: [], results: [] } for Haramain official releases.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| lang | No | ||
| name | No | ||
| query | No | ||
| action | Yes | Required. One of: 'get_full_contents', 'get_contents', 'get_content', 'search_name', 'search_contents', 'get_available_languages', 'get_content_translation', 'get_fatwas', 'get_hadeeths', 'get_quran', 'get_lookups_languages', 'get_lookups_content_types' | |
| apiKey | No | ||
| language | No | ||
| isFeatured | No | ||
| targetLanguage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds: 'Read-only. Idempotent. Public endpoints have no auth. Lookup endpoints require apiKey. Handles rate limits via graceful empty returns.' It also gives expected return object shapes per action family, which is critical behavioral context for a multi-action tool.
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 long but every section earns its place: purpose, behavior, usage guidelines, action mapping, and return shapes. The structure uses clear labels and front-loads the most important information, making it easy for an agent to scan and act.
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 12 actions, 9 parameters, no output schema, and no annotations, this description is unusually complete. It maps every action family to its expected return shape, covers auth and rate-limit behavior, and includes explicit alternative routing. Nothing essential for correct selection or invocation 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 only 11%, so the description must compensate, and it does comprehensively. The action mapping defines which parameters apply to which actions, notes `language`/`lang` aliases, marks `isFeatured` as `0/1`, describes `targetLanguage` as ISO-639-1, and specifies parameter types such as `id` (int). This adds meaning far beyond the bare schema.
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 opens with a specific action ('fetch official Haramain fatwas, Friday sermons, specific hadeeths, and institutional contents') and a clear resource scope: Mecca and Medina. It explicitly distinguishes itself from general libraries, so an agent can separate it from siblings without inspecting further.
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 states when to use the tool ('Use for Friday sermons from the Haramain, official fatwas...') and when not to use it ('Do NOT use for general Islamic books'), naming the exact alternative tool (`islamhouse_library`). This is the strongest possible usage guidance.
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.
3 tool updates
v1.1.12- Changed
bayan_al_islam8 fields changed- removed
Input schema / properties / id / descriptionRemoved value: -"Content or Category ID" - removed
Input schema / properties / ids / descriptionRemoved value: -"Array of content IDs" - removed
Input schema / properties / init / descriptionRemoved value: -"Initialization flag" - removed
Input schema / properties / lang / descriptionRemoved value: -"Override language code" - removed
Input schema / properties / language / descriptionRemoved value: -"Language code (ISO-639-1)" - removed
Input schema / properties / name / descriptionRemoved value: -"Search name or filter term" - removed
Input schema / properties / page / descriptionRemoved value: -"Page number" - removed
Input schema / properties / targetLanguage / descriptionRemoved value: -"Target language for translation (ISO-639-1)"
- Changed
islamhouse_library14 fields changed- removed
Input schema / properties / authorId / descriptionRemoved value: -"Author ID" - removed
Input schema / properties / categoryId / descriptionRemoved value: -"Category ID" - removed
Input schema / properties / contentLang / descriptionRemoved value: -"Content language code (ISO-639-1)" - removed
Input schema / properties / id / descriptionRemoved value: -"Positive integer identifier" - removed
Input schema / properties / kind / descriptionRemoved value: -"Scope filter enum: main, sub" - removed
Input schema / properties / language / descriptionRemoved value: -"Language code (ISO-639-1)" - removed
Input schema / properties / limit / descriptionRemoved value: -"Pagination limit" - removed
Input schema / properties / locale / descriptionRemoved value: -"Locale format (e.g. ar-SA)" - removed
Input schema / properties / page / descriptionRemoved value: -"Page number" - removed
Input schema / properties / period / descriptionRemoved value: -"Trending window enum: daily, weekly, monthly" - removed
Input schema / properties / siteLang / descriptionRemoved value: -"Site language code (ISO-639-1)" - removed
Input schema / properties / slang / descriptionRemoved value: -"Source language code (ISO-639-1)" - removed
Input schema / properties / sort / descriptionRemoved value: -"Ordering enum: popular, newest, oldest" - removed
Input schema / properties / type / descriptionRemoved value: -"Content format enum: books, audios, videos, fatwas, articles"
- Changed
risalat_al_haramain8 fields changed- removed
Input schema / properties / apiKey / descriptionRemoved value: -"API Key for lookup endpoints" - removed
Input schema / properties / id / descriptionRemoved value: -"Content ID" - removed
Input schema / properties / isFeatured / descriptionRemoved value: -"Featured flag (0 or 1)" - removed
Input schema / properties / lang / descriptionRemoved value: -"Secondary language code (ISO-639-1)" - removed
Input schema / properties / language / descriptionRemoved value: -"Language code (ISO-639-1)" - removed
Input schema / properties / name / descriptionRemoved value: -"Search name" - removed
Input schema / properties / query / descriptionRemoved value: -"Search query string" - removed
Input schema / properties / targetLanguage / descriptionRemoved value: -"Target translation language (ISO-639-1)"
3 tool updates
v1.1.11- Changed
bayan_al_islam8 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Content or Category ID" - added
Input schema / properties / ids / descriptionAdded value: +"Array of content IDs" - added
Input schema / properties / init / descriptionAdded value: +"Initialization flag" - added
Input schema / properties / lang / descriptionAdded value: +"Override language code" - added
Input schema / properties / language / descriptionAdded value: +"Language code (ISO-639-1)" - added
Input schema / properties / name / descriptionAdded value: +"Search name or filter term" - added
Input schema / properties / page / descriptionAdded value: +"Page number" - added
Input schema / properties / targetLanguage / descriptionAdded value: +"Target language for translation (ISO-639-1)"
- Changed
islamhouse_library14 fields changed- added
Input schema / properties / authorId / descriptionAdded value: +"Author ID" - added
Input schema / properties / categoryId / descriptionAdded value: +"Category ID" - added
Input schema / properties / contentLang / descriptionAdded value: +"Content language code (ISO-639-1)" - added
Input schema / properties / id / descriptionAdded value: +"Positive integer identifier" - added
Input schema / properties / kind / descriptionAdded value: +"Scope filter enum: main, sub" - added
Input schema / properties / language / descriptionAdded value: +"Language code (ISO-639-1)" - added
Input schema / properties / limit / descriptionAdded value: +"Pagination limit" - added
Input schema / properties / locale / descriptionAdded value: +"Locale format (e.g. ar-SA)" - added
Input schema / properties / page / descriptionAdded value: +"Page number" - added
Input schema / properties / period / descriptionAdded value: +"Trending window enum: daily, weekly, monthly" - added
Input schema / properties / siteLang / descriptionAdded value: +"Site language code (ISO-639-1)" - added
Input schema / properties / slang / descriptionAdded value: +"Source language code (ISO-639-1)" - added
Input schema / properties / sort / descriptionAdded value: +"Ordering enum: popular, newest, oldest" - added
Input schema / properties / type / descriptionAdded value: +"Content format enum: books, audios, videos, fatwas, articles"
- Changed
risalat_al_haramain8 fields changed- added
Input schema / properties / apiKey / descriptionAdded value: +"API Key for lookup endpoints" - added
Input schema / properties / id / descriptionAdded value: +"Content ID" - added
Input schema / properties / isFeatured / descriptionAdded value: +"Featured flag (0 or 1)" - added
Input schema / properties / lang / descriptionAdded value: +"Secondary language code (ISO-639-1)" - added
Input schema / properties / language / descriptionAdded value: +"Language code (ISO-639-1)" - added
Input schema / properties / name / descriptionAdded value: +"Search name" - added
Input schema / properties / query / descriptionAdded value: +"Search query string" - added
Input schema / properties / targetLanguage / descriptionAdded value: +"Target translation language (ISO-639-1)"
87 tool updates
v1.1.2- Removed
almontaka_add_comment - Removed
almontaka_age_groups - Removed
almontaka_categories - Removed
almontaka_comments - Removed
almontaka_content - Removed
almontaka_entities - Removed
almontaka_expert_levels - Removed
almontaka_ideologies - Removed
almontaka_languages - Removed
almontaka_persons - Removed
almontaka_sections - Removed
almontaka_tags - Removed
almontaka_targeted_groups - Removed
almontaka_youtube_channels - Added
bayan_al_islam - Removed
bayan_attachments_translation - Removed
bayan_available_languages - Removed
bayan_content_translation - Removed
bayan_languages_list - Removed
bayan_lookups - Removed
bayan_muslim_list - Removed
bayan_name_search - Removed
bayan_non_muslim_list - Removed
bayan_paginated_languages - Removed
bayan_recent_contents - Removed
bayan_single_content - Removed
hadeethenc_categories - Removed
hadeethenc_hadith_details - Removed
hadeethenc_hadiths_list - Removed
hadeethenc_languages - Removed
hadeethenc_root_categories - Added
hadeethenc_services - Removed
islamhouse_all_categories - Removed
islamhouse_all_types - Removed
islamhouse_author_available_locales - Removed
islamhouse_author_available_types - Removed
islamhouse_author_card_translations - Removed
islamhouse_author_details - Removed
islamhouse_author_items - Removed
islamhouse_categories_tree - Removed
islamhouse_category_items - Removed
islamhouse_category_languages - Removed
islamhouse_category_types - Removed
islamhouse_child_categories - Removed
islamhouse_highlighted_items - Removed
islamhouse_item_attachments - Removed
islamhouse_item_card_translations - Removed
islamhouse_item_details - Removed
islamhouse_item_translations - Removed
islamhouse_item_tree - Removed
islamhouse_items_count - Removed
islamhouse_languages_available - Removed
islamhouse_languages_keys - Removed
islamhouse_languages_terms - Removed
islamhouse_latest_items - Added
islamhouse_library - Removed
islamhouse_list_authors - Removed
islamhouse_list_items - Added
islamhouse_quran - Removed
islamhouse_quran_author_details - Removed
islamhouse_quran_author_recitations - Removed
islamhouse_quran_categories - Removed
islamhouse_quran_recitation_details - Removed
islamhouse_quran_single_category - Removed
islamhouse_quran_sura_details - Removed
islamhouse_quran_sura_recitations - Removed
islamhouse_single_category_basic - Removed
islamhouse_sub_categories - Added
quran_services - Removed
quranenc_add_note - Removed
quranenc_aya_audio - Removed
quranenc_translation_aya - Removed
quranenc_translation_list - Removed
quranenc_translation_sura - Removed
risala_available_languages - Removed
risala_content_translation - Removed
risala_fatwas - Removed
risala_get_contents - Removed
risala_get_full_contents - Removed
risala_hadeeths - Removed
risala_lookups_content_types - Removed
risala_lookups_languages - Removed
risala_name_search - Removed
risala_quran - Removed
risala_search_contents - Removed
risala_single_content - Added
risalat_al_haramain
81 tool updates
v1.0.3- First observed
almontaka_add_comment - First observed
almontaka_age_groups - First observed
almontaka_categories - First observed
almontaka_comments - First observed
almontaka_content - First observed
almontaka_entities - First observed
almontaka_expert_levels - First observed
almontaka_ideologies - First observed
almontaka_languages - First observed
almontaka_persons - First observed
almontaka_sections - First observed
almontaka_tags - First observed
almontaka_targeted_groups - First observed
almontaka_youtube_channels - First observed
bayan_attachments_translation - First observed
bayan_available_languages - First observed
bayan_content_translation - First observed
bayan_languages_list - First observed
bayan_lookups - First observed
bayan_muslim_list - First observed
bayan_name_search - First observed
bayan_non_muslim_list - First observed
bayan_paginated_languages - First observed
bayan_recent_contents - First observed
bayan_single_content - First observed
hadeethenc_categories - First observed
hadeethenc_hadith_details - First observed
hadeethenc_hadiths_list - First observed
hadeethenc_languages - First observed
hadeethenc_root_categories - First observed
islamhouse_all_categories - First observed
islamhouse_all_types - First observed
islamhouse_author_available_locales - First observed
islamhouse_author_available_types - First observed
islamhouse_author_card_translations - First observed
islamhouse_author_details - First observed
islamhouse_author_items - First observed
islamhouse_categories_tree - First observed
islamhouse_category_items - First observed
islamhouse_category_languages - First observed
islamhouse_category_types - First observed
islamhouse_child_categories - First observed
islamhouse_highlighted_items - First observed
islamhouse_item_attachments - First observed
islamhouse_item_card_translations - First observed
islamhouse_item_details - First observed
islamhouse_item_translations - First observed
islamhouse_item_tree - First observed
islamhouse_items_count - First observed
islamhouse_languages_available - First observed
islamhouse_languages_keys - First observed
islamhouse_languages_terms - First observed
islamhouse_latest_items - First observed
islamhouse_list_authors - First observed
islamhouse_list_items - First observed
islamhouse_quran_author_details - First observed
islamhouse_quran_author_recitations - First observed
islamhouse_quran_categories - First observed
islamhouse_quran_recitation_details - First observed
islamhouse_quran_single_category - First observed
islamhouse_quran_sura_details - First observed
islamhouse_quran_sura_recitations - First observed
islamhouse_single_category_basic - First observed
islamhouse_sub_categories - First observed
quranenc_add_note - First observed
quranenc_aya_audio - First observed
quranenc_translation_aya - First observed
quranenc_translation_list - First observed
quranenc_translation_sura - First observed
risala_available_languages - First observed
risala_content_translation - First observed
risala_fatwas - First observed
risala_get_contents - First observed
risala_get_full_contents - First observed
risala_hadeeths - First observed
risala_lookups_content_types - First observed
risala_lookups_languages - First observed
risala_name_search - First observed
risala_quran - First observed
risala_search_contents - First observed
risala_single_content
TDQS
Scored across 6 tools
Each tool is clearly scoped to a distinct content source and type: general library, Hadith, Quran audio, Quran text translation, Haramain fatwas/sermons, and audience-targeted content. Minor ambiguity exists between Quran audio vs Quran text and Hadith in the main library vs dedicated Hadith tool, but the descriptions explicitly cross-reference and delineate these boundaries.
Names are all lowercase snake_case but follow no uniform verb-noun or provider-suffix pattern. 'islamhouse_library' and 'islamhouse_quran' share a clear provider prefix, and 'hadeethenc_services' and 'quran_services' share a suffix, but 'bayan_al_islam' and 'risalat_al_haramain' are proper nouns that give no structural hint about their function.
Six tools is a well-scoped count for this server's broad domain. Each tool represents a major content provider or content category, and none feel redundant or extraneous. The count is neither bloated nor too thin.
The server covers the major content types one would expect from an Islamic content platform: Quran recitations, Quran translations, Hadith, books, articles, fatwas, sermons, and curated audience-specific content. A minor gap is the absence of a unified cross-source search or some advanced Islamic reference material like Tafsir, but the core retrieval workflows are well covered.
Maintenance
Related MCP Connectors
Verified, pay-per-use API tools for AI agents through one authenticated connection.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Live data gateway for AI — 3,300+ tools across 750+ sources, with citations
Connect AI clients to biomedical data and tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI assistants with comprehensive access to Islamic resources including Quran verses with translations, Tafsir commentary, Hadith collections, and audio recitations. Enables users to explore Islamic texts, get daily inspiration, and access scholarly interpretations through natural language queries.189 npm10MIT
- AlicenseNot gradedqualityDmaintenanceConnects LLMs to the Quran API (alquran.cloud) to retrieve accurate Quranic text on-demand, reducing hallucinations when working with sensitive religious content.MIT
- AlicenseNot gradedqualityCmaintenanceEnables fetching and searching canonical hadith texts (Arabic and English) with cross-references and citation-safe URLs for assistants, built on FastMCP.2GPL 3.0
- FlicenseNot gradedqualityDmaintenanceProvides canonical Quran text, translations, and tafsir commentary via MCP for accurate AI citation.85-