Skip to main content
Glama
2yousefreda

Islamic Content MCP Server

Islamic Content Model Context Protocol (MCP) Server

NPM Version License

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


Related MCP server: Quran Cloud MCP Server

Features

  • Quran Services: Consolidated endpoint quran_services and islamhouse_quran for translations, audio, reciters, and categories.

  • Hadith Services: Consolidated endpoint hadeethenc_services for categories, translations, and explanations.

  • IslamHouse Library: Centralized endpoint islamhouse_library for books, audios, videos, fatwas, articles, author data, and translations.

  • Bayan Al-Islam & Risalat Al-Haramain: Powerful endpoints bayan_al_islam and risalat_al_haramain for 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.json

  • macOS: ~/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.

  1. Go to Settings > Features > MCP.

  2. Click + Add New MCP Server.

  3. Fill in the details:

    • Name: Islamic Content

    • Type: stdio

    • Command: npx -y islamic-content-mcp-server

  4. 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.json

  • macOS: ~/.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

7. al_montaka

Access Al Montaka to fetch general content and metadata lookups.

  • Actions: list_contents, get_comments, get_lookups_age_groups, get_lookups_categories, get_lookups_entities, get_lookups_expert_levels, get_lookups_ideologies, get_lookups_languages, get_lookups_persons, get_lookups_sections, get_lookups_tags, get_lookups_targeted_groups, get_lookups_youtube_channels


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-mcp

2. Install Dependencies & Build

npm install
npm run build

3. Run Locally (via Stdio)

node dist/bin.js

To 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

7 tools
al_montakaA

Access Al Montaka to fetch general content. Note: Content fetching by category is currently unstable upstream, so use it to fetch the latest general content instead.

Action Mapping:

  • list_contents: page (int) -> Returns { data: [], meta: {} }

  • get_comments: id (int) -> Returns comments for content

  • get_lookups_age_groups, get_lookups_languages, get_lookups_targeted_groups, get_lookups_youtube_channels: No args -> Returns lookups array

  • get_lookups_categories, get_lookups_entities, get_lookups_expert_levels, get_lookups_sections, get_lookups_tags: languageId (int), [nameCont] -> Returns lookups array

  • get_lookups_ideologies: languageId (int), parentId (int), [nameCont] -> Returns lookups array

  • get_lookups_persons: [nameCont], [page] -> Returns lookups array

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
pageNo
actionYesRequired. One of: 'list_contents', 'get_comments', 'get_lookups_age_groups', 'get_lookups_categories', 'get_lookups_entities', 'get_lookups_expert_levels', 'get_lookups_ideologies', 'get_lookups_languages', 'get_lookups_persons', 'get_lookups_sections', 'get_lookups_tags', 'get_lookups_targeted_groups', 'get_lookups_youtube_channels'
nameContNo
parentIdNo
languageIdNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that category fetching is unstable, which is useful behavioral context. However, it does not mention any other behavioral traits such as authentication, rate limits, or what happens on errors. The return shapes are partially described, but not fully (e.g., what 'data' contains). This is adequate but could be richer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary purpose and the key warning, followed by a structured action mapping. The mapping is efficient and easy to scan, though it is lengthy. Every sentence earns its place, and the structure (bulleted mapping) aids readability. Slightly verbose but justified by the number of actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 6 parameters and 13 actions, making it complex. The action mapping provides essential parameter expectations, but the output schema is absent and the description does not fully specify return structures beyond a few examples. Given the tool's complexity and lack of output schema, the description is helpful but not complete; it could detail the shape of the returned data or typical error responses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description must compensate. It does, by mapping each action to its parameters and expected return types (e.g., `list_contents` takes `page` int, returns { data: [], meta: {} }). This adds substantial meaning beyond the bare schema, which only lists types without context. The action mapping effectively documents all parameters for each action, greatly aiding the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool accesses Al Montaka to fetch general content and provides a detailed action mapping listing each action, its parameters, and return shapes. This clearly distinguishes it from siblings like quran_services or islamhouse_library, which focus on different content. The purpose is specific, with a verb (fetch/access), resource (Al Montaka), and scope (general content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly warns that category-based fetching is unstable upstream, advising to use it for general content instead, which guides when to use this tool. However, it does not explicitly mention alternatives or when not to use it, but the warning implies a temporary limitation. This is clear context, though not fully explicit about exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bayan_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 (use islamhouse_quran or quran_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) or name (string), language -> Returns { id, title, body, matchingResults: [] }

  • get_recent_contents: ids (array of ints), init (bool), lang (overrides language) -> 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
