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/mcpClaude Code
claude mcp add --transport http bitpdf https://bitpdf.bitnoda.team/mcpCursor · .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.pdfcurl -F file=@book.pdf -F ranges=1-5,10-12 \
https://bitpdf.bitnoda.team/v1/split -o split.zipcurl -F file=@scan.pdf -F level=strong \
https://bitpdf.bitnoda.team/v1/compress -o smaller.pdfcurl -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.