Skip to main content
Glama

Server Details

Send a PDF, a Google Doc or Markdown for e-signature from chat, and get the signed PDF back.

Ownership verified
Status
Healthy
Uptime
98.4% over 24 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
Sign PDF

TDQS

A4.3/5.0

Scored across 14 tools

Disambiguation4/5

Most tools are clearly separated by action and resource: sending, status checking, cancellation, downloading, reminders, and template CRUD. The only mild overlap is among find_templates, list_templates, and get_template, but the descriptions distinguish search, display, and read use cases.

Naming Consistency5/5

All tool names use snake_case with a verb-first pattern, such as send_for_signature, get_signature_status, and update_template. Minor multiword forms like download_signed_pdf and send_for_signature still follow the same predictable convention.

Tool Count5/5

The 14 tools are well scoped for an e-signature workflow, covering requests, signing status, reminders, cancellation, downloads, and template management. Each tool appears to earn its place without obvious filler.

Completeness5/5

The surface covers the full lifecycle: creating/sending requests, review and sender-signing flows, status checks, reminders, cancellation, pre-send updates, signed PDF download, and template search/list/get/save/update/delete. No major gaps are apparent for the stated domain.

Available Tools

14 tools
cancel_signature_requestCancel a signature requestA
DestructiveIdempotent
Inspect

Cancel a request that is not signed yet. The signing link stops working. A cancel does not give back the monthly count.

NameRequiredDescriptionDefault
request_idNo
request_tokenNoNeeded when Portant is connected without sign-in.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag this as destructive, non-read-only and idempotent, so the safety profile is covered. The description adds real value beyond them: the signing link stops working (external side effect for the recipient) and the cancel does not refund the monthly count (an irreversible quota consequence). It still doesn't say what happens to the request record or how it errors on an already-signed request, so not a 5.

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, front-loaded with the action and eligibility, then the two consequences. Every sentence carries distinct information with zero 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?

No output schema exists, so the description carries return/behavior burden, and it does cover the key consequences an agent needs before calling. It is near-complete for a 2-param destructive tool, missing only the request_id semantics and post-cancel record state.

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

Parameters2/5

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

Schema description coverage is only 50%: request_token is documented in the schema, but request_id carries no description anywhere. The description adds no parameter meaning at all, so it fails to compensate for the undocumented 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?

Specific verb (cancel) plus resource (signature request) plus a precondition ("not signed yet") that no sibling tool covers — send_for_signature, get_signature_status, download_signed_pdf and find_signature_requests are all clearly distinct operations. An agent picking among the six siblings can select this one without opening a schema.

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 eligibility condition ("a request that is not signed yet"), which implicitly excludes already-signed requests. It stops short of naming the alternative action for signed requests or explicitly stating when not to use it, so it is clear context without exclusions.

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

delete_templateDelete a saved templateA
DestructiveIdempotent
Inspect

Delete a saved template. Requests already sent from it are not changed. Confirm with the user first.

NameRequiredDescriptionDefault
template_idYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, so safety is largely covered. The description adds genuinely new behavioral context that annotations cannot express: already-sent signature requests are unaffected, i.e. the delete is non-cascading. It does not state irreversibility or error behavior for an invalid ID, keeping it short of a 5.

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?

Three short sentences, destructive action front-loaded, with no filler. "Confirm with the user first" borders on restating the destructiveHint annotation, but it is short and actionable enough to earn 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 single-parameter delete with no output schema, the description covers the essential agent-facing facts: it destroys something, it is non-cascading, and confirmation is expected. Only the identity/format of template_id and failure behavior are left unaddressed.

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

Parameters2/5

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

Schema description coverage is 0% and there is one parameter, template_id, which the description never mentions. The name is fairly self-explanatory, but the description supplies no format, source, or constraint information to compensate for the empty schema.

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 gives a specific verb and resource ("Delete a saved template"), which cleanly separates it from sibling reads and mutations like get_template, list_templates, and update_template. It stops short of explicitly naming those siblings as alternatives, so it is clear but not fully differentiated.

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?

"Confirm with the user first" is a useful operational guideline, but it says nothing about when to delete versus archive/update, or what preconditions must hold. Usage is implied by the destructive verb rather than spelled out against alternatives.

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

download_signed_pdfGet the signed PDFA
Read-only
Inspect

After the status is "signed", get a private link where the user can open and download the signed PDF, with its signing certificate page, plus a command that downloads the file for tools that can run shell commands. Pass the request_token from send_for_signature. When Portant is connected with sign-in, the request_id alone also works for a signed copy Portant stores for the account (find it with find_signature_requests). Portant also emailed the signed PDF to the user.

NameRequiredDescriptionDefault
request_idNoWith sign-in, instead of request_token, for a signed copy Portant stores for the account.
request_tokenNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real behavior beyond them: the status prerequisite, that the link is private, that a shell-command variant is included, and that Portant also emailed the PDF. It stops short of stating link lifetime/expiry or what happens if the status is not yet signed.

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 essential precondition is front-loaded and every sentence carries information (precondition, credential source, alternate credential, delivery note). The first sentence is dense and stacks three deliverables, which slightly hurts scannability.

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?

There is no output schema, and the description fills that gap by describing the return value (private open/download link with certificate page, plus a shell download command) and the fallback stored copy. Prerequisites and both credential paths are covered, so an agent has what it needs 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 only 50% (request_token has no schema description), so the description must compensate and does: it says request_token comes from send_for_signature and that request_id is the sign-in equivalent for an account-stored copy, matching the schema note on request_id. It does not say whether the two are mutually exclusive or which wins if both are passed.

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 private link ... download the signed PDF') and specifies what is returned (link plus signing certificate page plus a shell command). It is clearly distinguishable from get_signature_status (which only reports status) and find_signature_requests (which locates the request).

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?

Gives an explicit precondition ('After the status is "signed"'), names where the credential comes from ('Pass the request_token from send_for_signature'), and names the alternative path plus the sibling to use for it ('request_id ... find it with find_signature_requests'). Both routing conditions are spelled out.

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

find_signature_requestsFind signature requestsA
Read-only
Inspect

Find the user's own signature requests by the signer's email address, a word or part of the document title, or both, when you do not have the request_id (for example in a new chat). Returns up to 10 matches, newest first, each with request_id, title, signer and status. With no filter, returns the 10 most recent. Needs Portant connected with sign-in. Then use get_signature_status, cancel_signature_request, or download_signed_pdf for a match with stored: true, with the request_id.

NameRequiredDescriptionDefault
titleNoA word or part of the document title. Not case sensitive.
signer_emailNoThe signer's email address. Must match exactly.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, and the description goes further: it discloses the 10-result cap, newest-first ordering, the returned fields, the no-filter behavior, and an authentication prerequisite ('Needs Portant connected with sign-in'). No output schema exists, so this return-shape detail is genuinely load-bearing.

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 tight sentences: search scope and trigger first, result shape and defaults second, next-step routing last. Front-loaded and 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 supplies the return fields, result count, ordering, default behavior, and auth requirement, and it hands off to the correct follow-up tools. Nothing an agent needs to call this correctly is 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?

