Download DocSend and Papermark decks as PDF or PPTX, including email-gated and protected links.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Returns the calling account's plan (free or Pro), whether it's signed in, and this month's extraction usage and remaining quota. Takes no input.
This tool takes no arguments.
Returns the calling account's plan (free or Pro), whether it's signed in, and this month's extraction usage and remaining quota. Takes no input.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Extract a deck from a DocSend or Papermark sharing link. Returns a temporary download URL and a readable `deckextract://deck/...` resource for the PDF/PPTX (or a ZIP for data rooms — a DocSend Space or Papermark data room counts as one extraction like any other link). Pass `analyze: true` (part of DeckExtract for Funds) to also return structured deck data. Decks that email the viewer a verification step return resume tokens with retry instructions: fetch the emailed 6-digit code and retry with `otp` + `otpSessionId` (Papermark), or retry with `url` set to the emailed confirmation link + `sessionId` (DocSend). Typical extraction takes 15-90 seconds; the public API is rate limited to 5 extractions per IP per 30 minutes.
| Argument | Type | Description |
|---|---|---|
| otp | string | The 6-digit verification code the deck emailed to the viewer (requires_email_otp step). Send together with otpSessionId. |
| url* | string | The deck sharing link, e.g. https://docsend.com/view/... or https://papermark.com/view/... — on a requires_email_confirmation retry, pass the confirmation link from the verification email instead. |
| string | Email to present to email-gated decks. If omitted, an ephemeral address is generated automatically when the deck requires one. | |
| format | string | Output format (default 'pdf') |
| analyze | boolean | If true, also return structured analysis of the deck (company, team, round, metrics, market, competition). Part of DeckExtract for Funds. |
| password | string | Passcode for passcode-protected decks |
| sessionId | string | Resume token from a prior requires_password or requires_email_confirmation reply. Echo it on the retry so the same viewer session is reused. |
| otpSessionId | string | Resume token from a prior requires_email_otp reply. The parked session lives ~5 minutes; a wrong code returns a fresh token. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"otp": {
"type": "string",
"description": "The 6-digit verification code the deck emailed to the viewer (requires_email_otp step). Send together with otpSessionId."
},
"url": {
"type": "string",
"format": "uri",
"description": "The deck sharing link, e.g. https://docsend.com/view/... or https://papermark.com/view/... — on a requires_email_confirmation retry, pass the confirmation link from the verification email instead."
},
"email": {
"type": "string",
"format": "email",
"description": "Email to present to email-gated decks. If omitted, an ephemeral address is generated automatically when the deck requires one."
},
"format": {
"enum": [
"pdf",
"pptx"
],
"type": "string",
"description": "Output format (default 'pdf')"
},
"analyze": {
"type": "boolean",
"description": "If true, also return structured analysis of the deck (company, team, round, metrics, market, competition). Part of DeckExtract for Funds."
},
"password": {
"type": "string",
"description": "Passcode for passcode-protected decks"
},
"sessionId": {
"type": "string",
"description": "Resume token from a prior requires_password or requires_email_confirmation reply. Echo it on the retry so the same viewer session is reused."
},
"otpSessionId": {
"type": "string",
"description": "Resume token from a prior requires_email_otp reply. The parked session lives ~5 minutes; a wrong code returns a fresh token."
}
},
"additionalProperties": false
}