Skip to main content
Glama

Server Details

Formify turns document paperwork into something you can just ask for.

Describe the agreement you need and it is built as a real, fillable PDF — text fields, checkboxes, dropdowns and signature space placed where a signing client actually expects them. Send it for electronic signature to one person or several, in a set order or all at once, by email or SMS, and preview exactly where every field landed before anyone is contacted.

Prove who signed. Swedish BankID, an ID document scan, a live face check, or a company registration lookup for KYC and AML — including the option to capture an ID document's data without storing the image at all.

Attach an AI assistant to the document itself. The recipient can ask it what a clause means and it highlights the passage it is answering about, reads it aloud if they prefer, and answers in English, Swedish or Spanish. They never have to paste your contract into another chatbot to understand it.

Then track it. See who signed, who only opened it, and who never looked. Remind only the people who have not signed. Fix a mistyped email, hand someone a link in person, revoke a send, or download the completed document.

Built for small businesses — agencies, property managers, trades, clinics and tour operators — where the person winning the client is also the person chasing the signature.

Ownership verified
Status
Healthy
Uptime
100.0% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 50 tools

Disambiguation4/5

Tools generally follow a distinct resource+action pattern, and descriptions proactively clarify lookalikes such as get_draft_file vs get_draft_file_url, list_links vs get_recipient_links, and field definitions vs values. A few field-related getters could still be confused at a glance, but the detailed guidance makes misselection unlikely.

Naming Consistency5/5

All tool names use a consistent snake_case verb_noun convention with a uniform verb set: create, get, list, update, delete, duplicate, send, upload, merge, and rotate. Even longer names like request_file_upload_url and rotate_webhook_secret follow the same predictable pattern.

Tool Count2/5

50 tools is a very large surface for an MCP server, even though the e-signing domain has multiple sub-resources such as documents, drafts, links, templates, files, webhooks, and account management. Many tools are split variants of similar operations (get_draft_file vs get_draft_file_url, multiple field getters), making the set feel heavier than necessary.

Completeness4/5

The toolset covers the e-signing lifecycle thoroughly: upload and merge files, create drafts and documents, preview, send, remind, revoke, duplicate, and delete, plus links, templates, webhooks, and account capabilities. Minor gaps exist—such as no generic update_document and no way to retrieve the original document PDF outside signed/draft previews—but agents can work around them.

Available Tools

50 tools
create_documentCreate DocumentA
Destructive
Inspect

Create a document and send it for electronic signature. Provide either templateId (from list_templates) or fileId (from upload_file) — not both. When using a template: call get_template to see signee slots and pre-configured signature settings, then get_template_fields for form fields. When using a file: call get_file_fields to discover form fields. Signature placement defaults to new_page unless explicitly configured via signatureBox. The document name is visible to signees and should be a clear, human-readable title, not the uploaded filename. If deriving it from a PDF filename, strip the file extension unless the user explicitly wants to keep it. BEFORE calling this tool, always ask the user: (1) invitation language, (2) optional personal message, (3) signature placement — only when using a file, not a template: new_page (default, recommended) or existing page with coordinates, (4) signature type — only if get_account_capabilities shows non-default types available and no template default applies; the choice only selects how the signer will verify on Formify's signing page, (5) AI assistant — only if get_account_capabilities confirms the aiAssistant capability. ALSO when using a file: ask the user whether they want a preview before sending. If yes, save the configuration as a draft via create_draft, share a one-time preview via get_draft_file_url, and send via send_draft after the user confirms — instead of calling create_document directly. Recommend a preview whenever signaturePlacement is 'existing' or when custom coordinates have been used.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable document title visible to signees. If deriving from an uploaded PDF filename, strip the file extension (e.g. 'contract.pdf' → 'contract') unless the user explicitly wants the extension.
fieldsNoForm fields to pre-fill at document creation time. This is the preferred way to fill fields — always use this when you have the values, rather than set_document_field_values after creation.
fileIdNoFile ID from upload_file. Required if templateId is not provided.
userIdNoUser ID to assign as document owner. Defaults to the authenticated user.
languageNoLanguage for the signing invitation
templateIdNoTemplate ID from list_templates. Required if fileId is not provided.
aiAssistantNoOptional AI assistant that helps signees while reviewing the document. Requires the aiAssistant capability.
signeeDetailsYesList of signees. At least 1 is always required. The number of signees should match what the template expects — call get_template first to see how many signee slots it defines. The user decides the final count; some templates are pre-configured for a specific number.
sharingSettingNoWhether the document is private or shared with other users on the account
personalMessageNoOptional personal message included in the signing invitation. Maximum 500 characters.
enableSigningOrderNoEnable sequential signing order (default false)
fieldsReadonlyModeNoAlways set to 'filled' when providing field values — this locks pre-filled fields so signers cannot change them. Options: keepOriginal (default — no locking), filled (pre-filled fields become read-only), all (all fields become read-only).

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses key behavioral traits beyond the annotations: it explicitly states that the document is sent for electronic signature, that identity verification happens on Formify's signing page (not via this API), and that no image/document data passes through for ID scan. It also clarifies that only the signature method is selected, not the verification itself. These details add significant value over the annotations (readOnlyHint=false, destructiveHint=true) and help the agent understand side effects and privacy implications.

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

Conciseness4/5

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

The description is long (~250 words) but appropriately so for a tool with 12 parameters and complex nested objects. It is front-loaded with the core action and then cascades into conditions and user-interaction steps. While somewhat verbose, every sentence conveys necessary guidance, and the structure (core action → prerequisites → user questions → preview workflow) is logical. Slightly more concise would be ideal, but given the complexity, a 4 is justified.

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

Completeness4/5

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

The description covers prerequisites, alternatives, user interaction requirements, and behavioral side effects thoroughly. The main gap is the absence of any mention of the tool's return value (e.g., document ID or URL) and potential error conditions. Since there is no output schema, the agent must infer what the tool returns. While not critical for calling correctly, this omission prevents full completeness for a tool of this complexity.

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?

The input schema has 100% coverage, with extensive per-parameter descriptions (e.g., the field value rules, coordinate calculations, signatureType capability requirements). The description adds minimal parameter semantics beyond stating the templateId/fileId exclusivity and advising to strip file extensions from names. Since the schema already documents every parameter in depth, the description's added value is limited, warranting the baseline score of 3.

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 action: 'Create a document and send it for electronic signature.' It explicitly distinguishes from siblings by noting the template/file exclusivity and referencing create_draft as an alternative when a preview is desired. The verb and resource are specific, making it immediately clear what this tool does versus create_draft, create_link, or create_template.

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?

The description provides explicit usage guidance: when to use templateId vs fileId, mandatory preliminary calls (get_template, get_template_fields, get_file_fields), and a detailed list of questions the agent must ask the user before calling. It also explains when to use create_draft and send_draft instead of create_document, and when to recommend a preview. This is comprehensive, actionable, and leaves no ambiguity about when to use this tool versus alternatives.

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

create_draftCreate DraftAInspect

Create a draft document without sending invitations. Provide EXACTLY ONE source: fileId (from upload_file) or templateId (from list_templates). Sending both, or neither, is an error. Using templateId is how you preview a template before sending it: the template's document and signature fields are copied into the draft, you review or adjust them, then send_draft. The template itself is never affected. Signee details, contact methods, signature type, and signature coordinates are optional while drafting. Full validation occurs only when send_draft is called. Call get_file_fields after upload_file if the PDF has form fields that should be pre-filled and saved in the draft. The draft name will become visible to signees when the draft is sent, so it should be a clear, human-readable title, not the uploaded filename. If deriving it from a PDF filename, strip the file extension unless the user explicitly wants to keep it. PREVIEW USE CASE: drafts are the recommended way to preview an uploaded document before sending. When the user wants to verify that signature fields, ID scan placeholders, or pre-filled values look correct, build the full configuration here, call get_draft_file_url to retrieve a one-time PDF preview, let the user verify (and adjust via update_draft if needed), then call send_draft to send.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable draft title that will be visible to signees when sent. If deriving from an uploaded PDF filename, strip the file extension (e.g. 'contract.pdf' → 'contract') unless the user explicitly wants the extension.
fieldsNoOptional form fields to pre-fill and save in the draft. Use exact field names from get_file_fields.
fileIdNoFile ID from upload_file. Mutually exclusive with templateId; exactly one of the two is required.
userIdNoUser ID to assign as draft owner. Defaults to the authenticated user.
languageNoLanguage for the eventual signing invitation
templateIdNoTemplate ID from list_templates. Mutually exclusive with fileId; exactly one of the two is required. Copies the template's document and signature fields into the draft, including any contact details it stores. Requires the templates capability.
aiAssistantNoOptional AI assistant that helps signees while reviewing the document. Requires the aiAssistant capability.
signeeDetailsNoOptional list of signees to save in the draft. Entries may be incomplete during the draft phase; fullName and a contact method are required before sending.
sharingSettingNoWhether the draft is private or shared with other users on the account
personalMessageNoOptional personal message for the eventual signing invitation. Maximum 500 characters.
enableSigningOrderNoEnable sequential signing order when the draft is sent (requires signingOrder capability)
fieldsReadonlyModeNoForm field read-only mode. Set to 'filled' when providing pre-filled values that should be locked for signers.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the minimal annotations (readOnly=false, destructive=false), the description discloses deferred validation ('Full validation occurs only when send_draft is called'), non-mutating template behavior ('The template itself is never affected'), and that the draft name will become visible to signees. These are behavioral traits an agent cannot infer from annotations alone.

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

Conciseness4/5

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

The description is long but front-loaded with the core purpose and then structured into source rule, template preview, validation timing, naming, and a preview workflow. It remains focused, though the PREVIEW USE CASE paragraph partially recaps workflow steps already stated earlier, so it is not maximally tight.

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

Completeness4/5

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

For a 12-parameter tool with nested objects and no output schema, the description covers the central workflow, error condition, preview path, and naming rules. The only notable gap is the absence of any statement about the return value (e.g., draft ID), which would matter more given there is no output schema.

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

Parameters4/5

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

Schema coverage is 100% and the schema already documents the mutual-exclusivity rule, per-parameter optionality while drafting, and coordinate systems. The description adds a small amount on top — the cross-parameter 'EXACTLY ONE source' rule, the get_file_fields ordering prerequisite, and naming guidance — so it slightly exceeds the high-coverage baseline.

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 opens with a specific verb and resource ('Create a draft document') and the qualifier 'without sending invitations' immediately distinguishes it from send_draft. It also references the two source parameters (fileId/templateId) and the preview workflow, leaving no ambiguity about what create_draft is for.

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?

The description explicitly says drafts are 'the recommended way to preview an uploaded document before sending' and gives the full chain — build config here, get_draft_file_url to preview, update_draft if needed, then send_draft. It also states the exact-one-source rule and that validation is deferred to send_draft, which tells the agent when to use this tool and what belongs to sibling tools.

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

create_templateCreate TemplateAInspect

Create a reusable template from a PDF already uploaded with upload_file. A template stores a document together with its signature fields, so a later create_document only has to supply the recipients. A template's signeeDetails describes ROLES, not people: fullName is normally a label such as 'Buyer', and contact details are optional — leave them out unless the same person signs every time. Nothing inside signeeDetails is required. Requires the templates capability; check get_account_capabilities first.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the template. Internal — signees never see it.
fileIdYesFile ID from upload_file
signeeDetailsYesThe signature fields to store on the template. At least one is required.
sharingSettingNoprivate (default) keeps the template to you; shared makes it usable by the whole account and requires the accessLevels capability.
enableSigningOrderNoStore a sequential signing order on the template (requires the signingOrder capability).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint false and destructiveHint false; the description adds meaningful behavioral context beyond that: it requires a capability, models signeeDetails as roles rather than specific people, and clarifies that no fields inside signeeDetails are required. It does not describe the return value or side effects on the original PDF, but the added preconditions and domain behavior are genuinely useful.

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 compact and front-loaded: first the purpose, then the workflow relationship, then the critical role-versus-person caveat, then the capability requirement. Every sentence carries useful information and there is no filler or redundant repetition of schema content.

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

