---
canonical_url: "https://docs.composio.dev/toolkits/pandadoc_mcp"
markdown_url: "https://docs.composio.dev/toolkits/pandadoc_mcp.md"
product: "platform"
version: null
last_updated: null
---

# PandaDoc MCP

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

- **Category:** documents
- **Auth:** DCR_OAUTH
- **Composio-managed OAuth available?** No
- **Tools:** 22
- **Triggers:** 0
- **Slug:** `PANDADOC_MCP`
- **Version:** 20260910_00

## Tools

### Documents archive

**Slug:** `PANDADOC_MCP_DOCUMENTS_ARCHIVE`

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

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `document_id` | string | Yes | Document ID to archive |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents audit trail get

**Slug:** `PANDADOC_MCP_DOCUMENTS_AUDIT_TRAIL_GET`

Retrieve audit trail for a document.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `document_id` | string | Yes | Document ID |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents content get

**Slug:** `PANDADOC_MCP_DOCUMENTS_CONTENT_GET`

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

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `document_id` | string | Yes | Document ID |
| `content_format` | string ("plaintext" | "markdown") | Yes | Content format to return. Must be one of: 'plaintext' or 'markdown'. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Document content on success, or a not-ready hint (`retry_after` seconds) when the content is still being generated. Other failures surface as a standard tool error. |

### Documents create

