Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SIGNWELL_API_KEYYesYour SignWell API key with document access.
SIGNWELL_API_BASE_URLNoOptional override for non-production endpoints.
SIGNWELL_API_TIMEOUT_MSNoHTTP client timeout in milliseconds.90000

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
file_storeA

Store a user's existing file for upcoming SignWell requests. Returns a file_token you can pass to document/template tools.

IMPORTANT: This tool is for the USER'S EXISTING FILES only. Do NOT read, parse, or convert the file — upload it as-is.

HOW TO PROVIDE THE FILE (in order of preference):

  1. No arguments — Opens a native OS file picker dialog. USE THIS BY DEFAULT. Simply call file_store with no arguments and the user will select the file themselves.

  2. file_path — Only if the user explicitly provides a local path on their computer (e.g. ~/Documents/contract.docx).

  3. file_url — A publicly accessible URL to the file.

CHAT ATTACHMENTS: When a user uploads/attaches a file in the chat, DO NOT use resource_uri — those are sandboxed and inaccessible. Instead, call file_store with NO arguments to open the native file picker.

CLAUDE-GENERATED FILES: If YOU created the file content (e.g. generated a PDF), do NOT use file_store. Pass file_base64 directly to document_create instead.

file_validate_text_tagsA

Validate text tags in a PDF before creating a template or document.

RECOMMENDED WORKFLOW: file_store → file_validate_text_tags → template_create/document_create

Accepts a PDF via file_token (from file_store), file_base64, file_url, or resource_uri. Set use_picker: true to open a native file picker when no file input is provided. Extracts text from the PDF and checks for valid SignWell text tags like {{signature:1:y}}.

Returns:

  • Whether text is extractable from the PDF

  • List of valid tags found

  • List of malformed tags (if any)

  • Signer numbers referenced

  • Recommendations for fixing issues

document_createA

Create a SignWell document (always created as a draft).

CRITICAL RULES:

  • Do NOT read, parse, extract, or verify file contents before uploading. The user already knows what is in the file.

  • Do NOT convert files between formats (e.g. do NOT convert .docx to .pdf). SignWell handles conversion automatically.

  • The user will place signature fields in the SignWell editor. Just upload the file and return the editor link.

SUPPORTED FILE TYPES: .pdf, .doc, .docx, .pages, .ppt, .pptx, .key, .xls, .xlsx, .numbers, .jpg, .jpeg, .png, .tiff, .tif, .webp, .html, .htm

WORKFLOW FOR USER'S EXISTING FILES:

  1. file_store (call with NO arguments to open native file picker) → returns file_token

  2. document_create (pass file_token in files array) → creates draft, returns editor_url

WORKFLOW FOR CLAUDE-GENERATED FILES:

  1. document_create with content_text directly (RECOMMENDED) → MCP server converts to DOCX automatically Pass plain text or Markdown as content_text. The server generates a DOCX file without base64 overhead.

  2. document_create with file_base64 directly (skip file_store) → creates draft, returns editor_url Do NOT write the file to disk and pass a file_path — sandbox paths are inaccessible. Use file_base64.

    Example using content_text: { "name": "Service Agreement", "recipients": [{"id": "1", "email": "client@example.com"}], "files": [{"name": "agreement.docx", "content_text": "# Service Agreement\n\nThis agreement between..."}] }

FILE ACCESS: Chat attachments and sandbox paths (/home/claude, /mnt/user-data) are inaccessible to the MCP server. Do NOT use resource_uri or sandbox file_path values. For existing files, call file_store with no arguments to open the native file picker.

REQUIRED PARAMETERS:

  1. name: Document name

  2. recipients: Array with at least one object containing "id" and "email"

  3. files: Array with at least one file object containing:

    • "name": Filename (e.g., "contract.docx")

    • One content source (in order of preference):

      • "content_text": Plain text or Markdown to auto-convert to DOCX (RECOMMENDED for Claude-generated content)

      • "file_token": Token from file_store (recommended for user files)

      • "file_url": Public URL to the file

      • "file_base64": Base64-encoded file content

      • "resource_uri": MCP resource URI

EXAMPLE (docx via file_token — most common): { "name": "NDA Agreement", "recipients": [{"id": "1", "email": "signer@example.com"}], "files": [{"name": "nda.docx", "file_token": ""}] }

EXAMPLE (pdf with text tags): { "name": "Contract", "text_tags": true, "recipients": [{"id": "1", "email": "signer@example.com"}], "files": [{"name": "contract.pdf", "file_token": ""}] }

TEXT TAGS (optional): Set text_tags: true only if the document already contains signature placeholders like {{signature:1:y}}. The recipient "id" MUST match the number in text tags (id:"1" matches {{signature:1:y}}).

