@fenfill/mcp 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -64
- package/THIRD_PARTY_NOTICES +27 -1
- package/dist/index.js +3459 -792
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,8 +12,9 @@ are stamped into the PDF locally and are never sent to fenfill or anywhere else.
|
|
|
12
12
|
fields (text boxes, checkboxes, dates, character boxes, tables, signatures) and returns them
|
|
13
13
|
with ids, types and labels. The result is cached on your machine, so asking again is free.
|
|
14
14
|
2. **`fill_form`** takes the agent's answers (`field id → value`), checks them against the
|
|
15
|
-
fields, and stamps them into a new, flattened PDF. This step runs
|
|
16
|
-
|
|
15
|
+
fields, and stamps them into a new, flattened PDF. This step runs on your machine and never
|
|
16
|
+
sends your answers anywhere; the only network use is a one-time download of the public
|
|
17
|
+
Japanese font, the first time a value needs it.
|
|
17
18
|
3. Saved fenfill templates work the same way: `list_templates` → `get_template` → `fill_template`.
|
|
18
19
|
4. **`preview_page`** shows a page as an image with every field box outlined and tagged, rendered
|
|
19
20
|
on your machine. If a box is misplaced, missing or mislabeled, **`edit_template`** fixes it in a
|
|
@@ -24,15 +25,16 @@ are stamped into the PDF locally and are never sent to fenfill or anywhere else.
|
|
|
24
25
|
|
|
25
26
|
### What is sent where
|
|
26
27
|
|
|
27
|
-
| Data | Sent to fenfill?
|
|
28
|
-
| -------------------------------------------------- |
|
|
29
|
-
| The blank PDF you analyze | Yes, once (then cached locally)
|
|
30
|
-
| Your API key | Yes, as `Authorization: Bearer`
|
|
31
|
-
| The agent's answers, signatures and the filled PDF | **No, never**
|
|
32
|
-
| Saved templates (blank PDF, fields, your logo) | Downloaded from fenfill to fill locally
|
|
33
|
-
| Page previews (`preview_page`) | **No**: rendered on your machine
|
|
34
|
-
| Layout corrections (`edit_template`) | Only on `save_template`, and then only the layout and the form's own wording
|
|
35
|
-
| Re-analysis (`reanalyze_template`) | Only the template id, pages, kind and version: nothing is uploaded
|
|
28
|
+
| Data | Sent to fenfill? |
|
|
29
|
+
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
30
|
+
| The blank PDF you analyze | Yes, once (then cached locally) |
|
|
31
|
+
| Your API key | Yes, as `Authorization: Bearer` |
|
|
32
|
+
| The agent's answers, signatures and the filled PDF | **No, never** |
|
|
33
|
+
| Saved templates (blank PDF, fields, your logo) | Downloaded from fenfill to fill locally |
|
|
34
|
+
| Page previews (`preview_page`) | **No**: rendered on your machine |
|
|
35
|
+
| Layout corrections (`edit_template`) | Only on `save_template`, and then only the layout and the form's own wording |
|
|
36
|
+
| Re-analysis (`reanalyze_template`) | Only the template id, pages, kind and version: nothing is uploaded |
|
|
37
|
+
| Japanese font download | `GET https://fenfill.com/fonts/NotoSansJP-Regular.ttf`, once, only when a value contains Japanese. Sends no auth and no form data, just a plain GET with a `fenfill-mcp/<version>` User-Agent. Redirects to another host are refused. Checked against a pinned sha256, then cached. |
|
|
36
38
|
|
|
37
39
|
`analyze_form` refuses PDFs whose form fields already hold answers, and PDFs this server wrote
|
|
38
40
|
itself, so a filled-in form isn't uploaded by mistake.
|
|
@@ -91,20 +93,20 @@ On native Windows, if the client can't find `npx`, use `"command": "cmd"` with
|
|
|
91
93
|
|
|
92
94
|
## Tools
|
|
93
95
|
|
|
94
|
-
| Tool | What it does
|
|
95
|
-
| ----------------------- |
|
|
96
|
-
| `analyze_form` | Uploads a **blank** PDF once and returns its fields. Cached locally afterwards.
|
|
97
|
-
| `fill_form` | Fills an analyzed PDF locally
|
|
98
|
-
| `fill_template` | Fills a saved fenfill template locally.
|
|
99
|
-
| `list_templates` | Lists the workspace's saved templates, newest first.
|
|
100
|
-
| `get_template` | Shows a template's fields (use `pages` to narrow a large form).
|
|
101
|
-
| `create_recipient_link` | Creates a personal fill link for one recipient of a restricted template.
|
|
102
|
-
| `get_recipient_status` | Shows those links' status: `pending`, `opened` or `completed`.
|
|
103
|
-
| `get_account` | Shows the plan, page scans left and limits.
|
|
104
|
-
| `preview_page` | Renders one page (PNG) with every field box outlined and tagged, locally.
|
|
105
|
-
| `edit_template` | Moves, resizes, relabels, retypes, adds, deletes or regroups fields, locally.
|
|
106
|
-
| `save_template` | Saves `edit_template`'s working copy to a saved template.
|
|
107
|
-
| `reanalyze_template` | Re-analyzes some pages of a saved template, with no upload, and shows the diff.
|
|
96
|
+
| Tool | What it does |
|
|
97
|
+
| ----------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
98
|
+
| `analyze_form` | Uploads a **blank** PDF once and returns its fields. Cached locally afterwards. |
|
|
99
|
+
| `fill_form` | Fills an analyzed PDF locally (your answers never leave your machine) and writes a new flattened PDF. |
|
|
100
|
+
| `fill_template` | Fills a saved fenfill template locally. |
|
|
101
|
+
| `list_templates` | Lists the workspace's saved templates, newest first. |
|
|
102
|
+
| `get_template` | Shows a template's fields (use `pages` to narrow a large form). |
|
|
103
|
+
| `create_recipient_link` | Creates a personal fill link for one recipient of a restricted template. |
|
|
104
|
+
| `get_recipient_status` | Shows those links' status: `pending`, `opened` or `completed`. |
|
|
105
|
+
| `get_account` | Shows the plan, page scans left and limits. |
|
|
106
|
+
| `preview_page` | Renders one page (PNG) with every field box outlined and tagged, locally. |
|
|
107
|
+
| `edit_template` | Moves, resizes, relabels, retypes, adds, deletes or regroups fields, locally. |
|
|
108
|
+
| `save_template` | Saves `edit_template`'s working copy to a saved template. |
|
|
109
|
+
| `reanalyze_template` | Re-analyzes some pages of a saved template, with no upload, and shows the diff. |
|
|
108
110
|
|
|
109
111
|
`analyze_form` options: `pages` (e.g. `"1-3,5"`; long PDFs can be analyzed in chunks, and
|
|
110
112
|
`fill_form` merges them), `save_as_template` (also keep it as a fenfill template), `access`
|
|
@@ -127,10 +129,14 @@ cancelling the call ends the wait. `too_many_active_jobs` counts every running a
|
|
|
127
129
|
workspace, free native-field (AcroForm) ones included.
|
|
128
130
|
|
|
129
131
|
`fill_form` and `fill_template` take `values`, `output_path` (a new `.pdf`) and optional
|
|
130
|
-
`overwrite`. They never overwrite the input PDF. In `values` (here and in `preview_page`),
|
|
131
|
-
may be shortened to an unambiguous prefix of
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
`overwrite`. They never overwrite the input PDF. In `values` (here and in `preview_page`), any id
|
|
133
|
+
may be shortened to an unambiguous prefix of 4+ characters (the preview tags show 6); that goes
|
|
134
|
+
for a table's cell or column ids inside its value, and for option ids in a choice's value, too. A
|
|
135
|
+
table cell's id given at the top level goes into its table's value, and an option's id given
|
|
136
|
+
`true` selects it (a radio's value, or one more item of a multiselect's list; `false` leaves it
|
|
137
|
+
unselected). A key that matches nothing is listed in `skipped`; one that starts several ids is
|
|
138
|
+
listed with its candidates, and a nested id that can't stand alone (a comb's cell, a table_rows
|
|
139
|
+
column) names the entry it belongs to.
|
|
134
140
|
|
|
135
141
|
### Previews and corrections
|
|
136
142
|
|
|
@@ -146,7 +152,11 @@ when that follows the box height); a choice's options with their own boxes; a ta
|
|
|
146
152
|
`(row, col)`, its `orientation` and headers (also printed on the image inside, or beside, the
|
|
147
153
|
first cell of each line as `R: …` / `C: …`; a character the bundled fonts lack is shown as `?`
|
|
148
154
|
there, with a warning, and the legend keeps the full text); a `table_rows` table's columns and printed cells
|
|
149
|
-
with their boxes (fill values still go by column id)
|
|
155
|
+
with their boxes (fill values still go by column id); every date field, table date cell and date
|
|
156
|
+
column's `date_format` (the default `DD/MM/YYYY` when none is stored); and a comb's `cell_type`,
|
|
157
|
+
`max_length`, `date_format`, and in a `crop` its `comb_cells`: each printed cell in reading order with its tag
|
|
158
|
+
(the cell's own field; `index` for one cell of a field drawn over several) and box, plus the
|
|
159
|
+
`date_part` (`D`, `M` or `Y`) each cell of a date comb holds. `warnings` and `placement_warnings` are
|
|
150
160
|
always present (`[]` = checked and clean): placement covers every box shown, so a plain preview
|
|
151
161
|
is a read-only placement audit (see the checks under `edit_template`). `crop`
|
|
152
162
|
(`{x, y, w, h}`, fractions) with `zoom` (default 2, max 8) renders just a region, magnified, and
|
|
@@ -157,8 +167,12 @@ options/cells/columns (`members_changed` counts them, so a header edit doesn't l
|
|
|
157
167
|
grid), plus `removed` ids and `moved_into` (ids that now sit inside a table or group), and
|
|
158
168
|
`legend: "none"` omits the legend. `overlay` says what is drawn over the page: `"full"` (the
|
|
159
169
|
default), `"outline"` (the boxes without id tags and table header texts) or `"none"` (nothing:
|
|
160
|
-
the page as a fill stamps it).
|
|
161
|
-
stamped
|
|
170
|
+
the page as a fill stamps it). Since 0.2.3 the `"full"` tags keep off the printed text (read from
|
|
171
|
+
the PDF's text layer) and the stamped values: an option's tag goes below, above or on the side
|
|
172
|
+
away from its caption, and a tag with no room beside its box is moved off and joined to it by a
|
|
173
|
+
thin line. On a scan there is no text layer, so a tag may still cover print there. Use the last
|
|
174
|
+
two when an outline covers what you must read; `"none"` needs no outlined copy, so it also
|
|
175
|
+
renders after `check_copy_failed`.
|
|
162
176
|
The legend and `placement_warnings` are the same in all three. It renders the local working copy (`edit_template`) when there is one, otherwise the saved
|
|
163
177
|
template or analyzed version; `edited: true` / `false` in the result says which. The page is rendered on your machine by
|
|
164
178
|
PDFium (WebAssembly, shipped in the package; nothing native is installed), nothing is written to
|
|
@@ -176,6 +190,19 @@ disk, and the image goes only to the calling client.
|
|
|
176
190
|
`cell_type` (`char`, `integer` or `date`) and `date_format` (one `D`, `M` or `Y` per cell, e.g.
|
|
177
191
|
`DDMMYYYY`). Giving a `date_format` makes it a date comb, and `diff_summary.ops` echoes the
|
|
178
192
|
comb's `cell_type`, `date_format` and `max_length` as a fill will read them;
|
|
193
|
+
- combs in one op (0.2.3): `add {type: "comb", page, label, cells, box?, cell_type?,
|
|
194
|
+
date_format?, section_id?, required?, description?}` makes a comb, either `box` cut into
|
|
195
|
+
`cells` equal cells, or `cells` as a list of the printed cells' own boxes (cells split by
|
|
196
|
+
printed separators, as in DD / MM / YYYY). `retype {id, type: "comb", cells, cell_type?,
|
|
197
|
+
date_format?}` turns a text or date field into a comb over its box, keeping its label,
|
|
198
|
+
section, order, `required` and description (a date field's `DD/MM/YYYY` gives `DDMMYYYY` when
|
|
199
|
+
the counts agree). `comb_add_cell {id: comb, box, date_format?}` and `comb_remove_cell {id:
|
|
200
|
+
cell, date_format?}` keep the comb's id; a date comb needs its new `date_format` with them (one
|
|
201
|
+
letter per cell). `group {kind: "comb"}` also takes `cell_type` and `date_format`, and
|
|
202
|
+
`set_format` on a comb's cell applies to its comb. A comb's cells have no label of their own;
|
|
203
|
+
- refs within a batch: give an op that adds something a `ref` (`"dob"`), and later ops of the
|
|
204
|
+
same call name what it added as `"$dob"` wherever an id goes (`set_format {id: "$dob", …}`,
|
|
205
|
+
`group {ids: ["$a", "$b"]}`). A ref of a rejected op names nothing;
|
|
179
206
|
- tables: `group` with `kind: "table"` (a `cells` grid of field ids, rows × columns with `null`
|
|
180
207
|
for a gap, or `ids` laid out from their boxes; `header_cols`, `header_rows`, `orientation`,
|
|
181
208
|
`format`), `table_insert` / `table_delete` (a row or column; a new line's geometry is
|
|
@@ -184,7 +211,10 @@ disk, and the image goes only to the calling client.
|
|
|
184
211
|
and `set_header` / `set_headers` (`{id, axis, texts: [...], start?}`, several in one op). Every cell of one column (or row, for `orientation: "row"`) has one type,
|
|
185
212
|
as in the web editor; `set_format` on a table cell applies to its whole column or row;
|
|
186
213
|
- order: `reorder {page, ids}` moves those top-level entries together, in that order, to where
|
|
187
|
-
|
|
214
|
+
whichever of them is listed first now stands (not necessarily `ids[0]`'s place); every other
|
|
215
|
+
entry keeps its relative order. A partial list moves only what it names: to put B right after
|
|
216
|
+
A, list both, and chained partial reorders are simplest replaced by one with the page's whole
|
|
217
|
+
list. It stamps an explicit `order` on every entry of the page (the web
|
|
188
218
|
editor's layer-panel convention), so a later sub-pixel move no longer reshuffles questions.
|
|
189
219
|
`diff_summary.ops` shows the `order` the page is now listed in. fenfill lists each section as
|
|
190
220
|
one run, standing where its first entry stands, so entries of different sections never stand
|
|
@@ -193,7 +223,10 @@ disk, and the image goes only to the calling client.
|
|
|
193
223
|
- sections: `set_section {ids, section_id}` moves fields or groups of one page to another of
|
|
194
224
|
that page's sections (`null`: out of every section; a group moves with all its members), and
|
|
195
225
|
`set_section_title {page, section_id, title}` renames one. `get_template` and `analyze_form`
|
|
196
|
-
show each section's `section_id`.
|
|
226
|
+
show each section's `section_id`. `add` without `section_id` lands in the section of the
|
|
227
|
+
nearest field at or above it, a new `group` in its earliest member's section and at that
|
|
228
|
+
member's place in the order; `diff_summary.ops` gives each one's `section`, and a `group` its
|
|
229
|
+
`members` (ids unchanged) in reading order.
|
|
197
230
|
|
|
198
231
|
Any id can be shortened to an unambiguous prefix of 6+ characters (the length of the preview
|
|
199
232
|
tags); an ambiguous prefix is rejected with the candidates. `add`, `move` and `set_box` take an
|
|
@@ -206,10 +239,22 @@ scan can be missed, and an underline box is one line of handwriting tall (as tal
|
|
|
206
239
|
space above the rule, within about 11–16 pt). `diff_summary.ops` lists every applied op with
|
|
207
240
|
`snapped: true/false` (when it asked for a snap) and `noop: true` when it changed nothing; a
|
|
208
241
|
batch that leaves the form as it was writes no working copy (`has_edits` stays `false`). After
|
|
209
|
-
each edit, the boxes you touched are checked for
|
|
242
|
+
each edit, the boxes you touched are checked for four placement problems: a value that would
|
|
210
243
|
print much larger than the page's other fields (an Auto box's text size follows its height), a
|
|
211
|
-
box over printed text (text layer only, so not on scans), and a box
|
|
212
|
-
ruled cell it sits in (from the page render, so scans too).
|
|
244
|
+
box over printed text (text layer only, so not on scans; the covered text is quoted), and a box
|
|
245
|
+
that runs a little past the ruled cell it sits in (from the page render, so scans too). Pale text
|
|
246
|
+
printed at the left edge of a blank's row or cell is a hint and is written over ("Name",
|
|
247
|
+
"Address"); a caption printed part-way along the row is not. So a box over a pale hint at its
|
|
248
|
+
left edge (or its ruled cell's) is no misplacement: it is listed under `notes` here and
|
|
249
|
+
`placement_notes` in `preview_page`, never as a warning. Invisible text (an OCR layer over a
|
|
250
|
+
scan) counts as the print it stands for. Signature boxes get the printed-text check too. And a choice's option box is checked
|
|
251
|
+
against its caption in reading order: it warns when the box is on the other side of its caption
|
|
252
|
+
from the question's other boxes (one question never mixes sides), or when the first printed text
|
|
253
|
+
after the box (before it, for boxes printed after their captions) is another option's caption. An
|
|
254
|
+
option the form prints no box for has its box on the same side as the printed ones; when that
|
|
255
|
+
side has no room on its caption's line (its caption starts the line), the box goes in the slot
|
|
256
|
+
just before the caption in reading order, at the end of the line above, and that passes. Not on
|
|
257
|
+
scans (no text layer). `set_format` merges into the stored
|
|
213
258
|
format (a date field keeps its date format when you only set `font_size`).
|
|
214
259
|
Coordinates are fractions of the page (0–1) with a top-left origin, the same as the legend's
|
|
215
260
|
`box`. Each op is checked against the rules fenfill applies when saving and is rejected with a
|
|
@@ -228,8 +273,10 @@ page shows it: a date in its field's printed format (`1990-05-17` as `17.05.1990
|
|
|
228
273
|
characters without the separators typed between them, an answer of several lines also line by
|
|
229
274
|
line. A date written a third way (`17/05/1990`) is not recognised. The values of a fill or
|
|
230
275
|
preview that failed before the form was read (an output file that already exists, a failed
|
|
231
|
-
download) count as answers too.
|
|
232
|
-
|
|
276
|
+
download) count as answers too. A comb cell's own label is never shown (the comb is listed under the
|
|
277
|
+
group's label), so a placeholder label on a cell that equals an answer of under 4 characters
|
|
278
|
+
(`D1`) passes without a warning; one equal to a longer answer, or holding one, is refused. The
|
|
279
|
+
reason names the entry and the property (a section with its page), never the text. A printed caption can share a word with a test value (`Middle name` after
|
|
233
280
|
previewing `Middle`): when the rejected wording is the form's own, send the op again with
|
|
234
281
|
`confirm_wording: true`. That lets through only wording a rejection has already named (that
|
|
235
282
|
text in that property), and what you confirmed is the wording: it is not asked about again in
|
|
@@ -257,8 +304,10 @@ unsaved analysis can be edited for filling but not saved: to keep corrections,
|
|
|
257
304
|
analyze with `save_as_template: true` and edit that template. With nothing to save, it succeeds
|
|
258
305
|
with `saved: false, nothing_to_save: true`. `get_template` lists the fields in `sections`, in fenfill's order: one
|
|
259
306
|
block per section (with its `section_id` and `title`), and fields in no section as blocks of
|
|
260
|
-
their own where they stand.
|
|
261
|
-
|
|
307
|
+
their own where they stand. With local edits it lists the working copy, as `fill_template` and
|
|
308
|
+
`preview_page` use it (`edited: true`, `has_local_edits: true`): new option ids, deleted rows,
|
|
309
|
+
sections and order show before you save; `version: "saved"` lists fenfill's saved version
|
|
310
|
+
instead (`edited: false`). It gives `field_count`
|
|
262
311
|
(entries listed) and `field_count_total` (the whole form); `save_template`'s `field_count` is
|
|
263
312
|
the whole saved template.
|
|
264
313
|
|
|
@@ -295,7 +344,7 @@ same run at no extra charge.
|
|
|
295
344
|
| Field type | Value |
|
|
296
345
|
| ------------------- | --------------------------------------------------------------------------- |
|
|
297
346
|
| `text`, `multiline` | string, stamped exactly as given |
|
|
298
|
-
| `comb` | string, one character per cell
|
|
347
|
+
| `comb` | string, one character per cell (a date comb: below) |
|
|
299
348
|
| `date` | `"YYYY-MM-DD"`, printed in the field's `date_format` (e.g. `DD/MM/YYYY`) |
|
|
300
349
|
| `checkbox` | `true` / `false` |
|
|
301
350
|
| `radio` | option id, option label, or the bare option text (`"No"` for `"Smoke? No"`) |
|
|
@@ -304,6 +353,11 @@ same run at no extra charge.
|
|
|
304
353
|
| `table_rows` | `[{ "<columnId>": value, … }, …]` |
|
|
305
354
|
| `signature` | `{ "image_path": "/abs/path/signature.png" }` (PNG or JPG) |
|
|
306
355
|
|
|
356
|
+
A date comb (`cell_type: "date"`) takes the whole date as one string, never cell by cell:
|
|
357
|
+
`"YYYY-MM-DD"`, laid out by its `date_format` (`DDMMYYYY` writes `17052024`), or exactly its
|
|
358
|
+
`max_length` digits in the printed order. The preview legend lists a comb's `cell_type`,
|
|
359
|
+
`max_length`, `date_format` and cells.
|
|
360
|
+
|
|
307
361
|
A date the form asks for in a plain `text` field is not reformatted: write it the way the field's
|
|
308
362
|
label or placeholder asks (for example `10042026` for "mmddyyyy"). A `signature` whose
|
|
309
363
|
`signing_requirement` is `"external"` is signed outside fenfill (on paper, or with an e-signature
|
|
@@ -338,6 +392,14 @@ fenfill web app for that workspace (for example, your logo if you have set one u
|
|
|
338
392
|
working copy holds the layout plus the wording the agent wrote with `edit_template`; the echo
|
|
339
393
|
guard refuses wording that repeats an answer seen in the same session before it is written,
|
|
340
394
|
unless the agent, told which property matched, confirms that it is the form's own wording.
|
|
395
|
+
- **`fonts/`** in the cache holds the Japanese font (Noto Sans JP, about 5.8 MB), downloaded the
|
|
396
|
+
first time a value needs it and never aged out. To work offline, copy
|
|
397
|
+
`NotoSansJP-Regular.ttf` (from `https://fenfill.com/fonts/NotoSansJP-Regular.ttf`) into
|
|
398
|
+
`<cache>/fonts/` (`FENFILL_CACHE_DIR` if you set it); it is used if its sha256 matches the
|
|
399
|
+
pinned value.
|
|
400
|
+
- **Supported scripts:** Latin, Cyrillic and Greek; Hebrew and Arabic (printed right to left,
|
|
401
|
+
Arabic joined); Japanese (kana, kanji and other CJK ideographs, CJK punctuation and full-width
|
|
402
|
+
forms, plus symbols such as ⑪ and 〈〉) through the on-demand font above.
|
|
341
403
|
- **Cache cleanup:** at startup and at most once a day it deletes blank PDFs and the logo after
|
|
342
404
|
1 hour, analyses and working copies unused for 90 days, stale job records after 48 hours, and
|
|
343
405
|
output hashes after a year.
|
|
@@ -350,28 +412,29 @@ fenfill web app for that workspace (for example, your logo if you have set one u
|
|
|
350
412
|
|
|
351
413
|
## Troubleshooting
|
|
352
414
|
|
|
353
|
-
| Error | What to do
|
|
354
|
-
| ------------------------------------- |
|
|
355
|
-
| `missing_api_key` / `invalid_api_key` | Set `FENFILL_API_KEY` in the client's config and restart the client.
|
|
356
|
-
| `plan_required` | The workspace needs a paid plan (Pro and up).
|
|
357
|
-
| `insufficient_scans` | Not enough page scans left; analyze fewer `pages` or check `get_account`.
|
|
358
|
-
| `prefilled_form` / `filled_output` | Only blank forms can be analyzed; use the original, empty PDF. If it is the blank form (some ship with default text in their fields), use the fenfill web app.
|
|
359
|
-
| `pdf_password_required` | Remove the open password first; owner-password PDFs work as they are.
|
|
360
|
-
| `pdf_fill_forbidden` | The PDF's author forbids form filling; fenfill won't fill it. Use a copy that allows filling.
|
|
361
|
-
| `
|
|
362
|
-
| `
|
|
363
|
-
| `
|
|
364
|
-
| `
|
|
365
|
-
| `
|
|
366
|
-
| `
|
|
367
|
-
| `
|
|
368
|
-
| `
|
|
369
|
-
| `
|
|
370
|
-
| `
|
|
371
|
-
| `
|
|
372
|
-
| `
|
|
373
|
-
| `
|
|
374
|
-
| `
|
|
415
|
+
| Error | What to do |
|
|
416
|
+
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
417
|
+
| `missing_api_key` / `invalid_api_key` | Set `FENFILL_API_KEY` in the client's config and restart the client. |
|
|
418
|
+
| `plan_required` | The workspace needs a paid plan (Pro and up). |
|
|
419
|
+
| `insufficient_scans` | Not enough page scans left; analyze fewer `pages` or check `get_account`. |
|
|
420
|
+
| `prefilled_form` / `filled_output` | Only blank forms can be analyzed; use the original, empty PDF. If it is the blank form (some ship with default text in their fields), use the fenfill web app. |
|
|
421
|
+
| `pdf_password_required` | Remove the open password first; owner-password PDFs work as they are. |
|
|
422
|
+
| `pdf_fill_forbidden` | The PDF's author forbids form filling; fenfill won't fill it. Use a copy that allows filling. |
|
|
423
|
+
| `unsupported_script` | A value needs Japanese characters (text, comb or a checkbox symbol like 〇) and the font could not be loaded; `ids` lists the fields and `details.reason` why (`network`, `http_status`, `hash_mismatch`, `timeout`, `too_large`). Connect once and retry, or pre-seed the font (see Files and privacy). The check spans the whole document, so `preview_page` refuses too. |
|
|
424
|
+
| `not_analyzed` | Run `analyze_form` on the same file (and pages) before `fill_form`. |
|
|
425
|
+
| `output_exists` | Pick a new `output_path` or pass `overwrite: true`. |
|
|
426
|
+
| `rate_limited` / `queue_full` | `analyze_form` already waited about a minute (`waited_s`); try again later. |
|
|
427
|
+
| `too_many_active_jobs` | Other analyses in the workspace (free native-field ones too) are still running; try again in a minute, or analyze fewer at once. |
|
|
428
|
+
| `template_conflict` | The template changed in fenfill since your edits began. Your local edits are kept: `edit_template` with `discard: true`, re-apply the ops, save again. |
|
|
429
|
+
| `invalid_schema` | fenfill (or the local check before it) refused the edited layout; `details` lists each item and reason. Fix them with `edit_template`. |
|
|
430
|
+
| `check_copy_failed` | `preview_page` could not build its outlined copy; `stage` and `id` say where. Fix or remove that field or group with `edit_template`, then preview again; `overlay: "none"` still shows the page meanwhile. |
|
|
431
|
+
| `request_too_large` | The edited template is too large to save in one request. |
|
|
432
|
+
| `answer_in_template` | Edited wording matches an answer from this session, so nothing was sent; `matched` lists the ids and properties. An answer: put the form's own wording back with `edit_template`. The form's own wording: `save_template` again with `confirm_wording: true`. |
|
|
433
|
+
| `confirm_wording_needed` | The working copy has wording edited in an earlier session. Review the ids and properties in `changed`, then `save_template` with `confirm_wording: true`. |
|
|
434
|
+
| `local_edits_pending` | `reanalyze_template` won't run over unsaved edits: `save_template` them first, or pass `discard: true`. |
|
|
435
|
+
| `kind_required` | The pages already have fields: pass `kind` (`find`, `relabel`, `label_missing`, or `scratch` to replace them). |
|
|
436
|
+
| `job_in_progress` | A job is already running on the template; wait and retry (call `reanalyze_template` again with the same arguments if you started it). |
|
|
437
|
+
| `upload_outcome_unknown` | An earlier upload was interrupted. To avoid charging twice, the same file isn't re-uploaded for about 10 minutes; check `get_account` meanwhile. |
|
|
375
438
|
|
|
376
439
|
## API
|
|
377
440
|
|
package/THIRD_PARTY_NOTICES
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@fenfill/mcp 0.2.
|
|
1
|
+
@fenfill/mcp 0.2.4 bundles the following third-party software.
|
|
2
2
|
|
|
3
3
|
@cantoo/pdf-lib@2.11.1 (MIT)
|
|
4
4
|
------------------------------------------------------------------------
|
|
@@ -397,6 +397,32 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
397
397
|
SOFTWARE.
|
|
398
398
|
|
|
399
399
|
|
|
400
|
+
bidi-js@1.0.3 (MIT)
|
|
401
|
+
------------------------------------------------------------------------
|
|
402
|
+
Copyright (c) 2021 Jason Johnston
|
|
403
|
+
|
|
404
|
+
MIT License
|
|
405
|
+
|
|
406
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
407
|
+
a copy of this software and associated documentation files (the
|
|
408
|
+
"Software"), to deal in the Software without restriction, including
|
|
409
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
410
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
411
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
412
|
+
the following conditions:
|
|
413
|
+
|
|
414
|
+
The above copyright notice and this permission notice shall be
|
|
415
|
+
included in all copies or substantial portions of the Software.
|
|
416
|
+
|
|
417
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
418
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
419
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
420
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
421
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
422
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
423
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
424
|
+
|
|
425
|
+
|
|
400
426
|
culori@4.0.2 (MIT)
|
|
401
427
|
------------------------------------------------------------------------
|
|
402
428
|
MIT License
|