Skip to main content
Glama
Muslim Prayer Reminder MCP

Muslim Prayer Reminder MCP

Get Upcoming Prayer and Countdown

get_next_prayer
Read-onlyIdempotent

Returns the next prayer's name, scheduled time, calculation method, and minutes remaining so users know when to pray and which authority applies.

Instructions

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).

Input Schema

NameRequiredDescriptionDefault
cityNoSupported 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.
madhabNoOptional Asr shadow jurisprudence override (Shafi or Hanafi)
userIdNoNonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved.
latitudeNoOptional explicit latitude override
timezoneNoIANA timezone; required in the same request when latitude/longitude are supplied. Must agree with the city or be compatible with the coordinate timezone lookup.
longitudeNoOptional explicit longitude override
calculationMethodNoOptional calculation authority override (auto-resolved from location by default)

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv1.1.3
    • addedInput schema / allOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "city",
      +        "latitude"
      +      ]
      +    }
      +  },
      +  {
      +    "not": {
      +      "required": [
      +        "city",
      +        "longitude"
      +      ]
      +    }
      +  }
      +]
    • addedInput schema / dependencies
      Added value: +{
      +  "latitude": [
      +    "longitude",
      +    "timezone"
      +  ],
      +  "longitude": [
      +    "latitude",
      +    "timezone"
      +  ]
      +}
    • addedInput schema / properties / city
      Added value: +{
      +  "description": "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.",
      +  "type": "string"
      +}
    • changedInput schema / properties / timezone / description
      Previous value: -"Optional IANA timezone override"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."
    • changedInput schema / properties / userId / description
      Previous value: -"Unique user or device ID"New value: +"Nonblank user identifier; at most 256 UTF-8 bytes and 256 characters. Whitespace in nonblank identifiers is preserved."
    • addedInput schema / properties / userId / maxLength
      Added value: +256
    • addedInput schema / properties / userId / minLength
      Added value: +1
    • addedInput schema / properties / userId / pattern
      Added value: +"\\S"
    • addedOutput schema / properties / authorityNotice / properties / calculationDetails
      Added 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 locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure",
      +      "enum": [
      +        "coordinate_lookup",
      +        "nearby_boundary",
      +        "city_registry",
      +        "polar_choice",
      +        "ocean_choice"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / authorityNotice / properties / highLatitudeAdjustment
      Added 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"
      +}
    • addedOutput schema / properties / calculationDetails
      Added 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 locations require the matching nautical timezone or an adjacent coastal civil timezone; mathematical poles allow an explicit civil timezone with disclosure",
      +      "enum": [
      +        "coordinate_lookup",
      +        "nearby_boundary",
      +        "city_registry",
      +        "polar_choice",
      +        "ocean_choice"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / highLatitudeAdjustment
      Added 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"
      +}
    • removedOutput schema / properties / locationSource
      Removed value: -{
      -  "description": "Source of location resolution",
      -  "type": "string"
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "currentLocalDate",
      -  "timezone",
      -  "nextPrayer",
      -  "nextPrayerAtUtc",
      -  "nextPrayerLocalTime",
      -  "remainingMinutes",
      -  "calculationMethod",
      -  "madhab",
      -  "locationSource"
      -]New value: +[
      +  "currentLocalDate",
      +  "timezone",
      +  "nextPrayer",
      +  "nextPrayerAtUtc",
      +  "nextPrayerLocalTime",
      +  "remainingMinutes",
      +  "calculationMethod",
      +  "madhab"
      +]
  2. First observedv1.0.1

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.