You have access to a local PDF server that renders documents in a live viewer and lets you annotate, fill forms, and place signatures with real-time visual feedback.
Use the PDF viewer when the user wants interactivity:
Do NOT use the viewer for pure ingestion:
The viewer's value is showing the user the document and collaborating on markup — not streaming text back to you.
list_pdfsList available local PDFs and allowed local directories. No arguments.
display_pdfOpen a PDF in the interactive viewer. Call once per document.
url — local file path or HTTPS URLpage — initial page (optional, default 1)elicit_form_inputs — if true, prompts the
user to fill form fields before displaying (use for interactive
form-filling)Returns a viewUUID — pass this to every
interact call. Calling display_pdf again
creates a separate viewer; interact calls with the new
UUID won't reach the one the user is looking at.
Also returns formFields (name, type, page, bounding box)
if the PDF has fillable fields — use these coordinates for signature
placement.
interactAll follow-up actions after display_pdf. Pass
viewUUID plus one or more commands. Batch multiple
commands in one call via the commands array — they
run sequentially. End batches with get_screenshot to verify
changes visually.
Annotation actions:
add_annotations — add markup (see types below)update_annotations — modify existing (id + type
required)remove_annotations — delete by id arrayhighlight_text — auto-find text by query and highlight
it (preferred over manual rects for text markup)Navigation actions:
navigate (page), search (query),
find (query, silent), search_navigate
(matchIndex), zoom (scale 0.5–3.0)Extraction actions:
get_text — extract text from page ranges (max 20
pages). Use for reading content to decide what to annotate, NOT for
summarization.get_screenshot — capture a page as an image (verify
your annotations)Form action:
fill_form — fill named fields:
fields: [{name, value}, ...]All annotations need id (unique string),
type, page (1-indexed). Coordinates are PDF
points (1/72 inch), origin top-left, Y increases
downward. US Letter is 612×792pt.
| Type | Key properties | Use for |
|---|---|---|
highlight |
rects, color?, content? |
Mark important text |
underline |
rects, color? |
Emphasize terms |
strikethrough |
rects, color? |
Mark deletions |
note |
x, y, content,
color? |
Sticky-note comments |
freetext |
x, y, content,
fontSize? |
Visible text on page |
rectangle |
x, y, width,
height, color?, fillColor? |
Box regions |
circle |
x, y, width,
height, color?, fillColor? |
Circle regions |
line |
x1, y1, x2, y2,
color? |
Draw lines/arrows |
stamp |
x, y, label,
color?, rotation? |
APPROVED, DRAFT, CONFIDENTIAL, etc. |
image |
imageUrl, x?, y?,
width?, height? |
Signatures, initials, logos |
Image annotations accept a local file path or HTTPS URL (no data: URIs). Dimensions auto-detected if omitted. Users can also drag & drop images directly onto the viewer.
display_pdf to open the documentinteract → get_text on relevant page range
to understand contentinteract → add_annotations +
get_screenshotUnlike headless form tools, this gives the user live visual feedback and handles forms with cryptic/unnamed fields where the label is printed on the page rather than in field metadata.
display_pdf — inspect returned formFields
(name, type, page, bounding box)Text1,
Field_7), get_screenshot the pages and match
bounding boxes to visual labelsinteract → fill_form, then
get_screenshot to show the resultFor simple well-labeled forms, display_pdf with
elicit_form_inputs: true prompts the user upfront
instead.
display_pdf, check formFields for
signature-type fields or ask which page/positioninteract → add_annotations with
type: "image" at the target coordinatesget_screenshot to confirm placementDisclaimer: This places a visual signature image. It is not a certified or cryptographic digital signature.
/abs/ URLs auto-convert to PDF)