Skip to content
NewTwo Macs, one Claude Code setup: skills as plugins, not symlinks
Logbook
Jul 12, 2025·5 MIN READ
SignNow MCP Server: E-Signatures Straight from Claude Code

SignNow MCP Server: E-Signatures Straight from Claude Code

I open-sourced an MCP server that brings SignNow e-signatures into Claude Code. Upload documents, send signing invites, track status, and download signed PDFs — all without leaving your terminal.

Key takeaways

  • The signnow-mcp server exposes 11 tools covering the full document signing lifecycle.
  • Natural language replaces API calls: upload, sign, and track documents from the terminal.
  • SignNow sandbox provides 2,000 free signature invites for development and testing.

A few weeks ago I published a deep dive on integrating SignNow e-signatures into a Django application. That article covered the full server-side integration — OAuth2, document uploads, Celery tasks, webhooks — everything you need for a production signing workflow.

But I kept coming back to the same thought: what if you didn't need a web app at all? What if you could upload a contract, send it for signing, and check its status without ever leaving your terminal?

That's exactly what I built. Today I'm open-sourcing signnow-mcp — a Model Context Protocol server that brings airSlate SignNow's e-signature capabilities directly into Claude Code.

What is MCP?

The Model Context Protocol (MCP) is an open standard that lets AI assistants like Claude interact with external tools and services. Think of it as a plugin system — you register an MCP server, and Claude gains new abilities.

In my case, those abilities are e-signatures.

What the server does

The signnow-mcp server exposes 11 tools that cover the full document lifecycle:

ToolWhat it does
upload_documentUpload a PDF to SignNow
get_documentGet document details and signing status
list_documentsList all documents in the account
download_signed_documentDownload a signed PDF locally
send_signing_inviteSend a freeform e-signature invite
send_role_based_inviteSend a role-based invite with field assignments
cancel_inviteCancel pending signing invites
add_signature_fieldAdd a signature field to a document
list_templatesList all document templates
create_from_templateCreate a document from a template
register_webhookRegister a webhook for document events

Once connected, you interact with these tools through natural language. No API calls, no curl commands, no switching between browser tabs.

How it looks in practice

Here's what it looks like when you ask Claude Code to list your SignNow documents:

Claude calls the list_documents tool behind the scenes and presents the results in a clean table. You can then follow up with natural language — "download the first one", "send document #2 to [email protected] for signing", or "what's the status of the deposit confirmation?".

Setting it up

1. Get SignNow API credentials

  1. Create a SignNow account
  2. Go to API > Applications and create an application
  3. Note your client_id and client_secret
  4. Base64-encode them:
echo -n "client_id:client_secret" | base64

2. Clone and install

git clone https://github.com/musictechlab/signnow-mcp.git
cd signnow-mcp
cp .env.example .env
# Edit .env with your credentials
poetry install

3. Register with Claude Code

The quickest way:

claude mcp add signnow -- poetry -C /path/to/signnow-mcp run python -m signnow_mcp.server

Or add it manually to your MCP configuration:

claude_mcp_config.json
{
  "signnow": {
    "type": "stdio",
    "command": "poetry",
    "args": ["-C", "/path/to/signnow-mcp", "run", "python", "-m", "signnow_mcp.server"],
    "env": {
      "SIGNNOW_API_BASE_URL": "https://api.signnow.com",
      "SIGNNOW_BASIC_AUTH": "your-base64-encoded-credentials",
      "SIGNNOW_USERNAME": "[email protected]",
      "SIGNNOW_PASSWORD": "your-password"
    }
  }
}

Use the sandbox environment (https://api-eval.signnow.com) for testing. SignNow provides 2,000 free signature invites in sandbox mode.

4. Start using it

Once configured, just talk to Claude:

  • "Upload contract.pdf to SignNow and send it to [email protected] for signing"
  • "Check the signing status of document abc123"
  • "List all my SignNow documents"
  • "Download the signed version of the NDA"
  • "Create a new document from the deposit template and send it to the client"

Why I built this

I use SignNow for sending contracts, NDAs, and deposit confirmations as part of the BeatBuddy onboarding flow. My Django integration handles the automated pipeline, but there are always ad-hoc tasks — checking a document's status, resending an invite, downloading a signed copy for the records.

Before the MCP server, that meant logging into the SignNow dashboard or writing one-off API calls. Now it's a single sentence in Claude Code.

This pattern — wrapping a third-party API as an MCP server — works for any service with a REST API. If you find yourself repeatedly switching to a web dashboard to do something, consider building an MCP server for it.

Sandbox vs. production

SignNow provides separate environments for testing and production:

EnvironmentAPI URLApp URL
Sandboxhttps://api-eval.signnow.comhttps://app-eval.signnow.com
Productionhttps://api.signnow.comhttps://app.signnow.com

Never use production credentials for development. The sandbox environment is free and gives you 2,000 signature invites to test with.

FAQ

What is the SignNow MCP server?

It is an open-source Model Context Protocol server that connects airSlate SignNow's e-signature API to Claude Code and other MCP-compatible clients. It lets you manage documents, send signing invites, and download signed PDFs directly from your terminal.

Is this an official SignNow product?

No. This is a side project of mine. It is not affiliated with or endorsed by airSlate SignNow.

What tools does the server provide?

The server exposes 11 tools: upload_document, get_document, list_documents, download_signed_document, send_signing_invite, send_role_based_invite, cancel_invite, add_signature_field, list_templates, create_from_template, and register_webhook.

Can I use this with clients other than Claude Code?

Yes. Any MCP-compatible client can use this server. Claude Code is the primary client I built it for, but the MCP protocol is open and supported by a growing number of tools.

Cover: Photo by Vitaly Gariev on Unsplash