SendMeDocs / Developers External API Webhooks MCP Server Zapier & Automations

MCP Server

Just want to connect Claude or ChatGPT? See the AI Assistants guide for a simpler walkthrough — no API keys or config files needed.

SendMeDocs includes a Model Context Protocol (MCP) server that lets AI assistants manage document requests on your behalf. Connect any MCP-compatible client and use natural language to create requests, check statuses, and download files.

Server URL:

https://sendmedocs.com/mcp

How it works

Your AI assistant connects to the MCP endpoint using either an API key or OAuth. When you ask it to do something like "send Jane a request for her photo ID", the assistant calls the appropriate tool, SendMeDocs executes it, and the result comes back — all within the conversation.

No AI model runs on the SendMeDocs server. The intelligence is entirely on the client side. SendMeDocs just answers structured tool calls using the same database and logic as the REST API.

Setup by client

Claude Desktop

API key auth via JSON config.

  1. Create an API key: Dashboard > Settings > API Keys > Create API Key (owner or admin role required). Copy the key — it starts with smd_ and is shown only once.
  2. Edit claude_desktop_config.json (Settings > Developer > Edit Config):
{
  "mcpServers": {
    "sendmedocs": {
      "type": "streamableHttp",
      "url": "https://sendmedocs.com/mcp",
      "headers": {
        "Authorization": "Bearer smd_your_key_here"
      }
    }
  }
}
  1. Restart Claude Desktop. The SendMeDocs tools will appear in your tool list.

Claude Code

API key auth via CLI.

  1. Create an API key (same as Claude Desktop step 1 above)
  2. Run:
claude mcp add --transport http sendmedocs https://sendmedocs.com/mcp \
  --header "Authorization: Bearer smd_your_key_here"
  1. The tools are available immediately in your next conversation.

Cursor

API key auth via JSON config.

  1. Create an API key (same as Claude Desktop step 1 above)
  2. Edit .cursor/mcp.json in your project root (or global config):
{
  "mcpServers": {
    "sendmedocs": {
      "type": "streamableHttp",
      "url": "https://sendmedocs.com/mcp",
      "headers": {
        "Authorization": "Bearer smd_your_key_here"
      }
    }
  }
}
  1. Restart Cursor. The tools appear in the MCP panel.

OpenClaw

API key auth via mcporter.

  1. Create an API key (same as Claude Desktop step 1 above)
  2. Add to your config/mcporter.json:
{
  "servers": {
    "sendmedocs": {
      "transport": "streamable-http",
      "url": "https://sendmedocs.com/mcp",
      "headers": {
        "Authorization": "Bearer smd_your_key_here"
      }
    }
  }
}
  1. Verify with mcporter list sendmedocs --schema to see the available tools.

Other MCP clients

Any client that supports Streamable HTTP transport will work. You need:

Try it out

Ask your AI assistant something like:

Available tools

Tool What it does
search_requests Search and filter document requests by status, recipient name, or contact
send_request Send a custom document request to someone via email or SMS. Costs one request.
send_template_request Send a request from a pre-built template. Costs one request.
get_request_details Get full details of a specific request — items, statuses, uploaded file metadata
download_file Get presigned download/view URLs for a specific uploaded file
cancel_request Cancel a pending request so the recipient can no longer upload
get_usage Check your commitment level, monthly requests remaining, and credit balance
list_templates List available templates (system + org-specific), optionally filtered by category
get_template Get a template's full details including its items
create_template Create a custom org template (admin/owner only)
update_template Update a custom org template (admin/owner only)
delete_template Delete a custom org template (admin/owner only)

Tool details

search_requests

Parameter Type Description
status string Filter: pending, completed, or expired
search string Search by recipient name or contact (case-insensitive)
limit number Results to return (1-100, default 20)

Returns a list of requests with id, recipient info, status, and timestamps. Use this to find request IDs before calling other tools.

send_request

Parameter Type Required Description
recipient_name string Yes Recipient's display name
recipient_contact string Yes Email or US phone number to send the upload link to
items array Yes Items to request (at least one). Each is a prefab, custom document, or form field.
message string No Custom message included in the notification email (ignored for SMS)
expires_at string No ISO 8601 expiration date
due_date string No ISO 8601 soft deadline (must be before expires_at)
locale string No Upload portal language (en, es, fr, de, pt, zh, ja, ko, ru, th, vi)

