@dwn-protocol/sign-mcp-server
v1.0.0
Published
MCP server for Abaxx Sign API - provides tools for document signing workflows
Readme
Abaxx Sign MCP Server
A Model Context Protocol (MCP) server that provides programmatic access to the Abaxx Sign API for document signing workflows.
Features
- Complete API Coverage: Supports both V1 (stable) and V2-beta endpoints
- Document Management: Create, retrieve, update, delete, send, and download documents
- Recipient Operations: Add, update, and remove recipients from documents
- Field Management: Add signature fields, text fields, and other form elements
- Template Support: Create templates and generate documents from templates
- Flexible Configuration: Switch between local development and production environments
- Error Handling: Comprehensive error messages and rate limit handling
Installation
As an npm Package (Recommended)
npm install -g @dwn-protocol/sign-mcp-server
# or
npm install @dwn-protocol/sign-mcp-serverThe package is publicly available on npm and includes a CLI binary (sign-mcp-server).
From Source
git clone <repository-url>
cd mcp-tool
bun install
bun run buildTesting with MCP Inspector
npx @modelcontextprotocol/inspector sign-mcp-server --base-url http://localhost:3000 --api-token api_b9ux91s6rri5nkwcConfiguration
The server requires two command-line arguments:
--base-url: The API base URL- Local development:
http://localhost:3000 - Production:
https://sign.abaxx.id
- Local development:
--api-token: Your Abaxx Sign API token (format:api_xxxxxxxxxxxxxxxx)- Note: The token is automatically prefixed with "Bearer" in the Authorization header
Getting an API Token
- Navigate to Abaxx Sign Settings
- Click "Create token"
- Choose a descriptive name and expiration date
- Copy the generated token (you won't be able to see it again)
Usage with Claude Desktop
Add the server to your Claude Desktop MCP configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
Using the npm Package (Recommended)
If you installed globally (npm install -g @dwn-protocol/sign-mcp-server):
{
"mcpServers": {
"abaxx-sign": {
"command": "sign-mcp-server",
"args": [
"--base-url",
"https://sign.abaxx.id",
"--api-token",
"api_your_token_here"
]
}
}
}Or with npx (no global install needed):
{
"mcpServers": {
"abaxx-sign": {
"command": "npx",
"args": [
"-y",
"@dwn-protocol/sign-mcp-server",
"--base-url",
"https://sign.abaxx.id",
"--api-token",
"api_your_token_here"
]
}
}
}Local Development Configuration
{
"mcpServers": {
"abaxx-sign-local": {
"command": "sign-mcp-server",
"args": [
"--base-url",
"http://localhost:3000",
"--api-token",
"api_dev_your_token_here"
]
}
}
}Multiple Environments
You can configure both development and production simultaneously:
{
"mcpServers": {
"abaxx-sign-local": {
"command": "sign-mcp-server",
"args": [
"--base-url",
"http://localhost:3000",
"--api-token",
"api_dev_token"
]
},
"abaxx-sign-production": {
"command": "sign-mcp-server",
"args": [
"--base-url",
"https://sign.abaxx.id",
"--api-token",
"api_prod_token"
]
}
}
}Using Local Build (Development)
If you're developing the MCP server locally:
{
"mcpServers": {
"abaxx-sign-local": {
"command": "node",
"args": [
"/absolute/path/to/mcp-tool/build/index.js",
"--base-url",
"http://localhost:3000",
"--api-token",
"api_dev_token"
]
}
}
}Available Tools
Document Operations
get_documents
List all documents with pagination.
Parameters:
page(optional): Page number (default: 1)perPage(optional): Items per page (default: 10)apiVersion(optional): "v1" or "v2-beta" (default: "v1")
get_document
Get a single document with recipients and fields.
Parameters:
documentId(required): Document IDapiVersion(optional): "v1" or "v2-beta" (default: "v1")
create_document
Create a new document and receive an upload URL for the PDF.
Parameters:
title(required): Document titlerecipients(required): Array of recipient objectsexternalId(optional): External reference IDfolderId(optional): Folder IDmeta(optional): Document metadata (subject, message, timezone, etc.)authOptions(optional): Authentication requirementsformValues(optional): Pre-filled form valuesapiVersion(optional): "v1" or "v2-beta" (default: "v1")
Example:
{
"title": "Contract.pdf",
"recipients": [
{
"name": "John Doe",
"email": "[email protected]",
"role": "SIGNER",
"signingOrder": 0
}
],
"meta": {
"subject": "Please sign this contract",
"message": "Please review and sign at your earliest convenience."
}
}update_document
Update document properties (V2 only).
Parameters:
documentId(required): Document IDtitle(optional): New titleexternalId(optional): New external IDmeta(optional): Updated metadata
delete_document
Delete a document permanently.
Parameters:
documentId(required): Document IDapiVersion(optional): "v1" or "v2-beta" (default: "v1")
send_document
Send document to recipients for signing.
Parameters:
documentId(required): Document IDsendEmail(optional): Send email notifications (default: true)sendCompletionEmails(optional): Send completion emails (V1 only)apiVersion(optional): "v1" or "v2-beta" (default: "v1")
resend_document
Resend notification emails to specific recipients (V1 only).
Parameters:
documentId(required): Document IDrecipients(required): Array of recipient IDs
download_document
Get download URL for a signed document.
Parameters:
documentId(required): Document IDdownloadOriginalDocument(optional): Download original instead of signed (default: false)apiVersion(optional): "v1" or "v2-beta" (default: "v1")
Recipient Operations
get_recipient
Get recipient details (V2 only).
Parameters:
recipientId(required): Recipient ID
create_recipient
Add a recipient to a document.
Parameters:
documentId(required): Document IDname(required): Recipient nameemail(required): Recipient emailrole(required): "SIGNER", "APPROVER", "CC", or "VIEWER"signingOrder(optional): Signing order numberauthOptions(optional): Authentication options (V1 only)apiVersion(optional): "v1" or "v2-beta" (default: "v1")
update_recipient
Update recipient information.
Parameters:
recipientId(required): Recipient IDdocumentId(optional): Document ID (required for V1)name(optional): New nameemail(optional): New emailapiVersion(optional): "v1" or "v2-beta" (default: "v1")
delete_recipient
Remove a recipient from a document.
Parameters:
recipientId(required): Recipient IDdocumentId(optional): Document ID (required for V1)apiVersion(optional): "v1" or "v2-beta" (default: "v1")
Field Operations
get_field
Get field details (V2 only).
Parameters:
fieldId(required): Field ID
create_field
Add field(s) to a document.
Parameters:
documentId(required): Document IDfield(V2): Field objectfields(V1): Array of field objectsapiVersion(optional): "v1" or "v2-beta" (default: "v1")
Field Types: SIGNATURE, NAME, EMAIL, DATE, TEXT, NUMBER, CHECKBOX, RADIO, SELECT
Example (V1):
{
"documentId": 123,
"fields": [
{
"recipientId": 55,
"type": "SIGNATURE",
"pageNumber": 1,
"pageX": 50,
"pageY": 20,
"pageWidth": 25,
"pageHeight": 5
}
]
}update_field
Update field properties.
Parameters:
fieldId(required): Field IDdocumentId(optional): Document ID (required for V1)- Position and size parameters (optional)
apiVersion(optional): "v1" or "v2-beta" (default: "v1")
delete_field
Remove a field from a document.
Parameters:
fieldId(required): Field IDdocumentId(optional): Document ID (required for V1)apiVersion(optional): "v1" or "v2-beta" (default: "v1")
Template Operations
get_templates
List all templates with pagination.
Parameters:
page(optional): Page number (default: 1)perPage(optional): Items per page (default: 10)apiVersion(optional): "v1" or "v2-beta" (default: "v1")
get_template
Get a single template with details.
Parameters:
templateId(required): Template IDapiVersion(optional): "v1" or "v2-beta" (default: "v1")
create_template
Create a new template and receive upload URL.
Parameters:
title(required): Template titleexternalId(optional): External reference IDapiVersion(optional): "v1" or "v2-beta" (default: "v1")
delete_template
Delete a template permanently.
Parameters:
templateId(required): Template IDapiVersion(optional): "v1" or "v2-beta" (default: "v1")
generate_document_from_template
Create a document from a template.
Parameters:
templateId(required): Template IDrecipients(required): Recipients with template recipient IDstitle(optional): Document titleexternalId(optional): External reference IDmeta(optional): Document metadataprefillFields(optional): Pre-fill field valuesapiVersion(optional): "v1" or "v2-beta" (default: "v1")
Example:
{
"templateId": 99,
"recipients": [
{
"id": 10,
"name": "Jane Doe",
"email": "[email protected]"
}
],
"prefillFields": [
{
"id": 21,
"type": "text",
"value": "Acme Corporation"
}
]
}API Versions
V1 (Stable - Recommended for Production)
- Production-ready and stable
- No breaking changes without advance notice
- Full support and maintenance
- Base path:
/api/v1
V2-beta (Beta - Subject to Change)
- Enhanced features and bulk operations
- Subject to breaking changes
- Not recommended for production
- Base path:
/api/v2-beta
Rate Limits
- Limit: 100 requests per minute per IP address
- Response: 429 Too Many Requests
When rate limited, wait at least 60 seconds before retrying.
Error Handling
The server provides detailed error messages:
- 400: Bad request (validation error or limit exceeded)
- 401: Unauthorized (invalid API key)
- 404: Resource not found
- 429: Too many requests (rate limit exceeded)
- 500: Server error
Development
Build
bun run buildWatch Mode
bun run devProject Structure
sign-mcp/
├── src/
│ └── index.ts # Main server implementation
├── build/
│ └── index.js # Compiled output
├── package.json
├── tsconfig.json
└── README.mdBest Practices
- Store Document IDs: Save returned document IDs for future reference
- Handle Upload Timeouts: Upload URLs expire after 1 hour
- Validate Recipients: Ensure email addresses are valid before sending
- Use External IDs: Track documents in your system using
externalId - Implement Webhooks: Use Abaxx Sign webhooks for real-time status updates
- Respect Rate Limits: Stay within the 100 requests/minute limit
- Error Handling: Always check for and handle API errors
Common Workflows
Create and Send a Document
- Create document with
create_document - Upload PDF to the returned
uploadUrl - Add fields with
create_field - Send to recipients with
send_document
Use a Template
- Get template details with
get_template - Note the template recipient IDs
- Generate document with
generate_document_from_template - Document is ready to send
