io.github.Xvvln/pdf-reader-mcp
pdf-reader-mcp
一个用于读取和分析 PDF 文件的 MCP 服务器。它可以为支持 MCP(Model Context Protocol)的客户端提供 PDF 文本、页面图片、表格、链接、批注、目录、元数据和基础文本统计。
A PDF-focused MCP server for extracting text, rendered pages, tables, links, annotations, outlines, metadata, and text statistics from PDF files.
Package name
GitHub repository:
pdf-reader-mcpMCP Registry name:
io.github.Xvvln/pdf-reader-mcpPyPI package:
pdf-insight-mcpCLI commands:
pdf-reader-mcpandpdf-insight-mcp
pdf-reader-mcp is the project name. The PyPI package is published as pdf-insight-mcp because the pdf-reader-mcp package name is not available on PyPI.
Features
Tool | What it does |
| Read document metadata, page count, file size, and encryption status. |
| Extract text from selected pages with page and character limits. |
| Render selected pages as base64-encoded images. |
| Read bookmarks and outline entries. |
| Search text and return per-match page context. |
| Extract structured tables when PyMuPDF can detect them. |
| Extract embedded PDF images. |
| Inspect one page's size, text, images, links, and rotation. |
| Extract external URLs and internal page jumps. |
| Read comments, highlights, and annotation metadata. |
| Compute text, line, paragraph, and scan-likelihood stats. |
| Compare text similarity between two pages. |
Quick start
Install uv if you do not already have it:
curl -LsSf https://astral.sh/uv/install.sh | shRun the server directly from PyPI:
uvx pdf-insight-mcpOr install it first:
python -m pip install pdf-insight-mcp
pdf-reader-mcpMCP client configuration
Use the published PyPI package:
{
"mcpServers": {
"pdf-reader": {
"command": "uvx",
"args": ["pdf-insight-mcp"]
}
}
}Use a local checkout for development:
{
"mcpServers": {
"pdf-reader": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/pdf-reader-mcp",
"run",
"pdf-reader-mcp"
]
}
}
}Replace /absolute/path/to/pdf-reader-mcp with the absolute path to this repository on your machine.
Common usage
Ask your MCP client to call tools with an absolute PDF path. Example requests:
Read /Users/me/Documents/report.pdf as text.
Search /Users/me/Documents/report.pdf for "baseline characteristics".
Render pages 1-3 of /Users/me/Documents/report.pdf as images.
Extract links and annotations from /Users/me/Documents/review.pdf.For large PDFs, prefer small page ranges first. For scanned or layout-sensitive PDFs, use read_pdf_as_images with a small pages range and moderate dpi.
Limits and behavior
read_pdf_as_textdefaults to at most 50 pages and 200000 returned characters.read_pdf_as_imagesrejects requests above 20 pages.read_pdf_as_imagesdefaults to an overall image payload cap of about 20 MB.extract_pdf_imagesreturns at most 20 embedded images but reports the actual detected total.Encrypted PDFs are rejected unless they are already accessible without a password.
Scanned PDFs may have little or no extractable text. Use image rendering or OCR outside this server when needed.
Development
Install dependencies:
uv sync --extra devRun tests:
uv run pytest -qBuild the package:
uv build
uvx twine check dist/*Run the local server:
uv run pdf-reader-mcpRelease
Releases are published through GitHub Actions.
Before the first release, configure PyPI Trusted Publishing with:
PyPI project name: pdf-insight-mcp
Owner: Xvvln
Repository name: pdf-reader-mcp
Workflow filename: publish.yml
Environment name: leave emptyThen release by bumping versions in pyproject.toml and server.json, committing the change, and pushing a version tag:
git tag vX.Y.Z
git push origin main --tagsThe Publish workflow runs tests, builds the Python package, publishes to PyPI, authenticates to the MCP Registry with GitHub OIDC, and publishes server.json.
Tech stack
Python 3.10+
MCP Python SDK
PyMuPDF
uv
pytest
License
MIT