npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@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-server

The 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 build

Testing with MCP Inspector

npx @modelcontextprotocol/inspector sign-mcp-server --base-url http://localhost:3000 --api-token api_b9ux91s6rri5nkwc

Configuration

The server requires two command-line arguments:

  • --base-url: The API base URL
    • Local development: http://localhost:3000
    • Production: https://sign.abaxx.id
  • --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

  1. Navigate to Abaxx Sign Settings
  2. Click "Create token"
  3. Choose a descriptive name and expiration date
  4. 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 ID
  • apiVersion (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 title
  • recipients (required): Array of recipient objects
  • externalId (optional): External reference ID
  • folderId (optional): Folder ID
  • meta (optional): Document metadata (subject, message, timezone, etc.)
  • authOptions (optional): Authentication requirements
  • formValues (optional): Pre-filled form values
  • apiVersion (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 ID
  • title (optional): New title
  • externalId (optional): New external ID
  • meta (optional): Updated metadata

delete_document

Delete a document permanently.

Parameters:

  • documentId (required): Document ID
  • apiVersion (optional): "v1" or "v2-beta" (default: "v1")

send_document

Send document to recipients for signing.

Parameters:

  • documentId (required): Document ID
  • sendEmail (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 ID
  • recipients (required): Array of recipient IDs

download_document

Get download URL for a signed document.

Parameters:

  • documentId (required): Document ID
  • downloadOriginalDocument (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 ID
  • name (required): Recipient name
  • email (required): Recipient email
  • role (required): "SIGNER", "APPROVER", "CC", or "VIEWER"
  • signingOrder (optional): Signing order number
  • authOptions (optional): Authentication options (V1 only)
  • apiVersion (optional): "v1" or "v2-beta" (default: "v1")

update_recipient

Update recipient information.

Parameters:

  • recipientId (required): Recipient ID
  • documentId (optional): Document ID (required for V1)
  • name (optional): New name
  • email (optional): New email
  • apiVersion (optional): "v1" or "v2-beta" (default: "v1")

delete_recipient

Remove a recipient from a document.

Parameters:

  • recipientId (required): Recipient ID
  • documentId (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 ID
  • field (V2): Field object
  • fields (V1): Array of field objects
  • apiVersion (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 ID
  • documentId (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 ID
  • documentId (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 ID
  • apiVersion (optional): "v1" or "v2-beta" (default: "v1")

create_template

Create a new template and receive upload URL.

Parameters:

  • title (required): Template title
  • externalId (optional): External reference ID
  • apiVersion (optional): "v1" or "v2-beta" (default: "v1")

delete_template

Delete a template permanently.

Parameters:

  • templateId (required): Template ID
  • apiVersion (optional): "v1" or "v2-beta" (default: "v1")

generate_document_from_template

Create a document from a template.

Parameters:

  • templateId (required): Template ID
  • recipients (required): Recipients with template recipient IDs
  • title (optional): Document title
  • externalId (optional): External reference ID
  • meta (optional): Document metadata
  • prefillFields (optional): Pre-fill field values
  • apiVersion (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 build

Watch Mode

bun run dev

Project Structure

sign-mcp/
├── src/
│   └── index.ts          # Main server implementation
├── build/
│   └── index.js          # Compiled output
├── package.json
├── tsconfig.json
└── README.md

Best Practices

  1. Store Document IDs: Save returned document IDs for future reference
  2. Handle Upload Timeouts: Upload URLs expire after 1 hour
  3. Validate Recipients: Ensure email addresses are valid before sending
  4. Use External IDs: Track documents in your system using externalId
  5. Implement Webhooks: Use Abaxx Sign webhooks for real-time status updates
  6. Respect Rate Limits: Stay within the 100 requests/minute limit
  7. Error Handling: Always check for and handle API errors

Common Workflows

Create and Send a Document

  1. Create document with create_document
  2. Upload PDF to the returned uploadUrl
  3. Add fields with create_field
  4. Send to recipients with send_document

Use a Template

  1. Get template details with get_template
  2. Note the template recipient IDs
  3. Generate document with generate_document_from_template
  4. Document is ready to send

Resources

License

This project is built using Bun and the MCP SDK.