Completeness4/5

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

For a tool with no output schema and meaningful complexity, the description covers the key preconditions (uploaded PDF, templates capability), the conceptual model, and the relationship to create_document. It could explicitly state what the response contains, such as the new template identifier, but the information needed to invoke the tool correctly is essentially complete.

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

Parameters4/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 conceptual value on top of the schema by explaining that fullName is normally a label like 'Buyer', that contact details are optional unless the same person signs every time, and that nothing inside signeeDetails is required. This complements the already-detailed schema property descriptions.

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 states a specific action and resource: creating a reusable template from an already-uploaded PDF. It also differentiates the tool from siblings by explaining that templates bundle a document with signature fields so create_document later only needs recipients. This leaves no ambiguity about what create_template does or how it fits into the workflow.

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 a clear precondition: the templates capability is required and get_account_capabilities should be checked first. It also explains the role-versus-person model and when contact details should be omitted. It does not explicitly state when to use create_document instead of create_template, but the downstream relationship is clear enough to infer the correct usage.

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

delete_documentDelete DocumentA
DestructiveIdempotent
Inspect

Permanently delete a document. Only documents with status 'completed' or 'revoked' can be deleted. This also deletes the associated file. Always call get_document first to confirm status, then ask the user for confirmation — deletion is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesUnique identifier of the document to delete

TDQS

A4.4/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: deletion is permanent and irreversible, the associated file is also deleted, and only certain document statuses are eligible. Combined with the annotations' destructiveHint=truearen't, these details give an agent a clear picture of side effects and prerequisites.

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?

Three concise, front-loaded sentences cover action, constraints, and required procedure without repetition. No filler content; every sentence adds operational value.

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

Completeness4/5

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

For a simple destructive tool with one required parameter sesami, the description covers purpose, side effects (file deletion), preconditions (status), and workflow (get_document first, user confirmation). It does not mention error cases or permissions, but given the low complexity and rich annotations, the operational picture is sufficiently complete.

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?

The schema already fully describes the single documentId parameter with 100% coverageikuha. The description adds indirect context by saying to call get_document first, but it doesn't explain how documentId is validated, formatted, or whether it could be a list. It stays at the baseline for parameter understanding.

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 opens with a specific verb and resource: 'Permanently delete a document.' It also clarifies what is deleted ('the associated file') and the irreversible nature, making the tool's exact purpose unambiguous even without seeing the tool name.

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?

Provides explicit when-to-use conditions: only documents with status 'completed' or 'revoked' can be deleted. It also specifies a required workflow: call get_document first and ask the user for confirmation. It does not explicitly name sibling tools like delete_draft or revoke_document as alternatives, but the workflow guidance is clear and actionable.

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

delete_draftDelete DraftA
DestructiveIdempotent
Inspect

Permanently delete a draft and its associated draft data. Both active and expired drafts can be deleted. Always call get_draft first, show the user a summary, and ask for confirmation — deletion is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftIdYesUnique identifier of the draft to delete

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description doesn't contradict them. It adds valuable context: 'Permanently delete' reinforces irreversibility, 'associated draft data' clarifies the scope, and 'both active and expired drafts' specifies allowed inputs. The description complements the annotations without redundancy.

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?

Two sentences with no wasted words. The core action and scope are front-loaded, followed by the critical usage guideline. Highly efficient and easy to parse.

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

Completeness4/5

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

The tool has one parameter and no output schema, so the description covers the essential aspects: what it deletes, scope (active/expired), prerequisite (get_draft), and irreversibility. It could mention error handling or return values, but given the simplicity and annotation coverage, it is adequately complete.

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?

The schema covers draftId with 100% coverage, describing it as 'Unique identifier of the draft to delete'. The description doesn't add meaning beyond what the schema provides, so the baseline of 3 applies. It reinforces the draft context but doesn't introduce new parameter details.

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 ('delete') and resource ('draft'), and clarifies it covers both active and expired drafts. Clearly distinguishes from sibling delete tools (delete_document, delete_file, delete_webhook) by specifying 'draft' and its associated data.

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?

Provides explicit usage instructions: always call get_draft first, show a summary, and ask for confirmation. This establishes the proper workflow and implies deletion is a user-initiated action after review. However, it does not explicitly state when not to use this tool versus alternatives, though the draft-specific context is clear.

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

delete_fileDelete FileA
DestructiveIdempotent
Inspect

Delete a previously uploaded file. The file must not be attached to an active document — one whose status is created or awaiting_signatures.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdYesUnique identifier of the file to delete

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds a meaningful precondition: deletion is not permitted when the file is attached to a document in created or awaiting_signatures status. This goes beyond the structured hints and helps an agent predict failure conditions.

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?

Two tight sentences front-load the operation and immediately state the critical constraint. No filler or redundant restatement of the schema.

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

Completeness4/5

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

For a simple single-parameter deletion tool, the description plus annotations cover destructiveness, idempotencyholmes? wait annotations include idempotentHint true, destructive true. It includes the only important precondition. It doesn't specify permanence or failure behavior, but the schema/annotations carry the rest. Minor gap around what happens if the condition is violated.

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%; fileId is described in the schema. The description only restates that the file was previously uploaded, adding no deeper semantic detail about the identifier.

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 operation ('Delete a previously uploaded file') and identifies the resource (file), distinguishing it from sibling document/draft/webhook deletion tools. The status constraint adds specificity without ambiguity.

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 explicitly provides a usage condition: do not delete files attached to active documents, listing the statuses that make a document active. This is clear context for when deletion is disallowed, though it doesn't explicitly name an alternative tool for other resources.

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

delete_templateDelete TemplateA
DestructiveIdempotent
Inspect

PERMANENTLY deletes a template and the files only it was using. This cannot be undone — always confirm with the user first, naming the template. Documents already created from the template are NOT affected, and a PDF still used by a document or another template is left in place. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateIdYesUnique identifier of the template to delete

TDQS

A4.5/5.0
Behavior5/5

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

The annotation already flags destructiveHint and readOnlyHint, but the description adds critical behavior beyond that: permanent deletion, confirmation requirement, cascading file deletion only for files the template exclusively used, and preservation of documents and PDFs still in use. This fully discloses the destructive footprint.

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 compact yet information-dense, with the most critical fact (permanent deletion) at the start. Every sentence adds value: irreversibility, confirmation requirement, ownership, and non-destructive edge cases.

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 single-parameter tool, this is complete. It covers cancellation semantics, permission level, irreversible consequences, and what is and is not affected. No output schema exists, but none is needed for a tool whose job is simply to delete.

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% for the single templateId parameter, so the schema already documents the parameter. The description references naming the template during confirmation but does not add API-level parameter semantics beyond what the schema provides, matching the baseline for full coverage.

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 states a specific verb ('deletes'), resource ('template'), and scope ('files only it was using'), making it easy to distinguish from sibling tools like delete_document or delete_file. The permanence is front-loaded, so an agent immediately understands what this tool does.

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 operational guidance: confirm with the user first, name the template, and note that this is owner-only. It does not explicitly name sibling alternatives, but the tool's purpose and preconditions make when to use it clear.

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

delete_webhookDelete WebhookA
DestructiveIdempotent
Inspect

Delete a registered webhook. Event delivery stops immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
webhookIdYesUnique identifier of the webhook to delete

TDQS

A4.2/5.0
Behavior4/5

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

Even though annotations indicate destructive and idempotent behavior, the description adds a meaningful operational consequence: event delivery stops immediately. This helps the agent understand the real-world effect of the call. No contradiction with 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 short, front-loaded sentences with no filler, repeated information, or schema duplication. It covers action and consequence concisely.

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

Completeness4/5

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

For a single-parameter tool, the description plus schema is sufficient to know what to pass and what happens. It could have mentioned that the webhook ID can be found via list_webhooks, but this is not necessary for correct invocation.

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?

The only parameter, webhookId, is fully described in the schema (type string, required, description 'Unique identifier of the webhook to delete'). The tool description adds no additional parameter semantics, so it does not exceed the baseline set by the schema.

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 uses a specific verb ('Delete') and a specific resource ('a registered webhook'), and the added consequence 'Event delivery stops immediately' makes the tool's purpose unmistakable and differentiates it from sibling delete tools like delete_document or delete_file.

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 provides clear context for when to use the tool: remove an existing webhook and immediately halt event delivery. It doesn't explicitly mention alternative operations or edge cases, but for a single-purpose delete tool the usage context is unambiguous.

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

duplicate_documentDuplicate DocumentAInspect

Copy a sent document's configuration — file, signature fields, signees, language, sharing and AI assistant — into a NEW DRAFT. The source document is untouched. This returns draftId, not documentId, and NOTHING IS SENT. That is deliberate: re-sending a contract to the same people on a single click is rarely what anyone wants, and a copy almost always needs an edit first. Review it, adjust with update_draft, then send with send_draft. Costs nothing here — the signature charge happens when the draft is sent, exactly as for any other draft. Signature progress is never copied: every field in the copy starts unsigned. Payment requirements on the source ARE carried over. A draft cannot be duplicated with this tool — use duplicate_draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the copy. Defaults to the source's name.
userIdNoAssign ownership of the copy to a different user within the same account.
documentIdYesUnique identifier of the document to copy

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only state readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description carries the burden of side-effect disclosure. It clearly explains that the source is untouched, nothing is sent, signature progress is not copied, payment requirements are carried over, and charges only occur when the draft is sent. These details go well beyond the annotations and prevent major misuses.

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?

Although longer than typical descriptions, every sentence earns its place by conveying operation, side effects, return value, workflow, billing behavior, signature progress, and exclusions. It is front-loaded with the core purpose and avoids vague filler, making the length justified and useful.

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?

With no output schema, the description compensates by stating that the return value is draftId, not documentId. It covers the full scope of copied configuration, what is not copied, billing implications, workflow next steps, and the draft-duplication exclusion, giving an agent enough context to invoke the tool correctly.

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?

The input schema covers all three parameters with descriptions (100% coverage), so the baseline is 3. The description adds useful context that documentId refers to a sent document and that the output is a draft, but it does not materially deepen parameter-level semantics beyond what the schema already provides.

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 states the operation explicitly: copying a sent document's configuration into a NEW DRAFT, listing exactly which aspects are copied. It also distinguishes itself from duplicate_draft by explicitly stating that drafts cannot be duplicated with this tool, and clarifies that it returns draftId rather than documentId.

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?

The description provides explicit when-to-use context and workflow guidance: review the copy, adjust with update_draft, then send with send_draft. It also gives a clear exclusion and alternative: 'A draft cannot be duplicated with this tool — use duplicate_draft.'

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

duplicate_draftDuplicate DraftAInspect

Copy a draft into a new draft, leaving the original untouched. Useful for building several similar documents from one prepared starting point. Costs nothing — nothing is sent until send_draft is called on the copy. Payment requirements on the source are carried over.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the copy. Defaults to the source's name.
userIdNoAssign ownership of the copy to a different user within the same account.
draftIdYesUnique identifier of the draft to copy

TDQS

A3.9/5.0
Behavior4/5

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

Annotations provide no safety hints (all false), so the description carries the burden of disclosure. It adds key behavioral facts: the original is untouched, no sending occurs until send_draft is called, and payment requirements carry over. This goes beyond what annotations state.

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?

Three sentences, each serving a distinct purpose: the core action, the recommended use case, and cost/side-effect notes. The most important information is front-loaded, with 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?

