MCP Server

SELISE Signature

com.selisesignature/signature
Business & Operations Legal & Compliance Public & reachable MCP 2025-11-25

What this MCP does

Prepares, sends, and tracks PDF documents for electronic signature, including participant fields and signature placements.

get_signature_document_status
Get signature document status
Read document status events once using an actual documentId UUID. Use to check progress after preparation/sending, especially pending or UNKNOWN_OUTCOME. Does not upload, prepare, send, sign, or continuously poll. Returns {statuses: [...]} containing only distinct observed values: preparation_success (preparation succeeded), preparation_failed (preparation failed), sending_success (dispatch succeeded, not completed signing), sending_failed (dispatch failed), completed (document completion recorded). These are historical observations, not one current state. Success and failure can both appear; array order does not establish chronology. An empty list means no recognized events were returned: it does not prove existence, failure, completion, or that resubmission is safe. Other events, including cancellation, expiration, and individual-signer progress, are omitted; this is not a complete lifecycle report. Returns no timestamps, signer details, download URLs, or signing links. Request/authentication failures return an error, not an empty status list. If polling is needed, space checks by at least 3 seconds and avoid concurrent polling of the same document. A status check does not authorize retrying a state-changing tool. Use only the declared fields. Ask for missing facts instead of inventing values. Service credentials are configured on the server and must not be included in tool arguments.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['documentId'], 'properties': {'documentId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Document UUID returned by a previous preparation/submission or supplied from a trusted source. Use the exact documentId, not fileId, trackingId, or operationId. Do not generate a placeholder UUID; format validity does not prove the document exists.'}}, 'description': 'Read observed status events once for a document UUID; does not upload, prepare, send, or poll repeatedly.'}
Output schema
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['statuses'], 'properties': {'statuses': {'type': 'array', 'items': {'enum': ['preparation_success', 'preparation_failed', 'sending_success', 'sending_failed', 'completed'], 'type': 'string', 'description': 'preparation_success/preparation_failed: preparation outcome; sending_success/sending_failed: dispatch outcome; completed: document completion recorded. sending_success does not mean completed signing.'}, 'description': 'Distinct observed statuses, not a single current state or a chronological list. Success and failure may coexist. Empty means no recognized events were returned, not proof of existence, failure, completion, or safety to retry. Other lifecycle events are omitted.'}}, 'description': 'One status lookup. Only statuses are returned; no signer details, links, raw events, or timestamps.', 'additionalProperties': False}, {'type': 'object', 'required': ['code', 'message', 'referenceId'], 'properties': {'code': {'enum': ['INVALID_REQUEST', 'REQUEST_FAILED', 'UNKNOWN_OUTCOME'], 'type': 'string', 'description': 'INVALID_REQUEST: input validation failed. REQUEST_FAILED: operation failed; use referenceId for diagnosis. UNKNOWN_OUTCOME: an action may have succeeded despite the error; inspect document status before considering a retry.'}, 'fileId': {'type': 'string', 'minLength': 1, 'description': 'Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.'}, 'message': {'type': 'string', 'description': 'Safe error explanation or recovery guidance; no private upstream diagnostics.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Document identifier. Reuse as documentId in subsequent calls; an ID in an error response may be provisional and does not prove the document was created or the command accepted.'}, 'trackingId': {'type': 'string', 'minLength': 1, 'description': 'Backend command correlation identifier, when available. Not a document ID or proof of completion.'}, 'operationId': {'type': 'string', 'minLength': 1, 'description': 'Identifier for tracing this tool operation. Not a document ID or proof of completion.'}, 'referenceId': {'type': 'string', 'minLength': 1, 'description': 'Sentry error reference for support and diagnostics. Not a documentId or trackingId.'}}, 'description': "Error payload returned with the MCP result's isError flag set to true. Known IDs are optional and may be provisional; do not assume an error makes resubmission safe.", 'additionalProperties': False}], '$schema': 'http://json-schema.org/draft-07/schema#', 'description': "Structured result: either the tool's success/progress payload or an error payload with code, message, and referenceId. Errors also set isError on the enclosing MCP result."}
prepare_and_send_free_signature_document
Prepare and send free signature document
Prepare a NEW free-signature document from one PDF, add placements, and send it in one workflow. Accept Base64, a public HTTPS download URL, an existing SELISE storage file ID, a reference from the binary upload endpoint, or a ChatGPT attachment through chatgptFile. Uploads new bytes or reuses the existing storage file. Use only when sending is requested and all participant details and actual PDF placements are known. For an already prepared document, use send_prepared_signature_document instead. This tool does not itself sign the PDF. Provide exactly ONE file source: documentBase64 (raw standard Base64), documentUrl (public HTTPS PDF download URL, including a temporary signed URL), storageFileId (an existing SELISE storage PDF accessible to this server), uploadId (the exact short-lived reference returned by this server's HTTP POST /uploads), or chatgptFile (the host-provided file object for a PDF attached in ChatGPT). In ChatGPT, use chatgptFile via the declared file-input integration for a user attachment; its download_url and file_id are supplied by the host. Do not combine sources, invent file content or IDs, or pass local paths to the server. A bare ChatGPT attachment ID is not a documentUrl or storageFileId. Other clients can continue using the four generic sources. For binary upload, POST multipart/form-data with one file part named file to /uploads on this server's HTTP deployment, then use the returned uploadId before expiresAt; uploading does not prepare or send a document. Raw application/pdf uploads with a fileName query parameter are also accepted. The uploadId is valid for one hour; keep it private. Source PDFs are validated consistently. documentUrl must return PDF bytes without additional authentication headers; the server does not use browser cookies, login pages, or private-network URLs. It follows at most three public HTTPS redirects. Storage files and upload references are reused without a second upload. Supply fileName ending in .pdf and the normal preparation fields for every method. A file reference is not a documentId and does not mean preparation has completed. Maximum actual PDF size for every source on this server: 26214400 bytes, excluding Base64 encoding or multipart overhead. PDFs must be readable, unencrypted, and have supported page geometry. File-source retrieval and validation happen before preparation. Never fabricate file content. ownerEmail must match one of the signatories' emails. Signatory emails must be unique (case-insensitive). Provide a positive integer signingOrder for every signatory or omit it for all; role defaults to signer. Ask for missing participant details; do not invent people or change their intended roles to satisfy validation. Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role. Set coordinateSystem to page_percent. ALL field types use the same page-relative percentages: (0,0) is the top-left of the visible page, x increases rightward, y increases downward; 100 is the full page width or height, not 1. pageNumber is zero-based (0 is the first page). x/width are percentages of page width; y/height are percentages of page height. Positions must be >= 0, sizes > 0, x + width <= 100 and y + height <= 100. Example: x=10,y=80,width=30,height=10 starts 10% from the left and 80% from the top, covering 30% of page width and 10% of its height. The server reads each PDF page and handles backend units and field-specific conversions. Do not supply pixels, PDF points, or backend coordinates, or guess a placement from an unrelated image. Use the actual visible page and the user's intended field location. Unrepresentable placements, unreadable PDFs, 180-degree rotated placement pages, and text fields on rotated/cropped pages are rejected before sending; provide a flattened PDF if requested by the error. Provide at least one signatureCoordinates entry; optional coordinate arrays default to empty. Every coordinate's signatoryEmail must identify a participant in this document. Every signatory with role signer (including the default role) must have at least one signatureCoordinates entry, and every signature coordinate email must appear in signatories. The reviewer (view-only) and approver (approval without signing) roles do not sign and are not subject to this MCP signer-coverage check; do not invent signature placements for them. Every coordinate array applies to the selected source PDF. If placements are missing, obtain them; use prepare_free_signature_document only when preparation alone is intended. Returns sent when rollout succeeds, or pending when accepted but unconfirmed. sent does not mean completed signing. A failed combined workflow may already have uploaded or prepared a document; inspect its status before choosing a follow-up action. Keep returned documentId, fileId, operationId, and trackingId when present. pending means accepted but completion is unconfirmed: check get_signature_document_status with documentId instead of resubmitting. UNKNOWN_OUTCOME, a timeout, or a lost response may follow a successful submission; do not automatically repeat a preparation or send call. Inspect status when an ID is available; an empty status list does not make a retry safe. INVALID_REQUEST means inputs need correction; REQUEST_FAILED gives a referenceId for diagnosis. If the cause is unclear, ask for clarification or use the referenceId rather than guessing. Repeating a preparation can create another document. Use only the declared fields. Ask for missing facts instead of inventing values. Service credentials are configured on the server and must not be included in tool arguments.
Destructive Open world
Input schema
{'type': 'object', 'oneOf': [{'required': ['documentBase64']}, {'required': ['documentUrl']}, {'required': ['storageFileId']}, {'required': ['uploadId']}, {'required': ['chatgptFile']}], '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['fileName', 'title', 'ownerEmail', 'signatories', 'coordinateSystem', 'signatureCoordinates'], 'properties': {'title': {'type': 'string', 'minLength': 1, 'description': 'Document title; required and nonempty after trimming.'}, 'fileName': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'PDF filename, 1-255 characters, ending in .pdf (case-insensitive). Required for every source. Use a filename, not a path or URL.'}, 'language': {'enum': ['en', 'en-US', 'de', 'de-DE'], 'type': 'string', 'default': 'en-US', 'description': 'Document workflow language. Supported values: en, en-US, de, de-DE. Defaults to en-US; this does not translate the uploaded PDF.'}, 'uploadId': {'type': 'string', 'maxLength': 4096, 'minLength': 1, 'description': "File source option 4: exact signed reference returned by this server's POST /uploads endpoint. Valid for one hour, until its expiresAt; do not alter it or replace it with a storage ID. Omit the other sources. Use only to begin a new preparation; it does not make preparation/send calls idempotent. An accepted/pending document must not be prepared again."}, 'ownerEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "Document owner's valid email, without surrounding whitespace. Must match an email in signatories after lowercase normalization. Being the owner does not automatically make someone a signer; preserve their intended role."}, 'chatgptFile': {'type': 'object', 'required': ['download_url', 'file_id'], 'properties': {'file_id': {'type': 'string', 'maxLength': 512, 'minLength': 1, 'description': 'Host-provided OpenAI file identifier. Not a SELISE storage file ID or document ID; not used to fetch the file.'}, 'file_name': {'type': 'string', 'maxLength': 1024, 'description': 'Optional host-provided filename metadata. The separate top-level fileName remains required.'}, 'mime_type': {'type': 'string', 'maxLength': 255, 'description': 'Optional host-provided MIME type. Actual downloaded bytes determine whether the file is a valid PDF.'}, 'download_url': {'type': 'string', 'format': 'uri', 'maxLength': 8192, 'description': 'Host-provided temporary HTTPS download URL for the attached PDF. Use the exact URL; never substitute a local path.'}}, 'description': "File source option 5: actual user-attached PDF supplied through ChatGPT's file-input integration. Use the host-provided file object with download_url and file_id. Omit all other file sources; do not copy a /mnt/data path into documentUrl or invent file metadata. Supply the separate fileName and normal contract fields. The server downloads and validates the PDF; expired URLs require a fresh host-provided file reference."}, 'documentUrl': {'type': 'string', 'format': 'uri', 'maxLength': 8192, 'description': 'File source option 2: public HTTPS link that returns the actual PDF, optionally with a short-lived signed query string. No login page, browser cookies, custom authentication headers, local/private address, or data/file URL. Omit all other file sources. The server downloads and size-checks the file. For a ChatGPT attachment, use chatgptFile through the host file-input integration.'}, 'signatories': {'type': 'array', 'items': {'type': 'object', 'required': ['email', 'firstName', 'lastName'], 'properties': {'role': {'enum': ['signer', 'reviewer', 'approver'], 'type': 'string', 'default': 'signer', 'description': 'Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role. Defaults to signer when omitted; set reviewer or approver explicitly for participants who must not sign. In the combined tool, every signer needs a signature coordinate; the owner need not have role signer.'}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "Participant's valid email address, without surrounding whitespace. Normalized to lowercase; must be unique within signatories."}, 'lastName': {'type': 'string', 'minLength': 1, 'description': "Participant's last name; required and nonempty after trimming. Obtain it from the user or a trusted source."}, 'firstName': {'type': 'string', 'minLength': 1, 'description': "Participant's first name; required and nonempty after trimming. Obtain it from the user or a trusted source."}, 'signingOrder': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Optional positive integer signing sequence. Supply for every participant or omit for every participant. Do not infer sequence from array position; preserve the requested order.', 'exclusiveMinimum': 0}}, 'description': 'One document participant, with a unique email, real first and last names, and the intended role.'}, 'minItems': 1, 'description': "Complete participant list, including the owner; at least one entry. ownerEmail must match one of the signatories' emails. Signatory emails must be unique (case-insensitive). Provide a positive integer signingOrder for every signatory or omit it for all; role defaults to signer. Ask for missing participant details; do not invent people or change their intended roles to satisfy validation. Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role."}, 'storageFileId': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]+$', 'maxLength': 512, 'minLength': 1, 'description': "File source option 3: exact existing SELISE storage file ID accessible using this server's configured credentials. It is not a documentId, client-specific attachment ID, or uploadId. Use an original PDF intended for a NEW document; for an already prepared document use send_prepared_signature_document. Omit all other file sources. The PDF is validated and reused without uploading again."}, 'documentBase64': {'type': 'string', 'minLength': 1, 'description': 'File source option 1: actual PDF bytes encoded as raw standard Base64. Whitespace is ignored; no data URL, placeholder, local path, or fabricated content. Omit all other file sources when using this option.'}, 'coordinateSystem': {'type': 'string', 'const': 'page_percent', 'description': 'Required: page_percent. All positions and sizes use 0-100 percentages of the visible PDF page, from its top-left. This explicit marker prevents old pixel/backend coordinates from being misinterpreted. Do not relabel old values; calculate their page percentages first.'}, 'receiveRolloutEmail': {'type': 'boolean', 'default': True, 'description': 'Whether the document owner should receive the rollout email when the document is sent. Defaults to true. Setting this during preparation does not send the document.'}, 'signatureCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Optional SELISE field-type identifier; nonempty when supplied. Preserve a known value for this coordinate kind, or omit it. This is not a MIME type; no type catalog is provided by this tool.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}, 'signatureImageFileId': {'type': 'string', 'minLength': 1, 'description': 'Optional existing signature-image storage ID; nonempty when supplied. Never supply image bytes or a URL here. Omit unless required by a verified workflow; this field does not itself sign the document.'}}, 'description': "A signature placement for a document participant. Set coordinateSystem to page_percent. ALL field types use the same page-relative percentages: (0,0) is the top-left of the visible page, x increases rightward, y increases downward; 100 is the full page width or height, not 1. pageNumber is zero-based (0 is the first page). x/width are percentages of page width; y/height are percentages of page height. Positions must be >= 0, sizes > 0, x + width <= 100 and y + height <= 100. Example: x=10,y=80,width=30,height=10 starts 10% from the left and 80% from the top, covering 30% of page width and 10% of its height. The server reads each PDF page and handles backend units and field-specific conversions. Do not supply pixels, PDF points, or backend coordinates, or guess a placement from an unrelated image. Use the actual visible page and the user's intended field location. Unrepresentable placements, unreadable PDFs, 180-degree rotated placement pages, and text fields on rotated/cropped pages are rejected before sending; provide a flattened PDF if requested by the error. Provide at least one signatureCoordinates entry; optional coordinate arrays default to empty. Every coordinate's signatoryEmail must identify a participant in this document."}, 'minItems': 1, 'description': "Required nonempty signature-placement list for this PDF. In the combined tool, every signer needs at least one entry and every entry must refer to a supplied participant. For send-only, use the prepared document's participants and placements."}, 'textFieldCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height', 'propertyName'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Optional SELISE field-type identifier; nonempty when supplied. Preserve a known value for this coordinate kind, or omit it. This is not a MIME type; no type catalog is provided by this tool.'}, 'value': {'type': 'string', 'default': '', 'description': 'Text-field content in the format expected by the selected SELISE field type. Defaults to an empty string; do not invent content.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'fontDetails': {'type': 'object', 'properties': {'fontName': {'type': 'string', 'default': 'Arial', 'minLength': 1, 'description': 'Nonempty font name supported by the document workflow. Defaults to Arial.'}, 'fontSize': {'type': 'number', 'default': 12, 'description': 'Positive font size passed to SELISE unchanged. Defaults to 12.', 'exclusiveMinimum': 0}}, 'description': 'Optional font settings. When this object is supplied, omitted fontName/fontSize default to Arial/12.'}, 'propertyName': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty SELISE text-field property identifier. Use a known property for the intended field; this is not its display label.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}}, 'description': 'Optional text placement in page percentages assigned to a participant; requires propertyName and all base coordinate fields. Text wrapping and font rendering are controlled by the signing backend; the rectangle does not guarantee clipping.'}, 'description': 'Optional text placements for this PDF; omit or use [] when none are requested. Each entry requires propertyName and participant/page/position/size fields.'}, 'simpleImageCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height', 'type'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty SELISE simple-image type identifier. Use a verified backend value with its exact casing; this is not image data, a URL, or a MIME type.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}}, 'description': 'Optional simple-image placement in page percentages assigned to a participant. Requires type and all base coordinate fields; does not upload an image.'}, 'description': 'Optional simple-image placements for this PDF; defaults to []. Each entry requires a verified type and participant/page/position/size fields.'}, 'stampPostInfoCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height', 'entityName', 'propertyName'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Optional SELISE field-type identifier; nonempty when supplied. Preserve a known value for this coordinate kind, or omit it. This is not a MIME type; no type catalog is provided by this tool.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'entityName': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty SELISE entity identifier used to resolve this post-signing information field. Use a verified entity/property pair; do not invent identifiers.'}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'fontDetails': {'type': 'object', 'properties': {'fontName': {'type': 'string', 'default': 'Arial', 'minLength': 1, 'description': 'Nonempty font name supported by the document workflow. Defaults to Arial.'}, 'fontSize': {'type': 'number', 'default': 12, 'description': 'Positive font size passed to SELISE unchanged. Defaults to 12.', 'exclusiveMinimum': 0}}, 'description': 'Optional font settings. When this object is supplied, omitted fontName/fontSize default to Arial/12.'}, 'propertyName': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty property identifier belonging to entityName for this post-signing information field.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}}, 'description': 'Optional post-signing information placement in page percentages; requires entityName, propertyName, and all base coordinate fields.'}, 'description': 'Optional post-signing information placements for this PDF; defaults to []. Each entry requires verified entityName/propertyName and participant/page/position/size fields.'}}, 'description': "Prepare and send one new PDF. Provide exactly ONE file source: documentBase64 (raw standard Base64), documentUrl (public HTTPS PDF download URL, including a temporary signed URL), storageFileId (an existing SELISE storage PDF accessible to this server), uploadId (the exact short-lived reference returned by this server's HTTP POST /uploads), or chatgptFile (the host-provided file object for a PDF attached in ChatGPT). In ChatGPT, use chatgptFile via the declared file-input integration for a user attachment; its download_url and file_id are supplied by the host. Do not combine sources, invent file content or IDs, or pass local paths to the server. A bare ChatGPT attachment ID is not a documentUrl or storageFileId. Other clients can continue using the four generic sources. For binary upload, POST multipart/form-data with one file part named file to /uploads on this server's HTTP deployment, then use the returned uploadId before expiresAt; uploading does not prepare or send a document. Raw application/pdf uploads with a fileName query parameter are also accepted. The uploadId is valid for one hour; keep it private. Source PDFs are validated consistently. documentUrl must return PDF bytes without additional authentication headers; the server does not use browser cookies, login pages, or private-network URLs. It follows at most three public HTTPS redirects. Storage files and upload references are reused without a second upload. Supply fileName ending in .pdf and the normal preparation fields for every method. A file reference is not a documentId and does not mean preparation has completed. ownerEmail must match one of the signatories' emails. Signatory emails must be unique (case-insensitive). Provide a positive integer signingOrder for every signatory or omit it for all; role defaults to signer. Ask for missing participant details; do not invent people or change their intended roles to satisfy validation. Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role. Set coordinateSystem to page_percent. ALL field types use the same page-relative percentages: (0,0) is the top-left of the visible page, x increases rightward, y increases downward; 100 is the full page width or height, not 1. pageNumber is zero-based (0 is the first page). x/width are percentages of page width; y/height are percentages of page height. Positions must be >= 0, sizes > 0, x + width <= 100 and y + height <= 100. Example: x=10,y=80,width=30,height=10 starts 10% from the left and 80% from the top, covering 30% of page width and 10% of its height. The server reads each PDF page and handles backend units and field-specific conversions. Do not supply pixels, PDF points, or backend coordinates, or guess a placement from an unrelated image. Use the actual visible page and the user's intended field location. Unrepresentable placements, unreadable PDFs, 180-degree rotated placement pages, and text fields on rotated/cropped pages are rejected before sending; provide a flattened PDF if requested by the error. Provide at least one signatureCoordinates entry; optional coordinate arrays default to empty. Every coordinate's signatoryEmail must identify a participant in this document. Every signatory with role signer (including the default role) must have at least one signatureCoordinates entry, and every signature coordinate email must appear in signatories. The reviewer (view-only) and approver (approval without signing) roles do not sign and are not subject to this MCP signer-coverage check; do not invent signature placements for them."}
Output schema
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['status', 'documentId'], 'properties': {'fileId': {'type': 'string', 'minLength': 1, 'description': 'Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.'}, 'status': {'enum': ['sent', 'pending'], 'type': 'string', 'description': 'sent: combined preparation and sending reached confirmed sending. pending: combined command accepted but completion unconfirmed; do not create another document or resend.'}, 'message': {'type': 'string', 'description': 'Optional human-readable progress or follow-up guidance. For pending results, check status rather than submitting again.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Document identifier. Reuse as documentId in subsequent calls; an ID in an error response may be provisional and does not prove the document was created or the command accepted.'}, 'trackingId': {'type': 'string', 'minLength': 1, 'description': 'Backend command correlation identifier, when available. Not a document ID or proof of completion.'}, 'operationId': {'type': 'string', 'minLength': 1, 'description': 'Identifier for tracing this tool operation. Not a document ID or proof of completion.'}}, 'description': 'Combined preparation/send result. sent is not completed signing; use get_signature_document_status for later progress.', 'additionalProperties': False}, {'type': 'object', 'required': ['code', 'message', 'referenceId'], 'properties': {'code': {'enum': ['INVALID_REQUEST', 'REQUEST_FAILED', 'UNKNOWN_OUTCOME'], 'type': 'string', 'description': 'INVALID_REQUEST: input validation failed. REQUEST_FAILED: operation failed; use referenceId for diagnosis. UNKNOWN_OUTCOME: an action may have succeeded despite the error; inspect document status before considering a retry.'}, 'fileId': {'type': 'string', 'minLength': 1, 'description': 'Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.'}, 'message': {'type': 'string', 'description': 'Safe error explanation or recovery guidance; no private upstream diagnostics.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Document identifier. Reuse as documentId in subsequent calls; an ID in an error response may be provisional and does not prove the document was created or the command accepted.'}, 'trackingId': {'type': 'string', 'minLength': 1, 'description': 'Backend command correlation identifier, when available. Not a document ID or proof of completion.'}, 'operationId': {'type': 'string', 'minLength': 1, 'description': 'Identifier for tracing this tool operation. Not a document ID or proof of completion.'}, 'referenceId': {'type': 'string', 'minLength': 1, 'description': 'Sentry error reference for support and diagnostics. Not a documentId or trackingId.'}}, 'description': "Error payload returned with the MCP result's isError flag set to true. Known IDs are optional and may be provisional; do not assume an error makes resubmission safe.", 'additionalProperties': False}], '$schema': 'http://json-schema.org/draft-07/schema#', 'description': "Structured result: either the tool's success/progress payload or an error payload with code, message, and referenceId. Errors also set isError on the enclosing MCP result."}
prepare_free_signature_document
Prepare free signature document
Prepare a NEW free-signature document from one PDF without sending it. Accept Base64, a public HTTPS download URL, an existing SELISE storage file ID, a reference from the binary upload endpoint, or a ChatGPT attachment through chatgptFile. New bytes are uploaded; existing storage/upload references are reused. Use when preparation is requested or placements are not ready; do not call again for an existing or pending document. Provide exactly ONE file source: documentBase64 (raw standard Base64), documentUrl (public HTTPS PDF download URL, including a temporary signed URL), storageFileId (an existing SELISE storage PDF accessible to this server), uploadId (the exact short-lived reference returned by this server's HTTP POST /uploads), or chatgptFile (the host-provided file object for a PDF attached in ChatGPT). In ChatGPT, use chatgptFile via the declared file-input integration for a user attachment; its download_url and file_id are supplied by the host. Do not combine sources, invent file content or IDs, or pass local paths to the server. A bare ChatGPT attachment ID is not a documentUrl or storageFileId. Other clients can continue using the four generic sources. For binary upload, POST multipart/form-data with one file part named file to /uploads on this server's HTTP deployment, then use the returned uploadId before expiresAt; uploading does not prepare or send a document. Raw application/pdf uploads with a fileName query parameter are also accepted. The uploadId is valid for one hour; keep it private. Source PDFs are validated consistently. documentUrl must return PDF bytes without additional authentication headers; the server does not use browser cookies, login pages, or private-network URLs. It follows at most three public HTTPS redirects. Storage files and upload references are reused without a second upload. Supply fileName ending in .pdf and the normal preparation fields for every method. A file reference is not a documentId and does not mean preparation has completed. Maximum actual PDF size for every source on this server: 26214400 bytes, excluding Base64 encoding or multipart overhead. PDFs must be readable, unencrypted, and have supported page geometry. File-source retrieval and validation happen before preparation. Never fabricate file content. ownerEmail must match one of the signatories' emails. Signatory emails must be unique (case-insensitive). Provide a positive integer signingOrder for every signatory or omit it for all; role defaults to signer. Ask for missing participant details; do not invent people or change their intended roles to satisfy validation. Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role. No coordinates are needed for this tool. Returns prepared only after preparation is confirmed, or pending after acceptance without confirmation. prepared does not mean sent or signed. Once prepared (or preparation_success is observed), use send_prepared_signature_document with the returned documentId/fileId and verified placements when sending is requested. Keep returned documentId, fileId, operationId, and trackingId when present. pending means accepted but completion is unconfirmed: check get_signature_document_status with documentId instead of resubmitting. UNKNOWN_OUTCOME, a timeout, or a lost response may follow a successful submission; do not automatically repeat a preparation or send call. Inspect status when an ID is available; an empty status list does not make a retry safe. INVALID_REQUEST means inputs need correction; REQUEST_FAILED gives a referenceId for diagnosis. If the cause is unclear, ask for clarification or use the referenceId rather than guessing. Repeating a preparation can create another document. Use only the declared fields. Ask for missing facts instead of inventing values. Service credentials are configured on the server and must not be included in tool arguments.
Open world
Input schema
{'type': 'object', 'oneOf': [{'required': ['documentBase64']}, {'required': ['documentUrl']}, {'required': ['storageFileId']}, {'required': ['uploadId']}, {'required': ['chatgptFile']}], '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['fileName', 'title', 'ownerEmail', 'signatories'], 'properties': {'title': {'type': 'string', 'minLength': 1, 'description': 'Document title; required and nonempty after trimming.'}, 'fileName': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'PDF filename, 1-255 characters, ending in .pdf (case-insensitive). Required for every source. Use a filename, not a path or URL.'}, 'language': {'enum': ['en', 'en-US', 'de', 'de-DE'], 'type': 'string', 'default': 'en-US', 'description': 'Document workflow language. Supported values: en, en-US, de, de-DE. Defaults to en-US; this does not translate the uploaded PDF.'}, 'uploadId': {'type': 'string', 'maxLength': 4096, 'minLength': 1, 'description': "File source option 4: exact signed reference returned by this server's POST /uploads endpoint. Valid for one hour, until its expiresAt; do not alter it or replace it with a storage ID. Omit the other sources. Use only to begin a new preparation; it does not make preparation/send calls idempotent. An accepted/pending document must not be prepared again."}, 'ownerEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "Document owner's valid email, without surrounding whitespace. Must match an email in signatories after lowercase normalization. Being the owner does not automatically make someone a signer; preserve their intended role."}, 'chatgptFile': {'type': 'object', 'required': ['download_url', 'file_id'], 'properties': {'file_id': {'type': 'string', 'maxLength': 512, 'minLength': 1, 'description': 'Host-provided OpenAI file identifier. Not a SELISE storage file ID or document ID; not used to fetch the file.'}, 'file_name': {'type': 'string', 'maxLength': 1024, 'description': 'Optional host-provided filename metadata. The separate top-level fileName remains required.'}, 'mime_type': {'type': 'string', 'maxLength': 255, 'description': 'Optional host-provided MIME type. Actual downloaded bytes determine whether the file is a valid PDF.'}, 'download_url': {'type': 'string', 'format': 'uri', 'maxLength': 8192, 'description': 'Host-provided temporary HTTPS download URL for the attached PDF. Use the exact URL; never substitute a local path.'}}, 'description': "File source option 5: actual user-attached PDF supplied through ChatGPT's file-input integration. Use the host-provided file object with download_url and file_id. Omit all other file sources; do not copy a /mnt/data path into documentUrl or invent file metadata. Supply the separate fileName and normal contract fields. The server downloads and validates the PDF; expired URLs require a fresh host-provided file reference."}, 'documentUrl': {'type': 'string', 'format': 'uri', 'maxLength': 8192, 'description': 'File source option 2: public HTTPS link that returns the actual PDF, optionally with a short-lived signed query string. No login page, browser cookies, custom authentication headers, local/private address, or data/file URL. Omit all other file sources. The server downloads and size-checks the file. For a ChatGPT attachment, use chatgptFile through the host file-input integration.'}, 'signatories': {'type': 'array', 'items': {'type': 'object', 'required': ['email', 'firstName', 'lastName'], 'properties': {'role': {'enum': ['signer', 'reviewer', 'approver'], 'type': 'string', 'default': 'signer', 'description': 'Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role. Defaults to signer when omitted; set reviewer or approver explicitly for participants who must not sign. In the combined tool, every signer needs a signature coordinate; the owner need not have role signer.'}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "Participant's valid email address, without surrounding whitespace. Normalized to lowercase; must be unique within signatories."}, 'lastName': {'type': 'string', 'minLength': 1, 'description': "Participant's last name; required and nonempty after trimming. Obtain it from the user or a trusted source."}, 'firstName': {'type': 'string', 'minLength': 1, 'description': "Participant's first name; required and nonempty after trimming. Obtain it from the user or a trusted source."}, 'signingOrder': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Optional positive integer signing sequence. Supply for every participant or omit for every participant. Do not infer sequence from array position; preserve the requested order.', 'exclusiveMinimum': 0}}, 'description': 'One document participant, with a unique email, real first and last names, and the intended role.'}, 'minItems': 1, 'description': "Complete participant list, including the owner; at least one entry. ownerEmail must match one of the signatories' emails. Signatory emails must be unique (case-insensitive). Provide a positive integer signingOrder for every signatory or omit it for all; role defaults to signer. Ask for missing participant details; do not invent people or change their intended roles to satisfy validation. Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role."}, 'storageFileId': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]+$', 'maxLength': 512, 'minLength': 1, 'description': "File source option 3: exact existing SELISE storage file ID accessible using this server's configured credentials. It is not a documentId, client-specific attachment ID, or uploadId. Use an original PDF intended for a NEW document; for an already prepared document use send_prepared_signature_document. Omit all other file sources. The PDF is validated and reused without uploading again."}, 'documentBase64': {'type': 'string', 'minLength': 1, 'description': 'File source option 1: actual PDF bytes encoded as raw standard Base64. Whitespace is ignored; no data URL, placeholder, local path, or fabricated content. Omit all other file sources when using this option.'}, 'receiveRolloutEmail': {'type': 'boolean', 'default': True, 'description': 'Whether the document owner should receive the rollout email when the document is sent. Defaults to true. Setting this during preparation does not send the document.'}}, 'description': "Prepare one new PDF document without sending. Provide exactly ONE file source: documentBase64 (raw standard Base64), documentUrl (public HTTPS PDF download URL, including a temporary signed URL), storageFileId (an existing SELISE storage PDF accessible to this server), uploadId (the exact short-lived reference returned by this server's HTTP POST /uploads), or chatgptFile (the host-provided file object for a PDF attached in ChatGPT). In ChatGPT, use chatgptFile via the declared file-input integration for a user attachment; its download_url and file_id are supplied by the host. Do not combine sources, invent file content or IDs, or pass local paths to the server. A bare ChatGPT attachment ID is not a documentUrl or storageFileId. Other clients can continue using the four generic sources. For binary upload, POST multipart/form-data with one file part named file to /uploads on this server's HTTP deployment, then use the returned uploadId before expiresAt; uploading does not prepare or send a document. Raw application/pdf uploads with a fileName query parameter are also accepted. The uploadId is valid for one hour; keep it private. Source PDFs are validated consistently. documentUrl must return PDF bytes without additional authentication headers; the server does not use browser cookies, login pages, or private-network URLs. It follows at most three public HTTPS redirects. Storage files and upload references are reused without a second upload. Supply fileName ending in .pdf and the normal preparation fields for every method. A file reference is not a documentId and does not mean preparation has completed. ownerEmail must match one of the signatories' emails. Signatory emails must be unique (case-insensitive). Provide a positive integer signingOrder for every signatory or omit it for all; role defaults to signer. Ask for missing participant details; do not invent people or change their intended roles to satisfy validation. Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role."}
Output schema
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['status', 'documentId'], 'properties': {'fileId': {'type': 'string', 'minLength': 1, 'description': 'Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.'}, 'status': {'enum': ['prepared', 'pending'], 'type': 'string', 'description': 'prepared: preparation confirmed, document not sent. pending: preparation accepted but completion unconfirmed; use get_signature_document_status without resubmitting.'}, 'message': {'type': 'string', 'description': 'Optional human-readable progress or follow-up guidance. For pending results, check status rather than submitting again.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Document identifier. Reuse as documentId in subsequent calls; an ID in an error response may be provisional and does not prove the document was created or the command accepted.'}, 'trackingId': {'type': 'string', 'minLength': 1, 'description': 'Backend command correlation identifier, when available. Not a document ID or proof of completion.'}, 'operationId': {'type': 'string', 'minLength': 1, 'description': 'Identifier for tracing this tool operation. Not a document ID or proof of completion.'}}, 'description': 'Preparation result. Neither prepared nor pending means the document has been sent or signed.', 'additionalProperties': False}, {'type': 'object', 'required': ['code', 'message', 'referenceId'], 'properties': {'code': {'enum': ['INVALID_REQUEST', 'REQUEST_FAILED', 'UNKNOWN_OUTCOME'], 'type': 'string', 'description': 'INVALID_REQUEST: input validation failed. REQUEST_FAILED: operation failed; use referenceId for diagnosis. UNKNOWN_OUTCOME: an action may have succeeded despite the error; inspect document status before considering a retry.'}, 'fileId': {'type': 'string', 'minLength': 1, 'description': 'Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.'}, 'message': {'type': 'string', 'description': 'Safe error explanation or recovery guidance; no private upstream diagnostics.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Document identifier. Reuse as documentId in subsequent calls; an ID in an error response may be provisional and does not prove the document was created or the command accepted.'}, 'trackingId': {'type': 'string', 'minLength': 1, 'description': 'Backend command correlation identifier, when available. Not a document ID or proof of completion.'}, 'operationId': {'type': 'string', 'minLength': 1, 'description': 'Identifier for tracing this tool operation. Not a document ID or proof of completion.'}, 'referenceId': {'type': 'string', 'minLength': 1, 'description': 'Sentry error reference for support and diagnostics. Not a documentId or trackingId.'}}, 'description': "Error payload returned with the MCP result's isError flag set to true. Known IDs are optional and may be provisional; do not assume an error makes resubmission safe.", 'additionalProperties': False}], '$schema': 'http://json-schema.org/draft-07/schema#', 'description': "Structured result: either the tool's success/progress payload or an error payload with code, message, and referenceId. Errors also set isError on the enclosing MCP result."}
send_prepared_signature_document
Send prepared signature document
Add field placements to an EXISTING prepared free-signature document and send it to its participants. This tool does not upload, prepare, or itself sign a document. Use only when sending is requested and preparation is confirmed; for a pending preparation, check status first. Reuse the matching documentId and fileId from preparation. All coordinate arrays apply to that single PDF and must refer to its existing participants. The server downloads the current PDF to read page dimensions for conversion; it does not discover intended field locations or retrieve participants. Obtain the participants and intended placements before calling. This tool uses only the prepared document's fileId, not documentBase64, documentUrl, storageFileId, uploadId, or chatgptFile. Maximum downloaded PDF size: 26214400 bytes. To start a new document from any of the five file sources, use a preparation tool instead. Set coordinateSystem to page_percent. ALL field types use the same page-relative percentages: (0,0) is the top-left of the visible page, x increases rightward, y increases downward; 100 is the full page width or height, not 1. pageNumber is zero-based (0 is the first page). x/width are percentages of page width; y/height are percentages of page height. Positions must be >= 0, sizes > 0, x + width <= 100 and y + height <= 100. Example: x=10,y=80,width=30,height=10 starts 10% from the left and 80% from the top, covering 30% of page width and 10% of its height. The server reads each PDF page and handles backend units and field-specific conversions. Do not supply pixels, PDF points, or backend coordinates, or guess a placement from an unrelated image. Use the actual visible page and the user's intended field location. Unrepresentable placements, unreadable PDFs, 180-degree rotated placement pages, and text fields on rotated/cropped pages are rejected before sending; provide a flattened PDF if requested by the error. Provide at least one signatureCoordinates entry; optional coordinate arrays default to empty. Every coordinate's signatoryEmail must identify a participant in this document. Role values and behavior: signer signs the contract; reviewer is a view-only participant who can see the contract but has no action to perform; approver reviews and approves the contract without signing. Map a requested viewer to reviewer, and a requested reviewer who must approve to approver. The literal value viewer is not accepted. If the intended action is unclear, ask before choosing a role. Returns sent when rollout succeeds, or pending when accepted but unconfirmed. sent means dispatched for signing, not that all participants have signed; use the status tool for completed. Do not send again after sending_success or completed, or while a previous send is pending. Keep returned documentId, fileId, operationId, and trackingId when present. pending means accepted but completion is unconfirmed: check get_signature_document_status with documentId instead of resubmitting. UNKNOWN_OUTCOME, a timeout, or a lost response may follow a successful submission; do not automatically repeat a preparation or send call. Inspect status when an ID is available; an empty status list does not make a retry safe. INVALID_REQUEST means inputs need correction; REQUEST_FAILED gives a referenceId for diagnosis. If the cause is unclear, ask for clarification or use the referenceId rather than guessing. Repeating a preparation can create another document. Use only the declared fields. Ask for missing facts instead of inventing values. Service credentials are configured on the server and must not be included in tool arguments.
Destructive Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['documentId', 'fileId', 'coordinateSystem', 'signatureCoordinates'], 'properties': {'fileId': {'type': 'string', 'minLength': 1, 'description': 'Exact fileId for the PDF in that prepared document, returned by preparation. Every supplied coordinate applies to this one file. Do not use a documentId, local path, or URL.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Exact documentId returned by preparation for the existing document to send. Confirm preparation succeeded before calling. Do not invent an ID or substitute a fileId, operationId, or trackingId.'}, 'coordinateSystem': {'type': 'string', 'const': 'page_percent', 'description': 'Required: page_percent. All positions and sizes use 0-100 percentages of the visible PDF page, from its top-left. This explicit marker prevents old pixel/backend coordinates from being misinterpreted. Do not relabel old values; calculate their page percentages first.'}, 'signatureCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Optional SELISE field-type identifier; nonempty when supplied. Preserve a known value for this coordinate kind, or omit it. This is not a MIME type; no type catalog is provided by this tool.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}, 'signatureImageFileId': {'type': 'string', 'minLength': 1, 'description': 'Optional existing signature-image storage ID; nonempty when supplied. Never supply image bytes or a URL here. Omit unless required by a verified workflow; this field does not itself sign the document.'}}, 'description': "A signature placement for a document participant. Set coordinateSystem to page_percent. ALL field types use the same page-relative percentages: (0,0) is the top-left of the visible page, x increases rightward, y increases downward; 100 is the full page width or height, not 1. pageNumber is zero-based (0 is the first page). x/width are percentages of page width; y/height are percentages of page height. Positions must be >= 0, sizes > 0, x + width <= 100 and y + height <= 100. Example: x=10,y=80,width=30,height=10 starts 10% from the left and 80% from the top, covering 30% of page width and 10% of its height. The server reads each PDF page and handles backend units and field-specific conversions. Do not supply pixels, PDF points, or backend coordinates, or guess a placement from an unrelated image. Use the actual visible page and the user's intended field location. Unrepresentable placements, unreadable PDFs, 180-degree rotated placement pages, and text fields on rotated/cropped pages are rejected before sending; provide a flattened PDF if requested by the error. Provide at least one signatureCoordinates entry; optional coordinate arrays default to empty. Every coordinate's signatoryEmail must identify a participant in this document."}, 'minItems': 1, 'description': "Required nonempty signature-placement list for this PDF. In the combined tool, every signer needs at least one entry and every entry must refer to a supplied participant. For send-only, use the prepared document's participants and placements."}, 'textFieldCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height', 'propertyName'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Optional SELISE field-type identifier; nonempty when supplied. Preserve a known value for this coordinate kind, or omit it. This is not a MIME type; no type catalog is provided by this tool.'}, 'value': {'type': 'string', 'default': '', 'description': 'Text-field content in the format expected by the selected SELISE field type. Defaults to an empty string; do not invent content.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'fontDetails': {'type': 'object', 'properties': {'fontName': {'type': 'string', 'default': 'Arial', 'minLength': 1, 'description': 'Nonempty font name supported by the document workflow. Defaults to Arial.'}, 'fontSize': {'type': 'number', 'default': 12, 'description': 'Positive font size passed to SELISE unchanged. Defaults to 12.', 'exclusiveMinimum': 0}}, 'description': 'Optional font settings. When this object is supplied, omitted fontName/fontSize default to Arial/12.'}, 'propertyName': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty SELISE text-field property identifier. Use a known property for the intended field; this is not its display label.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}}, 'description': 'Optional text placement in page percentages assigned to a participant; requires propertyName and all base coordinate fields. Text wrapping and font rendering are controlled by the signing backend; the rectangle does not guarantee clipping.'}, 'description': 'Optional text placements for this PDF; omit or use [] when none are requested. Each entry requires propertyName and participant/page/position/size fields.'}, 'simpleImageCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height', 'type'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty SELISE simple-image type identifier. Use a verified backend value with its exact casing; this is not image data, a URL, or a MIME type.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}}, 'description': 'Optional simple-image placement in page percentages assigned to a participant. Requires type and all base coordinate fields; does not upload an image.'}, 'description': 'Optional simple-image placements for this PDF; defaults to []. Each entry requires a verified type and participant/page/position/size fields.'}, 'stampPostInfoCoordinates': {'type': 'array', 'items': {'type': 'object', 'required': ['signatoryEmail', 'pageNumber', 'x', 'y', 'width', 'height', 'entityName', 'propertyName'], 'properties': {'x': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Left edge as a percentage of visible page width, measured rightward from the top-left. 10 means 10%, not pixels or points. x + width must be <= 100.'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Top edge as a percentage of visible page height, measured downward from the top-left. 80 means 80%. y + height must be <= 100.'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Optional SELISE field-type identifier; nonempty when supplied. Preserve a known value for this coordinate kind, or omit it. This is not a MIME type; no type catalog is provided by this tool.'}, 'width': {'type': 'number', 'maximum': 100, 'description': 'Field width as a percentage of visible page width; > 0, and x + width <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'maximum': 100, 'description': 'Field height as a percentage of visible page height; > 0, and y + height <= 100. Same units for every field type.', 'exclusiveMinimum': 0}, 'entityName': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty SELISE entity identifier used to resolve this post-signing information field. Use a verified entity/property pair; do not invent identifiers.'}, 'pageNumber': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based PDF page number: 0 is the first page, 1 the second. Use an existing page in the actual PDF.'}, 'fontDetails': {'type': 'object', 'properties': {'fontName': {'type': 'string', 'default': 'Arial', 'minLength': 1, 'description': 'Nonempty font name supported by the document workflow. Defaults to Arial.'}, 'fontSize': {'type': 'number', 'default': 12, 'description': 'Positive font size passed to SELISE unchanged. Defaults to 12.', 'exclusiveMinimum': 0}}, 'description': 'Optional font settings. When this object is supplied, omitted fontName/fontSize default to Arial/12.'}, 'propertyName': {'type': 'string', 'minLength': 1, 'description': 'Required nonempty property identifier belonging to entityName for this post-signing information field.'}, 'signatoryEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Valid email of the participant assigned to this field, without surrounding whitespace. Must match a participant in this document; normalized to lowercase. Use an email, not a signatory ID.'}}, 'description': 'Optional post-signing information placement in page percentages; requires entityName, propertyName, and all base coordinate fields.'}, 'description': 'Optional post-signing information placements for this PDF; defaults to []. Each entry requires verified entityName/propertyName and participant/page/position/size fields.'}}, 'description': "Send an existing prepared document using its matching documentId/fileId. Set coordinateSystem to page_percent. ALL field types use the same page-relative percentages: (0,0) is the top-left of the visible page, x increases rightward, y increases downward; 100 is the full page width or height, not 1. pageNumber is zero-based (0 is the first page). x/width are percentages of page width; y/height are percentages of page height. Positions must be >= 0, sizes > 0, x + width <= 100 and y + height <= 100. Example: x=10,y=80,width=30,height=10 starts 10% from the left and 80% from the top, covering 30% of page width and 10% of its height. The server reads each PDF page and handles backend units and field-specific conversions. Do not supply pixels, PDF points, or backend coordinates, or guess a placement from an unrelated image. Use the actual visible page and the user's intended field location. Unrepresentable placements, unreadable PDFs, 180-degree rotated placement pages, and text fields on rotated/cropped pages are rejected before sending; provide a flattened PDF if requested by the error. Provide at least one signatureCoordinates entry; optional coordinate arrays default to empty. Every coordinate's signatoryEmail must identify a participant in this document."}
Output schema
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['status', 'documentId'], 'properties': {'fileId': {'type': 'string', 'minLength': 1, 'description': 'Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.'}, 'status': {'enum': ['sent', 'pending'], 'type': 'string', 'description': 'sent: sending confirmed, not completion of signing. pending: sending accepted but completion unconfirmed; use get_signature_document_status without resubmitting.'}, 'message': {'type': 'string', 'description': 'Optional human-readable progress or follow-up guidance. For pending results, check status rather than submitting again.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Document identifier. Reuse as documentId in subsequent calls; an ID in an error response may be provisional and does not prove the document was created or the command accepted.'}, 'trackingId': {'type': 'string', 'minLength': 1, 'description': 'Backend command correlation identifier, when available. Not a document ID or proof of completion.'}, 'operationId': {'type': 'string', 'minLength': 1, 'description': 'Identifier for tracing this tool operation. Not a document ID or proof of completion.'}}, 'description': 'Result of sending an existing prepared document. sent is not completed signing.', 'additionalProperties': False}, {'type': 'object', 'required': ['code', 'message', 'referenceId'], 'properties': {'code': {'enum': ['INVALID_REQUEST', 'REQUEST_FAILED', 'UNKNOWN_OUTCOME'], 'type': 'string', 'description': 'INVALID_REQUEST: input validation failed. REQUEST_FAILED: operation failed; use referenceId for diagnosis. UNKNOWN_OUTCOME: an action may have succeeded despite the error; inspect document status before considering a retry.'}, 'fileId': {'type': 'string', 'minLength': 1, 'description': 'Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.'}, 'message': {'type': 'string', 'description': 'Safe error explanation or recovery guidance; no private upstream diagnostics.'}, 'documentId': {'type': 'string', 'minLength': 1, 'description': 'Document identifier. Reuse as documentId in subsequent calls; an ID in an error response may be provisional and does not prove the document was created or the command accepted.'}, 'trackingId': {'type': 'string', 'minLength': 1, 'description': 'Backend command correlation identifier, when available. Not a document ID or proof of completion.'}, 'operationId': {'type': 'string', 'minLength': 1, 'description': 'Identifier for tracing this tool operation. Not a document ID or proof of completion.'}, 'referenceId': {'type': 'string', 'minLength': 1, 'description': 'Sentry error reference for support and diagnostics. Not a documentId or trackingId.'}}, 'description': "Error payload returned with the MCP result's isError flag set to true. Known IDs are optional and may be provisional; do not assume an error makes resubmission safe.", 'additionalProperties': False}], '$schema': 'http://json-schema.org/draft-07/schema#', 'description': "Structured result: either the tool's success/progress payload or an error payload with code, message, and referenceId. Errors also set isError on the enclosing MCP result."}
Added
get_signature_document_status
Oct. 1, 2026, 2:40 a.m.
Added
prepare_and_send_free_signature_document
Oct. 1, 2026, 2:40 a.m.
Added
send_prepared_signature_document
Oct. 1, 2026, 2:40 a.m.
Added
prepare_free_signature_document
Oct. 1, 2026, 2:40 a.m.