
Compress, merge, convert, OCR, redact and sign PDFs, generate new ones, and read them with AI.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. Bearer and a FynePDF API key, instead of signing in with OAuth.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
FynePDF's in-chat cards say once which host bridge they run in, for diagnosis. Not for conversation.
Frame size once the host sized it.
When the card reported, e.g. 2s.
What the host posted to the card, with times.
Whether ChatGPT offered notifyIntrinsicHeight.
The height the card asked for.
Frame size when the card opened.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http fynepdf https://api.fynepdf.com/mcp
Headers
Authorization (optional, not in the config above): Optional. Bearer and a FynePDF API key, instead of signing in with OAuth.FynePDF's in-chat cards say once which host bridge they run in, for diagnosis. Not for conversation.
| Argument | Type | Description |
|---|---|---|
| app* | string | |
| host | string | |
| frame | string | Frame size once the host sized it. |
| phase | string | When the card reported, e.g. 2s. |
| trace | string | What the host posted to the card, with times. |
| bridge* | string | |
| notify | boolean | Whether ChatGPT offered notifyIntrinsicHeight. |
| content | number | The height the card asked for. |
| display | string | |
| viewport | string | Frame size when the card opened. |
| max_height | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"app",
"bridge"
],
"properties": {
"app": {
"enum": [
"result",
"upload"
],
"type": "string"
},
"host": {
"type": "string",
"maxLength": 60
},
"frame": {
"type": "string",
"maxLength": 20,
"description": "Frame size once the host sized it."
},
"phase": {
"type": "string",
"maxLength": 10,
"description": "When the card reported, e.g. 2s."
},
"trace": {
"type": "string",
"maxLength": 2000,
"description": "What the host posted to the card, with times."
},
"bridge": {
"enum": [
"openai",
"mcp-apps"
],
"type": "string"
},
"notify": {
"type": "boolean",
"description": "Whether ChatGPT offered notifyIntrinsicHeight."
},
"content": {
"type": "number",
"description": "The height the card asked for."
},
"display": {
"type": "string",
"maxLength": 20
},
"viewport": {
"type": "string",
"maxLength": 20,
"description": "Frame size when the card opened."
},
"max_height": {
"type": "number"
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| question* | string | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"question"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"question": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| level | string | |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| target_size_mb | number | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"level": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"target_size_mb": {
"type": "number",
"exclusiveMinimum": 0
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| to* | string | |
| dpi | integer | |
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| image_format | string | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"to"
],
"properties": {
"to": {
"enum": [
"word",
"excel",
"csv",
"images",
"markdown",
"epub",
"pdfa",
"latex",
"grayscale"
],
"type": "string"
},
"dpi": {
"type": "integer",
"maximum": 300,
"minimum": 36
},
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"image_format": {
"enum": [
"png",
"jpg"
],
"type": "string"
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| url | string | A public web page to render as a PDF. |
| files | array | Files the person attached in ChatGPT, in order (filled in by ChatGPT). |
| file_ids | array | FynePDF file_ids, in order. |
| file_urls | array | Public links to the files, in order. |
| page_layout | string | For url. |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "A public web page to render as a PDF."
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"maxItems": 20,
"description": "Files the person attached in ChatGPT, in order (filled in by ChatGPT)."
},
"file_ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^file_"
},
"maxItems": 20,
"description": "FynePDF file_ids, in order."
},
"file_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 20,
"description": "Public links to the files, in order."
},
"page_layout": {
"enum": [
"desktop",
"tablet",
"mobile"
],
"type": "string",
"description": "For url."
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| data | any | Instead of markdown/html: the fields of an invoice, resume or letter (set template to match). We lay it out; for an invoice we also add up the lines, tax and total and report anything that doesn't add up. |
| html | string | |
| style | string | quiet (default): modern sans, gray labels. classic: serif, fine rules, centered heads; suits letters and traditional CVs. |
| title | string | Also the file name. |
| footer | string | |
| header | string | |
| margin | string | |
| markdown | string |
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.
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| angle | any | |
| pages | array | For delete and keep: the pages. For reorder: every page to keep, in the new order. |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| operation* | string | |
| page_range | string | For rotate: "all" (default), a page like "4" or a range like "2-7". |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"operation"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"angle": {
"anyOf": [
{
"type": "number",
"const": 90
},
{
"type": "number",
"const": 180
},
{
"type": "number",
"const": 270
}
]
},
"pages": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"minItems": 1,
"description": "For delete and keep: the pages. For reorder: every page to keep, in the new order."
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"operation": {
"enum": [
"delete",
"keep",
"reorder",
"rotate"
],
"type": "string"
},
"page_range": {
"type": "string",
"description": "For rotate: \"all\" (default), a page like \"4\" or a range like \"2-7\"."
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| type* | string | |
| output | string | |
| schema | object | For type schema: a JSON Schema object. |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| instructions | string | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
A file's details and a fresh download link (valid 1 hour).
| Argument | Type | Description |
|---|---|---|
| file_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"pattern": "^file_"
}
}
}Check a job that was still running, and get its files when it's done. Waits up to 50 seconds by default.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | |
| wait_seconds | integer |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"pattern": "^job_"
},
"wait_seconds": {
"type": "integer",
"maximum": 50,
"minimum": 0
}
}
}Fetch a PDF, Office file, image or EPUB from a public link into FynePDF and get its file_id.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| file_name | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"file_name": {
"type": "string",
"maxLength": 200
}
}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Default 10. |
| query | string | Part of a file name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 10."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Part of a file name."
}
}
}Files saved in the person's FynePDF Library, newest first (pinned on top). Pass an id as library_file_id to any tool.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | Part of a file name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Part of a file name."
}
}
}Join PDFs into one, in the order given (file_ids, then files, then file_urls). Each part gets a bookmark with its name.
| Argument | Type | Description |
|---|---|---|
| files | array | Files the person attached in ChatGPT, in order (filled in by ChatGPT). |
| file_ids | array | FynePDF file_ids, in order. |
| file_urls | array | Public links to the files, in order. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"maxItems": 20,
"description": "Files the person attached in ChatGPT, in order (filled in by ChatGPT)."
},
"file_ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^file_"
},
"maxItems": 20,
"description": "FynePDF file_ids, in order."
},
"file_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 20,
"description": "Public links to the files, in order."
}
}
}Add a text layer to scanned pages, so the text can be searched, copied and read by AI.
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}The first pages of a PDF as images, for FynePDF's result viewer. Not needed in conversation: use get_file for a link.
| Argument | Type | Description |
|---|---|---|
| pages | integer | |
| file_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"file_id"
],
"properties": {
"pages": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"file_id": {
"type": "string",
"pattern": "^file_"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| password | string | |
| operation* | string | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"operation"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"password": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"operation": {
"enum": [
"lock",
"unlock",
"flatten"
],
"type": "string"
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| find | string | What to remove, in words (uses AI to find it). |
| text | array | |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| match_case | boolean | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
| remove_metadata | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"find": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "What to remove, in words (uses AI to find it)."
},
"text": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"minItems": 1
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"match_case": {
"type": "boolean"
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
},
"remove_metadata": {
"type": "boolean"
}
}
}Keep a result in the person's FynePDF Library (fynepdf.com/library), so it isn't deleted after 24 hours.
| Argument | Type | Description |
|---|---|---|
| file_id* | string | |
| file_name | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"pattern": "^file_"
},
"file_name": {
"type": "string",
"maxLength": 200
}
}
}Search the FynePDF API and MCP documentation: actions, parameters, pricing, files, jobs and errors.
| Argument | Type | Description |
|---|---|---|
| query* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| x | number | |
| y | number | |
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| page | any | |
| width | number | |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| position | string | |
| signature | object | A signature image attached in ChatGPT. |
| signature_url | string | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
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.
| Argument | Type | Description |
|---|---|---|
| run | boolean | Default true. |
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| instruction* | string | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"instruction"
],
"properties": {
"run": {
"type": "boolean",
"description": "Default true."
},
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"instruction": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| ranges | array | |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| max_part_mb | number | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"ranges": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"max_part_mb": {
"type": "number",
"exclusiveMinimum": 0
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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".
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| watermark | object | |
| page_numbers | object | |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"watermark": {
"type": "object",
"required": [
"text"
],
"properties": {
"size": {
"type": "number",
"maximum": 300,
"minimum": 6
},
"text": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"opacity": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"rotation": {
"type": "number",
"maximum": 360,
"minimum": -360
}
}
},
"page_numbers": {
"type": "object",
"properties": {
"format": {
"type": "string",
"maxLength": 60
},
"position": {
"enum": [
"top-left",
"top-center",
"top-right",
"bottom-left",
"bottom-center",
"bottom-right"
],
"type": "string"
},
"start_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"skip_cover_page": {
"type": "boolean"
}
}
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}A plain summary and key points, each with the pages it comes from.
| Argument | Type | Description |
|---|---|---|
| file | object | A file the person attached in ChatGPT (filled in by ChatGPT). |
| focus | string | What the summary should focus on. |
| length | string | |
| file_id | string | A FynePDF file_id from upload_file, import_file_from_url or an earlier tool. |
| file_url | string | A public link to the file. |
| library_file_id | string | A file from the person's FynePDF Library (from list_library_files). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"focus": {
"type": "string",
"maxLength": 500,
"description": "What the summary should focus on."
},
"length": {
"enum": [
"short",
"medium",
"long"
],
"type": "string"
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| file_name | string | Name with extension, e.g. report.pdf. |
| size_bytes | integer |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"file_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Name with extension, e.g. report.pdf."
},
"size_bytes": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 1, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
| template | string |
| page_size | string |
| page_numbers | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"data": {
"anyOf": [
{
"type": "object",
"required": [
"line_items"
],
"properties": {
"tax": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "Left out: tax_rate of the subtotal after discount."
},
"notes": {
"type": "string",
"maxLength": 4000
},
"total": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "Left out: subtotal − discount + tax + shipping."
},
"locale": {
"type": "string",
"maxLength": 20,
"description": "Number format, e.g. \"en-IN\" for 1,00,000.00. Default \"en-US\"."
},
"vendor": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"email": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 100
},
"tax_id": {
"type": "string",
"maxLength": 100
},
"address": {
"type": "string",
"maxLength": 1000,
"description": "Lines separated by newlines."
},
"logo_url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "https image, top left."
}
}
},
"heading": {
"type": "string",
"maxLength": 60,
"description": "Printed at the top. Default \"Invoice\"; e.g. \"Tax invoice\", \"Quote\"."
},
"currency": {
"type": "string",
"maxLength": 12,
"description": "An ISO code (\"USD\", \"NPR\") for proper formatting, or a symbol (\"Rs.\")."
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"email": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 100
},
"tax_id": {
"type": "string",
"maxLength": 100
},
"address": {
"type": "string",
"maxLength": 1000,
"description": "Lines separated by newlines."
}
}
},
"discount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "Taken off the subtotal."
},
"due_date": {
"type": "string",
"maxLength": 60
},
"shipping": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "A number, or text as printed (\"1,250.00\")."
},
"subtotal": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "Left out: the lines added up."
},
"tax_rate": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Percent, e.g. 13 for 13%."
},
"tax_label": {
"type": "string",
"maxLength": 40,
"description": "Default \"Tax\"; e.g. \"VAT 13%\"."
},
"issue_date": {
"type": "string",
"maxLength": 60,
"description": "Printed as given."
},
"line_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"description"
],
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "Left out: quantity × unit_price."
},
"quantity": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "A number, or text as printed (\"1,250.00\")."
},
"unit_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "A number, or text as printed (\"1,250.00\")."
},
"description": {
"type": "string",
"maxLength": 1000
}
}
},
"maxItems": 500,
"minItems": 1
},
"amount_paid": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "\\d",
"maxLength": 40
}
],
"description": "Prints a balance due."
},
"invoice_number": {
"type": "string",
"maxLength": 100
},
"payment_details": {
"type": "string",
"maxLength": 2000,
"description": "Bank or payment instructions."
}
}
},
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"skills": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 80
},
{
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 40
},
"label": {
"type": "string",
"maxLength": 80
}
}
},
"maxItems": 20
}
],
"description": "A list, or groups: [{ \"label\": \"Languages\", \"items\": [\"Nepali\", \"English\"] }]."
},
"contact": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 8,
"description": "Email, phone, city, links: one line, in order."
},
"summary": {
"type": "string",
"maxLength": 3000
},
"headline": {
"type": "string",
"maxLength": 200
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"heading",
"entries"
],
"properties": {
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"end": {
"type": "string",
"maxLength": 40,
"description": "\"Present\" for a current one."
},
"text": {
"type": "string",
"maxLength": 2000
},
"start": {
"type": "string",
"maxLength": 40
},
"title": {
"type": "string",
"maxLength": 200
},
"bullets": {
"type": "array",
"items": {
"type": "string",
"maxLength": 600
},
"maxItems": 20
},
"location": {
"type": "string",
"maxLength": 120
},
"subtitle": {
"type": "string",
"maxLength": 200,
"description": "Organization, school, issuer."
}
}
},
"maxItems": 40
},
"heading": {
"type": "string",
"maxLength": 80
}
}
},
"maxItems": 10,
"description": "More sections: projects, certifications, awards."
},
"education": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"end": {
"type": "string",
"maxLength": 40,
"description": "\"Present\" for a current one."
},
"text": {
"type": "string",
"maxLength": 2000
},
"start": {
"type": "string",
"maxLength": 40
},
"title": {
"type": "string",
"maxLength": 200
},
"bullets": {
"type": "array",
"items": {
"type": "string",
"maxLength": 600
},
"maxItems": 20
},
"location": {
"type": "string",
"maxLength": 120
},
"subtitle": {
"type": "string",
"maxLength": 200,
"description": "Organization, school, issuer."
}
}
},
"maxItems": 20
},
"experience": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"end": {
"type": "string",
"maxLength": 40,
"description": "\"Present\" for a current one."
},
"text": {
"type": "string",
"maxLength": 2000
},
"start": {
"type": "string",
"maxLength": 40
},
"title": {
"type": "string",
"maxLength": 200
},
"bullets": {
"type": "array",
"items": {
"type": "string",
"maxLength": 600
},
"maxItems": 20
},
"location": {
"type": "string",
"maxLength": 120
},
"subtitle": {
"type": "string",
"maxLength": 200,
"description": "Organization, school, issuer."
}
}
},
"maxItems": 40
}
}
},
{
"type": "object",
"required": [
"body"
],
"properties": {
"body": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "Markdown; a blank line starts a paragraph."
},
"date": {
"type": "string",
"maxLength": 60
},
"sender": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"email": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 100
},
"tax_id": {
"type": "string",
"maxLength": 100
},
"address": {
"type": "string",
"maxLength": 1000,
"description": "Lines separated by newlines."
}
}
},
"closing": {
"type": "string",
"maxLength": 100,
"description": "\"Yours sincerely,\""
},
"subject": {
"type": "string",
"maxLength": 300
},
"greeting": {
"type": "string",
"maxLength": 200,
"description": "\"Dear Ms Rai,\""
},
"recipient": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"email": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 100
},
"tax_id": {
"type": "string",
"maxLength": 100
},
"address": {
"type": "string",
"maxLength": 1000,
"description": "Lines separated by newlines."
}
}
},
"reference": {
"type": "string",
"maxLength": 120
},
"signature_name": {
"type": "string",
"maxLength": 120
},
"signature_title": {
"type": "string",
"maxLength": 200
}
}
}
],
"description": "Instead of markdown/html: the fields of an invoice, resume or letter (set template to match). We lay it out; for an invoice we also add up the lines, tax and total and report anything that doesn't add up."
},
"html": {
"type": "string",
"maxLength": 2000000,
"minLength": 1
},
"style": {
"enum": [
"quiet",
"classic"
],
"type": "string",
"description": "quiet (default): modern sans, gray labels. classic: serif, fine rules, centered heads; suits letters and traditional CVs."
},
"title": {
"type": "string",
"maxLength": 200,
"description": "Also the file name."
},
"footer": {
"type": "string",
"maxLength": 200
},
"header": {
"type": "string",
"maxLength": 200
},
"margin": {
"enum": [
"none",
"small",
"normal",
"wide"
],
"type": "string"
},
"markdown": {
"type": "string",
"maxLength": 1000000,
"minLength": 1
},
"template": {
"enum": [
"plain",
"report",
"invoice",
"letter",
"resume"
],
"type": "string"
},
"page_size": {
"enum": [
"A4",
"Letter"
],
"type": "string"
},
"page_numbers": {
"type": "boolean"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"type": {
"enum": [
"invoice",
"statement",
"tables",
"schema"
],
"type": "string"
},
"output": {
"enum": [
"json",
"excel",
"csv"
],
"type": "string"
},
"schema": {
"type": "object",
"description": "For type schema: a JSON Schema object.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"instructions": {
"type": "string",
"maxLength": 1000
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
}
}
}| signature_file_id | string | The signature image's file_id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"x": {
"type": "number",
"minimum": 0
},
"y": {
"type": "number",
"minimum": 0
},
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A file the person attached in ChatGPT (filled in by ChatGPT)."
},
"page": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"enum": [
"first",
"last",
"all"
],
"type": "string"
}
]
},
"width": {
"type": "number",
"maximum": 600,
"minimum": 20
},
"file_id": {
"type": "string",
"pattern": "^file_",
"description": "A FynePDF file_id from upload_file, import_file_from_url or an earlier tool."
},
"file_url": {
"type": "string",
"format": "uri",
"description": "A public link to the file."
},
"position": {
"enum": [
"bottom-right",
"bottom-center",
"bottom-left",
"top-right",
"top-left"
],
"type": "string"
},
"signature": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"format": "uri"
}
},
"description": "A signature image attached in ChatGPT."
},
"signature_url": {
"type": "string",
"format": "uri"
},
"library_file_id": {
"type": "string",
"description": "A file from the person's FynePDF Library (from list_library_files)."
},
"signature_file_id": {
"type": "string",
"pattern": "^file_",
"description": "The signature image's file_id."
}
}
}