For a simple tool with 3 parameters and no output schema, the description covers the main effect and side effects well. However, it does not state what the function returns (e.g., the new draft's ID or object), which is important for an agent to reference the copy afterward. This gap is notable given no output schema to fill it.

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 all parameters (name, userId, draftId) are documented in the schema. The description adds no parameter-specific semantics beyond the schema, so it meets the baseline but does not enhance it.

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 states a specific action and resource: 'Copy a draft into a new draft, leaving the original untouched.' This clearly distinguishes it from sibling duplicate tools for other resources (document, link, template) by naming the resource type explicitly.

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

Usage Guidelines3/5

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

The description provides a use case ('Useful for building several similar documents from one prepared starting point') but does not explicitly state when not to use it or contrast it with alternatives like create_draft or duplicate_document. Guidance is present but limited.

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

duplicate_templateDuplicate TemplateAInspect

Copy a template, leaving the original untouched. The copy belongs to whoever duplicated it, so this is also how you take your own private copy of a template a colleague shared with the account. Duplicating a template is free — unlike duplicating a public link.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the copy. Defaults to the source's name, which leaves you with two templates of the same name — usually worth setting.
templateIdYesUnique identifier of the template to copy

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only say the operation is not read-only and not destructive; the description adds meaningful behavioral context: the original is untouched, the copy belongs to the duplicator, and template duplication is free. It does not mention return values or side effects, but it enriches the sparse annotations without contradicting them.

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?

Three short sentences, each earning its place: the core operation, ownership semantics and use case, and a pricing distinction from a sibling behavior. The key verb and object are front-loaded; there is no filler.

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

Completeness4/5

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

For a simple two-parameter action with no output schema, the description covers what the tool does, the key behavioral nuances, and a relevant alternative. It could add what the caller should expect back (e.g. the new template's ID), but the action is simple enough that the current description is nearly sufficient.

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 schema already names and explains both parameters, including the caveat that name defaults to the source's name. The description itself does not add parameter-level detail, but it does not need to given the schema's coverage.

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 opens with a specific verb and resource: 'Copy a template, leaving the original untouched.' It clearly distinguishes this from duplicate_document, duplicate_draft, and duplicate_link by focusing on templates and even notes that duplicating a public link behaves differently.

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 concrete usage context: it is the way to make a copy and the way to take a private copy of a colleague-shared template. It also hints at an alternative by contrasting template duplication with public-link duplication, though it does not explicitly say 'use duplicate_link instead for public links.'

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

get_account_capabilitiesGet Account CapabilitiesA
Read-onlyIdempotent
Inspect

Check which features are enabled for the account (e.g. BankID, templates, AI assistant). The signature-method flags (signatureBankId, signatureIdScan, signatureFaceLiveness) only say which methods the account may select; the verification itself is performed by Formify's signing page, and no identity data passes through this API.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable behavior beyond annotations by explaining the semantics of returned fields (signatureBankId, signatureIdScan, signatureFaceLiveness) and disclosing that no identity data passes through the API. This privacy/security context is not present in the annotations and helps set correct expectations.

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 purpose, and the second sentence adds a crucial caveat. There is no redundant or filler content; every sentence earns its place.

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

Completeness4/5

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

Given zero parameters, annotations for safety, and no output schema, the description is nearly complete: it states what the tool returns, gives examples, and highlights a non-obvious caveat about signature flags. The only minor gap is not specifying the response format, but that is not essential for such a simple capability check.

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

Parameters4/5

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

The tool has zero parameters and an empty schema, so there is nothing to clarify at the parameter level. The description instead clarifies response semantics (capability flags), which is the only useful extra context. A baseline of 4 is appropriate for a no-parameter tool.

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 states a specific verb ('Check') and resource ('account capabilities'), and gives concrete examples (BankID, templates, AI assistant). It also clarifies the meaning of the signature-method flags, which distinguishes this tool from other account-related getters in the sibling list.

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 clearly indicates this is for checking enabled features and importantly explains that the signature flags only indicate selectable methods, not actual verification. It implicitly tells an agent that identity verification is not done through this API, providing a clear boundary, though it does not name alternative tools explicitly.

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

get_account_usersGet Account UsersA
Read-onlyIdempotent
Inspect

List all users on the account, including pending invitations. Returns userId for each user, which can be passed to create_document's userId parameter to assign document ownership.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only/idempotent safety. The description adds beyond annotations: the result includes pending invitations and returns a userId per user, giving the agent useful behavioral expectations for a parameterless list call.

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?

Two crisp sentences. The core action and inclusion criteria are front-loaded, followed by a single high-value usage pointer. No filler or redundancy.

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

Completeness4/5

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

For a zero-parameter read tool, the description covers what is returned, the scope (all users including pending invitations), and one important downstream use. It is missing nothing critical for an agent to call it correctly.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description adds no parameter detail (none needed) but does hint at how the returned userId will be consumed elsewhere, which is mildly useful.

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

Purpose4/5

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

Clear verb+resource: 'List all users on the account, including pending invitations.' It precisely describes scope but does not explicitly contrast with sibling tools like get_current_user, so it stops short of a 5.

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?

Provides a concrete use context: the returned userId can be used in create_document for ownership assignment. It does not explicitly state when not to use this tool or mention alternatives, but the guidance given is clear and actionable.

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

get_current_userGet Current UserA
Read-onlyIdempotent
Inspect

Get information about the currently authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds minimal behavioral context beyond 'get information,' but for a simple read-only operation with no parameters, this is acceptable. No contradiction with 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 a single, clear sentence with no wasted words. It is appropriately sized for a simple, parameterless read operation.

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

Completeness4/5

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

For a zero-parameter, read-only tool with annotations covering safety and idempotency, the description is nearly complete. It doesn't specify the exact fields returned, but no output schema exists and the tool's purpose is simple enough that an agent can infer the return value will contain user details.

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

Parameters4/5

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

The tool has zero parameters, so the schema provides no parameter semantics to clarify. The description correctly indicates no inputs are needed, which is sufficient. Baseline 4 for zero-parameter tools is appropriate.

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

Purpose4/5

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

The description clearly states the tool's function: retrieving information about the currently authenticated user. It uses a specific verb ('Get') and resource ('current user'), and while it doesn't explicitly differentiate from siblings, its unique focus on the authenticated user distinguishes it from other get_* tools.

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

Usage Guidelines3/5

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

The description implies usage context—when you need details about the authenticated user—but does not explicitly state when to use this tool versus alternatives. There are no exclusions or alternative tool mentions, but the zero-parameter design makes the intended use fairly obvious.

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

get_documentGet DocumentA
Read-onlyIdempotent
Inspect

Get detailed status and metadata for a specific document, including per-signee signing status. The document status is exactly one of: created (created and ready), processing (the AI assistant is still preparing it), error (processing failed), awaiting_signatures (one or more signees have not signed yet), completed (all signees have signed), revoked (cancelled), deleted. Each entry in signeeDetails carries signeeId, signatureStatus (either awaiting_signature or signed — note the field is signatureStatus, not status), reminders.reminderCooldown (seconds left before another reminder may be sent, 0 when allowed now) and updates.updateCooldown (seconds left before contact details may be changed again, 0 when allowed now).

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesUnique identifier of the document

TDQS

A4.1/5.0
Behavior5/5

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

The description goes well beyond the readOnly/idempotent annotations by enumerating the full document status enum and describing signeeDetails fields, including the important signatureStatus naming distinction and cooldown semantics. It also explains field values precisely, which is valuable without an output schema.

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 purpose is front-loaded in the first sentence, and the subsequent detail is dense but relevant. Enum values and field paths are clearly formatted, and the nested cooldown explanations earn their place because there is no output schema to document them.

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?

Without an output schema, the description carries the full burden of explaining the response contract. It covers all status values, signeeDetails fields, signatureStatus values, and cooldown semantics, which is sufficient for an agent to call and interpret the tool correctly.

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%, and the sole parameter documentId is adequately described in the schema as 'Unique identifier of the document.' The description does not add parameter-specific semantics, but none are necessary given the complete schema coverage.

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 uses a specific verb ('Get') and resource ('specific document'), and specifies that it returns 'detailed status and metadata' plus 'per-signee signing status.' This distinguishes it from siblings like get_document_fields, get_draft, and list_documents without ambiguity.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus the many sibling tools, nor any mention of prerequisites or exclusions. The usage context must be inferred entirely from the verb and the return description.

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

get_document_fieldsGet Document FieldsA
Read-onlyIdempotent
Inspect

Retrieve all form field definitions in a document. Each field has: name (use as key in API calls), label (display only), type (textField, checkbox, combobox, listbox, radioButton), required, readOnly (signee cannot edit), editable (API can update), options [{label, value}] for choice fields. Use this before calling set_document_field_values. For already filled values, use get_document_field_values instead. Value format rule: ONLY textField and radioButton take a plain string. ALL other types (checkbox, combobox, listbox) MUST be an array — even for a single value like ["Beginner"].

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesUnique identifier of the document

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds valuable context beyond those annotations: field type semantics, the readOnly meaning, and the value format rule (string vs array). No contradiction with 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?

Front-loaded with the core purpose, then each subsequent sentence adds necessary operational detail: field structure, usage ordering, alternative tool, and a critical value-format rule. No filler.

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?

With no output schema, the description compensates well by enumerating returned field properties and their meanings, plus the value format caveat. This is complete enough for an agent to invoke the tool and interpret its result.

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?

The only parameter, documentId, is fully covered by the schema description ('Unique identifier of the document'), so the 100% schema coverage gives a baseline of 3. The tool description adds no extra parameter detail, but none is needed.

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 'Retrieve all form field definitions in a document' uses a specific verb and object, and immediately distinguishes itself from sibling get_document_field_values by noting this tool returns field definitions, not filled values.

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?

Explicitly states to call this before set_document_field_values, and points to get_document_field_values for already-filled values. This gives the agent clear selection and sequencing guidance.

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

get_document_field_valuesGet Document Field ValuesA
Read-onlyIdempotent
Inspect

Retrieve the current values of all form fields in a document. Works on documents in any status. For field definitions and types, use get_document_fields instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesUnique identifier of the document

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the behavioral detail that it works on documents in any status, which is not present in the annotations. This is useful context beyond what the structured fields provide. No contradiction with 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 three short sentences with no redundant information. The core purpose is front-loaded, followed by the status note and the sibling distinction. Every sentence earns its place, making it easy for an agent to quickly parse the essential information.

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 simple read-only tool with one parameter and no output schema, this description is complete. It covers the purpose, status flexibility, and sibling differentiation. Annotations already handle the safety profile, and the return format is implicitly understood from the purpose (current field values). Nothing essential is missing for an agent to call this tool correctly.

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?

The schema describes the single parameter documentId with 'Unique identifier of the document', providing 100% coverage. The description adds no additional parameter semantics, but since the schema fully covers the parameter, the baseline score of 3 applies. The description doesn't need to repeat what the schema already states.

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 verb 'retrieve' and the resource 'current values of all form fields in a document'. It explicitly differentiates from the sibling tool get_document_fields by noting that for field definitions and types, that tool should be used instead. This unambiguous purpose makes the tool easy to distinguish from its siblings.

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?

The description provides explicit guidance on when to use this tool: when you need current field values, and it works on documents in any status. It also explicitly names the alternative tool (get_document_fields) and the condition under which it should be used instead ('for field definitions and types'). This leaves no ambiguity about tool selection.

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

get_draftGet DraftA
Read-onlyIdempotent
Inspect

Get full draft details, including saved signee details, signature placements, form field values, invitation settings, and AI assistant configuration. Always call this before update_draft, send_draft, or delete_draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftIdYesUnique identifier of the draft

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering the safety profile well. The description adds value beyond annotations by enumerating what data the draft details include and by disclosing the prerequisite relationship to mutation tools. No contradiction with annotations; the description adds meaningful context on top of a strong annotation baseline.

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

Conciseness4/5

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

Two sentences with zero filler. The purpose and content scope are front-loaded in the first sentence, and the sequencing instruction follows in the second. It's appropriately sized for the tool's simplicity, though the enumeration is slightly long-winded.

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

Completeness4/5

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

For a simple read tool with one parameter, strong annotations covering safety, and no output schema, the description is nearly complete. It discloses the returned content and the usage prerequisite. The only minor gap is no explicit statement about what a not-found draftId returns, but this is acceptable given the tool's simplicity.

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% with a single parameter (draftId) fully documented in the schema, so the baseline is 3. The description doesn't add parameter-specific detail beyond the schema, but none is needed for a single well-documented ID parameter. The description's content enumeration indirectly explains what the ID resolves to, which is adequate.

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 uses a specific verb ('Get') with a clear resource ('draft details') and enumerates the exact content returned: saved signee details, signature placements, form field values, invitation settings, and AI assistant configuration. This specific enumeration clearly distinguishes it from sibling tools like get_draft_file, get_draft_file_url, and list_drafts.

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 second sentence gives explicit when-to-use guidance: 'Always call this before update_draft, send_draft, or delete_draft.' This is strong sequencing instruction. It doesn't state explicit exclusions (e.g., 'for a list of drafts use list_drafts'), but the enumeration of content plus the mutation-prerequisite guidance provides clear context for selecting this tool.

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

get_draft_fileGet Draft FileA
Read-onlyIdempotent
Inspect

Get a PDF preview of the draft with signature fields rendered at their configured coordinates, returned as an embedded resource (base64 PDF) plus filename and size metadata. Use this when the MCP client can render PDFs inline in the conversation. If the client only supports clickable links, use get_draft_file_url instead. Fields without valid coordinates (page, x, y) are not rendered in the PDF but remain in the draft data. The draft must still have status draft and must not be expired. Authenticated via the session Bearer token.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftIdYesUnique identifier of the draft to preview

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark readOnly/idempotent, and the description adds substantial behavioral detail: output encoding (base64 PDF), associated metadata, rendering scope only for fields with valid coordinates, exclusion of invalid fields from the PDF, draft-status/expiry constraints, and Bearer-token authentication. No contradiction with 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 compact and every sentence earns its place: output format, sibling routing, rendering edge case, and prerequisites/auth. It is front-loaded and gives the agent the most decision-relevant information first.

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?

Even with no output schema, the description fully explains return values (base64 PDF, filename, size), rendering edge cases, usage conditions, and authentication. The single required parameter is fully documented, and the sibling-routing guidance is explicit, making the description sufficient for correct invocation.

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 coverage is 100% and the only parameter, draftId, is already clearly described in the schema as 'Unique identifier of the draft to preview'. The description does not add syntax, format, or parameter-specific nuances beyond this; its added text is about the draft/resource behavior, not the parameter semantics.

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?

Clearly states the tool returns a PDF preview with signature fields rendered at their configured coordinates, as an embedded resource plus filename and size metadata. It also explicitly contrasts with get_draft_file_url, making the purpose and distinction unmistakable.

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?

Explicitly says when to use this tool (when the MCP client can render PDFs inline) and when to use get_draft_file_url instead (when only clickable links are supported). It also establishes prerequisites—draft must still be status draft and must not be expired—so an agent can pre-check validity before invoking.

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

get_draft_file_urlGet Draft File URLA
Read-only
Inspect

Get a short-lived, one-time-use download URL for a PDF preview of the draft with signature fields rendered at their configured coordinates. Returns JSON with downloadUrl + fileName + mimeType + expiresInMinutes. The user opens the URL in a browser; no Authorization header is required. Use this when the MCP client should hand the user a clickable link. If the client can render PDFs inline, prefer get_draft_file (returns the PDF as an embedded resource via the session Bearer token). Typical preview flow: create_draft → get_draft_file_url (or get_draft_file) → user reviews PDF → (optional update_draft and re-fetch) → send_draft. Fields without valid coordinates (page, x, y) are not rendered in the PDF but remain in the draft data. The URL expires after 10 minutes and is consumed on successful download. The draft must still have status draft and must not be expired.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftIdYesUnique identifier of the draft to preview

TDQS

A4.7/5.0
Behavior5/5

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

Discloses important behavior beyond annotations: the URL is short-lived, one-time-use, expires after 10 minutes, is consumed on download, requires no Authorization header, and only works while the draft is still in draft status and not expired. It also explains that fields without valid coordinates are omitted from the rendered PDF but remain in draft data. This adds substantial operational context beyond the readOnlyHint annotation.

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 detailed but every sentence contributes distinct useful information: purpose, return payload, auth requirement, usage guidance, workflow integration, rendering caveat, and constraints. It is front-loaded with the core purpose and then provides necessary operational context without redundancy.

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 single-parameter tool with no output schema, the description fully covers return values, expiry behavior, authentication, prerequisites, and sibling differentiation. The mention of the typical preview flow also makes the tool's role in a larger process clear and sufficiently complete.

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 coverage is 100%, so the draftId parameter is already fully described in the schema. The description adds contextual constraints such as draft status and expiry but does not add new parameter-level semantics. Baseline 3 is appropriate given complete schema coverage.

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: 'get a short-lived, one-time-use download URL for a PDF preview of the draft.' It clearly distinguishes itself from get_draft_file by describing the URL-based output and the condition under which each tool is appropriate.

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?

Explicitly says when to use this tool ('when the MCP client should hand the user a clickable link') and when to prefer an alternative ('If the client can render PDFs inline, prefer get_draft_file'). It also provides a typical preview flow with related tools, leaving no ambiguity about placement in a workflow.

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

get_file_fieldsGet File FieldsA
Read-onlyIdempotent
Inspect

Retrieve all form fields in an uploaded PDF file before creating a document from it. Call this after upload_file to discover fields that can be pre-filled. Value format rule: ONLY textField and radioButton take a plain string. ALL other types (checkbox, combobox, listbox) MUST be an array — even for a single value like ["Beginner"].

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdYesUnique identifier of the uploaded file (from upload_file)

TDQS

A4/5.0
Behavior3/5

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

Annotations already cover read-only and non-mutating behavior. The description adds a useful value-format caveat for later pre-filling, but does not disclose any additional behavioral traits of this operation beyond what the annotations imply.

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?

Three short, purposeful sentences. The core action and timing are front-loaded, and the value-format warning is compact and relevant.

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

Completeness4/5

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

Given the simple read-only nature and the lack of an output schema, it communicates what is returned ('all form fields') and why the agent should use it. It does not spell out the exact return structure, but the purpose is clear.

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?

The schema already explains fileId as the uploaded file identifier. The description reinforces that it refers to an uploaded PDF, but does not add substantial meaning beyond the input schema.

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?

Clearly states the action ('Retrieve all form fields'), the resource ('a PDF file'), and the stage in the workflow ('before creating a document from it'). This distinguishes it from related field/pre-fill operations.

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?

Explicitly tells the agent when to call this function: after upload_file and before document creation. It could name alternatives or conditions where it should not be used, but the workflow context is solid.

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

get_signed_document_urlGet Signed Document URLA
Read-onlyIdempotent
Inspect

Get a download URL for a completed (signed by all parties) document. The URL is valid for 10 minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesUnique identifier of the completed document

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavior beyond that: the URL expires after 10 minutes and the document must be complete/signed by all parties. This gives agents actionable expectations without contradicting 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 short sentences with no filler. It front-loads the core purpose and adds only the important operational detail (10-minute validity), making it easy for an agent to parse quickly.

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 simple one-parameter read-only tool with strong annotations, the description is complete: it names the exact precondition, the resource, and the expiry behavior. An agent has all the information needed to invoke it correctly.

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?

With 100% schema coverage for the single parameter, the schema already describes documentId fully. The description does not add new parameter-level semantics beyond confirming the document is completed, so the baseline of 3 is appropriate.

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 a specific verb and resource ('get a download URL') and narrows it with a precise condition ('completed signed by all parties document'). It also adds the URL validity window, which helps distinguish this from other fetch/list siblings.

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 clearly implies when to use the tool: only for documents that are fully signed and completed. It does not explicitly name alternatives or exclusions, but the phrase 'completed (signed by all parties)' provides a clear contextual condition that guides selection.

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

get_templateGet TemplateA
Read-onlyIdempotent
Inspect

Get details for a specific template. Returns the template's name, number of signees, and each signee's pre-configured signature settings (signatureType, signaturePlacement, signatureBox). Always call get_template_fields immediately after this — before collecting signer details or creating the document.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateIdYesUnique identifier of the template

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds value by specifying the exact return content and mandating a follow-up call, which is behavioral context beyond annotations. No contradictions exist.

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 with no redundant phrasing. The purpose and return list are front-loaded, and the critical next-step instruction follows directly. Every word earns its place.

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

Completeness4/5

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

With only one parameter and no output schema, the description covers the return payload and the mandatory next step, which is sufficient for correct invocation. It doesn't mention error conditions or response formatting, but these are minor given the tool's simplicity and the read-only annotations.

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?

The schema fully documents the single parameter templateId with a clear description ('Unique identifier of the template'), giving 100% coverage. The tool description adds no additional parameter-level meaning, so it relies on the schema as the baseline.

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 verb and resource ('Get details for a specific template') and enumerates the returned fields (name, number of signees, and each signee's signature settings). This distinguishes it from siblings like list_templates and get_template_fields, which have different scopes.

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?

The description gives explicit usage guidance: 'Always call get_template_fields immediately after this — before collecting signer details or creating the document.' This tells the agent when and in what sequence to use this tool, effectively routing it to the correct sibling.

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

get_template_fieldsGet Template FieldsA
Read-onlyIdempotent
Inspect

Always call this immediately after get_template — before collecting signer details. Reveals whether the template has form fields the user can pre-fill. Each field has: name (key for API calls), label (display only), type (textField, checkbox, combobox, listbox, radioButton), editable (can be pre-filled via API), readOnly (signee cannot edit), options [{label, value}] for choice fields. If any fields have editable: true, ask the user whether to pre-fill them now (values locked for signer) or leave for the signer. Value format rule: ONLY textField and radioButton take a plain string. ALL other types (checkbox, combobox, listbox) MUST be an array — even for a single value like ["Beginner"]. Never pass an empty string for text fields — omit the field instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateIdYesUnique identifier of the template

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description goes beyond this by detailing the field structure (name, label, type, editable, readOnly, options), explaining the decision to pre-fill, and the value formatting rules (string vs array, omit empty strings). This adds substantial behavioral context that annotations do not cover.

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 front-loaded with the critical usage instruction ('Always call this immediately after get_template'), then systematically explains the field properties, the conditional action, and the value format rule. Every sentence adds essential information without redundancy, making it well-structured and efficient.

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?

Given there is no output schema, the description fully explains the return structure (field attributes) and how to interpret it for subsequent actions. It covers the workflow (pre-fill decision), value format rules, and edge cases (omit empty strings). Nothing an agent needs to call and use the tool correctly is missing.

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?

The schema already documents the only parameter templateId with a description ('Unique identifier of the template'), achieving 100% coverage. The description does not add new semantic details about the parameter itself, though it implies the templateId comes from get_template. Since schema coverage is high, the baseline of 3 is appropriate.

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 tool reveals whether a template has pre-fillable form fields, with a specific verb ('reveals') and resource ('template fields'). It is implicitly distinguished from sibling tools like get_document_fields and get_file_fields by the context of 'template' and the instruction to call it after get_template, so an agent can select it correctly.

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?

The description explicitly says 'Always call this immediately after get_template — before collecting signer details', giving a precise timing and workflow context. It also provides conditional guidance on asking the user about pre-filling when editable fields exist, and states the value format rule for different field types, which is essential for correct invocation.

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

list_documentsList DocumentsA
Read-onlyIdempotent
Inspect

List documents created by the user or shared within the account. PAGINATION: follow nextOffset until it is null. A page may return fewer items than limit and still not be the last — that is intended behaviour, so never stop at a short page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax documents to return (max 50, default 10)
offsetNoNumber of items to skip for pagination (default 0). Pass the nextOffset from the previous response; the list is exhausted only when nextOffset comes back null.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds critical pagination behavior: follow nextOffset until null, and never stop at a short page. This goes beyond the annotations and is essential for correct iteration.

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?

Two concise sentences: the first states the purpose and scope; the second delivers a crucial pagination warning. No fluff, front-loaded with the primary action, and every sentence earns its place.

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

Completeness4/5

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

For a list tool with no output schema, the description covers the essential behavior: scope and pagination protocol. It does not detail the response structure, but the pagination semantics imply nextOffset is in the response. The absence of an explicit output description is a minor gap, but overall the agent has enough to call it correctly.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for both limit and offset. The description adds context on how to use offset (pass nextOffset from the previous response) and clarifies when pagination ends (when nextOffset is null), enhancing the schema's basic parameter descriptions.

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 verb 'List' and the resource 'documents', with a specific scope ('created by the user or shared within the account'). This differentiates it from sibling tools like list_drafts, list_links, and list_templates, which target other resource types.

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

Usage Guidelines3/5

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

The description implies usage for listing documents but does not explicitly compare with alternatives such as list_drafts or list_links. It provides scope ('user or shared within the account') but no direct when-to-use vs. when-not-to-use guidance, leaving the agent to infer from the resource name.

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

list_draftsList DraftsA
Read-onlyIdempotent
Inspect

List draft documents with pagination. Drafts are saved document configurations that have not been sent for signing yet. Use get_draft to inspect a draft before updating, sending, or deleting it. PAGINATION: follow nextOffset until it is null. A page may return fewer items than limit and still not be the last — that is intended behaviour, so never stop at a short page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of drafts per page (1–50, default 10)
offsetNoNumber of items to skip for pagination (default 0). Pass the nextOffset from the previous response; the list is exhausted only when nextOffset comes back null.
userIdNoList drafts for a specific user within the same account. If omitted, lists the authenticated user's drafts.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the pagination contract (nextOffset until null), the fact that short pages are intentional and must not be treated as the end, and the default user scoping behavior. It doesn't describe the response shape, but with no output schema and a read-only list operation, the pagination behavior is the most important behavioral disclosure and it is present.

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 compact and front-loaded: the core action ('List draft documents with pagination') comes first, followed by a one-sentence definition of drafts, a routing pointer to get_draft, and a clearly marked PAGINATION section. Every sentence earns its place, and the critical pagination warning is highlighted with a label.

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

Completeness4/5

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

For a read-only list tool with 100% schema coverage and annotations covering safety, the description is nearly complete. It covers the core action, the draft concept, the sibling to use for inspection, and the pagination contract. The only minor gap is that it doesn't describe the response envelope (e.g., that the response contains drafts and nextOffset), but the pagination instructions strongly imply it, and the schema documents the offset parameter. This is a minor gap, not a blocking one.

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 schema already documents all three parameters (limit, offset, userId) with descriptions. The description adds the pagination protocol ('follow nextOffset until it is null') and the short-page warning, which complements the offset parameter description. However, it doesn't add meaning beyond what the schema provides for limit and userId. Baseline 3 is appropriate when the schema does the heavy lifting.

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 states a specific verb and resource ('List draft documents') and clearly distinguishes drafts from sent documents by defining them as 'saved document configurations that have not been sent for signing yet.' This differentiates list_drafts from siblings like list_documents and list_templates without needing to inspect schemas.

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?

The description explicitly tells the agent when to use this tool versus alternatives: 'Use get_draft to inspect a draft before updating, sending, or deleting it.' It also provides a clear pagination protocol with an explicit stopping condition ('follow nextOffset until it is null') and a warning about short pages, which is exactly the kind of usage guidance an agent needs.

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

list_templatesList TemplatesA
Read-onlyIdempotent
Inspect

List all available signing templates. Present results as a short scannable list of template names only — hide IDs and metadata from the user. PAGINATION: follow nextOffset until it is null. A page may return fewer items than limit and still not be the last — that is intended behaviour, so never stop at a short page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax templates to return (max 50, default 10)
offsetNoOffset for pagination (default 0). Pass the nextOffset from the previous response; the list is exhausted only when nextOffset comes back null.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the presentation rule (hide IDs/metadata from the user) and the critical pagination behavior (short pages are not necessarily the last; follow nextOffset until null). This is exactly the kind of non-obvious behavior an agent needs to know.

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?

Three sentences, each earning its place: the first states the core action and presentation rule, the second gives the pagination rule, and the third explains the non-obvious short-page behavior. The most important operational guidance is front-loaded.

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

Completeness4/5

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

For a read-only list tool with 100% schema coverage and no output schema, the description covers the essential behavior: what to list, how to present it, and how to paginate. The only minor gap is that it doesn't describe the response shape, but since there is no output schema and the tool is simple, the description is nearly complete.

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 schema already documents both parameters (limit and offset) with descriptions including defaults and the nextOffset instruction. The description reinforces the pagination semantics but does not add meaning beyond what the schema provides. Baseline 3 is appropriate.

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 states a specific verb and resource ('List all available signing templates') and adds a clear presentation directive (show only names, hide IDs/metadata). It is easily distinguished from siblings like list_documents or list_drafts by the resource named in the first sentence.

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 for when to use the tool: when listing all available signing templates. It does not explicitly name alternatives or exclusions, but the sibling list makes the resource distinction clear, and the pagination guidance is strong. A small deduction for not explicitly saying 'use get_template for a single template's details'.

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

list_webhooksList WebhooksA
Read-onlyIdempotent
Inspect

List all registered webhooks for this account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds the 'for this account' scope, which is useful but does not disclose any additional behavioral traits such as return format, pagination, or error handling. It adds minimal value 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 a single concise sentence with no filler. It front-loads the action and scope, making it immediately clear and efficient.

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?

With no output schema, the description carries the burden of explaining return values, but it only states 'list all registered webhooks' without describing the structure or contents of the returned list. It does not mention potential empty results or any error conditions. For a trivial list tool this is adequate but not fully complete.

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

Parameters4/5

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

There are zero parameters, so the schema fully covers parameter semantics. The description adds no parameter information, but with no parameters, the baseline is 4. It does not need to compensate for any gaps.

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 states a specific verb 'list' and a clear resource 'webhooks' with an account scope, distinguishing it from sibling tools like register_webhook, delete_webhook, and rotate_webhook_secret. It is not a tautology and clearly identifies the action.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or references to sibling webhook tools. For a simple list operation the usage might be obvious, but the description itself offers no explicit or implied routing.

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

merge_filesMerge FilesAInspect

Merge 2–8 previously uploaded PDF files into a single file. Returns a new fileId for the merged result. The original files are kept. The first fileId in the array appears first (topmost pages) in the merged document — order matters.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the merged file including extension (e.g. 'combined-contract.pdf')
fileIdsYesFile IDs to merge (from upload_file), in the desired page order. The first ID becomes the first pages of the merged document.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate safety. The description adds valuable behavioral context: original files are kept, order matters, and a new fileId is returned. This goes beyond the schema and annotations, though it doesn't mention potential failure modes (e.g., unsupported file types) or rate limits.

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?

Three sentences, each earning its place: the action, the return value, and the critical ordering constraint. No fluff, no repetition of schema details. The most important behavioral note (order matters) is front-loaded in the final sentence.

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

Completeness4/5

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

For a tool with 2 parameters, 100% schema coverage, and no output schema, the description is nearly complete. It covers the input, the output (new fileId), the side effect (originals kept), and the ordering semantics. The only minor gap is that it doesn't describe the format of the returned fileId or any error conditions, but those are not essential for correct invocation.

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

Parameters4/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 meaning beyond the schema by explicitly stating that the first fileId appears first (topmost pages) and that order matters, reinforcing the array semantics. It also clarifies that 'name' should include the extension, which is already in the schema but reinforced. This is a modest but real addition.

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 states a specific verb ('Merge'), a resource ('previously uploaded PDF files'), and a concrete outcome ('into a single file'). It also distinguishes itself from siblings by specifying the input type (PDF files) and the result (a new fileId), which is not ambiguous with create_document or upload_file.

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 clearly implies when to use this tool: when merging 2–8 previously uploaded PDFs. It does not explicitly name alternatives or exclusions, but the context (sibling tools like upload_file, create_document) and the explicit 'previously uploaded' phrasing provide clear usage context. A small gap: it doesn't say 'use upload_file first if files aren't uploaded yet,' but that is reasonably implied.

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

register_webhookRegister WebhookAInspect

Register a new webhook to receive real-time document event notifications via HTTP POST.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFriendly name to identify this webhook
eventTypesYesEvent types to subscribe to
webhookUrlYesPublic HTTPS URL that will receive webhook POST requests

TDQS

A3.9/5.0
Behavior3/5

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

Annotations mark this as a safe, non-destructive operation (readOnlyHint=false, destructiveHint=false). The description adds that registration creates a webhook that receives document event notifications via HTTP POST, which is useful context. It does not disclose delivery guarantees, verification handshakes, or what the response contains, but the annotations lower the burden.

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?

A single, well-structured sentence states the action, object, purpose, and delivery mechanism without wasted words.

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?

For a simple create operation, the description plus schema and annotations cover the essentials. However, there is no output schema and the description omits practical invocation details such as URL validation expectations, auth implications, or what is returned after registration. This is adequate but not rich.

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 coverage is 100% and each parameter already has a clear description. The tool description does not add meaning beyond the schema, so the baseline of 3 applies.

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 names a specific verb ('Register'), a resource ('new webhook'), and the exact purpose ('receive real-time document event notifications via HTTP POST'). It is clearly distinct from lifecycle siblings like delete_webhook, list_webhooks, and rotate_webhook_secret.

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 a clear context for when to use the tool: creating a webhook to receive real-time event notifications over HTTP POST. It does not explicitly name alternatives such as listing or rotating existing webhooks, but the intended use case is reasonably clear and no exclusion criteria are needed for a creation endpoint.

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

request_file_upload_urlRequest File Upload URLAInspect

Stage an upload for a PDF that is attached to the conversation, for clients that can execute shell commands but cannot pass the file to a tool directly. Returns a presigned upload URL plus a ready-made curlCommand that streams the file to it. Only use this tool if you are able to run that command; if you cannot, skip it and call upload_file directly with fileReference (a file reference supplied by the host application), url (a PDF reachable over HTTPS) or file (base64) plus fileName. After calling this tool, run the returned curlCommand to upload the file. CRITICAL: wait for it to complete and return HTTP 200 before calling upload_file — the staged entry holds no bytes until then, and upload_file will fail. The upload URL expires in 10 minutes. Once the upload has succeeded, call upload_file with the returned uploadId. ONE AT A TIME: only one staged upload can be pending per user. Finish the current file (curl, then upload_file) before requesting the next — do not request several upload URLs up front, not even for files that will be merged. A request made while another upload is pending is refused with an error that repeats the pending uploadId and, while its file has not arrived yet, its curl command so you can finish it; that refusal is expected, not a server fault. If the curl command fails with a network, DNS, or 'host not in allowlist' error, the client's code-execution sandbox is blocking outbound requests to this server — do not retry the same command. Report what blocked it, then either fall back to upload_file with file (base64), or, if the client lets the user allow outbound domains for code execution (the setting lives in the client's code-execution or sandbox preferences), tell the user how to allow this server's domain there and retry once they have done so.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNameYesFilename with extension (e.g. 'contract.pdf')

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only convey that it is not read-only (readOnlyHint=false); the description carries the full burden and delivers richly. It discloses that the staged entry holds no bytes until curl completes, the 10-minute URL expiry, the single-pending-upload-per-user rule, the exact refusal behavior (repeating pending uploadId and curl command), and how to diagnose sandbox blocking (network/DNS/allowlist errors). This is well beyond what annotations provide.

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

Conciseness4/5

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

The description is long, but every sentence earns its place given the complex two-step protocol, fallback path, and error-handling rules. CAPS markers (CRITICAL, ONE AT A TIME) highlight the highest-stakes guidance, and the flow is mostly chronological. It is dense rather than padded, though a bit monolithic in structure.

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?

With no output schema, the description correctly explains what is returned (presigned URL, curlCommand, uploadId) and covers the full lifecycle: request, execute curl, wait for HTTP 200, call upload_file, one-at-a-time constraint, refusal handling, and fallback to direct upload. Nothing an agent needs to execute the tool correctly is missing.

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 coverage is 100% and there is only one parameter (fileName), so the schema already fully documents it. The description reinforces that the file is a PDF and ties the parameter to the attachment context, but it does not add meaningful new semantics beyond what the schema states. Baseline 3 is appropriate.

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 states a specific verb and resource ('Stage an upload for a PDF... Returns a presigned upload URL plus a ready-made curlCommand'), which clearly distinguishes it from the sibling upload_file. The scoping to shell-capable clients and the explicit mention of the two-step flow make the purpose unambiguous.

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?

Extremely explicit: it names the exact condition for use (can execute shell commands but cannot pass the file to a tool), the when-not path (skip and call upload_file with fileReference/url/file), the required follow-up order (run curl, wait for HTTP 200, call upload_file with uploadId), and the one-at-a-time constraint. No inference is required.

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

revoke_documentRevoke DocumentA
DestructiveIdempotent
Inspect

Revoke a document that has been sent for signing (only possible if not yet fully signed). Always call get_document first to confirm status, then show the user a summary and ask for confirmation — revoking is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesUnique identifier of the document to revoke

TDQS

A4.7/5.0
Behavior5/5

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

The description openly states that revoking is 'irreversible', which meaningfully supplements the annotations (destructiveHint=true, idempotentHint=true). It also discloses the conditional behavior based on signing status and mandates a confirmation step before invocation, giving the agent important behavioral context beyond the basic mutation flag.

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 compact, front-loaded with the core action and condition, and every sentence adds value. The prerequisite workflow is stated efficiently without unnecessary elaboration.

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 one-parameter destructive action with no output schema, the description covers the essential operational context: applicability condition, required pre-call, confirmation step, and irreversibility. Nothing critical is missing for an agent to invoke this tool correctly.

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?

The input schema fully documents the only parameter (documentId), so the description does not need to add parameter-level detail. Baseline of 3 applies because the parameter is already well-defined and there is no ambiguity about what the caller must provide.

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 uses a specific verb ('Revoke') and names the exact resource type ('a document that has been sent for signing'), which clearly distinguishes it from generic deletion or creation tools. It also embeds a key scoping condition ('only possible if not yet fully signed'), making the tool's purpose unambiguous among siblings like delete_document and send_draft.

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?

The description gives explicit when-to-use guidance: only for documents already sent for signing and only if not fully signed. It also prescribes a required prerequisite workflow ('Always call get_document first... then show the user a summary and ask for confirmation'), which is concrete and actionable for an agent.

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

rotate_webhook_secretRotate Webhook SecretA
Destructive
Inspect

Rotate the HMAC signing secret for a webhook. Returns the new secret. Update your webhook verification logic immediately after rotating.

ParametersJSON Schema
NameRequiredDescriptionDefault
webhookIdYesUnique identifier of the webhook

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description adds value by specifying the consequence: the old secret is invalidated and verification logic must be updated. This goes beyond the annotation by explaining the operational impact.

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 with zero waste. The core action and return value are stated first, followed by a critical operational instruction. Efficient and front-loaded.

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 simple one-parameter tool with no output schema, the description covers the action, the return value, and the essential post-action. Annotations cover the destructive nature, and no further information is needed for correct invocation.

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 coverage is 100% for the single parameter webhookId, and the description does not add any additional semantic detail beyond the schema's 'Unique identifier of the webhook'. Baseline 3 is appropriate as the schema carries the full burden.

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 states a specific verb ('rotate'), resource ('webhook'), and the exact attribute ('HMAC signing secret'). It also mentions the return value and a required post-action, clearly distinguishing it from sibling tools like register_webhook or delete_webhook.

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 explicitly instructs the user to update verification logic immediately after rotating, which implies the old secret becomes invalid. It does not explicitly state when to use this tool versus alternatives, but the context (sibling tools) makes it the only rotation option, and the instruction is clear.

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

send_draftSend DraftA
Destructive
Inspect

Convert a draft into a live document and send invitations. Always call get_draft first, verify every signee has fullName plus at least one contact method, verify required coordinates for existing placement and digital_ink_id_scan, show a summary, and ask for confirmation before calling this tool. If validation fails, the draft remains unsent.

ParametersJSON Schema
NameRequiredDescriptionDefault
draftIdYesUnique identifier of the draft to send

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark the tool as destructive, and the description adds valuable behavior: validation failure leaves the draft unsent, and confirmation is required before sending. This goes beyond the annotation's simple destructive hint.

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 front-loaded with the primary action, then gives concise but essential preconditions and failure behavior. Every sentence earns its place without unnecessary filler.

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

Completeness4/5

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

The description covers the key context for a destructive action: prerequisites, confirmation requirement, and failure behavior. It does not describe the success return value, but the absence of an output schema makes this less critical.

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 coverage for the single parameter draftId is 100%, with the schema already describing it as the unique identifier of the draft. The description adds no additional parameter-level meaning, so the baseline of 3 applies.

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 action ('Convert a draft into a live document and send invitations') with a specific verb and resource. This distinguishes it from sibling tools like create_draft, update_draft, and send_reminder.

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 explicit preconditions: call get_draft first, verify signees and coordinates, show a summary, and ask for confirmation. It does not explicitly name exclusions or alternatives, but the context for when to use the tool is clear.

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

send_reminderSend ReminderA
Destructive
Inspect

Send a signing reminder to one or more signees who have not yet signed. Always call get_document first. Two conditions decide who can be reminded: (1) the document status must be awaiting_signatures — any other status returns 403; (2) include only signees whose signatureStatus is awaiting_signature, never one whose signatureStatus is signed. Show who will be reminded and ask for confirmation before sending. Rate limit: max 2 reminders per signee per 60-minute rolling window, after which the API returns 429. signeeDetails[].reminders.reminderCooldown from get_document is the number of seconds left before the next reminder is allowed — check it before calling, and tell the user how long is left instead of retrying.

ParametersJSON Schema
NameRequiredDescriptionDefault
signeeIdsYesSignee IDs to remind (get these from get_document response)
documentIdYesUnique identifier of the document

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint false, destructiveHint true, openWorldHint true), the description discloses rate limiting (max 2 per 60 minutes, returns 429), the 403 response on wrong document status, and the meaning of signeeDetails[].reminders.reminderCooldown. This is detailed operational behavior that annotations do not provide.

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 information-dense but every sentence earns its place: main action, mandatory pre-call, two precise conditions, user-confirmation requirement, rate limit, and cooldown handling. It is structured with numbered conditions and code identifiers for clarity, and it front-loads the most important operational step ('Always call get_document first') immediately after the main action.

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 write tool with two parameters and no output schema, the description covers all essential context: preconditions, parameter sourcing, failure modes (403, 429), cooldown semantics, and user-interaction expectations. Nothing an agent needs to call this tool correctly appears to be missing.

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

Parameters4/5

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

The input schema already covers both parameters with 100% description coverage, so the baseline is 3. The description adds substantial meaning beyond the schema by explaining that signeeIds must be filtered to only awaiting_signature signees and that documentId must reference a document in awaiting_signatures status. This goes beyond the schema's 'Unique identifier of the document' and 'Signee IDs to remind', earning a 4 rather than a 3.

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 states a specific verb ('Send'), a resource ('signing reminder to one or more signees'), and the condition 'who have not yet signed.' It clearly distinguishes this tool from siblings like send_draft and update_signee, making its unique role obvious.

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?

It explicitly instructs 'Always call get_document first' and states the two preconditions (document status must be awaiting_signatures, signees must have signatureStatus awaiting_signature). It also provides a rule for user interaction ('Show who will be reminded and ask for confirmation') and a retry guideline with cooldown checking, leaving no ambiguity about when and how to invoke the tool.

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

set_document_field_valuesSet Document Field ValuesA
DestructiveIdempotent
Inspect

Update form field values on an already-created document. Only use this when values need to be added or corrected after the document was created — if you have the values upfront, pass them via create_document's fields parameter instead. Only works on editable fields before anyone has signed.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesFields to update
documentIdYesUnique identifier of the document

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the write and destructive nature (readOnlyHint=false, destructiveHint=true) and idempotency (idempotentHint=true). The description adds valuable behavioral context not in annotations: the tool only works before signing and only on editable fields, clarifying when an operation will fail. It does not detail the mutation semantics (e.g., whether existing values are overwritten), but annotations lower the burden.

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?

Two sentences with no filler: the primary purpose is first, followed by the usage condition, the preferred alternative, and the key limitation. Every sentence adds distinct value.

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

Completeness4/5

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

The description covers purpose, usage timing, alternative tool, and an important precondition. The schema fully documents parameter semantics. For a 2-parameter write tool with no output schema, this is nearly complete; the only minor gap is not stating what the response indicates about success.

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 input schema already documents both parameters and even gives detailed per-type value rules with examples. The description adds no parameter-level meaning, but with full schema coverage the baseline 3 applies.

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 states a specific action ('Update form field values on an already-created document') with a clear resource and distinguishes it from the read sibling get_document_field_values by framing this as a write operation. It also differentiates from create_document by explicitly targeting documents that already exist.

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?

The description gives explicit when-to-use guidance: only after document creation when values need to be added or corrected, and points to the preferred alternative (pass values upfront via create_document's fields parameter). It also states a hard constraint: 'Only works on editable fields before anyone has signed.'

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

update_draftUpdate DraftA
DestructiveIdempotent
Inspect

Update an existing draft. The draft must still have status draft. This is a full draft configuration update: include the complete signeeDetails list you want to keep, because signees not included may be removed. fileId is optional; if omitted, the draft keeps its current file.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated human-readable draft title that will be visible to signees when sent. If deriving from an uploaded PDF filename, strip the file extension (e.g. 'contract.pdf' → 'contract') unless the user explicitly wants the extension.
fieldsNoComplete desired pre-filled form field values for the draft. Use exact field names from get_file_fields.
fileIdNoOptional replacement file ID from upload_file. If omitted, the draft keeps its current file.
userIdNoUser ID to assign as draft owner
draftIdYesUnique identifier of the draft to update
languageNoLanguage for the eventual signing invitation
aiAssistantNoOptional AI assistant that helps signees while reviewing the document. Requires the aiAssistant capability.
signeeDetailsNoComplete desired signee list for the draft. Pass [] to remove all signees. Any existing signees not included may be removed.
sharingSettingNoWhether the draft is private or shared with other users on the account
personalMessageNoOptional personal message for the eventual signing invitation. Maximum 500 characters.
enableSigningOrderNoEnable sequential signing order when the draft is sent
fieldsReadonlyModeNoForm field read-only mode. Set to 'filled' when pre-filled fields should be locked for signers.

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations (which already indicate destructiveHint=true), the description discloses the specific destructive behavior: 'signees not included may be removed.' It also explains the fileId optional behavior and the draft status requirement. This adds meaningful behavioral context without contradicting 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 with zero fluff. It front-loads the core action, the status requirement, the full-replacement semantics, and the fileId optionality. Every sentence earns its place and no information is wasted.

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

Completeness4/5

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

Given the tool's complexity (12 parameters, nested objects, no output schema), the description covers the essential operational context: what it does, when it applies, and the critical non-obvious behavior around signee replacement. The extensive per-parameter schema descriptions handle the rest, so the description is sufficient for an agent to invoke the tool correctly.

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 coverage is 100% and every parameter has a detailed description, so the baseline is 3. The tool description reiterates key points already present in the schema (e.g., signeeDetails full replacement, fileId retention) but does not introduce new semantic meaning beyond the schema. It effectively highlights the most critical behaviors.

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 states a specific verb and resource: 'Update an existing draft.' It clearly distinguishes from siblings like create_draft, send_draft, and update_signee, and adds specificity by noting it is a 'full draft configuration update' and that the draft must still have status 'draft'.

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 a clear precondition (draft must have status draft) and a critical usage caution (include the complete signeeDetails list because omitted signees may be removed). It does not explicitly name alternative tools, but the condition 'existing draft' and 'full configuration update' imply when to use this over create or signee-specific updates.

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

update_signeeUpdate SigneeA
Destructive
Inspect

Update contact details for one or more signees who have not yet signed (e.g. fix a wrong email). A new signing invitation is sent to each updated signee, and links already sent to the old contact details are revoked. Always call get_document first to read signeeId and signatureStatus. Constraints, all of which return 403 when broken: (1) the signee's signatureStatus must be awaiting_signature — a signee who has signed cannot be changed, and neither can a completed document; (2) an existing contact method can only be CHANGED, never added — updating the email of a signee who only has a phone number (or vice versa) is rejected; (3) a signee's contact details can be updated at most twice, after which a 60-minute cooldown applies. signeeDetails[].updates.updateCooldown from get_document is the number of seconds left — check it before calling and tell the user how long is left instead of retrying. Note that a successful update generates a NEW signeeId for that signee, so any previously read ID is stale afterwards; call get_document again before acting on the signee a second time.

ParametersJSON Schema
NameRequiredDescriptionDefault
signeesYesList of signees to update
documentIdYesUnique identifier of the document

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark the tool as non-read-only and destructive; the description goes much further by disclosing that a successful update sends a new invitation, revokes old links, generates a new signeeId, and invalidates previously read IDs. It also surfaces the 60-minute cooldown and the concrete 403 failure modes, giving the agent a realistic model of side effects.

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 longer than average, but every sentence carries a precondition, side effect, or constraint. The operational prerequisite is front-loaded, and the numbered constraint list makes the 403 conditions scannable and actionable.

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 mutation with no output schema, the description fully covers preconditions, failure modes, cooldown behavior, and the post-update invalidation of signeeId. The agent has everything needed to call the tool correctly and to avoid stale-state mistakes.

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

Parameters5/5

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

The input schema covers all parameters with descriptions, and the description adds crucial semantics: signeeId must come from get_document and becomes stale after the update; email/phone can only change an existing contact method, not add a new one; and updateCooldown from get_document should be checked before retrying. This goes well beyond the schema's basic field descriptions.

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 states a specific verb and resource: 'Update contact details for one or more signees who have not yet signed.' It immediately scopes the operation to not-yet-signed signees and gives the canonical use case ('fix a wrong email'), which distinguishes it clearly from update_draft and the read-only get_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?

It explicitly directs the agent to call get_document first to read signeeId and signatureStatus, and to check updateCooldown before invoking. It also gives strong when-not guidance: signed signees and completed documents cannot be changed, contact methods can only be changed not added, and breaking any constraint results in a 403.

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

update_templateUpdate TemplateA
DestructiveIdempotent
Inspect

Replace a template's configuration. THIS IS A FULL REPLACE — anything you leave out is lost, so call get_template first and send back the complete configuration with your changes applied. fileId is the one exception: omit it to keep the template's current document. Documents already created from the template are unaffected; they took a copy when they were created. Owner only — a colleague can use a shared template but not edit it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the template. This is a full replace — send the current name back from get_template unless you are changing it.
fileIdNoFile ID from upload_file. Omit to keep the template's current document.
templateIdYesUnique identifier of the template
signeeDetailsYesReplaces the template's signature fields entirely.
sharingSettingNoprivate or shared; shared requires the accessLevels capability.
enableSigningOrderNoStore a sequential signing order on the template.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description expands on exactly what is destructive: omitting fields loses them, except fileId. It also adds important behavioral context by stating that existing documents are unaffected because they took a copy at creation. This goes well beyond the annotation metadata.

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?

Four sentences with no filler. The irreversible full-replace warning is front-loaded, followed by the essential exception, legacy impact, and permission constraint. Every sentence earns its place and directly affects whether the agent calls the tool safely.

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 update tool with a rich input schema and no output schema, the description covers the required pre-read step, the preservation exception, post-effect on existing documents, and authorization. An agent has everything it needs to decide to call the tool and construct a correct request.

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

Parameters4/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 a cross-cutting semantic layer — the entire configuration is replaced, not merged — which applies to every parameter and is especially critical for agents composing requests. The fileId exception is also stated globally, which reinforces and extends individual property descriptions.

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 opens with a specific verb and resource: 'Replace a template's configuration.' It then clarifies the defining behavior — a full replace — which immediately distinguishes it from create, get, delete, and duplicate sibling tools. The name and title are reinforced, not merely restated.

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?

It gives a clear precondition: call get_template first and send back the complete configuration. It also sets an owner-only permission boundary, explaining that colleagues can use but not edit shared templates. It stops short of explicitly naming alternatives like create_template when a new template is needed, so it is not a full 5.

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

upload_fileUpload FileAInspect

Upload a PDF file to Formify. Returns a fileId for use with create_document, create_draft or create_link. Provide exactly ONE of these inputs: (1) fileReference — a file reference that the host application supplies when the user attaches a file and the host supports passing files to tools. Pass it exactly as provided; the server downloads the bytes itself. Never construct one by hand and never put a local path in it. (2) url — a PDF reachable over HTTPS. Works in every client; use it whenever a URL is available. (3) uploadId — for an attached file when the host does not pass file references but you can execute shell commands: call request_file_upload_url first, run its curlCommand, then pass the uploadId here. (4) file — the file's bytes as base64 together with fileName, for an attached file when none of the above is possible. Practical ceiling is roughly 30–50 kB of PDF: base64 is a third larger than the file, and a 300 kB PDF would take more output than a model can emit in one message. IMPORTANT: Do NOT use base64 unless you can guarantee you are passing the complete, untruncated file content. AI assistants routinely truncate large strings, which silently corrupts the file and causes upload failures. If the user attached a file but no fileReference reached this tool, retry the call once before choosing another path. Max size: 50 MB. The PDF must not be password-protected or contain digital signatures from other services.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic URL to the PDF file (must be directly downloadable over HTTPS).
fileNoBase64-encoded PDF file content. Suited only to small files — roughly 30–50 kB of PDF; beyond that the string exceeds what can be emitted in one message and arrives truncated, producing a corrupt, unusable file. Only use this if you can guarantee the value is the complete, untruncated file. Prefer fileReference, url or uploadId.
fileNameNoFilename with extension (e.g. 'contract.pdf'). Required when using base64. Otherwise derived from the file reference, the URL or the staged upload if omitted.
uploadIdNoUpload ID from request_file_upload_url, after its curl command has returned HTTP 200.
fileReferenceNoA file reference supplied by the host application when the user attaches a file and the host supports passing files to tools. Pass the object exactly as the host provides it. If the host does not hand you such an object, leave this out and use url, uploadId or file (base64) instead.

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), the description adds server-side download behavior, the 50 MB max size, the ban on password-protected or signed PDFs, and the silent-truncation risk with base64. It also includes a retry-once fallback when fileReference is missing. No contradiction with 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 front-loaded with purpose and return value, then organizes the four input modes in a numbered hierarchy. It is long, but every sentence carries constraint or decision information that an agent needs before calling the tool. No filler.

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?

With no output schema, the description still states the return value (fileId) and the downstream tools that consume it. It covers prerequisites (request_file_upload_url), size limits, unsupported PDF features, and failure behavior, which is complete for safe invocation.

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

Parameters5/5

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

Although the schema already documents all five parameters (100% coverage), the description adds operational meaning: exactly one of the four inputs must be supplied, the preferred order, 'pass it exactly as provided' for fileReference, and the practical 30–50 kB ceiling for base64. This goes well beyond the schema's structural descriptions.

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 opens with a specific verb and resource: 'Upload a PDF file to Formify. Returns a fileId for use with create_document, create_draft or create_link.' This clearly distinguishes the tool's role from sibling tools like create_document or merge_files, which consume files rather than upload them.

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?

It gives an explicit decision tree: use fileReference when the host supplies one, url whenever a URL is available, uploadId after request_file_upload_url returns its curlCommand, and base64 only as a last resort. It also states when not to act ('Do NOT use base64 unless...') and a retry rule, so an agent knows which path to choose in each context.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • Changedcreate_document2 fields changed
      • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
        Previous value: -"ID scan placeholder coordinates. Required for digital_ink_id_scan unless a template already provides a pre-configured position. Omit unless overriding."New value: +"ID scan placeholder coordinates. Required for digital_ink_id_scan unless a template already provides a pre-configured position. Omit unless overriding. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API."
      • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
        Previous value: -"Signature method: digital_ink (default, always available), bankid_identification (Swedish BankID — requires signatureBankId capability), digital_ink_id_scan (draw + ID scan — requires signatureIdScan capability), face_liveness (draw + face liveness — requires signatureFaceLiveness capability). Call get_account_capabilities to verify availability before using a non-default type. Omit when using a template to use its pre-configured method. Only set to override."New value: +"Signature method: digital_ink (default, always available), bankid_identification (Swedish BankID — requires signatureBankId capability), digital_ink_id_scan (draw + ID scan — requires signatureIdScan capability), face_liveness (draw + face liveness — requires signatureFaceLiveness capability). Call get_account_capabilities to verify availability before using a non-default type. Omit when using a template to use its pre-configured method. Only set to override. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
    • Changedcreate_draft2 fields changed
      • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
        Previous value: -"ID scan placeholder coordinates. Required when a live document is sent with signatureType: 'digital_ink_id_scan'. Optional while saving a draft; full validation happens only when the draft is sent.\n\nCoordinate system: origin is at the top-left; x increases to the right and y increases downward. All coordinates and field sizes are specified in points (pt). The position (x, y) always refers to the top-left corner of the field.\n\nStandard ID scan field size at scale = 1.0 is 218 × 138 pt.\n\nIMPORTANT: Always check the actual page size of the PDF before calculating coordinates — do not assume A4. Common page sizes:\n- A4: 210 × 297 mm → 595 × 842 pt at 72 pt/in (pt = mm × 72 / 25.4). Example bottom-right: x = 595 - 218 = 377, y = 842 - 138 = 704, page = 0.\n- US Letter: 8.5 × 11 in → 612 × 792 pt at 72 pt/in. Example bottom-right: x = 612 - 218 = 394, y = 792 - 138 = 654, page = 0.\n\nCollision: Formify does not detect overlapping fields. You must ensure that no two fields share the same page and position, or overlap. Fields are fully opaque — placing a field on top of existing document content will hide it. Use scale to shrink a field when space is limited. Overlapping fields or fields placed over content result in a poor signing experience."New value: +"ID scan placeholder coordinates. Required when a live document is sent with signatureType: 'digital_ink_id_scan'. Optional while saving a draft; full validation happens only when the draft is sent. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API.\n\nCoordinate system: origin is at the top-left; x increases to the right and y increases downward. All coordinates and field sizes are specified in points (pt). The position (x, y) always refers to the top-left corner of the field.\n\nStandard ID scan field size at scale = 1.0 is 218 × 138 pt.\n\nIMPORTANT: Always check the actual page size of the PDF before calculating coordinates — do not assume A4. Common page sizes:\n- A4: 210 × 297 mm → 595 × 842 pt at 72 pt/in (pt = mm × 72 / 25.4). Example bottom-right: x = 595 - 218 = 377, y = 842 - 138 = 704, page = 0.\n- US Letter: 8.5 × 11 in → 612 × 792 pt at 72 pt/in. Example bottom-right: x = 612 - 218 = 394, y = 792 - 138 = 654, page = 0.\n\nCollision: Formify does not detect overlapping fields. You must ensure that no two fields share the same page and position, or overlap. Fields are fully opaque — placing a field on top of existing document content will hide it. Use scale to shrink a field when space is limited. Overlapping fields or fields placed over content result in a poor signing experience."
      • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
        Previous value: -"Signature method. Optional while drafting. Non-default methods require account capabilities."New value: +"Signature method. Optional while drafting. Non-default methods require account capabilities. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
    • Changedcreate_link4 fields changed
      • changedInput schema / properties / signeeDetails / items / properties / hidePersonalNumber / description
        Previous value: -"Leave the signer's personal number out of the rendered signature. Only meaningful for signature types that collect one."New value: +"Leave the signer's national identity number off the rendered signature. Only meaningful for bankid_identification: the signer's BankID identification supplies that number to Formify's signing page, which prints it beside the signature by default. The number is handled by the signing page alone — it is never sent to, returned by or stored through this API."
      • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
        Previous value: -"Required when signatureType is 'digital_ink_id_scan', unused otherwise."New value: +"Required when signatureType is 'digital_ink_id_scan', unused otherwise. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API."
      • changedInput schema / properties / signeeDetails / items / properties / paymentLink / description
        Previous value: -"Collect a payment before this slot can be signed. Payment links are set up in the Formify client, not through this API — do not invent an id. The link must allow multiple use, since one public link is signed by many people. Requires the signAndPay capability."New value: +"Require a payment before this slot can be signed, by referencing a payment link that already exists on the account. Payment links are set up in the Formify client, not through this API — do not invent an id. The payment itself is taken on Formify's signing page: no card or payment data is collected, transmitted or stored by this API. The link must allow multiple use, since one public link is signed by many people. Requires the signAndPay capability."
      • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
        Previous value: -"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type."New value: +"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
    • Changedcreate_template2 fields changed
      • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
        Previous value: -"Required when signatureType is 'digital_ink_id_scan'."New value: +"Required when signatureType is 'digital_ink_id_scan'. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API."
      • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
        Previous value: -"Signature method to store on the field. Defaults to digital_ink. Non-default methods require account capabilities."New value: +"Signature method to store on the field. Defaults to digital_ink. Non-default methods require account capabilities. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
    • Changedupdate_draft2 fields changed
      • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
        Previous value: -"ID scan placeholder coordinates. Required when a live document is sent with signatureType: 'digital_ink_id_scan'. Optional while saving a draft; full validation happens only when the draft is sent.\n\nCoordinate system: origin is at the top-left; x increases to the right and y increases downward. All coordinates and field sizes are specified in points (pt). The position (x, y) always refers to the top-left corner of the field.\n\nStandard ID scan field size at scale = 1.0 is 218 × 138 pt.\n\nIMPORTANT: Always check the actual page size of the PDF before calculating coordinates — do not assume A4. Common page sizes:\n- A4: 210 × 297 mm → 595 × 842 pt at 72 pt/in (pt = mm × 72 / 25.4). Example bottom-right: x = 595 - 218 = 377, y = 842 - 138 = 704, page = 0.\n- US Letter: 8.5 × 11 in → 612 × 792 pt at 72 pt/in. Example bottom-right: x = 612 - 218 = 394, y = 792 - 138 = 654, page = 0.\n\nCollision: Formify does not detect overlapping fields. You must ensure that no two fields share the same page and position, or overlap. Fields are fully opaque — placing a field on top of existing document content will hide it. Use scale to shrink a field when space is limited. Overlapping fields or fields placed over content result in a poor signing experience."New value: +"ID scan placeholder coordinates. Required when a live document is sent with signatureType: 'digital_ink_id_scan'. Optional while saving a draft; full validation happens only when the draft is sent. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API.\n\nCoordinate system: origin is at the top-left; x increases to the right and y increases downward. All coordinates and field sizes are specified in points (pt). The position (x, y) always refers to the top-left corner of the field.\n\nStandard ID scan field size at scale = 1.0 is 218 × 138 pt.\n\nIMPORTANT: Always check the actual page size of the PDF before calculating coordinates — do not assume A4. Common page sizes:\n- A4: 210 × 297 mm → 595 × 842 pt at 72 pt/in (pt = mm × 72 / 25.4). Example bottom-right: x = 595 - 218 = 377, y = 842 - 138 = 704, page = 0.\n- US Letter: 8.5 × 11 in → 612 × 792 pt at 72 pt/in. Example bottom-right: x = 612 - 218 = 394, y = 792 - 138 = 654, page = 0.\n\nCollision: Formify does not detect overlapping fields. You must ensure that no two fields share the same page and position, or overlap. Fields are fully opaque — placing a field on top of existing document content will hide it. Use scale to shrink a field when space is limited. Overlapping fields or fields placed over content result in a poor signing experience."
      • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
        Previous value: -"Signature method. Optional while drafting. Non-default methods require account capabilities."New value: +"Signature method. Optional while drafting. Non-default methods require account capabilities. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
    • Changedupdate_link4 fields changed
      • changedInput schema / properties / signeeDetails / items / properties / hidePersonalNumber / description
        Previous value: -"Leave the signer's personal number out of the rendered signature. Only meaningful for signature types that collect one."New value: +"Leave the signer's national identity number off the rendered signature. Only meaningful for bankid_identification: the signer's BankID identification supplies that number to Formify's signing page, which prints it beside the signature by default. The number is handled by the signing page alone — it is never sent to, returned by or stored through this API."
      • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
        Previous value: -"Required when signatureType is 'digital_ink_id_scan', unused otherwise."New value: +"Required when signatureType is 'digital_ink_id_scan', unused otherwise. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API."
      • changedInput schema / properties / signeeDetails / items / properties / paymentLink / description
        Previous value: -"Collect a payment before this slot can be signed. Payment links are set up in the Formify client, not through this API — do not invent an id. The link must allow multiple use, since one public link is signed by many people. Requires the signAndPay capability."New value: +"Require a payment before this slot can be signed, by referencing a payment link that already exists on the account. Payment links are set up in the Formify client, not through this API — do not invent an id. The payment itself is taken on Formify's signing page: no card or payment data is collected, transmitted or stored by this API. The link must allow multiple use, since one public link is signed by many people. Requires the signAndPay capability."
      • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
        Previous value: -"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type."New value: +"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
    • Changedupdate_template2 fields changed
      • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
        Previous value: -"Required when signatureType is 'digital_ink_id_scan'."New value: +"Required when signatureType is 'digital_ink_id_scan'. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API."
      • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
        Previous value: -"Signature method to store on the field. Defaults to digital_ink. Non-default methods require account capabilities."New value: +"Signature method to store on the field. Defaults to digital_ink. Non-default methods require account capabilities. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
  2. 20 tool updates
    • Changedcreate_draft3 fields changed
      • changedInput schema / properties / fileId / description
        Previous value: -"File ID from upload_file. Required for drafts; templateId is not supported."New value: +"File ID from upload_file. Mutually exclusive with templateId; exactly one of the two is required."
      • addedInput schema / properties / templateId
        Added value: +{
        +  "description": "Template ID from list_templates. Mutually exclusive with fileId; exactly one of the two is required. Copies the template's document and signature fields into the draft, including any contact details it stores. Requires the templates capability.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "fileId",
        -  "name"
        -]New value: +[
        +  "name"
        +]
    • Addedcreate_link
    • Addedcreate_template
    • Addeddelete_link
    • Addeddelete_template
    • Addeddisable_link
    • Addedduplicate_document
    • Addedduplicate_draft
    • Addedduplicate_link
    • Addedduplicate_template
    • Addedget_link
    • Addedget_link_fields
    • Changedlist_documents1 field changed
      • changedInput schema / properties / offset / description
        Previous value: -"Number of items to skip for pagination (default 0)"New value: +"Number of items to skip for pagination (default 0). Pass the nextOffset from the previous response; the list is exhausted only when nextOffset comes back null."
    • Changedlist_drafts1 field changed
      • changedInput schema / properties / offset / description
        Previous value: -"Number of items to skip for pagination (default 0)"New value: +"Number of items to skip for pagination (default 0). Pass the nextOffset from the previous response; the list is exhausted only when nextOffset comes back null."
    • Addedlist_link_documents
    • Addedlist_links
    • Changedlist_templates1 field changed
      • changedInput schema / properties / offset / description
        Previous value: -"Offset for pagination (default 0)"New value: +"Offset for pagination (default 0). Pass the nextOffset from the previous response; the list is exhausted only when nextOffset comes back null."
    • Addedupdate_link
    • Addedupdate_template
    • Changedupload_file5 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"Base64-encoded PDF file content. WARNING: Only use this if you can guarantee the value is the complete, untruncated file. AI assistants often truncate large strings — a truncated base64 value will produce a corrupt, unusable file. Prefer uploadId or url."New value: +"Base64-encoded PDF file content. Suited only to small files — roughly 30–50 kB of PDF; beyond that the string exceeds what can be emitted in one message and arrives truncated, producing a corrupt, unusable file. Only use this if you can guarantee the value is the complete, untruncated file. Prefer fileReference, url or uploadId."
      • changedInput schema / properties / fileName / description
        Previous value: -"Filename with extension (e.g. 'contract.pdf'). Required when using base64. When using URL, derived from the URL if omitted."New value: +"Filename with extension (e.g. 'contract.pdf'). Required when using base64. Otherwise derived from the file reference, the URL or the staged upload if omitted."
      • addedInput schema / properties / fileReference
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "A file reference supplied by the host application when the user attaches a file and the host supports passing files to tools. Pass the object exactly as the host provides it. If the host does not hand you such an object, leave this out and use url, uploadId or file (base64) instead.",
        +  "properties": {
        +    "download_url": {
        +      "description": "HTTPS URL from which the server downloads the file. Supplied by the host application — never construct one yourself.",
        +      "type": "string"
        +    },
        +    "file_id": {
        +      "description": "The host application's identifier for the attached file.",
        +      "type": "string"
        +    },
        +    "file_name": {
        +      "description": "Original filename reported by the host, if known.",
        +      "type": "string"
        +    },
        +    "mime_type": {
        +      "description": "MIME type reported by the host, if known.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "download_url",
        +    "file_id"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / uploadId / description
        Previous value: -"Upload ID from request_file_upload_url. Use this for files attached to the conversation."New value: +"Upload ID from request_file_upload_url, after its curl command has returned HTTP 200."
      • changedInput schema / properties / url / description
        Previous value: -"Public URL to the PDF file (must be directly downloadable)."New value: +"Public URL to the PDF file (must be directly downloadable over HTTPS)."
  3. 35 tool updates
    • First observedcreate_document
    • First observedcreate_draft
    • First observeddelete_document
    • First observeddelete_draft
    • First observeddelete_file
    • First observeddelete_webhook
    • First observedget_account_capabilities
    • First observedget_account_users
    • First observedget_current_user
    • First observedget_document
    • First observedget_document_field_values
    • First observedget_document_fields
    • First observedget_draft
    • First observedget_draft_file
    • First observedget_draft_file_url
    • First observedget_file_fields
    • First observedget_recipient_links
    • First observedget_signed_document_url
    • First observedget_template
    • First observedget_template_fields
    • First observedlist_documents
    • First observedlist_drafts
    • First observedlist_templates
    • First observedlist_webhooks
    • First observedmerge_files
    • First observedregister_webhook
    • First observedrequest_file_upload_url
    • First observedrevoke_document
    • First observedrotate_webhook_secret
    • First observedsend_draft
    • First observedsend_reminder
    • First observedset_document_field_values
    • First observedupdate_draft
    • First observedupdate_signee
    • First observedupload_file

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to create fillable PDFs, send contracts for e-signature, verify signers via BankID or ID scans, and track post-send document workflows.
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    E-signature for AI agents. One unauthenticated call returns a sandbox API key (no account, no browser), then the agent can send documents for signature, check status, and download the sealed PDF plus Certificate of Completion.
    0
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources