PDF Manipulation MCP Server
Enables comprehensive PDF operations including text/image manipulation, annotations, form fields, page merging/splitting/cropping, and metadata management using PyMuPDF.
README
PDF Manipulation MCP Server
📚 This project is entirely based on PyMuPDF - a powerful Python library for PDF manipulation. Please check out the official PyMuPDF documentation to learn more about its extensive capabilities!
A study project implementing a Model Context Protocol (MCP) server that provides comprehensive PDF manipulation capabilities using the official MCP FastMCP framework. This project focuses on direct PDF editing and manipulation features for learning and experimentation purposes.
Quick Start: Run directly with uv run pdf-manipulation-mcp-server (like npx for Node.js packages)
Features
- Text Operations: Add, replace, and manipulate text in PDFs
- Image Operations: Add images and extract images from PDFs
- Annotations: Add various types of annotations (text, highlight, underline, etc.)
- Form Fields: Add and fill form fields
- Page Manipulation: Merge, split, rotate, delete, and crop pages
- Auto-Crop: Automatically detect and crop content boundaries
- Page Combination: Combine multiple pages into single pages with various layouts
- Metadata: Get and set PDF metadata
Quick Start
Prerequisites
- Python 3.10+
- pip (comes with Python)
📖 For detailed installation instructions, see INSTALL.md
Installation
Option 1: Run Directly with UV (Like npx)
# Run without installation (fastest)
uv run pdf-manipulation-mcp-server
Option 2: Install from PyPI
# Install the package
pip install pdf-manipulation-mcp-server
# Run the server
pdf-mcp-server
Option 3: Install from GitHub
# Install directly from GitHub
pip install git+https://github.com/yourusername/pdf-manipulation-mcp-server.git
# Run the server
pdf-mcp-server
Option 4: Clone and Install Locally
# Clone the repository
git clone https://github.com/yourusername/pdf-manipulation-mcp-server.git
cd pdf-manipulation-mcp-server
# Install in development mode
pip install -e .
# Run the server
pdf-mcp-server
Option 5: Using UV (Development)
# Clone the repository
git clone https://github.com/yourusername/pdf-manipulation-mcp-server.git
cd pdf-manipulation-mcp-server
# Install dependencies with UV
uv pip install mcp pymupdf
# Test the server
uv run pytest tests/ -v
# Run the server
uv run python server.py
Available Tools (15 Total)
Text Operations
pdf_add_text- Add text to a PDF at specified positionpdf_replace_text- Replace text in a PDF document
Image Operations
pdf_add_image- Add an image to a PDFpdf_extract_images- Extract all images from a PDF
Annotations
pdf_add_annotation- Add annotations to a PDF (text, highlight, underline, strikeout)
Form Fields
pdf_add_form_field- Add form fields to a PDF (text, checkbox, radio, combobox)pdf_fill_form- Fill form fields in a PDF with values
Page Manipulation
pdf_merge_files- Merge multiple PDF files into onepdf_combine_pages_to_single- Combine multiple pages from a PDF into a single pagepdf_split- Split a PDF into individual pages or page rangespdf_rotate_page- Rotate a page in a PDF (90, 180, 270 degrees)pdf_delete_page- Delete a page from a PDFpdf_crop_page- Crop a page in a PDF with coordinate supportpdf_auto_crop_page- Automatically crop pages by detecting content boundaries
Metadata
pdf_get_info- Get metadata and information about a PDFpdf_set_metadata- Set metadata for a PDF
How to Configure with Cursor IDE
Step 1: Install the Server
Follow the installation steps above to set up the MCP server.
Step 2: Configure Cursor IDE
Add this configuration to your Cursor settings:
Option A: Using an MCP config and uvx:
Create ~/.cursor/mcp_config.json:
{
"mcpServers": {
"pdf-manipulation": {
"command": "uvx",
"args": ["--from", "pdf-manipulation-mcp-server", "pdf-mcp-server"]
}
}
}
Option B: Using MCP Config File from a local installation
Create ~/.cursor/mcp_config.json:
{
"mcpServers": {
"pdf-manipulation": {
"command": "uv",
"args": ["run", "python", "server.py"],
"cwd": "/path/to/pdf-manipulation-mcp-server"
}
}
}
Option C: Using Cursor Settings UI
- Open Cursor Settings (
Cmd+,on Mac,Ctrl+,on Windows/Linux) - Search for "MCP" in settings
- Add this configuration:
{
"mcp.servers": {
"pdf-manipulation": {
"command": "uv",
"args": ["run", "python", "server.py"],
"cwd": "/path/to/pdf-manipulation-mcp-server"
}
}
}
Step 3: Restart Cursor IDE
After adding the configuration, restart Cursor IDE to load the MCP server.
Step 4: Test the Integration
- Open a new chat in Cursor
- Try these commands:
- "Convert this PDF to Markdown"
- "Add text to a PDF"
- "Extract images from a PDF"
- "Merge multiple PDFs"
Usage Examples
Basic PDF Auto-Crop Workflow
# Automatically crop PDF pages to remove margins
result = await pdf_auto_crop_page(
pdf_path="document.pdf",
padding=10.0
)
# Crop specific page with coordinates
result = await pdf_crop_page(
pdf_path="document.pdf",
page_number=0,
x0=50, y0=50, x1=400, y1=300,
coordinate_mode="bbox"
)
Adding Text to PDF
result = await pdf_add_text(
pdf_path="document.pdf",
page_number=0,
text="New text content",
x=100,
y=100,
font_size=14,
color=[1, 0, 0] # Red color
)
Working with Images
# Add image to PDF
result = await pdf_add_image(
pdf_path="document.pdf",
page_number=0,
image_path="image.png",
x=100,
y=200,
width=200,
height=150
)
# Extract all images from PDF
result = await pdf_extract_images(
pdf_path="document.pdf",
output_dir="extracted_images"
)
Page Manipulation
# Merge multiple PDFs
result = await pdf_merge_files(
pdf_paths=["doc1.pdf", "doc2.pdf", "doc3.pdf"]
)
# Combine pages from a single PDF
result = await pdf_combine_pages_to_single(
pdf_path="document.pdf",
page_numbers=[0, 1, 2],
layout="vertical"
)
# Split PDF into individual pages
result = await pdf_split(
pdf_path="document.pdf",
output_dir="split_pages"
)
# Rotate a page
result = await pdf_rotate_page(
pdf_path="document.pdf",
page_number=0,
rotation=90
)
Development
Project Structure
pdf-manipulation-mcp-server/
├── pdf_server.py # Main MCP server implementation
├── server.py # Entry point for UV
├── test_mcp_server.py # Test script
├── pyproject.toml # Project configuration
├── install.sh # Installation script (Mac/Linux)
├── install.bat # Installation script (Windows)
└── README.md # This file
Running Tests
# Test the MCP server
uv run python test_mcp_server.py
# Run the server
uv run python server.py
Dependencies
mcp- Official MCP SDK for Pythonpymupdf- Core PDF manipulation librarypytest- Testing framework (dev dependency)pytest-asyncio- Async testing support (dev dependency)
File Safety
All operations create new files with timestamps to avoid overwriting originals. Output files follow the pattern: {original_name}_{operation}_{timestamp}.pdf
Error Handling
The server includes comprehensive error handling:
- Validates PDF files before operations
- Checks page numbers and coordinates
- Provides clear error messages
- Handles missing files gracefully
- Catches and reports PyMuPDF exceptions
Troubleshooting
Common Issues
-
"No tools" in Cursor settings: This is normal! Tools appear in the chat interface, not in settings.
-
UV not found: Install UV first:
curl -LsSf https://astral.sh/uv/install.sh | sh -
Python version error: UV will automatically install Python 3.11+ if needed.
-
Dependencies not found: Make sure you're using UV:
uv pip install mcp pymupdf
Debug Mode
To run the server in debug mode:
uv run python server.py --debug
Contributing
This is a study project, but contributions are welcome! If you'd like to contribute:
- Fork the repository
- Create a feature branch
- Make your changes
- Test with
uv run pytest tests/ -v - Submit a pull request
Study Project Notes
This project was created as a learning exercise to explore:
- Model Context Protocol (MCP) server development
- PDF manipulation using PyMuPDF
- FastMCP framework implementation
- Automated testing with pytest
- Content detection and cropping algorithms
License
This project is open source and available under the MIT License.
Support
For issues and questions:
- Check the troubleshooting section above
- Review the test output:
uv run python test_mcp_server.py - Check Cursor logs for MCP errors
- Open an issue on GitHub
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。