Skip to main content
Glama

Send prepared signature document

send_prepared_signature_document
Destructive

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. SIGNATURE_LIMIT_REACHED means the backend rejected sending because the signature quota is exhausted: explain the returned message to the user and do not retry sending or create another document to bypass the limit. 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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "documentId": "<documentId>",
      "fileId": "<fileId>",
      "coordinateSystem": "<coordinateSystem>",
      "signatureCoordinates": "<signatureCoordinates>"
    },
    "name": "send_prepared_signature_document"
  }
}

Input Schema

NameRequiredDescriptionDefault
fileIdYesExact 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.
documentIdYesExact 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.
coordinateSystemYesRequired: 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.
signatureCoordinatesYesRequired 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.
textFieldCoordinatesNoOptional text placements for this PDF; omit or use [] when none are requested. Each entry requires propertyName and participant/page/position/size fields.
simpleImageCoordinatesNoOptional simple-image placements for this PDF; defaults to []. Each entry requires a verified type and participant/page/position/size fields.
stampPostInfoCoordinatesNoOptional post-signing information placements for this PDF; defaults to []. Each entry requires verified entityName/propertyName and participant/page/position/size fields.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "Result of sending an existing prepared document. sent is not completed signing.",
      -    "properties": {
      -      "documentId": {
      -        "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.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "fileId": {
      -        "description": "Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "message": {
      -        "description": "Optional human-readable progress or follow-up guidance. For pending results, check status rather than submitting again.",
      -        "type": "string"
      -      },
      -      "operationId": {
      -        "description": "Identifier for tracing this tool operation. Not a document ID or proof of completion.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "status": {
      -        "description": "sent: sending confirmed, not completion of signing. pending: sending accepted but completion unconfirmed; use get_signature_document_status without resubmitting.",
      -        "enum": [
      -          "sent",
      -          "pending"
      -        ],
      -        "type": "string"
      -      },
      -      "trackingId": {
      -        "description": "Backend command correlation identifier, when available. Not a document ID or proof of completion.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "status",
      -      "documentId"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "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.",
      -    "properties": {
      -      "code": {
      -        "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.",
      -        "enum": [
      -          "INVALID_REQUEST",
      -          "REQUEST_FAILED",
      -          "UNKNOWN_OUTCOME"
      -        ],
      -        "type": "string"
      -      },
      -      "documentId": {
      -        "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.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "fileId": {
      -        "description": "Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "message": {
      -        "description": "Safe error explanation or recovery guidance; no private upstream diagnostics.",
      -        "type": "string"
      -      },
      -      "operationId": {
      -        "description": "Identifier for tracing this tool operation. Not a document ID or proof of completion.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "referenceId": {
      -        "description": "Sentry error reference for support and diagnostics. Not a documentId or trackingId.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "trackingId": {
      -        "description": "Backend command correlation identifier, when available. Not a document ID or proof of completion.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "code",
      -      "message",
      -      "referenceId"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "Result of sending an existing prepared document. sent is not completed signing.",
      +    "properties": {
      +      "documentId": {
      +        "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.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "fileId": {
      +        "description": "Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "message": {
      +        "description": "Optional human-readable progress or follow-up guidance. For pending results, check status rather than submitting again.",
      +        "type": "string"
      +      },
      +      "operationId": {
      +        "description": "Identifier for tracing this tool operation. Not a document ID or proof of completion.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "status": {
      +        "description": "sent: sending confirmed, not completion of signing. pending: sending accepted but completion unconfirmed; use get_signature_document_status without resubmitting.",
      +        "enum": [
      +          "sent",
      +          "pending"
      +        ],
      +        "type": "string"
      +      },
      +      "trackingId": {
      +        "description": "Backend command correlation identifier, when available. Not a document ID or proof of completion.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "status",
      +      "documentId"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "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.",
      +    "properties": {
      +      "code": {
      +        "description": "INVALID_REQUEST: input validation failed. SIGNATURE_LIMIT_REACHED: signature quota exhausted; explain the message and do not retry sending until quota is available. 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.",
      +        "enum": [
      +          "INVALID_REQUEST",
      +          "REQUEST_FAILED",
      +          "UNKNOWN_OUTCOME",
      +          "SIGNATURE_LIMIT_REACHED"
      +        ],
      +        "type": "string"
      +      },
      +      "documentId": {
      +        "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.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "fileId": {
      +        "description": "Storage identifier of the PDF. Reuse with its matching documentId when sending; not a download URL.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "message": {
      +        "description": "Safe error explanation or recovery guidance; no private upstream diagnostics.",
      +        "type": "string"
      +      },
      +      "operationId": {
      +        "description": "Identifier for tracing this tool operation. Not a document ID or proof of completion.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "referenceId": {
      +        "description": "Sentry error reference for support and diagnostics. Not a documentId or trackingId.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "trackingId": {
      +        "description": "Backend command correlation identifier, when available. Not a document ID or proof of completion.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "message",
      +      "referenceId"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/non-idempotent/open-world, and the description adds substantial context beyond them: the server downloads the PDF (26,214,400 byte cap), rotated/cropped page rejections, the sent-vs-pending return semantics, and an error taxonomy (SIGNATURE_LIMIT_REACHED, INVALID_REQUEST, REQUEST_FAILED with referenceId, UNKNOWN_OUTCOME). The explicit guidance not to retry after a timeout or lost response is precisely the non-idempotency warning the annotation hint cannot convey on its own.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and preconditions are front-loaded, but the body runs to many dense sentences with heavy duplication of the input schema's own descriptions (the page-percentage paragraph and the x=10,y=80,width=30,height=10 example appear verbatim in both the tool description and the nested schema). The role-mapping discussion (viewer→reviewer) refers to no declared parameter and adds noise for this send-only tool. Useful material is present, but a trim of the schema-echoing passages would lose nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent send operation with 7 parameters, the description covers preconditions, input derivation, coordinate semantics, rejection conditions, retry safety, and error handling. Even though an output schema exists, the sent/pending distinction and the instruction to consult get_signature_document_status afterward give the agent a complete decision loop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 7 parameters is already documented in the schema, including the coordinateSystem const, percentage geometry, pageNumber zero-basing, and signatoryEmail matching. The description restates much of that geometry (0,0 top-left, 100 not 1, bounds, the x=10/y=80 example) without adding new syntax the schema lacks. It does add value on role semantics (signer/reviewer/approver, viewer rejected), but roles are not a declared parameter here, so that is context rather than parameter explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Add field placements to an EXISTING prepared free-signature document and send it to its participants") and immediately bounds scope with "does not upload, prepare, or itself sign." It names the sibling it replaces for the other case ("To start a new document from any of the five file sources, use a preparation tool instead"), so an agent can separate this from prepare_free_signature_document and prepare_and_send_free_signature_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit preconditions and exclusions: "Use only when sending is requested and preparation is confirmed; for a pending preparation, check status first," plus routing to get_signature_document_status for the pending/UNKNOWN_OUTCOME cases and to a preparation tool for new documents. It also gives a do-not-use condition ("Do not send again after sending_success or completed, or while a previous send is pending"), which is exactly the disambiguation an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources