Skip to main content
Glama
README.md
# calibre-mcp

MCP server for [Calibre](https://calibre-ebook.com/) book library management. Designed for use with [Claude Code](https://docs.anthropic.com/en/docs/claude-code).

Talks to your local Calibre library via `calibredb` CLI — no Content Server needed.

## Tools

| Tool | Description |
|------|-------------|
| `search_books` | Search books using Calibre's query syntax (`title:`, `author:`, `series:`, etc.) |
| `get_book_info` | Get full metadata for a book by ID |
| `get_epub_path` | Get absolute EPUB file path (for downstream processing) |
| `list_series` | List all books in a series, sorted by index |
| `get_custom_columns` | List custom columns defined in the library |
| `set_custom_column` | Set or append custom column values for a book |
| `set_metadata` | Edit standard metadata fields (title, authors, tags, series, etc.) |

## Installation

### Prerequisites

- [Calibre](https://calibre-ebook.com/) installed with `calibredb` in PATH
- [uv](https://docs.astral.sh/uv/) (for `uvx`)

### Claude Code (from GitHub)

```bash
claude mcp add calibre -- uvx --from git+https://github.com/xmkevinchen/calibre-mcp.git calibre-mcp
```

Add `-s user` to make it available across all projects:

```bash
claude mcp add -s user calibre -- uvx --from git+https://github.com/xmkevinchen/calibre-mcp.git calibre-mcp
```

Or add to your project `.mcp.json` (project-level only):

```json
{
  "mcpServers": {
    "calibre": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/xmkevinchen/calibre-mcp.git", "calibre-mcp"],
      "env": {
        "CALIBRE_LIBRARY_PATH": "/path/to/Calibre Library"
      }
    }
  }
}
```

### Claude Code (local development)

```bash
claude mcp add calibre -- uvx --from /path/to/calibre-mcp calibre-mcp
```

### Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `CALIBRE_LIBRARY_PATH` | Path to Calibre library directory | `~/Calibre Library` |
| `CALIBREDB_PATH` | Path to `calibredb` binary | auto-detected via PATH |

## Usage Examples

Search for a book:
```
search_books("title:pirates past noon")
```

Get EPUB path for reading:
```
get_epub_path(247)  # returns /Users/you/Calibre Library/Author/Book (247)/book.epub
```

Browse a series:
```
list_series("Magic Tree House")
```

## Updating

`uvx` caches installed packages. To pull the latest version:

```bash
uvx --reinstall --from git+https://github.com/xmkevinchen/calibre-mcp.git calibre-mcp
```

Then restart Claude Code to pick up the changes.

## Troubleshooting

**`calibredb not found`** — Make sure Calibre is installed and `calibredb` is in your PATH. On macOS, Calibre installs CLI tools to `/Applications/calibre.app/Contents/MacOS/`. Add it to PATH or set `CALIBREDB_PATH`.

**`claude mcp add` doesn't work** — Use `add-json` instead:

```bash
claude mcp add-json -s user calibre '{"command":"uvx","args":["--from","git+https://github.com/xmkevinchen/calibre-mcp.git","calibre-mcp"],"env":{"CALIBRE_LIBRARY_PATH":"/path/to/Calibre Library"}}'
```

Or create `.mcp.json` manually in your project root (see above).

## Roadmap

- [x] Search and retrieval (`search_books`, `get_book_info`, `get_epub_path`, `list_series`)
- [x] Custom columns and metadata (`get_custom_columns`, `set_custom_column`, `set_metadata`)

## License

MIT

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: reading vs writing, metadata vs custom columns, search vs series listing. No overlap.

Naming Consistency5/5

All tool names use verb_noun pattern (get_, list_, search_, set_) consistently, with clear imperative verbs.

Tool Count5/5

7 tools is well-scoped for a Calibre library server, covering search, read, and write operations without bloat.

Completeness4/5

Covers search, read metadata, get file path, list series, set metadata, manage custom columns. Missing delete or create book operations, but core workflows are covered.

Maintenance

ActivityInactive
ResponsivenessNo issues