BoldSign MCP server for AI agents

Live

API KEY

E-SIGNATURE

Files & Documents

BoldSign gives your agent e-signature workflows: send documents and templates for signature, remind and reassign signers, track document status, and manage contacts, brands, teams, and sender identities.

  • Per-user credentials: each call uses the actual user's API key, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
BoldSign
agent · Acme Q3
Run
Which NDAs are still waiting on signatures?
S
boldsign_list_documents
112ms
Contracts agent
5 NDAs are in progress. 3 are waiting on one signer, and the oldest was sent 9 days ago.
Sources: BoldSign, 5 documents
boldsign
5 documents
18:29
Message Claude...

Tools your contracts agent reaches for on BoldSign, scoped per user.

CALL ANY TOOL
50 tools for e-signature in BoldSign: send documents and templates for signing, remind, reassign, and revoke, track document status, and manage templates, contacts, brands, teams, and sender identities.
boldsign_add_document_tags
Add document tags
Add tags to a document so it can be filtered later. Returns an empty response on success. Use to organize documents. Use boldsign_delete_document_tags to remove tags.
Parameters
Name
Type
Required
Description
documentId
string
Required
Document ID returned by boldsign_send_document or boldsign_list_documents.
tags
array
Required
Array of tag strings to add to the document.
boldsign_change_document_recipient
Change document recipient
boldsign_create_contact_group
Create contact group
boldsign_create_contacts
Create contacts
boldsign_create_embedded_template_send_url
Create embedded template send url
boldsign_delete_brand
Delete brand
boldsign_delete_contact
Delete contact
boldsign_delete_custom_field
Delete custom field
boldsign_delete_document_tags
Delete document tags
boldsign_delete_template
Delete template
boldsign_extend_document_expiry
Extend document expiry
boldsign_get_api_credits
Get api credits
boldsign_get_brand
Get brand
boldsign_get_contact_group
Get contact group
boldsign_get_embedded_sign_link
Get embedded sign link
boldsign_get_sender_identity
Get sender identity
boldsign_get_template_properties
Get template properties
boldsign_list_brands
List brands
boldsign_list_contact_groups
List contact groups
boldsign_list_custom_fields
List custom fields
boldsign_list_documents
List documents
boldsign_list_sender_identities
List sender identities
boldsign_list_team_documents
List team documents
boldsign_list_templates
List templates
boldsign_merge_and_send_template
Merge and send template
boldsign_remind_document
Remind document
boldsign_resend_sender_identity_invitation
Resend sender identity invitation
boldsign_send_document_from_template
Send document from template
boldsign_set_default_brand
Set default brand
boldsign_update_contact
Update contact

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// BoldSign tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["boldsign"], toolNames: [
    "boldsign_send_document_from_template",
    "boldsign_list_documents",
    "boldsign_remind_document"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "List NDAs still waiting on signatures" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["boldsign"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "List NDAs still waiting on signatures" }],
  tools,
});

// Execute the tool call with the user's vaulted BoldSign API key
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["boldsign"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "List NDAs still waiting on signatures" }],
  tools,
});

// Tool call runs with the user's vaulted BoldSign API key
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["boldsign"] }, pageSize: 100,
});

const agent = new Agent({
  name: "contracts_agent",
  model: "gemini-2.5-pro",
  instruction: "BoldSign tools scoped to this user",
  tools,
});

await agent.run("List NDAs still waiting on signatures");
Try these prompts
Copy any prompt into your agent. Each maps directly to a BoldSign tool. Click to copy, paste into your agent, done.
Send
Copy the prompt
Copied
Send the Acme MSA template to jane@acme.com for signature.
Copy the prompt
Copied
Merge the NDA and MSA templates and send them to sam@globex.com.
Copy the prompt
Copied
Send draft document 7c1e to its signers.
Track
Copy the prompt
Copied
List documents waiting on signatures from the last 30 days.
Copy the prompt
Copied
Remind the pending signers on the Globex order form.
Copy the prompt
Copied
Extend the expiry of the Acme NDA by 14 days.
Manage
Copy the prompt
Copied
Replace the signer on the Initech SOW with tom@initech.com.
Copy the prompt
Copied
Create a contact group called Legal Reviewers.
Copy the prompt
Copied
How many API credits do we have left?
SEE HOW AUTH WORKS
Each user connects their own BoldSign API key once, and Scalekit sends it with every call. Keys stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
BoldSign
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
BoldSign
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
BoldSign
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
BoldSign
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other documents and e-signature connectors.
People Ops and HR teams
Offer letter routing agent
Drafts the offer in PandaDoc, blocks on the hiring manager's approval in Slack, then emails the candidate their e-signature link. Every call runs as the recruiter who triggered it, never a shared HR bot.
GTM and RevOps Teams
Deal room sync
Pulls opportunity context from Salesforce, captures key decisions from Slack, and syncs a running summary to the deal room doc in Google Drive, but only when the deal actually changed.
Test other agents
See the same per-user auth pattern across other documents and e-signature connectors.
PEOPLE OPS
Offer letter routing agent
Draft the offer in PandaDoc, gate it on hiring manager approval in Slack, then email the candidate their signature link.
GTM
Deal room sync agent
Pull opportunity context from Salesforce, capture decisions from Slack, and keep the Google Drive deal room doc current.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared BoldSign API key looks fine in a demo. In production every signature request looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
BoldSign today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access BoldSign as the user or through a shared API key?
As the user. Each user connects their own BoldSign API key once, and Scalekit sends it with every call. Documents the agent sends, reminds, or revokes are attributed to that user in your audit trail, not a shared service account.
Where is the BoldSign API key stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new API key. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in BoldSign?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example document tracking tools without boldsign_delete_document and boldsign_revoke_document. Scalekit also enforces scope checks before every API call.
What happens when a user revokes BoldSign access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent see documents sent by other people on the team?
Yes, where the API key owner has access. boldsign_list_team_documents lists documents sent by members of teams the owner administers, and boldsign_list_documents_on_behalf lists documents sent on behalf of other senders. boldsign_list_documents covers the owner's own sent and received documents.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""boldsign"": {
""url"": ""https://mcp.scalekit.com/boldsign"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.boldsign]
url = ""https://mcp.scalekit.com/boldsign""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""boldsign"": {
""url"": ""https://mcp.scalekit.com/boldsign"",
""type"": ""http""
}
}
}