MCP

Press-ready is a standard, not a prayer. Connect an AI client and let it drop, check, fix, impose and ship — against the same engine a production floor bets its plates on.

Endpoint

POST https://pdfmodule.com/mcp

JSON-RPC 2.0 over HTTP POST. There is no SSE stream and no session id — every request carries its own bearer token, so the server is stateless. GET returns 405 by design.

Protocol versions2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. The server echoes the version you request when it speaks it, and pins to the newest otherwise.
Methodsinitialize, ping, tools/list, tools/call. resources/list and prompts/list answer empty.
BatchingAccepted, never required. Maximum 20 messages.
Body limit4 MB. Files travel as handles, not as inline base64.

Set it up

The same steps the dashboard shows, so a client can be wired up before you have an account. PKCE (S256) is mandatory and refresh tokens rotate; you can disconnect any client afterwards from Connect AI.

Your MCP address https://pdfmodule.com/mcp

Every client below wants the same thing: that address. Sign-in happens in your browser — there is no key to paste unless you want one.

Claude

claude.ai · Desktop · Cowork

Free, Pro, Max, Team and Enterprise plans can all add a custom connector.

  1. Open Customize → Connectors.
  2. Click +, then Add custom connector.
  3. Paste the address above. Leave Advanced settings alone — this server registers your client for you.
  4. Click Add, then Connect, sign in and press Allow.

On Team and Enterprise an owner adds it once under Organization settings → Connectors → Add → Custom → Web; everyone else then authenticates from Customize → Connectors.

ChatGPT

Plus · Pro · Business · Enterprise · Edu, on the web

Custom MCP connectors live behind developer mode, so switch that on first.

  1. Open Settings → Security and login and turn on Developer mode.
  2. Go to chatgpt.com/plugins and press + to create a developer-mode app.
  3. Give it a name, paste the address above as the MCP server URL, and set Authentication to OAuth.
  4. Create it, sign in, and approve. The tools appear on the app’s detail page, where you can switch individual ones off.

If you change plan later, open the app and press refresh — ChatGPT re-reads the tool list from the server.

Claude Code

terminal

One command, then authenticate in the browser it opens.

claude mcp add --transport http pdfmodule https://pdfmodule.com/mcp
  1. Run the command above.
  2. Run /mcp inside Claude Code and pick pdfmodule to sign in.

No browser on the machine? Add a key instead — see Headless clients below.

Cursor

~/.cursor/mcp.json

Add it from Settings → Tools & MCP → New MCP Server, which opens the file below.

{
  "mcpServers": {
    "pdfmodule": {
      "url": "https://pdfmodule.com/mcp"
    }
  }
}

Project-scoped instead of global? Use .cursor/mcp.json in the repo.

VS Code

.vscode/mcp.json

VS Code needs an explicit transport, and its root key is servers — not mcpServers like the others.

{
  "servers": {
    "pdfmodule": {
      "type": "http",
      "url": "https://pdfmodule.com/mcp"
    }
  }
}

Headless clients

servers, CI, scripts

Anything without a browser can send a live API key instead of signing in. Here a key and an OAuth token are the same kind of credential, so both behave identically and both draw on the same monthly quota.

claude mcp add --transport http pdfmodule https://pdfmodule.com/mcp \
  --header "Authorization: Bearer pm_live_..."

Create a key on the API Keys page. API Keys · Protocol notes

Check that it worked

Ask the model, in its own words:

Which PDFModule tools do you have? Call whoami.

You should get a plan, an email and a tool count. If the model says it has no such tools, the connector is not attached to that conversation yet — start a new chat.

When it does not work

“Could not add connector”
The address must end in /mcp, with no trailing slash and no extra path. Copy it from the box above rather than typing it.
The browser opens, you approve, nothing happens
The approval window was blocked or closed too early. Allow pop-ups for the client, then start the connection again.
The tools are listed, but every call is refused
Read what the refusal says. Tools that check, fix or impose PDFs need the Print API plan, and that is a different subscription from Studio — a Studio plan does not unlock them.
It has my file but says it cannot reach it
It can. Ask it to use request-upload — it will give you a link to open, and you drop the file there. You do not need to publish the file anywhere.
It worked yesterday and now everything is 401
The connection was disconnected here, or the API key behind it was revoked. Connect the client again.
An OAuth access token is an ordinary live API key. It draws on the same monthly quota, appears in the same usage figures, and revoking it at Connect AI or API Keys stops the connector immediately. That is deliberate: one credential model, one place to revoke.

File handles

PDFModule works on files; MCP arguments are JSON text. So every file is a handle — pm_file_… — and tools chain on handles rather than on links:

drop-file → check-pdf → fix-pdf → check-pdf → plan-sheet → impose-sheet → ship-file

Get a handle with drop-file — a URL we fetch behind an SSRF guard, or a small base64 payload. When the file is on someone's own computer, or too large to inline, use request-upload. It answers with two doors: a direct PUT for a client that can read the file itself, and an upload page for everyone else — the assistant hands over the link, the person signs in and drops the file, and the same conversation carries on. Handles live 7 days; ship-file mints a link that lasts up to a week for a human.

What is exposed

GroupTools
Files & proofingdrop-file, request-upload, get-file, ship-file, proof-page
Check & fixcheck-pdf, fix-pdf, autofix-pdf, and your house profiles
Imposeplan-sheet, visualise-sheet, impose-sheet, gang-sheet, and the stock catalogues
DesignCreator, large format up to 5,080 mm, and visit cards
GenerateTemplates, HTML and Markdown to PDF, and rendered documents
EditorCanvas products, designs, renders, and live editor links for a person
FlipbookPublish, hotspots, analytics and leads
PresetsSave a house recipe and apply it — check, fix, check again, impose
ProofsSend a file for customer approval and read the decisions

What your plan reaches

PlanReaches
freeGenerate, templates, documents, editor, flipbook, presets, proofs and proof-page
production / scaleThe above, plus Creator, large format and visit cards
enterpriseEverything, including preflight, fixes and imposition

Every tool is listed on every plan. Nothing is hidden from you: calling a tool your plan does not reach returns an explanation of what it would take, rather than pretending the capability does not exist.

Every tool is listed on every plan. Calling one your plan does not reach returns a readable explanation rather than a mysterious failure, so the model can tell you what it would take.

Rate limits

JSON-RPC requests120 per minute, 3,000 per hour, per connection
Tool calls30 per minute per connection
Failed authentications20 per minute per IP

Discovery

GET https://pdfmodule.com/.well-known/oauth-protected-resource/mcp
GET https://pdfmodule.com/.well-known/oauth-authorization-server
POST https://pdfmodule.com/oauth/register
GET  https://pdfmodule.com/oauth/authorize
POST https://pdfmodule.com/oauth/token
POST https://pdfmodule.com/oauth/revoke

When it will not connect

401 with no WWW-Authenticate A proxy is stripping the Authorization header before it reaches the application. Without that header the client cannot discover the authorization server, so the connector can never be added.
403 on /.well-known/… A web-server rule denying dotfiles is matching the discovery documents. They must be served.
invalid_target The client sent a resource that is not https://pdfmodule.com/mcp.
invalid_grant on token exchange The authorization code was already used or expired (10 minutes), or the PKCE verifier does not match the challenge.
Connect an AI client REST API docs