MCP server for AI-assisted PDF reading with pagination, search, and page navigation.
Designed to let AI assistants read large documents without filling the context window from page 1 every time. The model can chunk through a book, jump to any section by keyword, and pick up exactly where it left off.
| Tool | Description |
|---|---|
list_documents |
List all documents in the configured directory |
get_document_info |
Get page count and file size without extracting text |
read_document |
Read a page range (default: 50-page chunks) |
search_document |
Keyword search — returns page numbers and context snippets |
Every read_document response includes a [Pages X–Y of Z total] header and a continuation hint so the model knows exactly where to call next.
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"documents": {
"command": "npx",
"args": ["-y", "@hanna84/mcp-document-reader", "--stdio", "--dir", "/path/to/your/docs"]
}
}
}No install needed — npx pulls the package on first run.
# docker-compose.yml
services:
mcp-document-reader:
image: node:22-alpine
working_dir: /app
command: node index.js
environment:
DOC_DIR: /docs
HTTP_PORT: "3000"
volumes:
- ./docs:/docs:ro
ports:
- "3000:3000"Register the SSE endpoint in your MCP gateway:
{ "url": "http://mcp-document-reader:3000/sse" }A GET /healthz endpoint is available for Docker healthchecks.
node index.js [options]
--dir <path> Directory to serve documents from (default: $DOC_DIR or cwd)
--port <n> HTTP port for SSE mode (default: $HTTP_PORT or 3000)
--stdio Use stdio transport instead of SSE
| Variable | Default | Description |
|---|---|---|
DOC_DIR |
. |
Document directory |
HTTP_PORT |
3000 |
SSE server port |
MCP_TRANSPORT |
— | Set to stdio to use stdio transport |
- PDF (
.pdf)
Node.js >= 18