MCP server for prayer times (JAKIM/global), nearest mosque finder, and Islamic calendar events
Server has 5 tools with clear verb-noun naming (get_*, find_*, check_*). All tools have descriptions (avg ~150 chars, within baseline 34-392 range). Input schemas are present with type definitions. However, parameter descriptions are sparse or missing entirely, most params lack actionable guidance on format/constraints. Output schemas are not documented. Error handling is minimal; no recovery guidance or actionable error messages visible. Tool descriptions are good but could better explain WHEN to use each tool vs alternatives. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all being read-only operations.
Performs health checks on all external APIs used by the server. Returns connectivity status for WaktuSolat, Aladhan, OpenStreetMap, and PyPI.
Locates the nearest mosques to a given location using OpenStreetMap data. Returns up to 15 mosques with distance, coordinates, and optional contact details.
Returns the current server UTC time. Use this tool first when the user asks about current prayer status, time remaining to next prayer, or any query that requires comparing current time against prayer times. For the Hijri date, use get_monthly_prayer_times or get_yearly_islamic_events instead, since the Hijri calendar is region-dependent (moonsighting-based) and those tools return the authoritative date sourced from JAKIM/Aladhan.
Fetches comprehensive monthly prayer times based on raw GPS coordinates or location name string text. Computes precise Dhuha intervals (+28 mins from Syuruk) and normalizes Hijri month texts. Use this tool whenever the user asks for today's prayer times, this week's schedule, or a specific month's prayer schedule.
Fetches Islamic calendar events (Hijri holidays, observances) for a given year. Includes Ramadhan start/end, Eid dates, and other significant Islamic dates.
Parameter descriptions missing or minimal. 'location_name', 'latitude', 'longitude', 'month', 'year' lack format guidance (e.g., 'Latitude must be -90 to 90', 'Month 1-12'). LLMs cannot infer constraints from names alone.
Output schemas not documented. Tools return complex objects (prayer times with Hijri dates, mosque coordinates, event lists) but no schema is visible in code or docstrings. LLMs cannot plan downstream calls without knowing response structure.
No tool annotations despite all tools being read-only. FastMCP supports readOnlyHint, should be applied to all 5 tools to signal safety to agents.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Error handling is silent. Code catches exceptions (e.g., 'Geocoding failed for...') and logs them, but tool responses do not include actionable error messages. LLMs receive no guidance on retry vs fallback.
Parameter 'location_name' accepts free-form strings but no enum or validation shown. Tool description mentions 'location name string (e.g., Kuala Lumpur, London)', examples in descriptions invite literal reuse by LLMs.