PandaDoc MCP logo

Integrate PandaDoc MCP with your AI CRM

Create, inspect, send, and manage documents through PandaDoc's hosted MCP server.

Explore Triggers and Actions

Documents archive

Archive a document by ID. Uses PandaDoc delete endpoint with forever=false for reversible deletion.

ActionTry it

Documents audit trail get

Retrieve audit trail for a document.

ActionTry it

Documents content get

Returns the textual content of a document in plaintext or markdown format.

ActionTry it

Documents create

# Create document Create a new PandaDoc document. Pass a single `request` object and set its `source` to choose how the document is created: - `source: "template"` — from an existing template. Required: `template_uuid`. Also accepts `name`, `recipients`, `fields`, `tokens`, `metadata`, `tags`, `images`, `pricing_tables`, `tables`, `texts`, `folder_uuid`, `owner`, `detect_title_variables`, `content_placeholders`. - `source: "markdown"` — from markdown content. Required: `name`, `document_markdown`. Also accepts `recipients` (individual recipients only; groups are not supported), `role_fields`, `folder_uuid`. - `source: "file"` — from a downloadable PDF or DOCX file URL. Required: `name`, `url`. Also accepts `recipients`, `parse_form_fields`, `fields`, `tokens`, `metadata`, `tags`, `folder_uuid`, `owner`. The schema is polymorphic on `source`: each source accepts **only** its own parameters. Passing a parameter that belongs to another source is rejected by validation, so you never need to guess which fields are ignored. Not for editing an existing document — use `documents_update` for that. ## Asynchronous creation Document creation is asynchronous for every `source` (template, markdown, and file). A successful tool response means creation was accepted, not that the document is ready. The document typically starts in `Uploaded` and later becomes `Draft`, or `Error` if creation fails (invalid file, markdown conversion failure, validation errors, etc.). After calling this tool: 1. Poll `documents_status_get` until status is `Draft` or `Error`. 2. If `Draft`, the document is ready to edit, send, or fetch details/content. 3. If `Error`, report that creation failed — do not call details/content/edit/send on it. 4. While status is still `Uploaded`, do not assume success and do not call tools that require a ready document. ## Template Create a document populated from an existing PandaDoc template. Requires `template_uuid`. Recipients are optional — omit them to use template defaults or to add them later. If the template isn't known yet, call `templates_list` first, then `templates_details_get` to discover its roles, fields, and variables. Optionally set fields, tokens, pricing tables, recipients, and other template data. ## File Create a document from a PDF or DOCX file referenced by `url`. The URL must be directly downloadable (no auth, no HTML interstitials) — presigned S3/GCS/Azure URLs or direct CDN links work best; Google Drive and Dropbox share links do not (they return HTML, not the file). To parse fillable PDF form fields, set `parse_form_fields: true` and provide `fields` mapping **every** form field name to a recipient role — omitting any causes failure. ## Markdown Create a new document in PandaDoc from markdown when there is only text representing the document content. Document content must be generated according to the guidelines below. The response includes a `document_url` field with a direct URL to open the created document in PandaDoc. ### Markdown guidelines You can use standard CommonMark and GitHub-Flavored Markdown (tables, strikethrough, etc), plus the following custom extensions: #### Custom Syntax Extensions ##### 1. Variables Variables are placeholder values that the document creator fills in PandaDoc before sending to recipients. Prioritize variables over fields for any value that the sender controls or pre-fills, even if it may be visible to recipients. **Syntax:** `[VariableName]` or `[Variable.Name]` or `[Multi.Part.Variable]` - Can include underscores, numbers, and multiple dot-separated parts **Use variables for values controlled by the document creator:** - Document metadata: `[Effective.Date]`, `[Agreement.Number]`, `[Contract.Value]` - Company/sender information: `[Company.Name]`, `[Company.Address]` - Pre-calculated values: `[Invoice.Total]`, `[Discount.Amount]` - Recipient information already known: `[Recipient.CompanyName]`, `[Recipient.FirstName]` **Key principle:** If the sender controls the value, use a variable. ##### 2. Fields Fields are interactive form elements that recipients fill in or interact with during the signing process. Recipients see these as input boxes, checkboxes, or signature areas. **Use fields for values controlled by the recipient:** - Recipient signatures: `[[signature]]` - Recipient personal data they must enter: `[[text]]`, `[[email]]`, `[[phone]]`, `[[date]]` - Recipient choices/consents: `[[checkbox]]` - Information only the recipient knows or decides **Key principle:** If the recipient controls the value, use a field. Fields can be prefilled with default values, but are typically left empty for the recipient to fill. **Syntax:** `[[field_type attributes]]` **Field Types:** - `text` - Text input field - `email` - Email input field - `phone` - Phone number input field (**`format` is required** — see below) - `number` - Number input field - `date` - Date input field - `checkbox` - Checkbox field - `signature` - Digital signature field - `dropdown` - Dropdown selection field (**`option` is required** — see below) **Attributes (HTML-style):** - `required="true"` - Makes field required - `placeholder="text"` - Placeholder text - `checked="true"` - Pre-checked (checkbox only) - `value="timestamp"` - For date fields, use UNIX timestamp with millisecond precision (e.g., value="1718406000000"). For other fields, use plain text (e.g., value="John Doe"). - `format="US"` or `format="international"` - **Required for `phone` fields.** Must be exactly `"US"` or `"international"`. There is no default — omitting it causes a validation error. - `date_format="yyyy/MM/dd"` - Date format in ICU notation (e.g., `"dd/MM/yyyy"`, `"MM-dd-yyyy"`). Defaults to `"yyyy/MM/dd"` if omitted. - `option="Text"` - **Required for `dropdown` fields.** Repeatable — add one per option (e.g., `option="Yes" option="No"`). To assign a stable UUID to an option, use `option="uuid:Text"` format. - `id="Client_Text1"` - Specify an external ID that describes who should fill this field and what it represents (e.g., `id="Client_Signature"`, `id="Landlord_FullName"`, `id="Buyer_Email"`). Use the pattern `<RecipientRole>_<FieldPurpose>` so the field can later be assigned to the correct recipient. Multiple fields MAY share the same ID (they'll be synced — when one is filled, all are filled with the same value), but they MUST have the same type and attributes. **Examples:** - `[[text placeholder="Enter name"]]` - `[[email required="true" placeholder="Email address"]]` - `[[phone format="US"]]` - `[[phone format="international"]]` - `[[number]]` - `[[date required="true" value="1718406000000"]]` - `[[date date_format="dd/MM/yyyy"]]` - `[[checkbox checked="true"]]` - `[[dropdown option="Yes" option="No"]]` - `[[dropdown option="Yes" option="No" value="Yes" placeholder="Choose..."]]` **Important:** Fields with the same ID must have the same type and attributes. For example, you cannot have `[[text id="Field1"]]` and `[[email id="Field1"]]` in the same document as well as `[[text id="Field2" placeholder="Full Legal Name" ]]` and `[[text id="Field2"]]` because they have different attributes. **Dropdown constraints:** - At least one `option` attribute is required. - Option texts must be unique within the dropdown. - If `value` is set, it must match one of the defined option texts exactly; otherwise a validation error occurs. ##### 3. Standalone Checkboxes Checkboxes use GFM syntax but can appear anywhere, not just in lists: - `[ ]` - Unchecked - `[x]` - Checked - Can be used inline, standalone, or in task lists ##### 4. Page Breaks **Syntax:** `---` (three hyphens) creates a page break. **IMPORTANT:** Page breaks should be rare and intentional. Most documents don't need page breaks. Only use `---` when content **must** be on separate pages for a specific reason: - Legal/structural requirement - Document structure demands it **Do NOT use `---`:** - Between sections (use headings: `## Section Title`) - As visual decoration (use blank lines) - Simply because there's a section transition ### Limitations (Features NOT Supported) **Do NOT include:** - Blockquotes inside lists - Images inside links inline with text (e.g., `[![image](url)](link)`)