Schema coverage is 100%, so the matching rules (case-insensitive title fragment, exact email match) are already documented. The description still adds value by framing the parameters as combinable ('or both') and describing the zero-parameter behavior, which the schema cannot express.

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 (Find) and resource (the user's own signature requests) plus the two search axes (signer email, title fragment) and the scoping constraint 'own'. It is clearly distinguishable from get_signature_status or download_signed_pdf, which operate on an already-known request_id.

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 names the trigger condition ('when you do not have the request_id, for example in a new chat'), the no-filter fallback, and routes the agent onward to get_signature_status, cancel_signature_request, or download_signed_pdf once a match with stored: true is found.

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

find_templatesFind a saved templateA
Read-only
Inspect

Search the user's saved templates by name for the document they want to send, for example query "mutual NDA" when the user says "send a mutual NDA to Sam". Call it before you write a document to send. It shows nothing to the user. It returns only the templates whose name fits, with template_id, name and kind; when it returns none, write the document and do not mention templates. Then read a match with get_template and send it with send_for_signature and document.template_id. Needs Portant connected with sign-in.

NameRequiredDescriptionDefault
queryYesA few words for the document, for example "mutual NDA" or "sales agreement". Leave out the signer's name.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint/destructiveHint/openWorldHint annotations it discloses non-obvious behavior: the call is invisible to the user ("It shows nothing to the user"), returns only fuzzy name matches with template_id, name and kind, defines the empty-result path, and states the auth prerequisite ("Needs Portant connected with sign-in").

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?

Purpose and the trigger example are front-loaded, and each subsequent sentence carries distinct information (invisibility, return shape, no-match path, follow-up chain, auth). The later sentences are densely chained with several actions, but nothing is 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?

For a single-parameter lookup with no output schema, the description covers the input derivation, the exact return fields, the empty-result case, the downstream tool chain, and the auth requirement. An agent has everything needed to call it correctly and act on the result.

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%, so the baseline is 3, but the description adds a translation rule the schema lacks: derive the query from the user's phrasing ("query 'mutual NDA' when the user says 'send a mutual NDA to Sam'") and omit the signer's name. That directly guides parameter construction rather than restating 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?

States a specific verb+resource ("Search the user's saved templates by name") and scopes it to the agent's use case of finding a document to send. It is clearly distinguishable from siblings like list_templates and get_template, which list all or fetch one by id.

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

Usage Guidelines5/5

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

Explicit sequencing: "Call it before you write a document to send," then "read a match with get_template and send it with send_for_signature," with an explicit no-match branch ("when it returns none, write the document and do not mention templates"). Alternatives and a concrete trigger utterance are both provided.

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

get_signature_statusCheck signature statusA
Read-only
Inspect

Check whether the signer has signed. Returns awaiting_sender_confirmation, awaiting_sender_signature, pending, signed, cancelled or expired. Do not check more than once a minute; the user also gets an email with the signed PDF when it is signed.

NameRequiredDescriptionDefault
request_idNo
request_tokenNoNeeded when Portant is connected without sign-in.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context beyond the annotations: a rate limit and the side effect that the user separately receives an email with the signed PDF, which prevents an agent from treating this call as the delivery mechanism.

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?

Three short sentences, front-loaded with the action and the return states, with the rate limit and side-effect note trailing. The status enumeration is long but earns its place by substituting for a missing output schema; nothing is padded.

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 no output schema, the description usefully enumerates the return statuses and covers the polling limit and the email side effect. The remaining gap is authentication context for request_id/request_token, which is only half-covered by the schema, but for a simple read-only status check this is close to complete.

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

Parameters2/5

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

Schema description coverage is only 50%: request_token is documented in the schema, but request_id has no description anywhere. The prose mentions no parameters at all, so it does not compensate for the undocumented half — the agent gets no help on what request_id should be or why both are listed with zero required fields.

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 and resource ('Check whether the signer has signed') and enumerates the possible outcome states, which sharply distinguishes it from siblings like find_signature_requests (listing) and send_for_signature (mutation). An agent can identify the tool's role without opening the schema.

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?

It gives a polling constraint ('Do not check more than once a minute'), which is real usage guidance, but never states when to prefer this over find_signature_requests or cancel_signature_request, nor any prerequisite for calling it. Usage is implied (poll a single request) rather than contrasted with alternatives.

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

get_templateRead a saved templateA
Read-only
Inspect

Get the text of a saved markdown template, to change names, dates or terms before sending it with document.markdown, or before saving a new version with update_template. A Google Doc template returns its link: each send uses the Doc as it is then. A PDF template returns its name and field count only; send it as it is with document.template_id.

NameRequiredDescriptionDefault
template_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds genuine behavioral detail beyond them: the return varies sharply by template type, with Google Docs yielding a live link and PDFs yielding only name and field count. That return-shape disclosure is valuable given there is no 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.

Conciseness4/5

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

Three dense sentences, front-loaded with the primary action and followed by format-specific behavior; little waste. Slightly long sentences, but each carries actionable information.

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 no output schema, the description accepts the burden of describing returns and does so for all three template types. The remaining gap is how the caller acquires a valid template_id, which matters for a single-required-param tool.

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

Parameters2/5

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

Schema description coverage is 0% for the single required template_id, and the description never explains the identifier's form or where to obtain it (list_templates is not referenced). With low coverage the description is expected to compensate and it does not.

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 (get) and resource (saved markdown template) and even branches the purpose by template format: text for markdown, link for Google Doc, name+field count for PDF. An agent can distinguish this read tool from list_templates, update_template and delete_template directly from the description.

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?

Gives concrete downstream contexts — edit names/dates/terms before sending via document.markdown, or before update_template — and effectively warns that Google Doc/PDF templates are sent as-is rather than edited. No explicit negative case naming a sibling to avoid, so it stops short of a 5.

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

get_upload_urlGet a PDF upload URLAInspect

Get a place to upload a PDF file. Use it when the document is a file, not text: a PDF you made with a file skill (your sandbox usually cannot reach Portant, so do not send it as base64), a PDF the user has, or any PDF over 1 MB. In Claude and ChatGPT, the Portant card shown with this result has an upload area: ask the user to download the file if needed and drop it there. The card then tells you the upload_id. If you can run shell commands and have the file, PUT it instead, for example: curl -T file.pdf -H "Content-Type: application/pdf" <upload_url> (add the same Authorization header you use for Portant, if any). Then pass upload_id to send_for_signature. PDF only: save a Word file as PDF first.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it explains that the sandbox usually cannot reach Portant, describes the upload card UI behavior in Claude/ChatGPT, gives the exact curl PUT pattern with Content-Type and Authorization header, and specifies PDF-only with a Word-to-PDF conversion note. Annotations only say this is a non-read-only, non-destructive, non-idempotent call; the description supplies the real operational context.

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?

Front-loaded with the core action, then branches into the two invocation paths and the PDF constraint. Dense but nearly every sentence carries actionable detail; the curl example and card explanation are long but earn their place.

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?

Complete for a zero-parameter tool with no output schema: it covers the trigger conditions, both upload mechanisms, the auth header requirement, the returned identifiers, and the follow-up tool. Nothing needed to invoke it correctly is 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?

Zero parameters, so the baseline is 4. The description adds value by naming the artifacts returned (upload_url for PUT, upload_id for the next call), which is useful even though no output schema exists.

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+resource ('Get a place to upload a PDF file') and immediately scopes it to PDFs, distinguishing it from text-handling siblings. The downstream link to send_for_signature makes its role in the workflow 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?

Explicitly enumerates when to use it (file rather than text, sandbox-made PDF, user-supplied PDF, anything over 1 MB) and when not to (do not send base64 from the sandbox). It also names the alternative path (shell PUT via curl) and the required next step (pass upload_id to send_for_signature).

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

list_templatesList saved templatesA
Read-only
Inspect

Show the user all their saved templates on a card, newest first, with template_id, name and kind (markdown, pdf or google_doc). Use it only when the user asks to see, open or manage their templates, for example "show my templates". To check if a template fits a document the user wants to send, use find_templates instead. Needs Portant connected with sign-in.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: results are ordered newest first, each item carries a kind discriminator, and the call requires Portant connected with an active sign-in. Only minor gaps remain (no pagination/limit behavior), so it lands just below the top.

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 load-bearing: what is returned, when to use it and when to use the sibling, and the connection prerequisite. The most decision-relevant content (the output and the routing rule) is front-loaded with 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?

There is no output schema, so the description correctly compensates by enumerating the returned fields and their possible values, plus the auth prerequisite. For a zero-parameter read tool this is everything an agent needs to call it and interpret the result.

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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The description usefully notes there is no filtering surface, implicitly telling the agent that filtering is find_templates' job.

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 ('Show the user all their saved templates') and goes further by naming the return shape (template_id, name, kind with the enum values markdown/pdf/google_doc) and ordering (newest first). This is enough for an agent to distinguish it from get_template, find_templates and the mutation siblings without opening any schema.

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 scopes usage ('Use it only when the user asks to see, open or manage their templates') with a concrete trigger phrase, and names the alternative with its selecting condition ('To check if a template fits a document the user wants to send, use find_templates instead'). Both the when and the when-not are present.

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

save_templateSave a templateAInspect

Save a document as a template without sending it to anyone. Use it when the user asks to save, upload or add a template, for example "make a sales contract and save it as a template". Give the document as markdown you wrote (with the same field tokens as send_for_signature, such as {{signature:signer}}, {{text:signer:Company name}} or {{signature:sender}}; for what changes on each send, such as the customer, price or start date, write a named field such as {{var:Customer company}} or [Customer company], so each send fills it from document.values), a PDF (upload_id, pdf_url or pdf_base64), or a Google Doc link shared with "anyone with the link" (saved as the link, so each send uses the Doc as it is then). Portant checks the document the way a send would, then saves it. Returns template_id; send it later with send_for_signature and document.template_id. Plus and Scale plans; needs Portant connected with sign-in.

NameRequiredDescriptionDefault
nameYesA short name for the template, with no signer name in it, for example "Sales agreement". A send from the template uses it as the title.
fieldsNoOnly for a PDF or Google Doc, when you know where the fields go. The same as fields in send_for_signature. Without fields, each send looks for the signature lines in the document, and adds a signature page when it cannot place them.
documentYesExactly one of these, except that template_id can come with values and markdown.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations mark this as a non-readonly, non-idempotent, open-world write. The description adds context beyond those: it validates the document 'the way a send would', states plan gating (Plus and Scale), requires Portant connected with sign-in, rejects unfilled placeholders, and describes what gets saved (link vs. PDF vs. markdown) and what is returned (template_id). This is substantive behavioral disclosure.

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?

Purpose is front-loaded and every sentence carries operational detail (token syntax, plan gating, return value). It is dense and the long parenthetical about markdown/template_id runs on, but little is 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?

Despite no output schema and a nested document object, the description covers inputs, validation behavior, auth and plan prerequisites, and the return (template_id plus how to use it with send_for_signature). An agent has everything needed to invoke 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%, so the baseline is 3. The description earns more by explaining token syntax ({{signature:signer}}, {{var:Customer company}}), how named fields map to document.values on each send, and how the same field tokens mirror send_for_signature. It adds real semantics beyond the schema, though the fields/positions object is left mostly to 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?

States a specific verb and resource ('Save a document as a template') and immediately distinguishes from send_for_signature by adding 'without sending it to anyone'. An agent can tell this apart from siblings like get_template, update_template, and send_for_signature without opening any schema.

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?

Gives an explicit trigger ('when the user asks to save, upload or add a template') with a worked example, and routes the agent to related tools — get_upload_url for PDFs, get_template for template editing, send_for_signature for later sending. When-to-use and alternatives are both covered.

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

send_for_signatureSend a document for signatureA
Destructive
Inspect

Get a document signed by one person, or by up to five people in a set order (signers), and optionally by the user first. When only the user signs, pass sender_signs: true and leave out signer and signers. Give the document as markdown text you wrote (use {{signature:signer}} where the signature goes, or leave it out and Portant adds a signature block), a PDF (upload_id from get_upload_url for a PDF file, including one you made with a file skill; pdf_url; or pdf_base64 for a small PDF), or a Google Doc link shared with "anyone with the link". Portant emails the signer a private link; the signer signs in their browser. This tool never signs for anyone. When the user wants to check the document or sign it first, call this tool at once with review: true or sender_signs: true, not after showing the document as text: Portant shows the finished PDF on a card, and nothing reaches the signer until the user clicks Send or signs. Before a send without review or sender_signs, confirm each signer's name and email, and the signing order, with the user. With signers, Portant emails each person after the one before has signed, and everyone gets the signed PDF by email at the end. Returns request_id, request_token (keep it to download the signed PDF or send a reminder) and next_step (tell it to the user). With review: true, nothing goes to the signer until the user opens review_link, checks the document and clicks Send. Limits: five signers, PDFs up to 5 MB and 50 pages, links expire after 14 days. Simple electronic signature.

NameRequiredDescriptionDefault
titleNoThe document title. Required with markdown; it is the heading and the email subject.
fieldsNoOnly for PDF or Google Doc input, when you know where the fields go. Positions are fractions of the page from the top-left corner. Without fields, Portant looks for where the PDF asks for signatures (a signature form field, "Signature: ____", or a line over the word Signature) and puts the boxes there when it can tell whose line is whose; otherwise it adds a signature page. So leave fields out unless the user gives the places.
reviewNoTrue to let the user see the finished document before anything goes to the signer. You get review_link for the user, and Portant also emails it to them. Use it when the user wants to check the document first, for example a document you wrote. Not needed when sender_signs is true (the user sees the document when signing) or when Portant is connected without sign-in (Portant then asks the user to confirm by email).
senderNoThe user who is sending. Required only when Portant is connected without sign-in; Portant then emails the user to confirm before anything reaches the signer.
signerNoThe person who signs. Give signer or signers, not both. Leave both out when only the user signs (sender_signs: true).
messageNoA short plain-text note to the signer, up to 500 characters. Links are removed.
signersNoTwo to five people who sign one after another, in this order. Use it instead of signer only when the user names more than one signer.
deliveryNoemail (default): Portant emails the signer. link: no email; you get the signing link to share.
documentYesExactly one of these, except that template_id can come with values and markdown.
languageNoLanguage of the emails and the signing page. Default en.
certificateNoAppend a signing certificate page. Default true.
sender_signsNoTrue when the user signs too. The user signs first, then the signer. With no signer and no signers, only the user signs: the user signs on the card or at sender_link, the request is then complete, and Portant emails the user the signed PDF. That needs Portant connected with sign-in.
template_nameNoA short name for the saved template, with no signer name in it, for example "Mutual NDA". A later send from the template uses it as the title. Default: the title.
signature_pageNoPDF or Google Doc input with no fields: true to skip looking for signature lines in the document and add Portant's signature page instead. Use it only when the user asks for a separate signature page.
save_as_templateNoTrue to also save this document as a template the user can send again from any chat. Use it only when the user asks to send the document now and also keep it. To save a template without sending anything, use save_template instead. Portant saves it before any names go in. A Google Doc is saved as its link, so each later send uses the Doc as it is then.
allow_placeholdersNoPortant refuses markdown that still has text to fill in, such as [Plan name] or {{var:Plan}}. Pass true only when the user confirms the square brackets are meant to be in the document.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations flag the mutation and open-world nature (destructiveHint true, openWorldHint true), but the description adds substantial behavior: Portant emails the signer a private link, nothing reaches the signer until Send is clicked, sequential signer emails, final signed PDF to everyone, request_id/request_token/next_step return values, and explicit limits (five signers, 5 MB, 50 pages, 14-day expiry). It also states the tool never signs for anyone.

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 core purpose and document input options are front-loaded, and nearly every sentence carries operational value (routing, limits, return values). It is dense and lacks paragraph breaks, making it harder to scan than an ideal definition, but there is little redundant wording.

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 16-parameter, nested, destructive, open-world tool with no output schema, the description supplies what is missing: workflow ordering, confirmation requirements, limits, return fields, and edge cases like review vs. sender_signs vs. no sign-in. Nothing critical to calling it correctly appears absent.

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%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains the three document input routes (markdown, PDF via upload_id/pdf_url/pdf_base64, Google Doc), how {{signature:signer}} placement works and that Portant adds a block by default, and the interplay between sender_signs, signer/signers, and review. It stops short of re-explaining every enum or nested field, which the schema already covers.

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 document signed — and immediately scopes it: one person, or up to five in set order, optionally with the sender signing first. It also names the sibling save_template as the alternative when the user wants to keep a template without sending, so an agent can distinguish it without opening other 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?

Explicitly says when to use review: true or sender_signs: true (when the user wants to check or sign first, call immediately, not after showing text), when not to (no review needed when sender_signs is true, or when Portant is connected without sign-in), and requires confirming signer names, emails, and order before a plain send. Alternatives and exclusions are named.

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

send_reminderRemind the signerA
Destructive
Inspect

Email the signer again with the same private signing link, for a request with the status "pending" (waiting for the signer). Use it only when the user asks. Needs the request_token from send_for_signature. Portant sends up to 3 reminders for a request, at least an hour after the last email to the signer. A request sent with delivery "link" got no email, so give the user the signing link to share again instead.

NameRequiredDescriptionDefault
messageNoA short plain-text note to the signer, up to 500 characters. Links are removed.
request_idNo
request_tokenYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only give generic flags (destructive, non-idempotent, open-world). The description adds concrete behavioral facts beyond them: a hard cap of 3 reminders per request, a minimum one-hour gap since the last signer email, the required source of request_token, and the fact that link-delivery requests have no email to resend. That is exactly the context an agent needs before invoking a rate-limited, outward-facing send.

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 compact sentences, each carrying a distinct operational fact (what it does, precondition, rate limit, link-delivery caveat) with the core action front-loaded. 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 covers the essentials for a side-effecting send: precondition, token provenance, rate limit, and the edge case where resending is impossible. Nothing critical for a correct invocation 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 only 33%, but the description compensates for request_token by stating it comes from send_for_signature. The message parameter is already documented in the schema (plain text, 500 chars, links stripped). request_id remains undocumented in both places, so the description adds partial but not full meaning.

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 (email the signer again with the same private signing link) and scopes it to requests with status "pending". This clearly differentiates it from the sibling send_for_signature, which performs the initial send.

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 to use it only when the user asks, states the precondition (status "pending", waiting for the signer), and routes the agent to a different action when delivery is "link" because no email was sent. When-to-use, when-not-to-use and the alternative path are all covered.

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

update_signature_requestChange a request before it is sentA
DestructiveIdempotent
Inspect

Change a request before anyone gets it: one that waits for review (sent with review: true) before the user clicks Send, or one that waits for the user to sign first. It changes who signs (add, remove or replace people), the signing order, the title, the note to the signer, the markdown text, or where a signature, date or text box sits. Nothing is sent, and the review or signing link stays the same. Give signers as the whole list in the new order, 1 to 5 people; each person keeps their own fields by email, a removed signer's fields go, and a new signer gets a signature block (markdown and Portant's signature page) or the boxes in add_fields (a PDF with placed fields; with none, one signature box on the last page). Portant builds the document again when a printed name, the people or the title changes. Use it only when the user asks for the change, and confirm the new people with the user first. Needs the request_token. fields are usually set from the card in the chat.

NameRequiredDescriptionDefault
titleNoThe new title.
fieldsNoBoxes to move or resize. index is the field number in the document before this change; x, y, width and height are fractions of the page from 0 to 1, measured from the top left. page (from 1) moves the box to another page. When no box is left on Portant's added signature page, Portant removes that page.
messageNoThe new note to the signer, up to 500 characters. An empty string removes it.
signersNoEvery signer in the new order, 1 to 5 people. A person with the same email keeps their fields; a new email takes the place of a person left out, in order, and any more are new signers.
markdownNoOnly for a request sent as markdown: the whole document text again, written for the new signers ({{signature:signer}}, then signer2 to signer5). A signer with no signature marker gets a signature block at the end. Text still to fill in, such as [Plan name], is refused.
add_fieldsNoOnly for a PDF whose fields were placed when it was sent: new boxes, usually for a new signer. signer is the position in the new order, from 1; page is from 1; x, y, width and height are fractions of the page from the top left.
request_idNo
request_tokenYes
allow_placeholdersNoPass true only when the user confirms the square brackets in the new markdown are meant to be in the document.

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 idempotentHint=true, but the description adds substantive behavior beyond them: nothing is sent, the review/signing link stays stable, removed signers lose their fields, the added signature page is removed when empty, markdown placeholders are refused, the document is rebuilt on specific changes, and request_token is required. That is exactly the extra context an agent needs before invoking a destructive mutation.

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?

