SignRequest MCP by usefulapi
Read documents, signature requests and templates; send, cancel and resend requests in SignRequest.
Should I use this
Quality & Safety
Findings (4)
- HIGH
- MEDIUMin signrequest_get_template
- LOWin signrequest_resend_signrequest_email
- INFOin signrequest_get_template
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"signrequest": {
"url": "https://signrequest.usefulapi.io/mcp"
}
}
}Remote endpoints
https://signrequest.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (14)
🟢signrequest_list_documents(status, external_id, signrequest__who, signrequest__from_email, user__email, ...)
List documents of the team with status, signers state and signing log links. API: GET /documents/.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Document status code: co converting, ne new, se sent, vi viewed, si signed, do downloaded, sd signed and downloaded, ca cancelled, de declined, ec error converting, es error sending, xp expired.",
"type": "string",
"enum": [
"co",
"ne",
"se",
"vi",
"si",
"do",
"sd",
"ca",
"de",
"ec",
"es",
"xp"
]
},
"external_id": {
"description": "Filter by your own external id.",
"type": "string"
},
"signrequest__who": {
"description": "Filter by sender: m = me, mo = me and others, o = others.",
"type": "string",
"enum": [
"m",
"mo",
"o"
]
},
"signrequest__from_email": {
"description": "Filter by the sender email.",
"type": "string"
},
"user__email": {
"description": "Filter by the document owner email.",
"type": "string"
},
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_get_document(document_uuid)
Get one document by uuid: status, signrequest with all signers, signing log, attachments, and temporary download links (pdf). API: GET /documents/{uuid}/.
Input Schema
{
"type": "object",
"properties": {
"document_uuid": {
"type": "string",
"minLength": 1,
"description": "The document uuid."
}
},
"required": [
"document_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_search_documents(q, name, signer_emails, status, who, ...)
Search documents by free text, name, signer email or status. API: GET /documents-search/.
Input Schema
{
"type": "object",
"properties": {
"q": {
"description": "Free-text query.",
"type": "string"
},
"name": {
"description": "Filter by document name.",
"type": "string"
},
"signer_emails": {
"description": "Filter by signer email.",
"type": "string"
},
"status": {
"description": "Document status code: co converting, ne new, se sent, vi viewed, si signed, do downloaded, sd signed and downloaded, ca cancelled, de declined, ec error converting, es error sending, xp expired.",
"type": "string",
"enum": [
"co",
"ne",
"se",
"vi",
"si",
"do",
"sd",
"ca",
"de",
"ec",
"es",
"xp"
]
},
"who": {
"description": "Filter by sender: m = me, mo = me and others, o = others.",
"type": "string",
"enum": [
"m",
"mo",
"o"
]
},
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_list_signrequests(who, from_email, page, limit)
List signature requests (the sent requests with their signers). API: GET /signrequests/.
Input Schema
{
"type": "object",
"properties": {
"who": {
"description": "Filter by sender: m = me, mo = me and others, o = others.",
"type": "string",
"enum": [
"m",
"mo",
"o"
]
},
"from_email": {
"description": "Filter by the sender email.",
"type": "string"
},
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_get_signrequest(signrequest_uuid)
Get one signature request by uuid, with each signer's viewed, signed, declined and forwarded state. API: GET /signrequests/{uuid}/.
Input Schema
{
"type": "object",
"properties": {
"signrequest_uuid": {
"type": "string",
"minLength": 1,
"description": "The signature request uuid."
}
},
"required": [
"signrequest_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_list_templates(page, limit)
List document templates (use a template uuid with signrequest_send_document). API: GET /templates/.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_get_template(template_uuid)
Get one template by uuid, with its signer placeholders. API: GET /templates/{uuid}/.
Input Schema
{
"type": "object",
"properties": {
"template_uuid": {
"type": "string",
"minLength": 1,
"description": "The template uuid."
}
},
"required": [
"template_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_list_teams(page, limit)
List the teams the token can see (name, subdomain, sandbox flag). API: GET /teams/.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_get_team(subdomain)
Get one team by subdomain. API: GET /teams/{subdomain}/.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"type": "string",
"minLength": 1,
"description": "The team subdomain (from signrequest_list_teams)."
}
},
"required": [
"subdomain"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_list_team_members(is_active, is_admin, user__email, page, limit)
List team members with admin, owner and active flags. API: GET /team-members/.
Input Schema
{
"type": "object",
"properties": {
"is_active": {
"description": "Only active (true) or inactive (false) members.",
"type": "boolean"
},
"is_admin": {
"description": "Only admins (true) or non-admins (false).",
"type": "boolean"
},
"user__email": {
"description": "Filter by member email.",
"type": "string"
},
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢signrequest_list_events(document__uuid, document__external_id, event_type, page, limit)
List document events (sent, viewed, signed, declined, cancelled, bounced) and their callback delivery state. API: GET /events/.
Input Schema
{
"type": "object",
"properties": {
"document__uuid": {
"description": "Only events of this document uuid.",
"type": "string"
},
"document__external_id": {
"description": "Only events of the document with this external id.",
"type": "string"
},
"event_type": {
"description": "Event type, for example signed, declined, sent, signer_signed, signer_email_bounced.",
"type": "string"
},
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴signrequest_send_document(signers, from_email, from_email_name, subject, message, ...)
WRITE: creates a document and e-mails a signature request to the signers right away (not undoable except with signrequest_cancel_signrequest). Give exactly one source: a template uuid, a public file_from_url, or base64 file_from_content with file_from_content_name. API: POST /signrequest-quick-create/.
Input Schema
{
"type": "object",
"properties": {
"signers": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Signer email."
},
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"needs_to_sign": {
"description": "false = the person only receives a copy (default true).",
"type": "boolean"
},
"approve_only": {
"description": "true = the person approves instead of signing.",
"type": "boolean"
},
"order": {
"description": "Signing order (0 first).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"language": {
"description": "Signer language code, for example en, nl, de, fr.",
"type": "string"
}
},
"required": [
"email"
]
},
"description": "Who must sign."
},
"from_email": {
"description": "Sender email (a verified team member address).",
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"from_email_name": {
"description": "Sender name shown in the e-mail.",
"type": "string"
},
"subject": {
"description": "E-mail subject.",
"type": "string"
},
"message": {
"description": "E-mail message.",
"type": "string"
},
"name": {
"description": "Document name.",
"type": "string"
},
"template": {
"description": "Template API url or uuid-based url from signrequest_list_templates (the url field).",
"type": "string"
},
"file_from_url": {
"description": "Public https URL of the file to sign.",
"type": "string",
"format": "uri"
},
"file_from_content": {
"description": "Base64 file content.",
"type": "string"
},
"file_from_content_name": {
"description": "File name with extension for file_from_content.",
"type": "string"
},
"external_id": {
"description": "Your own reference id.",
"type": "string"
},
"send_reminders": {
"description": "Send automatic reminders.",
"type": "boolean"
},
"auto_expire_days": {
"description": "Days until the request expires.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"who": {
"description": "Who signs: m = me, mo = me and others, o = others.",
"type": "string",
"enum": [
"m",
"mo",
"o"
]
}
},
"required": [
"signers"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴signrequest_cancel_signrequest(signrequest_uuid)
WRITE: cancels a signature request that is not fully signed or declined. Signers who have not signed can no longer open the document. Not undoable. API: POST /signrequests/{uuid}/cancel_signrequest/.
Input Schema
{
"type": "object",
"properties": {
"signrequest_uuid": {
"type": "string",
"minLength": 1,
"description": "The signature request uuid."
}
},
"required": [
"signrequest_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴signrequest_resend_signrequest_email(signrequest_uuid)
WRITE: sends the signature request e-mail again as a reminder to every signer who did not sign yet but already got the e-mail. API: POST /signrequests/{uuid}/resend_signrequest_email/.
Input Schema
{
"type": "object",
"properties": {
"signrequest_uuid": {
"type": "string",
"minLength": 1,
"description": "The signature request uuid."
}
},
"required": [
"signrequest_uuid"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence