By mthomps4
Search, browse, and research your personal ebook library from Claude Code. Provides /bw (search), /bw-research (deep research), /bw-read (browse), and /bw-ingest (add books) slash commands.
This skill should be used when the user asks about Elixir, Phoenix, LiveView, Ecto, OTP, GenServer, WebRTC, LiveKit, Vim, Tailwind CSS, or any programming topic that might be covered by their personal technical book library. Also use when the user asks "what does the book say about", "check my books", "look it up in my library", or references a specific book title.
Interactively add books to the Bookworm library. Shows pending books, ingests selected files, and confirms results.
Browse and read a specific book from the Bookworm library. Shows table of contents and lets you navigate chapters.
Deep multi-pass research across the Bookworm ebook library. Use when you need a thorough literature review, synthesis across multiple books, or comprehensive coverage of a topic.
Search the Bookworm ebook library for relevant passages and guidance. Use when you need to look up best practices, patterns, or reference material from indexed technical books.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
A local MCP server that turns your ebook library into a searchable knowledge base. Drop books into a folder, run ingest, and Claude Code automatically searches relevant passages when it needs reference material.
Supports PDF, EPUB, MOBI, Markdown, plain text, and HTML. Runs entirely locally -- no external API required.
git clone <repo-url> && cd BookWorm
python -m venv .venv && source .venv/bin/activate
pip install -e .
This installs the bookworm CLI and all dependencies (pymupdf, chromadb, sentence-transformers, etc). First run will download the embedding model (~80MB).
Copy or symlink books into the inbox:
cp ~/Books/clean-code.epub books/inbox/
cp ~/Books/designing-data-intensive-apps.pdf books/inbox/
Supported formats: EPUB, PDF, MOBI, Markdown (.md), plain text (.txt), HTML (.html/.htm)
Duplicate formats: If you have the same book as clean-code.pdf, clean-code.epub, and clean-code.mobi, only add one to the inbox. Indexing the same book in multiple formats produces duplicate search results.
When choosing which format to keep, prefer in this order:
| Priority | Format | Why |
|---|---|---|
| 1st | EPUB | Cleanest text extraction, chapter boundaries from TOC, smallest files |
| 2nd | Good with TOC-based chapter detection; OCR fallback for scanned pages | |
| 3rd | MOBI | Gets converted to EPUB internally -- if you have the EPUB, use that instead |
| 4th | Markdown | Split on heading levels (# ## ###) |
| 5th | HTML | Split on heading elements (h1/h2/h3), extracts title and author meta |
| 6th | TXT | Detects chapter headings or falls back to fixed-size sections |
bookworm ingest
This scans books/inbox/, extracts text, chunks it, generates embeddings, and stores everything in a local ChromaDB database. You'll see a progress bar for each book.
Verify it worked:
bookworm stats # How many books/chunks are indexed
bookworm list # Table of all indexed books
Test a search from the command line:
bookworm search "error handling best practices"
bookworm search "dependency injection" --book "Clean Code" --top-k 3
Add the alias to your shell config so you can run bookworm from anywhere:
# ~/.zshrc or ~/.bashrc
alias bookworm="$HOME/Code/BookWorm/.venv/bin/bookworm"
Then reload: source ~/.zshrc
BookWorm runs as an MCP server -- Claude Code spawns it as a local subprocess and communicates over stdio.
Add the MCP config to one of these locations:
| Scope | File | When to use |
|---|---|---|
| Global (all projects) | ~/.mcp.json | You want your library everywhere |
| Project-only | <project>/.mcp.json | Scoped to one codebase |
{
"mcpServers": {
"bookworm": {
"command": "/absolute/path/to/BookWorm/.venv/bin/python",
"args": ["-m", "library_mcp.server"],
"cwd": "/absolute/path/to/BookWorm",
"env": {
"PYTHONPATH": "/absolute/path/to/BookWorm/src"
}
}
}
}
Replace /absolute/path/to/BookWorm with the actual path on your machine. A template is provided in claude-code-config.json.
Restart the MCP server by running /mcp in Claude Code and selecting the bookworm server to restart, or start a new session.
BookWorm includes a Claude Code plugin with slash commands for interactive library use.
Quick start (load for one session only):
claude --plugin-dir /path/to/BookWorm
Permanent install — add these two entries to ~/.claude/settings.json:
{
"extraKnownMarketplaces": {
"bookworm-local": {
"source": {
"source": "directory",
"path": "/absolute/path/to/BookWorm"
}
}
},
"enabledPlugins": {
"bookworm@bookworm-local": true
}
}
Replace /absolute/path/to/BookWorm with the actual path on your machine. Start a new Claude Code session to pick up the plugin (a simple restart is all it takes — no separate MCP restart needed either, since both the MCP server and plugin load on session start).
By default, Claude Code will prompt for permission each time it calls a Bookworm MCP tool. Since these are all read-only operations against your local library, you can auto-allow them. Add this to ~/.claude/settings.json:
{
"permissions": {
"allow": [
"mcp__bookworm__list_books",
"mcp__bookworm__search_library",
"mcp__bookworm__get_chapter",
"mcp__bookworm__list_sections",
"mcp__bookworm__get_stats",
"mcp__bookworm__ingest_path",
"mcp__bookworm__remove_book"
]
}
}
All three snippets (MCP server, plugin registration, and permissions) are available in claude-code-config.json for easy reference.
npx claudepluginhub mthomps4/bookworm --plugin bookwormSearch your local documents with natural language. Index folders of PDFs, Word docs, markdown, and more — then ask questions in English or German and get answers with source citations.
Create and review Readwise highlights; save articles to Reader; triage your reading queue — all from Claude Code.
LightRAG-based PDF document indexing and semantic search for research workflows
LLM-maintained knowledge base skill — structured wiki with Obsidian, milestone-based source clustering, proactive write-back, and autonomous lint
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Frontend design skill for UI/UX implementation