The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the HadithDB listing page.
HadithDB (Hadith Unlocked) is a website for reading, searching, and citing the Quran and ḥadīth. You can browse it online at https://hadithunlocked.com.
Every record keeps the original Arabic text alongside an English translation where one is available, together with chapter listings and grading information. For ḥadīth, the chain of narrators (isnād) and the report itself (matn) are stored separately so each can be read and searched on its own.
HadithDB exposes a read-only, stateless Streamable HTTP MCP transport at
POST /mcp. After this version is deployed, the public endpoint will be
https://hadithunlocked.com/mcp. It provides Quran and tafsir lookup/search,
hadith search, and full hadith-detail lookup tools.
Text fields are returned in full. Arabic and English are exposed separately
when the underlying record provides both languages; unavailable language fields
are returned as null rather than synthesized or omitted.
Quran ayat, Quran search results, hadith search results, and hadith-detail
records expose bilingual, text, text_arabic, text_english, and
truncated. Hadith-detail sharh entries retain their existing text and
text_en source fields and additionally expose the same language-explicit
fields, with their combined value in text_combined.
The endpoint accepts JSON-RPC 2.0 requests for initialize, ping,
tools/list, and tools/call. It does not create sessions, so clients should
not expect an Mcp-Session-Id response header. Browser preflight requests are
supported with OPTIONS /mcp; other HTTP methods return 405.
The endpoint has a 64 KiB request limit and a per-IP rate limit. Override the
defaults with MCP_RATE_LIMIT_WINDOW_MS and MCP_RATE_LIMIT_PER_IP. Internal
tool requests use the current request host by default; staging deployments can
override the backing sites with HADITHDB_MCP_HADITH_BASE_URL and
HADITHDB_MCP_QURAN_BASE_URL.
Recent work has improved the reading, browsing, and search experience across the site:
book:number citations, and JSON, TSV, EPUB, or Markdown output where available.Read the Quran as a book, explore it as a study text, and hear it as a continuous recitation—all in one place. Quran Unlocked combines a responsive 15-line Mushaf with word-level learning, passage structure, trusted translations and tafsīr, personalized audio, and tools for saving and sharing what matters.
Open the Mushaf and begin where you left off. Tap a word for its meaning, select an ayah to read its translation, or let the recitation carry you seamlessly across pages. Switch to Practice to test recall against the same 15-line page layout, or move instantly to a focused ayah or structured passage without losing your place.
/quran/page resumes at the bookmarked Mushaf page, or page 1 when no page bookmark exists.?memorize, such as /quran/page/1?memorize, select Practice from the Quran reading-mode controls, or use the Practice item after Tafsir in the Quran menu.Memorization identity is the surah and ayah reference, not a Mushaf page. Page numbers remain useful for navigation, but every ayah has its own lifecycle, schedule, and append-only review history. Untouched ayat behave as Later without creating 6,236 rows for every user.
The six visible memorization states use the same recall language as the review grades. Automatic recovery is stored internally but presented inside Hard:
| State | Meaning |
|---|---|
| Later | Memorization has not started, or the ayah was removed from active memorization |
| Learning | Memorization has started but the complete ayah is not yet independently recitable |
| Hard | The ayah is memorized but recall is fragile, so it remains scheduled with shorter review intervals; automatic recovery after a failed Good review is included here |
| Good | The complete ayah can be recalled independently and remains under spaced review |
| Easy | The ayah is known by heart, considered memorized, and not scheduled for regular review |
| Paused | Learning or review is temporarily suspended without deleting its schedule or history |
Select Mudhakkir to open /quran/review, which combines Memorization Progress with the session launcher. Progress reports Due now, Learning, Hard, Good, Easy, Paused, and Later against the canonical 6,236 ayat rather than counting stored rows alone. Due now includes initialized FSRS cards whose scheduled timestamp has arrived. Learning includes both ungraded FSRS New cards and Learning cards with review history, since New is an internal FSRS phase rather than a separate memorization state. Automatic recovery remains internal and is included in the Hard count, filter, color, and page summaries. Hard, Good, and Easy are initialized immediately from the user's stated memory strength. The active-progress table groups Mushaf pages beneath each surah and shows a shared page under every surah it contains; each row counts only that surah's ayat on the page and shows its per-stage totals and Arabic opening words without a translation.
The top of the signed-in Mudhakkir page shows a one-year review activity heatmap, today's reviewed āyāt and elapsed review time, daily average, percentage of days learned, longest streak, and current streak. Scheduler, review, and session timestamps are stored as UTC. Due checks compare UTC instants, while displayed dates, heatmap days, streaks, and the set of āyāt revealed as reviewed today use the current browser's timezone. This keeps late-evening reviews on the user's local day while progress remains consistent across devices.
Signed-out visitors see a concise Quran memorization introduction with a sign-in invitation, a plain-language explanation of how adaptive spaced review keeps Quran hifz fresh, progress-tracking benefits, and a link to explore the Mushaf. Memorization Progress and review-session controls are shown only after authentication.
During a recall attempt, the sticky controls record a result rather than changing a permanent status directly:
Mudhakkir pages after page 1 show the final Arabic line of the preceding Mushaf page in a compact, always-visible continuity strip above the current page. The strip is non-interactive and excluded from concealment, grading, memorization-state controls, and audio selection.
| Result | Scheduling meaning |
|---|---|
| Again | Recall failed; keep Learning or Hard in its current state, move Good into Hard recovery, and allow one retry near the end of this session |
| Hard | Recall succeeded independently with significant hesitation; use a shorter next interval |
| Good | Recall succeeded with ordinary effort; use the normal next interval |
| Easy | Recall was fluent and effortless; use a longer next interval |
| Skip | Advance without changing lifecycle, strength, schedule, or review history |
The help text reserves Again for an attempt that required reading the ayah or receiving its missing continuation; Hard still means the complete ayah was recalled independently. The first Again queues the same āyah once near the end of the session. A second Again records the lapse without another retry, so the same āyah can receive Again at most twice per session and cannot create an unlimited loop.
Regular review sessions are persisted and bounded. They admit eligible Learning, Hard, and Good āyāt, including automatic Hard recovery, allocate the overall limit fairly across nonempty categories, and present Learning first. Fragile Hard āyāt and previously Good āyāt in Hard recovery share one combined Hard cap. Newly enrolled, ungraded Learning cards are immediately included in Due now, but enter each session gradually under the Learning cap. Any one-time Again retries follow the original queue; Easy āyāt are not admitted to regular sessions. An āyah cannot reappear after a grade or Skip unless it entered that retry slot. My Settings → Quran Memorization and the Mudhakkir settings modal configure the maximum total āyāt per session (default 10), optional time budget, and a collapsed Advanced session limits group containing Learning, Hard, and Good caps plus queue order.
The Start Review menu offers a custom Surah Review session. Its autocomplete accepts English names, Arabic names, Arabic or Latin surah numbers, and alternate names. Suggestions use the Quran search result style and show the surah number, English name, Arabic name, and total āyāt.
Practice mode also places a Mudhakkir button beneath each Mushaf page. Its contextual dialog offers Just this page or A surah. Just this page creates a persisted page-review session containing the āyāt on that exact Mushaf page, including pages shared by multiple surahs. A surah opens the same searchable Surah Review workflow without requiring the user to return to Memorization Progress first.
After choosing a surah, the user chooses one of two review types. Regular review uses only that surah's eligible Learning, Hard, and Good āyāt, follows their existing due schedules and regular session limits, and does not enroll or change untouched āyāt. All-āyāt review enrolls every missing or Later āyah in the surah as Learning and adds the complete surah to a persisted Quran-order session. Already-enrolled Learning, Hard, Good, Easy, and Paused āyāt receive no enrollment write: their existing state, schedule, and history are preserved when the session is created, and they are simply added to its queue. The user can review āyah by āyah or passage by passage. Passage review uses the most specific Study range containing the current āyah—an h3 range when available, otherwise its h2 range. The passage is only an āyah batch: the chosen result is recorded as a separate review event for every included āyah, and each āyah receives its own FSRS calculation, state, and next-review schedule.
Page-review and all-āyāt sessions are not constrained by Due now, regular category caps, or the optional time budget. They continue until every included āyah has been graded or skipped. Regular review for a surah uses the normal scheduler and its limits. Again, Hard, Good, and Easy are recorded as real FSRS assessments, so grading an Easy or Paused āyah in an all-āyāt session can return it to scheduled memorization according to the result. Skip advances without changing the āyah's state, schedule, or review history.
The Mushaf review footer can pause a page or surah review session without losing its current āyah or queue position, or end it while preserving completed review history. Memorization Progress lists the active session together with paused sessions. Continuing the active session or switching to a paused session is explicit; switching atomically pauses the current session before resuming the selected one. Any active or paused session can be ended. Ending closes its remaining queue while retaining completed FSRS review history.
FSRS 6 settings are available in My Settings and in a modal on /quran/review:
Difficulty damping, mean reversion, and same-day review smoothing are handled automatically. The simplified controls transform the default or personalized parameter vector and do not expose the underlying mathematical weights.
Mudhakkir deliberately uses one focused ayah workflow rather than separate Individual Ayah and Connected Recitation modes. A grade applies only to the scheduled ayah. The current target, preceding ayat, and ayat already completed during review remain fully visible for Quran context, while future unreviewed ayat stay muted. Mudhakkir sessions and API responses no longer store or return a display mode or fetch separate adjacent-ayah context. Legacy review-mode URL parameters are redirected to the canonical ?review=surah:ayah form.
Mudhakkir initially shows Reveal instead of the recall grades. Selecting Reveal displays the scheduled āyah or Study passage and then exposes Again, Hard, Good, and Easy. Saving a grade and selecting the next persisted review unit happen in one API request, so the interface advances as soon as the transaction commits instead of waiting on a second queue request or an artificial display delay. The footer's Undo action reverses the most recent single-āyah grade atomically, restoring the prior FSRS state, review event, session counters, and queue item even after the next āyah has loaded. Every āyah that precedes the current Mudhakkir target on its Mushaf page is always revealed so the passage remains in Quran order. Āyāt already graded during the current day's review work also remain revealed whenever they are visible on a later Mudhakkir page, even if Start Review created a replacement session; unreviewed āyāt after the current target and Again-retry answers remain concealed until their turn is completed. The active session, current attempt, review history, and revealed-review list are restored from authenticated server data after navigation, reload, or switching devices; memorization state is never managed in browser storage. The icon-only Skip action remains available before and after Reveal and advances immediately without revealing, grading, or permanently revealing the answer.
Scheduling uses FSRS 6 with its 21-parameter model and trainable forgetting-curve decay. The per-user, per-ayah card stores FSRS state, stability, difficulty, scheduled interval, learning-step position, review and lapse counts, the latest grade, and last and next review times. Recall attempts are appended to a separate history table for statistics and parameter optimization; moving an ayah to Later, Easy, or Paused never deletes those events.
Changing Target Memory Goal bulk-reschedules every initialized Learning, Hard, Good, and automatic-recovery card from its existing stability and last review time. The update changes stored review dates and Due now immediately without fabricating grades or review-history entries. Easy, Paused, Later, and ungraded new Learning cards are not rewritten.
Google Analytics records privacy-safe Quran memorization events without account identifiers: quran_review_session_start, quran_review_session_resume, quran_review_item_presented, and quran_review_grade measure review participation and Mushaf pages reviewed. quran_memorization_enroll records successful first-time enrollment conversions with an enrollment_scope of ayah, page, or surah and the number of newly enrolled āyāt. Mark quran_memorization_enroll as a key event in Google Analytics to report it as a conversion.
The quran_script_default event and quran_script_default user property measure unique users by their resolved Quran script preference: uthmani, indo-pak, or warsh. The event is emitted once per page for the resolved default and again only when the preference changes on that page; no account identifier is included.
This is an initial ayah-level FSRS deployment, not an upgrade from an earlier ayah scheduler. Initialize the tables and replace every existing user's Quran memorization settings with the canonical FSRS 6 defaults by running npm run init:quran-fsrs6. The initializer preserves unrelated user settings. Use npm run init:quran-fsrs6 -- --dry-run to preview how many user rows will be updated without creating tables or writing settings.
The memorization tables use case-sensitive ASCII user identifiers and composite indexes for exact ayah lookup, due-review selection, recently reviewed ayat, active sessions, and persisted session queues. Existing installations can preview and apply the schema optimization with:
۞, and Quran metadata such as sajdah markers can be rendered alongside the standard ayah marker./quran/page destination.The site includes the continuous, ayah-synchronized recitations listed below. Each one has a short alias used internally for audio selection and saved preferences.
| Alias | Reciter |
|---|---|
abbad | Fares Abbad |
alili | Aziz Alili |
banna | Mahmoud Ali al-Banna |
dusari | Yasir al-Dusari |
husari | Mahmud Khalil al-Husari |
jalil | Khalid al-Jalil |
juhani | Abdullah Awwad al-Juhani |
minshawi | Muhammed Siddiq al-Minshawi |
qatami | Nasser al-Qatami |
shuraym | Saud al-Shuraym |
sudays | Abd al-Rahman al-Sudays |
yasin | Sahl Yasin |
The site includes the commentary (tafsīr) and translation works listed below. Each one has a short alias used in links and an English title.
| Alias | Name |
|---|---|
ibn-kathir | Tafsir al-Quran al-Azim |
jalalayn | Tafsir al-Jalalayn |
mokhtasar | al-Mukhtasar fi Tafsir al-Quran al-Karim |
muntakhab | al-Muntakhab fi Tafsir al-Quran |
| Alias | Name |
|---|---|
rida | al-Tafsir al-Manar |
tabari | Jami al-Bayan an Tawil Ay al-Quran |
samarqandi | Bahr al-Ulum |
abu-zamanayn | Tafsir al-Quran al-Aziz |
makki | al-Hidayah ila Bulugh al-Nihayah |
mawardi | al-Nukat wa-al-Uyun |
samaani | Tafsir al-Quran |
baghawi | Maalim al-Tanzil fi Tafsir al-Quran |
zamakhshari | al-Kashshaf an Haqaiq Ghawamid al-Tanzil |
ibn-al-jawzi | Zad al-Masir fi Ilm al-Tafsir |
razi | Mafatih al-Ghayb |
qurtubi | al-Jami li-Ahkam al-Quran wa-al-Mubayyin |
baydawi | Anwar al-Tanzil wa-Asrar al-Tawil |
nasafi | Madarik al-Tanzil wa-Haqaiq al-Tawil |
ibn-juzay | al-Tashil li-Ulum al-Tanzil |
abu-hayyan | al-Bahr al-Muhit |
thalabi | al-Kashf wa-al-Bayan an Tafsir al-Quran |
ibn-adil | al-Lubab fi Ulum al-Kitab |
biqaii | Nazm al-Durar fi Tanasub al-Ayat wa-al-Suwar |
iji | Jami al-Bayan fi Tafsir al-Quran |
suyuti-t | al-Durr al-Manthur fi al-Tafsir bi-al-Mathur |
shawkani | Fath al-Qadir |
alusi | Ruh al-Maani |
qinnawji | Fath al-Bayan fi Maqasid al-Quran |
qasimi | Mahasin al-Tawil |
irab-al-quran | al-Jadwal fi Irab al-Quran wa-Sarfih wa-Bayanih |
saadi | Taysir al-Karim al-Rahman fi Tafsir Kalam al-Mannan |
ibn-ashur | al-Tahrir wa-al-Tanwir |
shanqiti | Adwa al-Bayan fi Idah al-Quran bi-al-Quran |
ibn-uthaymin | Tafsir al-Quran al-Karim |
aysar | Aysar al-Tafasir li-Kalam al-Ali al-Kabir |
muyassar | al-Tafsir al-Muyassar |
ibn-atiyah | al-Muharrar al-Wajiz |
basit | al-Tafsir al-Basit |
tadabbur-wa-amal | al-Quran: Tadabbur wa-Amal |
wajiz | al-Tafsir al-Wajiz |
mathur | Mawsuat al-Tafsir al-Mathur |
qiraat | al-Jadwal fi Qira'at al-Quran wa-Tawjihatih |
irab-daas | Irab al-Quran al-Karim wa-Bayanuh |
shawi | Nafahat min Tafsir al-Quran al-Karim |
yasir | al-Yasir fi Tafsir al-Quran |
khadiri | al-Siraj fi Bayan Gharib al-Quran |
wasit | al-Tafsir al-Wasit li-al-Quran al-Karim |
dorar-t | al-Tafsir al-Muharrar |
| Alias | Name |
|---|---|
en-haleem | The Qur'an: A New Translation |
en-khattab | The Clear Quran |
en-saheeh-intl | The Holy Qur'an (Saheeh International) |
en-hilali-khan | Interpretation of the Meanings of the Noble Qur'an |
en-bridges | Bridges' Translation of the Ten Qira'at of the Noble Qur'an |
en-taqi-usmani | The Meanings of the Noble Qur'an with Explanatory Notes |
en-itani | Quran in English: Clear and Easy to Read |
en-bewley | The Noble Qur'an: A New Rendering of Its Meaning in English |
en-study-quran | The Study Quran: A New Translation and Commentary |
en-ghali | Towards Understanding the Ever-glorious Qur'an |
en-ahmedraza | The Holy Quran |
en-wahiduddin | The Quran: Translation and Commentary with Parallel Arabic Text |
en-qaribullah | The Holy Qur'an |
en-busool | The Wise Qur'an: These Are the Verses of the Wise Book |
en-tahir-ul-qadri | Irfan-ul-Quran |
en-rowwad | Explanation of the Meanings of the Noble Quran |
en-asad | The Message of the Qur'an |
en-sarwar | The Holy Qur'an: The Arabic Text and English Translation |
en-daryabadi | Tafseer-e-Majidi |
en-shakir | The Qur'an |
en-pickthall | The Meaning of the Glorious Koran |
en-qarai | The Qur'an with an English Paraphrase |
yusuf-ali | The Meaning of the Holy Qur'an |
| Alias | Name |
|---|---|
en-maududi | Tafhim al-Quran |
en-maarif-al-quran | Maarif al-Quran |
en-tazkir-al-quran | Tadhkir al-Quran |
en-easy-tajwid | Easy Tajwid |
en-wahidi | Asbab al-Nuzul |
unal | Tafsir Ünal |
dawat | Dawat ul Quran |
ishraq | Tafsir Ishraq al-Ma'ani |
yusuf-ali | The Meaning of the Holy Qur'an |
The catalog currently exposes 29 books and collections: 26 source books (including the Quran) and 3 themed collections drawn from them. The source books together hold 273,324 records, and the collections link to another 4,754.
In the table below, Records is the number of entries in each work, English is how many of those have an English translation, and Graded is how many carry a primary or enriched authenticity grading. Graders summarizes the compact primary-grade field; enriched detail pages may contain additional scholarly opinions. The counts were refreshed from the local catalog on 2026-09-05.
| ID | Alias | Name | Type | Records | English | Graded | Graders |
|---|---|---|---|---|---|---|---|
| 0 | quran | The Holy Quran | Source | 6,236 | 6,236 | 0 | N/A |
| 57 | ibnrajab50 | Jāmiʿ al-ʿUlūm wa-al-Ḥikam | Virtual | 93 | N/A | N/A | N/A |
| 61 | riyad | Riyāḍ al-Ṣāliḥīn min Kalām Sayyid al-Mursalīn | Virtual | 2,754 | N/A | N/A | N/A |
| 15 | adab | al-Adab al-Mufrad | Source | 1,326 | 1,326 | 1,326 | Albānī, Arnaʾūṭ |
| 32 | shamail | al-Shamāʾil al-Muḥammadiyyah | Source | 402 | 402 | 402 | Abū Dāwūd, Albānī |
| 50 | lulu-marjan | al-Luʾluʾ wa-al-Marjān (Muttafaq ʿAlayh) | Virtual | 1,907 | N/A | N/A | N/A |
| 1 | bukhari | Ṣaḥīḥ al-Bukhārī | Source | 7,277 | 7,277 | 7,277 | Bukhārī, Luʿluʿ wa-al-Marjān |
| 2 | muslim | Ṣaḥīḥ Muslim | Source | 7,469 | 7,469 | 7,468 | Muslim |
| 4 | abudawud | Sunan Abū Dāwūd | Source | 5,276 | 5,276 | 5,275 | Albānī, Arnaʾūṭ |
| 5 | tirmidhi | Jāmiʿ al-Tirmidhī | Source | 4,052 | 4,052 | 4,052 | Aḥmad, Albānī, Arnaʾūṭ, Tirmidhī, ʿAli Zaʾī |
| 3 | nasai | Sunan al-Nasāʾī | Source | 5,769 | 5,769 | 5,769 | Albānī, Arnaʾūṭ, Ḥākim, Nasāʾī, ʿAli Zaʾī |
| 6 | ibnmajah | Sunan Ibn Mājah | Source | 4,345 | 4,345 | 4,345 | Albānī, Arnaʾūṭ, ʿAli Zaʾī |
| 9 | darimi | Sunan al-Dārimī | Source | 3,547 | 3,546 | 3,547 | Dārānī, Ibn Ḥibbān, Ibn Mājah |
| 8 | ahmad | Musnad Aḥmad | Source | 27,735 | 27,672 | 27,732 | Arnaʾūṭ, ʿAli Zaʾī |
| 7 | malik | Muwaṭṭaʾ Mālik | Source | 1,975 | 1,975 | 1,975 | Mālik |
| 10 | hakim | Mustadrak al-Ḥākim | Source | 8,809 | 8,789 | 8,809 | Aḥmad, Dhahabī, Ḥākim, Haythamī, Ibn Ḥibbān |
| 11 | ibnhibban | Ṣaḥīḥ Ibn Ḥibbān | Source | 7,539 | 7,499 | 7,538 | Arnaʾūṭ |
| 17 | ibnkhuzaymah | Ṣaḥīḥ Ibn Khuzaymah | Source | 3,282 | 0 | 3,282 | N/A |
| 16 | bazzar | Musnad al-Bazzār | Source | 10,401 | 0 | 10,401 | N/A |
| 18 | daraqutni | Sunan al-Dāraquṭnī | Source | 4,847 | 1 | 4,847 | Arnaʾūṭ |
| 30 | abdalrazzaq | Muṣannaf ʿAbd al-Razzāq | Source | 21,109 | 0 | 21,109 | N/A |
| 31 | ibnabishaybah | Muṣannaf Ibn Abī Shaybah | Source | 39,098 | 0 | 39,098 | N/A |
| 13 | nasai-kubra | al-Sunan al-Kubrá, Nasāʾī | Source | 11,446 | 11,415 | 11,446 | Arnaʾūṭ, Nasāʾī, Tirmidhī, ʿAli Zaʾī |
| 14 | bayhaqi | al-Sunan al-Kabīr, Bayhaqī | Source | 21,742 | 0 | 21,742 | N/A |
| 12 | tabarani | al-Muʿjam al-Kabīr, Ṭabarānī | Source | 21,373 | 21,264 | 21,373 | Aḥmad, Albānī, Arnaʾūṭ, Haythamī, Muslim |
| 34 | tabarani-awsat | al-Muʿjam al-Awsaṭ, Ṭabarānī | Source | 0 | 0 | 0 | N/A |
| 82 | ahmad-zuhd | al-Zuhd, Aḥmad | Source | 2,360 | 2,355 | 2,360 | N/A |
| 33 | tabarani-saghir | al-Muʿjam al-Ṣaghīr, Ṭabarānī | Source | 0 | 0 | 0 | N/A |
| 1000 | suyuti | Jamʿ al-Jawāmiʿ, Suyūṭī | Source | 45,909 | 1,430 | 45,908 | Albānī, Arnaʾūṭ, Bayhaqī, Bukhārī, Dhahabī, Ḥākim, Haythamī, Ibn al-Jawzī, Ibn Ḥajar, Luʿluʿ wa-al-Marjān, Mudhiri, Muslim, Nawawī, Suyūṭī, Tirmidhī |