idsNo
initNo
langNo
nameNo
pageNo
actionYesRequired. One of: 'list_languages', 'list_muslim_content', 'list_non_muslim_content', 'list_paginated_languages', 'get_recent_contents', 'get_lookups', 'search_name'
languageNo
targetLanguageNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It explicitly states 'Read-only. Idempotent. No authentication. Falls back to default language if translation is missing.' This covers safety, repeatability, and edge-case behavior. The action mapping further details return shapes, leaving no surprises.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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. It is front-loaded with the core purpose, and every sentence adds value—no fluff. Despite its length, it's efficiently organized for quick scanning, making it appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, multiple actions) and absence of an output schema, the description provides complete action-level parameter configurations and expected return objects. It covers all listed actions and their signatures, making it sufficient for an agent to call correctly without additional external documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 11% (only 'action' has a description), so the description must compensate. It does so via a comprehensive 'Action Mapping' that lists each action and its parameters, e.g., 'get_content': `id` (int) or `name` (string), `language` -> Returns { id, title, body }. This clarifies the role of every parameter across all 9 parameters, exceeding schema adequacy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Access Bayan Al-Islam to fetch specialized Islamic content targeting Muslims and Non-Muslims, including translated articles and structured lookups.' It explicitly contrasts with the general IslamHouse library by emphasizing curated, audience-specific content. This distinguishes it from siblings like `islamhouse_library` and `hadeethenc_services`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'Use when seeking content specifically tailored for non-Muslims, or curated responses to common questions.' It also gives clear exclusions: 'Do NOT use for raw Hadith (use `hadeethenc_services`) or Quran recitations (use `islamhouse_quran` or `quran_services`).' This leaves no ambiguity about sibling 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_library or risalat_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoHadith ID
pageNoPage number
actionYesRequired. One of: 'list_languages', 'list_categories', 'list_root_categories', 'list_hadiths', 'get_hadith_details'
perPageNoItems per page
languageNoLanguage code for lists/details (e.g. 'en')
categoryIdNoCategory ID
languageCodeNoLanguage code for categories (e.g. 'en')

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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): Requires language -> Array of { id: number, name: string, parentId?: number }.

  • Listings (list_items, get_latest_items, get_highlighted_items): Uses page, limit, type, [categoryId/authorId/period/sort/contentLang] -> { data: ItemSummary[], total: number, page: number }.

  • Aggregations (get_items_count): Uses type, [categoryId/contentLang] -> { type: string, total: number }.

  • Details (get_item_details, get_item_attachments, get_item_translations): Requires id, [language] -> Detailed { id, title, description, attachments: Attachment[], locales: string[] }.

  • Authors (get_author_details, list_authors): Uses id, page, limit, [language, kind, locale, sort] -> Author profile with { id, name, biography, itemsCount: number }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
