E-kitapları temiz Markdown bölümlerine dönüştürerek yapay zeka istemcileri için deterministik RAG ve alıntı doğrulama imkanı sağlar.
Ayrıca bilinen adı Terobyte/librarian-cli, librarian-cli
- Yıldızlar
- 2
- Araçlar
- —
- İndirmeler, 30 gün
- 169
- En son sürüm
- 0.1.1
- Son commit
- 1 Eyl 2026
- Lisans
- MIT
Librarian MCP nedir?
Librarian bir MCP sunucusudur. E-kitapları temiz Markdown bölümlerine dönüştürerek yapay zeka istemcileri için deterministik RAG ve alıntı doğrulama imkanı sağlar.
Özet, projenin README dosyasından oluşturuldu
Librarian MCP sunucusu hakkında
Librarian, yapay zeka istemcileri kullanan geliştiriciler için e-kitapları deterministik RAG amacıyla temiz Markdown bölümlerine dönüştürmeyi sağlar. EPUB, FB2, DOCX ve metin katmanlı PDF gibi çeşitli formatları, hassas token sayımlarına sahip yapılandırılmış bir bölüm kütüphanesine dönüştürür. Bu işlem; herhangi bir ağ erişimi, embedding veya API anahtarı gerektirmeden tamamen yerel olarak gerçekleşir ve aynı girdinin her zaman bayt düzeyinde özdeş çıktı üretmesini sağlar.
Kullanıcılar bu sunucuyu stdio MCP bağlantısı aracılığıyla Claude Desktop veya Claude Code uygulamalarına bağlayabilirler. Bir kütüphane yolu ile yapılandırıldıktan sonra sunucu; list_books, find ve verify_quote dahil olmak üzere altı adet salt okunur araç sunar. Bu araçlar, bir yapay zekanın kataloğu taramasına, BM25 kullanarak tam metin aramaları yapmasına ve belirli bir token bütçesi dahilinde spesifik bölümleri getirmesine olanak tanır. Özellikle yapay zeka modellerinin halüsinasyonları önlemek için kendi alıntılarını orijinal kaynak metinle doğrulamalarına yardımcı olmak için tasarlanmıştır.
Neler yapabilirsiniz
- 1E-kitap kütüphanelerinde arama yapmaYerel bir koleksiyondaki tüm başlıklar ve yazarlar arasında tam metin aramaları gerçekleştirin.
- 2Token limitleri dahilinde metin getirmeBelirli bir token bütçesinin altında kalarak bir kitaptan ardışık bölümleri çekin.
- 3Kitap kalitesini denetlemeİçeri alınan e-kitap dosyalarının yapısını ve kodlama kalitesini değerlendirin.
Projenin README dosyasından alınmıştır. Her kullanım durumu, oradaki bir alıntı ile kontrol edilir.
Librarian MCP nasıl yüklenir
Biçimler 10 Kas 2026 tarihinde doğrulandıCursor'a ekleGoose'a ekleLibrarian MCP'yi Claude Code içine yükleyin
$ claude mcp add librarian-cli -- uvx librarian-cliLibrarian MCP'yi Cursor içine yükleyin
~/.cursor/mcp.json
{
"mcpServers": {
"librarian-cli": {
"command": "uvx",
"args": [
"librarian-cli"
]
}
}
}Librarian MCP'yi VS Code içine yükleyin
.vscode/mcp.json
{
"servers": {
"librarian-cli": {
"type": "stdio",
"command": "uvx",
"args": [
"librarian-cli"
]
}
}
}Librarian MCP'yi VS Code CLI içine yükleyin
$ code --add-mcp '{"name":"librarian-cli","type":"stdio","command":"uvx","args":["librarian-cli"]}'Librarian MCP'yi Claude Desktop içine yükleyin
claude_desktop_config.json
{
"mcpServers": {
"librarian-cli": {
"command": "uvx",
"args": [
"librarian-cli"
]
}
}
}Librarian MCP'yi Codex içine yükleyin
$ codex mcp add librarian-cli -- uvx librarian-cliLibrarian MCP'yi Codex config.toml içine yükleyin
~/.codex/config.toml
[mcp_servers.librarian-cli] command = "uvx" args = ["librarian-cli"]
Librarian MCP'yi Gemini CLI içine yükleyin
$ gemini mcp add -s user librarian-cli uvx -- librarian-cliLibrarian MCP'yi Gemini settings.json içine yükleyin
~/.gemini/settings.json
{
"mcpServers": {
"librarian-cli": {
"command": "uvx",
"args": [
"librarian-cli"
]
}
}
}Yapılandırma
LIB_HOMELibrary root directory (default ./library)
| Ad | Açıklama | Sunucu |
|---|---|---|
| LIB_HOME | Library root directory (default ./library) |
Otomatik kontroller
Çalıştırıldı 14 Kas 2026Tam rapor →Otomatik kontrollerimizden geçti. Bu bir güvenlik denetimi değildir: kodu okuyun ve sunucuya ihtiyaç duyduğu en dar erişimi verin. Kontroller nasıl çalışır
- Kaynak deposu bağlantılı ve erişilebilirterobyte/librarian-cli is public and reachablegithub.com/terobyte/librarian-cli ↗Geçti
- Paket, bu depoyu kaynağı olarak gösteriyorlibrarian-cli names terobyte/librarian-cli as sourcepypi.org/project/librarian-cli/ ↗Geçti
- Derleme kökeni (Sigstore onayı)Sigstore attestation for librarian-clipypi.org/project/librarian-cli/ ↗Geçti
- Açık kaynak lisansı (OSI)MITspdx.org/licenses/MIT.html ↗Geçti
- Son bir yıl içinde commit veya sürüm mevcutLast commit or release 2026-09-01github.com/terobyte/librarian-cli ↗Geçti
- OpenSSF ScorecardKontrol edilmedi
- Paket adı popüler bir pakete yakın değilNo popular package one edit away from librarian-cliGeçti
- Pakette veya bağımlılıklarında kritik uyarı yok70 resolved dependencies checked; no critical advisoryosv.dev ↗Geçti
- Modele yönelik gizli talimat yok0 tool descriptions and the README read; no override phrases, credential paths or hidden charactersGeçti
- Yıkıcı araçlar etiketlenmişKontrol edilmedi
- Uzak uç nokta MCP el sıkışmasına yanıt veriyorKontrol edilmedi
📚 librarian
Turn any ebook into clean, token-counted Markdown chapters — let Claude read your bookshelf over MCP and catch it misquoting your books. Deterministic RAG: no embeddings, no network, no API keys.

