Skip to main content
Glama

Send for e-signature

create_signature_request

Send a previously rendered PDF to a signer for e-signature when a Kamy API key is configured. Without a key, returns dashboard setup instructions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
messageNoOptional message rendered in the email invitation body.
ccEmailsNoUp to 10 observer addresses CC'd on the invite and the completion notice. Not signers themselves.
positionNoOptional sender-chosen signature placement in PDF points (72 dpi, origin bottom-left). Defaults to bottom-right of the last page sized 220×64 pt; when omitted, the signer can drag the placeholder on the sign page.
renderIdYesRender UUID returned by render_pdf or any /v1/render call. The render's PDF is the document the signer will receive.
expiresInNoHow long (seconds) the sign link stays valid. Defaults to 30 days. Min 1 hour, max 30 days.
authMethodNoIdentity-verification mode. `link` (default) — possession of the secret URL is the only check. `email_otp` — sign page renders a 6-digit OTP gate; code emailed to `signerEmail`. `sms_otp` — same gate, code texted to `signerPhone` (which must then be supplied). Recommend `email_otp` for higher-value transactions.
signerNameYesRecipient full name. Must be typed verbatim by the signer to confirm intent.
signerEmailYesRecipient email address.
signerPhoneNoE.164 phone number. Required when `authMethod` is `sms_otp`; ignored otherwise. Example: `+14155551234`.
placedFieldsNoUp to 100 sender-defined fillable fields stamped onto the PDF at sign time. Use for flat PDFs that don't ship AcroForm widgets. Names must be unique.
requireStampNoRequire the signer to upload a company stamp / seal alongside their personal signature (UAE, KSA, JP, KR, IN, CN B2B workflows). Server refuses to seal without one.
signOnEveryPageNoWhen true, the server stamps the signer's signature on every page of the source PDF instead of only the configured position. Common B2B contract pattern.
signatureTemplateIdNoApply a signature template's defaults (placedFields, position, message, expiresIn, ccEmails). Request-level fields override the template.
reminderCadenceHoursNoWhen set (24–168), the auto-reminder cron resends the invite every N hours while the request stays pending, up to 3 reminders. Omit for no auto-reminders.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / placedFields / items / properties / anchor / description
      Previous value: -"Text anchor — server locates this string in the PDF and uses its position."New value: +"Text to position this field against. The server searches only the page named in `page` (case-insensitive, first match wins) and uses that text's bottom-left corner as the origin, adding x/y as offsets. If the text is not on that page the field silently falls back to the raw x/y — call preview_field_placement first to find out, where the miss comes back as an ANCHOR_NOT_FOUND issue."
    • changedInput schema / properties / placedFields / items / properties / options / description
      Previous value: -"Valid choices for radio / dropdown."New value: +"Valid choices for radio / dropdown. Ignored for other types."
    • addedInput schema / properties / placedFields / items / properties / signerLabel / description
      Added value: +"Which signer this field belongs to."
    • addedInput schema / properties / placedFields / items / properties / sourcePageHeight
      Added value: +{
      +  "description": "Page height the coordinates were measured against. Supply with sourcePageWidth.",
      +  "maximum": 7200,
      +  "minimum": 72,
      +  "type": "number"
      +}
    • addedInput schema / properties / placedFields / items / properties / sourcePageWidth
      Added value: +{
      +  "description": "Page width the coordinates were measured against. Supply with sourcePageHeight.",
      +  "maximum": 7200,
      +  "minimum": 72,
      +  "type": "number"
      +}
    • addedInput schema / properties / placedFields / items / properties / type / description
      Added value: +"Widget the signer sees. `radio` and `dropdown` also need `options`. Every type here is accepted by both create_signature_request and preview_field_placement."
    • changedInput schema / properties / placedFields / items / properties / x / description
      Previous value: -"Bottom-left x in PDF points."New value: +"Bottom-left x in PDF points — an offset from the anchor when `anchor` is set."
    • changedInput schema / properties / placedFields / items / properties / y / description
      Previous value: -"Bottom-left y in PDF points."New value: +"Bottom-left y in PDF points — an offset from the anchor when `anchor` is set."
  2. Changed10 schema fields changed
    • addedInput schema / properties / authMethod
      Added value: +{
      +  "description": "Identity-verification mode. `link` (default) — possession of the secret URL is the only check. `email_otp` — sign page renders a 6-digit OTP gate; code emailed to `signerEmail`. `sms_otp` — same gate, code texted to `signerPhone` (which must then be supplied). Recommend `email_otp` for higher-value transactions.",
      +  "enum": [
      +    "link",
      +    "sms_otp",
      +    "email_otp"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / ccEmails
      Added value: +{
      +  "description": "Up to 10 observer addresses CC'd on the invite and the completion notice. Not signers themselves.",
      +  "items": {
      +    "format": "email",
      +    "type": "string"
      +  },
      +  "maxItems": 10,
      +  "type": "array"
      +}
    • addedInput schema / properties / expiresIn
      Added value: +{
      +  "description": "How long (seconds) the sign link stays valid. Defaults to 30 days. Min 1 hour, max 30 days.",
      +  "maximum": 2592000,
      +  "minimum": 3600,
      +  "type": "integer"
      +}
    • addedInput schema / properties / placedFields
      Added value: +{
      +  "description": "Up to 100 sender-defined fillable fields stamped onto the PDF at sign time. Use for flat PDFs that don't ship AcroForm widgets. Names must be unique.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "anchor": {
      +        "description": "Text anchor — server locates this string in the PDF and uses its position.",
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "defaultValue": {
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "h": {
      +        "description": "Height in PDF points.",
      +        "maximum": 800,
      +        "minimum": 8,
      +        "type": "number"
      +      },
      +      "name": {
      +        "description": "Unique field name within the request.",
      +        "maxLength": 120,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "options": {
      +        "description": "Valid choices for radio / dropdown.",
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 50,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "page": {
      +        "description": "1-indexed page number.",
      +        "maximum": 500,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "required": {
      +        "type": "boolean"
      +      },
      +      "signerLabel": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "type": {
      +        "enum": [
      +          "text",
      +          "textarea",
      +          "checkbox",
      +          "date",
      +          "initials",
      +          "radio",
      +          "dropdown"
      +        ],
      +        "type": "string"
      +      },
      +      "w": {
      +        "description": "Width in PDF points.",
      +        "maximum": 800,
      +        "minimum": 8,
      +        "type": "number"
      +      },
      +      "x": {
      +        "description": "Bottom-left x in PDF points.",
      +        "maximum": 2000,
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "y": {
      +        "description": "Bottom-left y in PDF points.",
      +        "maximum": 2000,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "type",
      +      "page",
      +      "x",
      +      "y",
      +      "w",
      +      "h"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
    • changedInput schema / properties / position / description
      Previous value: -"Optional stamp position in PDF points (72 dpi, origin bottom-left). Defaults to bottom-right of last page sized 220×64 pt."New value: +"Optional sender-chosen signature placement in PDF points (72 dpi, origin bottom-left). Defaults to bottom-right of the last page sized 220×64 pt; when omitted, the signer can drag the placeholder on the sign page."
    • addedInput schema / properties / reminderCadenceHours
      Added value: +{
      +  "description": "When set (24–168), the auto-reminder cron resends the invite every N hours while the request stays pending, up to 3 reminders. Omit for no auto-reminders.",
      +  "maximum": 168,
      +  "minimum": 24,
      +  "type": "integer"
      +}
    • addedInput schema / properties / requireStamp
      Added value: +{
      +  "description": "Require the signer to upload a company stamp / seal alongside their personal signature (UAE, KSA, JP, KR, IN, CN B2B workflows). Server refuses to seal without one.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / signOnEveryPage
      Added value: +{
      +  "description": "When true, the server stamps the signer's signature on every page of the source PDF instead of only the configured position. Common B2B contract pattern.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / signatureTemplateId
      Added value: +{
      +  "description": "Apply a signature template's defaults (placedFields, position, message, expiresIn, ccEmails). Request-level fields override the template.",
      +  "format": "uuid",
      +  "type": "string"
      +}
    • addedInput schema / properties / signerPhone
      Added value: +{
      +  "description": "E.164 phone number. Required when `authMethod` is `sms_otp`; ignored otherwise. Example: `+14155551234`.",
      +  "pattern": "^\\+[1-9]\\d{6,14}$",
      +  "type": "string"
      +}
  3. Added

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark the tool as non-read-only and non-destructive; the description adds the prerequisite of a Kamy API key and the conditional behavior of returning dashboard setup instructions without a key. This is useful behavioral context that goes beyond the annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main action and a conditional. Every word earns its place; there is no redundancy or filler.

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

Completeness3/5

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

The tool is complex (14 params, nested objects, no output schema), and the description is minimal. It explains the no-key fallback but not the success return value or the overall workflow (e.g., what happens after sending). The schema fills in parameter details, but the description should provide more behavioral context for such a complex tool.

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 the baseline is 3. The description adds no parameter-level details beyond 'previously rendered PDF' (implied renderId) and 'signer' (implied signerEmail/Name), so it does not augment the schema's already-thorough parameter documentation.

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?

The description clearly states the specific action ('Send a previously rendered PDF to a signer for e-signature') and resource, and the condition about 'when a Kamy API key is configured' adds useful scoping. It distinguishes this tool from siblings by emphasizing the input is a rendered PDF and the purpose is e-signature sending.

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

Usage Guidelines4/5

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

The description gives clear context: use when you have a previously rendered PDF and a Kamy API key is configured, and warns about the fallback when no key is set. It does not name explicit alternatives or exclusions, but the context is strong enough for an agent to select this tool appropriately.

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