Nutrient PDF MCP Server
Enables low-level PDF object-tree inspection and debugging through natural language, with lazy loading for token efficiency.
README
Nutrient PDF MCP Server
A powerful Model Context Protocol server for LLM-driven PDF document analysis and exploration
Which MCP Server Should I Use?
| Server | Best for | Deployment | Core capabilities |
|---|---|---|---|
| Nutrient DWS MCP Server | Cloud document workflows | Nutrient-hosted API (API key) | Convert, OCR, redact, sign, extract, watermark, automation |
| Nutrient Document Engine MCP Server | Self-hosted document workflows | On-prem/private cloud | Document processing with deployment control and data residency |
| Nutrient PDF MCP Server | Low-level PDF inspection/debugging | Local Python runtime | Object-tree exploration, indirect-object resolution, structural analysis |
You are in the PDF MCP Server repo. Choose this when you need low-level PDF object-tree inspection/debugging rather than end-to-end workflow automation.
- Ecosystem overview: Nutrient AI Infrastructure
- Product landing page: Nutrient MCP Server
A Model Context Protocol (MCP) server for investigating PDF object trees with lazy loading support. This tool allows LLMs to efficiently explore PDF document structure without overwhelming token limits.
Features
- Lazy Loading: Explore PDF structure without loading entire object trees
- Path Navigation: Navigate through PDF objects using dot notation (e.g.,
Pages.Kids.0) - Selective Resolution: Resolve specific indirect objects on demand
- Token Efficient: Massive reduction in response sizes compared to full tree dumps
- Type Safe: Comprehensive type hints and error handling
Installation
Optional asdf setup
You'll need python and nodejs installed on your machine. You can optionally use asdf.
Finally install required tools with:
git clone https://github.com/PSPDFKit/nutrient-pdf-mcp-server.git
cd nutrient-pdf-mcp-server
asdf install
# Install pipx for Python
python -m pip install --user pipx
Proceed with the rest of the installation after that.
Quick Start
git clone https://github.com/PSPDFKit/nutrient-pdf-mcp-server.git
cd nutrient-pdf-mcp-server
make install-dev # Sets up development environment
For Claude Code CLI
Recommended: Build and Install
pip install build
make build
pipx install dist/nutrient_pdf_mcp-1.0.0-py3-none-any.whl
claude mcp add nutrient-pdf-mcp nutrient-pdf-mcp
If using asdf, you might need to configure pipx with the following before running:
export PIPX_DEFAULT_PYTHON=$(asdf which python)
pipx install dist/nutrient_pdf_mcp-1.0.0-py3-none-any.whl
Development Mode
make install-dev
claude mcp add nutrient-pdf-mcp "$(pwd)/venv/bin/python" -m pdf_mcp.server
Manual Configuration
{
"mcpServers": {
"nutrient-pdf-mcp": {
"command": "python",
"args": ["-m", "pdf_mcp.server"]
}
}
}
Available Tools
get_pdf_object_tree
Nutrient PDF MCP Server - Get JSON representation of PDF object tree with lazy loading.
Parameters:
pdf_path(required): Path to the PDF fileobject_id(optional): Specific object ID to retrieve (e.g., '1 0')path(optional): Object path to navigate (e.g., 'Pages.Kids.0')mode(optional): Parsing mode - 'lazy' (default) or 'full'
Examples:
{
"pdf_path": "document.pdf",
"mode": "lazy"
}
{
"pdf_path": "document.pdf",
"path": "Pages.Kids.0",
"mode": "lazy"
}
resolve_indirect_object
Nutrient PDF MCP Server - Resolve a specific indirect object by its object and generation numbers.
Parameters:
pdf_path(required): Path to the PDF fileobjnum(required): PDF object number (e.g., 3)gennum(optional): PDF generation number (defaults to 0)depth(optional): Resolution depth - 'shallow' (default) or 'deep'
Examples:
{
"pdf_path": "document.pdf",
"objnum": 3,
"gennum": 0,
"depth": "shallow"
}
Command Line Usage
# Run the server
make serve
# Or run with debug logging
make serve-debug
Architecture
Core Components
parser.py: Main PDF parsing logic with lazy loading supportserver.py: MCP server implementationtypes.py: Type definitions for PDF objects and responsesexceptions.py: Custom exception classes
Response Types
All PDF objects are serialized into a consistent JSON format:
{
"type": "dict",
"value": {
"/Type": { "type": "name", "value": "/Pages" },
"/Kids": {
"type": "array",
"value": [{ "type": "indirect_ref", "objnum": 2, "gennum": 0 }]
}
}
}
Token Efficiency
The lazy loading system provides massive token savings:
- Lazy mode: ~5-50 lines (minimal tokens)
- Shallow resolution: ~50-100 lines (reasonable tokens)
- Deep resolution: 500+ lines (use sparingly)
Examples
Exploring PDF Structure
- Get overview:
get_pdf_object_tree(path="document.pdf", mode="lazy") - Navigate to pages:
get_pdf_object_tree(path="document.pdf", path="Pages", mode="lazy") - Resolve specific page:
resolve_indirect_object(objnum=3, gennum=0, depth="shallow") - Deep dive when needed:
resolve_indirect_object(objnum=3, gennum=0, depth="deep")
Path Navigation Examples
"Pages"- Navigate to Pages object"Pages.Kids"- Get Kids array from Pages"Pages.Kids.0"- Get first page"Pages.Kids.0.MediaBox.2"- Get width from MediaBox array
Development
Quick Start
# Set up development environment
make install-dev
# Run all quality checks (format, lint, typecheck, test)
make quality
# Or run individual commands
make test # Run tests
make format # Format code
make lint # Run linter
make typecheck # Type checking
Project Structure
nutrient-pdf-mcp-server/
├── pdf_mcp/
│ ├── __init__.py
│ ├── server.py # MCP server
│ ├── parser.py # PDF parsing logic
│ ├── types.py # Type definitions
│ └── exceptions.py # Custom exceptions
├── tests/ # Test suite
├── res/ # Sample PDFs
├── pyproject.toml # Project configuration
└── README.md
Publishing to PyPI
# Build the package
make build
# Upload to test PyPI first
twine upload --repository testpypi dist/*
# Upload to production PyPI
twine upload dist/*
After publishing, users can install with:
pipx install nutrient-pdf-mcp
# or
pip install --user nutrient-pdf-mcp
Contributing
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Ensure code quality checks pass
- Submit a pull request
License
MIT License - see LICENSE file for details.
Related Projects
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。