
Source Library
Connects Claude to the Embassy of the Free Mind's collection of 15,000 rare pre-modern texts, all translated to English. The corpus spans philosophy, religion, science, and literature from before the modern era. Search operations hit the sourcelibrary.org API, which runs on a Next.js stack with MongoDB Atlas for storage and Google Gemini handling OCR and translation of the original manuscripts. Reach for this when you need primary sources from historical periods or want to query obscure philosophical and religious texts that aren't in standard training data. The underlying system processes images through a pipeline that splits two-page spreads, extracts text, translates, and summarizes.
- tools
- 22
- transport
- HTTP
- last updated
- Nov 5, 2026
Install
From registry metadata$ npx add-mcp https://sourcelibrary.org/api/mcp --name sourcelibraryRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http sourcelibrary https://sourcelibrary.org/api/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 22 toolsVerified live against the running server on Nov 6, 2026.
search_libraryRETURNS A LIST OF BOOKS (works on a topic) — NOT passages. PICK THIS to discover which works exist on a subject. → For quotable text use search_translations (exact words) or search_concept (by meaning); if the user already named an author/work, call get_book directly (or list_...8 params
RETURNS A LIST OF BOOKS (works on a topic) — NOT passages. PICK THIS to discover which works exist on a subject. → For quotable text use search_translations (exact words) or search_concept (by meaning); if the user already named an author/work, call get_book directly (or list_...
has_translationbooleanlanguagestringlimitnumberoffsetnumberquery*stringsortstringrelevance · date_asc · date_desc · titleyear_fromnumberyear_tonumbersearch_translationsRETURNS QUOTABLE PASSAGES (page-level snippets + citation URLs), matched by KEYWORD/term. PICK THIS to find a quote or textual evidence on a topic across the whole library. → If the modern word won't literally appear in historical texts, use search_concept (matches by meaning)...15 params
RETURNS QUOTABLE PASSAGES (page-level snippets + citation URLs), matched by KEYWORD/term. PICK THIS to find a quote or textual evidence on a topic across the whole library. → If the modern word won't literally appear in historical texts, use search_concept (matches by meaning)...
authorarraybook_idstringdiversitystringtradition · author · offexclude_authorsarrayexclude_languagesarraylangstringlanguagestringlanguagesarraylimitnumbermax_per_authornumbermax_per_worknumberoffsetnumberquery*stringyear_fromnumberyear_tonumbersearch_conceptRETURNS QUOTABLE PASSAGES matched by MEANING (cosine similarity on Gemini embeddings, 768d) — paraphrases and adjacent phrasings match even with zero keyword overlap. PICK THIS when the modern term won't literally appear in historical texts — e.g. "distributed cognition" maps...14 params
RETURNS QUOTABLE PASSAGES matched by MEANING (cosine similarity on Gemini embeddings, 768d) — paraphrases and adjacent phrasings match even with zero keyword overlap. PICK THIS when the modern term won't literally appear in historical texts — e.g. "distributed cognition" maps...
authorarraydiversitystringtradition · author · offexclude_authorsarrayexclude_languagesarraylangstringlanguagestringlanguagesarraylimitnumbermax_per_authornumbermax_per_booknumbermax_per_worknumberquery*stringyear_fromnumberyear_tonumbersearch_within_bookSEARCHES INSIDE ONE BOOK (requires book_id). PRIMARILY KEYWORD: it runs a lexical search over the book's pages plus a narrow scoped-semantic pass (top ~10), interleaved by relevance. PICK THIS when you know the wording you are looking for, or want every page of one book mentio...4 params
SEARCHES INSIDE ONE BOOK (requires book_id). PRIMARILY KEYWORD: it runs a lexical search over the book's pages plus a narrow scoped-semantic pass (top ~10), interleaved by relevance. PICK THIS when you know the wording you are looking for, or want every page of one book mentio...
book_id*stringlangstringoffsetnumberquery*stringlist_booksBROWSES/FILTERS THE CATALOG by metadata (canonical author via author_id, title/author/summary words via search, language, category, year range, translation recency) — no page-text matching. PICK THIS to see WHAT EXISTS by an author or in a tradition, or to enumerate a date ran...12 params
BROWSES/FILTERS THE CATALOG by metadata (canonical author via author_id, title/author/summary words via search, language, category, year range, translation recency) — no page-text matching. PICK THIS to see WHAT EXISTS by an author or in a tradition, or to enumerate a date ran...
author_idstringcategorystringedition_keystringhas_editionstringlanguagestringlimitnumberoffsetnumbersearchstringsortstringrecent-translation · recent · title-asc · title-descwork_idstringyear_fromnumberyear_tonumberget_bookREAD PIPELINE step 1 — DISCOVER. START HERE for any named work or author. Returns the book's AI-generated summary, chapter list, edition metadata, DOI, page counts, IIIF manifest, and the cover image (inline, so you and the user can see the book). LANGUAGE: `language` is what...1 params
READ PIPELINE step 1 — DISCOVER. START HERE for any named work or author. Returns the book's AI-generated summary, chapter list, edition metadata, DOI, page counts, IIIF manifest, and the cover image (inline, so you and the user can see the book). LANGUAGE: `language` is what...
book_id*stringget_book_textREAD PIPELINE step 2 — READ. Read a book's text. Call get_book first (step 1) for the chapter list, then come here. Preferred: use the chapter param to read one chapter at a time (includes [Page N] markers for citation). Alternatively, use from/to for explicit page ranges (e.g...8 params
READ PIPELINE step 2 — READ. Read a book's text. Call get_book first (step 1) for the chapter list, then come here. Preferred: use the chapter param to read one chapter at a time (includes [Page N] markers for citation). Alternatively, use from/to for explicit page ranges (e.g...
book_id*stringchapternumbercontentstringocr · translation · bothformatstringjson · plainfromnumberlangstringpartnumbertonumberget_quoteREAD PIPELINE step 3 — CITE. Get the exact verbatim text of a single page plus its citation apparatus. ALWAYS use before putting text in quotation marks. The response headline is citation_link (the stable sourcelibrary.org/q/… shortlink) — present it to the user alongside the...5 params
READ PIPELINE step 3 — CITE. Get the exact verbatim text of a single page plus its citation apparatus. ALWAYS use before putting text in quotation marks. The response headline is citation_link (the stable sourcelibrary.org/q/… shortlink) — present it to the user alongside the...
book_id*stringcontextbooleaninclude_imagebooleanlangstringpage*numberlist_editionsEvery edition of one work that the library holds — the other witnesses to the same text, across languages and centuries. Give it a book_id (easiest: the id of any edition you already found) or a work_id. USE THIS when a quotation needs checking against more than one witness, w...2 params
Every edition of one work that the library holds — the other witnesses to the same text, across languages and centuries. Give it a book_id (easiest: the id of any edition you already found) or a work_id. USE THIS when a quotation needs checking against more than one witness, w...
book_idstringwork_idstringcheck_duplicateDOES THE LIBRARY HOLD THIS WORK? Call this BEFORE telling the user the library lacks a book, and before proposing one for acquisition. A miss from list_books or search_library is NOT evidence of absence: list_books matches words and search_library ranks by relevance, so a held...6 params
DOES THE LIBRARY HOLD THIS WORK? Call this BEFORE telling the user the library lacks a book, and before proposing one for acquisition. A miss from list_books or search_library is NOT evidence of absence: list_books matches words and search_library ranks by relevance, so a held...
authorstringia_idstringlanguagestringtitlestringurlstringyearnumberget_quotesREAD PIPELINE step 3 — CITE, in batch. Get verbatim text + citation_link for SEVERAL pages of a single book in one round-trip, to assemble a multi-passage dossier. Specify either pages (an explicit array, e.g. [12, 40, 41]) or an inclusive from/to range. Max 25 pages per call....6 params
READ PIPELINE step 3 — CITE, in batch. Get verbatim text + citation_link for SEVERAL pages of a single book in one round-trip, to assemble a multi-passage dossier. Specify either pages (an explicit array, e.g. [12, 40, 41]) or an inclusive from/to range. Max 25 pages per call....
book_id*stringfromnumberinclude_imagebooleanlangstringpagesarraytonumbersearch_imagesSearch 200,000+ historical illustrations, emblems, engravings, diagrams, AND 24,000+ artworks (paintings, prints, sculptures). Filter by type, subject, figure, symbol, year. Results interleave two collections: illustrations extracted from book pages (each with a page number an...11 params
Search 200,000+ historical illustrations, emblems, engravings, diagrams, AND 24,000+ artworks (paintings, prints, sculptures). Filter by type, subject, figure, symbol, year. Results interleave two collections: illustrations extracted from book pages (each with a page number an...
book_idstringfigurestringinclude_thumbnail_base64booleanlimitnumberoffsetnumberquerystringsubjectstringsymbolstringtypestringyear_fromnumberyear_tonumberlist_image_facetsList the legal values of search_images' type, subject, figure and symbol filters, with how many images carry each. Those filters are EXACT string matches on tags an AI extractor wrote, and each vocabulary runs to thousands of strings (e.g. "musical notes", "Jesus Christ", "med...3 params
List the legal values of search_images' type, subject, figure and symbol filters, with how many images carry each. Those filters are EXACT string matches on tags an AI extractor wrote, and each vocabulary runs to thousands of strings (e.g. "musical notes", "Jesus Christ", "med...
containsstringfacetstringtype · subject · figure · symbollimitnumbersubmit_feedbackSubmit feedback, bug reports, or feature requests to the Source Library team. Before proposing NEW functionality, read https://sourcelibrary.org/llms.txt and https://sourcelibrary.org/developers — several past submissions proposed building things that already exist (IIIF manif...3 params
Submit feedback, bug reports, or feature requests to the Source Library team. Before proposing NEW functionality, read https://sourcelibrary.org/llms.txt and https://sourcelibrary.org/developers — several past submissions proposed building things that already exist (IIIF manif...
emailstringmessage*stringnamestringshare_findingsShare a research dossier back to the Source Library team — a title, an optional summary, and an ordered list of citations (the passages your thesis rests on). Each citation is a reference { book_id, page, note }, NOT copied text: the library re-renders the canonical quote from...5 params
Share a research dossier back to the Source Library team — a title, an optional summary, and an ordered list of citations (the passages your thesis rests on). Each citation is a reference { book_id, page, note }, NOT copied text: the library re-renders the canonical quote from...
citations*arrayemailstringnamestringsummarystringtitle*stringpropose_collectionPropose a themed collection of books to the Source Library team — a title, a rationale (why these books belong together and what thread connects them), and an ordered list of book ids. Get book ids from search_library / list_books / get_book. Like submit_feedback and share_fin...6 params
Propose a themed collection of books to the Source Library team — a title, a rationale (why these books belong together and what thread connects them), and an ordered list of book ids. Get book ids from search_library / list_books / get_book. Like submit_feedback and share_fin...
book_ids*arrayemailstringnamestringrationale*stringsuggested_slugstringtitle*stringstart_review_shiftStart a volunteer REVIEW SHIFT: the user lends their Claude (you) to Source Library to check one book, page by page, against its scans. Use when the user wants to help Source Library, says "start a shift" or "review pages", or asks how they can contribute. The user does NOT ne...4 params
Start a volunteer REVIEW SHIFT: the user lends their Claude (you) to Source Library to check one book, page by page, against its scans. Use when the user wants to help Source Library, says "start a shift" or "review pages", or asks how they can contribute. The user does NOT ne...
bookstringlanguagestringnew_bookbooleanvolunteer_codestringcontinue_review_shiftNext page of the book being reviewed. Call it straight after finishing a page until the stretch the user chose is done, and again when they ask for more. Pass next.book and next.after from the previous page, and volunteer_code. Returns the same shape as start_review_shift; fol...3 params
Next page of the book being reviewed. Call it straight after finishing a page until the stretch the user chose is done, and again when they ask for more. Pass next.book and next.after from the previous page, and volunteer_code. Returns the same shape as start_review_shift; fol...
after*numberbook*stringvolunteer_code*stringstart_blind_checkOPTIONAL lane, only for a user who reads the original language and asks to judge pages themselves: up to five random pages from different books, each with scan, transcription and English. Here the USER is the reviewer: ask for THEIR verdict first, before any opinion of yours,...3 params
OPTIONAL lane, only for a user who reads the original language and asks to judge pages themselves: up to five random pages from different books, each with scan, transcription and English. Here the USER is the reviewer: ask for THEIR verdict first, before any opinion of yours,...
languagestringpagesnumbervolunteer_codestringsubmit_page_reviewRecord the verdict on one page of a shift. mode "book-run" (start_review_shift / continue_review_shift): the verdict and findings are YOURS, from reading the scan and both texts; set user_looked true if the user checked anything on the page themselves. mode "blind" (start_blin...17 params
Record the verdict on one page of a shift. mode "book-run" (start_review_shift / continue_review_shift): the verdict and findings are YOURS, from reading the scan and both texts; set user_looked true if the user checked anything on the page themselves. mode "blind" (start_blin...
assistant_findingsarrayassistant_model*stringassistant_verdictstringboth_sound · translation_drift · transcription_off · both_off · unclearbook_idstringfirst_verdictstringboth_sound · translation_drift · transcription_off · both_off · unclearitem_id*stringmodestringbook-run · blindnamestringnotestringpage_numbernumberreader_languagesstringshift_idstringtext_versionobjectuser_lookedbooleanverdict*stringboth_sound · translation_drift · transcription_off · both_off · unclearverdict_before_assistantbooleanvolunteer_code*stringpropose_correctionDuring a review shift, propose a correction to a page's transcription (field "ocr") or English (field "translation"). A correction is a list of exact span edits: each "find" must be copied exactly from the text the shift returned and occur once on the page (add surrounding wor...10 params
During a review shift, propose a correction to a page's transcription (field "ocr") or English (field "translation"). A correction is a list of exact span edits: each "find" must be copied exactly from the text the shift returned and occur once on the page (add surrounding wor...
assistant_model*stringbase_hash*stringdrafted_by*stringassistant · volunteer · assistant_accepted · mixededits*arrayfield*stringocr · translationitem_id*stringnamestringnotestringshift_idstringvolunteer_code*stringget_locusTurn a CANONICAL CITATION into the actual leaves that carry it. Aristotle is cited by Bekker number (1094a8, 1447a) and Plato by Stephanus number (Rep. 328b) — the references scholarship has used for centuries, which survive re-typesetting and are shareable in a way a scan pag...3 params
Turn a CANONICAL CITATION into the actual leaves that carry it. Aristotle is cited by Bekker number (1094a8, 1447a) and Plato by Stephanus number (Rep. 328b) — the references scholarship has used for centuries, which survive re-typesetting and are shareable in a way a scan pag...
reference*stringsystemstringworkstringSponsors
Readme
Source Library
A digital library of historical primary sources with AI-aided OCR, translation, and scholarly curation.
🎬 Experience Source Library
Details
- Repository
- github.com/embassy-of-the-free-mind/sourcelibrary-v2
- Website
- sourcelibrary.org/developers
- Category
- Search & Web Crawling
- Transport
- HTTP
- Registry
- MCP registry, active
- Resources
- 2
- Tools verified
- Nov 6, 2026