Gives Claude direct access to SignNow's eSignature API so it can automate document workflows without you writing integration code. Exposes tools for creating documents from templates, sending signature invites with role-based ordering, generating embedded signing links, tracking invite status in real time, and downloading completed PDFs. Supports both individual documents and grouped signing flows. Runs over STDIO for local clients like Claude Desktop or as an HTTP server for remote deployments. You'll want this if you're building workflows that need to kick off signing processes, check whether documents are fully executed, or pull signed contracts back into your system programmatically.
The SignNow REST API empowers users to deliver a seamless eSignature experience for signers, preparers, and senders. Pre-fill documents, create embedded branded workflows for multiple signers, request payments, and track signature status in real-time. Ensure signing is simple, secure, and intuitive on any device.
What you can do with the SignNow API:
A Model Context Protocol (MCP) server that gives AI agents secure, structured access to SignNow eSignature workflows — templates, embedded signing, invites, status tracking, and document downloads — over STDIO or Streamable HTTP.
mcp-name: io.github.signnow/sn-mcp-server
Templates & groups
Invites & embedded UX
Status & retrieval
Transports
https://mcp-server.signnow.com/mcp instead of running it locally.If you use uv, you can run the server without installing the package:
uvx --from signnow-mcp-server sn-mcp serve
# Create .env file with your SignNow credentials
# You can copy from env.example if you have the source code
# Or create .env file manually with required variables (see Environment Variables section below)
# Install the package from PyPI
pip install signnow-mcp-server
# Run MCP server in standalone mode
sn-mcp serve
# 1) Clone & configure
git clone https://github.com/signnow/sn-mcp-server.git
cd sn-mcp-server
cp .env.example .env
# fill in your values in .env
# 2) Install (editable for dev)
pip install -e .
# 3) Run as STDIO MCP server (recommended for local tools & Inspector)
sn-mcp serve
STDIO is ideal for desktop clients and local testing.
# Start HTTP server on 127.0.0.1:8000
sn-mcp http
# Custom host/port
sn-mcp http --host 0.0.0.0 --port 8000
# Dev reload
sn-mcp http --reload
By default, the Streamable HTTP MCP endpoint is served under /mcp. Example URL:
http://localhost:8000/mcp
# Build
docker build -t sn-mcp-server .
# Run HTTP mode (recommended for containers)
docker run --env-file .env -p 8000:8000 sn-mcp-server sn-mcp http --host 0.0.0.0 --port 8000
STDIO inside containers is unreliable with many clients. Prefer HTTP when using Docker.
# Only the MCP server
docker-compose up sn-mcp-server
# Both services (if defined)
docker-compose up
Copy .env.example → .env and fill in values. All settings are validated via pydantic-settings at startup.
1) API Key / Access Token (simplest)
SIGNNOW_ACCESS_TOKEN=<your_api_key>
# or equivalently:
SIGNNOW_API_KEY=<your_api_key>
2) Username / Password
SIGNNOW_USER_EMAIL=<email>
SIGNNOW_PASSWORD=<password>
SIGNNOW_API_BASIC_TOKEN=<base64 basic token>
3) OAuth 2.0 (for hosted/advanced scenarios)
SIGNNOW_CLIENT_ID=<client_id>
SIGNNOW_CLIENT_SECRET=<client_secret>
# + OAuth server & RSA settings below
When running via some desktop clients, only user/password may be supported.
For multi-tenant / proxy deployments, a wrapping backend can attach the raw SignNow
access token per request via a dedicated HTTP header — no env config, and without
reusing Authorization (which carries the MCP/OAuth bearer):
X-SignNow-Access-Token: <raw SignNow access_token>
Bearer prefix.SIGNNOW_ACCESS_TOKEN (Option 1) still wins. To use
the header as a true per-request credential, do not also set SIGNNOW_ACCESS_TOKEN
— otherwise every request collapses to the env token. The header outranks a generic
Authorization: Bearer.sn-mcp http). It is not exposed as a tool argument, so the
token never enters the model's context or conversation logs. Send over HTTPS.# SignNow endpoints (defaults shown)
SIGNNOW_APP_BASE=https://app.signnow.com
SIGNNOW_API_BASE=https://api.signnow.com
# OAuth server (if you enable OAuth mode)
OAUTH_ISSUER=<your_issuer_url>
ACCESS_TTL=3600
REFRESH_TTL=2592000
ALLOWED_REDIRECTS=<comma,separated,uris>
# RSA keys for OAuth (critical in production)
OAUTH_RSA_PRIVATE_PEM=<PEM content>
OAUTH_JWK_KID=<key id>
If OAUTH_RSA_PRIVATE_PEM is missing in production, a new RSA key will be generated on each restart, invalidating all existing tokens. Always provide a persistent private key via secrets management in prod.
Create .vscode/mcp.json / .cursor/mcp.json in your workspace:
STDIO (local):
{
"servers": {
"signnow": {
"command": "sn-mcp",
"args": ["serve"],
"env": {
"SIGNNOW_USER_EMAIL": "${env:SIGNNOW_USER_EMAIL}",
"SIGNNOW_PASSWORD": "${env:SIGNNOW_PASSWORD}",
"SIGNNOW_API_BASIC_TOKEN": "${env:SIGNNOW_API_BASIC_TOKEN}"
}
}
}
}
STDIO (uvx — no local install):
{
"servers": {
"signnow": {
"command": "uvx",
"args": ["--from", "signnow-mcp-server", "sn-mcp", "serve"],
"env": {
"SIGNNOW_USER_EMAIL": "${env:SIGNNOW_USER_EMAIL}",
"SIGNNOW_PASSWORD": "${env:SIGNNOW_PASSWORD}",
"SIGNNOW_API_BASIC_TOKEN": "${env:SIGNNOW_API_BASIC_TOKEN}"
}
}
}
}
HTTP (remote or Docker):
{
"servers": {
"signnow": {
"type": "http",
"url": "http://localhost:8000/mcp"
}
}
}
Then open Chat → Agent mode, enable the signnow tools, and use them in prompts.
Note: The same configuration applies in Cursor — add it under MCP settings (STDIO or HTTP). For STDIO, you can also use uvx as shown above.
Use Desktop Extensions or the manual MCP config (Developer → Edit config).
Steps:
mcpServersExamples:
STDIO (local install):
{
"mcpServers": {
"signnow": {
"command": "sn-mcp",
"args": ["serve"],
"env": {
"SIGNNOW_USER_EMAIL": "${env:SIGNNOW_USER_EMAIL}",
"SIGNNOW_PASSWORD": "${env:SIGNNOW_PASSWORD}",
"SIGNNOW_API_BASIC_TOKEN": "${env:SIGNNOW_API_BASIC_TOKEN}"
}
}
}
}
STDIO (uvx — no local install):
{
"mcpServers": {
"signnow": {
"command": "uvx",
"args": ["--from", "signnow-mcp-server", "sn-mcp", "serve"],
"env": {
"SIGNNOW_USER_EMAIL": "${env:SIGNNOW_USER_EMAIL}",
"SIGNNOW_PASSWORD": "${env:SIGNNOW_PASSWORD}",
"SIGNNOW_API_BASIC_TOKEN": "${env:SIGNNOW_API_BASIC_TOKEN}"
}
}
}
}
HTTP (remote or Docker):
{
"mcpServers": {
"signnow": {
"type": "http",
"url": "http://localhost:8000/mcp"
}
}
}
Then enable the server in Claude’s chat and start using the tools.
Deploy and run this server on Glama with minimal setup:
Steps:
SIGNNOW_USER_EMAILSIGNNOW_PASSWORDSIGNNOW_API_BASIC_TOKENhttps://glama.ai/endpoints/{someId}/mcp?token={glama-mcp-token}
Use this HTTP MCP URL in any client that supports HTTP transport (e.g., VS Code/Cursor JSON config or Claude Desktop HTTP example above).
Great for exploring tools & schemas visually.
# Start Inspector (opens UI on localhost)
npx @modelcontextprotocol/inspector
# Connect (STDIO): run your server locally and attach
sn-mcp serve
# Or connect (HTTP): use http://localhost:8000/mcp
You can list tools, call them with JSON args, and inspect responses.
Each tool is described concisely; use an MCP client (e.g., Inspector) to view exact JSON schemas.
list_all_templates — List templates & template groups with simplified metadata. Supports limit/offset pagination (default: 50 items per page).list_contacts — Search CRM contacts by name, email, or phone. Returns id, email, first/last name, and company. Use before send_invite to resolve a recipient's email address by their name. Supports per_page (default 15, max 100).list_documents — Browse your documents, document groups and statuses. Supports limit/offset pagination (default: 50 items per page).create_from_template — Make a document or a group from a template/group.create_template — Convert a document or document group into a reusable template for signing.send_invite — Email invites (documents or groups), ordered recipients supported. Auto-detects freeform documents (no fields) — omit role for freeform recipients. Pass self_sign=True (with no orders) to sign the document yourself: the tool resolves your email server-side and returns a SendInviteResponse whose optional link field holds a ready-to-open signing link (also populated when a freeform recipient email matches the authenticated user). For template/template group it auto-creates document/document group first.create_embedded_invite — Embedded signing session without email delivery for documents/groups/templates. For template/template group it auto-creates document/document group first.create_embedded_sending — Embedded “sending/management” experience for documents/groups/templates. For template/template group it auto-creates document/document group first.create_embedded_editor — Embedded editor link to place/adjust fields for documents/groups/templates. For template/template group it auto-creates document/document group first.send_invite_from_template — One-shot: create from template and invite.create_embedded_sending_from_template — One-shot: template → embedded sending.create_embedded_editor_from_template — One-shot: template → embedded editor.create_embedded_invite_from_template — One-shot: template → embedded signing.get_invite_status — Current invite status/steps for document or group. Covers field invites and freeform invites (field path preferred when both exist). Response includes invite_mode (field or freeform). For freeform document groups, signer emails come from the group documents list (signature_requests).get_document_download_link — Direct download link (merged output for groups).get_signing_link — Get signing link for a document or document group.get_document — Normalized document/group structure with field values.update_document_fields — Prefill text fields in individual documents.upload_document — Upload a document from a local file path (file_path), public URL (file_url), or MCP resource attachment (resource_uri). For file_path, the resolved path must stay within the configured safe base directory (by default, the user's home directory); paths outside that base fail validation. Supported: PDF, DOC, DOCX, PNG, JPG, JPEG. Max 40 MB. Returns document_id, filename, source.send_invite_reminder — Send a signing reminder to pending signers on a document or document group.cancel_invite — Cancel all active (pending) signing invites on a document or document group. Auto-detects entity type and invite type (field vs freeform). Returns status: cancelled, completed (already done), or invite_not_sent.update_invite_recipient — Replace the signing recipient on a pending field invite. Finds the pending invite for the current signer and swaps in a new email. Supports both documents and document groups. Only field invites — freeform/embedded are unsupported.view_document — Generate a read-only embedded view link for a document or document group. In MCP Apps-compatible clients the document renders inline; in other hosts the link is returned as a clickable URL.rename_entity — Rename a document, document group, template, or template group. Auto-detects entity type when not provided.signnow_skills — Query the bundled SignNow skill library. Omit skill_name to list all available skills with descriptions; provide skill_name (e.g. signnow101) to fetch the full Markdown body. Use signnow101 to learn SignNow entity types, invite types, and tool mappings.
{"skills": [{"name": "signnow101", "description": "SignNow 101 concepts reference... (description truncated for brevity)"}]}{"name": "signnow101", "body": "# SignNow 101 — Concepts Reference\n..."}Tip: Start with
signnow_skills(no arguments) to discover available skills, thenlist_all_templates→create_from_template→create_embedded_*/send_invite, thenget_invite_statusandget_document_download_link.
examples/ in this repo for starter integrations.The examples/ directory contains working examples of how to integrate the SignNow MCP Server with popular AI agent frameworks:
langchain-mcp-adaptersllama-index-tools-mcpEach example demonstrates how to:
To run an example:
# Make sure you have the required dependencies installed
pip install langchain-openai langchain-mcp-adapters # for LangChain example
pip install llama-index-tools-mcp # for LlamaIndex example
pip install smolagents # for SmolAgents example
# Set up your .env file with SignNow credentials and LLM configuration
# Then run the example
python examples/langchain/langchain_example.py
python examples/llamaindex/llamaindex_example.py
python examples/smolagents/stdio_demo.py
Explore ready-to-use sample apps to quickly test preparing, signing, and sending documents from your software using the SignNow API.
Try the sample apps.
Find technical details on SignNow API requests, parameters, code examples, and possible errors. Learn more about the API functionality in detailed guides and use cases.
Read the API documentation.
Connect your AI to access API docs, generate code for complex signing workflows, and troubleshoot integration errors automatically. Access the API Helper MCP
MIT — see LICENSE.md.
About SignNow MCP Server — maintained by the SignNow team. Issues and contributions welcome via GitHub pull requests.