pdf-mcp-server

Sohaib-2/pdf-mcp-server

3.2

If you are the rightful owner of pdf-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

The PDF MCP Server is a comprehensive toolkit that integrates with Claude AI via the Model Context Protocol (MCP) to perform complex PDF operations using natural language commands.

Tools
  1. merge_pdfs

    Combine multiple PDFs into one document

  2. split_pdf

    Split a PDF into individual pages

  3. encrypt_pdf

    Apply AES-256 encryption to a PDF

  4. optimize_pdf

    Compress a PDF for web or email use

  5. get_pdf_info

    Retrieve detailed metadata from a PDF

PDF MCP Server

GitHub stars GitHub issues GitHub license Python 3.8+

Transform PDF manipulation with AI-powered natural language commands through Claude integration

Comprehensive PDF toolkit that integrates seamlessly with Claude AI via MCP (Model Context Protocol). Perform complex PDF operations using simple conversational commands - merge, split, encrypt, optimize, and analyze PDFs effortlessly.

šŸš€ Quick Start

Clone & Setup

git clone https://github.com/Sohaib-2/pdf-mcp-server.git
cd pdf-mcp-server

Option 1: With Virtual Environment (Recommended)

python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux  
source .venv/bin/activate

pip install -r requirements.txt

Option 2: Without Virtual Environment

pip install fastmcp requests pathlib

Install PDF Tools

PDFtk:

# Ubuntu/Debian
sudo apt-get install pdftk
# macOS
brew install pdftk-java
# Windows: Download from https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

QPDF:

# Ubuntu/Debian
sudo apt-get install qpdf
# macOS
brew install qpdf
# Windows: Download from https://qpdf.sourceforge.io/

šŸ”§ Claude Desktop Integration

  1. Locate Claude config file:

    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  2. Add PDF MCP Server:

With Virtual Environment:

{
  "mcpServers": {
    "pdf-tools": {
      "command": "C:\\path\\to\\pdf-mcp-server\\.venv\\Scripts\\python.exe",
      "args": ["C:\\path\\to\\pdf-mcp-server\\server.py"]
    }
  }
}

Without Virtual Environment:

{
  "mcpServers": {
    "pdf-tools": {
      "command": "python",
      "args": ["C:\\path\\to\\pdf-mcp-server\\server.py"]
    }
  }
}

macOS/Linux with venv:

{
  "mcpServers": {
    "pdf-tools": {
      "command": "/path/to/pdf-mcp-server/.venv/bin/python",
      "args": ["/path/to/pdf-mcp-server/server.py"]
    }
  }
}
  1. Restart Claude Desktop

  2. Start using natural language:

    • "Merge these 3 PDFs into one document"
    • "Encrypt my report with password protection"
    • "Extract pages 1-10 from this manual"

šŸ“š Complete Tool Reference

Core Operations

ToolDescriptionExample
merge_pdfsCombine multiple PDFsmerge_pdfs(['doc1.pdf', 'doc2.pdf'], 'combined.pdf')
split_pdfSplit into individual pagessplit_pdf('document.pdf', './pages/')
extract_pagesExtract specific page rangesextract_pages('book.pdf', '1-5,10,15-20', 'excerpt.pdf')
rotate_pagesRotate pages by degreesrotate_pages('scan.pdf', '90', 'rotated.pdf', '1-3')

Security & Encryption

ToolDescriptionExample
encrypt_pdfAES-256 encryptionencrypt_pdf('file.pdf', 'secure.pdf', 'password123')
encrypt_pdf_basicBasic password protectionencrypt_pdf_basic('doc.pdf', 'protected.pdf', 'pass', 'admin')
decrypt_pdfRemove password protectiondecrypt_pdf('locked.pdf', 'unlocked.pdf', 'password')

Optimization & Repair

ToolDescriptionExample
optimize_pdfCompress for web/emailoptimize_pdf('large.pdf', 'small.pdf', 'high')
repair_pdfFix corrupted PDFsrepair_pdf('broken.pdf', 'fixed.pdf')
check_pdf_integrityValidate PDF structurecheck_pdf_integrity('suspicious.pdf')

