PDF Manipulation

PDF Manipulation

andr3medeiros

Provides comprehensive PDF editing and manipulation capabilities through PyMuPDF. Lets you edit text, add images, manage forms, split/merge documents, and handle annotations directly in PDF files.

Provides comprehensive PDF processing capabilities through PyMuPDF, including text operations, page manipulation, image handling, form field management, annotation support, and metadata editing with intelligent auto-cropping and timestamped output files for document automation workflows.

5257 views4Local (stdio)

What it does

  • Add and replace text in PDFs
  • Extract and insert images
  • Split and merge PDF documents
  • Fill and create form fields
  • Add annotations and highlights
  • Combine multiple pages into single layouts

Best for

Document automation workflowsPDF form processing and fillingBatch PDF editing and manipulationContent extraction and reorganization
Built on PyMuPDF libraryAuto-cropping with intelligent boundariesTimestamped output files

About PDF Manipulation

PDF Manipulation is a community-built MCP server published by andr3medeiros that provides AI assistants with tools and capabilities via the Model Context Protocol. Automate PDF tasks using PyMuPDF: text, image, form, annotation & metadata handling—ideal for powder diffraction file ma It is categorized under productivity. This server exposes 16 tools that AI clients can invoke during conversations and coding sessions.

How to install

You can install PDF Manipulation in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.

License

PDF Manipulation is released under the MIT license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.

Tools (16)

pdf_add_text

Add text to a PDF at a specified position.

pdf_replace_text

Replace text in a PDF document.

pdf_add_image

Add an image to a PDF.

pdf_extract_images

Extract all images from a PDF.

pdf_add_annotation

Add an annotation to a PDF.

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.

PDF Manipulation Server MCP server

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 position
  • pdf_replace_text - Replace text in a PDF document

Image Operations

  • pdf_add_image - Add an image to a PDF
  • pdf_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 one
  • pdf_combine_pages_to_single - Combine multiple pages from a PDF into a single page
  • pdf_split - Split a PDF into individual pages or page ranges
  • pdf_rotate_page - Rotate a page in a PDF (90, 180, 270 degrees)
  • pdf_delete_page - Delete a page from a PDF
  • pdf_crop_page - Crop a page in a PDF with coordinate support
  • pdf_auto_crop_page - Automatically crop pages by detecting content boundaries

Metadata

  • pdf_get_info - Get metadata and information about a PDF
  • pdf_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

  1. Open Cursor Settings (Cmd+, on Mac, Ctrl+, on Windows/Linux)
  2. Search for "MCP" in settings
  3. 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

  1. Open a new chat in Cursor
  2. 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 Python
  • pymupdf - Core PDF manipulation library
  • pytest - 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

  1. "No tools" in Cursor settings: This is normal! Tools appear in the chat interface, not in settings.

  2. UV not found: Install UV first:

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  3. Python version error: UV will automatically install Python 3.11+ if needed.

  4. 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:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with uv run pytest tests/ -v
  5. 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:

  1. Check the troubleshooting section above
  2. Review the test output: uv run python test_mcp_server.py
  3. Check Cursor logs for MCP errors
  4. Open an issue on GitHub

Alternatives

Related Skills

Browse all skills
pdf

Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or programmatically process, generate, or analyze PDF documents at scale.

44
etetoolkit

Phylogenetic tree toolkit (ETE). Tree manipulation (Newick/NHX), evolutionary event detection, orthology/paralogy, NCBI taxonomy, visualization (PDF/SVG), for phylogenomics.

6
pdf-to-markdown

Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.

582
literature-review

Conduct comprehensive, systematic literature reviews using multiple academic databases (PubMed, arXiv, bioRxiv, Semantic Scholar, etc.). This skill should be used when conducting systematic literature reviews, meta-analyses, research synthesis, or comprehensive literature searches across biomedical, scientific, and technical domains. Creates professionally formatted markdown documents and PDFs with verified citations in multiple citation styles (APA, Nature, Vancouver, etc.).

377
markitdown

Convert various file formats (PDF, Office documents, images, audio, web content, structured data) to Markdown optimized for LLM processing. Use when converting documents to markdown, extracting text from PDFs/Office files, transcribing audio, performing OCR on images, extracting YouTube transcripts, or processing batches of files. Supports 20+ formats including DOCX, XLSX, PPTX, PDF, HTML, EPUB, CSV, JSON, images with OCR, and audio with transcription.

90
minecraft-bukkit-pro

Master Minecraft server plugin development with Bukkit, Spigot, and Paper APIs. Specializes in event-driven architecture, command systems, world manipulation, player management, and performance optimization. Use PROACTIVELY for plugin architecture, gameplay mechanics, server-side features, or cross-version compatibility.

71