PDFGate MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PDFGATE_API_KEY | Yes | Your PDFGate API key | |
| PDFGATE_WEBHOOK_PORT | No | Port for the webhook listener | 3599 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| generate_pdfB | Generate a PDF from a URL or raw HTML. Provide either 'url' or 'html', not both. |
| upload_fileA | Upload a PDF to PDFGate so it can be referenced by other operations. Provide either 'filePath' (local path) or 'url'. |
| get_documentC | Retrieve metadata for a stored PDFGate document by its ID. |
| delete_documentA | Delete a PDFGate document. |
| flatten_pdfA | Flatten an interactive PDF into a static, non-editable PDF. Creates a new document; does not overwrite the original. |
| extract_form_dataA | Extract form field values from a fillable PDF. Returns a JSON object mapping field names to their values. |
| add_form_fieldsA | Add interactive form fields to a stored PDF — from placeholder tags (refined via fieldOverrides) and/or explicitly positioned fields. |
| compress_pdfA | Compress/optimise a PDF to reduce file size without changing visual content. |
| protect_pdfA | Encrypt a PDF with a password and optional permission restrictions. Produces a new document; the original is unchanged. |
| watermark_pdfB | Apply a text or image watermark to a PDF. For type='text' provide 'text'; for type='image' provide 'watermarkImagePath'. |
| download_fileA | Download the raw PDF bytes of a stored document, returned as an embedded resource. For a shareable link instead, use get_document. |
| create_envelopeA | Create a signing envelope from one or more existing PDFGate documents. Each recipient is given either as email and name or as the recipientId of a stored recipient. A recipient signs through the hosted flow (emailed link), embedded signing (embedded: sign inside your application via create_embed_link, no emails) or automatic signing (autoSign: the stored signature of a recipient enrolled with request_recipient_signature is applied on their behalf, no signing session). Use signingOrder to make recipients sign in sequence. Returns an envelope in 'created' status; call send_envelope to dispatch signing emails. |
| send_envelopeA | Send a created envelope to its recipients. PDFGate dispatches signing emails with secure, OTP-protected links that stay valid until the envelope expires. Embedded recipients receive no email; create their signing links with create_embed_link after sending. On documents with a signingOrder only the first recipients are emailed; later recipients are activated as earlier ones sign. |
| get_envelopeA | Retrieve the current state of an envelope including its status, document progress, and per-recipient signing status. Each recipient carries an embedded boolean; embedded recipients have no signing link — mint one with create_embed_link instead. Recipients on ordered documents carry signingOrder and, once it is their turn, activatedAt. Each recipient also carries autoSign (signed automatically with their stored signature) and sendSignedCopy (emailed the signed document on completion) booleans. |
| void_envelopeA | Void (cancel) an envelope in 'created' or 'in_progress' status. Recipients who have not signed are notified by email and their signing links stop working; documents already signed by all recipients are not affected. The optional reason is visible to recipients. Cannot be undone. |
| delete_envelopeA | Permanently delete an envelope and the files it produced (signed documents and audit logs). Recipient data is anonymized and recipients lose access; source documents are not deleted. Only envelopes in 'draft', 'completed', 'expired', or 'voided' status can be deleted — void an active envelope first. Cannot be undone. |
| create_embed_linkA | Create a short-lived signing URL for an embedded recipient, to be rendered in an iframe inside your application. The envelope must be in 'in_progress' status and the link expires after 10 minutes, so create it when the signer is ready (one link per signing session). On documents with a signingOrder the link can only be created once it is the recipient's turn; the envelope.recipient.activated webhook event signals that moment. When the session ends the iframe redirects to returnUrl with event (signing_complete, voided, expired or not_found), envelopeId, documentId and recipientId appended as query parameters; existing returnUrl query parameters are preserved. |
| create_recipientA | Store a recipient in your account so envelopes can reference them by recipientId. Emails are not unique; every call creates a new recipient, so use list_recipients first when reuse is intended. |
| list_recipientsA | List stored recipients with the given email (case-insensitive), oldest first. |
| get_recipientA | Retrieve a stored recipient by ID. Once a stored signature was requested the response carries a signature object (status pending, active or revoked, plus requestedAt, adoptionMethod, enrolledAt, revokedAt, lastUsedAt and useCount); while the signature is active it also includes image, the signature as a PNG data URL, which can be very long. |
| update_recipientA | Update a stored recipient's name or metadata. The email cannot be changed. Existing envelopes are not affected; they keep the recipient name they were created with. |
| delete_recipientA | Delete a stored recipient from your account directory. The record is kept with its personal data removed (email, name, phone, metadata and any stored signature), so later reads return 404 and a new envelope to the same address creates a fresh recipient; envelopes already sent keep their own copy and are not affected. Rejected with a 400 error while the recipient has an active stored signature or a pending enrolment — call remove_recipient_signature first. |
| request_recipient_signatureA | Automatic signing: email a stored recipient a link to store a reusable signature (they verify their email with a one-time code, accept the authorization text and type, draw or upload their signature). The link is valid for 7 days and calling this again replaces a pending request with a new link. Returns the recipient with signature.status 'pending'; once they complete the enrolment the recipient.signature.enrolled webhook fires and envelopes can set autoSign on this recipient. Rejected with a 400 error when the recipient has no email or already has an active stored signature (remove it first with remove_recipient_signature). |
| remove_recipient_signatureA | Automatic signing: remove the stored signature of a recipient (signature.status becomes 'revoked' and the recipient.signature.revoked webhook fires) or cancel a pending enrolment so its link stops working. Envelopes already waiting on the automatic signature fall back to a signing link emailed to the recipient. Idempotent: a recipient without a stored signature is returned unchanged. Required before delete_recipient while a signature is active or an enrolment is pending. |
| create_webhookB | Create a PDFGate webhook subscription. The response includes a signing secret — store it securely to verify incoming event signatures. |
| get_webhookB | Retrieve a PDFGate webhook subscription by its ID. |
| delete_webhookA | Delete a PDFGate webhook subscription. Future events will no longer be delivered to the associated endpoint. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| pdfgate-events | Recent PDFGate webhook events (newest first, up to 100). Subscribe to this resource to receive push notifications when new events arrive. |
TDQS
Scored across 27 tools
The surface splits cleanly into four resource families (documents, recipients, envelopes, webhooks), and the descriptions proactively resolve the few confusable pairs (download_file vs get_document, delete_document vs delete_envelope, delete_recipient vs remove_recipient_signature, create_embed_link vs send_envelope). The remaining risk is the four transform tools (protect_pdf, flatten_pdf, compress_pdf, watermark_pdf), which are only distinguishable by reading the names closely, but their purposes are in fact distinct.
Every one of the 27 tools follows a snake_case verb_noun pattern (create_/get_/list_/update_/delete_/remove_/send_/void_ plus a resource), with no camelCase or bare-noun outliers. Domain-specific verbs (protect_pdf, flatten_pdf, watermark_pdf) still conform to the same verb_resource shape.
27 tools is on the heavy side, though the server genuinely spans three loosely coupled domains: PDF manipulation (~10 tools), recipients with automatic signing (7), envelopes (6) and webhooks (3). Each tool does earn roughly its place, but the document-processing group could plausibly have been consolidated into a single parameterized transform tool.
Recipients have full CRUD plus listing and signature lifecycle support, but the other families are missing key discovery/lifecycle operations: there is no list_documents, list_envelopes, or list_webhooks, and no update_envelope or webhook update. An agent can create and fetch by ID but cannot enumerate resources, which is a real dead end for discovery workflows.