Purpose and the safety-critical 'nothing is sent, link stays the same' are front-loaded, and nearly every clause carries information. It is, however, a dense multi-clause block covering several concerns in sequence; light structuring into when-to-use / what-changes / signer-rules would improve scanability.

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 9-parameter, destructive, no-output-schema mutation, the description covers scope, safety outcomes, signer replacement semantics, per-format branching (markdown vs. placed-field PDF), field-placement rules, and the request_token requirement. An agent can invoke this correctly without further clarification.

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?

Schema coverage is 78%, so the baseline is 3, but the description goes well beyond field definitions: signers is a whole-list replacement (1–5 people) matched by email, add_fields only applies to PDFs with pre-placed fields and defaults to one signature box on the last page, markdown requires the full text rewritten with signature markers, fields' index refers to numbering before this change, and allow_placeholders is only for user-confirmed brackets. These are semantic rules the schema cannot express.

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 and immediately enumerates the two request states it applies to (awaiting review vs. awaiting signer) plus the concrete attributes it can change: signers, order, title, note, markdown, and field placement. This is far more specific than the sibling tools (send_for_signature, cancel_signature_request, update_template) and lets an agent tell them apart without opening a schema.

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 an explicit gating condition — 'Use it only when the user asks for the change, and confirm the new people with the user first' — which is real when-to-use guidance, and the 'before anyone gets it' framing implicitly excludes already-sent requests. It does not name a sibling alternative explicitly (e.g., use send_for_signature to dispatch), so it stops short of a 5.

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

