pdf-tools
Free PDF tools for AI agents: merge, split, rotate, watermark, page numbers, metadata, flatten.
Should I use this
Quality & Safety
Findings (5)
- LOWin merge_pdfs
- LOWin extract_pages
- LOWin watermark_pdf
- LOWin add_page_numbers
- LOWin flatten_pdf
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"pdf-tools": {
"url": "https://pdfia.com/mcp"
}
}
}Remote endpoints
https://pdfia.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
⚪merge_pdfs(files)
Merge multiple PDF files into one, in the order given. Returns the merged PDF as base64.
Input Schema
{
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"description": "2+ PDFs, base64-encoded, in merge order"
}
},
"required": [
"files"
]
}🟢split_pdf(file, ranges)
Split a PDF into parts. Provide ranges like "1-3, 5, 8-10" (each comma group becomes one output PDF), or omit ranges to get every page as its own PDF. Returns base64 files.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"ranges": {
"type": "string",
"description": "e.g. \"1-3, 5, 8-10\"; omit for one file per page"
}
},
"required": [
"file"
]
}🟢extract_pages(file, pages)
Extract the given pages into a new PDF (original order). Returns base64.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"pages": {
"type": "string",
"description": "Page list like \"2, 5-7\" (1-based)"
}
},
"required": [
"file",
"pages"
]
}🔴remove_pages(file, pages)
Delete the given pages from a PDF. Returns the remaining document as base64.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"pages": {
"type": "string",
"description": "Page list like \"2, 5-7\" (1-based)"
}
},
"required": [
"file",
"pages"
]
}🟢rotate_pdf(file, degrees, pages)
Rotate pages clockwise by 90, 180, or 270 degrees. Rotates all pages unless a page list is given. Returns base64.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"degrees": {
"type": "number",
"enum": [
90,
180,
270
]
},
"pages": {
"type": "string",
"description": "Optional page list like \"1, 3\"; omit to rotate all"
}
},
"required": [
"file",
"degrees"
]
}⚪watermark_pdf(file, text, opacity, size, color)
Stamp a diagonal text watermark (e.g. "CONFIDENTIAL", "DRAFT") across every page. Returns base64.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"text": {
"type": "string",
"description": "Watermark text"
},
"opacity": {
"type": "number",
"description": "0.02–1, default 0.15"
},
"size": {
"type": "number",
"description": "Font size in points, 8–200, default 60"
},
"color": {
"type": "string",
"enum": [
"gray",
"red",
"blue"
],
"description": "Default gray"
}
},
"required": [
"file",
"text"
]
}🟡add_page_numbers(file, position, start, format, size)
Stamp page numbers onto every page of a PDF. Returns base64.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"position": {
"type": "string",
"enum": [
"bottom-center",
"bottom-right",
"bottom-left",
"top-center"
],
"description": "Default bottom-center"
},
"start": {
"type": "number",
"description": "First number, default 1"
},
"format": {
"type": "string",
"enum": [
"n",
"page-n",
"n-of-total"
],
"description": "Default n"
},
"size": {
"type": "number",
"description": "Font size 6–24, default 12"
}
},
"required": [
"file"
]
}🟢get_pdf_metadata(file)
Read a PDF's document properties (title, author, subject, keywords, creator, producer, dates, page count).
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
}
},
"required": [
"file"
]
}🟡set_pdf_metadata(file, title, author, subject, keywords, ...)
Rewrite a PDF's document properties. Pass empty strings to strip identifying metadata before sharing. Returns base64.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
},
"title": {
"type": "string"
},
"author": {
"type": "string"
},
"subject": {
"type": "string"
},
"keywords": {
"type": "string",
"description": "Comma-separated"
},
"creator": {
"type": "string"
},
"producer": {
"type": "string"
}
},
"required": [
"file"
]
}⚪flatten_pdf(file)
Flatten fillable form fields into permanent page content so answers can't be edited. Returns base64.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "The PDF file, base64-encoded (max 10 MB)"
}
},
"required": [
"file"
]
}Community
Evidence