I built an MCP server in Go that connects Libby (library ebooks/audiobooks), Hardcover (reading tracker), and Open Library (metadata) into one
conversational interface through Claude. The problem: I use three separate platforms to manage my reading life. Libby for borrowing, Hardcover for tracking, and I had no single view
of what I want to read next. Switching between apps to check availability, update status, or decide what to read was friction I wanted to
eliminate.
booklife-mcp exposes 27 tools over MCP stdio that let you:
- Search your library catalog and place holds from a conversation
- Sync returned Libby loans as "read" in Hardcover automatically
- Maintain a unified TBR list across Hardcover want-to-read, Libby holds, Libby tags, and physical books
- Get content-based recommendations using enriched theme/mood metadata
- Check "what's the best way to read this?" (library availability vs. buy)
Technical notes:
- Go, single binary, SQLite for local cache
- Hardcover via GraphQL, Libby via reverse-engineered OverDrive API, Open Library REST
- Progressive disclosure pattern — tools return summaries first, drill down on request
- Also ships as a Claude Code plugin with skills/slash commands
GitHub: https://github.com/andylbrummer/booklife-mcp
Docs: https://andylbrummer.github.io/booklife-mcp/