**Slug:** `PANDADOC_MCP_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 starts in `Uploaded` and becomes `Draft` once it is ready.

After calling this tool:

1. Poll `documents_status_get` until it reports `Draft`, or until it returns an error.
2. If `Draft`, the document is ready to edit, send, or fetch details/content.
3. If `documents_status_get` returns an error, creation failed (invalid file, markdown conversion failure, validation errors, etc.). Report `error.detail` and do not call details/content/edit/send on it. This is terminal — `error.retryable` is `false`, so stop polling.
4. While status is still `Uploaded`, do not assume success and do not call tools that require a ready document.

A failed creation is reported for roughly 8 hours. After that a status lookup reports the document as not found — treat that as the same terminal failure, not a reason to resume polling.

## 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. **This is also the only value `role_fields[].field_ids` may reference** (see below) — a field with no `id="..."` cannot be pre-assigned to a role.

**Assigning fields to roles via `role_fields`:** to pre-assign a field to a recipient's role at creation time, give the field an `id="..."` in `document_markdown`, then reference that exact same string in `role_fields[].field_ids`. A `field_ids` value that does not match any `id="..."` in `document_markdown` is rejected — never invent a `role_fields` value without first setting the matching `id="..."` on the field:

```text
document_markdown: "Signed: [[signature id=\"Signer_Sig\"]]"
role_fields: [{"role": "Signer", "field_ids": ["Signer_Sig"]}]
```

**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:**

- Raw HTML, including `<br>`, `<u>`, and `<div>`
- Blockquotes inside lists
- Images inside links inline with text (e.g., `[![image](url)](link)`)
- Merged table cells

**Field syntax rules:**

- Field types must be lowercase and match the closed set exactly (`text`, `email`, `phone`, `number`, `date`, `checkbox`, `signature`, `dropdown`). Capitalized or otherwise altered forms are not recognized.
- The only valid syntax is `[[field_type attributes]]`. Forms like `[[Signature|Signer]]`, `[[signature:sig_a]]`, `[[s:Owner1]]`, and `[[signature_1]]` are not recognized — use `[[signature id="Signer_Signature"]]` instead.
- Fields sharing the same `id` must have the same field type — a mismatched type is rejected. `signature` fields cannot share an `id` with any other field, including another `signature` field.
- Every value passed in `role_fields.field_ids` must match the `id` attribute of a field present in `document_markdown`.


#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `request` | string | Yes | Document to create. Set `source` to `template` (create from a PandaDoc template), `markdown` (create from markdown content), or `file` (create from a PDF/DOCX file URL). Each source accepts only its own parameters. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents details get

**Slug:** `PANDADOC_MCP_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_batch_get` for that; for the overall status only, use `documents_status_get`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `document_id` | string | Yes | Document ID |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents fields assign

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `assignments` | array | Yes | List of field-to-recipient assignments. Each item maps a field UUID to a recipient UUID (or null to unassign). |
| `document_id` | string | Yes | Document ID |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents list

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `q` | string | No | Filters documents by name or reference number (stored on the template level). |
| `tag` | string | No | Filters documents by tag. |
| `page` | string | No | Paginates the search result. Increase value to get the next page of results. |
| `count` | string | No | Limits the size of the response. Default is 50 documents, maximum is 100 documents. |
| `status` | string | No | Filters documents by status. Valid values: Draft, Sent, Completed, Uploaded, Error, Viewed, Waiting for Approval, Approved, Rejected, Waiting for Payment, Paid, Expired, Declined, External Review, Scheduled. |
| `sort_by` | string | No | Field to sort documents by. Defaults to date_status_changed when omitted. |
| `created_to` | string | No | Only documents created before this ISO-8601 datetime, e.g. ``2026-03-31T23:59:59Z``. |
| `sort_order` | string | No | Sort direction, ascending when omitted. Keep consistent across pages of the same query. |
| `folder_uuid` | string | No | UUID of the folder to list from (folder_uuid, NOT folder_id). |
| `completed_to` | string | No | Only documents completed before this ISO-8601 datetime. |
| `created_from` | string | No | Only documents created on or after this ISO-8601 datetime, e.g. ``2026-03-01T00:00:00Z``. |
| `completed_from` | string | No | Only documents completed on or after this ISO-8601 datetime. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents metadata batch get

**Slug:** `PANDADOC_MCP_DOCUMENTS_METADATA_BATCH_GET`

Use to read the business terms extracted from documents — counterparty, contract value, dates, renewal terms — without fetching and re-reading their full text. Handles 1-40 documents per call, so pass a one-element `document_ids` for a single one. Narrow the response with `field_keys` when only certain terms matter. Extraction generally runs once a document is completed, so a document still being worked on may have nothing to return yet. Each document reports its own outcome, so one failure does not lose the rest: `ok` carries that document's fields, `extraction_pending` should be retried after `retry_after` seconds, `extraction_not_started` means the document is not completed yet, `extraction_failed` is terminal (contact support), `not_found` and `access_denied` mean the document cannot be read, and `internal_error` is safe to retry for that document alone.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `field_keys` | string | No | Optional case-sensitive filter on metadata field `key` (the human-readable field name returned as `results[].ai_metadata.results[].key`, e.g. `Contract value`). Unknown keys are silently ignored. When omitted, every populated field is returned per document. |
| `document_ids` | array | Yes | 1-40 document IDs to fetch metadata for. Duplicates are rejected by the server. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Batch metadata for up to 40 documents in a single call. Returns `{count, results[]}` where each entry is keyed by `document_id` and discriminated by `status`: `ok` carries the populated metadata; `extraction_pending` carries `retry_after` seconds; `extraction_failed` is terminal (contact support); `extraction_not_started` typically means the document is not yet completed; `not_found` and `access_denied` are per-document gating outcomes; `internal_error` is an isolated per-document failure that is safe to retry on its own. Whole-request failures (validation, auth, rate limit, …) surface as a standard tool error. |

### Documents reminder send

**Slug:** `PANDADOC_MCP_DOCUMENTS_REMINDER_SEND`

Send a reminder to recipients of a document that is out for signature, so the ones who have not completed their part are prompted again. The document must be in Sent or Viewed status. Reminders reach real people by email and/or SMS, so confirm with the user which recipients to remind before calling. Take recipient ids from the document's details; recipients left out of the call are not reminded. To word the email yourself, pass subject and message at the top level of the call — they apply to every recipient in it. The outcome is reported per recipient and per delivery method, including the reason a reminder was not delivered.


#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `message` | string | No | Body of the reminder email, in Markdown, applied to every recipient in this call. Set this when the user dictates the wording ("text SIGN IT"). Ignored by SMS; the account default is used when omitted. |
| `subject` | string | No | Subject line for the reminder email, applied to every recipient in this call. Set this when the user dictates a subject ("subject ASAP"). Ignored by SMS; the account default is used when omitted. |
| `reminders` | array | Yes | The recipients to remind, one entry each. |
| `document_id` | string | Yes | Id of the document whose recipients should be reminded. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `result` | array | Yes | One entry per recipient the reminder was requested for, including recipients that turned out not to be on the document. |

### Documents search

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | string | No | Page number (1-based). Omit to use API default (1). |
| `count` | string | No | Page size: public API ``count`` query param. Omit for default (30). Max 100. |
| `query` | string | Yes | Full-text search string (matches document content and metadata). |
| `status` | string | No | Restrict hits to documents with these statuses (omit to ignore status). Valid values: Draft, Sent, Completed, Uploaded, Error, Viewed, Waiting for Approval, Approved, Rejected, Waiting for Payment, Paid, Expired, Declined, External Review, Scheduled. Example: ["Sent", "Completed"]. |
| `to_date` | string | No | Inclusive window end (ISO-8601), e.g. ``2026-03-31T23:59:59Z``. Use together with ``date_filter_column`` and ``from_date``. |
| `from_date` | string | No | Inclusive window start (ISO-8601), e.g. ``2026-03-01T00:00:00Z``. Use together with ``date_filter_column`` and ``to_date``. |
| `date_filter_column` | string | No | Which document timestamp the date window applies to. If you set any date filter, set **all three** of ``date_filter_column``, ``from_date``, and ``to_date``. Allowed values: ``date_created``, ``date_expiration``, ``last_modified``, ``signature_date``, ``effective_date``. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents send

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sender` | string | No | Set a sender of a document as an email or membership_id. |
| `silent` | string | No | If true, disables email notifications for document recipients and the sender. Also disables scheduled reminders. Does not affect 'Approve document' email notification. |
| `message` | string | No | A message that will be sent by email with a link to the document to sign. |
| `subject` | string | No | Value that will be used as the email subject. |
| `reply_to` | string | No | Email address used as reply-to for the document. Must be enabled for the account by support. |
| `document_id` | string | Yes | Document ID |
| `selected_approvers` | string | No | Configuration for selecting approvers from approval workflow groups. Copy 'steps' from the 'approval_execution' section of Document Details and set 'is_selected' to true for the desired approver. |
| `forwarding_settings` | string | No | Settings for document and signature forwarding. Controls whether recipients can forward the document or reassign their fields to another person. |
| `skip_unfilled_variables` | boolean | No | Must be false by default. Only set to true when the user has explicitly chosen to send with empty variables. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents status change

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `note` | string | No | Optional note for the status change |
| `status` | string | Yes | Target status. Valid values: Completed, Paid, Expired, Declined. |
| `document_id` | string | Yes | Document ID |
| `notify_recipients` | boolean | No | Whether to notify recipients of the status change |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents status get

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `document_id` | string | Yes | Document ID |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Documents summary get

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `document_id` | string | Yes | Document ID |
| `summary_type` | string ("detailed" | "short" | "headline") | Yes | Summary granularity to return. Must be one of: 'detailed', 'short', or 'headline'. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Document summary on success, or a not-ready hint (`retry_after` seconds) when the summary is still being generated. Other failures surface as a standard tool error. |

