Send documents for e-signature from AI agents. Upload, sign, and download PDFs.
Send documents for e-signature directly from Claude Desktop, Claude Code, Cursor, and other AI agents — powered by SignForge, the free e-signature platform.
This MCP server connects AI agents to SignForge's e-signature API. Your AI assistant can:
Sign up at signforge.io and generate an API key from your Developer Settings.
Choose your client below and add the configuration:
Add to your claude_desktop_config.json:
{
"mcpServers": {
"signforge": {
"command": "npx",
"args": ["-y", "@signforge/mcp-server"],
"env": {
"SIGNFORGE_API_KEY": "your-api-key-here"
}
}
}
}
Config file location:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonclaude mcp add signforge -- npx -y @signforge/mcp-server
Then set the environment variable in your shell:
export SIGNFORGE_API_KEY="your-api-key-here"
Add to your Cursor MCP settings (.cursor/mcp.json):
{
"mcpServers": {
"signforge": {
"command": "npx",
"args": ["-y", "@signforge/mcp-server"],
"env": {
"SIGNFORGE_API_KEY": "your-api-key-here"
}
}
}
}
SIGNFORGE_API_KEY="your-api-key-here" npx -y @signforge/mcp-server
Restart Claude Desktop, Claude Code, or Cursor to pick up the new MCP server.
| Tool | Description |
|---|---|
create_and_send | Upload a PDF, add a signer, and send for e-signature. Accepts a local file path or base64-encoded PDF. |
check_status | Check the status of an envelope — see signing progress, timestamps, and available documents. |
list_envelopes | List your envelopes with optional status filtering (draft, sent, completed, voided, expired). |
send_envelope | Send a draft envelope for signing. |
void_envelope | Void (cancel) an active envelope with an optional reason. |
delete_envelope | Permanently delete a draft or voided envelope. |
| Tool | Description |
|---|---|
download_signed | Download the signed PDF for a completed envelope to a local file. |
download_certificate | Download the audit certificate PDF with full audit trail. |
download_archive | Download a ZIP archive with signed PDF, certificate, and all documents. |
| Tool | Description |
|---|---|
get_embed_url | Generate an embeddable signing URL for in-app signing experiences. |
| Tool | Description |
|---|---|
list_templates | List your reusable document templates. |
create_from_template | Create an envelope from a template with optional pre-filled field values. Send immediately or save as draft. |
| Tool | Description |
|---|---|
create_webhook | Subscribe to envelope events (sent, viewed, signed, completed, expired, voided, declined). |
list_webhooks | List all configured webhooks. |
delete_webhook | Delete a webhook by ID. |
You: Send my NDA at ~/Documents/nda.pdf to jane@example.com (Jane Smith) for signature.
AI: I'll send that NDA for signature now.
[Uses create_and_send tool]
Done! I've created and sent the envelope:
- Envelope ID: a1b2c3d4-...
- Status: sent
- Jane Smith (jane@example.com) will receive a signing link via email.
You: Has Jane signed the NDA yet?
AI: Let me check.
[Uses check_status tool]
Yes! Jane signed it on April 7 at 2:15 PM. The envelope is now completed.
You: Great, download the signed copy and the audit certificate.
[Uses download_signed tool]
[Uses download_certificate tool]
Done! Files saved:
- Signed PDF: ~/Documents/nda-signed.pdf
- Audit Certificate: ~/Documents/nda-certificate.pdf
You: Send our standard consulting agreement to bob@acme.com.
Pre-fill the company name as "Acme Corp" and the start date as "May 1, 2026".
AI: I'll create that from your consulting agreement template.
[Uses list_templates tool — finds "Consulting Agreement" template]
[Uses create_from_template tool — with prefill_fields and send_immediately: true]
Done! Envelope created and sent:
- Title: Consulting Agreement
- Recipient: bob@acme.com
- Pre-filled: company = "Acme Corp", start_date = "May 1, 2026"
- Status: sent
You: List my sent envelopes.
[Uses list_envelopes tool with status: "sent"]
You: Void the contract for Project Alpha — the deal fell through.
[Uses void_envelope tool with reason]
You: Now delete it.
[Uses delete_envelope tool]
Done — envelope voided and deleted.
You: Set up a webhook to notify my server when documents are signed or completed.
[Uses create_webhook tool]
Webhook created:
- URL: https://api.yourapp.com/webhooks/signforge
- Events: envelope.signed, envelope.completed
- Secret: whsec_abc123... (save this for signature verification!)
| Variable | Required | Default | Description |
|---|---|---|---|
SIGNFORGE_API_KEY | Yes | — | Your SignForge API key. Get one at signforge.io/dashboard/developers. |
SIGNFORGE_API_URL | No | https://signforge.io/api/v1 | API base URL. Only change this for self-hosted instances or staging. |
API keys created in sandbox mode will create test envelopes that don't send real emails. Use sandbox mode during development and testing.
"SIGNFORGE_API_KEY environment variable is required"
Make sure you've set the SIGNFORGE_API_KEY in your MCP client configuration. See the setup instructions above.
"SignForge API error (401)" Your API key is invalid or expired. Generate a new one at signforge.io/dashboard/developers.
"SignForge API error (403)" Your API key doesn't have permission for this operation. Check your key's scopes.
"SignForge API error (429)" You've hit the rate limit. Wait a moment and try again.
Server not showing up in Claude Desktop
MIT
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @signforge/mcp-serverMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-kumarprobeops-signforge": {
"command": "npx",
"args": [
"-y",
"@signforge/mcp-server"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup reference@signforge/mcp-servernpmio.github.kumarprobeops/signforge works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.