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/api/mcp
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.
API key auth via JSON config.
smd_ and is shown only once.claude_desktop_config.json (Settings > Developer > Edit Config):{
"mcpServers": {
"sendmedocs": {
"type": "streamableHttp",
"url": "https://sendmedocs.com/api/mcp",
"headers": {
"Authorization": "Bearer smd_your_key_here"
}
}
}
}
API key auth via CLI.
claude mcp add --transport http sendmedocs https://sendmedocs.com/api/mcp \
--header "Authorization: Bearer smd_your_key_here"
API key auth via JSON config.
.cursor/mcp.json in your project root (or global config):{
"mcpServers": {
"sendmedocs": {
"type": "streamableHttp",
"url": "https://sendmedocs.com/api/mcp",
"headers": {
"Authorization": "Bearer smd_your_key_here"
}
}
}
}
API key auth via mcporter.
config/mcporter.json:{
"servers": {
"sendmedocs": {
"transport": "streamable-http",
"url": "https://sendmedocs.com/api/mcp",
"headers": {
"Authorization": "Bearer smd_your_key_here"
}
}
}
}
mcporter list sendmedocs --schema to see the available tools.Any client that supports Streamable HTTP transport will work. You need:
https://sendmedocs.com/api/mcpAuthorization: Bearer smd_your_key_here (API key) or OAuth 2.1 via discovery at https://sendmedocs.com/.well-known/oauth-authorization-serverAsk your AI assistant something like:
| Tool | What it does |
|---|---|
search_requests |
Search and filter document requests by status, recipient name, or contact |
send_request |
Send a document request to someone via email or SMS. 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 plan tier, monthly requests remaining, and credit balance |
| 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.
| 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 | 1-20 document items to request |
message |
string | No | Custom message included in the notification email/SMS |
expires_at |
string | No | ISO 8601 expiration date |
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) or a custom item with name and description.
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 at $0.10 each. Your AI assistant will confirm the details with you before calling it.
| 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.
| 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.
| 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.
No parameters. Returns your current plan tier, monthly requests remaining, purchased credit balance, cost per overflow request, and whether you can send a new request.
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.
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
For GUI clients (claude.ai, ChatGPT, and any client that supports OAuth discovery). The client handles the entire flow automatically:
/.well-known/oauth-authorization-server to discover endpointssmd_oat_ prefix, 1-hour lifetime) and a refresh token (30-day lifetime)No manual configuration needed on the user's part — just enter the server URL and the client does the rest.
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/api/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/api/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/api/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}'