Librarian について
Librarianは、電子書籍をMarkdownに変換するオフラインのパイプライン兼コマンドラインツールです。検索可能でトークン数付きの蔵書を必要とする読者やAIシステム向けで、埋め込みやネットワーク接続なしに章の取得と引用確認を行う決定論的なMCPツールを備えます。
主な機能
- 01電子書籍を整形済みMarkdownの章に変換
- 02トークン数の計測と予算内での章取得
- 03蔵書全体の全文検索
- 04引用と出典の確認
- 05ネットワーク不要の決定論的な処理
活用シーン
- 01AIを使った読書向けに電子書籍を整理
- 02トークン予算内で章を取得
- 03引用が原書と一致するか確認
MCP 対応
標準入出力のMCPサーバーが、書籍・章の一覧、検索、章の取得、書籍情報の確認、引用検証を行う読み取り専用ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
📚 librarian
あらゆる電子書籍を、トークン数をカウントした読みやすい Markdown の章に変換します。MCP 経由で Claude に本棚を読ませ、本の引用を誤っていないか確認できます。決定論的な RAG です。埋め込みも、ネットワークも、API キーも不要です。

どの入力形式でも、FB2、EPUB、DOCX、HTML、TXT/MD、テキストレイヤー付き PDF から、トークン数をカウントした読みやすい章のディレクトリを作成します。ネットワークも、LLM も、ランダム性もありません。同じ入力からは常にバイト単位で同一の出力が生成されます。
インストール
uv tool install librarian-cli
# or: pipx install librarian-cli
オフライン利用の保証:インストール時も実行時もネットワークは不要です(トークナイザーの語彙はパッケージに同梱されています)。
クイックスタート
lib ingest examples/*.epub
lib list
lib find curiouser
lib get <book-id> --budget 3000
コマンド
| コマンド | 用途 |
|---|---|
lib ingest <files…> [--force] [--no-keep-source] [--config cfg.toml] [--verbose] | 書籍をライブラリに取り込みます。ファイル・ID・ステータス・スコアの表を出力します。 |
lib list [<book-id>] | 引数なしの場合はすべての書籍を表示し、ID を指定した場合はその書籍の章(番号、タイトル、トークン数、概要)を表示します。 |
lib get <book-id> <spec> | 範囲(1-3,7)で指定した章を標準出力に表示します。 |
lib get <book-id> --budget N [--from K] | トークン数の合計が N 以下に収まる間、K から連続する章を貪欲に選んで表示します。 |
lib find <query> [--limit 10] [--book <id>] [--reindex] [--json] | ライブラリ全体の章、タイトル、著者を全文検索します(bm25、スニペット、RU/EN のステミング)。 |
lib info <book-id> | JSON 形式で書籍のメタデータと品質指標を表示します。 |
lib doctor [<book-id>] | ID を指定しない場合はレビューが必要な書籍と破損したディレクトリを表示し、ID を指定した場合はその書籍のレポートを表示します。 |
lib reingest --all [--config cfg.toml] [--verbose] | 現在のコードと設定を使って、source/ からライブラリを再構築します。 |
lib rm <book-id> | 書籍を削除してインデックスを再構築します。 |
lib serve [--library <path>] | ライブラリ上で stdio MCP サーバーを起動します。 |
lib verify "quote" [--book ID] [--json] [--limit N] | 1 冊の書籍に照らして引用を確認するか、ライブラリ全体から出典を特定します。 |
ライブラリのルート:--library <path>(または LIB_HOME 環境変数。既定値は ./library)。データは標準出力に、診断情報は標準エラー出力に送られます。終了コード:0 は成功、1 は実行時エラー、2 は使用方法のエラーです。
Claude に本棚を読ませる
librarian-cli には、読み取り専用ツールを 6 つ備えた stdio MCP サーバーが組み込まれています。list_books、list_chapters、find、get_chapters、book_info、verify_quote を使って、Claude はカタログを閲覧し、検索し、トークン数の上限内で章を取得し、自分の引用を原文と照合できます。埋め込み、ネットワーク、API キーを使わない決定論的な RAG です。
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" }
}
}
}
引用を検証する
Claude が書籍の引用を誤って伝えていないかを検出する MCP サーバーです。
lib verify "quote" は、引用がライブラリ内に実際にそのまま記載されているかを確認します。
句読点、大文字と小文字、ё/е、Markdown の書式は判定に影響しません。モードは 2 つあります。
- 書籍モード(
--book <id>):1 冊の書籍を全文スキャンします。「この書籍には実際にこう書かれているか?」を確認します。検索インデックスがなくても動作します。 - 書棚モード(
--bookなし):FTS5 の候補を使ってライブラリ全体から出典を探します。「これはどの書籍からの引用か?」を確認します。引用には重要な語が少なくとも 5 語必要です(ストップワードは数えません)。満たさない場合、判定はスキップされ、verdict: nullになります。
lib verify "Рукописи не горят" --book bulgakov-master-i-margarita
lib verify "рукописи не горят никогда"
| 判定 | 意味 |
|---|---|
exact | 正規化後に一致します(句読点、大文字と小文字、ё、タイポグラフィは判定に影響しません) |
close | 類似度 ≥ 0.95 — ほぼ完全に一致し、差異は単語単位の差分で表示されます |
distorted | 類似度 ≥ 0.75 — 該当箇所は正しいものの、引用の記憶に誤りがあります |
not_found | 類似度 < 0.75 — 書籍/ライブラリ内に似た箇所がありません |
null | チェックは実行されていません。引用が空、または --book を指定していない短い引用です |
終了コード(grep 形式の仕様です。プロジェクトで通常使われる「1 = 実行時エラー」とは意図的に異なります。詳細は
docs/MILESTONES.md の逸脱 38 を参照してください)。
| 終了コード | ケース | 標準出力 |
|---|---|---|
| 0 | exact / close — 引用を確認 | 完全なレポート/JSON |
| 1 | distorted / not_found — 引用を確認できず | 完全なレポート/JSON |
| 1 | 実行時エラー(不明な書籍 ID、検索インデックスなし、インデックスがロック中) | 空 |
| 2 | 使用方法のエラー:引用が空/短すぎる(verdict: null)、--limit < 1 | 空(メッセージは標準エラー出力) |
スクリプトでの判別方法:標準出力が空でない状態で終了コードが 1 の場合は「チェック済み、未確認」です。標準出力が空の状態で終了コードが 1 の場合はエラーです(診断情報は標準エラー出力に出力されます)。終了コード 0 には close も含まれます。厳密な CI ゲートでは、終了コードだけでなく、--json の出力で verdict == "exact" を確認する必要があります。
品質
各書籍は 5 つの指標(網羅性、構造、ゴミ、文字エンコーディング、ハイフン除去)に基づいてスコアが付けられます。ok(スコア ≥ 0.90、重大なトリガーなし)は通知なしで保存されます。review(0.60 ≤ スコア < 0.90、またはトリガーあり)は警告とともに保存され、詳細は lib doctor <id> で確認できます。failed(スコア < 0.60)は保存されません。スキャン画像の PDF やパスワード保護された PDF は、正直に失敗します(OCR と DRM の解除は対象外です)。
決定性
パイプラインはネットワークにアクセスせず、LLM を呼び出さず、乱数も使いません。同じ入力ファイルからは常にバイト単位で同一の出力が生成されます。そのため、取り込みを再現可能かつキャッシュ可能にできます。また、lib serve の RAG が決定的になるのもこのためです。変動する埋め込みも、実行ごとに結果が変わるモデル呼び出しもありません。
制限事項
- PDF:一般的な組版の書籍では良好に動作しますが、複雑なレイアウトでは
reviewになることがあります。 - DRM は回避しません。ソースの合法性はユーザーの責任です。
- ネットワークファイルシステム(NFS/SMB)はサポートされていません(アドバイザリーロックの信頼性が確保できないためです)。
- MOBI/DJVU およびテキストのないスキャン画像はサポートされていません(v3 の候補:OCR、calibre)。
- CLI のメッセージは現在ロシア語です。英語出力は今後対応予定です。
lib verify:章をまたぐ引用はサポートされていません(v1)。得られるのは、いずれか片方の章に対するdistorted判定までです。lib verify:単語 1 つの置き換えをcloseと判定するには、引用が約 150 文字以上必要です。単語が置き換えられた短い引用は、正確にdistortedになります。3 語の引用の 3 分の 1 が変わっている場合、実際に引用の内容が変わっているためです。lib verifyの書棚モード(--bookなし)には FTS5 検索インデックスが必要です。書籍モード(--book <id>)は CLI であればインデックスなしで動作します。ただし、lib serve全体では引き続き FTS5 が必要です。呼び出されるツールにかかわらず、起動時にインデックスを同期するためです。lib verifyの書籍モードでは、Python のみを使って章のテキスト全体をスキャンします。長い書籍では CPU 処理に数秒かかることがあります。MCP ツールはワーカースレッドで実行されるため、サーバーのほかの処理を妨げません。
ロシア語版
ロシア語のドキュメントについては、README.ru.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。