Tax documents, HR paperwork, legal contracts — FormFill MCP turns structured data into completed PDFs in a single tool call.
// Step 1 — inspect the PDF to get exact field names + positions { "tool": "list_form_fields", "parameters": { "pdf_path": "/forms/w9.pdf", "api_key": "ff_..." } } // Response — every field with name, type, and page position { "ok": true, "pdf_type": "hybrid_xfa_acroform", "fields": { "f1_01[0]": { "type": "text", "position": { "y": 660, "x": 59 } }, ← Name (top of page) "f1_07[0]": { "type": "text", "position": { "y": 492, "x": 59 } }, ← Address "f1_14[0]": { "type": "text", "position": { "y": 348, "x": 418 } } ← EIN } } // Step 2 — fill with the exact field names from step 1 { "tool": "fill_form", "parameters": { "pdf_path": "/forms/w9.pdf", "field_values": { "f1_01[0]": "Alice Johnson", "f1_07[0]": "123 Main St" }, "output_path": "/forms/w9_filled.pdf", "api_key": "ff_..." } } // → { "ok": true, "fields_filled": 2, "pdf_type": "hybrid_xfa_acroform" }
Wherever an agent needs to output a completed form, FormFill handles the last mile.
Agents collect W-2 data through conversation, then auto-populate IRS 1040, W-9, and state forms — ready to sign.
Walk new hires through onboarding in chat, then fill I-9s, direct deposit forms, and benefits paperwork automatically.
Populate NDA templates, court filing forms, and contract paperwork from structured intake — hours of work in seconds.
Listing agreements, disclosure forms, rental applications — any AcroForm PDF in the workflow.
Works with Claude Desktop, Cursor, Cline, and any MCP-compatible host.
Click Get Free API Key — enter your email and your key is issued instantly. No credit card required.
For Claude Desktop, open ~/Library/Application Support/Claude/claude_desktop_config.json and add:
{
"mcpServers": {
"formfill": {
"command": "npx",
"args": ["-y", "@knportal/formfill-mcp"],
"env": { "FORMFILL_API_KEY": "ff_your_key_here" }
}
}
}
For remote access (Cursor, Cline, any HTTP MCP client), use the streamable HTTP endpoint:
https://formfill.plenitudo.ai/mcp
Restart your MCP host (Claude Desktop requires a full quit and reopen). Then ask your agent: "List the fields in /path/to/form.pdf" — you should see the field names returned.
No credit card required to get started.
Common issues and how to fix them.
Make sure your config uses command and args — not a url or type: streamableHttp block. The correct format for Claude Desktop is:
{
"mcpServers": {
"formfill": {
"command": "/path/to/python",
"args": ["/path/to/server.py", "--stdio"]
}
}
}
After editing, fully quit and reopen Claude Desktop (Cmd+Q, not just close the window).
Never guess field names. Always call list_form_fields first — it now returns each field's position (x, y coordinates on the page). Use those coordinates to identify which field is which:
y = higher on the page (PDF y-axis is bottom-up)y are on the same horizontal linex are in the same columnThis is especially important for IRS and government PDFs, which use a hybrid XFA/AcroForm format where field names like f1_06[0] give no visual hint about their location.
The PDF may be:
"pdf_type": "xfa_only"."pdf_type": "encrypted".Your field names don't match what's in the PDF. Call list_form_fields to get the exact names. The response also includes a valid_fields list showing all available field names.
Common mistake: using display names like "Name" instead of the actual PDF field ID like "f1_01[0]". Always use the names returned by list_form_fields exactly.
Free tier allows 50 fills per month. To upgrade to unlimited Pro, visit the pricing section and click "Start Pro". Your existing API key is automatically upgraded — no need to change your config.
Already a Pro subscriber? Manage your subscription.
This happens when the server is launched from a read-only directory (common in Claude Desktop stdio mode). Set the FORMFILL_LOG_FILE environment variable to a writable path, or set FORMFILL_DATA_DIR to a writable directory.
The default log path is ~/Library/Logs/formfill-mcp/server.log (macOS), which should work without any config.
No — that's correct behavior. The MCP endpoint requires an MCP client (Claude Desktop, Cursor, Cline) that sends the right protocol headers. Browsers send Accept: text/html, which the server rejects by design.
To confirm the server is up, hit GET https://formfill.plenitudo.ai/health — that returns {"status":"ok"} from any browser or curl.
Hit the health endpoint: GET https://formfill.plenitudo.ai/health — returns {"status": "ok"} when running.
For a deeper check: GET https://formfill.plenitudo.ai/smoke-test — fills a real PDF end-to-end and reports pass/fail for each component.
We're here to help. Pick the channel that fits your question.
Found a bug or unexpected behavior? Open an issue on GitHub with your PDF type and the error message.
Open a GitHub Issue →Need signature fields, batch processing, or a new tool? Let us know what your workflow needs.
Request a Feature →Manage your Pro subscription, update payment info, or cancel anytime from the Stripe portal.
Manage Subscription →Full tool reference, configuration options, and example workflows on GitHub.
Read the Docs →Free tier — no credit card required, instant access.
Get Free API KeyRemote MCP Endpoint
https://formfill.plenitudo.ai/mcp
Opening this URL in a browser shows "Not Acceptable" — that's normal. It only responds to MCP clients (Claude Desktop, Cursor, Cline).