Edit PDF text in place, fonts and layout kept. Compress, merge, split, convert and translate PDFs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
Add page numbers to a PDF.
The PDF to number.
"bottom-center" (default), "bottom-left", "bottom-right", "top-center", "top-left" or "top-right".
Number printed on the first page. Default 1.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add page numbers to a PDF.
| Argument | Type | Description |
|---|---|---|
| file* | object | The PDF to number. |
| position | string | "bottom-center" (default), "bottom-left", "bottom-right", "top-center", "top-left" or "top-right". |
| start_number | integer | Number printed on the first page. Default 1. |
{
"type": "object",
"required": [
"file"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The PDF to number."
},
"position": {
"type": "string",
"default": "bottom-center",
"description": "\"bottom-center\" (default), \"bottom-left\", \"bottom-right\", \"top-center\", \"top-left\" or \"top-right\"."
},
"start_number": {
"type": "integer",
"default": 1,
"description": "Number printed on the first page. Default 1."
}
},
"additionalProperties": false
}Compress a PDF to reduce its file size while keeping it readable.
| Argument | Type | Description |
|---|---|---|
| file* | object | The PDF to compress (shared in the conversation). |
| quality | string | "low" (smallest file), "medium" (balanced, default) or "high" (best visual quality). |
{
"type": "object",
"required": [
"file"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The PDF to compress (shared in the conversation)."
},
"quality": {
"type": "string",
"default": "medium",
"description": "\"low\" (smallest file), \"medium\" (balanced, default) or \"high\" (best visual quality)."
}
},
"additionalProperties": false
}Change, correct or delete text INSIDE the original PDF, keeping its fonts, sizes, colors and layout. Use this whenever the user wants their existing PDF updated rather than a new document: fix a typo, change a date, amount, name or address, update a CV or a price list, translate a heading, remove a line. Read the PDF first, then pass one edit per change with `find` copied exactly as printed in the document. Dates and amounts written differently in the PDF (12/08/2026 vs August 12, 2026; 1240 vs 1,240.00) are matched and rewritten in the document's format.
| Argument | Type | Description |
|---|---|---|
| file* | object | The PDF to edit (shared in the conversation). |
| edits* | array | Changes to write, applied in order. Each one replaces every occurrence of `find` (only on `page` when given). |
{
"type": "object",
"required": [
"file",
"edits"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The PDF to edit (shared in the conversation)."
},
"edits": {
"type": "array",
"items": {
"type": "object",
"required": [
"find",
"replace"
],
"properties": {
"find": {
"type": "string",
"description": "Text to replace, copied exactly as it is printed in the PDF (same spelling, accents and punctuation). Keep it short: one line or a few words is most reliable."
},
"page": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "1-based page number to limit this change to. Omit to change every occurrence in the document."
},
"replace": {
"type": "string",
"description": "New text written in place of `find`. An empty string deletes the text."
}
},
"description": "One change to write into the PDF."
},
"description": "Changes to write, applied in order. Each one replaces every\noccurrence of `find` (only on `page` when given)."
}
},
"additionalProperties": false
}Extract specific pages from a PDF into a new PDF (pages are 1-indexed).
| Argument | Type | Description |
|---|---|---|
| file* | object | The source PDF. |
| page_numbers* | array | Pages to keep, e.g. [1, 3, 5]. Order is preserved. |
{
"type": "object",
"required": [
"file",
"page_numbers"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The source PDF."
},
"page_numbers": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Pages to keep, e.g. [1, 3, 5]. Order is preserved."
}
},
"additionalProperties": false
}Merge several PDF files into a single document, in the given order.
| Argument | Type | Description |
|---|---|---|
| files* | array | Two or more PDFs shared in the conversation, in the order to merge them. |
{
"type": "object",
"required": [
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "A file shared in the ChatGPT conversation (user upload)."
},
"description": "Two or more PDFs shared in the conversation, in the order to merge them."
}
},
"additionalProperties": false
}Protect a PDF with a password (AES-256 encryption).
| Argument | Type | Description |
|---|---|---|
| file* | object | The PDF to protect. |
| password* | string | Password that will be required to open the PDF. |
{
"type": "object",
"required": [
"file",
"password"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The PDF to protect."
},
"password": {
"type": "string",
"description": "Password that will be required to open the PDF."
}
},
"additionalProperties": false
}Rotate all pages, or selected pages, of a PDF.
| Argument | Type | Description |
|---|---|---|
| file* | object | The PDF to rotate. |
| angle* | integer | 90, 180 or 270 degrees (clockwise). |
| pages | any | Optional 1-indexed page numbers to rotate; omit to rotate every page. |
{
"type": "object",
"required": [
"file",
"angle"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The PDF to rotate."
},
"angle": {
"type": "integer",
"description": "90, 180 or 270 degrees (clockwise)."
},
"pages": {
"anyOf": [
{
"type": "array",
"items": {
"type": "integer"
}
},
{
"type": "null"
}
],
"default": null,
"description": "Optional 1-indexed page numbers to rotate; omit to rotate every page."
}
},
"additionalProperties": false
}Split a PDF into several smaller PDFs.
| Argument | Type | Description |
|---|---|---|
| file* | object | The PDF to split. |
| pages_per_file | integer | Number of pages in each output file (default 1: one file per page). |
{
"type": "object",
"required": [
"file"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The PDF to split."
},
"pages_per_file": {
"type": "integer",
"default": 1,
"description": "Number of pages in each output file (default 1: one file per page)."
}
},
"additionalProperties": false
}Remove the password protection from a PDF you own.
| Argument | Type | Description |
|---|---|---|
| file* | object | The password-protected PDF. |
| password* | string | Its current password. |
{
"type": "object",
"required": [
"file",
"password"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier."
},
"file_name": {
"type": "string",
"default": "",
"description": "Original file name, e.g. report.pdf."
},
"mime_type": {
"type": "string",
"default": "",
"description": "MIME type of the file, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "URL from which the file can be downloaded."
}
},
"description": "The password-protected PDF."
},
"password": {
"type": "string",
"description": "Its current password."
}
},
"additionalProperties": false
}