Install
$ agentstack add mcp-signnow-sn-mcp-server ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
About SignNow API
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:
- Send documents and document groups for signature in a role-based order
- Create reusable templates from documents
- Pre-fill document fields with data
- Collect payments as part of the signing flow
- Embed the document sending, signing, or editing experience into your website, application, or any system of record
- Track signing progress and download the completed documents
SignNow MCP Server
> 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 ---
Table of contents
- [Features](#features)
- [Quick start](#quick-start)
- [Prerequisites](#prerequisites)
- [Quick run (uvx)](#quick-run-uvx)
- [1. Setup Environment Variables](#1-setup-environment-variables)
- [2. Install and Run](#2-install-and-run)
- [Local/Remote (HTTP)](#localremote-http)
- [Docker](#docker)
- [Docker Compose](#docker-compose)
- [Configuration](#configuration)
- [Authentication options](#authentication-options)
- [SignNow & OAuth settings](#signnow--oauth-settings)
- [Production key management](#production-key-management)
- [Client setup](#client-setup)
- [VS Code — GitHub Copilot (Agent Mode) / Cursor](#vs-code--github-copilot-agent-mode--cursor)
- [Claude Desktop](#claude-desktop)
- [Glama (hosted MCP)](#glama-hosted-mcp)
- [MCP Inspector (testing)](#mcp-inspector-testing)
- [Tools](#tools)
- [FAQ / tips](#faq--tips)
- [Examples](#examples)
- [Useful resources](#useful-resources)
- [Sample apps](#sample-apps)
- [API documentation](#api-documentation)
- [SignNow API Helper MCP](#signnow-api-helper-mcp)
- [License](#license)
Features
- Templates & groups
- Browse all templates and template groups
- Create documents or groups from templates (one-shot flows included)
- Invites & embedded UX
- Email invites and ordered recipients
- Embedded signing/sending/editor links for in-app experiences
- Status & retrieval
- Check invite status and step details
- Download final documents (single or merged)
- Read normalized document/group structure for programmatic decisions
- Transports
- STDIO (best for local clients)
- Streamable HTTP (best for Docker/remote)
Quick start
Prerequisites
- SignNow account. Create a free developer account.
- SignNow Credentials: You will need your account email, password, and the application Basic Authorization Token. Getting started.
- An active SignNow API application.
- Python 3.11+ installed on your system (check with python3 --version)
- UVX installed (check with uvx --version). Recommended for the quickest setup.
- Environment variables configured
- If your client supports Streamable HTTP, you can use the pre-deployed server URL
https://mcp-server.signnow.com/mcpinstead of running it locally.
Quick run (uvx)
If you use uv, you can run the server without installing the package:
uvx --from signnow-mcp-server sn-mcp serve
1. Setup Environment Variables
# 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)
2. Install and Run
Option A: Install from PyPI (Recommended)
# Install the package from PyPI
pip install signnow-mcp-server
# Run MCP server in standalone mode
sn-mcp serve
Option B: Install from Source (Development)
# 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.
Local/Remote (HTTP)
# 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
Docker
# 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.
Docker Compose
# Only the MCP server
docker-compose up sn-mcp-server
# Both services (if defined)
docker-compose up
Configuration
Copy .env.example → .env and fill in values. All settings are validated via pydantic-settings at startup.
Authentication options
1) API Key / Access Token (simplest)
SIGNNOW_ACCESS_TOKEN=
# or equivalently:
SIGNNOW_API_KEY=
2) Username / Password
SIGNNOW_USER_EMAIL=
SIGNNOW_PASSWORD=
SIGNNOW_API_BASIC_TOKEN=
3) OAuth 2.0 (for hosted/advanced scenarios)
SIGNNOW_CLIENT_ID=
SIGNNOW_CLIENT_SECRET=
# + OAuth server & RSA settings below
> When running via some desktop clients, only user/password may be supported.
Per-request access token (HTTP transport)
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:
- Value is the raw token — no
Bearerprefix. - Resolved per request; nothing is cached or stored (stateless).
- Precedence: an env-configured
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.
- HTTP transport only (
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 & OAuth settings
# 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=
ACCESS_TTL=3600
REFRESH_TTL=2592000
ALLOWED_REDIRECTS=
# RSA keys for OAuth (critical in production)
OAUTH_RSA_PRIVATE_PEM=
OAUTH_JWK_KID=
Production key management
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.
Client setup
VS Code — GitHub Copilot (Agent Mode) / Cursor
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.
Claude Desktop
Use Desktop Extensions or the manual MCP config (Developer → Edit config).
Steps:
- Open Claude Desktop → Developer → Edit config
- Add a new server entry under
mcpServers - Save and restart Claude Desktop
Examples:
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.
Glama (hosted MCP)
Deploy and run this server on Glama with minimal setup:
Steps:
- Open the server page on Glama: sn-mcp-server on Glama
- Click the red "Deploy Server" button
- In environment variables, provide:
SIGNNOW_USER_EMAILSIGNNOW_PASSWORDSIGNNOW_API_BASIC_TOKEN- (other variables can be left as defaults)
- Create an access token in Glama and copy the endpoint URL. It will look like:
https://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).
MCP Inspector (testing)
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.
Tools
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. Supportslimit/offsetpagination (default: 50 items per page).list_contacts— Search CRM contacts by name, email, or phone. Returns id, email, first/last name, and company. Use beforesend_inviteto resolve a recipient's email address by their name. Supportsper_page(default 15, max 100).list_documents— Browse your documents, document groups and statuses. Supportslimit/offsetpagination (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) — omitrolefor freeform recipients. Passself_sign=True(with noorders) to sign the document yourself: the tool resolves your email server-side and returns aSendInviteResponsewhose optionallinkfield 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 includesinvite_mode(fieldorfreeform). For freeform document groups, signer emails come from the groupdocumentslist (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). Forfile_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. Returnsdocument_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), orinvite_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. Omitskill_nameto list all available skills with descriptions; provideskill_name(e.g.signnow101) to fetch the full Markdown body. Usesignnow101to learn SignNow entity types, invite types, and tool mappings.- List mode example:
{"skills": [{"name": "signnow101", "description": "SignNow 101 concepts reference... (description truncated for brevity)"}]} - Fetch mode example:
{"name": "signnow101", "body": "# SignNow 101 — Concepts Reference\n..."}
> Tip: Start with signnow_skills (no arguments) to discover available skills, then list_all_templates → create_from_template → create_embedded_* / send_invite, then get_invite_status and get_document_download_link.
FAQ / tips
- **
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: signnow
- Source: signnow/sn-mcp-server
- License: MIT
- Homepage: https://www.signnow.com/developers
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.