ActionTry it

Documents details get

Retrieve a document's full structure by document_id: name, status, dates, version, reference number, creator, template, recipients, fields, variables, tokens, tags, pricing/grand total, and linked objects. Use to inspect a document before acting on it. Does not return extracted metadata — use `documents_metadata_get` for that; for the overall status only, use `documents_status_get`.

ActionTry it

Documents fields assign

Assign, reassign, or unassign document fields to recipients. The document must be in draft status. Provide a list of field-to-recipient mappings. Set recipient_id to null to unassign a field. Use get document details to obtain field UUIDs (fields[].uuid) and recipient IDs (recipients[].id). Once a field is assigned, that recipient becomes a signer for it. If it's unclear which recipient a field belongs to, ask the user before assigning.

ActionTry it

Documents list

Paginated document listing with structured filters: status, folder, tag, free-text search, sorting, and created/completed date ranges. Examples: 'list 50 Draft docs' · 'documents in folder <folder_uuid> tagged onboarding' · 'page 3 sorted by date_modified' For natural-language queries, prefer ``ai_search`` if available.

ActionTry it

Documents metadata batch get

Returns metadata for a list of 1-40 documents in a single request — the batch variant of `documents_metadata_get`. Prefer this tool over calling `documents_metadata_get` in a loop. The response is `{count, results[]}`; each entry is keyed by `document_id` and discriminated by `status` (`ok`, `extraction_pending`, `extraction_failed`, `extraction_not_started`, `not_found`, `access_denied`, `internal_error`). A failure for one document does not fail the whole request.

