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.

EnvironmentServer URLUse it for
Productionhttps://mcp.penneo.com/mcpReal case files and real signers
Sandboxhttps://mcp-sandbox.penneo.com/mcpTests 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.

ToolWhat it doesAccess
penneo_upload_documentsOpens an upload panel (or a browser link) where you upload PDF or ZIP documentsWrites
penneo_check_upload_statusWaits for the upload and returns a file_id and suggested_title for each fileRead
penneo_create_upload_urlReturns a single-use upload URL, for clients that can send the file bytes themselvesWrites
penneo_remove_uploaded_filesDeletes uploaded files that have not been used in a case file yet, so they cannot be sentWrites
penneo_upload_panel_doneRecords that you finished the upload panel. The panel calls this. The assistant must not.Internal
penneo_upload_panel_stateTells the panel whether the assistant has collected the upload. The assistant must not call it.Internal
penneo_upload_panel_removeRemoves one file from the upload panel before the assistant collects the upload. The panel calls this.Internal
penneo_get_casefile_defaultsReturns the defaults for a new case file: folder, expiry, language, reminders, and that there are no CC recipientsRead
penneo_create_casefileCreates one case file and sends it for signingWrites
penneo_create_casefilesCreates up to 500 separate case files with the same document(s), each with its own title and signersWrites
penneo_check_job_statusReports if case file creation jobs are completed, pending or failed, and returns the case file ID and signing linksRead
penneo_search_casefilesFinds case files by title, status, reference, folder, owner, creation date, completion date or last updateRead
penneo_get_casefileReturns one case file: status, each signer and their signing status, and the documentsRead
penneo_fetch_casefile_documentsReturns a short-lived, single-use download link for each document (the signed version when one exists)Read
penneo_update_recipientChanges a signer's name, email, delivery channel, or e-Boks identifier on a new or pending case fileWrites
penneo_list_foldersLists the folders you can file case files intoRead
penneo_create_folderCreates a folder, or returns the existing folder with the same name under the same parentWrites
penneo_file_casefile_in_folderMoves an existing case file into a folderWrites
penneo_auth_statusShows if you are signed in, and with which accountRead
penneo_logoutSigns you out of Penneo for this sessionWrites
penneo_send_feedbackSends your rating and feedback to the Penneo teamWrites

Limits and known constraints

AreaLimit or behavior
File typesPDF and ZIP. ZIP is a paid feature. Contact Penneo Sales to get started.
File size100 MiB per file.
Staged uploadsAt 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 URLSingle-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 sendAt 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 filesUse penneo_create_casefiles. Do not call penneo_create_casefile again with the same file_id: the first case file consumes it.
Job status checksUp 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 linksSingle-use, and they expire after 5 minutes. At most 20 unused links, and 200 MiB of unused copies, at a time.
Search resultsAt most 100 per page. The default page size is 20.
FoldersAt 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 callsAt most 60 Penneo tool calls per minute per user. At most 3 calls may wait for an upload at the same time.
Delivery channelsemail (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).
DraftsYou 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 changesOnly 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.
FeedbackRating 1 to 5, message up to 4,000 characters, at most 5 reports per user per day.
Tool limitationThe 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

ErrorWhat to do
AUTH_REQUIREDYou are not signed in. Reconnect the Penneo connector in your MCP client.
AUTH_ERRORThe session failed. Reconnect the Penneo connector.
AUTH_STATUS_UNAVAILABLEThe status check failed. Try again after a short time. Do not reconnect.
RATE_LIMITEDToo many Penneo tool calls. Wait the number of seconds in retry_after_seconds, then try again.
UPSTREAM_RATE_LIMITEDPenneo 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_UNAVAILABLEPenneo did not answer (HTTP 503). Try again after a short time.
TOO_MANY_WAITINGToo many calls are already waiting for an upload. Let one finish before starting another.
CREATE_OUTCOME_UNKNOWNDo 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_INCOMPLETENot 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_UNAVAILABLENone of the jobs could be checked. If retry_after_seconds is set, wait, then check again. Do not send them again.
NOT_FOUNDThe 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_ERRORThe input was rejected. Fix it from the message. Do not invent ids.
UPLOAD_NOT_FOUNDThat upload_id is unknown. Call penneo_upload_documents again.
UPLOAD_EXPIREDThat 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_EXCEEDEDToo many staged files, or too much staged data. Remove unused uploads, or wait until they expire, then upload again.
FILES_IN_USEAnother 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_UNAVAILABLEThe uploaded files cannot be used for a case file right now. Nothing was sent. Try again in a few minutes.
REMOVAL_UNAVAILABLEThe uploaded files could not be removed. Try again. If a file is marked unknown, call penneo_remove_uploaded_files again for it.
ZIP_NOT_ENABLEDZIP signing is not enabled on this account. Do not retry the ZIP. Contact Penneo Sales.
DOWNLOAD_QUOTA_EXCEEDEDToo 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_FAILEDA document could not be fetched. Try that document again.
API_ERRORPenneo 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_LIMITEDYou have sent the maximum feedback for today (5). Do not retry until tomorrow.
FEEDBACK_NOT_DELIVEREDThe 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_files deletes 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.