# FynePDF

> Compress, merge, convert, OCR, redact and sign PDFs, generate new ones, and read them with AI.

- name: com.fynepdf/fynepdf
- version: 0.1.0
- connection class: R0 (autonomous)
- trust: 100/100
- quality: 92/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.fynepdf%2Ffynepdf
- tools: https://api.protogrid.dev/v1/servers/com.fynepdf%2Ffynepdf/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "fynepdf": {
      "type": "http",
      "url": "https://api.fynepdf.com/mcp",
      "headers": {
        "Authorization": "Bearer ${FYNEPDF_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${FYNEPDF_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 100
- drivers: +repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-100% +updated-6d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 92/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 27 of 27 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- warn `tools.token_cost`: about 8,552 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 6 of the 7 days needed

### dependencies: 100 (weight 15)

- pass `deps.known_vulns`: no known advisory in 99 resolved packages
- pass `deps.mcp_sdk_version`: @modelcontextprotocol/sdk 1.32.1, no known advisory
- pass `deps.resolvable`: @fynepdf/mcp@0.1.0 resolved: 99 packages

- tools: 27, about 8,552 tokens to load them all
- tool set hash: a240469277450d0a535427954ca6fcfc
- tools last changed: 2026-11-05T09:40:22.808Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.fynepdf/fynepdf.svg)](https://protogrid.dev/servers/com.fynepdf/fynepdf)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-05 `get_job` changed (outputSchema)
- 2026-11-05 `smart_edit` changed (outputSchema)
- 2026-11-05 `extract_data` changed (outputSchema)
- 2026-11-05 `ask_pdf` changed (outputSchema)
- 2026-11-05 `sign_pdf` changed (outputSchema)
- 2026-11-05 `create_pdf` changed (outputSchema)
- 2026-11-05 `ocr_pdf` changed (outputSchema)
- 2026-11-05 `convert_to_pdf` changed (outputSchema)
- 2026-11-05 `convert_from_pdf` changed (outputSchema)
- 2026-11-05 `redact_pdf` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/com.fynepdf%2Ffynepdf/changes

## Dependencies

- npm @fynepdf/mcp@0.1.0: resolved, 98 dependencies, MCP SDK @modelcontextprotocol/sdk 1.32.1

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://api.fynepdf.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- npm @fynepdf/mcp@0.1.0 secrets: FYNEPDF_API_KEY

## Tools (27)

- `app_ready`: FynePDF's in-chat cards say once which host bridge they run in, for diagnosis. Not for conversation.
- `ask_pdf`: Answer a question from the document only, citing pages. Every quote is checked against the page text (verified: false marks one that couldn't be found).
- `compress_pdf`: Make a PDF smaller: at a level (low, medium, high) or under a target size in MB. The result says whether the target was met.
- `convert_from_pdf`: Turn a PDF into Word (.docx), Excel or CSV (tables found on the page), images (PNG/JPEG in a ZIP), Markdown, EPUB, PDF/A (archival), LaTeX, or a grayscale PDF. For tables read by AI (scans, bank statements), use extract_data.
- `convert_to_pdf`: Make a PDF from Word, Excel or PowerPoint files, images (one page each, in order), an EPUB, or a public web page (url). For content you write yourself, use create_pdf.
- `create_pdf`: Turn Markdown or HTML you write into a well-set PDF: a report, invoice, letter, resume or plain document. Tables, headings, lists, images by URL and page breaks work; header, footer and page numbers are optional. For an invoice, resume or letter, prefer data (the fields, with template set to match): it is laid out properly, and an invoice is added up for you (leave out amounts, subtotal, tax or total to have them worked out; give them and they are checked). extract_data's invoice result can be passed as data as it is. Use it whenever the person wants a document they can download, print or send.
- `edit_pages`: Change a PDF's pages (counted from 1): delete pages, keep only some pages, put pages in a new order (pages left out are dropped), or rotate all pages or a range.
- `extract_data`: Read structured data with AI and check it in code: invoice (fields, lines and totals, added up), statement (bank transactions, balances compared), tables (every table, cell by cell), or schema (your own JSON Schema). Output json returns the data here; excel or csv also makes a spreadsheet file (tables and statement).
- `get_file`: A file's details and a fresh download link (valid 1 hour).
- `get_job`: Check a job that was still running, and get its files when it's done. Waits up to 50 seconds by default.
- `import_file_from_url`: Fetch a PDF, Office file, image or EPUB from a public link into FynePDF and get its file_id.
- `list_actions`: Every action FynePDF can run on a file (the REST API's job steps), with what it takes, what it makes and its price in API credits.
- `list_files`: Files on FynePDF from the last 24 hours, newest first: what the person dropped in the upload box, other uploads and imports, and results. Use it to find the file_id of a file the person says they uploaded, by its name.
- `list_library_files`: Files saved in the person's FynePDF Library, newest first (pinned on top). Pass an id as library_file_id to any tool.
- `merge_pdfs`: Join PDFs into one, in the order given (file_ids, then files, then file_urls). Each part gets a bookmark with its name.
- `ocr_pdf`: Add a text layer to scanned pages, so the text can be searched, copied and read by AI. Takes a scanned PDF or an image (a photo or scan as PNG, JPEG, TIFF, GIF, WebP or HEIC), which comes back as a searchable PDF. Reads 90 languages and finds the language itself; pass language only when the person names one.
- `preview_file`: The first pages of a PDF as images, for FynePDF's result viewer. Not needed in conversation: use get_file for a link.
- `protect_pdf`: lock: add a password needed to open it. unlock: remove a password you know. flatten: burn form fields and annotations into the page so they can't be changed.
- `redact_pdf`: Remove text for real, not just cover it: name the exact text to remove, or describe it ("all names, emails and account numbers") and FynePDF finds it. The result is checked: if any of the text can still be found, nothing is returned. The original file is kept.
- `save_to_library`: Keep a result in the person's FynePDF Library (fynepdf.com/library), so it isn't deleted after 24 hours.
- `search_docs`: Search the FynePDF API and MCP documentation: actions, parameters, pricing, files, jobs and errors.
- `sign_pdf`: Stamp a signature image (PNG or JPEG) on a page: at a named spot (bottom-right by default) or at x and y in points from the top-left corner.
- `smart_edit`: Describe the change ("remove the blank pages, number the rest and make it PDF/A"): FynePDF plans the steps from its actions, checks the plan, and runs it. With run false it only returns the plan.
- `split_pdf`: Split a PDF into parts by page ranges ("1-3", "4", "5-9") or into parts no bigger than max_part_mb. Returns a ZIP of the parts.
- `stamp_pdf`: Number the pages, stamp a text watermark on every page, or both in one go. Page number format uses %d twice, e.g. "Page %d of %d".
- `summarize_pdf`: A plain summary and key points, each with the pages it comes from.
- `upload_file`: Bring a file into FynePDF. Shows a drop zone where the app supports it (Claude, ChatGPT, VS Code); it takes several files at once, e.g. for a merge, and reports their file_ids in order. With file_name and size_bytes it also returns a signed upload_url and a ready curl command, for a code sandbox or agent to PUT the bytes; the file_id works once the upload is done. ChatGPT users can just pass the attached file to any tool instead.
