Open Source·

SignNow MCP Server: E-Signatures Straight from Claude Code

We 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.
SignNow MCP Server: E-Signatures Straight from Claude Code

A few weeks ago we 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 we 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 we built. Today we're 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 our 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 john@example.com 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": "your-email@example.com",
      "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 john@example.com 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 we built this

At MusicTech Lab, we use SignNow for sending contracts, NDAs, and deposit confirmations as part of our BeatBuddy onboarding flow. Our 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.

Need Help with MCP Integrations?

Building something similar or facing technical challenges? We've been there.

Let's talk — no sales pitch, just honest engineering advice.

Need Help with This?

Building something similar or facing technical challenges? We've been there.

Let's talk — no sales pitch, just honest engineering advice.