ActionTry it

Documents metadata get

Returns the metadata fields populated for the document. Each result combines the field definition (`id`, `key`, `field_type`, `settings`) with the extracted or manually-set value (`value`, `acceptance_status`). When extraction is not done, returns a structured envelope `{code, description, retry_after?}` where `code` is one of: `extraction_pending` (in progress — retry after `retry_after` seconds), `not_started` (typically the document is not yet completed — retry once it is), or `failed` (do not retry; contact support).

ActionTry it

Documents search

Full-text search with status/date filters. Examples: 'NDA in completed docs' · 'modified 2026-01-01–2026-03-31' · 'sent docs Q1 2026' For natural-language queries, prefer ``ai_search`` if available. If the user refers to a document by name and an ID is needed for a downstream operation, use this tool to resolve the name to an ID first. Do not ask the user for a document ID before attempting this lookup.

ActionTry it

Documents send

Send a document to its recipients. The document must be in Draft status. After sending, the status changes to Sent and recipients receive a notification. Use skip_unfilled_variables to send even when some variables are empty. Always confirm with the user before sending.

ActionTry it

Documents status change

Manually change a document's status. Only these transitions are allowed: Completed, Paid, Expired, or Declined. Status changes are restricted based on the current document status. Other statuses (such as Sent, Viewed, Approved) are set automatically by the system and cannot be set with this tool.

ActionTry it

Documents status get

Retrieve the overall document status (e.g. Draft, Sent, Completed, Expired). Some statuses are set automatically by the system: Sent (when the document is sent), Viewed (when a recipient opens it), Approved/Rejected (via approval workflows). For per-recipient signing progress use documents_details_get. Right after creating a document it may still be processing — if so, wait briefly and check again before acting.

ActionTry it

Documents summary get

Returns a summary for the specified document. Supports three granularity levels: detailed, short, or headline. If not ready, returns `{retry_after: N}` where N is seconds to wait before retrying.

ActionTry it

Documents update

Update a document. Document must be in Draft status. You can update text blocks, fields, and other document properties. After creating a new document, wait for it to reach Draft status before updating. To modify individual recipients, use `recipients_*` tools — the `recipients` param here replaces the entire list.

ActionTry it

Recipients add cc

