Documenso MCP server
89 operations0 webhooks
Create and manage Documenso signing envelopes, legacy documents and templates, recipients, fields, folders, attachments, downloads, and embed tokens through the documented v2 REST API.
Try Documenso with your agent
Connect Documenso, then paste this into Claude, ChatGPT or Cursor. For ideas from other apps, see the use cases.
Using Corsair, show me what you can do in Documenso on my account, then run one read-only example and show me the result.
Documenso tools and triggers
Tools are what your agent can do in Documenso through Corsair's MCP server. Triggers are the Documenso events a routine can start from.
Envelopes
- Attachments.Create.PostWrite
POST /envelope/attachment/create — Create attachment.
envelopes.attachments.create.post
- Attachments.Delete.PostDestructive
POST /envelope/attachment/delete — Delete attachment.
envelopes.attachments.delete.post
- Attachments.Find.GetRead-only
GET /envelope/attachment — Find attachments.
envelopes.attachments.find.get
- Attachments.Update.PostWrite
POST /envelope/attachment/update — Update attachment.
envelopes.attachments.update.post
- Audit Log Download Pdf.GetRead-only
GET /envelope/{envelopeId}/audit-log/download — Download envelope audit log PDF.
envelopes.auditLogDownloadPdf.get
- Audit Log Find.GetRead-only
GET /envelope/{envelopeId}/audit-log — Get envelope audit logs.
envelopes.auditLogFind.get
- Cancel.PostDestructive
POST /envelope/cancel — Cancel envelope.
envelopes.cancel.post
- Certificate Download Pdf.GetRead-only
GET /envelope/{envelopeId}/certificate/download — Download envelope certificate PDF.
envelopes.certificateDownloadPdf.get
- Create.PostWrite
POST /envelope/create — Create envelope.
envelopes.create.post
- Delete.PostDestructive
POST /envelope/delete — Delete envelope.
envelopes.delete.post
- Distribute.PostDestructive
POST /envelope/distribute — Distribute envelope.
envelopes.distribute.post
- Duplicate.PostWrite
POST /envelope/duplicate — Duplicate envelope.
envelopes.duplicate.post
- Fields.Create Many.PostWrite
POST /envelope/field/create-many — Create envelope fields.
envelopes.fields.createMany.post
- Fields.Delete.PostDestructive
POST /envelope/field/delete — Delete envelope field.
envelopes.fields.delete.post
- Fields.Get.GetRead-only
GET /envelope/field/{fieldId} — Get envelope field.
envelopes.fields.get.get
- Fields.Update Many.PostWrite
POST /envelope/field/update-many — Update envelope fields.
envelopes.fields.updateMany.post
- Find.GetRead-only
GET /envelope — Find envelopes.
envelopes.find.get
- Get Many.PostRead-only
POST /envelope/get-many — Get multiple envelopes.
envelopes.getMany.post
- Get.GetRead-only
GET /envelope/{envelopeId} — Get envelope.
envelopes.get.get
- Items.Create Many.PostWrite
POST /envelope/item/create-many — Create envelope items.
envelopes.items.createMany.post
- Items.Delete.PostDestructive
POST /envelope/item/delete — Delete envelope item.
envelopes.items.delete.post
- Items.Download.GetRead-only
GET /envelope/item/{envelopeItemId}/download — Download an envelope item.
envelopes.items.download.get
- Items.Update Many.PostWrite
POST /envelope/item/update-many — Update envelope items.
envelopes.items.updateMany.post
- Recipients.Create Many.PostWrite
POST /envelope/recipient/create-many — Create envelope recipients.
envelopes.recipients.createMany.post
- Recipients.Delete.PostDestructive
POST /envelope/recipient/delete — Delete envelope recipient.
envelopes.recipients.delete.post
- Recipients.Get.GetRead-only
GET /envelope/recipient/{recipientId} — Get envelope recipient.
envelopes.recipients.get.get
- Recipients.Recipient Reject On Behalf Of.PostDestructive
POST /envelope/recipient/{recipientId}/reject — Reject envelope recipient on behalf of.
envelopes.recipients.recipientRejectOnBehalfOf.post
- Recipients.Update Many.PostWrite
POST /envelope/recipient/update-many — Update envelope recipients.
envelopes.recipients.updateMany.post
- Redistribute.PostDestructive
POST /envelope/redistribute — Redistribute envelope.
envelopes.redistribute.post
- Update.PostWrite
POST /envelope/update — Update envelope.
envelopes.update.post
- Use.PostDestructive
POST /envelope/use — Use envelope.
envelopes.use.post
Documents
- Attachments.Create.PostWrite
POST /document/attachment/create — [Deprecated] Create attachment.
documents.attachments.create.post
- Attachments.Delete.PostDestructive
POST /document/attachment/delete — [Deprecated] Delete attachment.
documents.attachments.delete.post
- Attachments.Find.GetRead-only
GET /document/attachment — [Deprecated] Find attachments. Documenso's server currently routes this path to the get-document handler and answers 400; use envelopes.attachments.find with the document's envelopeId instead.
documents.attachments.find.get
- Attachments.Update.PostWrite
POST /document/attachment/update — [Deprecated] Update attachment.
documents.attachments.update.post
- Create V0.PostWrite
POST /document/create/beta — [Deprecated] Create document.
documents.createV0.post
- Create.PostWrite
POST /document/create — [Deprecated] Create document.
documents.create.post
- Delete.PostDestructive
POST /document/delete — [Deprecated] Delete document.
documents.delete.post
- Distribute.PostDestructive
POST /document/distribute — [Deprecated] Distribute document.
documents.distribute.post
- Document Download.GetRead-only
GET /document/{documentId}/download-beta — [Deprecated] Download document (beta).
documents.documentDownload.get
- Download.GetRead-only
GET /document/{documentId}/download — [Deprecated] Download document.
documents.download.get
- Duplicate.PostWrite
POST /document/duplicate — [Deprecated] Duplicate document.
documents.duplicate.post
- Fields.Create Many.PostWrite
POST /document/field/create-many — [Deprecated] Create document fields.
documents.fields.createMany.post
- Fields.Create.PostWrite
POST /document/field/create — [Deprecated] Create document field.
documents.fields.create.post
- Fields.Delete.PostDestructive
POST /document/field/delete — [Deprecated] Delete document field.
documents.fields.delete.post
- Fields.Get.GetRead-only
GET /document/field/{fieldId} — [Deprecated] Get document field.
documents.fields.get.get
- Fields.Update Many.PostWrite
POST /document/field/update-many — [Deprecated] Update document fields.
documents.fields.updateMany.post
- Fields.Update.PostWrite
POST /document/field/update — [Deprecated] Update document field.
documents.fields.update.post
- Find.GetRead-only
GET /document — [Deprecated] Find documents.
documents.find.get
- Get Many.PostRead-only
POST /document/get-many — [Deprecated] Get multiple documents.
documents.getMany.post
- Get.GetRead-only
GET /document/{documentId} — [Deprecated] Get document.
documents.get.get
- Recipients.Create Many.PostWrite
POST /document/recipient/create-many — [Deprecated] Create document recipients.
documents.recipients.createMany.post
- Recipients.Create.PostWrite
POST /document/recipient/create — [Deprecated] Create document recipient.
documents.recipients.create.post
- Recipients.Delete.PostDestructive
POST /document/recipient/delete — [Deprecated] Delete document recipient.
documents.recipients.delete.post
- Recipients.Get.GetRead-only
GET /document/recipient/{recipientId} — [Deprecated] Get document recipient.
documents.recipients.get.get
- Recipients.Update Many.PostWrite
POST /document/recipient/update-many — [Deprecated] Update document recipients.
documents.recipients.updateMany.post
- Recipients.Update.PostWrite
POST /document/recipient/update — [Deprecated] Update document recipient.
documents.recipients.update.post
- Redistribute.PostDestructive
POST /document/redistribute — [Deprecated] Redistribute document.
documents.redistribute.post
- Update.PostWrite
POST /document/update — [Deprecated] Update document.
documents.update.post
Templates
- Create Template Temporary.PostWrite
POST /template/create/beta — [Deprecated] Create template.
templates.createTemplateTemporary.post
- Create.PostWrite
POST /template/create — [Deprecated] Create template.
templates.create.post
- Delete.PostDestructive
POST /template/delete — [Deprecated] Delete template.
templates.delete.post
- Direct Links.Create.PostWrite
POST /template/direct/create — [Deprecated] Create direct link.
templates.directLinks.create.post
- Direct Links.Delete.PostDestructive
POST /template/direct/delete — [Deprecated] Delete direct link.
templates.directLinks.delete.post
- Direct Links.Toggle.PostWrite
POST /template/direct/toggle — [Deprecated] Toggle direct link.
templates.directLinks.toggle.post
- Duplicate.PostWrite
POST /template/duplicate — [Deprecated] Duplicate template.
templates.duplicate.post
- Fields.Create Many.PostWrite
POST /template/field/create-many — [Deprecated] Create template fields.
templates.fields.createMany.post
- Fields.Create.PostWrite
POST /template/field/create — [Deprecated] Create template field.
templates.fields.create.post
- Fields.Delete.PostDestructive
POST /template/field/delete — [Deprecated] Delete template field.
templates.fields.delete.post
- Fields.Get.GetRead-only
GET /template/field/{fieldId} — [Deprecated] Get template field.
templates.fields.get.get
- Fields.Update Many.PostWrite
POST /template/field/update-many — [Deprecated] Update template fields.
templates.fields.updateMany.post
- Fields.Update.PostWrite
POST /template/field/update — [Deprecated] Update template field.
templates.fields.update.post
- Find.GetRead-only
GET /template — [Deprecated] Find templates.
templates.find.get
- Get Many.PostRead-only
POST /template/get-many — [Deprecated] Get multiple templates.
templates.getMany.post
- Get.GetRead-only
GET /template/{templateId} — [Deprecated] Get template.
templates.get.get
- Recipients.Create Many.PostWrite
POST /template/recipient/create-many — [Deprecated] Create template recipients.
templates.recipients.createMany.post
- Recipients.Create.PostWrite
POST /template/recipient/create — [Deprecated] Create template recipient.
templates.recipients.create.post
- Recipients.Delete.PostDestructive
POST /template/recipient/delete — [Deprecated] Delete template recipient.
templates.recipients.delete.post
- Recipients.Get.GetRead-only
GET /template/recipient/{recipientId} — [Deprecated] Get template recipient.
templates.recipients.get.get
- Recipients.Update Many.PostWrite
POST /template/recipient/update-many — [Deprecated] Update template recipients.
templates.recipients.updateMany.post
- Recipients.Update.PostWrite
POST /template/recipient/update — [Deprecated] Update template recipient.
templates.recipients.update.post
- Update.PostWrite
POST /template/update — [Deprecated] Update template.
templates.update.post
- Use.PostDestructive
POST /template/use — [Deprecated] Use template.
templates.use.post
Folders
- Create.PostWrite
POST /folder/create — Create new folder.
folders.create.post
- Delete.PostDestructive
POST /folder/delete — Delete folder.
folders.delete.post
- Find.GetRead-only
GET /folder — Find folders.
folders.find.get
- Update.PostWrite
POST /folder/update — Update folder.
folders.update.post
Embedding
- Presign Create Embedding Presign Token.PostWrite
POST /embedding/create-presign-token — Create embedding presign token.
embedding.presignCreateEmbeddingPresignToken.post
- Presign Verify Embedding Presign Token.PostRead-only
POST /embedding/verify-presign-token — Verify embedding presign token.
embedding.presignVerifyEmbeddingPresignToken.post
Connect Documenso to Claude, ChatGPT or Cursor
- 1
Connect Documenso in Corsair
Add your Documenso API key once in Corsair. Corsair stores the credential encrypted and makes the Documenso API calls for your agent, so it never goes into a prompt or a config file. Connect Documenso
If your link lets the agent add apps, you can skip this: it gives you a sign-in link the first time it needs Documenso. On a ChatGPT personal plan, connect Documenso here first.
- 2
Add Corsair's MCP server to your agent
Every client uses the same address:
https://mcp.corsair.dev/mcpOpen Customize → Connectors → Add custom connector, paste the address, then select Connect.Add a custom MCP server with the address and choose OAuth. Personal plans get read tools only.Add to CursorOr add this to~/.cursor/mcp.json. Cursor opens Corsair to sign in the first time it connects.{ "mcpServers": { "corsair": { "url": "https://mcp.corsair.dev/mcp" } } }Run this, then run/mcpin Claude Code to sign in.claude mcp add --transport http corsair https://mcp.corsair.dev/mcpCodex, Gemini CLI, VS Code, Zed and other clients with OAuth sign-in work the same way. Clients without it, such as GitHub Copilot's coding agent, use a link's own address and an API key. Setup for every client
- 3
Sign in and choose what needs your approval
Your client opens Corsair to sign in. Pick a link: the apps your agent can use and a mode that decides what it may do without asking. In the default Cautious mode, Documenso's read and write operations run right away and its 22 destructive operations wait for your approval. Strict mode asks before every write and refuses destructive operations, and Read mode allows reads only.
FAQ
Install corsair and @corsair-dev/documenso, add the Documenso plugin, and connect with an API key. Then call methods like corsair.documenso.api.documents.attachments.create.post() from your app. Corsair keeps each tenant isolated.
Yes. Documenso requires an API key from your Documenso account or developer dashboard. Create credentials with access that matches what you automate, then paste them into Corsair or connect through managed auth in Hub.
Yes. One Corsair client can hit Documenso, GitHub, Notion, Stripe, and the rest. Trigger Documenso from a webhook, push updates to Slack, or chain actions across plugins. Same tenant context across integrations, plain TypeScript.
Teams use Corsair for create and manage Documenso signing envelopes, legacy documents and templates, recipients, fields, folders, attachments, downloads, and embed tokens through the documented v2 REST API. Common builds include sync jobs, admin tooling, and agents that call Documenso APIs from your backend.
The SDK is open source. Self-host and you pay Corsair nothing for the integration layer. Hub bills for hosted auth and execution, not per Documenso API call. Hub has a generous free tier. For hobby projects you can probably run the whole thing on free. Paid plans start to matter with more tenants or heavier traffic.
We maintain @corsair-dev/documenso in the open repo. When Documenso ships API changes, upgrade the package. Your call sites stay typed. You should not need to rewrite the integration layer each time.
No. Corsair does not read your Documenso data or hold individual access credentials. Credentials stay in your database. API calls run on your instance. We do not store Documenso data on your behalf.
Yes. Add https://mcp.corsair.dev/mcp as a custom connector or MCP server in Claude, ChatGPT, Cursor, VS Code, Claude Code, Codex or any client that supports remote MCP servers with OAuth sign-in, then sign in to Corsair. On ChatGPT personal plans, custom servers currently get read tools only.
Yes. Put Documenso on a link in Strict mode and every write waits for your approval, while destructive actions are refused. The default Cautious mode asks only before the 22 destructive Documenso operations. You can change a link's mode at hub.corsair.dev/me.