# JustFill PDF Form Automation (pypi · justfill-mcp)

Detect, review and fill existing PDF forms from JSON or Excel; reuse saved templates

- Trust score: 76/100 (medium)
- Change this week: +18
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- remote · `api.justfill.app`: 36/100, [markdown](https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/api-mcp.md), [page](https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/api-mcp)
- pypi · `justfill-mcp`: 76/100 (this document), [markdown](https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/justfill-mcp.md), [page](https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/justfill-mcp)

## Channel facts

- Registry: `pypi`
- Package: `justfill-mcp`
- Version: `0.4.10`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-21.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it.
  - 0 of 31 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 27 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 70/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1523 tokens (~108/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 93/100
  - Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (86% of tools); any adoption earns full credit.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_field" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the JustFill PDF Form Automation MCP server?

JustFill PDF Form Automation runs locally as a PyPI package, launched with uvx justfill-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add mrmaciej1-justfill-pdf-forms -- uvx justfill-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "mrmaciej1-justfill-pdf-forms": {
      "command": "uvx",
      "args": [
        "justfill-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "mrmaciej1-justfill-pdf-forms": {
      "command": "uvx",
      "args": [
        "justfill-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add mrmaciej1-justfill-pdf-forms -- uvx justfill-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mrmaciej1-justfill-pdf-forms": {
      "type": "local",
      "command": [
        "uvx",
        "justfill-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mrmaciej1-justfill-pdf-forms --command uvx --arg justfill-mcp
```

### Hermes

```yaml
mcp_servers:
  mrmaciej1-justfill-pdf-forms:
    command: "uvx"
    args: ["justfill-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "mrmaciej1-justfill-pdf-forms": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "justfill-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add mrmaciej1-justfill-pdf-forms -t stdio -c uvx -a justfill-mcp
```

### Other

```json
{
  "mcpServers": {
    "mrmaciej1-justfill-pdf-forms": {
      "command": "uvx",
      "args": [
        "justfill-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-20 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-18 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-16 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 73, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-09-14 (score 58, −15)

- [security regression] Malware scan: pass → unverified

### 2026-09-13 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-11 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-09 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (14)

### `open_pdf` (~213 tokens)

Open a PDF (or a scanned image: jpg/png/tiff) and detect its fillable fields.

Images are converted to a single-page PDF automatically (deterministically,
so a template saved for a photo matches the same photo next time).

Resolution order (best source wins):
  1\. Saved template matching this exact file (deterministic, confidence 1.0)
  2\. Embedded AcroForm fields (deterministic, confidence 1.0)
  3\. ML detection (each field carries a confidence score)

force_detect=True skips steps 1-2 and re-runs ML detection from scratch —
use it to rebuild a layout when the saved template is wrong or stale.
min_confidence drops ML fields scored below it (templates/AcroForm are
always kept). Returns a JSON summary + the field list.

Input parameters:

- `force_detect` (boolean)
- `max_pages` (integer)
- `min_confidence` (number)
- `path` (string, required)

Output parameters:

- `result` (string)

### `list_fields` (~26 tokens)

List the current working fields (optionally one page only).

Input parameters:

- `page_index`

Output parameters:

- `result` (string)

### `close_workspace` (~48 tokens)

Release the current PDF and field data when work is finished.

Saved templates and output PDFs are not deleted. This operation is
idempotent, which makes it safe to call from automation cleanup blocks.

Output parameters:

- `result` (string)

### `render_preview` (~87 tokens)

Render a page with the working field boxes drawn on it.

Look at this image to VERIFY placement: blue boxes are deterministic
(template/AcroForm/agent-placed); green/orange/red are ML detections by
confidence (>=0.7 / >=0.4 / <0.4). Each box is labeled with its field id.

Input parameters:

- `page_index` (integer)

### `render_filled_preview` (~107 tokens)

Preview how the filled page will look BEFORE generating the PDF.

Draws `values` (field id -> text; checkboxes get an X) into their boxes on
the rendered page. Costs nothing — no fill is consumed. Typography is an
approximation of the final output (the server typesets the real PDF), so
use it to verify placement, alignment and obvious overflow, then fill_pdf.

Input parameters:

- `page_index` (integer)
- `values` (object, required)

### `add_field` (~142 tokens)

Add a field the detector missed (a false negative).

Coordinates are percentages of the page (0-100), top-left origin —
read them off the render_preview image proportionally.
align ('left'|'center'|'right') and vertical_align ('top'|'middle'|'bottom')
control where the value sits inside the box when the PDF is filled.

Input parameters:

- `align`
- `field_type` (string)
- `h` (number, required)
- `name` (string)
- `page_index` (integer)
- `vertical_align`
- `w` (number, required)
- `x` (number, required)
- `y` (number, required)

Output parameters:

- `result` (string)

### `update_field` (~108 tokens)

Move/resize/rename a field, or set its text alignment.

align: 'left'|'center'|'right'; vertical_align: 'top'|'middle'|'bottom' —
where the value sits inside the box in the filled PDF.

Input parameters:

- `align`
- `field_id` (string, required)
- `field_type`
- `h`
- `name`
- `vertical_align`
- `w`
- `x`
- `y`

Output parameters:

- `result` (string)

### `update_fields` (~74 tokens)

Update many fields in one call (batch version of update_field).

Each item: {"field_id": "...", and any of x, y, w, h, name, field_type,
align, vertical_align}. Items with an unknown field_id are reported back,
the rest are still applied.

Input parameters:

- `updates` (array, required)

Output parameters:

- `result` (string)

### `remove_field` (~29 tokens)

Delete a field that isn't a real input (a false positive).

Input parameters:

- `field_id` (string, required)

Output parameters:

- `result` (string)

### `remove_fields` (~29 tokens)

Delete many fields in one call (batch version of remove_field).

Input parameters:

- `field_ids` (array, required)

Output parameters:

- `result` (string)

### `prune_fields` (~137 tokens)

Bulk-delete fields matching ALL given criteria (e.g. detection noise).

field_type: exact type match (e.g. 'cell'); confidence_below /
width_below / height_below: strictly-less-than thresholds (w/h in % of
page); page_index: limit to one page; exclude_ids: always keep these.
Returns the removed ids so the operation is auditable (and reversible
via add_field if it cut too much).

Input parameters:

- `confidence_below`
- `exclude_ids`
- `field_type`
- `height_below`
- `page_index`
- `width_below`

Output parameters:

- `result` (string)

### `fill_pdf` (~124 tokens)

Fill the PDF and save it.

\`values` maps field id -> text value (checkboxes: "true"/"yes"/"x" to tick).
Fields not present in `values` stay empty. AcroForm fields are filled
natively inside the PDF; everything else is drawn at its exact box.
The response's `warnings` list flags values that will be shrunk or
truncated to fit their box — fix those before delivering the document.

Input parameters:

- `flatten` (boolean)
- `output_path` (string, required)
- `values` (object, required)

Output parameters:

- `result` (string)

### `save_template` (~139 tokens)

Save the current (reviewed) field layout as a reusable template.

Next time this exact PDF is opened — by you or another agent session on
this account — open_pdf returns these fields with confidence 1.0 and no
ML pass at all. This is what makes repeat filling deterministic.

Before saving, give every field a short semantic name (update_fields with
name=..., e.g. 'age_score', 'total_abcd2') — names are stored in the
template, so the next session maps values by meaning instead of guessing
from coordinates. Also remove false positives first (remove_fields).

Input parameters:

- `name` (string, required)

Output parameters:

- `result` (string)

### `list_templates` (~29 tokens)

List saved templates on this account (name + field count + hash).

Input parameters:

- `limit` (integer)

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/justfill-mcp#diagnostics

## Score history

- 2026-09-21: 76
- 2026-09-20: 76
- 2026-09-19: 75
- 2026-09-18: 75
- 2026-09-17: 74
- 2026-09-16: 74
- 2026-09-15: 73
- 2026-09-14: 58
- 2026-09-13: 73
- 2026-09-12: 72
- 2026-09-11: 72
- 2026-09-10: 71
- 2026-09-09: 71
- 2026-09-08: 70
- 2026-09-07: 70
- 2026-09-06: 69
- 2026-09-05: 69
- 2026-09-04: 68
- 2026-09-03: 68
- 2026-09-02: 67
- 2026-09-01: 67
- 2026-08-31: 66
- 2026-08-30: 63
- 2026-08-29: 63
- 2026-08-28: 63
- 2026-08-27: 63
- 2026-08-26: 63
- 2026-08-25: 63
- 2026-08-24: 63

## Common questions

### What is the JustFill PDF Form Automation MCP server?

JustFill PDF Form Automation is an MCP server listed in the public MCP registry as io.github.mrmaciej1/justfill-pdf-forms. Detect, review and fill existing PDF forms from JSON or Excel; reuse saved templates. This page covers its PyPI package (justfill-mcp).

### Is the JustFill PDF Form Automation MCP server safe to use?

JustFill PDF Form Automation scores 76 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the JustFill PDF Form Automation MCP server expose?

JustFill PDF Form Automation exposes 14 tools: open_pdf, list_fields, close_workspace, render_preview, render_filled_preview, and 9 more. Their descriptions and schemas cost roughly 1,292 tokens of context every time the server is loaded.

### Is the JustFill PDF Form Automation MCP server still maintained?

JustFill PDF Form Automation is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- PyPI project: https://pypi.org/project/justfill-mcp/
- Socket report: https://socket.dev/pypi/package/justfill-mcp
- Repository: https://github.com/mrmaciej1/justfill-mcp
- Website: https://justfill.app/mcp?utm_source=mcp_registry&utm_medium=directory&utm_campaign=b2b_pdf_automation_2026q3&utm_content=server_listing
- Changelog RSS feed: https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/justfill-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/justfill-mcp.json
- HTML version of this page: https://verifymcp.io/servers/mrmaciej1-justfill-pdf-forms/justfill-mcp
