Privacy-first PDF tools over MCP: merge, split, rotate, delete, compress, protect, inspect.
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.
Reduce a PDF's file size losslessly by consolidating object streams (keeps text selectable). Returns base64 plus before/after sizes. Note: does not re-encode embedded images.
The PDF as a base64 string or https URL.
medium also strips subject/keywords metadata. Default medium.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Reduce a PDF's file size losslessly by consolidating object streams (keeps text selectable). Returns base64 plus before/after sizes. Note: does not re-encode embedded images.
| Argument | Type | Description |
|---|---|---|
| pdf* | string | The PDF as a base64 string or https URL. |
| level | string | medium also strips subject/keywords metadata. Default medium. |
{
"type": "object",
"required": [
"pdf"
],
"properties": {
"pdf": {
"type": "string",
"description": "The PDF as a base64 string or https URL."
},
"level": {
"enum": [
"light",
"medium"
],
"type": "string",
"description": "medium also strips subject/keywords metadata. Default medium."
}
}
}Remove specific pages from a PDF by their 1-based page numbers, keeping the rest in order. Returns base64.
| Argument | Type | Description |
|---|---|---|
| pdf* | string | The PDF as a base64 string or https URL. |
| pages* | array | 1-based page numbers to delete. |
{
"type": "object",
"required": [
"pdf",
"pages"
],
"properties": {
"pdf": {
"type": "string",
"description": "The PDF as a base64 string or https URL."
},
"pages": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 1,
"description": "1-based page numbers to delete."
}
}
}Read-only. Return a PDF's page count and per-page dimensions (in points). Use this first to plan a split or rotate.
| Argument | Type | Description |
|---|---|---|
| pdf* | string | The PDF as a base64 string or an https URL. |
{
"type": "object",
"required": [
"pdf"
],
"properties": {
"pdf": {
"type": "string",
"description": "The PDF as a base64 string or an https URL."
}
}
}Merge two or more PDFs into one, in the order given. Returns the merged PDF as base64.
| Argument | Type | Description |
|---|---|---|
| pdfs* | array | Ordered list of PDFs, each a base64 string or https URL. |
{
"type": "object",
"required": [
"pdfs"
],
"properties": {
"pdfs": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"description": "Ordered list of PDFs, each a base64 string or https URL."
}
}
}Encrypt a PDF with a password (AES). The result requires the password to open. Returns base64.
| Argument | Type | Description |
|---|---|---|
| pdf* | string | The PDF as a base64 string or https URL. |
| password* | string | Password required to open the output PDF. |
{
"type": "object",
"required": [
"pdf",
"password"
],
"properties": {
"pdf": {
"type": "string",
"description": "The PDF as a base64 string or https URL."
},
"password": {
"type": "string",
"minLength": 1,
"description": "Password required to open the output PDF."
}
}
}Rotate pages of a PDF clockwise by 90, 180, or 270 degrees. Omit "pages" to rotate every page; otherwise pass 1-based page numbers. Returns base64.
| Argument | Type | Description |
|---|---|---|
| pdf* | string | The PDF as a base64 string or https URL. |
| pages | array | Optional 1-based page numbers to rotate; omit for all pages. |
| degrees* | integer | Clockwise rotation to add. |
{
"type": "object",
"required": [
"pdf",
"degrees"
],
"properties": {
"pdf": {
"type": "string",
"description": "The PDF as a base64 string or https URL."
},
"pages": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"description": "Optional 1-based page numbers to rotate; omit for all pages."
},
"degrees": {
"enum": [
90,
180,
270
],
"type": "integer",
"description": "Clockwise rotation to add."
}
}
}Extract an inclusive, 1-based page range from a PDF into a new PDF. e.g. from=5,to=10 keeps pages 5–10. Returns base64.
| Argument | Type | Description |
|---|---|---|
| to* | integer | Last page to keep (1-based, inclusive). |
| pdf* | string | The PDF as a base64 string or https URL. |
| from* | integer | First page to keep (1-based, inclusive). |
{
"type": "object",
"required": [
"pdf",
"from",
"to"
],
"properties": {
"to": {
"type": "integer",
"minimum": 1,
"description": "Last page to keep (1-based, inclusive)."
},
"pdf": {
"type": "string",
"description": "The PDF as a base64 string or https URL."
},
"from": {
"type": "integer",
"minimum": 1,
"description": "First page to keep (1-based, inclusive)."
}
}
}