Prayer times differ by calculation convention, and communities do not agree — a server that hardcodes one is wrong for most people. Offering all seven and naming which one produced a result is the correct behaviour. The moon-visibility endpoint is the unusual extra: Yallop scoring with a readable verdict is what you want when the question is whether the crescent will actually be seen, not merely when it rises.
A FastAPI service exposed over MCP that computes Islamic prayer times using the islamic_times library. Beyond the five prayers it returns sunrise, sunset and midnight, the qiblah bearing and distance, detailed sun and moon positions, and new-moon visibility scored by Yallop's criterion.
- `/prayer_times` — fajr, sunrise, zuhr, asr, sunset, maghrib, isha and midnight for a latitude, longitude and method, returned as timezone-aware timestamps
- Seven calculation methods to choose between: ISNA, MWL, UMM_AL_QURA, EGYPTIAN, KARACHI, TEHRAN and JAFARI
- `/qiblah` — direction and distance to the Kaaba, given as a compass point, decimal angle, degrees-minutes-seconds, and distance in both km and miles
- `/sun` — sunrise, transit, sunset plus apparent altitude, azimuth, declination, right ascension and hour angles
- `/moon` — moonrise, transit, moonset, illumination percentage, altitude, azimuth and distance
- `/moon/visibility` — new-moon visibility over a number of days, each entry scored with a value and a plain-language verdict such as easily visible or below the Danjon limit
No account and no key — the calculations are local. Python with uv: `pip install uv` then `uv install`, and run with `uv run run.py`. The API listens on `http://localhost:8000` and the port is configurable through the `UVV_PORT` environment variable. Claude Desktop reaches it through `mcp-proxy` with `SSE_URL` pointed at `http://localhost:8000/mcp`. The project is `salaah-mcp` (0.1.0 in pyproject) and builds on FastAPI, FastAPI MCP, Pydantic and islamic_times.