Any input format — FB2, EPUB, DOCX, HTML, TXT/MD, text-layer PDF — becomes a directory of clean chapters with token counts. No network, no LLM, no randomness: the same input always produces byte-identical output.
Install
uv tool install librarian-cli
# or: pipx install librarian-cli
Offline contract: install and runtime need no network (the tokenizer's vocabulary is vendored in the package).
Quick start
lib ingest examples/*.epub
lib list
lib find curiouser
lib get <book-id> --budget 3000
Commands
| Command | Purpose |
|---|---|
lib ingest <files…> [--force] [--no-keep-source] [--config cfg.toml] [--verbose] |
Process books into the library; prints a file · id · status · score table. |
lib list [<book-id>] |
No argument — all books; with an id — that book's chapters (n, title, tokens, summary). |
lib get <book-id> <spec> |
Print chapters by range (1-3,7) to stdout. |
lib get <book-id> --budget N [--from K] |
Greedily print consecutive chapters from K while the token sum stays ≤ N. |
lib find <query> [--limit 10] [--book <id>] [--reindex] [--json] |
Full-text search across chapters and titles/authors library-wide (bm25, snippets, RU/EN stemming). |
lib info <book-id> |
JSON: book metadata + quality metrics. |
lib doctor [<book-id>] |
No id — books in review and broken directories; with id — that book's report. |
lib reingest --all [--config cfg.toml] [--verbose] |
Rebuild the library from source/ with the current code/config. |
lib rm <book-id> |
Delete a book and rebuild the index. |
lib serve [--library <path>] |
Stdio MCP server over the library. |
lib verify "quote" [--book ID] [--json] [--limit N] |
Check a quote against one book or attribute it across the library. |
Library root: --library <path> (or the LIB_HOME env var, default ./library). Data goes
to stdout, diagnostics to stderr. Exit codes: 0 success, 1 runtime error, 2 usage error.
Give Claude your bookshelf
librarian-cli ships a built-in stdio MCP server with 6 read-only tools — list_books,
list_chapters, find, get_chapters, book_info, verify_quote — so Claude can browse
the catalog, search it, pull chapters under a token budget, and check its own quotes against
the source on its own: deterministic RAG with no embeddings, no network, and no API keys.
Claude Code:
claude mcp add librarian --env LIB_HOME=$HOME/books -- uvx librarian-cli
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"librarian": {
"command": "uvx",
"args": ["librarian-cli"],
"env": { "LIB_HOME": "/path/to/books" }
}
}
}
Verify quotes
An MCP server that catches Claude misquoting your books.
lib verify "quote" checks whether a quote actually appears in your library, verbatim —
punctuation, case, ё/е, and markdown formatting don't count. Two modes:
- Book mode (
--book <id>): full scan of one book — "does this book actually say this?" Works without the search index. - Shelf mode (no
--book): attribution across the whole library via FTS5 candidates — "which book is this from?" The quote needs at least 5 significant words (stop words don't count), or the check is skipped withverdict: null.
lib verify "Рукописи не горят" --book bulgakov-master-i-margarita
lib verify "рукописи не горят никогда"
| verdict | meaning |
|---|---|
exact |
matches after normalization (punctuation/case/ё/typography don't count) |
close |
similarity ≥ 0.95 — near-exact, differences shown as a word-diff |
distorted |
similarity ≥ 0.75 — the right place, but the quote is misremembered |
not_found |
similarity < 0.75 — nothing like it in the book/library |
null |
check wasn't run: empty quote, or a short quote without --book |
Exit codes (grep-style semantics, a deliberate departure from the project's usual
"1 = runtime error" — see docs/MILESTONES.md deviation 38):
| exit | case | stdout |
|---|---|---|
| 0 | exact / close — quote confirmed |
full report / JSON |
| 1 | distorted / not_found — not confirmed |
full report / JSON |
| 1 | runtime error (unknown book id, no search index, locked index) | empty |
| 2 | usage error: empty/short quote (verdict: null), --limit < 1 |
empty (message on stderr) |
Script discriminator: exit 1 with non-empty stdout means "checked, not confirmed"; exit
1 with empty stdout means an error (diagnostics went to stderr instead). Exit 0
includes close — a strict CI gate must check verdict == "exact" in the --json
output, not the exit code alone.
Quality
Every book gets a score from five metrics (coverage, structure, garbage, encoding,
dehyphenation): ok (score ≥ 0.90, no hard triggers) — saved silently; review
(0.60 ≤ score < 0.90, or triggers present) — saved with a warning, details via
lib doctor <id>; failed (score < 0.60) — not saved. Scans and password-protected PDFs
honestly fail (OCR and DRM removal are out of scope).
Determinism
The pipeline has no network access, no LLM calls, and no randomness — the same input file
always produces byte-identical output. That makes ingestion reproducible and cacheable, and
it's what makes lib serve's RAG deterministic: no embeddings to drift, no model calls to
vary between runs.
Limitations
- PDF: works well on typographically normal books; complex layouts may land in
review. - DRM is not circumvented; source legality is the user's responsibility.
- Networked filesystems (NFS/SMB) are not supported (the advisory lock isn't reliable there).
- MOBI/DJVU and text-less scans are not supported (v3 candidates: OCR, calibre).
- CLI messages are currently in Russian; English output is planned.
lib verify: quotes spanning a chapter boundary are not supported (v1) — the best you'll get isdistortedon one half.lib verify:closeon a single-word replacement is realistic from ~150 characters of quote; shorter quotes with a replaced word honestly land indistorted— a third of a three-word quote really is a distortion.lib verifyshelf mode (no--book) needs the FTS5 search index; book mode (--book <id>) works without it in the CLI.lib serveas a whole still requires FTS5 — it syncs the index at startup regardless of which tool gets called.lib verifyin book mode scans the whole chapter text in pure Python; a long book can take a few seconds of CPU. The MCP tool runs it in a worker thread so it doesn't block the rest of the server.
Русская версия
See README.ru.md for the Russian documentation.
Librarian MCP soruları
Librarian MCP'yi Claude Code'a nasıl eklerim?
Terminalinizde claude mcp add librarian-cli -- uvx librarian-cli komutunu çalıştırın. Her projede kullanılabilir olması için --scope user ekleyin.
Librarian MCP'yi Cursor'a nasıl eklerim?
~/.cursor/mcp.json dosyasını açın ve yukarıdaki yükleme bölümünde gösterilen Cursor yapılandırmasını kullanarak sunucuyu mcpServers altına ekleyin.
Librarian internet bağlantısı veya API anahtarı gerektirir mi?
Hayır, herhangi bir ağ erişimi, LLM çağrısı veya API anahtarı gerektirmeden tamamen çevrimdışı çalışır.
Hangi e-kitap formatları destekleniyor?
Araç; FB2, EPUB, DOCX, HTML, TXT/MD ve metin katmanlı PDF formatlarını destekler.
Alıntı doğrulama nasıl çalışır?
Bir alıntının kütüphanenizde kelimesi kelimesine geçip geçmediğini kontrol eder; tam eşleşme, yakın, bozulmuş veya bulunamadı gibi sonuçlar sunar.
Çıktı tutarlı mı?
Evet, işleme hattı deterministiktir; yani aynı girdi her zaman bayt düzeyinde özdeş bir çıktı üretir.