PDF Form Proof

io.github.EssenceAlignment由 GitHub 帳號 EssenceAlignment 發布v0.1.1更新於 Nov 6, 2026

Fill fillable PDF forms, then prove every value is visible on the rendered page.

發布方自己的服務:Proof Holdings

已驗證STDIO僅桌面效率與工作流檔案與儲存

概覽

AI 產生的概覽

依精確欄位名稱填寫 AcroForm PDF 表單,並以 OCR 驗證每個值確實顯示在算繪後的頁面上。

可以做什麼
  • 列出所有可填寫欄位的精確名稱、類型、目前值、必填標記,以及核取方塊的勾選狀態值
  • 依精確欄位名稱將值填入新的 PDF,遇到未知欄位名稱則整筆拒絕填寫
  • 驗證填寫結果:算繪頁面並執行 OCR,為每個值給出 VISIBLE、INVISIBLE、RENDER-ONLY 或 MISSING 判定
  • 計算檔案的 SHA-256 摘要,用來記錄確切的產出
適用情境
適合需要反覆填寫同一批官方或機構 PDF 表單,並希望確認數值不只在檔案裡、而是真的顯示在人看到或列印的頁面上的情境。適用於營運人員、小型非營利組織,以及想讓助理填表又不掩蓋部分填寫或不可見填寫的開發者。
執行需求
以本機 Python 套件(pdf-form-proof)透過 uvx 執行,需要 Python 3.10 以上版本與 uv。驗證工具另需安裝免費的 poppler 與 tesseract 程式(例如透過 brew 或 apt)。不需要帳號、API 金鑰或網路存取。
安裝前請注意
pdf_form_fill 會寫出一個新的 PDF 檔案;它不會修改來源檔,也不會覆寫既有輸出,遇到未知欄位名稱會整筆拒絕填寫。驗證只證明可讀性,不證明數值是否正確,OCR 可能誤讀小字或藝術字型。不建立簽章,僅有 XFA 的表單會被拒絕,且不提供法律、稅務或福利建議。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 PDF Form Proof,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

pdf-form-proof

Fill a fillable PDF form, then prove every value actually shows on the page.

mcp-name: io.github.EssenceAlignment/pdf-form-proof

A PDF can hold a value in its data while the page a person sees, prints, or uploads shows nothing, or shows it cut off. Most form tools stop at "the field was set." This one keeps going: it renders the page, reads it back with OCR (optical character recognition, software that reads text from an image), and compares that with the text stored in the file. Each value comes back VISIBLE, INVISIBLE, RENDER-ONLY, or MISSING.

It works as an MCP server (MCP, the Model Context Protocol, is the plug-in standard that lets AI apps such as Claude call outside tools), as a Claude plugin, as a Gemini CLI extension, and as plain command-line tools.

What it does

ToolWhat it doesChanges files?
pdf_form_inspectLists every fillable field: exact name, type, current value, required flag, and the values that check each checkbox or radio buttonNo
pdf_form_fillFills fields by exact name and writes a new PDF. Refuses the whole fill if any name is not in the form. Never modifies the source, never overwrites an existing file. Returns the new file's SHA-256 and reads every text value backWrites one new file
pdf_form_verifyRenders a page, OCRs it, and gives each value a verdict. Can be limited to one region of the page so a copy of the value elsewhere cannot make it passNo
pdf_sha256SHA-256 fingerprint of a file, for a record of exactly what was producedNo

Every tool carries MCP annotations: readOnlyHint and destructiveHint are set on all four.

Who it is for

Anyone who fills the same official PDFs again and again: small nonprofits and community organizations (vendor forms such as the IRS W-9, grant and funder forms, program intake and consent forms), operations staff, and builders who want an AI assistant to fill forms without hiding a partial or invisible fill.

Install

You need Python 3.10 or newer and uv (https://docs.astral.sh/uv/). The verify tool also needs two free programs:

  • macOS: brew install poppler tesseract
  • Debian or Ubuntu: sudo apt install poppler-utils tesseract-ocr

Claude Desktop (MCP server)

Add this to claude_desktop_config.json:

json
{  "mcpServers": {    "pdf-form-proof": {      "command": "uvx",      "args": ["pdf-form-proof"]    }  }}

Or install the .mcpb file from the latest GitHub release: double-click it, or use Settings > Extensions > Advanced settings > Install Extension.

Claude Code (plugin)

claude plugin marketplace add EssenceAlignment/pdf-form-proofclaude plugin install pdf-form-proof@pdf-form-proof

Gemini CLI (extension)

gemini extensions install https://github.com/EssenceAlignment/pdf-form-proof

Command line

uvx --from pdf-form-proof pdf-form-inspect form.pdfuvx --from pdf-form-proof pdf-form-fill form.pdf filled.pdf values.jsonuvx --from pdf-form-proof pdf-form-verify filled.pdf --require "Sample Community Food Bank"

values.json maps exact field names (from pdf-form-inspect) to values:

json
{  "topmostSubform[0].Page1[0].f1_01[0]": "Sample Community Food Bank",  "topmostSubform[0].Page1[0].Boxes3a-b_ReadOrder[0].c1_1[0]": "/1"}

Text fields take a string. A checkbox or radio takes one of its on-state values (shown by inspect, for example "/1" or "/Yes"), or an empty string to clear it.

Exit codes: 0 success; 1 a finding (verify found a value that is not visible, or a fill could not be read back); 2 refused (unknown field names, a missing file, an existing output, or a tool such as tesseract failed).

Example

$ pdf-form-verify filled.pdf --require "Sample Community Food Bank" --require "Sample Pantry Program"PDF FORM PROOF - legibility check  verdict: PASS  file: filled.pdf  page 1 at 300 dpi  scope: whole page  VALUE                       SOURCE    TEXT  RENDER  VERDICT  Sample Community Food Bank  required  yes   yes     VISIBLE  Sample Pantry Program       required  yes   yes     VISIBLE  limit: legibility only; says nothing about whether values are correct

Limits (read these)

  • AcroForm forms only. XFA-only forms (Adobe LiveCycle dynamic forms) are detected and refused, not filled.
  • finalize removes the XFA packet and the NeedAppearances flag so viewers draw the values from their own appearance streams. It does not flatten the form; fields stay editable.
  • Verify proves legibility, not correctness. It cannot tell you whether a value is the right answer for the form.
  • OCR can misread small, stylized, or handwritten-style fonts. A REFUSE verdict means "look at the page," not "the file is broken." A tool failure (missing poppler or tesseract, a render error) is reported as a tool failure, never as a finding about your document.
  • Signatures are not created. Signature fields are listed by inspect and left alone.
  • This tool fills forms. It does not give legal, tax, benefits, or other professional advice, and it does not decide what belongs in any field.

Privacy policy

pdf-form-proof runs entirely on your own computer.

  • Data collection: none. It reads only the PDF files you name and writes only the output path you name.
  • Usage and storage: each rendered page image is written to a temporary folder under ~/.cache/pdf-form-proof and deleted as soon as the OCR step finishes, including when a step fails. Nothing stays on disk unless you ask for a copy with --keep-render. (Version 0.1.0 kept the last image until the next run; 0.1.1 removes any such leftover on its first run.)
  • Third-party sharing: none. It makes no network calls and sends no telemetry.
  • Retention: nothing is retained beyond the files you create.
  • Contact: open an issue at https://github.com/EssenceAlignment/pdf-form-proof/issues

Origin

The fill engine and the visible-on-the-page check were built for a production document pipeline after a filled form passed every text-based check and was still returned because a value could not be seen on the page. The two rules that came out of that: never hide a partial fill, and check the page a person sees, not only the data in the file.

Author

Built by Eric Brakebill-Jones, MSW Systems Architect | Clinical Workflow and Grant Data Lineage. GitHub: https://github.com/EssenceAlignment

Changes

  • 0.1.1: the rendered page image is deleted the moment OCR finishes (it was kept until the next run in 0.1.0). Author line added.
  • 0.1.0: first release.

License

MIT. See LICENSE.

來源:README.md,提交 bd9fff8

工具

4

pdf_form_inspect

Inspect PDF form fields

List every fillable field in a PDF: exact name, type (text, button, choice, signature), current value, required flag, and for checkboxes/radios the on-state values that check them. Use the names exactly as returned when filling.

輸入參數pdf_path必填

pdf_form_fill

Fill PDF form

Fill an AcroForm PDF and write a NEW file (the source is never modified and an existing output is never overwritten). values maps exact field names to values: strings for text fields; an on-state such as "/1" or "/Yes" (or true) to check a box, "" or false to clear it. strict=true refuses the whole fill if any name is unknown. finalize=true removes the XFA packet and NeedAppearances flag so viewers render the values from their own appearance streams (fields stay editable; this is not flattening). Returns the output SHA-256 and a read-back of every text value.

輸入參數strictvalues必填finalizeoutput_path必填source_pdf_path必填

pdf_form_verify

Verify filled values are visible

Render one page, OCR it, and compare with the PDF text layer. Each value gets a verdict: VISIBLE, INVISIBLE (in the file but not on the page), RENDER-ONLY, or MISSING. region is "page" or "x0,y0,x1,y1" as page fractions; with a region and auto=true every word the text layer places in that region must also be legible. A tool failure (missing poppler or tesseract, render error) returns REFUSE with the reason and makes no finding about the document. Proves legibility only, not correctness.

輸入參數dpiautopageregionvaluespdf_path必填

pdf_sha256

SHA-256 of a file

Return the SHA-256 digest of a file so the exact output can be recorded.

輸入參數path必填

版本歷史

2
  1. v0.1.1最新Oct 23, 2026
  2. v0.1.0Oct 23, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Proof 整合