Each item is either a prefab (photo_id, proof_of_address, proof_of_income, w9), a custom document with name and description, or a form field with type set to text, date, select, yes_no, or hidden. To send from a saved template, use send_template_request instead.

This tool sends a real email/SMS and counts as one request. Each request draws from your monthly pool. When the pool is empty, overflow requests use your purchased credit balance. Most clients are configured to confirm before calling — this is a client-side convention, not a server-enforced gate.

send_template_request

Parameter Type Required Description
recipient_name string Yes Recipient's display name
recipient_contact string Yes Email or US phone number to send the upload link to
template_id string Yes Template ID (from list_templates or get_template)
message string No Custom message included in the notification email (ignored for SMS)
expires_at string No ISO 8601 expiration date
due_date string No ISO 8601 soft deadline (must be before expires_at)
locale string No Upload portal language

Same billing behavior as send_request. The template defines all items.

get_request_details

Parameter Type Required Description
request_id string Yes The request UUID

Returns full request detail including items, their statuses, revision notes, and uploaded files with metadata. Use this to check progress or get file IDs for downloading.

download_file

Parameter Type Required Description
request_id string Yes The request UUID
file_id string Yes The file UUID (from get_request_details)

Returns presigned URLs for downloading (5-min expiry, attachment disposition) and viewing (15-min expiry, inline disposition), plus the original filename.

cancel_request

Parameter Type Required Description
request_id string Yes The request UUID

Only pending requests can be cancelled. The recipient will no longer be able to upload.

get_usage

No parameters. Returns your current commitment level, monthly requests remaining, purchased credit balance, cost per overflow request, and whether you can send a new request.

list_templates

Parameter Type Required Description
category string No Filter by category: tax, healthcare, legal, general

Returns available templates (system-wide + your org's custom templates) with name, description, category, and item count. Use the template id with send_template_request.

get_template

Parameter Type Required Description
template_id string Yes The template UUID

Returns the template's full details including all items with their types, options, group labels, and configuration.

create_template

Parameter Type Required Description
name string Yes Template name (max 255 chars)
description string No Template description (max 1000 chars)
items array Yes 1-200 items. Each defines a document or form field.

Admin or owner role required.

update_template

Parameter Type Required Description
template_id string Yes The template ID
name string No New name
description string No New description
is_active boolean No Set to false to deactivate

Admin or owner role required. System templates cannot be modified.

delete_template

Parameter Type Required Description
template_id string Yes The template ID

Admin or owner role required. System templates cannot be deleted.

Authentication

The MCP endpoint supports two authentication methods. Both resolve to the same org context with the same rate limits (60 requests per minute) and org scoping.

API keys

For developer clients (Claude Desktop, Claude Code, Cursor, OpenClaw, scripts). Create a key in the dashboard, then include it in every request:

Authorization: Bearer smd_your_key_here

OAuth 2.1

For GUI clients (claude.ai, ChatGPT, and any client that supports OAuth discovery). The client handles the entire flow automatically:

  1. Client fetches /.well-known/oauth-authorization-server to discover endpoints
  2. Client registers itself via dynamic client registration (RFC 7591)
  3. User is redirected to sign in and authorize access to a specific organization
  4. Client receives an access token (smd_oat_ prefix, 1-hour lifetime) and a refresh token (30-day lifetime)
  5. Client refreshes automatically when the access token expires

No manual configuration needed on the user's part — just enter the server URL and the client does the rest.

Protocol details

For developers building custom MCP clients or debugging connections.

The endpoint implements Streamable HTTP transport with these JSON-RPC methods:

Method Description
initialize Handshake — returns server info and capabilities
notifications/initialized Client acknowledgment (returns 202)
tools/list Returns the list of available tools
tools/call Executes a tool and returns the result
# Initialize handshake
curl -X POST https://sendmedocs.com/mcp \
  -H "Authorization: Bearer smd_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'

# List available tools
curl -X POST https://sendmedocs.com/mcp \
  -H "Authorization: Bearer smd_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":2}'

# Call a tool
curl -X POST https://sendmedocs.com/mcp \
  -H "Authorization: Bearer smd_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search_requests","arguments":{}},"id":3}'