MCP App Store
by KeenEthics
Shamela Link icon

Shamela Link

By Hamoud Alhoqbani

Get New App Alerts

Overview

Shamela Link helps users search and read the Arabic Shamela library, inspect books and authors, retrieve Qur'anic and hadith references, verify quotations, and build source-grounded citations for research.

Tools

shamela_books_by_period

ChatGPT
Catalog filter that keeps the two DATE FIELDS as separate AND-combined constraints (unlike scope.period_, which unions them). composed_from/composed_to bound book.book_date — Shamela's DATING year, NOT a composition year: it equals the main author's death year for 8,467 of 8,593 books, so it cannot answer 'what was composed in this century'. died_from/died_to bound the MAIN AUTHOR's death year, which is the dimension the catalogue records well. A book matches only if it satisfies ALL provided constraints at once (composition-year AND death-year AND category AND downloaded) — an intersection, never a union. At least one of the four bounds is required. Also accepts category_id, downloaded_only, limit/offset. Returns book_id, book_name, main author + death_year, book_date, category, downloaded flag, and a ready-to-use book_ids[] to pass as scope.book_ids. Use for 'books by authors who died in a period' — e.g. died_from:700, died_to:800 for 8th-century-Hijri authors. Do not present a composed_ result as a claim about when books were written.

shamela_get_author

ChatGPT
Fetch metadata for an author by author_id, optionally with the list of books they authored. Returns author_name, death_year (null if unknown or modern), death_text (display string), and the book list (main + co-authored). Each book entry has book_id, book_name, book_date, downloaded flag. Use include_books=false to skip the book list when you only need name/death year. Example: shamela_get_author({author_id:57}) returns Ibn Uthaymeen + his books.

shamela_get_aya

ChatGPT
Fetch a single Qur'anic verse by aya_id (1..6236, cumulative across surahs) OR by surah (1..114) + aya (1..N). Returns the verse text in three renderings: body (Egyptian إملائي, Hafs from Asim — the searchable form), amiri (Othmani Amiri rendering for display), majma (KFQPC Mushaf rendering). Pass either aya_id alone OR both surah and aya. Examples: shamela_get_aya({aya_id:1}) → al-Fatiha verse 1 (basmala); shamela_get_aya({surah:55, aya:1}) → Ar-Rahman verse 1.

shamela_get_book

ChatGPT
Fetch full metadata for a book by book_id. Returns book_name, all authors (main + co), category, book_type (printed/manuscript/journal/thesis/electronic/audio), book_date (Shamela's DATING year for the work — not the year it was written: it tracks the original author's death and equals the main author's death year for 8,467 of 8,593 catalogue books), printed flag, downloaded flag (true ONLY when both master.db says so AND the per-book SQLite has page rows), publication_date (Shamela's own ddMMyyyy Hijri stamp for when the catalogue ENTRY was added or refreshed — NOT the print date of the edition; over half the library shares one seed value), sub_books, and a notes array listing citation-grade fields master.db doesn't have (edition/publisher/city/editor — never fabricate these). Find ids via shamela_resolve('book name') or shamela_list_downloaded_books. Works on any catalog book whether downloaded or not.

shamela_get_book_parts

ChatGPT
List the volumes/parts of a multi-volume book. Returns is_multi_volume flag, total_pages, and an array of parts each with part name (e.g. 'ج 1'), page_count, first_page_id, last_page_id. For single-volume books returns is_multi_volume:false and an empty parts array. Useful to know whether a citation needs a part designator. Example: shamela_get_book_parts({book_id:<id>}). Find downloaded book ids via shamela_list_downloaded_books.

shamela_get_book_section

ChatGPT
Fetch every page under a chapter title. Resolves the chapter's start/end page range from the per-book SQLite (next-sibling-title boundary), then batch-reads the page contents. Capped at max_pages (default 30, max 100); sets truncated:true if the section is longer. Long sections also stop early on a character budget (even within max_pages) and return next_start_page_id + a _display hint to continue. Use shamela_get_toc to find title_ids, then this tool to read the matching section. Example: shamela_get_book_section({book_id:<id>, title_id:<title_id from get_toc>}).

shamela_get_books_for_hadith

ChatGPT
Given a Shamela hadith key (numeric identifier shared by all collections that record the same hadith), list every book that cites it. Uses Shamela's pre-built service/hadeeth.db join. By default filters to downloaded books only. Each result has book_id, book_name, author_name, page_id, downloaded flag. Pair with shamela_get_page to read the cited page. Useful for cross-collection hadith research (Bukhari + Muslim + Sunan + Musnad references for the same hadith), and for gathering a hadith's routes before assessing it — the tool reports where it occurs and never rules on its authenticity.