document_listB

List SignWell documents with optional filtering (status, archived, search).

document_getB

Fetch the latest status for a SignWell document.

document_send_draftC

Send a previously created draft document (requires confirm_send).

document_send_reminderB

Send a reminder email for a document (optionally to a specific recipient).

document_completed_pdfC

Fetch the completed PDF. Use mode: 'base64' to get content for displaying in an artifact or chat (embed as data:application/pdf;base64,{pdf_base64}). Default 'url' mode returns a shareable link.

template_createA

Create a SignWell template for reusable signature documents.

RECOMMENDED WORKFLOW:

  1. file_store (provide file_path, file_url, or resource_uri) → returns file_token

  2. file_validate_text_tags (pass file_token) → validates tags are extractable

  3. template_create (pass file_token in files array) → creates the template

REQUIRED PARAMETERS (both are mandatory):

  • files: Array with at least one file object containing:

    • "name": Filename (e.g., "template.docx")

    • One content source (in order of preference):

      • "content_text": Plain text/Markdown to auto-convert to DOCX (RECOMMENDED for generated content)

      • "file_token": Token from file_store (recommended for uploaded files)

      • "file_base64": Base64-encoded file content

      • "file_url": Public URL to the file

      • "resource_uri": MCP resource URI

  • placeholders: Array with at least one placeholder object containing "id" and "name"

STEP-BY-STEP EXAMPLE (using file_token):

  1. Call file_store with {"file_path": "/path/to/doc.pdf"} → get file_token

  2. Call file_validate_text_tags with {"file_token": "..."} → confirm tags are valid

  3. Call this tool with: { "name": "My Template", "files": [{"name": "doc.pdf", "file_token": ""}], "placeholders": [{"id": "1", "name": "Signer"}], "text_tags": true }

ALTERNATIVE (inline base64): { "name": "My Template", "files": [{"name": "doc.pdf", "file_base64": "JVBERi0xLjQK..."}], "placeholders": [{"id": "1", "name": "Signer"}], "text_tags": true }

TEXT TAGS (when text_tags: true): Your PDF must contain these literal text strings as SELECTABLE TEXT (not images):

  • {{signature:1:y}} - Signature field for placeholder id "1"

  • {{date:1:y}} - Date field for placeholder id "1"

  • {{text:1:y:Label}} - Text field with label

  • {{initial:1:y}} - Initials field

The number in the tag (1, 2, etc.) MUST match a placeholder "id" in your request.

CRITICAL: Text tags must be SELECTABLE/SEARCHABLE text in the PDF, not rendered as images or graphics. When generating PDFs programmatically, use text drawing methods (e.g., drawString) with standard fonts. To verify: open the PDF and try to select/copy the tag text with your mouse. If you can't select it, SignWell can't parse it.

MULTI-SIGNER EXAMPLE: { "name": "Contract", "files": [{"name": "contract.pdf", "file_base64": "JVBERi0xLjQK...actual base64 here..."}], "placeholders": [ {"id": "1", "name": "Client"}, {"id": "2", "name": "Vendor"} ], "text_tags": true }

For this example, the PDF should contain: {{signature:1:y}} for Client and {{signature:2:y}} for Vendor.

COMMON ERRORS:

  • Empty arguments {} = You forgot to include files and placeholders arrays

  • "fields": [] in response = PDF doesn't contain valid text tags, or text_tags wasn't set to true

template_updateA

Update an existing SignWell template. Only provide fields you want to change.

template_getA

Fetch an individual SignWell template by ID.

template_listB

List SignWell templates with pagination.

template_deleteC

Delete a SignWell template.

template_create_documentA

Create and send a document from a template. Templates are pre-configured and ready to send, so this tool sends the document for signing by default.

IMPORTANT: When a user asks to "send a template" or "send a document from a template", the document will be sent immediately for signing. Set draft: true ONLY if the user explicitly asks to create a draft or review before sending.

REQUIRED:

  • template_id: The template ID to create the document from

  • recipients: Array of recipient objects, each with:

    • id: Unique identifier for this recipient (e.g., "recipient_1")

    • placeholder_name: Name of the template placeholder to assign (must match exactly)

    • email: Recipient's email address

    • name: (optional) Recipient's display name

Example: { "template_id": "abc123", "recipients": [{ "id": "recipient_1", "placeholder_name": "Client", "email": "client@example.com", "name": "John Doe" }] }

Prompts

Interactive templates invoked by user choice

NameDescription
search_documentFetch SignWell document summary by id.
search_templateFetch SignWell template summary by id.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Bidsketch/signwell-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server