### Documents update

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `url` | string | No | Document URL |
| `name` | string | No | Document name |
| `tags` | string | No | Document tags |
| `texts` | string | No | List of text blocks to update. Each item should have 'name' and 'data' fields |
| `fields` | string | No | Document fields as key-value pairs |
| `images` | string | No | Images |
| `tables` | string | No | Tables to populate by name |
| `tokens` | string | No | Document tokens (variables). Each should have name and value. |
| `metadata` | string | No | Document metadata as key-value pairs |
| `recipients` | string | No | List of recipients. Each should have email, first_name, last_name, etc. |
| `document_id` | string | Yes | Document ID |
| `pricing_tables` | string | No | Pricing tables to populate by name |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Recipients add cc

**Slug:** `PANDADOC_MCP_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`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `kind` | string ("contact" | "contact_group") | No | 'contact' or 'contact_group'. |
| `contact_id` | string | Yes | Contact UUID to add as CC. |
| `document_id` | string | Yes | Document UUID |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Recipients delete

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `document_id` | string | Yes | Document UUID |
| `recipient_id` | string | Yes | Recipient UUID to remove. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Recipients edit

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `city` | string | No | City. |
| `email` | string | No | New email address. |
| `phone` | string | No | Phone number. |
| `state` | string | No | State or region. |
| `company` | string | No | Company name. |
| `country` | string | No | Country. |
| `redirect` | string | No | Post-signing redirect (is_enabled, url). |
| `job_title` | string | No | Job title. |
| `last_name` | string | No | Last name. |
| `first_name` | string | No | First name. |
| `document_id` | string | Yes | Document UUID |
| `postal_code` | string | No | Postal / ZIP code. |
| `recipient_id` | string | Yes | Recipient UUID from document details. |
| `street_address` | string | No | Street address. |
| `delivery_methods` | string | No | Delivery methods (email/sms). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Recipients reassign

**Slug:** `PANDADOC_MCP_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`.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `kind` | string ("contact" | "contact_group") | No | 'contact' or 'contact_group'. |
| `document_id` | string | Yes | Document UUID |
| `recipient_id` | string | Yes | Recipient UUID of the signer to replace. |
| `new_contact_id` | string | Yes | Contact UUID of the new signer. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Templates create

**Slug:** `PANDADOC_MCP_TEMPLATES_CREATE`

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

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `url` | string | Yes | Secure (HTTPS) and publicly accessible URL to the PDF document |
| `name` | string | No | The name of the template |
| `tokens` | string | No | CUSTOM variables as list of {name, value} pairs |
| `metadata` | string | No | Arbitrary key-value data to associate with the template |
| `folder_uuid` | string | No | Folder ID where the created template should be stored |
| `owner_email` | string | No | Owner email for the template |
| `owner_membership_id` | string | No | Owner membership_id for the template |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Templates details get

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `template_id` | string | Yes | Template ID |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |

### Templates list

**Slug:** `PANDADOC_MCP_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.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `q` | string | No | Search query. Filter by template name. |
| `tag` | string | No | Search tag. Filter by template tag. |
| `page` | string | No | Specify which page of the dataset to return. |
| `count` | string | No | Specify how many templates to return. |
| `fields` | string | No | A comma-separated list of additional fields to include in the response. |
| `shared` | string | No | Returns only the shared templates. |
| `deleted` | string | No | Returns only the deleted templates. |
| `folder_uuid` | string | No | UUID of the folder where the templates are stored. |
| `template_id` | string | No | Specify template ID. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | array | No |  |
| `isError` | boolean | No |  |
| `structuredContent` | object | No | Successful `structuredContent` for this tool, or a standard error object under the `error` key (when the tool result has `isError: true`). |