kindNo
pageNo
sortNo
typeNo
limitNo
slangNo
actionYesRequired. 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', 'get_author_details', 'list_authors', 'get_author_card_translations', 'get_author_available_types', 'get_author_available_locales', 'list_languages', 'get_language_terms', 'get_language_availability'
localeNo
periodNo
authorIdNo
languageNo
siteLangNo
categoryIdNo
contentLangNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses key behavioral traits: '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.' This covers safety, error handling, and caching behavior comprehensively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it is organized into clearly labeled sections (Behavior, Usage Guidelines, Parameters & Enums, Action Groups & Returns) and front-loaded with the core purpose and exclusions. While every section earns its place, the density of information makes it slightly less concise than it could be. A tight, structured 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (15 parameters, many actions) and the lack of an output schema, the description is exceptionally complete. It provides return shapes for each action group (e.g., taxonomy returns array of {id, name, parentId?}, listings return {data, total, page}, details return {id, title, description, attachments, locales}), plus error behavior and fallback rules. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is only 7%, so the description must compensate. It does so extensively: it defines each parameter (type, period, sort, kind, language variants, pagination, IDs) with enums and formats, and further groups actions and specifies which parameters apply to each action group (e.g., 'Listings' use page/limit/type, 'Details' require id). This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Access IslamHouse Library for books, audios, videos, fatwas, articles, and author metadata.' It immediately differentiates itself from siblings by naming exclusions: 'Excludes Quran recitations (use 'islamhouse_quran') and Hadith texts (use 'hadeethenc_services').' This makes the tool's scope unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A dedicated 'Usage Guidelines' section explicitly lists what to use the tool for and what not to use it for, citing the exact sibling tools to use instead ('islamhouse_quran' / 'quran_services' and 'hadeethenc_services'). This provides clear, actionable routing guidance with no ambiguity.

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_services instead). 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_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 }

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoCategory, Author, or Recitation ID
actionYesRequired. One of: 'list_categories', 'get_category', 'get_author', 'get_author_recitations', 'get_sura_recitations', 'get_recitation_details'
suraIdNoSurah ID (1-114)
languageYesLanguage code (e.g. 'ar', 'en')

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description discloses key behavioral traits: read-only, idempotent, no authentication, and 404/empty on invalid IDs. This is rich context beyond what any annotation would provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections. It is thorough but not overly verbose; however, the action mapping repeats schema information (e.g., parameter types), which is slightly redundant but not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all needed aspects: purpose, behavior, usage, and per-action input/output. Even without an output schema, the action mapping provides return types, making it complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description goes beyond the input schema by mapping each action to its required parameters and return types, e.g., `list_categories` -> Category[] with id and title. This adds meaning far beyond the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches Quranic audio recitations, reciter profiles, and Sura metadata, and explicitly contrasts with quran_services (textual translations). This is a specific verb-resource pairing that 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ('full audio recitations...') and when-not-to-use ('Do NOT use for fetching written Quran text/translations') and names the alternative (quran_services).

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_quran instead). Action Mapping & Parameters:

  • list_translations: Requires language (optional localization). Returns a JSON array of available translations.

  • get_sura_translation: Requires translationKey and suraNumber. Returns a JSON object with the translation of the full Sura.

  • get_aya_translation: Requires translationKey, suraNumber, and ayaNumber. Returns a JSON object with the specific Ayah's text.

  • get_aya_audio: Requires translationKey, suraNumber, and ayaNumber. Returns a JSON object with an audio URL for the Ayah. Returns: A JSON array or object containing the requested QuranEnc data.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesRequired. One of: 'list_translations', 'get_sura_translation', 'get_aya_translation', 'get_aya_audio'
languageNoLanguage code (e.g. 'en')
ayaNumberNoAyah number
suraNumberNoSurah number (1-114)
localizationNoLocalization language (e.g. 'en')
translationKeyNoTranslation identifier (e.g. 'en_sahih')

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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: query (string), language -> Returns { results: [{ id, title }] }

  • get_lookups_languages, get_lookups_content_types: language, [apiKey] -> Returns { lookups: [] } Returns: Concrete JSON object { data: [], lookups: [], results: [] } for Haramain official releases.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
langNo
nameNo
pageNo
queryNo
actionYesRequired. One of: 'get_full_contents', 'get_contents', 'get_content', 'search_contents', 'get_fatwas', 'get_hadeeths', 'get_quran', 'get_lookups_languages', 'get_lookups_content_types'
apiKeyNo
languageNo
isFeaturedNo
targetLanguageNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses read-only, idempotent behavior, auth requirements, and rate-limit handling (graceful empty returns). However, there is an internal inconsistency: it states 'Lookup endpoints require apiKey' but the action mapping shows `[apiKey]` for lookups, implying it's optional. This minor contradiction slightly reduces clarity, though overall it is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with clear sections (Behavior, Usage Guidelines, Action Mapping, Returns). The action mapping is detailed but arguably redundant for some common parameters; nonetheless, it is organized and front-loaded with purpose. Slightly verbose but each part serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters, no output schema, and multiple actions, the description covers all actions, parameter usage, auth, rate limits, and return shapes. It also distinguishes from sibling tools, making it fully complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 10% schema coverage, the description compensates excellently via the 'Action Mapping' section, which explains which parameters apply to each action, their types (e.g., `id` int, `query` string, `isFeatured` 0/1) and the exact return structure. This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches official Haramain fatwas, Friday sermons, hadeeths, and institutional contents, explicitly distinguishing it from general libraries. This is a specific verb+resource+scope definition that helps the agent understand its unique role among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is an explicit 'Usage Guidelines' section that says when to use (Friday sermons, official fatwas, institutional news) and when not to use (general Islamic books, pointing to `islamhouse_library`). This provides direct alternative routing, leaving no ambiguity.

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.

  1. 5 tool updates
    • Addedal_montaka
    • Changedbayan_al_islam1 field changed
      • changedInput schema / properties / action / description
        Previous value: -"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'"New value: +"Required. One of: 'list_languages', 'list_muslim_content', 'list_non_muslim_content', 'list_paginated_languages', 'get_recent_contents', 'get_lookups', 'search_name'"
    • Changedislamhouse_library1 field changed
      • changedInput schema / properties / action / description
        Previous value: -"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'"New value: +"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', 'get_author_details', 'list_authors', 'get_author_card_translations', 'get_author_available_types', 'get_author_available_locales', 'list_languages', 'get_language_terms', 'get_language_availability'"
    • Changedislamhouse_quran1 field changed
      • changedInput schema / properties / action / description
        Previous value: -"Required. One of: 'list_categories', 'get_category', 'get_author', 'get_author_recitations', 'get_sura_details', 'get_sura_recitations', 'get_recitation_details'"New value: +"Required. One of: 'list_categories', 'get_category', 'get_author', 'get_author_recitations', 'get_sura_recitations', 'get_recitation_details'"
    • Changedrisalat_al_haramain2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"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'"New value: +"Required. One of: 'get_full_contents', 'get_contents', 'get_content', 'search_contents', 'get_fatwas', 'get_hadeeths', 'get_quran', 'get_lookups_languages', 'get_lookups_content_types'"
      • addedInput schema / properties / page
        Added value: +{
        +  "type": "integer"
        +}
  2. 3 tool updatesv1.1.12
    • Changedbayan_al_islam8 fields changed
      • removedInput schema / properties / id / description
        Removed value: -"Content or Category ID"
      • removedInput schema / properties / ids / description
        Removed value: -"Array of content IDs"
      • removedInput schema / properties / init / description
        Removed value: -"Initialization flag"
      • removedInput schema / properties / lang / description
        Removed value: -"Override language code"
      • removedInput schema / properties / language / description
        Removed value: -"Language code (ISO-639-1)"
      • removedInput schema / properties / name / description
        Removed value: -"Search name or filter term"
      • removedInput schema / properties / page / description
        Removed value: -"Page number"
      • removedInput schema / properties / targetLanguage / description
        Removed value: -"Target language for translation (ISO-639-1)"
    • Changedislamhouse_library14 fields changed
      • removedInput schema / properties / authorId / description
        Removed value: -"Author ID"
      • removedInput schema / properties / categoryId / description
        Removed value: -"Category ID"
      • removedInput schema / properties / contentLang / description
        Removed value: -"Content language code (ISO-639-1)"
      • removedInput schema / properties / id / description
        Removed value: -"Positive integer identifier"
      • removedInput schema / properties / kind / description
        Removed value: -"Scope filter enum: main, sub"
      • removedInput schema / properties / language / description
        Removed value: -"Language code (ISO-639-1)"
      • removedInput schema / properties / limit / description
        Removed value: -"Pagination limit"
      • removedInput schema / properties / locale / description
        Removed value: -"Locale format (e.g. ar-SA)"
      • removedInput schema / properties / page / description
        Removed value: -"Page number"
      • removedInput schema / properties / period / description
        Removed value: -"Trending window enum: daily, weekly, monthly"
      • removedInput schema / properties / siteLang / description
        Removed value: -"Site language code (ISO-639-1)"
      • removedInput schema / properties / slang / description
        Removed value: -"Source language code (ISO-639-1)"
      • removedInput schema / properties / sort / description
        Removed value: -"Ordering enum: popular, newest, oldest"
      • removedInput schema / properties / type / description
        Removed value: -"Content format enum: books, audios, videos, fatwas, articles"
    • Changedrisalat_al_haramain8 fields changed
      • removedInput schema / properties / apiKey / description
        Removed value: -"API Key for lookup endpoints"
      • removedInput schema / properties / id / description
        Removed value: -"Content ID"
      • removedInput schema / properties / isFeatured / description
        Removed value: -"Featured flag (0 or 1)"
      • removedInput schema / properties / lang / description
        Removed value: -"Secondary language code (ISO-639-1)"
      • removedInput schema / properties / language / description
        Removed value: -"Language code (ISO-639-1)"
      • removedInput schema / properties / name / description
        Removed value: -"Search name"
      • removedInput schema / properties / query / description
        Removed value: -"Search query string"
      • removedInput schema / properties / targetLanguage / description
        Removed value: -"Target translation language (ISO-639-1)"
  3. 3 tool updatesv1.1.11
    • Changedbayan_al_islam8 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Content or Category ID"
      • addedInput schema / properties / ids / description
        Added value: +"Array of content IDs"
      • addedInput schema / properties / init / description
        Added value: +"Initialization flag"
      • addedInput schema / properties / lang / description
        Added value: +"Override language code"
      • addedInput schema / properties / language / description
        Added value: +"Language code (ISO-639-1)"
      • addedInput schema / properties / name / description
        Added value: +"Search name or filter term"
      • addedInput schema / properties / page / description
        Added value: +"Page number"
      • addedInput schema / properties / targetLanguage / description
        Added value: +"Target language for translation (ISO-639-1)"
    • Changedislamhouse_library14 fields changed
      • addedInput schema / properties / authorId / description
        Added value: +"Author ID"
      • addedInput schema / properties / categoryId / description
        Added value: +"Category ID"
      • addedInput schema / properties / contentLang / description
        Added value: +"Content language code (ISO-639-1)"
      • addedInput schema / properties / id / description
        Added value: +"Positive integer identifier"
      • addedInput schema / properties / kind / description
        Added value: +"Scope filter enum: main, sub"
      • addedInput schema / properties / language / description
        Added value: +"Language code (ISO-639-1)"
      • addedInput schema / properties / limit / description
        Added value: +"Pagination limit"
      • addedInput schema / properties / locale / description
        Added value: +"Locale format (e.g. ar-SA)"
      • addedInput schema / properties / page / description
        Added value: +"Page number"
      • addedInput schema / properties / period / description
        Added value: +"Trending window enum: daily, weekly, monthly"
      • addedInput schema / properties / siteLang / description
        Added value: +"Site language code (ISO-639-1)"
      • addedInput schema / properties / slang / description
        Added value: +"Source language code (ISO-639-1)"
      • addedInput schema / properties / sort / description
        Added value: +"Ordering enum: popular, newest, oldest"
      • addedInput schema / properties / type / description
        Added value: +"Content format enum: books, audios, videos, fatwas, articles"
    • Changedrisalat_al_haramain8 fields changed
      • addedInput schema / properties / apiKey / description
        Added value: +"API Key for lookup endpoints"
      • addedInput schema / properties / id / description
        Added value: +"Content ID"
      • addedInput schema / properties / isFeatured / description
        Added value: +"Featured flag (0 or 1)"
      • addedInput schema / properties / lang / description
        Added value: +"Secondary language code (ISO-639-1)"
      • addedInput schema / properties / language / description
        Added value: +"Language code (ISO-639-1)"
      • addedInput schema / properties / name / description
        Added value: +"Search name"
      • addedInput schema / properties / query / description
        Added value: +"Search query string"
      • addedInput schema / properties / targetLanguage / description
        Added value: +"Target translation language (ISO-639-1)"
  4. 87 tool updatesv1.1.2
    • Removedalmontaka_add_comment
    • Removedalmontaka_age_groups
    • Removedalmontaka_categories
    • Removedalmontaka_comments
    • Removedalmontaka_content
    • Removedalmontaka_entities
    • Removedalmontaka_expert_levels
    • Removedalmontaka_ideologies
    • Removedalmontaka_languages
    • Removedalmontaka_persons
    • Removedalmontaka_sections
    • Removedalmontaka_tags
    • Removedalmontaka_targeted_groups
    • Removedalmontaka_youtube_channels
    • Addedbayan_al_islam
    • Removedbayan_attachments_translation
    • Removedbayan_available_languages
    • Removedbayan_content_translation
    • Removedbayan_languages_list
    • Removedbayan_lookups
    • Removedbayan_muslim_list
    • Removedbayan_name_search
    • Removedbayan_non_muslim_list
    • Removedbayan_paginated_languages
    • Removedbayan_recent_contents
    • Removedbayan_single_content
    • Removedhadeethenc_categories
    • Removedhadeethenc_hadith_details
    • Removedhadeethenc_hadiths_list
    • Removedhadeethenc_languages
    • Removedhadeethenc_root_categories
    • Addedhadeethenc_services
    • Removedislamhouse_all_categories
    • Removedislamhouse_all_types
    • Removedislamhouse_author_available_locales
    • Removedislamhouse_author_available_types
    • Removedislamhouse_author_card_translations
    • Removedislamhouse_author_details
    • Removedislamhouse_author_items
    • Removedislamhouse_categories_tree
    • Removedislamhouse_category_items
    • Removedislamhouse_category_languages
    • Removedislamhouse_category_types
    • Removedislamhouse_child_categories
    • Removedislamhouse_highlighted_items
    • Removedislamhouse_item_attachments
    • Removedislamhouse_item_card_translations
    • Removedislamhouse_item_details
    • Removedislamhouse_item_translations
    • Removedislamhouse_item_tree
    • Removedislamhouse_items_count
    • Removedislamhouse_languages_available
    • Removedislamhouse_languages_keys
    • Removedislamhouse_languages_terms
    • Removedislamhouse_latest_items
    • Addedislamhouse_library
    • Removedislamhouse_list_authors
    • Removedislamhouse_list_items
    • Addedislamhouse_quran
    • Removedislamhouse_quran_author_details
    • Removedislamhouse_quran_author_recitations
    • Removedislamhouse_quran_categories
    • Removedislamhouse_quran_recitation_details
    • Removedislamhouse_quran_single_category
    • Removedislamhouse_quran_sura_details
    • Removedislamhouse_quran_sura_recitations
    • Removedislamhouse_single_category_basic
    • Removedislamhouse_sub_categories
    • Addedquran_services
    • Removedquranenc_add_note
    • Removedquranenc_aya_audio
    • Removedquranenc_translation_aya
    • Removedquranenc_translation_list
    • Removedquranenc_translation_sura
    • Removedrisala_available_languages
    • Removedrisala_content_translation
    • Removedrisala_fatwas
    • Removedrisala_get_contents
    • Removedrisala_get_full_contents
    • Removedrisala_hadeeths
    • Removedrisala_lookups_content_types
    • Removedrisala_lookups_languages
    • Removedrisala_name_search
    • Removedrisala_quran
    • Removedrisala_search_contents
    • Removedrisala_single_content
    • Addedrisalat_al_haramain
  5. 81 tool updatesv1.0.3
    • First observedalmontaka_add_comment
    • First observedalmontaka_age_groups
    • First observedalmontaka_categories
    • First observedalmontaka_comments
    • First observedalmontaka_content
    • First observedalmontaka_entities
    • First observedalmontaka_expert_levels
    • First observedalmontaka_ideologies
    • First observedalmontaka_languages
    • First observedalmontaka_persons
    • First observedalmontaka_sections
    • First observedalmontaka_tags
    • First observedalmontaka_targeted_groups
    • First observedalmontaka_youtube_channels
    • First observedbayan_attachments_translation
    • First observedbayan_available_languages
    • First observedbayan_content_translation
    • First observedbayan_languages_list
    • First observedbayan_lookups
    • First observedbayan_muslim_list
    • First observedbayan_name_search
    • First observedbayan_non_muslim_list
    • First observedbayan_paginated_languages
    • First observedbayan_recent_contents
    • First observedbayan_single_content
    • First observedhadeethenc_categories
    • First observedhadeethenc_hadith_details
    • First observedhadeethenc_hadiths_list
    • First observedhadeethenc_languages
    • First observedhadeethenc_root_categories
    • First observedislamhouse_all_categories
    • First observedislamhouse_all_types
    • First observedislamhouse_author_available_locales
    • First observedislamhouse_author_available_types
    • First observedislamhouse_author_card_translations
    • First observedislamhouse_author_details
    • First observedislamhouse_author_items
    • First observedislamhouse_categories_tree
    • First observedislamhouse_category_items
    • First observedislamhouse_category_languages
    • First observedislamhouse_category_types
    • First observedislamhouse_child_categories
    • First observedislamhouse_highlighted_items
    • First observedislamhouse_item_attachments
    • First observedislamhouse_item_card_translations
    • First observedislamhouse_item_details
    • First observedislamhouse_item_translations
    • First observedislamhouse_item_tree
    • First observedislamhouse_items_count
    • First observedislamhouse_languages_available
    • First observedislamhouse_languages_keys
    • First observedislamhouse_languages_terms
    • First observedislamhouse_latest_items
    • First observedislamhouse_list_authors
    • First observedislamhouse_list_items
    • First observedislamhouse_quran_author_details
    • First observedislamhouse_quran_author_recitations
    • First observedislamhouse_quran_categories
    • First observedislamhouse_quran_recitation_details
    • First observedislamhouse_quran_single_category
    • First observedislamhouse_quran_sura_details
    • First observedislamhouse_quran_sura_recitations
    • First observedislamhouse_single_category_basic
    • First observedislamhouse_sub_categories
    • First observedquranenc_add_note
    • First observedquranenc_aya_audio
    • First observedquranenc_translation_aya
    • First observedquranenc_translation_list
    • First observedquranenc_translation_sura
    • First observedrisala_available_languages
    • First observedrisala_content_translation
    • First observedrisala_fatwas
    • First observedrisala_get_contents
    • First observedrisala_get_full_contents
    • First observedrisala_hadeeths
    • First observedrisala_lookups_content_types
    • First observedrisala_lookups_languages
    • First observedrisala_name_search
    • First observedrisala_quran
    • First observedrisala_search_contents
    • First observedrisala_single_content

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation3/5

Most tools are separated by source and content type, but there is overlap between islamhouse_library, bayan_al_islam, and al_montaka for articles/general content, and risalat_al_haramain's get_hadeeths/get_fatwas overlap with dedicated Hadith and library fatwa tools. The detailed 'Do NOT use' guidance helps, but agents must read carefully to avoid mis-selection.

Naming Consistency3/5

All names use lower_snake_case and are source-based, which is readable, but the pattern is inconsistent: some include domain suffixes (islamhouse_quran, quran_services, hadeethenc_services) while others are bare source names (bayan_al_islam, risalat_al_haramain, al_montaka). There is no verb_noun pattern, though this is understandable for provider-style content servers.

Tool Count5/5

Seven tools is well-scoped for a multi-source Islamic content server. Each tool represents a distinct content provider or content type and earns its place without overwhelming an agent with excessive options.

Completeness4/5

The set covers the major content types for the domain: Hadith, Quran text and audio, library books/fatwas/articles, official Haramain content, and curated targeted articles. Minor gaps exist, such as no cross-source unified search and al_montaka's unstable category fetching, but agents can work around these limitations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides 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.
    18
    33 npm
    10
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects LLMs to the Quran API (alquran.cloud) to retrieve accurate Quranic text on-demand, reducing hallucinations when working with sensitive religious content.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables fetching and searching canonical hadith texts (Arabic and English) with cross-references and citation-safe URLs for assistants, built on FastMCP.
    3
    GPL 3.0