shamela_get_citation

ChatGPT
Format a citation in three styles. style='shamela' (default) replicates Shamela's UI copy-with-citation: «<book>» (<part>/ <page>):\n«<text>». style='short' is a one-line inline reference: <author>، <book>، ص <page>. style='full' is the long form with the author's death year (book_date is deliberately not printed — it is Shamela's dating stamp, not a composition or print year), plus a notes[] array listing missing citation-grade fields (edition/publisher/city/editor — master.db doesn't have these; never fabricate). All numbers in output use Arabic-Indic digits. Examples: shamela_get_citation({book_id:<id>, page_id:<page_id>, style:'shamela'}), shamela_get_citation({book_id:<id>, page_id:<page_id>, text:'<quoted passage>', style:'shamela'}).

shamela_get_page

ChatGPT
Fetch the full text of one Shamela page (book_id, page_id). Returns body (matn), foot (footnotes), comment (user notes), printed_page label, prev/next page ids, the chapter ancestor chain (root → leaf), and the category path. Set keep_html=true to preserve inline <span data-type='title'> markers; default strips them. The book must be downloaded (BOOK_NOT_DOWNLOADED otherwise). For batch reads use shamela_get_pages_range; for full chapters use shamela_get_book_section. Long pages: the body is split into parts of ~4000 chars — body_part selects the 1-based part, and body_total_parts/body_has_more report the split (footnote/comment come with part 1; a _display hint advises when to ask the user how to show it).

shamela_get_page_services

