Penneo MCP server
Overview
The Penneo MCP server (Beta) lets AI assistants, such as Claude, work with Penneo Sign for you. You tell the assistant what you want in plain language, and it uses the Penneo tools to do the work.
With the MCP server, an assistant can:
- Upload documents and send them for signing.
- Find case files and check who has signed and who has not.
- Download signed documents.
- Create folders and archive case files in them.
The MCP server uses the Model Context Protocol, an open standard. It works with any MCP client that supports remote servers with OAuth. It supports Penneo Sign only. It does not support Penneo Collect or Penneo Verify.
Learn more about Penneo MCP Server use cases and how to connect.
Getting started
Add the MCP server to your AI assistant as a remote (custom) connector, and sign in with your Penneo account.
| Environment | Server URL | Use it for |
|---|---|---|
| Production | https://mcp.penneo.com/mcp | Real case files and real signers |
| Sandbox | https://mcp-sandbox.penneo.com/mcp | Tests with a Penneo sandbox account |
Authentication and permissions
- You sign in with your own Penneo user. The assistant can only see and do what your Penneo user can see and do.
- You do not need an API key.
Tools reference
The MCP server has 21 tools. You do not call them yourself: the assistant selects them from your request. Tools that change data are marked Writes. Three tools are Internal: the upload panel calls them, and the assistant is told not to.
| Tool | What it does | Access |
|---|---|---|
penneo_upload_documents | Opens an upload panel (or a browser link) where you upload PDF or ZIP documents | Writes |
penneo_check_upload_status | Waits for the upload and returns a file_id and suggested_title for each file | Read |
penneo_create_upload_url | Returns a single-use upload URL, for clients that can send the file bytes themselves | Writes |
penneo_remove_uploaded_files | Deletes uploaded files that have not been used in a case file yet, so they cannot be sent | Writes |
penneo_upload_panel_done | Records that you finished the upload panel. The panel calls this. The assistant must not. | Internal |
penneo_upload_panel_state | Tells the panel whether the assistant has collected the upload. The assistant must not call it. | Internal |
penneo_upload_panel_remove | Removes one file from the upload panel before the assistant collects the upload. The panel calls this. | Internal |
penneo_get_casefile_defaults | Returns the defaults for a new case file: folder, expiry, language, reminders, and that there are no CC recipients | Read |
penneo_create_casefile | Creates one case file and sends it for signing | Writes |
penneo_create_casefiles | Creates up to 500 separate case files with the same document(s), each with its own title and signers | Writes |
penneo_check_job_status | Reports if case file creation jobs are completed, pending or failed, and returns the case file ID and signing links | Read |
penneo_search_casefiles | Finds case files by title, status, reference, folder, owner, creation date, completion date or last update | Read |
penneo_get_casefile | Returns one case file: status, each signer and their signing status, and the documents | Read |
penneo_fetch_casefile_documents | Returns a short-lived, single-use download link for each document (the signed version when one exists) | Read |
penneo_update_recipient | Changes a signer's name, email, delivery channel, or e-Boks identifier on a new or pending case file | Writes |
penneo_list_folders | Lists the folders you can file case files into | Read |
penneo_create_folder | Creates a folder, or returns the existing folder with the same name under the same parent | Writes |
penneo_file_casefile_in_folder | Moves an existing case file into a folder | Writes |
penneo_auth_status | Shows if you are signed in, and with which account | Read |
penneo_logout | Signs you out of Penneo for this session | Writes |
penneo_send_feedback | Sends your rating and feedback to the Penneo team | Writes |
Limits and known constraints
| Area | Limit or behavior |
|---|---|
| File types | PDF and ZIP. ZIP is a paid feature. Contact Penneo Sales to get started. |
| File size | 100 MiB per file. |
| Staged uploads | At most 20 files, and 200 MiB in total, waiting to be sent. A file that is not used within 60 minutes of upload expires and must be uploaded again. |
| Upload URL | Single-use. The URL itself expires after 5 minutes. After a successful upload, use file_id directly. Do not call penneo_check_upload_status for that file. |
| Mass send | At most 500 case files per call, and 500 per minute per user. No parallel calls. One invalid case file means none in that call is created. |
| Same documents, many case files | Use penneo_create_casefiles. Do not call penneo_create_casefile again with the same file_id: the first case file consumes it. |
| Job status checks | Up to 500 jobs in one call. Each job can be checked 20 times per minute. Jobs older than 90 days return NOT_FOUND. A batch can stay pending for several minutes. After about 15 minutes, stop checking and treat the outcome as unknown for now. Do not send those case files again. |
| Download links | Single-use, and they expire after 5 minutes. At most 20 unused links, and 200 MiB of unused copies, at a time. |
| Search results | At most 100 per page. The default page size is 20. |
| Folders | At most 100 per page. The default page size is 50. A search by name reads at most 2,000 folders. A miss after that is not proof that the folder is absent. |
| Tool calls | At most 60 Penneo tool calls per minute per user. At most 3 calls may wait for an upload at the same time. |
| Delivery channels | email (default) and eboks. e-Boks is a paid feature. Contact Penneo Sales to get started. eboks requires exactly one of CPR (10 digits) or CVR (8 digits, optional :suffix). |
| Drafts | You can create a draft (activate_immediately: false). No tool can send that draft later, or change its documents or title. penneo_update_recipient can still change a signer while the case file is new. |
| Signer changes | Only on case files with status new or pending. On a pending case file, changing the email or the delivery channel sends the signing request again. Changing only the name does not. |
| Signing flows (case file types) | Signers can sign in order (sign_order) or in parallel. The pre-built signing flows from the web application are not supported. |
| Feedback | Rating 1 to 5, message up to 4,000 characters, at most 5 reports per user per day. |
| Tool limitation | The MCP offers a set of tools that do not cover every action in the Penneo API. There is no tool to delete a case file. Use penneo_send_feedback if you are missing a tool. |
Errors
| Error | What to do |
|---|---|
AUTH_REQUIRED | You are not signed in. Reconnect the Penneo connector in your MCP client. |
AUTH_ERROR | The session failed. Reconnect the Penneo connector. |
AUTH_STATUS_UNAVAILABLE | The status check failed. Try again after a short time. Do not reconnect. |
RATE_LIMITED | Too many Penneo tool calls. Wait the number of seconds in retry_after_seconds, then try again. |
UPSTREAM_RATE_LIMITED | Penneo limited the request. Wait retry_after_seconds, then try again. A job with this code is still unknown: check it again, and do not send it again. |
UPSTREAM_UNAVAILABLE | Penneo did not answer (HTTP 503). Try again after a short time. |
TOO_MANY_WAITING | Too many calls are already waiting for an upload. Let one finish before starting another. |
CREATE_OUTCOME_UNKNOWN | Do not send again. Search for the case file by title first. There is no job to check until creation is confirmed. Retry the same file_ids only if no matching case file appears. |
BATCH_INCOMPLETE | Not every case file in the batch was queued. Follow next_step. Do not resend a case file marked unknown before searching for it. |
JOB_STATUS_UNAVAILABLE | None of the jobs could be checked. If retry_after_seconds is set, wait, then check again. Do not send them again. |
NOT_FOUND | The case file, document, job, or uploaded file was not found. For a job, the job_uuid and payload_hash pair is wrong, or the job is older than 14 days. Do not treat that as "not created". |
VALIDATION_ERROR | The input was rejected. Fix it from the message. Do not invent ids. |
UPLOAD_NOT_FOUND | That upload_id is unknown. Call penneo_upload_documents again. |
UPLOAD_EXPIRED | That file_id was already used, or it expired because it was not used within 60 minutes. Do not retry it. Upload the file again. |
UPLOAD_QUOTA_EXCEEDED | Too many staged files, or too much staged data. Remove unused uploads, or wait until they expire, then upload again. |
FILES_IN_USE | Another call is using these files (a send or a removal). Nothing was sent. Wait for that call to finish, then send again. Do not run those calls in parallel. |
FILES_UNAVAILABLE | The uploaded files cannot be used for a case file right now. Nothing was sent. Try again in a few minutes. |
REMOVAL_UNAVAILABLE | The uploaded files could not be removed. Try again. If a file is marked unknown, call penneo_remove_uploaded_files again for it. |
ZIP_NOT_ENABLED | ZIP signing is not enabled on this account. Do not retry the ZIP. Contact Penneo Sales. |
DOWNLOAD_QUOTA_EXCEEDED | Too many unused download links, or they hold too much data. Use the links you already have, then call again with document_ids set to skipped_document_ids. |
DOWNLOAD_FAILED | A document could not be fetched. Try that document again. |
API_ERROR | Penneo rejected the request. Use the error message. Do not send a rejected case file again without asking. e-Boks that is not enabled on the account comes back as this error. |
FEEDBACK_RATE_LIMITED | You have sent the maximum feedback for today (5). Do not retry until tomorrow. |
FEEDBACK_NOT_DELIVERED | The feedback was not delivered. Try again later. Do not say it was sent. |
Security and data handling
- Your permissions apply. The assistant acts as your Penneo user. It cannot see or change case files that your user cannot access.
- Approval before sending. The tools tell the assistant to show you the full case file and wait for your approval before it sends.
- No case file delete. No tool deletes a case file.
penneo_remove_uploaded_filesdeletes only files that were uploaded and have not been sent yet. - Exact documents. Only files that you upload to Penneo are sent for signing. The assistant cannot rebuild a document from the chat and send it.
- Unattended runs. In a scheduled task with automatic approval, the assistant acts without asking you. Write the prompt so that it only does what you want, for example "Only read from Penneo; never change case files or contact signers."
- Feedback data. When you send feedback with
penneo_send_feedback, Penneo gets your rating and message, your Penneo user, customer and email, the name of your MCP client, and which Penneo tools you used recently and how those calls went. It does not get the content of those calls.
An assistant processes the data that it reads from Penneo, for example names, emails and documents, in the AI provider's systems. Make sure that this agrees with your data processing agreements and policies.
Updated about 9 hours ago
