docsend2pdf-mcp
MCP server for converting DocSend documents to PDF via docsend2pdf.com
Installation
Requires Python 3.10+.
pip install docsend2pdf-mcp
Configuration
{
"mcpServers": {
"docsend2pdf": {
"command": "python",
"args": ["-m", "docsend2pdf_mcp"],
"env": {
"DOCSEND2PDF_DOWNLOAD_DIR": "~/Downloads/docsend_pdfs"
}
}
}
}
Usage
- Convert:
"Convert this DocSend to PDF: https://docsend.com/view/abc123" - With password:
"Convert https://docsend.com/view/xyz789 (password: mypass)" - With email:
"Convert https://docsend.com/view/doc456 (email: user@example.com)" - Custom filename:
"Save https://docsend.com/view/doc789 as report.pdf"
Most decks ask for an email. The agent should ask for an address you can read
before converting if you have not supplied one. The deck owner will see it.
Email remains optional for public documents. Password-protected documents need
passcode.
Both docsend.com/view/... and docsend.com/v/... document links work.
Space links (/view/s/) do not: provide the individual document link instead.
Email verification
If DocSend sends a verification email, convert_docsend returns
status: "email_verification_required", session_id, and expires_at.
Copy the link behind the "Verify email address" button without opening it,
then give it to the agent. The link is single-use.
The agent calls submit_verification_link(session_id, verification_url). The MCP
server submits the link to the verification API, polls until the PDF is ready,
and saves it using the original custom filename, if any. Queued conversions are
also polled automatically.
Verification sessions are held in memory until expiry (normally 24 hours). If the MCP server restarts, the session expires, or you already opened the email link, start a new conversion for a fresh verification email.
Results
Results retain the human-readable message and the Saved to: <path> line.
Every result also contains a fenced JSON block with status, error_code,
retryable, recovery_action, task_id, session_id, and saved_path.
Unavailable values are null. Successful conversions use status: "completed";
failures use "error". Verification handoffs also include expires_at and
the exact copying instruction.
API failures preserve details.error_code, details.retryable, and
recovery_action so agents can ask for missing email or credentials, restart
verification, or stop retrying a dead link. Errors remain text, not MCP
isError results, for compatibility with older clients.
Features
- Password-protected documents
- Email-gated documents, including completion of email verification inside MCP
- Custom filenames, sanitized to stay inside the download directory
- Rate limiting (5 req/sec)
- Explicit blocking requests (
async: false) with a versionedDocSend2PDF-MCP/0.2.0User-Agent - Readable five-minute timeout errors
PDFs still default to ~/Downloads/docsend_pdfs; override this with
DOCSEND2PDF_DOWNLOAD_DIR. Clients must be able to read that local path.
Upgrading
0.2.0 keeps the existing convert_docsend arguments and requires Python 3.10+
and MCP 1.x. Users of uvx docsend2pdf-mcp@latest pick up the release on their
next client restart. Pinned pipx installations need an explicit upgrade:
pipx upgrade docsend2pdf-mcp
Development
pip install -e ".[dev]"
python -m pytest
python -m build
pyproject.toml is the only packaging file. The package is split into
api.py (HTTP client, polling, verification sessions), files.py (PDF saving),
server.py (MCP tools), and __main__.py (stdio entry point).
The tracked unit suite (tests/unit) uses mock HTTP responses, temporary
download directories, and no live DocSend links or email. The build produces
both a wheel and an sdist. The sdist includes only package sources, unit tests,
and distribution metadata; anything else in the working tree is excluded.
License
MIT
Metadata
Release files for docsend2pdf-mcp 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| docsend2pdf_mcp-0.2.0.tar.gz | 17.6 kB | Without provenance | Details for docsend2pdf_mcp-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| docsend2pdf_mcp-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for docsend2pdf_mcp-0.2.0-py3-none-any.whl |
Total release size: 30.9 kB
Release files / docsend2pdf_mcp-0.2.0.tar.gz
| Download URL | docsend2pdf_mcp-0.2.0.tar.gz |
|---|---|
| Size | 17.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
905685cec81ea27a1eaabed3fe392186985a75115093f79a6d61dc16892a1d80
|
|
BLAKE2b-256 checksum How to use checksums |
f55504151f745191d0b3d6e0058abfedeef0fa1b1c2d1a19c78971237858775c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.16
|
Release files / docsend2pdf_mcp-0.2.0-py3-none-any.whl
| Download URL | docsend2pdf_mcp-0.2.0-py3-none-any.whl |
|---|---|
| Size | 13.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
305a461ba0e533eaf2b8b06ed8dbf4baabfadd5d24098f01d269fbfc549b26d4
|
|
BLAKE2b-256 checksum How to use checksums |
65bcd68c966135c140404bb66e6e37f26b8acd32bae3d95cf283688d1fb46c1a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.16
|
Security for docsend2pdf-mcp 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.