Add a CC (non-signing) recipient to a document. Requires an existing contact ID. Cannot add to Expired or Declined documents. Adding a contact that is already a CC recipient is silently ignored. This tool only adds CC recipients; signers must be set via `documents_create` or `documents_update`.

ActionTry it

Recipients delete

Remove a recipient from a document. Signers can only be removed in Draft status. CC recipients can be removed in any status except Expired/Declined.

ActionTry it

Recipients edit

Update one recipient's details (email, name, phone, company, address, redirect) in place. Signers can be edited in Draft, Waiting Approval, Approved, Rejected, Sent, or Viewed status. A signer's email cannot be changed after they have signed. CC recipients can be edited in any status except Expired or Declined. Get recipient_id from document details first. Cannot use emails of existing contacts — use `recipients_reassign` for that.

ActionTry it

Recipients reassign

Replace a signer with another contact. Transfers all assigned fields to the new signer. The original signer is removed. Cannot reassign already-signed recipients. To just fix a signer's email/name, use `recipients_edit`.

ActionTry it

Templates create

Create a new template from a PDF URL. Provide a secure (HTTPS) publicly accessible URL to the PDF document.

ActionTry it

Templates details get

Inspect a template's schema — roles, fields, variables, pricing tables, content placeholders, tags, metadata — usually to prepare a `documents_create` call (e.g. 'what roles does the Sales Contract template expect?'). Typical flow: `templates_list` -> this tool -> `documents_create`. Not for listing templates or fetching a regular document.

ActionTry it

Templates list

Discover, browse, or pick a template by name, tag, or folder (e.g. 'what templates do we have?', 'find the NDA template'). If the user refers to a template by name and an ID is needed for a downstream operation, use this tool to resolve the name to an ID first. Do not ask the user for a template ID before attempting this lookup. Returns a paginated list of templates. Pass a returned `id` as `templates_details_get`'s `template_id` to inspect roles/fields/variables, or as `documents_create`'s `template_uuid` to generate a document. Not for searching documents (use `documents_list`) or creating one.

ActionTry it

How the PandaDoc MCP integration works

The PandaDoc MCP integration connects your Dench AI CRM directly to PandaDoc MCP, so agents can read and act on your PandaDoc MCP data as part of everyday work — answering questions in chat, keeping your CRM in sync, and running automations without anyone copying data between tools.

22 actions are available for agents to invoke on your behalf. Every call runs through PandaDoc MCP's own authorization, scoped to the account you connect.

Set up PandaDoc MCP in Dench

  1. 1

    Sign in to your Dench workspace and open Integrations.

  2. 2

    Find PandaDoc MCP and click Connect — you'll authorize access through PandaDoc MCP's own sign-in flow. No API keys or code required.

  3. 3

    Ask an agent to use PandaDoc MCP in chat, or call it from an automation.

  4. 4

    Manage or disconnect the connection any time from workspace settings.

Frequently asked questions

How does the PandaDoc MCP integration work with Dench?

The Dench PandaDoc MCP integration connects your AI CRM to PandaDoc MCP, so AI agents can work with your PandaDoc MCP data as part of chats, automations, and CRM workflows. You connect your account once, and every agent in your workspace can use it — governed by your workspace permissions.

What actions can AI agents perform with PandaDoc MCP via Dench?

The PandaDoc MCP integration currently exposes 22 actions, including Documents archive, Documents audit trail get, Documents content get, Documents create, Documents details get, and Documents fields assign. Agents invoke them on your behalf from chat or from automations.

Do I need to write code to connect PandaDoc MCP to Dench?

No. You connect PandaDoc MCP from your Dench workspace using PandaDoc MCP's own sign-in and authorization flow — no API keys to copy, no glue code to maintain.

Is the PandaDoc MCP integration secure?

Connections are authorized through PandaDoc MCP's own authentication flow, and Dench stores only the authorization needed to act on your behalf. You can review and disconnect the PandaDoc MCP connection from your workspace settings at any time.

PandaDoc MCP | Dench AI CRM