ChatGPT
Read the per-page services annotations (Qur'anic verses cited, hadith keys, isnād chains) for a specific (book_id, page_id). Returns has_services flag plus three arrays: ayat (cumulative aya_ids), hadeeth (hadith keys), esnad (chain strings). Many books — particularly non-hadith works — have no services and return has_services:false cleanly. Useful to pivot from a search hit to the Qur'anic/hadith content it discusses: pair the returned aya_ids with shamela_get_aya, or hadith keys with shamela_get_books_for_hadith. The esnad strings are the entry point for studying a chain narrator by narrator — resolve each name with shamela_search_authors.

shamela_get_pages_range

ChatGPT
Fetch N (1–20, default 5) consecutive pages from a downloaded book starting at start_page_id. Faster than calling shamela_get_page in a loop. Each page entry has page_id, printed_page, part, body, foot, comment. has_more flag indicates whether more pages exist after the returned range. Very long ranges are cut short to stay within a size budget; when that happens the response sets next_start_page_id and a _display hint — continue from there. For full chapters use shamela_get_book_section instead — it knows where the chapter ends. Example: shamela_get_pages_range({book_id:<id>, start_page_id:1, count:5}). Find downloaded book ids via shamela_list_downloaded_books.

shamela_get_tafseer_of_aya

ChatGPT
List the tafsir books that Shamela's own pre-built service/tafseer.db join places a verse in, with page_id. Pass aya_id (1..6236) OR surah+aya; downloaded_only=false widens to the whole catalogue, including books not downloaded. That join is curated: it covers only a handful of books, and it ERRORS with SERVICE_KEY_NOT_FOUND when it holds nothing for the verse. For the user's real coverage prefer shamela_list_tafsirs_for_aya, which also places the verse from each downloaded tafsir's own chapter headings and so reaches many more books, and shamela_get_tafseer_texts to read them. Use this tool when you want Shamela's own join specifically, or the not-downloaded catalogue view the other two do not offer.

shamela_get_tafseer_texts

ChatGPT
Fetch the tafsir texts of one verse from several books in a single call. Index-driven, never text-searched: a page is fetched only where the verse is actually placed — by Shamela's curated service/tafseer.db, or by the verse→page index built from a book's OWN chapter headings, which reaches most of the downloaded tafsir shelf. With no book_ids the whole shelf (categories 3, 4, 5) is swept, Shamela-placed books first. Pass aya_id OR surah+aya; book_ids restricts sources, max_sources (default 5) caps how many are read. Per-source status: 'ok' (placed by Shamela's table), 'ok_titles' (by the book's headings), 'ok_group' (a heading covering a range including this verse), and — with no text — 'no_entry_for_this_aya', 'not_indexed', 'not_downloaded', 'index_pending' (one call indexes at most 8 new books; call again to continue). Each source carries attribution (book_name, author, death_year, printed_page, page_id) and continuation: text_part/text_total_parts/text_has_more (read on with shamela_get_page body_part=2) and next_page_id for commentary running past the page. A character budget may cut the response; remaining_book_ids + _display say how to continue. Examples: shamela_get_tafseer_texts({surah:2, aya:255}), shamela_get_tafseer_texts({surah:1, aya:5, book_ids:[43], max_sources:2}).

shamela_get_toc

ChatGPT
Fetch a downloaded book's table of contents. Two modes: (a) subtree mode (default) — pass parent_id (0 = top level) and depth (1–5) to get a tree of titles; (b) ancestor-chain mode — pass containing_page_id to get the root → leaf chapter chain that contains that page. Returns title_id, title_text, page_id, has_children for each entry. Use the title_id with shamela_get_book_section to read the section. Examples: shamela_get_toc({book_id:<id>, depth:1}) lists top-level chapters; shamela_get_toc({book_id:<id>, containing_page_id:17}) returns the chapter containing page 17. Find downloaded book ids via shamela_list_downloaded_books or shamela_resolve.

shamela_guide

ChatGPT
The extension's built-in Arabic user guide (user-facing markdown). Returns the full guide, or one section via the optional section: 'الكل' (default — the full guide), 'الأدوات' (every tool with natural-request examples), 'النصائح' (researcher tips). An unrecognized section value falls back to the full guide with a note. Serves the user when they ask what the extension can do or how to use it. Pure text — needs no library access and never fails, so it also works when the Shamela install itself is missing. Examples: shamela_guide({}), shamela_guide({section:'الأدوات'}).

shamela_health

ChatGPT
Self-diagnostics. Returns server version, catalog/author/category counts, downloaded-book count, and a spot-check that reads a sample of downloaded books, spread evenly across the library, to confirm their pages are readable. Reaching this tool at all proves the backend booted; the spot-check separates 'server fine' from 'library path / content problems'. Use it FIRST when Shamela tools seem missing, empty, or erroring. Cheap and read-only.

shamela_list_categories

ChatGPT
List all 41 categories in Shamela's catalog. Categories are flat (no parent_id, no transitive expansion). Each entry has category_id, category_name, and book_count (total books in catalog under that category). Use category_id values with scope.category_ids in search_pages / search_books to narrow searches. Set include_counts=false to skip the book counts (slightly faster but counts are cached so cost is negligible). Each entry also reports downloaded_count (books in that category present on THIS machine), and downloaded_only=true lists only categories where the user has downloads — useful because Shamela is a 41-category library and tafsir alone spans categories 3 (التفسير), 4 (علوم القرآن وأصول التفسير), and 5 (التجويد والقراءات).

shamela_list_downloaded_books

ChatGPT
List the books actually downloaded on this user's machine (master.db.book.major_ondisk > 0). Returns book_id, book_name, author_name, category, book_date for each. Crucial for honest research scoping: shamela_search_pages only returns hits from downloaded books, so this tool tells the LLM what's actually searchable. Paginated via limit/offset. Pass category_id to restrict to one category. Each book reports content_status ('readable' vs 'downloaded_no_pages' = flagged but text not openable), and the response includes library_by_category — the distribution of the whole downloaded library across categories. Example: shamela_list_downloaded_books({limit:50}) → all downloaded books; shamela_list_downloaded_books({category_id:17}) → only الفقه الحنبلي.

shamela_list_tafsirs_for_aya

ChatGPT
Per-verse tafsir coverage over the user's DOWNLOADED tafsir shelves (categories 3, 4 AND 5), plus any index hit from another shelf (marked in_tafsir_categories:false). Consults TWO indexes: Shamela's curated service/tafseer.db, and a verse→page index built per book from that book's OWN chapter headings — so far more downloaded tafsirs get placed than the curated table alone ever covered. Placed: 'indexed_covers' (Shamela's table), 'title_index' (the book's headings), 'title_index_group' (a heading covering a range that includes this verse); each carries page_id, printed page, title_id and confidence. Not placed: 'covered_no_locus' (indexed, no marker for this verse), 'indexed_no_entry_for_this_aya', 'not_indexed_coverage_unknown' (nothing places verses in this book — NOT evidence it lacks commentary). 'index_pending': one call indexes at most 8 new books, the rest come back in index_pending_book_ids — call again to continue. Never text-searches. Pass aya_id (1..6236) OR surah+aya. Examples: shamela_list_tafsirs_for_aya({surah:2, aya:255}), shamela_list_tafsirs_for_aya({aya_id:262}).

shamela_research_scope

ChatGPT
Measure how much of each madhhab a term actually reached, and return it as a receipt with a row for every school INCLUDING the empty ones. Each row says which of three things its number means: 'found', 'silent' (the school's books are on this machine and none of them says it — the only zero that is evidence about the tradition), or 'cannot_tell' (none of its books is downloaded, so the zero is about this disk and nothing else). Those two zeros are opposite conclusions and look identical in an ordinary search result, which is why this exists: report a school as silent ONLY from a row that says silent. Pass synonyms when a school may name the question differently — a school using another term is not a school that is silent. A fifth row counts the pages outside all four schools (general fiqh, usul, fatwa), so the rows are never read as a total. Costs one search per term. Use it BEFORE writing that a school has no view, and after a comparative sweep to see what the sweep missed. Examples: shamela_research_scope({term:'الاستصناع'}), shamela_research_scope({term:'خيار المجلس', synonyms:['خيار المتبايعين']}).

shamela_resolve

ChatGPT
Disambiguate a name fragment to book_ids and/or author_ids. Uses the pre-built s_book/ + s_author/ n-gram indexes for fast partial matching. type='book' searches only books, 'author' only authors, 'any' (default) both. Returns up to limit results per type with confidence scores. Use this BEFORE search_pages / search_books / search_authors when the user mentions a name but doesn't know the exact ID. A name written in LATIN letters is also accepted: when the Arabic indexes return nothing, the spelling is matched against the catalogue's own Arabic names ('Ibn Qudama', 'al-Mughni', 'Sahih Muslim'), and the response carries transliterated:true — those are candidates to confirm, not index hits, so check the Arabic name before scoping a search to one. Examples: shamela_resolve({query:'ابن قدامة'}) → returns the matching author_id(s) with confidence; shamela_resolve({query:'روضة الناظر'}) → returns book matches; shamela_resolve({query:'Ibn Qudama'}) → the same author, reached by spelling.

shamela_root_stats

ChatGPT
Profile how widely an Arabic root spreads across the DOWNLOADED library, aggregated by category / Hijri century / book / author. Runs ONE morphological (AlKhalil) page search for the root — all derived forms are counted (صابر/يصبر/اصطبار for صبر) — and returns the DISTRIBUTION only, not snippets. total_hits is EXACT, and so is the by-category/century/book/author breakdown: it is counted over EVERY matching page. Only when that pass exceeds its time budget does it fall back to a top-5,000 sample — coverage_basis says which happened ('all_results' or 'window'), and when coverage_capped is true the bucket counts are floors and shares are indicative. Morphology accuracy on classical Arabic is ~0.80 — read counts as reach, not exact tallies. Pass scope to profile a slice. Examples: shamela_root_stats({root:'صبر'}), shamela_root_stats({root:'رحم', scope:{category_ids:[17]}}).

shamela_scan_consensus

ChatGPT
Locate where a fiqh question is declared settled and where it is declared open, in one sweep. Runs a lexicon of the fixed Arabic idioms by which agreement is claimed (أجمعوا، بالإجماع، لا خلاف، لا نعلم خلافا…) and disagreement is recorded (اختلفوا، قولان، روايتان، وجهان، فيه خلاف…) against your subject, each formula required NEAR the subject and each held together as a phrase. Returns per formula: pages, books, the formula's own total in the same scope (the base rate — «وجهان» is a Shafii habit and «روايتان» a Hanbali one, so raw cross-school counts measure idiom, not dispute), how the pages fall across the four schools, and quoted witnesses. There is deliberately NO verdict field and no total of one column against the other: the index cannot see negation, attribution or rebuttal, so «لا إجماع في المسألة» and «ادعى الإجماع وليس كذلك» both carry the formula and neither asserts it. Read the witnesses; the counts only say where to look. Use it BEFORE arguing a question, to find out whether it is disputed at all. Examples: shamela_scan_consensus({question:'المسح على الخفين'}), shamela_scan_consensus({question:'الاستصناع', families:['ijmaa'], scope:{madhhab:['hanafi']}}).

shamela_search_authors

ChatGPT
Search Shamela's ~3,200-author catalog by name or biography text. Pre-built index — no downloads needed. No scope (authors aren't scoped by category/period). Returns author name, Hijri death year, and book count. This searches BIOGRAPHIES as well as names, so a query can match scholars who merely mention the one you meant. Results are re-ranked so that an author whose NAME matches leads, but when you want the id of one specific named scholar, shamela_resolve is the tool built for it and returns a confidence score. Arabic scholars go by several name forms — when a query genuinely returns nothing, try the kunya, nisba, and shuhra variants before concluding absence (جرّب الكنية والنسبة والشهرة: ابن قدامة / الموفق / المقدسي). Use the resulting author_id with shamela_get_author for full details, or with scope.author_ids in shamela_search_pages/_books to filter by that author — check the name before you scope a whole search to it. Examples: shamela_search_authors({query:'ابن قدامة'}), shamela_search_authors({query:'الشافعي', options:{wildcards:false}}).

shamela_search_books

ChatGPT
Search Shamela's catalog of ~8,500 books by name, author, or bibliography text. Pre-built index — works even before any books are downloaded. scope.book_ids is not accepted (the catalog IS the universe); use scope.author_ids, category_ids, period_*, downloaded_only. Returns paginated results with book name, author, category, book_date, downloaded flag, and a snippet from the bibliography. Examples: shamela_search_books({query:'الأصول'}), shamela_search_books({query:'فقه', scope:{category_ids:[17], downloaded_only:true}}).

shamela_search_boolean

ChatGPT
Boolean search the AND-only regular search lacks — combines OR (any_of) and NOT (none_of) with AND (all_of). all_of: terms that must ALL appear (intersection). any_of: at least ONE must appear (union), intersected with all_of. none_of: pages containing ANY of these are excluded. At least one of all_of/any_of is required. The engine evaluates ((∩ all_of) ∩ (∪ any_of)) minus (∪ none_of) over EVERY page it holds, so the exclusion is exhaustive and total_in_window is the true match count; candidate_cap_hit and none_of_within_window remain in the output and are always false. subqueries[] reports each term's own total, and each result's matched_terms says which terms that page actually carries. scope narrows the question; it is no longer needed for reliability. Examples: shamela_search_boolean({all_of:['الوقف'], any_of:['المسجد','المقبرة'], none_of:['البيع'], scope:{category_ids:[17]}}).

shamela_search_exact

ChatGPT
Exactness-preserving search the regular search cannot do: it honors diacritics (التشكيل), hamza/alef forms (ٱآأإ vs bare ا, plus ؤ ئ ء ى ة), and digit systems (Arabic-Indic ٠-٩ vs Western 0-9). shamela_search_pages folds all of these away (preserve_* return OPTION_NOT_SUPPORTED). Two-stage, no index change: (1) normalized AND-search gathers candidates; (2) each candidate's FULL raw SQLite text is verified in Node, folding ONLY the features you did NOT ask to preserve. Type the query WITH the diacritics/hamza/digits to enforce; enable at least one flag in preserve. Broad searches may miss matches outside the bounded candidate window (candidate_cap_hit/total_candidates_scanned report it) — pass scope for large libraries. Examples: shamela_search_exact({query:'أحمد', preserve:{preserve_hamza:true}}) won't match «احمد»; shamela_search_exact({query:'عِلْم', preserve:{preserve_diacritics:true}}) won't match «عَلَم».

shamela_search_hadith

ChatGPT
Find a hadith by its TEXT (not its numeric key). Text-searches the downloaded library (matn + footnotes), reads each matching page's service annotations for hadith keys, then resolves each key's cross-collection takhrij via hadeeth.db. Returns matched pages (snippets often show the printed takhrij «رواه البخاري ومسلم») plus cross-book takhrij where service keys exist. Note: fiqh/usul libraries frequently lack service keys on cited-hadith pages — the snippets still carry the printed takhrij. For takhrij work, search options.search_in:['foot'] alone to target editors' footnotes, where the printed referencing lives. To follow a chain narrator by narrator, read the page with shamela_get_page_services (its esnad array) and look each name up with shamela_search_authors. Example: shamela_search_hadith({query:'إنما الأعمال بالنيات'}).

shamela_search_pages

ChatGPT
Search the body (matn) and footnotes (الحواشي) of every Shamela page the user has downloaded locally. AND-combines tokens; each token can match in any of the search_in fields. Default scope is the full downloaded library; pass scope (book_ids/author_ids/category_ids/period_/downloaded_only) to narrow. `options` controls morphology (Arabic root expansion via AlKhalil), wildcards (`/? per token, cannot combine with morphology), and search_in subset (body/foot/comment). Returns total_hits + paginated results with book name, author, printed-page label, and a snippet with <mark>...</mark> around matches; coverage rolls up by category/century/book/author and says how much of the search it speaks for: coverage.basis is 'all_results' when every match was counted or 'window' when only the fetched page was, coverage.total_counted is how many hits went into the buckets, and coverage.capped=true means counting stopped at 5,000 so the bucket counts are floors. preserve_diacritics/_hamza/_digits currently return OPTION_NOT_SUPPORTED. Use shamela_search_titles` for chapter title search instead. Examples: shamela_search_pages({query:'الكلام'}), shamela_search_pages({query:'استصناع', scope:{category_ids:[17]}}), shamela_search_pages({query:'كلم', options:{morphology:true}}).

shamela_search_phrase

ChatGPT
Exact-phrase and proximity search the regular search lacks. mode='phrase' matches the query words as a CONSECUTIVE phrase (e.g. «خيار المجلس» only where those two words are adjacent). mode='near' matches pages where the words occur within distance words of each other in any order (e.g. «بيع» near «قبض» within 5 words) — ideal for fiqh questions where related terms sit close but not adjacent. Two-stage: finds candidate pages where all words co-occur, then verifies adjacency/proximity in the full page text. Pass scope (book_ids/author_ids/category_ids) to cover large libraries reliably. Returns book name, author, printed page, and a snippet. Examples: shamela_search_phrase({query:'خيار المجلس'}), shamela_search_phrase({query:'بيع قبض', mode:'near', distance:5, scope:{category_ids:[17]}}).

shamela_search_quran

ChatGPT
Search the Qur'an (6,236 verses, Hafs from Asim, Egyptian إملائي orthography) via the pre-built aya/ Lucene index. Ships zero-config — works on a fresh Shamela install. Returns aya_id (1..6236), surah, surah_name, aya, body (full verse text), and a snippet with <mark>...</mark> around matches. Pair with shamela_get_aya to fetch a single verse with the Othmani Amiri rendering, or with shamela_get_tafseer_of_aya to find tafsir books that comment on a matching verse.

shamela_search_titles

ChatGPT
Search Shamela's title/ Lucene index for chapter and section titles. Same query/scope/options/pagination shape as shamela_search_pages but matches title text rather than page bodies. After finding a matching title, use shamela_get_book_section(book_id, title_id) to read the full section. Examples: shamela_search_titles({query:'باب الصيام'}), shamela_search_titles({query:'تعريف', scope:{book_ids:[<id from shamela_resolve or shamela_list_downloaded_books>]}}).

shamela_suggest_download

ChatGPT
Look a book up in Shamela's FULL catalogue — downloaded or not — and say what can be done about it: already on this machine, offered for download (with its id and its shamela.ws page), or in the catalogue but not offered, in which case the user must look elsewhere. Use it whenever research needs a book that searches cannot find: a work cited by a downloaded book, a source named in an editor's footnote, or a title the user asked for. An empty search result does not say whether a book is missing from the library or missing from Shamela; this does. Downloads nothing and contacts no server — the Shamela app performs the download, and the extension picks the book up within seconds, so the same conversation can continue. Examples: shamela_suggest_download({query:'مغني المحتاج'}), shamela_suggest_download({book_ids:[6658]}).

shamela_verify_quote

ChatGPT
Check whether a quotation is really on the page it is credited to. Returns one of five verdicts — 'verbatim' (present with diacritics, hamza spelling and digits exactly as typed), 'differs' (ALL of it present, with the differing axes NAMED), 'partial' (a run of it present and the rest worded otherwise — what a quotation carried from memory looks like; matched_words says how much), 'not_found', or 'unverifiable' (the book credited is not downloaded, so nothing was examined and the answer neither confirms nor denies) — together with WHERE on each page it sits: body is the author's own matn, foot is the modern editor's footnote, and a quotation taken from a footnote and attributed to the author is a misattribution however exactly it matches. Pass book_id (and page_id) to check a specific claim, or neither to search the downloaded library for whoever actually said it. When a claimed page does not hold the quotation, the page whose PRINTED number equals the number given is checked too and reported as printed_page_confusion — page_id is Shamela's own running count and a hand-carried citation almost always carries the printed page instead. Use it on any quotation whose source matters and whose provenance you have not personally checked, including one produced earlier in this same conversation. A 'not_found' is a statement about the books downloaded on this machine, never about the tradition. Examples: shamela_verify_quote({quote:'إنما الأعمال بالنيات', book_id:9942, page_id:17}), shamela_verify_quote({quote:'القياس في اللغة التقدير'}).

Example Prompts

Click any prompt to copy it.

Similar Apps