Precision PDF MCP Server
<div align="center">
# ๐ฏ Precision PDF MCP Server (`precision-pdf-mcp`)
**Pixel-Perfect PDF Form and Worksheet Filling for AI Coding Agents.**
*Powered by Hybrid Vector-Raster Geometry, Set-of-Marks (SoM), and Virtual Excel Grounding.*
[](https://www.python.org/downloads/)
[](https://modelcontextprotocol.io)
[](https://opensource.org/licenses/MIT)
[](https://glama.ai/mcp/servers/zuan412/precision-pdf-mcp)
[]()
</div>
---
## ๐ก Why Precision PDF?
Filling assignment worksheets, tax forms, and scanned PDF workbooks has always been a painful failure mode for Large Language Models (LLMs):
- โ **The "Floating Text" Bug:** LLMs guess raw `(x, y)` floats, causing answers to float aimlessly above or below lines.
- โ **The "Collision" Bug:** Answers smash directly into printed text (e.g., `Heis going`, `Parentsmust`, `1)wear`).
- โ **The "Scanned PDF" Blindspot:** Most PDF tools rely only on vector drawings. Scanned workbooks have **0 vector lines**, leaving AI completely blind.
- โ **Multi-Line Truncation:** Long answers get crammed into line 1 or truncated because the agent doesn't realize two lines are printed for that question.
**Precision PDF solves this once and for all.**
---
## ๐ Key Innovations
```
[ Input PDF: Digital or Scanned Workbook ]
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Tri-Layer Hybrid Detector โ
โ โข Vector Lines & Rects (pdfplumber) โ
โ โข In-Memory Morphological Line Scanner (NumPy) โ
โ Detects physical lines in scanned images in RAM! โ
โ โข Text Anchors & Gap Numbers (1), 2., He_________) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Context Guards & Smart Layout โ
โ โข Padding Guard: Auto +6pt..+10pt margin after โ
โ printed subjects (He, You, Jenny...) โ
โ โข Multi-Line Grouping: Detects stacked lines & auto- โ
โ wraps long sentences at natural word boundaries โ
โ โข Auto-Scale Font: Scales down font to prevent crash โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Virtual Excel Matrix & Set-of-Marks (Agent View) โ
โ โข Renders Top Columns (A, B, C...) & Rows (1, 2, 3) โ
โ โข Badges targets: [S01], [S02], [S03]... โ
โ โข STRICTLY VIRTUAL: Only for the agent to inspect! โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. Clean Vector Injection (Output PDF) โ
โ โข Baseline Snapped: Text rests 1.2pt above line โ
โ โข Centered in Boxes: Dead-center horizontally & vert โ
โ โข Crisp Circles / Underlines: Vector option markers โ
โ โข ZERO GRID POLLUTION: Output PDF is 100% clean! โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
---
## ๐ฆ Installation & Quickstart
### Method 1: Instant Run with `uvx` (Recommended)
No installation required. Run directly in Claude Desktop or Cursor via `uvx`:
```bash
uvx precision-pdf-mcp
```
### Method 2: Install via `pip`
```bash
pip install precision-pdf-mcp
```
### Method 3: From Source (Local Development)
```bash
git clone https://github.com/zuan412/precision-pdf-mcp.git
cd precision-pdf-mcp
pip install -e .
```
---
## ๐ ๏ธ MCP Client Configuration
### 1. Claude Desktop
Add to your `claude_desktop_config.json`:
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"precision-pdf": {
"command": "uvx",
"args": ["precision-pdf-mcp"]
}
}
}
```
### 2. Cursor IDE
Add to Cursor Settings -> MCP Servers (`~/.cursor/mcp.json`):
```json
{
"mcpServers": {
"precision-pdf": {
"command": "uvx",
"args": ["precision-pdf-mcp"]
}
}
}
```
### 3. Antigravity / Gemini CLI / Windsurf / Cline
In your `mcp_config.json`:
```json
{
"mcpServers": {
"precision-pdf": {
"command": "python",
"args": ["-m", "precision_pdf"]
}
}
}
```
---
## ๐งฐ Available MCP Tools
### `hpe_inspect_virtual_grid`
Generates a temporary Virtual Excel Matrix inspector image with Set-of-Marks badges (`[S01]`, `[S02]`...) and returns a JSON catalog of detected slots.
* **Arguments:**
- `pdf_path` (string, required): Absolute path to the PDF.
- `page_number` (int, required): 1-based page number.
- `dpi` (int, optional, default: 150): Image resolution.
* **Returns:**
- `inspector_image_path`: Path to the image for agent visual inspection.
- `slots`: Dictionary of slots containing grid address (e.g. `Col D, Row 14`), type, baseline, and width.
### `hpe_fill_slots`
Injects answers directly into the target PDF using Slot IDs.
* **Arguments:**
- `pdf_path` (string, required): Absolute path to the PDF.
- `page_number` (int, required): 1-based page number.
- `slot_answers_json` (string, required): JSON string of answers.
- Slot map: `{"S01": "must have left", "S02": "could do"}`
- Multi-line wrap: `{"S03": ["first line text", "second line text"]}`
- Option circle: `{"circle_option": "A"}`
- Option underline: `{"underline_option": "Shall"}`
- `output_path` (string, optional): Output PDF path. If omitted, safely updates in-place.
* **Guarantees:**
- **100% baseline snap** (rests naturally on the printed line).
- **Zero grid pollution** (no rulers or badges in final output).
### `hpe_render_clean_verify`
Renders the final, clean PDF page to an image for visual QA verification.
* **Arguments:**
- `pdf_path` (string, required): Path to the completed PDF.
- `page_number` (int, required): 1-based page number.
- `dpi` (int, optional, default: 150): Output DPI.
---
## ๐งช Testing
Run the included unit test suite:
```bash
python -m unittest discover -s tests
```
---
## ๐ก๏ธ Zero Disk Pollution & Safety Guarantee
Precision PDF is engineered to run in memory:
- All morphological line detection and raster scanning execute in RAM via NumPy arrays and `io.BytesIO`.
- Temporary inspector previews use OS-standard `tempfile.gettempdir()/precision_pdf` or the `$PRECISION_PDF_TEMP_DIR` environment variable.
- Stdio JSON-RPC communication is 100% isolated: all logs, warnings, and internal debug outputs route strictly to `sys.stderr`.
---
## ๐ License
MIT License. See [LICENSE](LICENSE) for details. Built with โค๏ธ for the AI agent pair-programming community.
TDQS
Scored across 6 tools
Three of the six tools (hpe_inspect_geometry, hpe_snap_fill, hpe_render_verify) are explicit backward-compatibility aliases that duplicate hpe_inspect_virtual_grid, hpe_fill_slots, and hpe_render_clean_verify respectively. An agent faces real ambiguity about which name to call, even though the descriptions confess the aliasing. Only three genuinely distinct purposes exist.
Every tool uses the same hpe_ prefix and snake_case verb_noun convention (render_clean_verify, inspect_virtual_grid, fill_slots, inspect_geometry, snap_fill, render_verify). The pattern is predictable throughout with no style mixing.
Six tools nominally sits in a healthy range, but half are redundant aliases, leaving an effective surface of only three distinct operations. That makes the set feel thin for the scope despite the raw count looking fine.
The core lifecycle is covered: inspect the virtual grid to find slots, fill slots with answers, and render a clean page for visual QA. Minor gaps exist (no PDF text extraction or batch/multi-page handling), but the primary workflow has no dead ends.