PenlyDoc MCP server
# PenlyDoc MCP server
Let an AI assistant send documents for e-signature with [PenlyDoc](https://penlydoc.com) and follow them:
"Send the lease to Mia Novak from the Residential lease template, rent 950 EUR", "Who still has to sign order 42?",
"Save the signed contract to ./signed".
It is a [Model Context Protocol](https://modelcontextprotocol.io) server that runs on your computer (stdio) and talks to the
PenlyDoc REST API with your organisation's API key. Works with any MCP client.
## Setup
1. Create an organisation at [penlydoc.com](https://penlydoc.com/console#/signup?src=utm_source%3Dgithub%20utm_campaign%3Dmcp) (free) and copy an API key from **Console → Developers**.
2. Add the server to your MCP client's configuration:
```json
{
"mcpServers": {
"penlydoc": {
"command": "npx",
"args": ["-y", "penlydoc-mcp"],
"env": { "PENLY_API_KEY": "sk_…" }
}
}
}
```
Node.js 18.17 or newer is needed. `PENLY_URL` points the server at another PenlyDoc instance (default `https://penlydoc.com`).
Treat the API key like a password: it can send documents in your organisation's name. Give the assistant a key of its own,
so you can revoke it in the console without touching your other integrations.
## Tools
| Tool | What it does | Side effects |
|---|---|---|
| `get_organisation` | Which organisation the key belongs to, sending limit | none |
| `list_templates` | Templates with their roles and data keys | none |
| `send_from_template` | Create a document from a template; `send: true` e-mails the people | **e-mails real people** |
| `send_document` | Upload local PDFs or photos and create a document; boxes from `{{sig:1}}` tags or coordinates | **e-mails real people** when `send: true` |
| `list_documents` | Documents with status and who has signed; filter by status or your reference | none |
| `get_document` | One document: each person, opened, signed or declined, and when | none |
| `get_history` | Hash-chained history with times and IP addresses | none |
| `send_draft` | Send a draft | **e-mails real people** |
| `send_reminder` | Remind everyone whose turn it is | **e-mails real people** |
| `cancel_document` | Void a document that is still being signed | **cannot be undone** |
| `create_signing_link` | One-hour link for an embedded signer | the link signs as that person |
| `download_signed_pdf` | Save the sealed PDF of a completed document to a file | writes a local file (never overwrites) |
| `verify_pdf` | Check a signed PDF: seal intact, who signed | none, no key needed |
The server tells the assistant to confirm people, e-mail addresses and documents with you before anything is sent.
Most MCP clients also ask you before each tool call; keep that on for the tools that e-mail people.
## Learn more
- [Developer guide](https://penlydoc.com/docs) and [embedding guide](https://penlydoc.com/docs/embed)
- [Examples in Node.js, Python, PHP and React](https://github.com/OrestKlymko/penlydoc-examples)
MIT licensed.
TDQS
Scored across 13 tools
Most tools have clearly distinct resource/action targets, and the descriptions clarify the main overlapping area: creating documents from templates versus uploading local files. The send_* family (send_from_template, send_document, send_draft, send_reminder) is the only place where an agent might briefly pause, but each has a specific purpose.
All tool names use consistent snake_case and follow a predictable verb_noun pattern, such as get_organisation, list_documents, cancel_document, and verify_pdf. The minor variation in send_from_template is still readable and fits the same convention.
With 13 tools, the server stays within a well-scoped range for an e-signature document workflow. Each tool covers a meaningful step: organisation lookup, templates, sending, status tracking, reminders, cancellation, signing links, and PDF verification.
The surface covers the core document lifecycle from template/upload through sending, status checks, history, reminders, cancellation, signed PDF download, and verification. Minor gaps exist around template management beyond listing and document metadata updates, but the main workflow is well covered.