update_templateChange a saved templateA
DestructiveIdempotent
Inspect

Rename a saved template, replace the text of a markdown template, or point a Google Doc template at another Doc. Use it only when the user asks to change the template itself, for example "change the term in our NDA template to two years": read it with get_template, edit the text, then pass the whole new markdown. The old version cannot be restored, so confirm the change with the user first. Requests already sent do not change. A PDF template can only be renamed. A Google Doc template always sends the Doc as it is at that time, so its wording is changed in Google Docs.

NameRequiredDescriptionDefault
nameNoA new short name, with no signer name in it.
markdownNoThe whole new text of a markdown template, with the same field tokens as send_for_signature.
template_idYes
google_doc_urlNoAnother Google Docs link, shared as "Anyone with the link can view", for a Google Doc template.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructive=true and idempotent=true, and the description adds genuinely new behavioral facts beyond them: the old version cannot be restored, the user should confirm first, in-flight requests are unaffected, PDF vs. Google Doc handling differs, and a Doc template reflects live Google Docs content. These are material consequences an agent could not infer from the annotation flags.

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?

Six sentences is long, but the three supported operations are front-loaded and nearly every sentence carries a distinct constraint (irreversibility, confirmation, in-flight requests, PDF limitation, Doc liveness). Only the example sentence could be trimmed without loss.

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 mutation tool with no output schema, the description covers the safety profile, mode limitations, prerequisite read, and post-write side effects. An agent has everything needed to decide whether to call it and how to warn the user.

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 75% and already documents name, markdown, and google_doc_url. The description adds real semantics on top: markdown must be the whole new text using the same field tokens as send_for_signature, and the mode-specific mapping (rename vs. replace text vs. repoint Doc) clarifies when each parameter 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?

Opens with three specific verb+resource operations (rename a template, replace markdown text, repoint a Google Doc template), immediately distinguishing it from get_template, list_templates, and delete_template. The title alone would be ambiguous, but the description makes the scope of mutation explicit.

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 when to use it ('only when the user asks to change the template itself') with a concrete NDA example, names the prerequisite read step (get_template), and gives exclusions: requests already sent do not change, PDF templates can only be renamed. This is textbook when/when-not/alternative guidance.

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. 1 tool update
    • Changedsend_for_signature2 fields changed
      • changedInput schema / properties / sender_signs / description
        Previous value: -"True when the user signs too. The user signs first, then the signer."New value: +"True when the user signs too. The user signs first, then the signer. With no signer and no signers, only the user signs: the user signs on the card or at sender_link, the request is then complete, and Portant emails the user the signed PDF. That needs Portant connected with sign-in."
      • changedInput schema / properties / signer / description
        Previous value: -"The person who signs. Give signer or signers, not both."New value: +"The person who signs. Give signer or signers, not both. Leave both out when only the user signs (sender_signs: true)."
  2. 3 tool updates
    • Changedsave_template2 fields changed
      • changedInput schema / properties / document / properties / markdown / description
        Previous value: -"The document as markdown. Put {{signature:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end. With several signers, signer is the first and signer2 to signer5 the next ones, for example {{signature:signer2}}. With template_id: the template text after you changed it for this send (get it with get_template, put the values in, change only what the user asked for); the request then waits for the user to review the changes. Text still to fill in, such as [Plan name] or {{var:Plan}}, is refused."New value: +"The document as markdown. Put {{signature:signer}}, {{name:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}}, {{name:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end. When you place the fields yourself, give each person a {{name:...}} beside their signature: Portant fills it with the full name the person types when they sign, as it fills the date, so do not add a text field for the name. With several signers, signer is the first and signer2 to signer5 the next ones, for example {{signature:signer2}}. With template_id: the template text after you changed it for this send (get it with get_template, put the values in, change only what the user asked for); the request then waits for the user to review the changes. Text still to fill in, such as [Plan name] or {{var:Plan}}, is refused."
      • changedInput schema / properties / fields / items / properties / kind / enum
        Previous value: -[
        -  "signature",
        -  "date",
        -  "text"
        -]New value: +[
        +  "signature",
        +  "date",
        +  "text",
        +  "name"
        +]
    • Changedsend_for_signature2 fields changed
      • changedInput schema / properties / document / properties / markdown / description
        Previous value: -"The document as markdown. Put {{signature:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end. With several signers, signer is the first and signer2 to signer5 the next ones, for example {{signature:signer2}}. With template_id: the template text after you changed it for this send (get it with get_template, put the values in, change only what the user asked for); the request then waits for the user to review the changes. Text still to fill in, such as [Plan name] or {{var:Plan}}, is refused."New value: +"The document as markdown. Put {{signature:signer}}, {{name:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}}, {{name:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end. When you place the fields yourself, give each person a {{name:...}} beside their signature: Portant fills it with the full name the person types when they sign, as it fills the date, so do not add a text field for the name. With several signers, signer is the first and signer2 to signer5 the next ones, for example {{signature:signer2}}. With template_id: the template text after you changed it for this send (get it with get_template, put the values in, change only what the user asked for); the request then waits for the user to review the changes. Text still to fill in, such as [Plan name] or {{var:Plan}}, is refused."
      • changedInput schema / properties / fields / items / properties / kind / enum
        Previous value: -[
        -  "signature",
        -  "date",
        -  "text"
        -]New value: +[
        +  "signature",
        +  "date",
        +  "text",
        +  "name"
        +]
    • Changedupdate_signature_request1 field changed
      • changedInput schema / properties / add_fields / items / properties / kind / enum
        Previous value: -[
        -  "signature",
        -  "date",
        -  "text"
        -]New value: +[
        +  "signature",
        +  "date",
        +  "text",
        +  "name"
        +]
  3. 1 tool update
    • Addedfind_templates
  4. 3 tool updates
    • Changedsave_template1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"Only for a PDF or Google Doc, when you know where the fields go. The same as fields in send_for_signature. Without fields, each send adds a signature page."New value: +"Only for a PDF or Google Doc, when you know where the fields go. The same as fields in send_for_signature. Without fields, each send looks for the signature lines in the document, and adds a signature page when it cannot place them."
    • Changedsend_for_signature3 fields changed
      • changedInput schema / properties / document / properties / values / description
        Previous value: -"With template_id: a value for each named field of the template ({{var:Name}} in its text; get_template lists them in named_fields), for example {\"Plan\": \"Team\", \"Deal amount\": \"$12,000\"}. Names match without regard to case, spaces or underscores. Each value is put in as plain text."New value: +"With template_id: a value for each named field of the template ({{var:Name}} or [Name] in its text; get_template lists them in named_fields), for example {\"Plan\": \"Team\", \"Deal amount\": \"$12,000\"}. Names match without regard to case, spaces or underscores. Each value is put in as plain text."
      • changedInput schema / properties / fields / description
        Previous value: -"Only for PDF or Google Doc input, when you know where the fields go. Positions are fractions of the page from the top-left corner."New value: +"Only for PDF or Google Doc input, when you know where the fields go. Positions are fractions of the page from the top-left corner. Without fields, Portant looks for where the PDF asks for signatures (a signature form field, \"Signature: ____\", or a line over the word Signature) and puts the boxes there when it can tell whose line is whose; otherwise it adds a signature page. So leave fields out unless the user gives the places."
      • addedInput schema / properties / signature_page
        Added value: +{
        +  "description": "PDF or Google Doc input with no fields: true to skip looking for signature lines in the document and add Portant's signature page instead. Use it only when the user asks for a separate signature page.",
        +  "type": "boolean"
        +}
    • Changedupdate_signature_request2 fields changed
      • changedInput schema / properties / fields / description
        Previous value: -"Boxes to move or resize. index is the field number in the document before this change; x, y, width and height are fractions of the page from 0 to 1, measured from the top left."New value: +"Boxes to move or resize. index is the field number in the document before this change; x, y, width and height are fractions of the page from 0 to 1, measured from the top left. page (from 1) moves the box to another page. When no box is left on Portant's added signature page, Portant removes that page."
      • addedInput schema / properties / fields / items / properties / page
        Added value: +{
        +  "minimum": 1,
        +  "type": "integer"
        +}
  5. 2 tool updates
    • Changedsave_template1 field changed
      • changedInput schema / properties / document / properties / pdf_base64 / description
        Previous value: -"A PDF as base64. Prefer upload_id or pdf_url for files over 1 MB."New value: +"A small PDF as base64. For a PDF file, including one you made with a file skill, or any PDF over 1 MB, use upload_id (get_upload_url) or pdf_url."
    • Changedsend_for_signature1 field changed
      • changedInput schema / properties / document / properties / pdf_base64 / description
        Previous value: -"A PDF as base64. Prefer upload_id or pdf_url for files over 1 MB."New value: +"A small PDF as base64. For a PDF file, including one you made with a file skill, or any PDF over 1 MB, use upload_id (get_upload_url) or pdf_url."
  6. 3 tool updates
    • Addedsave_template
    • Changedsend_for_signature5 fields changed
      • addedInput schema / properties / allow_placeholders
        Added value: +{
        +  "description": "Portant refuses markdown that still has text to fill in, such as [Plan name] or {{var:Plan}}. Pass true only when the user confirms the square brackets are meant to be in the document.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / document / description
        Previous value: -"Exactly one of these."New value: +"Exactly one of these, except that template_id can come with values and markdown."
      • changedInput schema / properties / document / properties / markdown / description
        Previous value: -"The document as markdown. Put {{signature:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end. With several signers, signer is the first and signer2 to signer5 the next ones, for example {{signature:signer2}}."New value: +"The document as markdown. Put {{signature:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end. With several signers, signer is the first and signer2 to signer5 the next ones, for example {{signature:signer2}}. With template_id: the template text after you changed it for this send (get it with get_template, put the values in, change only what the user asked for); the request then waits for the user to review the changes. Text still to fill in, such as [Plan name] or {{var:Plan}}, is refused."
      • addedInput schema / properties / document / properties / values
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "With template_id: a value for each named field of the template ({{var:Name}} in its text; get_template lists them in named_fields), for example {\"Plan\": \"Team\", \"Deal amount\": \"$12,000\"}. Names match without regard to case, spaces or underscores. Each value is put in as plain text.",
        +  "type": "object"
        +}
      • changedInput schema / properties / save_as_template / description
        Previous value: -"True to also save this document as a template the user can send again from any chat. Use it only when the user asks to save or reuse the document. Portant saves it before any names go in. A Google Doc is saved as its link, so each later send uses the Doc as it is then."New value: +"True to also save this document as a template the user can send again from any chat. Use it only when the user asks to send the document now and also keep it. To save a template without sending anything, use save_template instead. Portant saves it before any names go in. A Google Doc is saved as its link, so each later send uses the Doc as it is then."
    • Changedupdate_signature_request2 fields changed
      • addedInput schema / properties / allow_placeholders
        Added value: +{
        +  "description": "Pass true only when the user confirms the square brackets in the new markdown are meant to be in the document.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / markdown / description
        Previous value: -"Only for a request sent as markdown: the whole document text again, written for the new signers ({{signature:signer}}, then signer2 to signer5). A signer with no signature marker gets a signature block at the end."New value: +"Only for a request sent as markdown: the whole document text again, written for the new signers ({{signature:signer}}, then signer2 to signer5). A signer with no signature marker gets a signature block at the end. Text still to fill in, such as [Plan name], is refused."
  7. 1 tool update
    • Addedupdate_signature_request
  8. 7 tool updates
    • Addeddelete_template
    • Changeddownload_signed_pdf2 fields changed
      • addedInput schema / properties / request_id
        Added value: +{
        +  "description": "With sign-in, instead of request_token, for a signed copy Portant stores for the account.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "request_token"
        -]
    • Addedget_template
    • Addedlist_templates
    • Changedsend_for_signature10 fields changed
      • changedInput schema / properties / document / properties / markdown / description
        Previous value: -"The document as markdown. Put {{signature:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end."New value: +"The document as markdown. Put {{signature:signer}}, {{date:signer}}, {{text:signer:Label}}, {{signature:sender}} or {{date:sender}} where each field goes, or leave them out and Portant adds a signature block at the end. With several signers, signer is the first and signer2 to signer5 the next ones, for example {{signature:signer2}}."
      • addedInput schema / properties / document / properties / template_id
        Added value: +{
        +  "description": "A saved template, from list_templates. Portant adds the new signer's name to its signature block.",
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / items / properties / party / description
        Added value: +"Default signer, the first signer. signer2 to signer5 are the next signers in signers."
      • changedInput schema / properties / fields / items / properties / party / enum
        Previous value: -[
        -  "signer",
        -  "sender"
        -]New value: +[
        +  "signer",
        +  "signer2",
        +  "signer3",
        +  "signer4",
        +  "signer5",
        +  "sender"
        +]
      • addedInput schema / properties / review
        Added value: +{
        +  "description": "True to let the user see the finished document before anything goes to the signer. You get review_link for the user, and Portant also emails it to them. Use it when the user wants to check the document first, for example a document you wrote. Not needed when sender_signs is true (the user sees the document when signing) or when Portant is connected without sign-in (Portant then asks the user to confirm by email).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / save_as_template
        Added value: +{
        +  "description": "True to also save this document as a template the user can send again from any chat. Use it only when the user asks to save or reuse the document. Portant saves it before any names go in. A Google Doc is saved as its link, so each later send uses the Doc as it is then.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / signer / description
        Added value: +"The person who signs. Give signer or signers, not both."
      • addedInput schema / properties / signers
        Added value: +{
        +  "description": "Two to five people who sign one after another, in this order. Use it instead of signer only when the user names more than one signer.",
        +  "items": {
        +    "properties": {
        +      "email": {
        +        "description": "The signer's email address.",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "The signer's full name.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "email"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / template_name
        Added value: +{
        +  "description": "A short name for the saved template, with no signer name in it, for example \"Mutual NDA\". A later send from the template uses it as the title. Default: the title.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "document",
        -  "signer"
        -]New value: +[
        +  "document"
        +]
    • Addedsend_reminder
    • Addedupdate_template
  9. 6 tool updates
    • First observedcancel_signature_request
    • First observeddownload_signed_pdf
    • First observedfind_signature_requests
    • First observedget_signature_status
    • First observedget_upload_url
    • First observedsend_for_signature

Publisher details

Operator
Portant · Publisher source
Vendor relationship
First-party
Trust center
Unknown
Restrictions
Free - 30 documents a month - free Plus - 300 documents a month $12/month Scale - 1500 documents a month $39/month

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents and developers to create, send, and follow up on contracts for e-signature, manage signers and templates, retrieve signed PDFs and audit trails, and verify PDF signatures. It keeps signing and declining in the hands of each signer through personal links.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Send documents for e-signature from Claude Desktop, Claude Code, Cursor, and other AI agents. Free DocuSign alternative.
    15
    50 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources