pergamos
Servidor MCP do Calibre
Documentação
Pergamos
Pergamos é um servidor MCP somente leitura que permite ao Claude Desktop pesquisar e inspecionar uma biblioteca Calibre através do Calibre Content Server.
Requisitos
- macOS com Python 3.10 ou mais recente
- Calibre com o Content Server em execução
- O SDK oficial do MCP Python, instalado pela configuração do projeto abaixo
Inicie o Calibre Content Server em Compartilhar/conectar > Iniciar servidor de conteúdo. O endereço padrão é http://127.0.0.1:8080.
Instalação
cd /path/to/pergamos
python3 -m venv .venv
.venv/bin/python -m pip install -e .
Configurar o Claude Desktop
Adicione uma entrada de servidor ao arquivo de configuração do Claude Desktop, geralmente ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"pergamos-calibre": {
"command": "/path/to/pergamos/.venv/bin/pergamos",
"env": {
"CALIBRE_SERVER_URL": "http://127.0.0.1:8080"
}
}
}
}
Para um Content Server com autenticação, adicione CALIBRE_USERNAME e CALIBRE_PASSWORD ao mesmo objeto env. CALIBRE_REQUEST_TIMEOUT pode ser definido como um número positivo de segundos. Um prefixo de URL como http://127.0.0.1:8080/calibre é suportado.
Reinicie o Claude Desktop após alterar sua configuração.
Para as ferramentas RAG opcionais, adicione a variável de ambiente PERGAMOS_RAG_DIR se quiser que o armazenamento de vetores fique em outro lugar que não o diretório padrão .pergamos_index:
{
"mcpServers": {
"pergamos-calibre": {
"command": "/path/to/pergamos/.venv/bin/pergamos",
"env": {
"CALIBRE_SERVER_URL": "http://127.0.0.1:8080",
"PERGAMOS_RAG_DIR": "/path/to/pergamos/.pergamos_index"
}
}
}
}
Ferramentas
list_libraries: verifica o servidor e retorna o feed OPDS raiz.search_books: realiza uma pesquisa em toda a biblioteca Calibre nos campos de metadados indexados pelo Calibre, incluindo títulos, autores, tags, comentários e identificadores. Aceitaquery,limit(1-100) eoffset, e segue a paginação OPDS até o limite solicitado.get_book_details: retorna metadados e links de formatos disponíveis para um identificador de livro do Calibre.index_book_content: baixa um arquivo de livro selecionado, extrai o texto, divide-o em partes e armazena os embeddings para recuperação semântica.search_book_content: pesquisa as partes de texto indexadas para um ou mais IDs de livro usando uma consulta semântica.
O servidor não altera a biblioteca nem baixa arquivos. As URLs de formato são retornadas como metadados para que o Claude possa identificar as edições disponíveis.
A pesquisa do Content Server do Calibre é uma pesquisa de metadados. Ela não pesquisa o texto completo de arquivos EPUB, PDF ou outros arquivos de livro.
Exemplo de fluxo de trabalho
Este é o padrão recomendado para fazer RAG com uma biblioteca Calibre:
# 1) Discover likely books by metadata
search = {
"query": "distributed systems",
"limit": 5,
"offset": 0,
}
# 2) Inspect the chosen book and pick the format to index
book = {
"id": "42",
"title": "Distributed Systems",
"formats": [
{"format": "epub", "url": "http://127.0.0.1:8080/get/42/epub"},
],
}
# 3) Index the full text of the selected book
index_book_content(
book_id="42",
title="Distributed Systems",
download_url="http://127.0.0.1:8080/get/42/epub",
format_name="epub",
)
# 4) Run semantic search over the indexed text for that book
search_book_content(
query="What does the book say about consensus?",
book_ids=["42"],
k=5,
)
Na prática, o Claude Desktop pode chamar as ferramentas nessa ordem:
search_bookspara encontrar livros candidatosget_book_detailspara buscar os metadados exatos e URLs de formatoindex_book_contentpara adicionar o conteúdo do livro ao índice RAGsearch_book_contentpara responder consultas no estilo de perguntas sobre o texto indexado
Isso oferece recuperação de metadados mais recuperação de conteúdo semântico sem substituir a camada de pesquisa do Calibre.
Padrão RAG de camada dupla
Para RAG verdadeiro, mantenha o Pergamos como a camada de metadados/descoberta e adicione um indexador de conteúdo separado para os arquivos de livro reais. O servidor de metadados deve responder perguntas como "quais livros correspondem a este tópico?" enquanto a camada de conteúdo baixa o EPUB/PDF selecionado, extrai o texto, divide em partes, gera embeddings e armazena os vetores para pesquisa semântica.
Uma implementação inicial mínima está incluída em src/pergamos/rag/:
extractors.pylida com extração e divisão de textoindexer.pybaixa um livro, extrai texto e indexa embeddingssearch.pyexpõe um wrapper simples de pesquisa semântica
Instale os extras RAG opcionais com:
python3 -m pip install -e '.[rag]'
Isso mantém a camada de navegação da biblioteca somente leitura enquanto permite um pipeline de recuperação de texto completo sobre os mesmos metadados de livros.
Exemplos executáveis
O repositório inclui alguns exemplos prontos para execução em examples/:
examples/rag_example.py: exemplo completo de orquestração usando as ferramentas de metadados + conteúdo em sequência.examples/one_book_index.py: indexa um único livro no armazenamento de vetores local.
Execute-os com:
.venv/bin/python examples/rag_example.py
.venv/bin/python examples/one_book_index.py
Docker Compose
Uma pilha mínima pode ser iniciada com Docker Compose para desenvolvimento local:
docker compose up --build
Isso inicia:
pergamos: o servidor MCPcalibre: o servidor de conteúdo web do Calibre
A pilha usa um volume nomeado para o índice de vetores local e vincula o servidor de conteúdo do Calibre à porta 8080.
Você pode personalizar as variáveis de execução copiando o arquivo de ambiente de exemplo:
cp .env.example .env
Em seguida, edite .env com sua URL e credenciais locais do Calibre. O arquivo Compose também pode ser apontado para http://calibre:8080 se você quiser o nome do serviço conteinerizado em vez de uma URL vinculada ao host.
Comandos comuns
Use o Makefile incluído para as principais tarefas do projeto:
make install
make test
make run
make docker-up
make docker-down
Execução manual
O Claude Desktop se comunica com o servidor via stdio. Para executá-lo diretamente para diagnósticos:
CALIBRE_SERVER_URL=http://127.0.0.1:8080 .venv/bin/pergamos
Não imprima mensagens de diagnóstico no stdout porque o stdout é reservado para o tráfego do protocolo MCP.
Segurança
Prefira um servidor Calibre local vinculado a 127.0.0.1. Se o servidor estiver acessível por uma rede, habilite a autenticação do Calibre e HTTPS. Mantenha as credenciais na configuração de ambiente do Claude Desktop e não faça commit desse arquivo.
Lista de verificação de segurança para commits
Antes de criar um commit inicial ou enviar um PR, confirme que:
.env,.env.locale qualquer arquivo de credenciais estão excluídos do git- dados gerados como
.pergamos_index/e caches locais são ignorados - a documentação usa exemplos neutros como
/path/to/pergamosem vez de caminhos específicos de máquina - URLs, nomes de usuário e senhas reais do Calibre nunca são codificados no repositório
- arquivos de configuração de exemplo são placeholders seguros, não configuração local ativa
Um comando rápido de revisão é:
git status --short
git ls-files .env .pergamos_index .venv .pytest_cache
Desenvolvimento
.venv/bin/python -m pip install pytest
.venv/bin/python -m pytest -q