Muslim Prayer Reminder MCP
Server Details
Production-ready Muslim prayer reminder MCP with astronomical precision and theological disclosure.
- Status
- Healthy
- Uptime
- 100.0% over 60 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- tareq7/muslim-prayer-mcp
- GitHub Stars
- 4
- Server Listing
- Muslim Prayer Reminder MCP
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 5 tools
The read/write distinction between configure_prayer_preferences and get_prayer_preferences is clear, and the three query tools largely target distinct needs. However, get_next_prayer and get_prayer_status both concern the current/upcoming prayer state and could be confused in edge cases.
All tool names follow a consistent snake_case verb_noun pattern, with get_ for read operations and configure_ for the single write operation. The naming is predictable and readable throughout.
Five tools is well-scoped for a focused prayer reminder server. Each tool serves a distinct operational need without redundancy or bloat.
The server covers preference configuration, current status, next prayer, daily timetable, and preference retrieval. Minor gaps exist, such as no explicit tool for arbitrary-date or monthly timetables and no direct reminder acknowledgement/snooze operation.
Available Tools
5 toolsconfigure_prayer_preferencesConfigure User Prayer PreferencesADestructiveIdempotentInspect
Updates persistent prayer preferences, overwriting supplied settings while preserving omitted settings. Setting fixedCity replaces stored fixedCoordinates and stores the canonical city timezone; contradictory timezones are rejected; setting fixedCoordinates replaces stored fixedCity. Can disable reminders. Fixed mode requires a supported fixedCity or fixedCoordinates with timezone; new coordinates require timezone in the same request. clearFixedLocation removes saved location and timezone and defaults to auto_travel. Combined fixed-location calculation settings are validated for the current and next local day before saving. Invalid combinations preserve the previous preferences. Auto-travel chronology is checked when a query supplies its location. Previous values are not retained for undo.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language for reminder text: en or ar | |
| madhab | No | Jurisprudential Asr shadow calculation: Shafi or Hanafi | |
| userId | Yes | Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved. | |
| enabled | No | Whether prayer reminders are enabled | |
| timezone | No | IANA timezone identifier (e.g. Asia/Riyadh, Europe/London) | |
| fixedCity | No | Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored. | |
| locationMode | No | Location strategy: fixed uses saved location; auto_travel requires the caller to supply current city or coordinates/timezone on each query and never uses IP geolocation. | |
| 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). For fixed locations, combined settings must preserve timetable chronology for the current and next local day before saving; auto-travel offsets are validated when a query supplies its location. | |
| clearFixedLocation | No | Remove stored fixedCity, fixedCoordinates and timezone. Switches to auto_travel unless locationMode is supplied. Cannot combine with a new fixed location/timezone. | |
| exactWindowMinutes | No | Duration in minutes for exact_window mode. Omitted updates preserve the saved value; if unset, the service default is 20 minutes unless the operator overrides it. |
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?
Goes well beyond the annotations: states that supplied settings overwrite while omitted ones persist, that fixedCity/fixedCoordinates mutually replace each other, that contradictory timezones are rejected, that invalid combinations preserve prior preferences, and critically that 'Previous values are not retained for undo' — which operationalizes the destructiveHint. This is exactly the kind of mutation/validation/irreversibility context structured fields cannot carry.
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?
Front-loads the core update semantics before diving into mode-specific rules, and nearly every sentence encodes a distinct constraint. It is dense and slightly verbose in places where it mirrors schema wording, but there is little true padding.
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 14-parameter destructive mutation tool with nested objects and an output schema, the description covers persistence semantics, mutual exclusivity, validation timing, and irreversibility — everything an agent needs to call it safely. Return values are properly left to the output 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 coverage is 100%, so the baseline is 3, but the description adds genuine cross-parameter precedence rules the schema describes only per-field (fixedCity replaces stored fixedCoordinates, fixedCoordinates replaces fixedCity, clearFixedLocation and combined setting validation). It adds meaning beyond the per-parameter descriptions, though some sentences restate schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Updates persistent prayer preferences') and immediately characterizes the update semantics as merge-style ('overwriting supplied settings while preserving omitted settings'). This clearly separates it from the read-only siblings get_prayer_preferences / get_prayer_status without needing to name 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?
Gives concrete conditions for the key modes: fixed mode requires a supported city or coordinates+timezone, new coordinates require a timezone in the same request, clearFixedLocation defaults to auto_travel, and contradictory timezones are rejected. It does not explicitly say when to prefer this tool over get_prayer_preferences or when NOT to call it, so it falls short of a 5.
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 |
|---|---|---|---|
| city | No | Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored. | |
| madhab | No | Optional Asr shadow jurisprudence override (Shafi or Hanafi) | |
| userId | No | Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved. | |
| latitude | No | Optional explicit latitude override | |
| timezone | No | IANA timezone; required in the same request when latitude/longitude are supplied. Must agree with the city or be compatible with the coordinate timezone lookup. | |
| 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 |
| 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 | |
| calculationDetails | No | |
| nextPrayerLocalTime | Yes | Formatted local time HH:mm |
| authorityDescription | No | |
| highLatitudeAdjustment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, non-destructive read, so the bar is lower. The description nonetheless adds a real behavioral obligation that annotations cannot convey: the LLM must explicitly disclose the calculation authority method and its rationale, pointing at authorityNotice in the response. That is meaningful, non-redundant context beyond the structured fields.
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 tightly written sentences: the first front-loads the return payload, the second carries the single non-obvious operational rule. There is no filler, no restatement of the title, and no repetition of schema content.
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, the description need not enumerate return values, and annotations cover the safety profile; the description correctly spends its budget on the one thing neither structured field can express, the mandatory authority disclosure. The only gap is the absence of any routing guidance against its closely related siblings.
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 every parameter (city aliases, madhab enum, timezone/lat/long dependencies, calculationMethod enum) is already documented in the schema. The description only alludes to the calculation method being auto-resolved, adding essentially no syntax or format detail beyond what the schema supplies, so the baseline 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 and resource ('Returns the immediate next prayer name, scheduled time...') plus the distinctive extra payload (countdown in minutes), which separates it from get_today_prayer_times and get_prayer_status. It stops short of explicitly naming or contrasting those siblings, so an agent must infer the boundary from names alone.
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?
There is no explicit when-to-use or when-not-to-use guidance, nor any reference to the four sibling tools that overlap in subject matter (e.g. get_prayer_status vs get_today_prayer_times). The MANDATORY disclosure sentence is an output obligation, not tool-selection guidance, so usage is only implied by the 'next prayer' framing.
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 PreferencesBRead-onlyIdempotentInspect
Returns the currently active calculation settings and preferences for a user. Read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved. |
Output Schema
| Name | Required | Description |
|---|---|---|
| locale | No | |
| madhab | No | |
| enabled | No | |
| message | No | |
| timezone | No | |
| fixedCity | No | |
| locationMode | No | |
| reminderMode | No | |
| updatedAtUtc | No | |
| highLatitudeRule | No | |
| calculationMethod | No | |
| minuteAdjustments | No | |
| exactWindowMinutes | No | |
| fixedCityConfigured | Yes | |
| fixedCoordinatesConfigured | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so 'Read-only operation' merely restates structured data. The only added behavioral value is 'currently active', which hints that inactive/stored-but-unused preferences are excluded from the result.
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 short sentences, front-loaded with the resource description. The second sentence is redundant with readOnlyHint and could be cut, a minor waste rather than a structural flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations fully cover the safety profile. For a one-parameter read tool the description is nearly sufficient; only the missing routing guidance versus sibling tools leaves a small 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?
Schema description coverage is 100% and the single userId parameter is fully documented with pattern and length constraints, so the schema does the heavy lifting. The description adds nothing about the parameter, which is the expected baseline for this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Returns) and resource (calculation settings and preferences) with the scoping qualifier 'currently active', which separates it from the write-oriented sibling configure_prayer_preferences. It never names that sibling, so differentiation is inferable rather than explicit.
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?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives. An agent must infer from the tool name alone that this is the read counterpart to configure_prayer_preferences and not, say, a status check like get_prayer_status.
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 StatusAInspect
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 |
|---|---|---|---|
| city | No | Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored. | |
| madhab | No | Optional Asr shadow jurisprudence override (Shafi or Hanafi) | |
| userId | No | Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved. | |
| latitude | No | Optional explicit latitude override | |
| timezone | No | IANA timezone; required in the same request when latitude/longitude are supplied. Must agree with the city or be compatible with the coordinate timezone lookup. | |
| 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 |
| 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 |
| authorityNotice | Yes | Mandatory theological transparency notice; detailed provenance is at top level |
| 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 |
| calculationDetails | No | |
| authorityDescription | No | Description of the calculation authority |
| nextPrayerCalculation | No | Adjustment disclosure for the actual schedule of the next event, including tomorrow |
| highLatitudeAdjustment | No | |
| prayerWindowExpiresAtUtc | No | End of the active prayer period; same boundary as legacy expiresAtUtc |
| reminderWindowExpiresAtUtc | No | Reminder eligibility end; exact_window is capped by the prayer period boundary. Fields appear when a reminder is emitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a genuine behavioral requirement not present in the annotations: the agent must disclose the calculation authority method used and why, pointing at authorityNotice in the response. However, it never explains the notable annotation signal that readOnlyHint is false for what reads like a status query (does it persist reminder state?), leaving a real behavioral question unanswered.
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, front-loaded with the core behavior, with the mandatory disclosure instruction isolated in its own clearly-marked clause. Slightly heavy on imperative phrasing but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the core behavior plus a mandatory output-disclosure obligation. It does not explain how location is supplied (city vs. coordinates vs. userId) or the auto-resolution default, which is a modest gap for a 7-parameter, zero-required tool.
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 enums are documented inline, so the schema carries the parameter burden. The description only implies location-based resolution and hints at the calculation authority concept, adding no format, default, or dependency detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Checks if a Muslim obligatory prayer ... is currently due') and enumerates the five prayers covered, which distinguishes it in spirit from get_next_prayer and get_today_prayer_times. It stops short of explicitly naming those siblings or contrasting the scopes, so it is clear but not fully differentiated.
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?
Usage is only implied by the phrase 'currently due,' which suggests a real-time status check, but there is no explicit when-to-use, when-not-to-use, or routing to get_next_prayer / get_today_prayer_times. The MANDATORY sentence governs output disclosure, not tool selection, so it does not fill this gap.
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 |
|---|---|---|---|
| city | No | Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored. | |
| date | No | Date in YYYY-MM-DD format (defaults to today) | |
| madhab | No | Optional Asr shadow jurisprudence override (Shafi or Hanafi) | |
| userId | No | Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved. | |
| latitude | No | Optional explicit latitude override | |
| timezone | No | IANA timezone; required in the same request when latitude/longitude are supplied. Must agree with the city or be compatible with the coordinate timezone lookup. | |
| 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 | |
| authorityNotice | No | |
| selectionReason | No | |
| calculationMethod | Yes | Active calculation authority |
| minuteAdjustments | No | |
| calculationDetails | No | |
| authorityDescription | No | |
| highLatitudeAdjustment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavioral context: the response carries an authorityNotice and the LLM is mandated to disclose the calculation method and its rationale to the user — a caller-side obligation not derivable from the annotations or schema.
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 tightly constructed sentences with the purpose front-loaded and zero filler. The second sentence is an operational mandate rather than a description, but it is short and clearly flagged with 'MANDATORY', so it 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?
An output schema exists, so return-value details need not be restated, and the description still flags the authorityNotice field. The one gap is location resolution: with zero required parameters, the description never explains what happens if no city or coordinates are supplied, which an agent needs to know before calling.
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%, including per-parameter docs, enum membership, city aliases, and the latitude/longitude/timezone dependency rules, so the schema carries the load. The description mentions only that location drives method auto-resolution and notes the authority override, adding no syntax or format detail beyond the schema; baseline 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?
States a specific verb and resource — retrieve today's prayer timetable — and enumerates the six prayers returned plus the UTC/local-time duality. It is distinguishable from siblings like get_next_prayer and get_prayer_status by the word 'timetable', but it never explicitly contrasts itself with them, so it falls short of a 5.
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?
Usage is only implied: the agent can infer 'use me when the user wants the whole day's schedule' rather than a single next prayer. No alternatives are named, no conditions or exclusions are given, and the relationship to get_next_prayer / get_prayer_status is left to inference.
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 tool update
- Changed
configure_prayer_preferences1 field changed- changed
Input schema / properties / minuteAdjustments / descriptionPrevious value: -"Custom per-prayer minute offsets (-60 to +60)"New value: +"Custom per-prayer minute offsets (-60 to +60). For fixed locations, combined settings must preserve timetable chronology for the current and next local day before saving; auto-travel offsets are validated when a query supplies its location."
3 tool updates
- Changed
get_next_prayer4 fields changed- added
Input schema / dependenciesAdded value: +{ + "latitude": [ + "longitude", + "timezone" + ], + "longitude": [ + "latitude", + "timezone" + ] +} - removed
Input schema / dependentRequiredRemoved value: -{ - "latitude": [ - "longitude", - "timezone" - ], - "longitude": [ - "latitude", - "timezone" - ] -} - changed
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneValidation / descriptionPrevious value: -"Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure"New value: +"Validation basis; ocean locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure" - changed
Output schema / properties / calculationDetails / properties / timezoneValidation / descriptionPrevious value: -"Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure"New value: +"Validation basis; ocean locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure"
- Changed
get_prayer_status12 fields changed- added
Input schema / dependenciesAdded value: +{ + "latitude": [ + "longitude", + "timezone" + ], + "longitude": [ + "latitude", + "timezone" + ] +} - removed
Input schema / dependentRequiredRemoved value: -{ - "latitude": [ - "longitude", - "timezone" - ], - "longitude": [ - "latitude", - "timezone" - ] -} - changed
Output schema / properties / authorityNotice / descriptionPrevious value: -"Mandatory theological transparency notice"New value: +"Mandatory theological transparency notice; detailed provenance is at top level" - removed
Output schema / properties / authorityNotice / properties / calculationDetailsRemoved value: -{ - "additionalProperties": false, - "properties": { - "appliedMinuteAdjustments": { - "additionalProperties": { - "type": "number" - }, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "calendarAlignmentAdjusted": { - "type": "boolean" - }, - "customMinuteAdjustments": { - "additionalProperties": false, - "properties": { - "asr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "dhuhr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "fajr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "isha": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "maghrib": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "sunrise": { - "maximum": 60, - "minimum": -60, - "type": "integer" - } - }, - "type": "object" - }, - "expectedTimezone": { - "description": "Timezone from city registry or approximate coordinate lookup", - "type": "string" - }, - "fallbackLocationUsed": { - "type": "boolean" - }, - "highLatitudeRuleSource": { - "enum": [ - "stored_preference", - "geographic_default" - ], - "type": "string" - }, - "locationBasis": { - "enum": [ - "explicit_coordinates", - "explicit_city", - "stored_fixed_coordinates", - "stored_fixed_city", - "host_coordinates", - "host_city", - "network_geolocation", - "default_location" - ], - "type": "string" - }, - "locationIsApproximate": { - "type": "boolean" - }, - "madhabSource": { - "enum": [ - "explicit_override", - "stored_preference", - "geographic_default" - ], - "type": "string" - }, - "methodMinuteAdjustments": { - "additionalProperties": false, - "properties": { - "asr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "dhuhr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "fajr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "isha": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "maghrib": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "sunrise": { - "maximum": 60, - "minimum": -60, - "type": "integer" - } - }, - "type": "object" - }, - "methodSource": { - "enum": [ - "explicit_override", - "stored_preference", - "geographic_default" - ], - "type": "string" - }, - "regionalMinuteAdjustments": { - "additionalProperties": false, - "properties": { - "asr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "dhuhr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "fajr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "isha": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "maghrib": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "sunrise": { - "maximum": 60, - "minimum": -60, - "type": "integer" - } - }, - "type": "object" - }, - "timezoneSource": { - "description": "Source of the validated timezone or disclosed ocean/pole choice", - "enum": [ - "explicit_override", - "stored_preference", - "city_default", - "host_header" - ], - "type": "string" - }, - "timezoneValidation": { - "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", - "enum": [ - "coordinate_lookup", - "nearby_boundary", - "city_registry", - "polar_choice", - "ocean_choice" - ], - "type": "string" - } - }, - "type": "object" -} - removed
Output schema / properties / authorityNotice / properties / highLatitudeAdjustmentRemoved value: -{ - "additionalProperties": false, - "properties": { - "adjustedPrayers": { - "items": { - "enum": [ - "Fajr", - "Sunrise", - "Dhuhr", - "Asr", - "Maghrib", - "Isha" - ], - "type": "string" - }, - "type": "array" - }, - "applied": { - "type": "boolean" - }, - "astronomicalLatitudeClamped": { - "type": "boolean" - }, - "effectiveLatitude": { - "anyOf": [ - { - "const": 48, - "type": "number" - }, - { - "const": -48, - "type": "number" - } - ], - "description": "Substitute latitude only; never the user coordinate" - }, - "explanation": { - "type": "string" - }, - "methodSpecificTwilightRule": { - "const": "MoonsightingCommittee", - "type": "string" - }, - "rule": { - "enum": [ - "MiddleOfTheNight", - "SeventhOfTheNight", - "TwilightAngle" - ], - "type": "string" - } - }, - "required": [ - "applied", - "rule", - "astronomicalLatitudeClamped", - "adjustedPrayers", - "explanation" - ], - "type": "object" -} - changed
Output schema / properties / calculationDetails / properties / timezoneValidation / descriptionPrevious value: -"Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure"New value: +"Validation basis; ocean locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure" - removed
Output schema / properties / nextPrayerCalculation / properties / authorityNotice / properties / calculationDetailsRemoved value: -{ - "additionalProperties": false, - "properties": { - "appliedMinuteAdjustments": { - "additionalProperties": { - "type": "number" - }, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "calendarAlignmentAdjusted": { - "type": "boolean" - }, - "customMinuteAdjustments": { - "additionalProperties": false, - "properties": { - "asr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "dhuhr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "fajr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "isha": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "maghrib": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "sunrise": { - "maximum": 60, - "minimum": -60, - "type": "integer" - } - }, - "type": "object" - }, - "expectedTimezone": { - "description": "Timezone from city registry or approximate coordinate lookup", - "type": "string" - }, - "fallbackLocationUsed": { - "type": "boolean" - }, - "highLatitudeRuleSource": { - "enum": [ - "stored_preference", - "geographic_default" - ], - "type": "string" - }, - "locationBasis": { - "enum": [ - "explicit_coordinates", - "explicit_city", - "stored_fixed_coordinates", - "stored_fixed_city", - "host_coordinates", - "host_city", - "network_geolocation", - "default_location" - ], - "type": "string" - }, - "locationIsApproximate": { - "type": "boolean" - }, - "madhabSource": { - "enum": [ - "explicit_override", - "stored_preference", - "geographic_default" - ], - "type": "string" - }, - "methodMinuteAdjustments": { - "additionalProperties": false, - "properties": { - "asr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "dhuhr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "fajr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "isha": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "maghrib": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "sunrise": { - "maximum": 60, - "minimum": -60, - "type": "integer" - } - }, - "type": "object" - }, - "methodSource": { - "enum": [ - "explicit_override", - "stored_preference", - "geographic_default" - ], - "type": "string" - }, - "regionalMinuteAdjustments": { - "additionalProperties": false, - "properties": { - "asr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "dhuhr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "fajr": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "isha": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "maghrib": { - "maximum": 60, - "minimum": -60, - "type": "integer" - }, - "sunrise": { - "maximum": 60, - "minimum": -60, - "type": "integer" - } - }, - "type": "object" - }, - "timezoneSource": { - "description": "Source of the validated timezone or disclosed ocean/pole choice", - "enum": [ - "explicit_override", - "stored_preference", - "city_default", - "host_header" - ], - "type": "string" - }, - "timezoneValidation": { - "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", - "enum": [ - "coordinate_lookup", - "nearby_boundary", - "city_registry", - "polar_choice", - "ocean_choice" - ], - "type": "string" - } - }, - "type": "object" -} - removed
Output schema / properties / nextPrayerCalculation / properties / authorityNotice / properties / highLatitudeAdjustmentRemoved value: -{ - "additionalProperties": false, - "properties": { - "adjustedPrayers": { - "items": { - "enum": [ - "Fajr", - "Sunrise", - "Dhuhr", - "Asr", - "Maghrib", - "Isha" - ], - "type": "string" - }, - "type": "array" - }, - "applied": { - "type": "boolean" - }, - "astronomicalLatitudeClamped": { - "type": "boolean" - }, - "effectiveLatitude": { - "anyOf": [ - { - "const": 48, - "type": "number" - }, - { - "const": -48, - "type": "number" - } - ], - "description": "Substitute latitude only; never the user coordinate" - }, - "explanation": { - "type": "string" - }, - "methodSpecificTwilightRule": { - "const": "MoonsightingCommittee", - "type": "string" - }, - "rule": { - "enum": [ - "MiddleOfTheNight", - "SeventhOfTheNight", - "TwilightAngle" - ], - "type": "string" - } - }, - "required": [ - "applied", - "rule", - "astronomicalLatitudeClamped", - "adjustedPrayers", - "explanation" - ], - "type": "object" -} - changed
Output schema / properties / nextPrayerCalculation / properties / calculationDetails / properties / timezoneValidation / descriptionPrevious value: -"Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure"New value: +"Validation basis; ocean locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure" - added
Output schema / properties / nextPrayerCalculation / properties / usesCurrentCalculationAdded value: +{ + "description": "If true, this next event uses the top-level calculationDetails, highLatitudeAdjustment and authorityNotice; duplicate fields are omitted. Otherwise its own distinct metadata is included.", + "type": "boolean" +} - changed
Output schema / properties / nextPrayerCalculation / requiredPrevious value: -[ - "localDate" -]New value: +[ + "localDate", + "usesCurrentCalculation" +] - changed
Output schema / requiredPrevious value: -[ - "reminderDue", - "localDate", - "nextPrayer", - "nextPrayerAtUtc", - "timezone", - "calculationMethod", - "madhab" -]New value: +[ + "reminderDue", + "localDate", + "nextPrayer", + "nextPrayerAtUtc", + "timezone", + "calculationMethod", + "madhab", + "authorityNotice" +]
- Changed
get_today_prayer_times4 fields changed- added
Input schema / dependenciesAdded value: +{ + "latitude": [ + "longitude", + "timezone" + ], + "longitude": [ + "latitude", + "timezone" + ] +} - removed
Input schema / dependentRequiredRemoved value: -{ - "latitude": [ - "longitude", - "timezone" - ], - "longitude": [ - "latitude", - "timezone" - ] -} - changed
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneValidation / descriptionPrevious value: -"Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure"New value: +"Validation basis; ocean locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure" - changed
Output schema / properties / calculationDetails / properties / timezoneValidation / descriptionPrevious value: -"Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure"New value: +"Validation basis; ocean locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure"
5 tool updates
- Changed
configure_prayer_preferences3 fields changed- changed
Input schema / properties / exactWindowMinutes / descriptionPrevious value: -"Duration in minutes for exact_window mode"New value: +"Duration in minutes for exact_window mode. Omitted updates preserve the saved value; if unset, the service default is 20 minutes unless the operator overrides it." - changed
Input schema / properties / locationMode / descriptionPrevious value: -"Location strategy: auto_travel or fixed"New value: +"Location strategy: fixed uses saved location; auto_travel requires the caller to supply current city or coordinates/timezone on each query and never uses IP geolocation." - added
Input schema / properties / userId / patternAdded value: +"\\S"
- Changed
get_next_prayer10 fields changed- added
Input schema / allOfAdded value: +[ + { + "not": { + "required": [ + "city", + "latitude" + ] + } + }, + { + "not": { + "required": [ + "city", + "longitude" + ] + } + } +] - added
Input schema / dependentRequiredAdded value: +{ + "latitude": [ + "longitude", + "timezone" + ], + "longitude": [ + "latitude", + "timezone" + ] +} - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone; required in the same request when latitude/longitude are supplied. Explicit overrides select the display timezone."New value: +"IANA timezone; required in the same request when latitude/longitude are supplied. Must agree with the city or be compatible with the coordinate timezone lookup." - added
Input schema / properties / userId / patternAdded value: +"\\S" - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +} - added
Output schema / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +}
- Changed
get_prayer_preferences1 field changed- added
Input schema / properties / userId / patternAdded value: +"\\S"
- Changed
get_prayer_status16 fields changed- added
Input schema / allOfAdded value: +[ + { + "not": { + "required": [ + "city", + "latitude" + ] + } + }, + { + "not": { + "required": [ + "city", + "longitude" + ] + } + } +] - added
Input schema / dependentRequiredAdded value: +{ + "latitude": [ + "longitude", + "timezone" + ], + "longitude": [ + "latitude", + "timezone" + ] +} - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone; required in the same request when latitude/longitude are supplied. Explicit overrides select the display timezone."New value: +"IANA timezone; required in the same request when latitude/longitude are supplied. Must agree with the city or be compatible with the coordinate timezone lookup." - added
Input schema / properties / userId / patternAdded value: +"\\S" - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +} - added
Output schema / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +} - added
Output schema / properties / nextPrayerCalculation / properties / authorityNotice / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / nextPrayerCalculation / properties / authorityNotice / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / nextPrayerCalculation / properties / authorityNotice / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +} - added
Output schema / properties / nextPrayerCalculation / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / nextPrayerCalculation / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / nextPrayerCalculation / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +}
- Changed
get_today_prayer_times10 fields changed- added
Input schema / allOfAdded value: +[ + { + "not": { + "required": [ + "city", + "latitude" + ] + } + }, + { + "not": { + "required": [ + "city", + "longitude" + ] + } + } +] - added
Input schema / dependentRequiredAdded value: +{ + "latitude": [ + "longitude", + "timezone" + ], + "longitude": [ + "latitude", + "timezone" + ] +} - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone; required in the same request when latitude/longitude are supplied. Explicit overrides select the display timezone."New value: +"IANA timezone; required in the same request when latitude/longitude are supplied. Must agree with the city or be compatible with the coordinate timezone lookup." - added
Input schema / properties / userId / patternAdded value: +"\\S" - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +} - added
Output schema / properties / calculationDetails / properties / expectedTimezoneAdded value: +{ + "description": "Timezone from city registry or approximate coordinate lookup", + "type": "string" +} - changed
Output schema / properties / calculationDetails / properties / timezoneSource / descriptionPrevious value: -"Source of the display timezone; caller-selected overrides are not geographically validated."New value: +"Source of the validated timezone or disclosed ocean/pole choice" - added
Output schema / properties / calculationDetails / properties / timezoneValidationAdded value: +{ + "description": "Validation basis; ocean and mathematical-pole locations retain caller-selected civil timezone with explicit disclosure", + "enum": [ + "coordinate_lookup", + "nearby_boundary", + "city_registry", + "polar_choice", + "ocean_choice" + ], + "type": "string" +}
5 tool updates
- Changed
configure_prayer_preferences4 fields changed- added
Input schema / properties / clearFixedLocationAdded value: +{ + "description": "Remove stored fixedCity, fixedCoordinates and timezone. Switches to auto_travel unless locationMode is supplied. Cannot combine with a new fixed location/timezone.", + "type": "boolean" +} - changed
Input schema / properties / fixedCity / descriptionPrevious value: -"Predefined city name for fixed location (e.g. Riyadh, London)"New value: +"Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored." - changed
Input schema / properties / userId / descriptionPrevious value: -"Unique user identifier"New value: +"Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved." - added
Input schema / properties / userId / maxLengthAdded value: +256
- Changed
get_next_prayer6 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"Supported predefined city. Supply city or coordinates with an IANA timezone; connector/IP geolocation is never used."New value: +"Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored." - changed
Input schema / properties / timezone / descriptionPrevious value: -"Optional IANA timezone override"New value: +"IANA timezone; required in the same request when latitude/longitude are supplied. Explicit overrides select the display timezone." - changed
Input schema / properties / userId / descriptionPrevious value: -"Optional unique user identifier to load stored preferences. If omitted, pure geographic auto-resolution is applied."New value: +"Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved." - added
Input schema / properties / userId / maxLengthAdded value: +256 - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +} - added
Output schema / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +}
- Changed
get_prayer_preferences2 fields changed- changed
Input schema / properties / userId / descriptionPrevious value: -"Unique user identifier"New value: +"Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved." - added
Input schema / properties / userId / maxLengthAdded value: +256
- Changed
get_prayer_status10 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"Supported predefined city. Supply city or coordinates with an IANA timezone; connector/IP geolocation is never used."New value: +"Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored." - changed
Input schema / properties / timezone / descriptionPrevious value: -"Optional IANA timezone override (e.g. Asia/Riyadh)"New value: +"IANA timezone; required in the same request when latitude/longitude are supplied. Explicit overrides select the display timezone." - changed
Input schema / properties / userId / descriptionPrevious value: -"Optional unique user identifier to load stored preferences. If omitted, pure geographic auto-resolution is applied."New value: +"Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved." - added
Input schema / properties / userId / maxLengthAdded value: +256 - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +} - added
Output schema / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +} - added
Output schema / properties / nextPrayerCalculation / properties / authorityNotice / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +} - added
Output schema / properties / nextPrayerCalculation / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +} - added
Output schema / properties / prayerWindowExpiresAtUtcAdded value: +{ + "description": "End of the active prayer period; same boundary as legacy expiresAtUtc", + "type": "string" +} - added
Output schema / properties / reminderWindowExpiresAtUtcAdded value: +{ + "description": "Reminder eligibility end; exact_window is capped by the prayer period boundary. Fields appear when a reminder is emitted.", + "type": "string" +}
- Changed
get_today_prayer_times7 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"Supported predefined city. Supply city or coordinates with an IANA timezone; connector/IP geolocation is never used."New value: +"Supported cities: makkah, madinah, riyadh, cairo, gaza, jerusalem, alquds, ramallah, hebron, nablus, rafah, khanyunis, dubai, abudhabi, kuwait, doha, amman, istanbul, london, paris, newyork, toronto, jakarta, singapore, karachi, kualalumpur, tehran, sydney, tromso. Aliases: gazacity, nyc, kuwaitcity. Case, spaces and punctuation are ignored." - added
Input schema / properties / date / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - changed
Input schema / properties / timezone / descriptionPrevious value: -"Optional IANA timezone override"New value: +"IANA timezone; required in the same request when latitude/longitude are supplied. Explicit overrides select the display timezone." - changed
Input schema / properties / userId / descriptionPrevious value: -"Optional unique user identifier to load stored preferences. If omitted, pure geographic auto-resolution is applied."New value: +"Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved." - added
Input schema / properties / userId / maxLengthAdded value: +256 - added
Output schema / properties / authorityNotice / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +} - added
Output schema / properties / calculationDetails / properties / timezoneSourceAdded value: +{ + "description": "Source of the display timezone; caller-selected overrides are not geographically validated.", + "enum": [ + "explicit_override", + "stored_preference", + "city_default", + "host_header" + ], + "type": "string" +}
5 tool updates
- Changed
configure_prayer_preferences3 fields changed- added
Output schema / properties / preferences / properties / fixedCityConfiguredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / preferences / properties / fixedCoordinatesConfiguredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / preferences / requiredAdded value: +[ + "fixedCoordinatesConfigured", + "fixedCityConfigured" +]
- Changed
get_next_prayer5 fields changed- added
Input schema / properties / cityAdded value: +{ + "description": "Supported predefined city. Supply city or coordinates with an IANA timezone; connector/IP geolocation is never used.", + "type": "string" +} - added
Output schema / properties / authorityNotice / properties / calculationDetailsAdded value: +{ + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Output schema / properties / authorityNotice / properties / highLatitudeAdjustmentAdded value: +{ + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" +} - added
Output schema / properties / calculationDetailsAdded value: +{ + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Output schema / properties / highLatitudeAdjustmentAdded value: +{ + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" +}
- Changed
get_prayer_preferences3 fields changed- added
Output schema / properties / fixedCityConfiguredAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / fixedCoordinatesConfiguredAdded value: +{ + "type": "boolean" +} - added
Output schema / requiredAdded value: +[ + "fixedCoordinatesConfigured", + "fixedCityConfigured" +]
- Changed
get_prayer_status6 fields changed- added
Input schema / properties / cityAdded value: +{ + "description": "Supported predefined city. Supply city or coordinates with an IANA timezone; connector/IP geolocation is never used.", + "type": "string" +} - added
Output schema / properties / authorityNotice / properties / calculationDetailsAdded value: +{ + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Output schema / properties / authorityNotice / properties / highLatitudeAdjustmentAdded value: +{ + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" +} - added
Output schema / properties / calculationDetailsAdded value: +{ + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Output schema / properties / highLatitudeAdjustmentAdded value: +{ + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" +} - added
Output schema / properties / nextPrayerCalculationAdded value: +{ + "additionalProperties": false, + "description": "Adjustment disclosure for the actual schedule of the next event, including tomorrow", + "properties": { + "authorityNotice": { + "additionalProperties": false, + "properties": { + "authorityDescription": { + "description": "Full descriptive name of the calculation authority", + "type": "string" + }, + "calculationDetails": { + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "highLatitudeAdjustment": { + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" + }, + "madhab": { + "description": "The Asr jurisprudence school", + "enum": [ + "Shafi", + "Hanafi" + ], + "type": "string" + }, + "method": { + "description": "The calculation authority method", + "enum": [ + "UmmAlQura", + "MuslimWorldLeague", + "Egyptian", + "Karachi", + "NorthAmerica", + "Dubai", + "Qatar", + "Kuwait", + "MoonsightingCommittee", + "Singapore", + "Turkey", + "Tehran" + ], + "type": "string" + }, + "requiredDisplayInstruction": { + "description": "Mandatory theological notice for AI presentation", + "type": "string" + }, + "selectionReason": { + "description": "Rationale for selecting this authority", + "type": "string" + } + }, + "required": [ + "method", + "madhab", + "authorityDescription", + "selectionReason", + "requiredDisplayInstruction" + ], + "type": "object" + }, + "calculationDetails": { + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "highLatitudeAdjustment": { + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" + }, + "localDate": { + "type": "string" + } + }, + "required": [ + "localDate" + ], + "type": "object" +}
- Changed
get_today_prayer_times5 fields changed- added
Input schema / properties / cityAdded value: +{ + "description": "Supported predefined city. Supply city or coordinates with an IANA timezone; connector/IP geolocation is never used.", + "type": "string" +} - added
Output schema / properties / authorityNotice / properties / calculationDetailsAdded value: +{ + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Output schema / properties / authorityNotice / properties / highLatitudeAdjustmentAdded value: +{ + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" +} - added
Output schema / properties / calculationDetailsAdded value: +{ + "additionalProperties": false, + "properties": { + "appliedMinuteAdjustments": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "calendarAlignmentAdjusted": { + "type": "boolean" + }, + "customMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "fallbackLocationUsed": { + "type": "boolean" + }, + "highLatitudeRuleSource": { + "enum": [ + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "locationBasis": { + "enum": [ + "explicit_coordinates", + "explicit_city", + "stored_fixed_coordinates", + "stored_fixed_city", + "host_coordinates", + "host_city", + "network_geolocation", + "default_location" + ], + "type": "string" + }, + "locationIsApproximate": { + "type": "boolean" + }, + "madhabSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "methodMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + }, + "methodSource": { + "enum": [ + "explicit_override", + "stored_preference", + "geographic_default" + ], + "type": "string" + }, + "regionalMinuteAdjustments": { + "additionalProperties": false, + "properties": { + "asr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "dhuhr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "fajr": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "isha": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "maghrib": { + "maximum": 60, + "minimum": -60, + "type": "integer" + }, + "sunrise": { + "maximum": 60, + "minimum": -60, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Output schema / properties / highLatitudeAdjustmentAdded value: +{ + "additionalProperties": false, + "properties": { + "adjustedPrayers": { + "items": { + "enum": [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Maghrib", + "Isha" + ], + "type": "string" + }, + "type": "array" + }, + "applied": { + "type": "boolean" + }, + "astronomicalLatitudeClamped": { + "type": "boolean" + }, + "effectiveLatitude": { + "anyOf": [ + { + "const": 48, + "type": "number" + }, + { + "const": -48, + "type": "number" + } + ], + "description": "Substitute latitude only; never the user coordinate" + }, + "explanation": { + "type": "string" + }, + "methodSpecificTwilightRule": { + "const": "MoonsightingCommittee", + "type": "string" + }, + "rule": { + "enum": [ + "MiddleOfTheNight", + "SeventhOfTheNight", + "TwilightAngle" + ], + "type": "string" + } + }, + "required": [ + "applied", + "rule", + "astronomicalLatitudeClamped", + "adjustedPrayers", + "explanation" + ], + "type": "object" +}
5 tool updates
- Changed
configure_prayer_preferences2 fields changed- removed
Output schema / properties / preferences / properties / fixedCoordinatesRemoved value: -{ - "additionalProperties": false, - "properties": { - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" -} - removed
Output schema / properties / preferences / properties / userIdRemoved value: -{ - "type": "string" -}
- Changed
get_next_prayer1 field changed- added
Input schema / properties / userId / minLengthAdded value: +1
- Changed
get_prayer_preferences2 fields changed- removed
Output schema / properties / fixedCoordinatesRemoved value: -{ - "additionalProperties": false, - "properties": { - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" -} - removed
Output schema / properties / userIdRemoved value: -{ - "type": "string" -}
- Changed
get_prayer_status1 field changed- added
Input schema / properties / userId / minLengthAdded value: +1
- Changed
get_today_prayer_times2 fields changed- removed
Input schema / properties / date / patternRemoved value: -"^\\d{4}-\\d{2}-\\d{2}$" - added
Input schema / properties / userId / minLengthAdded value: +1
3 tool updates
- Changed
get_next_prayer1 field changed- added
Input schema / properties / userIdAdded value: +{ + "description": "Optional unique user identifier to load stored preferences. If omitted, pure geographic auto-resolution is applied.", + "type": "string" +}
- Changed
get_prayer_status1 field changed- added
Input schema / properties / userIdAdded value: +{ + "description": "Optional unique user identifier to load stored preferences. If omitted, pure geographic auto-resolution is applied.", + "type": "string" +}
- Changed
get_today_prayer_times1 field changed- added
Input schema / properties / userIdAdded value: +{ + "description": "Optional unique user identifier to load stored preferences. If omitted, pure geographic auto-resolution is applied.", + "type": "string" +}
3 tool updates
- Changed
get_next_prayer3 fields changed- removed
Input schema / properties / userIdRemoved value: -{ - "description": "Unique user or device ID", - "type": "string" -} - removed
Output schema / properties / locationSourceRemoved value: -{ - "description": "Source of location resolution", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "currentLocalDate", - "timezone", - "nextPrayer", - "nextPrayerAtUtc", - "nextPrayerLocalTime", - "remainingMinutes", - "calculationMethod", - "madhab", - "locationSource" -]New value: +[ + "currentLocalDate", + "timezone", + "nextPrayer", + "nextPrayerAtUtc", + "nextPrayerLocalTime", + "remainingMinutes", + "calculationMethod", + "madhab" +]
- Changed
get_prayer_status4 fields changed- removed
Input schema / properties / userIdRemoved value: -{ - "description": "Unique user or device ID for preference and deduplication tracking", - "type": "string" -} - removed
Output schema / properties / dedupeKeyRemoved value: -{ - "description": "Deduplication cache key", - "type": "string" -} - removed
Output schema / properties / locationSourceRemoved value: -{ - "description": "Source of location resolution", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "reminderDue", - "localDate", - "nextPrayer", - "nextPrayerAtUtc", - "timezone", - "calculationMethod", - "madhab", - "locationSource" -]New value: +[ + "reminderDue", + "localDate", + "nextPrayer", + "nextPrayerAtUtc", + "timezone", + "calculationMethod", + "madhab" +]
- Changed
get_today_prayer_times3 fields changed- removed
Input schema / properties / userIdRemoved value: -{ - "description": "Unique user or device ID", - "type": "string" -} - removed
Output schema / properties / coordinatesRemoved value: -{ - "additionalProperties": false, - "properties": { - "latitude": { - "description": "Latitude in degrees", - "type": "number" - }, - "longitude": { - "description": "Longitude in degrees", - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "localDate", - "timezone", - "coordinates", - "calculationMethod", - "madhab", - "timesUtc", - "timesLocal" -]New value: +[ + "localDate", + "timezone", + "calculationMethod", + "madhab", + "timesUtc", + "timesLocal" +]
5 tool updates
- Changed
configure_prayer_preferences3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / fixedCoordinates / additionalPropertiesRemoved value: -false - removed
Input schema / properties / minuteAdjustments / additionalPropertiesRemoved value: -false
- Changed
get_next_prayer3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / remainingMinutes / maximumAdded value: +9007199254740991 - added
Output schema / properties / remainingMinutes / minimumAdded value: +-9007199254740991
- Changed
get_prayer_preferences1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_prayer_status1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_today_prayer_times1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
5 tool updates
- 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
Related MCP Connectors
Islamic prayer times & calendar MCP (Aladhan API). Keyless.
Curated Islamic MCP: Quran (Arabic + Pickthall), 440 du'as, 99 Names, crisis-aware.
Prayer times, Qibla, Hijri calendar, 99 Names, Quran audio, Bangladesh offsets. English + Bengali.
Islamic prayer times for any city, today or the whole month, from official timetables or calculated.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides offline astronomical computations for planet and moon positions, rise/set times, phases, eclipses, and seasons via MCP.225 npm5Apache 2.0
- FlicenseAqualityAmaintenanceVedaksha MCP Server Astronomical ephemeris and Vedic astrology computation for AI agents via the Model Context Protocol.174-
- AlicenseNot gradedqualityCmaintenanceA self-contained MCP server that gives AI agents the ability to calculate high-precision astronomical data. It provides tropical zodiac coordinates, planetary speeds, retrograde detection, and house cusps using the trusted Swiss Ephemeris engine. 100%4AGPL 3.0
- FlicenseAqualityCmaintenanceProvides local, deterministic Chinese and Western divination chart calculations with traceable, evidence-grounded interpretation through MCP tools.9-
Glama MCP Gateway
Add one secure layer between your agents and this server.