EasyPDF

Edit PDF text in place, fonts and layout kept. Compress, merge, split, convert and translate PDFs.

Should I use this

Quality & Safety

A
Description quality
81%
Schema completeness
99%
Naming quality
84%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (5)

  • LOWTool 'merge_pdfs' description lacks action verbin merge_pdfs
  • LOWTool 'split_pdf' description lacks action verbin split_pdf
  • LOWTool 'extract_pages' description lacks action verbin extract_pages
  • LOWTool 'rotate_pdf' description lacks action verbin rotate_pdf
  • LOWTool 'protect_pdf' description lacks action verbin protect_pdf

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,290Tokens (tool definitions)
~2.5 KBTypical response size
Moderate attention impact (1.79% of 128k context)

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": {
    "easypdf": {
      "url": "https://www.easypdf.fr/chatgpt/mcp"
    }
  }
}

Remote endpoints

https://www.easypdf.fr/chatgpt/mcpstreamable-http
https://www.easypdf.fr/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🔴edit_pdf_text(file, edits)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The PDF to edit (shared in the conversation).",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "edits": {
      "items": {
        "description": "One change to write into the PDF.",
        "properties": {
          "find": {
            "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.",
            "type": "string"
          },
          "replace": {
            "description": "New text written in place of `find`. An empty string deletes the text.",
            "type": "string"
          },
          "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."
          }
        },
        "required": [
          "find",
          "replace"
        ],
        "type": "object"
      },
      "type": "array",
      "description": "Changes to write, applied in order. Each one replaces every\noccurrence of `find` (only on `page` when given)."
    }
  },
  "required": [
    "file",
    "edits"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
⚪compress_pdf(file, quality)

Compress a PDF to reduce its file size while keeping it readable.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The PDF to compress (shared in the conversation).",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "quality": {
      "default": "medium",
      "type": "string",
      "description": "\"low\" (smallest file), \"medium\" (balanced, default) or \"high\" (best visual quality)."
    }
  },
  "required": [
    "file"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
⚪merge_pdfs(files)

Merge several PDF files into a single document, in the given order.

Input Schema

{
  "type": "object",
  "properties": {
    "files": {
      "items": {
        "description": "A file shared in the ChatGPT conversation (user upload).",
        "properties": {
          "download_url": {
            "description": "URL from which the file can be downloaded.",
            "type": "string"
          },
          "file_id": {
            "description": "ChatGPT file identifier.",
            "type": "string"
          },
          "mime_type": {
            "default": "",
            "description": "MIME type of the file, e.g. application/pdf.",
            "type": "string"
          },
          "file_name": {
            "default": "",
            "description": "Original file name, e.g. report.pdf.",
            "type": "string"
          }
        },
        "required": [
          "download_url",
          "file_id"
        ],
        "type": "object"
      },
      "type": "array",
      "description": "Two or more PDFs shared in the conversation, in the order to merge them."
    }
  },
  "required": [
    "files"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
⚪split_pdf(file, pages_per_file)

Split a PDF into several smaller PDFs.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The PDF to split.",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "pages_per_file": {
      "default": 1,
      "type": "integer",
      "description": "Number of pages in each output file (default 1: one file per page)."
    }
  },
  "required": [
    "file"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢extract_pages(file, page_numbers)

Extract specific pages from a PDF into a new PDF (pages are 1-indexed).

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The source PDF.",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "page_numbers": {
      "items": {
        "type": "integer"
      },
      "type": "array",
      "description": "Pages to keep, e.g. [1, 3, 5]. Order is preserved."
    }
  },
  "required": [
    "file",
    "page_numbers"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
⚪rotate_pdf(file, angle, pages)

Rotate all pages, or selected pages, of a PDF.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The PDF to rotate.",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "angle": {
      "type": "integer",
      "description": "90, 180 or 270 degrees (clockwise)."
    },
    "pages": {
      "anyOf": [
        {
          "items": {
            "type": "integer"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional 1-indexed page numbers to rotate; omit to rotate every page."
    }
  },
  "required": [
    "file",
    "angle"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
⚪protect_pdf(file, password)

Protect a PDF with a password (AES-256 encryption).

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The PDF to protect.",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "password": {
      "type": "string",
      "description": "Password that will be required to open the PDF."
    }
  },
  "required": [
    "file",
    "password"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🔴unlock_pdf(file, password)

Remove the password protection from a PDF you own.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The password-protected PDF.",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "password": {
      "type": "string",
      "description": "Its current password."
    }
  },
  "required": [
    "file",
    "password"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟡add_page_numbers(file, position, start_number)

Add page numbers to a PDF.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "description": "The PDF to number.",
      "properties": {
        "download_url": {
          "description": "URL from which the file can be downloaded.",
          "type": "string"
        },
        "file_id": {
          "description": "ChatGPT file identifier.",
          "type": "string"
        },
        "mime_type": {
          "default": "",
          "description": "MIME type of the file, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "default": "",
          "description": "Original file name, e.g. report.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "type": "object"
    },
    "position": {
      "default": "bottom-center",
      "type": "string",
      "description": "\"bottom-center\" (default), \"bottom-left\", \"bottom-right\", \"top-center\", \"top-left\" or \"top-right\"."
    },
    "start_number": {
      "default": 1,
      "type": "integer",
      "description": "Number printed on the first page. Default 1."
    }
  },
  "required": [
    "file"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools
auth requiredversion not recorded—
verifiedversion not recorded9 tools
auth requiredversion not recorded—
verifiedversion not recorded9 tools
auth requiredversion not recorded—
verifiedversion not recorded9 tools
auth requiredversion not recorded—
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools