Muslim Prayer Reminder MCP
This server provides Muslim prayer time calculation and proactive prayer reminders for AI agents and developer environments via MCP.
Get prayer due status: Check if an obligatory prayer is currently due, with active prayer name, countdown, UTC window times, and reminder text.
Get today's prayer timetable: Retrieve the full daily schedule (Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha) in UTC and local time for any date.
Get next prayer: See the immediate upcoming prayer, its exact UTC/local time, remaining minutes, and countdown.
Configure user preferences: Persist per-user settings including calculation method, madhab (Shafi/Hanafi), location mode (fixed or auto-travel), timezone, coordinates, high-latitude rule, minute adjustments, reminder mode, and language (en/ar).
Retrieve stored preferences: Read back the active prayer calculation configuration for a user.
Global location resolution: Auto-detect location via explicit coordinates, stored preferences, HTTP headers, Cloudflare GeoIP, or fallback to Makkah, with coordinate truncation for privacy.
Multiple astronomical authorities: Supports Umm Al-Qura, Muslim World League, Egyptian, Karachi, North America, Dubai, Qatar, Kuwait, Moonsighting Committee, Singapore, Turkey, and Tehran methods.
Fiqh-aware calculations: Applies Asr shadow jurisprudence (Shafi/Hanafi) and high-latitude polar adjustments (Middle of the Night, etc.).
Theological transparency: Each response includes mandatory authority notice and selection reason that the LLM must disclose to the user.
Integration flexibility: Works via remote HTTP (Cloudflare Workers) or stdio (npx) with setup for Cursor, Claude, Codex, Copilot, VS Code, Windsurf, Gemini, Docker, and more.
Adds prayer status, daily prayer times, next prayer countdown, city search, and calculation authority lookup to GitHub Copilot CLI workflows.
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
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 |
| Read-Only | Safe | Checks if an obligatory prayer is currently due. Returns active prayer, countdown, calculation authority, and selection justification. |
| Read-Only | Safe | Computes today's full timetable (Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha) in UTC and localized string format. |
| Read-Only | Safe | Returns the immediate upcoming prayer, exact scheduled timestamp, countdown minutes, and regional authority. |
| Read-Only | Safe | Fuzzy search across 100+ global Islamic metropolitan areas with pre-calibrated coordinates, timezones, and 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 | |
Claude Code | Native Plugin |
|
Codex | Native Plugin |
|
GitHub Copilot CLI | Copilot Plugin |
|
Claude Desktop | Stdio CLI |
|
VS Code & Cline | Local NPX |
|
Windsurf & Devin | Remote HTTP | Remote URL to |
Gemini CLI | Native Extension |
|
Pi Agent Harness | Git Extension |
|
OpenCode | Agent Plugin | Auto-loaded via |
Docker Container | Container |
|
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 ➔ Plugins ➔ Add 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-mcpRun 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-mcpOr inside an interactive Copilot CLI session:
/plugin marketplace add tareq7/muslim-prayer-mcp
/plugin install muslim-prayer-mcp@muslim-prayer-mcpCursor IDE
Click to install with one click:
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/mcpPi Agent Harness
pi install git:github.com/tareq7/muslim-prayer-mcpOpenCode
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
Publisher & Organization: Smart Creations (OpenAI Organization ID:
org-deULP4GGInsTcWmuaHWp3lxy)Lead Maintainer & Author: Tareq Naji (@tareq7)
License: MIT License (Copyright © 2026 Smart Creations & Tareq Naji)
Citation: CITATION.cff
Maintainers: MAINTAINERS.md
Governance: GOVERNANCE.md
Product Roadmap: ROADMAP.md
Agent Guidelines: AGENTS.md
Contributing: CONTRIBUTING.md
Code of Conduct: CODE_OF_CONDUCT.md
Discussions: GitHub Discussions
Available Tools
5 toolsconfigure_prayer_preferencesConfigure User Prayer PreferencesAIdempotentInspect
Configures prayer calculation parameters, location behavior (fixed or auto_travel), madhab, reminder mode, and notification language in persistent storage.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language for reminder text: en or ar | |
| madhab | No | Jurisprudential Asr shadow calculation: Shafi or Hanafi | |
| userId | Yes | Unique user identifier | |
| enabled | No | Whether prayer reminders are enabled | |
| timezone | No | IANA timezone identifier (e.g. Asia/Riyadh, Europe/London) | |
| fixedCity | No | Predefined city name for fixed location (e.g. Riyadh, London) | |
| locationMode | No | Location strategy: auto_travel or fixed | |
| reminderMode | No | Reminder display policy: prayer_window, exact_window, persistent | |
| fixedCoordinates | No | Fixed geographical coordinates | |
| highLatitudeRule | No | High latitude twilight adjustment rule | |
| calculationMethod | No | Islamic prayer calculation authority | |
| minuteAdjustments | No | Custom per-prayer minute offsets (-60 to +60) | |
| exactWindowMinutes | No | Duration in minutes for exact_window mode |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether configuration succeeded |
| preferences | Yes |
TDQS
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.
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.
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.
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.
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.
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 CountdownARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| madhab | No | Optional Asr shadow jurisprudence override (Shafi or Hanafi) | |
| userId | No | Unique user or device ID | |
| latitude | No | Optional explicit latitude override | |
| timezone | No | Optional IANA timezone override | |
| longitude | No | Optional explicit longitude override | |
| calculationMethod | No | Optional calculation authority override (auto-resolved from location by default) |
Output Schema
| Name | Required | Description |
|---|---|---|
| madhab | Yes | Active Asr jurisprudence |
| timezone | Yes | Resolved IANA timezone |
| nextPrayer | Yes | Name of the upcoming prayer |
| locationSource | Yes | Source of location resolution |
| authorityNotice | No | |
| nextPrayerAtUtc | Yes | UTC timestamp of the upcoming prayer |
| selectionReason | No | |
| currentLocalDate | Yes | Current local date YYYY-MM-DD |
| remainingMinutes | Yes | Minutes remaining until prayer start |
| calculationMethod | Yes | Active calculation authority |
| minuteAdjustments | No | |
| nextPrayerLocalTime | Yes | Formatted local time HH:mm |
| authorityDescription | No |
TDQS
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.
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.
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.
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.
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.
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 PreferencesARead-onlyIdempotentInspect
Returns the currently active calculation settings and preferences for a user. Read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | Unique user identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
| locale | No | |
| madhab | No | |
| userId | No | |
| enabled | No | |
| message | No | |
| timezone | No | |
| fixedCity | No | |
| locationMode | No | |
| reminderMode | No | |
| updatedAtUtc | No | |
| fixedCoordinates | No | |
| highLatitudeRule | No | |
| calculationMethod | No | |
| minuteAdjustments | No | |
| exactWindowMinutes | No |
TDQS
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.
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.
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.
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.
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.
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 StatusARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| madhab | No | Optional Asr shadow jurisprudence override (Shafi or Hanafi) | |
| userId | No | Unique user or device ID for preference and deduplication tracking | |
| latitude | No | Optional explicit latitude override | |
| timezone | No | Optional IANA timezone override (e.g. Asia/Riyadh) | |
| longitude | No | Optional explicit longitude override | |
| calculationMethod | No | Optional calculation authority override (auto-resolved from location by default) |
Output Schema
| Name | Required | Description |
|---|---|---|
| madhab | Yes | Active Asr jurisprudence |
| prayer | No | The name of the currently due prayer if applicable |
| timezone | Yes | Resolved IANA timezone |
| dedupeKey | No | Deduplication cache key |
| localDate | Yes | Current local date in YYYY-MM-DD |
| nextPrayer | Yes | The name of the next upcoming prayer |
| reminderDue | Yes | Whether a prayer is currently due for reminder |
| expiresAtUtc | No | UTC expiration time of the active prayer window |
| reminderText | No | Localized reminder message |
| startedAtUtc | No | UTC start time of the active prayer window |
| locationSource | Yes | Source of location resolution |
| authorityNotice | No | Mandatory theological transparency notice |
| nextPrayerAtUtc | Yes | UTC timestamp of the next upcoming prayer |
| selectionReason | No | Reason for authority selection |
| calculationMethod | Yes | Active calculation authority |
| minuteAdjustments | No | Applied minute adjustments |
| authorityDescription | No | Description of the calculation authority |
TDQS
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.
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.
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.
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.
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.
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 TimetableARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format (defaults to today) | |
| madhab | No | Optional Asr shadow jurisprudence override (Shafi or Hanafi) | |
| userId | No | Unique user or device ID | |
| latitude | No | Optional explicit latitude override | |
| timezone | No | Optional IANA timezone override | |
| longitude | No | Optional explicit longitude override | |
| calculationMethod | No | Optional calculation authority override (auto-resolved from location by default) |
Output Schema
| Name | Required | Description |
|---|---|---|
| madhab | Yes | Active Asr jurisprudence |
| timesUtc | Yes | |
| timezone | Yes | Resolved IANA timezone |
| localDate | Yes | Local schedule date YYYY-MM-DD |
| timesLocal | Yes | |
| coordinates | Yes | |
| authorityNotice | No | |
| selectionReason | No | |
| calculationMethod | Yes | Active calculation authority |
| minuteAdjustments | No | |
| authorityDescription | No |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v1.0.1- First observed
configure_prayer_preferences - First observed
get_next_prayer - First observed
get_prayer_preferences - First observed
get_prayer_status - First observed
get_today_prayer_times
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
Cloudflare Workers MCP server: agent-workflow-engine
Cloudflare Workers MCP server: ai-model-router
Cloudflare Workers MCP server: ai-guardrails
Cloudflare Workers MCP server: ai-cost-optimizer
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server using Hono and Streamable HTTP, deployable to Cloudflare Workers, with tools for periodic notifications and prompt templates.-
- FlicenseNot gradedqualityFmaintenanceA remote MCP server deployed on Cloudflare Workers with OAuth authentication, enabling secure tool calling over SSE.-
- FlicenseNot gradedqualityCmaintenanceDeployable MCP server on Cloudflare Workers without authentication, enabling AI agents to use custom tools via SSE endpoint. Supports connection to Cloudflare AI Playground and local clients like Claude Desktop.-
- FlicenseNot gradedqualityFmaintenanceStateless Streamable HTTP MCP endpoint with OAuth 2.1 authentication via Cloudflare Workers, supporting PKCE, DCR, and token introspection.-