Information & Analysis

ToolDescriptionExample
get_pdf_infoDetailed metadata (JSON)get_pdf_info('document.pdf')
update_pdf_metadataModify title/author/etcupdate_pdf_metadata('file.pdf', 'updated.pdf', title='New Title')
inspect_pdf_structureInternal structure analysisinspect_pdf_structure('complex.pdf', detailed=True)
extract_pdf_attachmentsExtract embedded filesextract_pdf_attachments('portfolio.pdf', './attachments/')

File Management

ToolDescriptionExample
download_pdfDownload from URLdownload_pdf('https://example.com/file.pdf', 'local.pdf')
open_pdf_previewOpen with system vieweropen_pdf_preview('report.pdf', browser=False)
get_file_infoFile size/path detailsget_file_info('document.pdf')
configure_pdf_workspaceSet working directoryconfigure_pdf_workspace('/path/to/workspace')
count_pdfs_in_directoryList PDFs in foldercount_pdfs_in_directory('./pdf_folder/')

System Management

ToolDescriptionPurpose
get_server_statusCheck tool availabilityVerify PDFtk/QPDF installation
list_default_directoriesShow search pathsDebug file resolution issues
get_pdf_tools_helpComplete documentationIn-app help reference

šŸ’¬ Natural Language Examples

Document Management:

  • "Combine all my research papers into one bibliography"
  • "Split this 100-page manual into chapters"
  • "Extract the executive summary from pages 2-4"

Security Operations:

  • "Encrypt this contract with military-grade protection"
  • "Remove password from this locked document"
  • "Add owner permissions to prevent editing"

File Optimization:

  • "Optimize all PDFs in my downloads folder"
  • "Fix this corrupted presentation file"

Advanced Analysis:

  • "Show me detailed metadata about this academic paper"
  • "Analyze the internal structure for security audit"

šŸ—‚ļø File Path Handling

Flexible path resolution:

  • Absolute: C:\Documents\file.pdf
  • Relative: ../pdfs/document.pdf
  • Filename only: report.pdf (searches default directories)

Default search order:

  1. PDF_WORKSPACE environment variable
  2. ~/Documents/PDFs
  3. ~/Downloads
  4. ~/Desktop
  5. Current working directory

āš™ļø Configuration

Custom workspace:

configure_pdf_workspace('/path/to/your/pdfs')

Check installation:

get_server_status()  # Verify PDFtk and QPDF availability

šŸ› ļø Troubleshooting

Common issues:

ProblemSolution
PDFtk not foundInstall PDFtk and add to PATH
QPDF errorInstall QPDF via package manager
File not foundUse list_default_directories() to check search paths
Permission deniedRun with appropriate file permissions
Invalid PDFUse check_pdf_integrity() to validate file

Debug commands:

get_server_status()           # Check tool installation
list_default_directories()    # Verify search paths  
get_pdf_info('file.pdf')      # Validate PDF structure

šŸ—ļø Architecture

pdf-mcp-server/
ā”œā”€ā”€ server.py              # FastMCP server with 16 tools
ā”œā”€ā”€ pdftk_tools.py         # PDFtk CLI wrapper
ā”œā”€ā”€ qpdf_tools.py          # QPDF CLI wrapper  
ā”œā”€ā”€ utils.py               # File utilities & path resolution
└── requirements.txt       # Python dependencies

Built with:

  • FastMCP - MCP server framework
  • PDFtk - PDF manipulation
  • QPDF - Advanced PDF processing

šŸ¤ Contributing

  1. Fork the repository
  2. Create feature branch: git checkout -b feature/amazing-feature
  3. Commit changes: git commit -m 'Add amazing feature'
  4. Push to branch: git push origin feature/amazing-feature
  5. Open Pull Request

šŸ“„ License

This project is licensed under the MIT License

šŸ‘Øā€šŸ’» Author

Sohaib-2 - GitHub

🌟 Acknowledgments


⭐ Star this repo if it helped you! | šŸ› Report issues | šŸ’” Request features