Let your agent fill PDF forms, on your machine
Agents are good at answers and bad at flat PDFs: they can't tell where a field is or what it's for. The fenfill MCP server fixes that. fenfill finds the fields on the blank form, and your agent fills it on your own computer. The answers it writes never reach us.
2 min readUpdated
- Add the fenfill MCP server to Claude Code, Claude Desktop, Cursor or any MCP client.
- fenfill finds the fields on a blank PDF. Your agent fills it locally.
- What your agent writes is never sent to fenfill or anywhere else.
- Included on Pro and above. Open source (MIT).
Your agent fills it; we never see the answers
Ask an agent to fill a PDF and it usually guesses. A flat form is just lines on a page, and even a fillable one names its fields things like Text17. The agent writes over the wrong line, or skips the box it couldn't find.
fenfill does the part agents can't: it reads the blank form and returns every field with what it is and where it sits. Text boxes, checkboxes, dates, character boxes, tables and signature lines.
Then the fenfill MCP server fills the PDF on your machine. Your agent hands it the answers, the server stamps them onto the page, and you get a new PDF. The answers your agent writes are never sent to fenfill or anywhere else. Only the blank form comes to us, to be analyzed.
That last part is a guardrail, not a mind reader: it spots filled form fields, not handwriting or text typed onto a flat page. So point your agent at the blank form.
Set it up in three steps
- 1
Get an API key
In fenfill, open Settings → API keys and create one. It's shown once.
- 2
Add the MCP server
One line for Claude Code, or a short config block for Claude Desktop, Cursor and other MCP clients.
- 3
Ask your agent to fill a form
Give it the blank PDF and the answers. It analyzes the form, fills it locally and saves the new PDF.
The server runs on your computer through npx. There's nothing to host and no new account: your fenfill workspace is the account, and the key ties the agent to it. The quickstart has the exact lines for each client.
Your saved templates work too. The agent can list them, read their fields and fill one, with the same branding a fill in the web app gets. It can also create a personal fill link for a client and check whether they've opened or completed it.
Built for repeat forms
Forms that already have fillable fields are read directly, with no AI, and use no page scans. If a form also has blanks its fields don't cover, like a signature line, you can choose to detect those too.
Analyzing the same file again uses no page scans: the result is cached on your machine. The cache holds form layouts and blank forms, never your answers.
When a field comes out wrong, the agent can see it. It draws each page on your machine with every field outlined, then moves, resizes or relabels the field and saves the fix to your template. A correction sends only the form's layout and wording, never your answers.
What is sent where
| Sent to fenfill? | |
|---|---|
| The blank PDF you analyze | Yes, once, encrypted as soon as it arrives |
| Your API key | Yes, in the Authorization header only |
| Your agent's answers and the filled PDF | Never |
| Page previews | No: drawn on your machine |
| Template corrections | Layout and wording only, when you save |
| Re-analyzing a saved template | Nothing is uploaded |
The blank PDF you analyze
- Sent to fenfill?
- Yes, once, encrypted as soon as it arrives
Your API key
- Sent to fenfill?
- Yes, in the Authorization header only
Your agent's answers and the filled PDF
- Sent to fenfill?
- Never
Page previews
- Sent to fenfill?
- No: drawn on your machine
Template corrections
- Sent to fenfill?
- Layout and wording only, when you save
Re-analyzing a saved template
- Sent to fenfill?
- Nothing is uploaded
Unless you save the form as a template, the blank PDF is deleted as soon as its analysis finishes. The analysis itself is kept for at most 24 hours, or 1 hour after your agent first fetches it, whichever comes first.
This is not end-to-end encryption: our servers decrypt the blank form to analyze it. The answers are a different story. They never reach us at all. More in how fenfill handles your files and the data flow docs.
API keys are shown once. We store only a hash, and accept the key only in the Authorization header. The MCP server is open source (MIT): every release is built from github.com/fenfill/mcp by GitHub Actions and published to npm with provenance, so you can check what you run.
