bitpdf

A free PDF API and MCP server

AI agents and scripts can merge, split and compress PDFs through bitpdf. No account and no API key.

  • free
  • no API key
  • 50 MiB per job
  • 60 jobs an hour

Connect an agent

The MCP server address is the same everywhere. The transport is Streamable HTTP, with no authentication.

https://bitpdf.bitnoda.team/mcp

Claude Code

claude mcp add --transport http bitpdf https://bitpdf.bitnoda.team/mcp

Cursor · .cursor/mcp.json

{
  "mcpServers": {
    "bitpdf": {
      "url": "https://bitpdf.bitnoda.team/mcp"
    }
  }
}

VS Code · .vscode/mcp.json

{
  "servers": {
    "bitpdf": {
      "type": "http",
      "url": "https://bitpdf.bitnoda.team/mcp"
    }
  }
}

Gemini CLI · settings.json

{
  "mcpServers": {
    "bitpdf": {
      "httpUrl": "https://bitpdf.bitnoda.team/mcp"
    }
  }
}

MCP tools

merge_pdfs
Join 2 to 20 PDFs in the order given.
split_pdf
Pull out page ranges, such as 1-5,10-12.
compress_pdf
Make a PDF smaller. Text stays exact.
pdf_info
Count the pages and measure the file.

HTTP API

Send files as multipart/form-data and get the PDF straight back. Send JSON with URLs and get a download link.

curl -F file=@a.pdf -F file=@b.pdf -F level=balanced \
  https://bitpdf.bitnoda.team/v1/merge -o merged.pdf
curl -F file=@book.pdf -F ranges=1-5,10-12 \
  https://bitpdf.bitnoda.team/v1/split -o split.zip
curl -F file=@scan.pdf -F level=strong \
  https://bitpdf.bitnoda.team/v1/compress -o smaller.pdf
curl -X POST https://bitpdf.bitnoda.team/v1/compress \
  -H 'content-type: application/json' \
  -d '{"file": {"url": "https://example.com/report.pdf"}}'

Limits

Size per job
50 MiB
Output per job
128 MiB
Files per job
20
Ranges per job
50
Jobs per hour, per address
60
Volume per hour, per address
1 GiB
Jobs at once, per address
2
Link lifetime
15 minutes

Over a limit you get 429 with Retry-After. When every slot is busy you get 503. The site works in the browser and handles much larger files.

What happens to your files

Through the API a file reaches our server. It stays in RAM for the length of the job and is never written to disk. The result stays in RAM until its link expires. The engine runs isolated in a WebAssembly sandbox. We keep traffic data and numbers only: IP address, user agent, sizes, pages, duration.

Documents for machines