PenlyDoc

io.github.OrestKlymkoPublished by GitHub account OrestKlymkov0.1.1Updated Nov 1, 2026

Send documents for e-signature, track who signed and save sealed PDFs with PenlyDoc.

Overview

AI-generated overview

PenlyDoc MCP server lets an assistant send documents for e-signature, track who signed, and save sealed signed PDFs.

What you can do
  • Create documents from templates or upload local PDFs and page photos, with signature boxes from tags or coordinates
  • List and inspect documents: status, who opened, signed or declined, and hash-chained history with times and IPs
  • Send drafts, send reminders to people whose turn it is, and cancel documents still being signed
  • Create one-hour embedded signing links and download sealed signed PDFs to a local file
  • Verify any local signed PDF for seal integrity and signers, without an API key
When to use it
Useful when you want an assistant to prepare and dispatch contracts, leases or orders for signature and then follow their progress, or to check and archive completed signed PDFs without leaving the chat.
Requirements
Runs locally over stdio via npx, so Node.js 18.17 or newer is needed. Requires a PenlyDoc organisation and an API key from the console, supplied as PENLY_API_KEY; PENLY_URL optionally points at another instance. Network access to the PenlyDoc API is required.
Before you install
The API key can send documents in the organisation's name, so treat it as a password and use a dedicated, revocable key. Several tools e-mail real people (sending, reminders, cancelling) and cancellation cannot be undone; confirm recipients and content first and keep client approval prompts on. Signing links let whoever holds them sign as that person. Document history includes signer IP addresses.

Installation

In SourceWeft

  1. Open PenlyDoc in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

PenlyDoc MCP server

Let an AI assistant send documents for e-signature with PenlyDoc 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 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 (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

ToolWhat it doesSide effects
get_organisationWhich organisation the key belongs to, sending limitnone
list_templatesTemplates with their roles and data keysnone
send_from_templateCreate a document from a template; send: true e-mails the peoplee-mails real people
send_documentUpload local PDFs or photos and create a document; boxes from {{sig:1}} tags or coordinatese-mails real people when send: true
list_documentsDocuments with status and who has signed; filter by status or your referencenone
get_documentOne document: each person, opened, signed or declined, and whennone
get_historyHash-chained history with times and IP addressesnone
send_draftSend a drafte-mails real people
send_reminderRemind everyone whose turn it ise-mails real people
cancel_documentVoid a document that is still being signedcannot be undone
create_signing_linkOne-hour link for an embedded signerthe link signs as that person
download_signed_pdfSave the sealed PDF of a completed document to a filewrites a local file (never overwrites)
verify_pdfCheck a signed PDF: seal intact, who signednone, 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

MIT licensed.

Source: README.md at commit 5da7c35

Tools

13

get_organisation

Organisation

Shows which PenlyDoc organisation the API key belongs to, its default language and its sending limit.

Takes no parameters.

list_templates

List templates

Lists the organisation's templates: id, name, the roles to fill (e.g. "tenant", "landlord"), the data keys to fill, and whether the template is ready to send.

Takes no parameters.

send_from_template

Send from a template

Creates a document from a template: one person per role, values for its data keys. With send=true PenlyDoc immediately e-mails the people with delivery EMAIL; confirm the people and values with the user first. With send=false it creates a draft the user can review in the console. Use the same externalRef/idempotencyKey to safely retry.

ParametersdatasendrequiredrolesrequiredtitlemessagetemplateIdrequiredexternalRefidempotencyKey

send_document

Send a document

Uploads local files (PDF, or PNG/JPEG photos of pages, joined in order) and creates a document for signature. Signature boxes come from {{sig:1}}-style tags in the PDF or from the fields argument (points, top-left origin). With send=true PenlyDoc e-mails the people right away; confirm with the user first. Without tags or fields, use send=false and let the user place the boxes in the console (the result has a link).

ParametersdatasendrequiredfilesrequiredtitlerequiredfieldsmessagerecipientsrequiredexternalRefsigningOrderexpiresInDays

list_documents

List documents

Lists documents sent for signature, newest first, with who has signed. Filter by status or by your externalRef.

ParameterslimitstatusexternalRef

get_document

Document status

Full status of one document: each person, whether they opened, signed or declined (with the reason), and when.

Parametersidrequired

get_history

Document history

The hash-chained history of a document: every step with time, who and IP address, and whether the chain is intact.

Parametersidrequired

send_draft

Send a draft

Sends a DRAFT document: PenlyDoc e-mails the first people to sign. Confirm with the user first.

Parametersidrequired

send_reminder

Remind

E-mails a reminder now to everyone whose turn it is on this document. Confirm with the user first.

Parametersidrequired

cancel_document

Cancel a document

Cancels (voids) a document that is still being signed. Signing links stop working and the people still to act are told by e-mail. This cannot be undone; confirm with the user first.

Parametersidrequiredreasonrequired

download_signed_pdf

Download the signed PDF

Saves the sealed, signed PDF (with the certificate of completion as last page) of a COMPLETED document to a local file.

ParametersidrequiredsaveTorequired

verify_pdf

Check a signed PDF

Checks a local signed PDF: is the seal intact, when was it sealed, who signed. Works for any PDF; nothing is stored. No API key needed.

Parametersfilerequired

Version history

1
  1. v0.1.1LatestOct 25, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts