turbosign-mcp
The turbosign-mcp server provides tools to send, manage, and track PDF signature requests via the TurboSign e-signature API. Key capabilities include:
Send documents for signature (
turbosign_send): Upload PDFs (or DOCX/PPTX) and email recipients to collect signatures, with options for sequential or parallel signing and automatic field placement via anchors, geometry, or coordinates.Preview before sending (
turbosign_review): Run the same document preparation and signature field placement without emailing anyone, returning a preview URL to verify field placement before live sending.Check signing status (
turbosign_status): View whether a request is pending, completed, or voided, with per‑recipient status and IDs.Download completed documents (
turbosign_download): Fetch the fully signed PDF once all signatures are collected.Cancel a request (
turbosign_void): Irrevocably void a pending request, recording a reason in the audit trail.Resend reminders (
turbosign_resend): Re‑send signature request emails to recipients who haven’t signed yet.Audit trail (
turbosign_audit_trail): Retrieve a hash‑chained, tamper‑evident history of document events (prepared, sent, viewed, signed, etc.).Setup and configuration: Guided credential setup (
turbosign_setup), secure storage and verification of API key, org ID, and sender email (turbosign_configure), and account identity check (turbosign_whoami).Client instructions:
get_instructionsreturns usage guidance, andrefresh_toolsrefreshes the tool list.
⚠️ Every turbosign_send call hits the production API; use turbosign_review as a safe rehearsal step before sending.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@turbosign-mcpsend ~/contracts/nda.pdf to Bob Smith bob@example.com for signature"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
turbosign-mcp
Send PDFs out for signature by asking for it.
> send ~/contracts/nda.pdf to Bob Smith <bob@example.com> for signatureA thin MCP server over the TurboSign e-signature API. It speaks stdio, so any MCP client can launch it — Claude Code, Hermes Agent, anything else — with no container, no port, and no daemon.
What it does
Tool | |
| Send a document for signature. Emails the recipients. |
| Same, but emails nobody and returns a preview URL. |
| Has anyone signed yet? |
| Fetch the completed signed PDF. |
| Cancel a request that has not completed. |
| Chase a recipient. |
| Hash-chained history — prepared, sent, viewed, signed. |
| Getting a machine credentialled. |
Related MCP server: Aoexl Sign
Install
git clone https://github.com/disciplin-run-org/turbosign-mcp
cd turbosign-mcp
python3 -m venv .venv
.venv/bin/pip install -e .Then point your MCP client at it. For Claude Code, the bundled .mcp.json
already does this:
{
"mcpServers": {
"turbosign": { "command": ".venv/bin/turbosign-mcp" }
}
}Use an absolute path to .venv/bin/turbosign-mcp if your client does not
resolve relative commands from the project directory.
The signing chain must be stated, never inferred
The initiator names every party. Nothing is filled in for you, because a name that arrives by default is a party to a contract that nobody chose.
> send ~/contracts/nda.pdf to Bob Smith <bob@example.com> for signatureThree rules, each closing a different hole:
Names are explicit | A bare address is refused, not given a name derived from its local part. |
The sender is per-send |
|
The document declares the chain | Anchors are cross-checked against the recipients; every recipient must have a field, and every field a recipient. |
The anchors are the only declaration in a request that the caller did not write at the moment of sending — they are in the document a human drafted, which is what makes them worth checking against.
There was a fourth rule and it is gone: a signer allowlist. It refused any
recipient not pre-approved in an environment variable. The argument for it was
bounding who a manipulated agent could send to; the argument that won is that
sending someone a document to sign is what permission means, and requiring
every counterparty to be pre-approved on the box made signing with anyone new
an operator task. A permanent everyday cost against an occasional threat that
is already covered where it matters — on an agent deployment turbosign_send
sits behind human approval, and the person approving it is the person who
decided to send. See AR-7.
The document says where people sign — nothing else can
There is no placement argument, no coordinates and no fields array. The PDF
carries inline text anchors where each party signs, or it is refused.
That is deliberately narrower than the TurboSign API allows, and it was bought with experience: roughly ten signatures landed in the wrong place on a real agreement before it was corrected by hand. Every one was a position computed by something that could not see the page. An anchor cannot be off by a page, because the author put it where the signature goes.
The cost is accepted rather than hidden: a PDF you cannot edit cannot be sent through this server. Anchors have to be real extractable text, so they go in the source document and you re-export.
How to anchor a document
{Signature1}<tab><tab>{Date1}
______________________________________________
[Ann Jones Signature & Date]Above the line. On its own line directly above the signature rule. TurboSign draws the field downward from the anchor, so an anchor above the rule puts the signature on it. An anchor on the rule pushes it below.
Invisible. Colour the anchor text to match the page background — white on white. Still real text, so TurboSign finds it; nobody sees
{Signature1}on the executed agreement.Signature left, date right, same line, tab-separated.
The number is the signer's position in your recipients list, not their position in the document. A company that counter-signs at the top of the page but is second in your list gets
{Signature2}/{Date2}. Getting this backwards swaps who signs where — and the document still sends.
The same guidance comes back in the error when a document has no anchors, and it is served from one place in the code so the two cannot disagree.
turbosign_review is held to every rule above — a rehearsal that skipped the
checks would return a clean preview for a request that could never be sent.
Open the preview and look, every time: a wrong anchor number produces a
perfectly valid-looking agreement signed by the wrong party in the wrong place.
Getting credentialled
Ask the agent where to start:
> turbosign_setup()It reports what is missing and gives you the URL to create a TurboDocx account and the navigation to the API key. Then save the key one of two ways.
From a terminal — the key never enters the conversation:
.venv/bin/turbosign-mcp configurePrompts for the key with the echo off, verifies it against the live API, and
writes it owner-only to ~/.turbosign-mcp/credentials.json. Nothing is printed
but a masked fingerprint. Use this for any key you would mind seeing in a log.
There is deliberately no --api-key flag: a secret on a command line is
recorded in your shell history and is visible to every other user on the
machine via ps. Passing one is refused with an explanation rather than
silently ignored. For automated provisioning use --api-key-file, and
--org-id / --sender-email to skip the prompts.
Or through the agent, if convenience wins:
> turbosign_configure(api_key="...", org_id="...", sender_email="you@example.com")Same verification, same store. The trade-off is that the key travels through the agent's context and lands in that conversation's transcript on disk — fine for a scoped key on a test account, not fine for a long-lived one or for a session token that can do everything your user can.
Either way the credentials are checked against the live API before they are saved, so a mistyped key fails at setup rather than on your first real send. The server re-reads the store on every call, so there is nothing to restart.
turbosign_whoami() shows which account a machine is sending as — worth having
when the server is installed on several machines with different accounts.
Credentials never live in this repo
The store is at ~/.turbosign-mcp/credentials.json — outside the working
tree, so a credential cannot be committed by accident even if .gitignore
were wrong. .gitignore covers credentials.json, .env, *.pem and *.key
anyway, for the case where someone puts one in the tree deliberately. The test
suite needs no credentials, and its fixtures are obviously fake.
As a backstop that does not depend on anyone being careful, this repo has GitHub secret scanning and push protection enabled — a push carrying a recognised key pattern is rejected rather than published.
Credentials resolve in this order
TURBODOCX_*environment variables~/.turbosign-mcp/credentials.jsonNeither — the server still runs and still offers the setup tools
The environment always wins. On an unattended box where the harness injects
the key, it never passes through the agent's context and no tool call can
overwrite it. turbosign_configure is the interactive path for a machine
someone is sitting at.
The trade-off, stated plainly: anything you pass to turbosign_configure
travels through the agent's context and, on a supervised agent, across its
approval surface. That is fine for interactive setup. For unattended
instances, prefer the environment.
Testing: there is no sandbox
TurboSign has exactly one environment, and it is production. There is no test
host, no sandbox key and no dry-run flag — the "free sandbox" on the vendor's
marketing page means the free tier (5 signatures a month) on the live API. Every
turbosign_send reaches a real inbox, lands in a real audit trail, and cannot
be recalled, only voided.
So the server provides the rehearsal the API does not. Work up this ladder on any new machine, new document layout, or new account:
Emails anyone? | ||
1 |
| No |
2 |
| No |
3 |
| Yes |
Rung 2 is the important one: it uploads the document, parses the recipients, places the fields and passes the API's own validation — everything a send does except the send. Open the preview URL and look at where the boxes landed.
These instructions ship inside the server, so any MCP client that reads
get_instructions() gets them too, not just readers of this file.
If you are embedding this server in an agent host, gate turbosign_send
behind human approval, and consider gating turbosign_void as well —
cancelling someone's pending signature request is equally irreversible. Leave
turbosign_review ungated: it is the safe rehearsal, and gating it removes the
reason to prefer it.
Where the signature boxes go
By default (placement="auto") the server reads the PDF and decides:
Anchors, if the document has them. Text like
{Signature1},{Date1}or{Initial2}is replaced in place by TurboSign. The trailing digit picks the recipient. Exact placement, no geometry involved.Geometry, if it does not. A signature and date box per recipient at the foot of the last page.
So a document authored with anchors gets exact placement for free, and an arbitrary PDF still works. The response always reports which strategy was used.
Override with placement="anchor" (fail rather than fall back),
placement="coordinates", or pass a fields array for full control.
Anchors leave their token in the executed PDF
TurboSign paints over an anchor and draws the field on top, so nobody sees
{Signature1} on screen or on paper. But the token is still in the text
layer of the finished contract:
Signature: {Signature1}
Date: {Date1}It reaches copy-paste, search indexes, a document-management system's full-text extract, and screen readers.
There is no way to avoid this while using anchors. Making the token white or 1pt does not help — text extraction ignores colour and size, so pypdf, a search index and a screen reader all still find it. It only ever changed how the source looked, and TurboSign already covers the token in the output anyway. And the token cannot simply be omitted, because the API locates the field by extracting that text.
So it is a genuine trade-off, not a technique problem:
Placement follows reflowed content | Clean text layer | |
Anchors ( | Yes | No — token survives |
Coordinates / explicit | No — fixed geometry | Yes — no markers at all |
For a contract where the text layer matters — anything indexed, archived, or
read aloud — use placement="coordinates" or supply fields directly. Nothing
is written into the document, so nothing can leak out of it.
Verified on a real executed document, 2026-08-02.
Date format is an account setting, not an API parameter
Out of the box a date field renders 08/01/2026 for 1 August 2026 —
ambiguous to anyone who reads dates day-first. There is no per-field
date-format parameter: the field options are type, required,
defaultValue, isReadonly, backgroundColor and geometry, in the REST API
and in every official SDK.
Change it in the TurboDocx console, under your account settings. Richer
formats are available than the API docs suggest — including fully unambiguous
ones like Saturday, August 1st, 2026. Set it once and every subsequent
signature uses it.
Two consequences worth knowing:
It is a property of the sending account, not the request. Every document that account sends gets that format, and this server cannot override it per send. If you run several machines with different TurboDocx accounts, set the format on each one, or they will not match.
It is not retroactive. Verified: re-downloading an already-executed document after changing the setting returns a byte-identical file. The format is baked in at signing time.
If you cannot change the setting — someone else's account, say — spell the date in the body of the agreement ("this 1st day of August, 2026") and let the field date stand as the machine timestamp.
turbosign_review() takes the same arguments as turbosign_send() but emails
nobody and hands back a preview URL. Worth doing the first time you send a new
kind of document.
Configuration
Every setting is optional; the three credentials are needed before a send.
Variable | Default | |
| — | Bearer token |
| — |
|
| — | Reply-to; the API rejects sends without it |
| API key's name | Shown in the request emails |
|
| |
|
| Console, for |
|
| |
|
| Credential store location |
|
| Roots documents may be sent from |
|
| Upload cap |
|
| Per-request timeout, seconds |
Health
Stdio servers have no health endpoint, so:
.venv/bin/turbosign-mcp --selftestIt lists the registered tools and reports how the machine is configured. A machine with no credentials exits 0 — that is the normal state before setup, not a fault.
Notes for the curious
Why stdio and not HTTP. TurboSign is a stateless request/response API. There is no long-lived session to keep warm, so a container, a port and a health check would be pure overhead. The client launches the process; when it exits, nothing is left behind.
Why httpx directly and not turbodocx-sdk. This server is the thin
wrapper. Stacking it on a second wrapper buys drift protection at the price of
a pre-1.0 dependency and someone else's error messages — and error messages are
most of the value here, because an agent recovers from a sentence and cannot
recover from a stack trace.
Why the tools are synchronous. The usual MCP advice for a call to an external service is a background task the client polls. Stdio clients like Hermes do not poll the MCP task protocol, so that would make the primary consumer worse. Instead the calls are synchronous with a bounded timeout (90s, inside Hermes' 300s per-tool budget) and a 10 MB upload cap that keeps a typical send well inside the tighter ~60s budget of other clients.
Coordinates are top-left origin — y counts down from the top edge. That
is both documented ("Vertical position from top edge") and verified against the
live API, and it is isolated to one constant in placement.py so a future
change stays a one-line fix. See docs/VERIFICATION.md.
Architecture decisions
The four decisions most likely to look like mistakes to a new reader are
recorded as MADR records in architrix/adr/, in force as of
2026-08-09:
Stdio transport, not HTTP in a container | |
Call the API with httpx directly, not the official SDK | |
Synchronous tools with a bounded timeout, not | |
Environment beats stored credentials, and onboarding lives in the server | |
The signing chain is stated, never inferred (superseded by AR-7) | |
Inline text anchors are the only placement mechanism | |
The signer allowlist is removed |
Each records what was given up as well as what was gained. AR-3 in particular is a deliberate, documented deviation from the house MCP-server standard — read it before "fixing" the synchronous tools.
The architrix/ directory is Architrix's namespace in this repository, per the
ecosystem's directory-ownership convention. Edit the records through Architrix
(adr_create / adr_status with org="disciplin-run-org", then
github_save), not by hand — a hand-edit will be overwritten by the next save.
Development
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytestThe suite runs without network access or credentials — HTTP is mocked with
respx, and PDF fixtures are generated in code rather than committed, so
nothing in this public repo can carry a real name or address.
Licence
MIT.
Available Tools
12 toolsget_instructionsA
Return this server's usage instructions and recommended workflow.
Call this after a context compaction, or whenever it is unclear which tool to reach for.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly indicates this is a read-only operation via the verb 'return,' and the tool has no parameters or side effects. However, it does not explicitly state 'read-only' or mention any other behavioral traits beyond what the description conveys, but for a simple informational tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the purpose, and the second sentence adds actionable usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, zero-parameter tool with an output schema, the description fully explains what it returns and when to use it. Given the complexity of the sibling tools, this guidance tool is well-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so according to the rubric the baseline is 4. The description correctly omits any parameter details, and the schema coverage is trivially 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Return this server's usage instructions and recommended workflow.' It uses a specific verb ('return') and resource ('usage instructions'), and it distinguishes itself from the sibling tools, which are all turbosign operations or refresh_tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use it: 'Call this after a context compaction, or whenever it is unclear which tool to reach for.' This gives clear context and implies that if you know which tool to use, you shouldn't call this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_toolsA
Refresh the client's cached tool list after a server restart or upgrade. Call this instead of falling back to raw HTTP requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not have annotations to fall back on, and it provides some behavioral context by positioning the tool as a proper cache-refresh mechanism rather than raw HTTP. However, it does not disclose side effects like whether the refresh is destructive, idempotent, or has network implications. Without annotations, this is a moderate gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the main verb and object, and includes the key usage context and alternative without any fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (zero params, an output schema, and a simple cache-refresh function), the description is fully complete. It covers the purpose, the condition for calling, and the preferred alternative, while the output schema handles return-value documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is trivially 100%. Per the rubric, 0 parameters receives a baseline of 4, and the description does not need to elaborate on parameter semantics. It adds no parameter details, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool refreshes the client's cached tool list, with a specific trigger scenario ('after a server restart or upgrade'). This specific verb+resource combination distinguishes it from the turbosign_* sibling tools, which are all domain operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('after a server restart or upgrade') and names a clear alternative to avoid ('instead of falling back to raw HTTP requests'). However, it does not explicitly state when not to use it, which would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_audit_trailA
Get the tamper-evident history of a document.
Returns hash-chained entries — prepared, sent, viewed, signed, voided — newest last. Use this to answer "has Bob opened it yet?".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It details the return format (hash-chained entries), the event types, and the ordering (newest last), which is good. It does not mention side effects, but as a read-only history tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the core purpose, and avoids unnecessary detail. Every word adds value, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return values are already described. The description covers purpose and usage well, but the missing parameter explanations prevent it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, and the description provides no explanation of the 'limit' or 'document_id' parameters. It does not even mention them, leaving the agent to infer their meaning solely from the schema names. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb and resource: 'Get the tamper-evident history of a document.' It also differentiates from siblings like turbosign_status by focusing on the full audit trail rather than a simple status check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case (answering 'has Bob opened it yet?'), giving clear context for when to use this tool. It does not explicitly mention alternatives or exclusions, but the use case is specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_configureA
Save this machine's TurboDocx credentials after checking they work.
The credentials are verified against the live API before anything is written, so a mistyped key fails here rather than on your first real send. They are stored owner-only in ~/.turbosign-mcp/credentials.json.
Get the values from turbosign_setup(). sender_email is the reply-to address recipients see. sender_name is optional and defaults to the name on the API key. base_url is only for a non-production endpoint.
The key is never echoed back — only a masked fingerprint.
PRIVACY: whatever you pass here travels through this conversation and is written to its transcript on disk. For a scoped key on a test account that is usually fine. For a long-lived key, or a session token that can do everything the user can, tell the human to run this in their own terminal instead — same verification, same store, and the key never enters the conversation:
turbosign-mcp configure| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | ||
| api_key | Yes | ||
| base_url | No | ||
| sender_name | No | ||
| sender_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden. It discloses that credentials are verified against the live API before writing, stored owner-only in a specific path, never echoed back, and that passed values travel through the conversation transcript. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and every sentence earns its place: verification behavior, storage location, parameter semantics, security behavior, and privacy guidance. Despite being long, there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a credential-configuration tool: it covers verification, storage, privacy, parameter semantics, and when not to use it. An output schema exists, so return-value details are not required. Nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains sender_email as the reply-to address, sender_name's default behavior, and base_url's non-production purpose. However, api_key and especially org_id are only implicitly referenced and not clearly defined, leaving a small but notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Save this machine's TurboDocx credentials after checking they work.' It clearly distinguishes this configuration tool from siblings like turbosign_send or turbosign_setup by focusing on credential storage and verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to get values from turbosign_setup(), provides context for when this tool is appropriate (scoped key on a test account), and tells the agent to direct the human to a terminal command instead for long-lived keys or session tokens. This provides both usage context and an explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_downloadA
Download a completed signed document to a local file.
Only completed documents can be downloaded. output_path must be an absolute path in an existing directory.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses the key constraint that only completed documents can be downloaded, and that output_path must be an absolute path in an existing directory. While it doesn't detail error handling or side effects like file overwriting, it covers the most critical behavior for a download tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, direct, and without fluff. It front-loads the purpose first, then adds constraints. Every sentence earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with 2 required parameters and an output schema exists, so return values need not be explained. The description covers the essential purpose and constraints. It could mention behavior on invalid input or file conflicts, but for a basic download tool, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning to output_path by specifying it must be an absolute path in an existing directory, but does not elaborate on document_id. This partial compensation is insufficient to fully cover both parameters, hence a mid-range score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Download a completed signed document to a local file.' This specific verb+resource combination distinguishes it from sibling tools like turbosign_send or turbosign_status, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage condition ('Only completed documents can be downloaded') and a path prerequisite, but does not explicitly mention alternatives or when to prefer this tool over others. Usage is implied by the tool name and context rather than explicitly contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_resendA
Resend the signature request email to recipients who have not signed.
recipient_ids is a comma-separated list of recipient UUIDs — get them from turbosign_status(). Only recipients whose turn it is in the signing order will actually be emailed.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ||
| recipient_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of explaining behavior. It usefully discloses that only recipients whose turn it is in the signing order will be emailed, which is a nontrivial constraint. But it does not mention error handling for invalid IDs, whether the operation is idempotent, or any permissions needed. This is a moderate disclosure, not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences. The first sentence states the core purpose, and the second provides necessary parameter detail and a key behavior. Every word earns its place, with no fluff or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with two parameters and an output schema, the description is largely complete. It covers the action, the target recipients, the source of the IDs, and the eligibility rule. It omits possible error scenarios and return value details, but the output schema likely covers response structure. The description is sufficient for selecting and invoking the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It does explain recipient_ids as a comma-separated list of UUIDs sourced from turbosign_status(). This adds significant meaning. document_id is not explained, but it is a standard identifier and less ambiguous; still, it could have been clarified. Overall strong compensation for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Resend the signature request email to recipients who have not signed.' This uses a specific verb and resource, and the 'recipients who have not signed' qualifier distinguishes it from the initial send tool (turbosign_send). It is not tautological and provides a precise scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: to nudge signers who haven't signed yet. It also instructs users to retrieve recipient_ids from turbosign_status(), giving a prerequisite. However, it does not explicitly name alternatives like turbosign_send or state when not to use it, though the 'resend' and 'not signed' context makes this fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_reviewA
Prepare a document and get a preview URL WITHOUT emailing anyone.
Same arguments as turbosign_send. Use this to check where the signature boxes landed before committing to a real send — open the returned preview_url in a browser and look.
Worth doing the first time you send a particular kind of document.
| Name | Required | Description | Default |
|---|---|---|---|
| anchor | No | ||
| fields | No | ||
| cc_emails | No | ||
| file_path | Yes | ||
| placement | No | auto | |
| recipients | Yes | ||
| sequential | No | ||
| sender_name | No | ||
| sender_email | No | ||
| document_name | No | ||
| document_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the key behavioral trait: 'WITHOUT emailing anyone' and that it returns a preview URL. It also implies the document is only prepared, not sent, which is critical context. However, it doesn't mention any limitations like URL expiry or document retention, so it's not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the key point. Every sentence earns its place, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the clear use case and preview URL behavior, the tool has 11 parameters and 0% schema coverage. The description's reliance on 'Same arguments as turbosign_send' doesn't compensate for the lack of parameter documentation, making it incomplete for an agent to invoke correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description only says 'Same arguments as turbosign_send' without explaining any of the 11 parameters. It fails to add meaning beyond the schema, and the agent must look up another tool to understand required parameters like file_path and recipients.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool prepares a document and returns a preview URL without emailing anyone. It uses a specific verb+resource combination and explicitly differentiates from turbosign_send by highlighting the absence of emailing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'to check where the signature boxes landed before committing to a real send' and 'Worth doing the first time you send a particular kind of document.' This clearly frames it as a pre-send dry run, distinguishing it from the actual send tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_sendA
Send a document out for signature. This emails the recipients.
THERE IS NO SANDBOX — TurboSign has one environment and it is production. This reaches a real inbox and cannot be recalled, only voided. On a new machine, new document layout or new account, run turbosign_whoami(verify=True) then turbosign_review() first, and make your first real send to your own address.
turbosign_review() takes these exact arguments and emails nobody.
file_path: absolute path to a PDF (DOCX and PPTX also work, but only with an explicit anchor or fields, since they cannot be measured). recipients: "Bob Smith bob@example.com, ann@example.com", or a JSON array of {name, email} objects. placement: "auto" reads the document, uses {Signature1}-style anchors if they are there, and otherwise places a signature and date box per recipient at the foot of the last page. "anchor" requires anchors. "coordinates" forces automatic positioning. "explicit" requires a fields array. sequential: false (default) lets everyone sign at once; true makes them sign in the order listed.
Returns the document_id — keep it, every other tool needs it.
| Name | Required | Description | Default |
|---|---|---|---|
| anchor | No | ||
| fields | No | ||
| cc_emails | No | ||
| file_path | Yes | ||
| placement | No | auto | |
| recipients | Yes | ||
| sequential | No | ||
| sender_name | No | ||
| sender_email | No | ||
| document_name | No | ||
| document_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It warns 'THERE IS NO SANDBOX,' states emails reach real inboxes, and that documents 'cannot be recalled, only voided.' This is exceptional disclosure of production impact, far beyond typical mutation warnings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is logically organized: a safety warning, a pre-flight checklist, parameter definitions, and return value. Every sentence contributes essential information—no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters and no annotations, the description still covers purpose, safe usage, parameter semantics, and return value. The output schema provides return structure, and the description adds 'Returns the document_id — keep it, every other tool needs it' to support tool chaining. This is fully complete for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, requiring the description to compensate. It thoroughly explains the critical parameters: file_path, recipients, placement (including all four enum values and their behavior), and sequential. However, it leaves 7 optional parameters (e.g., anchor, fields, cc_emails, sender_name) with little or no direct explanation, though these are mostly self-explanatory and have defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'Send a document out for signature' — a clear verb+resource pair. It further distinguishes itself from the sibling turbosign_review by explicitly noting review 'takes these exact arguments and emails nobody,' making send's role as the actual email-sending tool unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: on new machines or accounts, run turbosign_whoami(verify=True) then turbosign_review() first, and make the first real send to your own address. This names the alternative (turbosign_review) and sets clear preconditions for safe use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_setupA
Start here on a machine that has never sent a signature request.
Reports which credentials are missing and where the present ones came from, then gives the URLs for creating a TurboDocx account and finding the API key and organization id. Follow the URLs, then call turbosign_configure() with the three values.
Set open_browser=True to also try opening the console locally — it is best-effort and reports whether it worked, since a server without a desktop has no browser to open.
| Name | Required | Description | Default |
|---|---|---|---|
| open_browser | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it reports which credentials are missing and where present ones came from, provides URLs, and explains that open_browser is best-effort with a rationale (no desktop on server). This is rich, honest behavioral context beyond what the schema alone could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first gives primary purpose, the second details outputs and next steps, the third explains the parameter. No filler, no repetition, and front-loaded with the most important usage cue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one optional param) and presence of an output schema, the description covers all necessary context: what it does, what it reports, how to proceed, and parameter behavior. Nothing essential is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional boolean (open_browser) with zero description coverage. The description fully compensates by explaining exactly what setting it to True does, its best-effort nature, and the reason behind it. This adds significant semantic meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Start here on a machine that has never sent a signature request,' which clearly identifies the tool as a setup/diagnostic utility for first-time configuration. It explicitly states it reports missing credentials and provides URLs for obtaining them, distinguishing it from siblings like turbosign_configure and turbosign_send.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence provides explicit when-to-use guidance ('never sent a signature request'), and the description instructs to 'call turbosign_configure() with the three values' as the next step, giving a clear sequence. It also explains the optional open_browser behavior, covering edge cases like headless servers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_statusA
Check where a signature request has got to.
Reports the document's state (pending, completed, voided) and, where the API returns them, each recipient's state and id. The recipient ids are what turbosign_resend() needs.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It reports the document and recipient states along with a caveat ('where the API returns them'), which adds transparency. However, it does not explicitly state that this is a read-only operation, nor does it mention potential errors, rate limits, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the core purpose ('Check where a signature request has got to') and then expands with concrete output details. Every sentence adds value without fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, output schema present), and the description effectively explains the return values and how they can be used (recipient ids for resend). It does not mention error scenarios or edge cases, but given the simplicity and presence of an output schema, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the schema only shows 'document_id' as a string). The description compensates by explaining that the parameter refers to a signature request/document, but it does not describe how to obtain the ID or any format constraints. For a single, obvious parameter, this is adequate but not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('a signature request'), and clearly states the tool reports the document's state (pending, completed, voided) and recipient states/ids. This distinguishes it from siblings like turbosign_send, turbosign_void, and turbosign_resend, which perform other actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: to check status and obtain recipient ids. It explicitly ties the output to turbosign_resend ('The recipient ids are what turbosign_resend() needs'), providing a concrete use case. It does not formally list exclusions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_voidA
Cancel a signature request that has not completed.
The reason is recorded in the audit trail and is required. This cannot be undone — send the document again if you need to restart.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears the responsibility. It discloses critical behavioral aspects: the reason is recorded in the audit trail, is required, and the action is irreversible. This provides important context beyond a simple 'cancel' and alerts the agent to potential consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The first sentence states the action and condition; the second conveys key consequences and an alternative. Information is front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two simple parameters and an output schema, the description covers the purpose, the condition, the required reason, audit trail recording, irreversibility, and a restart path. This is sufficient context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must add meaning. It explicitly states that reason is required and recorded in the audit trail, clarifying why that parameter is needed. document_id is self-explanatory as the target request, so overall the description compensates well for the schema's lack of detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Cancel' and a clear resource 'a signature request that has not completed,' which distinguishes it from sibling tools like turbosign_resend or turbosign_send. The condition 'has not completed' further clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: only for signature requests that have not completed. It also gives an alternative action ('send the document again') if the user needs to restart. However, it does not explicitly name sibling tools as alternatives or state when not to use it, leaving a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turbosign_whoamiA
Show which TurboDocx account this machine sends as.
Reports the masked API key, organization id, sender address, and where each value was resolved from — useful when the same server is installed on several machines with different accounts. With verify=True it also checks the credentials against the live API.
| Name | Required | Description | Default |
|---|---|---|---|
| verify | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the output contents (masked API key, org id, sender address, resolution source) and the live API check behavior when verify=True. It does not explicitly mention that verify defaults to true, but that is covered in the schema. It is transparent about the main behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence states the core purpose, followed by one concise sentence that lists reported fields and the verify behavior. No fluff or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional boolean parameter) and has an output schema, so the description does not need to enumerate return fields. It covers the tool's purpose, output contents, resolution source, and the verify behavior, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, verify, has a schema default but no schema description (0% coverage). The description adds meaning by stating that verify=True triggers a live API credential check, which goes beyond the raw type/default. It does not explicitly describe the false behavior, but the implication is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and resource ('which TurboDocx account this machine sends as'), clearly distinguishing it from sibling tools like send, status, and download. It immediately communicates the identity/diagnostic nature of the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case ('useful when the same server is installed on several machines with different accounts') that helps the agent decide when to invoke it. It does not explicitly state when not to use it or name alternatives, but the context is clear and sufficient for a simple diagnostic tool.
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.
12 tool updates
v0.4.2- First observed
get_instructions - First observed
refresh_tools - First observed
turbosign_audit_trail - First observed
turbosign_configure - First observed
turbosign_download - First observed
turbosign_resend - First observed
turbosign_review - First observed
turbosign_send - First observed
turbosign_setup - First observed
turbosign_status - First observed
turbosign_void - First observed
turbosign_whoami
TDQS
Scored across 12 tools
Each tool has a unique, focused purpose: setup guides credential configuration, configure saves credentials, whoami displays current identity, send/review/status/download/void/resend/audit_trail handle distinct stages of the signing workflow, and get_instructions/refresh_tools are server utilities. The only near-overlap is send vs review, but the explicit 'emails nobody' distinction makes them unambiguous.
Ten of twelve tools use the turbosign_ prefix, which is a strong pattern, but get_instructions and refresh_tools break it. Within the prefixed tools, some names are verbs (send, review, download) and some are nouns (status, audit_trail, whoami), so the convention is not perfectly uniform.
With 12 tools, the server covers the full signing lifecycle plus setup and utility functions without redundancy. This is a well-scoped size for an e-signature MCP server.
The toolset covers the entire document signing workflow: credential setup, configure, send, review, status, download, void, resend, and audit trail. Minor gaps, like a list-documents tool, but the core workflows are fully supported.
Maintenance
Related MCP Connectors
- SignvoyOAuthcom.signvoy
Send documents for e-signature, track signing status, and download signed PDFs. No API key required.
Fill and sign PDFs in the browser, send for signature, and track who has signed.
E-signature API for AI agents: send contracts, sign PDF documents, track and download signed files.
Send documents for legally binding e-signature and manage the reusable templates behind them.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables interaction with the BoldSign e-signature platform through its API. Supports managing documents, templates, contacts, users, and teams for electronic signature workflows.1427 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables users to create, manage, and track electronic signing requests and templates through Claude Desktop and other MCP-compatible clients. Provides multi-tenant authentication with customer API keys for secure document workflow operations.66 npm-

MCP Server ZapSignofficial
AlicenseNot gradedqualityAmaintenanceEnables integration with the ZapSign API for electronic document signing and management, including document, template, signer, webhook, and background check operations through MCP tools.225 npm1MIT- AlicenseNot gradedqualityBmaintenanceE-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.2 npmMIT