Skip to main content
Glama
tareq7

Muslim Prayer Reminder MCP

Project Status: 🟢 Actively Maintained (v1.0.1)
Published by: Smart Creations (OpenAI Org: org-deULP4GGInsTcWmuaHWp3lxy) • Lead Maintainer: Tareq Naji
Supported across Cloudflare Workers, Node.js 22/24 (Ubuntu & Windows), and all Model Context Protocol (MCP) clients.


⚡ Quick Start

1. Run via NPX (Zero Installation)

Add to your Claude Desktop, Cursor, or VS Code MCP configuration:

{
  "mcpServers": {
    "muslim-prayer": {
      "command": "npx",
      "args": ["-y", "muslim-prayer-mcp"]
    }
  }
}

2. Connect via Remote Streamable HTTP (Cloudflare Workers)

{
  "mcpServers": {
    "muslim-prayer": {
      "url": "https://muslim-prayer-mcp.najetareqz.workers.dev/mcp"
    }
  }
}

3. 1-Click Install in Cursor

Install in Cursor


Related MCP server: Remote MCP Server on Cloudflare

📺 Live Video Demonstration

Watch the Muslim Prayer Reminder MCP in action inside ChatGPT, Claude, and Cursor:


🏛️ System Architecture

flowchart TD
    subgraph ClientLayer ["AI Clients & Environments"]
        Cursor["Cursor IDE"]
        Claude["Claude Desktop / Web"]
        ChatGPT["ChatGPT Apps Directory"]
        Agent["Autonomous AI Agent"]
    end

    subgraph TransportLayer ["Model Context Protocol"]
        HTTP["Streamable HTTP /mcp"]
        Stdio["Stdio Transport CLI"]
    end

    subgraph ResolverLayer ["Layered Location Resolver"]
        Explicit["Explicit Lat/Lng"] --> Truncate["2-Decimal Sanitizer ~1.1km"]
        UserPref["Stored KV Preferences"] --> Resolver["Location Normalizer"]
        Headers["X-Forwarded Headers"] --> Resolver
        GeoIP["Cloudflare request.cf GeoIP"] --> Resolver
        Fallback["Makkah Al-Mukarramah Fallback"] --> Resolver
        Truncate --> Resolver
    end

    subgraph EngineLayer ["In-Isolate Solar Calculation Engine"]
        Resolver --> Authority["Authority Selector"]
        Authority --> AdhanEngine["Astronomical Solar Solver"]
        AdhanEngine --> FiqhRules["Fiqh Clamping 48° & Madhab Calibration"]
        FiqhRules --> DueLogic["Prayer Window & Due Evaluator"]
    end

    subgraph OutputLayer ["Formatted Payloads & Disclosures"]
        DueLogic --> MCPResponse["JSON-RPC Structured Output"]
        MCPResponse --> DisclosureNotice["Mandatory Theological Notice"]
        DisclosureNotice --> Middleware["Deterministic Host Middleware"]
        Middleware --> FinalOutput["Appended AI Response: 🕌 It is time for Maghrib prayer"]
    end

    ClientLayer --> TransportLayer
    TransportLayer --> ResolverLayer

🛠️ MCP Tools Catalog

The server exposes 5 finely-tuned tools conforming to the latest Model Context Protocol standard with full Zod output contracts:

Tool Name

Operation Mode

Open World

Description

get_prayer_status

Read-Only

Safe

Checks if an obligatory prayer is currently due. Returns active prayer, countdown, calculation authority, and selection justification.

get_today_prayer_times

Read-Only

Safe

Computes today's full timetable (Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha) in UTC and localized string format.

get_next_prayer

Read-Only

Safe

Returns the immediate upcoming prayer, exact scheduled timestamp, countdown minutes, and regional authority.

search_cities

Read-Only

Safe

Fuzzy search across 100+ global Islamic metropolitan areas with pre-calibrated coordinates, timezones, and authorities.

list_authorities

Read-Only

Safe

Enumerates all recognized Islamic calculation authorities, twilight angles, and regional jurisdictions.


📐 Astronomical & Theological Rigor

Prayer calculations are not approximations—they represent exact solar depression angles calibrated to regional fatwa bodies:

Sovereign Authority

Jurisdiction

Fajr Angle

Isha Angle / Interval

Default Asr Madhab

Umm al-Qura University

Saudi Arabia, GCC

18.5°

+90 min (+120 min Ramadan)

Shafi / Standard

Egyptian General Survey

Egypt, Palestine, Levant

19.5°

17.5°

Shafi (Palestinian Awqaf offsets applied)

Diyanet İşleri Başkanlığı

Turkey, Balkans, Central Asia

18.0°

17.0°

Hanafi (Double shadow ratio)

Univ. of Islamic Sciences, Karachi

Pakistan, India, Bangladesh

18.0°

18.0°

Hanafi (Double shadow ratio)

ISNA

United States, Canada

15.0°

15.0°

Shafi / Standard

Muslim World League (MWL)

Europe, Global Fallback

18.0°

17.0°

Shafi / Standard

MABIMS / JAKIM / MUIS

Malaysia, Singapore, Indonesia

20.0°

18.0°

Shafi / Standard

High-Latitude Polar Adjustments

In latitudes above 48° North or South where twilight persists throughout the night in summer, the engine automatically engages fiqh-compliant clamping (Middle of the Night & One-Seventh Rule), preventing computational errors or impossible timetables.


🔌 Install & Multi-Agent Setup

Connect Muslim Prayer Reminder to any AI agent harness, developer IDE, or container runtime:

1-Click & Matrix Overview

Environment / Harness

Protocol Mode

Quick Command / Deeplink

Cursor IDE

Remote HTTP

Install in Cursor

Claude Code

Native Plugin

/plugin marketplace add tareq7/muslim-prayer-mcp

Codex

Native Plugin

codex plugin marketplace add tareq7/muslim-prayer-mcp

GitHub Copilot CLI

Copilot Plugin

copilot plugin marketplace add tareq7/muslim-prayer-mcp

Claude Desktop

Stdio CLI

npx -y muslim-prayer-mcp via claude_desktop_config.json

VS Code & Cline

Local NPX

npx -y muslim-prayer-mcp via .vscode/mcp.json

Windsurf & Devin

Remote HTTP

Remote URL to mcp_config.json

Gemini CLI

Native Extension

gemini-cli --mcp-server https://.../mcp

Pi Agent Harness

Git Extension

pi install git:github.com/tareq7/muslim-prayer-mcp

OpenCode

Agent Plugin

Auto-loaded via opencode.json & AGENTS.md

Docker Container

Container

docker run -d -p 8080:8080 ghcr.io/tareq7/muslim-prayer-mcp:latest


Claude Code

Run inside your Claude Code session:

/plugin marketplace add tareq7/muslim-prayer-mcp
/plugin install muslim-prayer-mcp@muslim-prayer-mcp

(Note: Send as two separate prompts). In the Claude Code Desktop app, click the + button next to the prompt box ➔ PluginsAdd plugin to browse and install from the marketplace.


Codex

Run in your terminal:

codex plugin marketplace add tareq7/muslim-prayer-mcp
codex plugin add muslim-prayer-mcp@muslim-prayer-mcp

Run codex and open /hooks (or start a new thread). This also activates the plugin in the Codex Desktop app upon restart.


GitHub Copilot CLI

In your terminal:

copilot plugin marketplace add tareq7/muslim-prayer-mcp
copilot plugin install muslim-prayer-mcp@muslim-prayer-mcp

Or inside an interactive Copilot CLI session:

/plugin marketplace add tareq7/muslim-prayer-mcp
/plugin install muslim-prayer-mcp@muslim-prayer-mcp

Cursor IDE

Click to install with one click:
Install in Cursor

Or manually add to .cursor/mcp.json:

{
  "mcpServers": {
    "muslim-prayer": {
      "url": "https://muslim-prayer-mcp.najetareqz.workers.dev/mcp"
    }
  }
}

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "muslim-prayer": {
      "command": "npx",
      "args": ["-y", "muslim-prayer-mcp"]
    }
  }
}

VS Code & Cline

Add to .vscode/mcp.json or Cline settings:

{
  "mcpServers": {
    "muslim-prayer": {
      "command": "npx",
      "args": ["-y", "muslim-prayer-mcp"]
    }
  }
}

Windsurf & Devin

Add to mcp_config.json:

{
  "mcpServers": {
    "muslim-prayer": {
      "url": "https://muslim-prayer-mcp.najetareqz.workers.dev/mcp"
    }
  }
}

Gemini CLI

Connect directly using the live edge endpoint:

gemini-cli --mcp-server https://muslim-prayer-mcp.najetareqz.workers.dev/mcp

Pi Agent Harness

pi install git:github.com/tareq7/muslim-prayer-mcp

OpenCode

Add to your opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "muslim-prayer": {
      "type": "remote",
      "url": "https://muslim-prayer-mcp.najetareqz.workers.dev/mcp"
    }
  }
}

OpenCode automatically loads this repository's AGENTS.md and skills/muslim-prayer-mcp/SKILL.md.


Docker Container

docker run -d -p 8080:8080 ghcr.io/tareq7/muslim-prayer-mcp:latest

💻 Deterministic Host Middleware

For platforms building autonomous AI agents (Next.js, LangChain, Vercel AI SDK), the included middleware deterministically appends prayer notices to AI responses without hallucination:

import { PrayerReminderMiddleware } from 'muslim-prayer-mcp/middleware';

const prayerMiddleware = new PrayerReminderMiddleware({
  workerBaseUrl: 'https://muslim-prayer-mcp.najetareqz.workers.dev',
  userId: 'user_session_42',
});

// Wrap any LLM completion
const rawLlmOutput = await callLlm('Can you review this pull request?');
const { responseText, reminderAppended } = await prayerMiddleware.processResponse(rawLlmOutput, {
  'X-User-Coordinates': '24.71, 46.68', // Riyadh
  'X-User-Timezone': 'Asia/Riyadh',
});

console.log(responseText);
// => The code looks solid, but let's optimize line 42...
//
// 🕌 It is time for Asr prayer.

🧪 Comprehensive Test Suite

The engine includes 44 unit, integration, and end-to-end tests validating astronomical accuracy across 10 worldwide benchmark coordinates:

npm test
▶ Astronomical Prayer Calculation Suite
  ✔ calculates valid prayer timetable for Riyadh in correct chronological sequence
  ✔ calculates valid prayer timetable for Makkah in correct chronological sequence
  ✔ calculates valid prayer timetable for Cairo in correct chronological sequence
  ✔ calculates valid prayer timetable for Dubai in correct chronological sequence
  ✔ calculates valid prayer timetable for London in correct chronological sequence
  ✔ calculates valid prayer timetable for Paris in correct chronological sequence
  ✔ calculates valid prayer timetable for New York in correct chronological sequence
  ✔ calculates valid prayer timetable for Jakarta in correct chronological sequence
  ✔ calculates valid prayer timetable for Karachi in correct chronological sequence
  ✔ calculates valid prayer timetable for Sydney (Southern Hem) in correct chronological sequence
  ✔ verifies Hanafi Asr is strictly later than Shafi Asr
  ✔ handles Daylight Saving Time (DST) transitions safely
  ✔ automatically resolves Palestinian Awqaf standard for Gaza
  ✔ handles high-latitude polar city with MiddleOfTheNight rule safely
...
ℹ tests 44 | pass 44 | fail 0

🔒 Security & Privacy Policy

  • Coordinate Truncation: All user coordinates are truncated to 2 decimal places upon arrival (~1.1 km resolution). Precise location is mathematically non-recoverable.

  • No Outbound Tracking: Astronomical math is computed locally within the isolated V8 runtime; zero external requests are made to third-party tracking APIs.

  • Fail-Open Architecture: Host middleware is designed to fail open; network issues or latency spikes will never block primary AI conversation streams.

  • Full Disclosure Process: See SECURITY.md for supported versions, SLA, and private reporting.


📄 Governance, Ownership & Community

Available Tools

5 tools
configure_prayer_preferencesConfigure User Prayer PreferencesA
Idempotent
Inspect

Configures prayer calculation parameters, location behavior (fixed or auto_travel), madhab, reminder mode, and notification language in persistent storage.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoLanguage for reminder text: en or ar
madhabNoJurisprudential Asr shadow calculation: Shafi or Hanafi
userIdYesUnique user identifier
enabledNoWhether prayer reminders are enabled
timezoneNoIANA timezone identifier (e.g. Asia/Riyadh, Europe/London)
fixedCityNoPredefined city name for fixed location (e.g. Riyadh, London)
locationModeNoLocation strategy: auto_travel or fixed
reminderModeNoReminder display policy: prayer_window, exact_window, persistent
fixedCoordinatesNoFixed geographical coordinates
highLatitudeRuleNoHigh latitude twilight adjustment rule
calculationMethodNoIslamic prayer calculation authority
minuteAdjustmentsNoCustom per-prayer minute offsets (-60 to +60)
exactWindowMinutesNoDuration in minutes for exact_window mode

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYesWhether configuration succeeded
preferencesYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already convey non-readonly, idempotent, and non-destructive behavior, so the description's added 'persistent storage' context is useful but not extensive. It does not disclose overwrite semantics or whether omitted fields are preserved, but it does not contradict the annotations.

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

Conciseness5/5

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

A single, front-loaded sentence that states the verb and resource first and then lists the configurable dimensions in a compact list. Every word adds information, and it is appropriately sized for the tool's scope.

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

Completeness4/5

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

The tool is complex (13 parameters, nested objects, enums), but the input schema covers every parameter and an output schema exists, so the description does not need to repeat return or parameter details. It adequately frames purpose and persistence, though it could mention that only userId is required and omitted fields likely remain unchanged.

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

Parameters3/5

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

With 100% schema description coverage, the schema already documents each of the 13 parameters. The description adds a high-level grouping of parameters into categories and names madhab, reminder mode, and notification language, but provides no per-parameter meaning beyond the 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 names a clear action ('configures'), a specific resource (user prayer preferences), and enumerates the domains it affects: calculation parameters, location behavior, madhab, reminder mode, and notification language. This makes it easy to distinguish from the get_* siblings as the write/preference-update tool.

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 verb 'configures' plus 'persistent storage' clearly signals this is the mutation tool, while sibling names like get_prayer_preferences and get_prayer_status cover read-only retrieval. It does not explicitly state exclusions or when not to use it, but the read/write split provides clear context.

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

get_next_prayerGet Upcoming Prayer and CountdownA
Read-onlyIdempotent
Inspect

Returns the immediate next prayer name, scheduled time, authority calculation method, and remaining countdown in minutes. MANDATORY: The LLM must always explicitly disclose to the user which calculation authority method was used and why it was selected (see authorityNotice in response).

ParametersJSON Schema
NameRequiredDescriptionDefault
madhabNoOptional Asr shadow jurisprudence override (Shafi or Hanafi)
userIdNoUnique user or device ID
latitudeNoOptional explicit latitude override
timezoneNoOptional IANA timezone override
longitudeNoOptional explicit longitude override
calculationMethodNoOptional calculation authority override (auto-resolved from location by default)

Output Schema

ParametersJSON Schema
NameRequiredDescription
madhabYesActive Asr jurisprudence
timezoneYesResolved IANA timezone
nextPrayerYesName of the upcoming prayer
locationSourceYesSource of location resolution
authorityNoticeNo
nextPrayerAtUtcYesUTC timestamp of the upcoming prayer
selectionReasonNo
currentLocalDateYesCurrent local date YYYY-MM-DD
remainingMinutesYesMinutes remaining until prayer start
calculationMethodYesActive calculation authority
minuteAdjustmentsNo
nextPrayerLocalTimeYesFormatted local time HH:mm
authorityDescriptionNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare read-only and idempotent behavior. The description adds a crucial behavioral obligation beyond those annotations: the agent must always disclose the calculation authority and the rationale for its selection, referencing authorityNotice in the response. This is actionable and materially changes how the agent should behave.

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 two sentences with no filler. The return values are front-loaded, and the mandatory disclosure follows in a clearly marked instruction. The all-caps note is justified because it is a critical agent obligation that must not be overlooked.

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?

With a full output schema, annotations covering safety, and a description that names the exact response fields (prayer name, time, authority method, countdown, authorityNotice), the agent has everything necessary to call and handle the tool correctly. The only minor gap, choosing among siblings, is a usage-guideline concern rather than a completeness gap.

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

Parameters3/5

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

All six parameters are fully described in the input schema (100% coverage), so the description does not need to repeat parameter-level details. It does mention 'calculation authority method', which maps to the calculationMethod parameter, but it adds no syntax, format, or default behavior beyond what the schema already provides.

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

Purpose4/5

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

The description clearly states a specific verb and resource – returning the immediate next prayer with its name, scheduled time, authority method, and countdown. It is distinguishable from siblings like get_today_prayer_times by the 'immediate next' qualifier, though it does not explicitly name alternative tools.

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

Usage Guidelines3/5

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

The description implies usage when an agent needs the next upcoming prayer and its countdown, but it does not state when to prefer this tool over siblings like get_today_prayer_times or get_prayer_status, nor does it provide any exclusions. The mandatory disclosure note is an instruction for after invocation, not a selection guideline.

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

get_prayer_preferencesRetrieve Stored Prayer PreferencesA
Read-onlyIdempotent
Inspect

Returns the currently active calculation settings and preferences for a user. Read-only operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesUnique user identifier

Output Schema

ParametersJSON Schema
NameRequiredDescription
localeNo
madhabNo
userIdNo
enabledNo
messageNo
timezoneNo
fixedCityNo
locationModeNo
reminderModeNo
updatedAtUtcNo
fixedCoordinatesNo
highLatitudeRuleNo
calculationMethodNo
minuteAdjustmentsNo
exactWindowMinutesNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the 'currently active' qualifier, which clarifies that the result reflects current settings rather than historical ones, but otherwise adds little behavioral detail beyond the annotations.

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

Conciseness4/5

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

The description is concise and front-loaded with the primary action and resource. The phrase 'Read-only operation' is slightly redundant given the annotations, but the overall structure is clear and efficient.

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 simple single-parameter read-only retrieval with full schema coverage, annotations, and an output schema, the description is complete. It tells the agent what the tool returns, that it is read-only, and the userId parameter is fully documented in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, and the only parameter, userId, is already described as a 'Unique user identifier' in the schema. The description does not need to add parameter meaning because the schema fully covers it.

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 uses a specific verb ('Returns') and a precise resource ('currently active calculation settings and preferences for a user'), clearly distinguishing this tool from siblings like get_today_prayer_times or get_prayer_status. The title reinforces the purpose as retrieving stored prayer preferences.

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 clearly indicates this is the tool to use when retrieving a user's current calculation settings and preferences, and the 'Read-only operation' statement clarifies it is for reading rather than configuring. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to select it appropriately.

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

get_prayer_statusCheck Muslim Prayer Due StatusA
Read-onlyIdempotent
Inspect

Checks if a Muslim obligatory prayer (Fajr, Dhuhr, Asr, Maghrib, Isha) is currently due for the user location and returns active reminder details. MANDATORY: The LLM must always explicitly disclose to the user which calculation authority method was used and why it was selected (see authorityNotice in response).

ParametersJSON Schema
NameRequiredDescriptionDefault
madhabNoOptional Asr shadow jurisprudence override (Shafi or Hanafi)
userIdNoUnique user or device ID for preference and deduplication tracking
latitudeNoOptional explicit latitude override
timezoneNoOptional IANA timezone override (e.g. Asia/Riyadh)
longitudeNoOptional explicit longitude override
calculationMethodNoOptional calculation authority override (auto-resolved from location by default)

Output Schema

ParametersJSON Schema
NameRequiredDescription
madhabYesActive Asr jurisprudence
prayerNoThe name of the currently due prayer if applicable
timezoneYesResolved IANA timezone
dedupeKeyNoDeduplication cache key
localDateYesCurrent local date in YYYY-MM-DD
nextPrayerYesThe name of the next upcoming prayer
reminderDueYesWhether a prayer is currently due for reminder
expiresAtUtcNoUTC expiration time of the active prayer window
reminderTextNoLocalized reminder message
startedAtUtcNoUTC start time of the active prayer window
locationSourceYesSource of location resolution
authorityNoticeNoMandatory theological transparency notice
nextPrayerAtUtcYesUTC timestamp of the next upcoming prayer
selectionReasonNoReason for authority selection
calculationMethodYesActive calculation authority
minuteAdjustmentsNoApplied minute adjustments
authorityDescriptionNoDescription of the calculation authority

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only and idempotent behavior; the description adds meaningful behavioral context beyond that by mandating that the LLM disclose the calculation authority method and reasoning to the user, and by referencing authorityNotice in the response. This is a non-obvious requirement that the agent needs to know.

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?

Two sentences with no filler: the first clearly states the tool's behavior and scope, and the second front-loads the critical mandatory disclosure. Every word earns its place.

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 read-only, idempotent status tool with zero required parameters, fully documented schema fields, and an output schema available, the description is complete. It covers the one non-obvious agent obligation and does not need to repeat return-value details already provided by structured fields.

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

Parameters3/5

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

Schema description coverage is 100%, with every parameter, including enums, already described. The description adds no new parameter-specific semantics beyond referencing calculation authority and user location, so the baseline score of 3 applies.

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 a specific verb ('Checks'), names the exact resource (the five obligatory Muslim prayers), and scopes the action to 'currently due for the user location' and 'active reminder details'. This clearly differentiates it from siblings like get_next_prayer and get_today_prayer_times, even without explicitly naming them.

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

Usage Guidelines3/5

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

It does not explicitly state when to prefer this tool over alternatives such as get_next_prayer or get_today_prayer_times. The 'currently due' wording implies the selection context, and the MANDATORY disclosure instruction is an operational guideline, but explicit routing to sibling tools is missing.

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

get_today_prayer_timesGet Full Daily Prayer TimetableA
Read-onlyIdempotent
Inspect

Retrieves today prayer timetable (Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha) in UTC and formatted local time. MANDATORY: The LLM must always explicitly disclose to the user which calculation authority method was used and why it was selected (see authorityNotice in response).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (defaults to today)
madhabNoOptional Asr shadow jurisprudence override (Shafi or Hanafi)
userIdNoUnique user or device ID
latitudeNoOptional explicit latitude override
timezoneNoOptional IANA timezone override
longitudeNoOptional explicit longitude override
calculationMethodNoOptional calculation authority override (auto-resolved from location by default)

Output Schema

ParametersJSON Schema
NameRequiredDescription
madhabYesActive Asr jurisprudence
timesUtcYes
timezoneYesResolved IANA timezone
localDateYesLocal schedule date YYYY-MM-DD
timesLocalYes
coordinatesYes
authorityNoticeNo
selectionReasonNo
calculationMethodYesActive calculation authority
minuteAdjustmentsNo
authorityDescriptionNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only and idempotent behavior. The description adds value by stating output is provided in both UTC and formatted local time, and by imposing a mandatory user disclosure about the calculation method via authorityNotice. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences with no filler: the first front-loads the core purpose, and the second delivers a critical mandatory usage rule. Every sentence earns its place.

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?

With an output schema present and safety annotations defining behavior, the description fully covers what is retrieved, the display format, and a mandatory disclosure requirement. Nothing necessary for correct invocation is missing.

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

Parameters3/5

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

The input schema has 100% description coverage with all seven parameters documented, so the schema carries the semantic weight. The description only echoes 'calculation authority method' without adding new parameter-specific detail, earning the baseline score.

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 uses a specific verb ('Retrieves') with a specific resource ('today prayer timetable') and enumerates exactly which prayers are included (Fajr through Isha). This clearly distinguishes the tool from siblings like get_next_prayer or get_prayer_status.

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 makes its scope explicit as the full daily timetable, so an agent can infer when to call it versus a single-prayer or status tool. However, it does not explicitly name alternatives or state when not to use it, missing the full 'when-to-use' treatment.

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 updatesv1.0.1
    • First observedconfigure_prayer_preferences
    • First observedget_next_prayer
    • First observedget_prayer_preferences
    • First observedget_prayer_status
    • First observedget_today_prayer_times

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation4/5

The read operations target distinct temporal scopes: get_prayer_status checks a currently due prayer, get_next_prayer returns the upcoming prayer, and get_today_prayer_times provides the full daily schedule. There is slight potential for confusion between status and next prayer in edge cases, but the descriptions make the differences mostly clear.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb prefixes: get_ for read operations and configure_ for the write operation. The resource nouns (prayer_status, today_prayer_times, next_prayer, prayer_preferences) are descriptive and follow a predictable convention.

Tool Count5/5

Five tools is well-scoped for a focused prayer reminder server: three read tools cover prayer time retrieval and status, while two tools handle preference configuration. Each tool earns its place without redundancy or unnecessary expansion.

Completeness4/5

The tool set covers the core prayer reminder workflow: current status, daily timetable, next prayer, and preference management. Minor gaps include lack of support for arbitrary date queries and no explicit tool for listing supported calculation methods, but these are workable around the existing surfaces.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers