API v1.0

SendPigeon Documentation

Everything you need to send transactional emails. SDKs for Node.js, Python, Go, PHP and REST API.

MCP Server

Give AI assistants email tools via Model Context Protocol.

MCP lets AI assistants call external tools. Add the SendPigeon server once — your AI gets email sending, templates, contacts, and delivery tracking via natural language. More background in the blog post.

Quick Setup

1
Get an API key

Sign up at sendpigeon.com and grab an API key from the dashboard. Use a test-mode key (sk_test_...) while setting up.

2
Run the init command
Terminalbash
npx @sendpigeon/mcp init

Paste your API key, pick your client (Claude Desktop, Cursor, or Claude Code). Config file is written and merged with existing MCP servers automatically.

3
Restart your AI client

Restart your client and you should see SendPigeon's tools available. Try: "Send a test email to me@example.com"

Manual Setup

Or add the server block to your client's config file directly:

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

claude_desktop_config.jsonjson
{
"mcpServers": {
"sendpigeon": {
"command": "npx",
"args": ["-y", "@sendpigeon/mcp"],
"env": {
"SENDPIGEON_API_KEY": "sk_test_your_key_here"
}
}
}
}

Cursor

.cursor/mcp.json in your project root

.cursor/mcp.jsonjson
{
"mcpServers": {
"sendpigeon": {
"command": "npx",
"args": ["-y", "@sendpigeon/mcp"],
"env": {
"SENDPIGEON_API_KEY": "sk_test_your_key_here"
}
}
}
}

Windsurf

~/.codeium/windsurf/mcp_config.json

mcp_config.jsonjson
{
"mcpServers": {
"sendpigeon": {
"command": "npx",
"args": ["-y", "@sendpigeon/mcp"],
"env": {
"SENDPIGEON_API_KEY": "sk_test_your_key_here"
}
}
}
}

Claude Code

.mcp.json in your project root

.mcp.jsonjson
{
"mcpServers": {
"sendpigeon": {
"command": "npx",
"args": ["-y", "@sendpigeon/mcp"],
"env": {
"SENDPIGEON_API_KEY": "sk_test_your_key_here"
}
}
}
}

Tools Reference

ToolDescription
Sending
send_emailSend an email with custom HTML or text
send_template_emailSend using a template with variables
send_batch_emailsSend up to 100 emails in one call
get_email_statusCheck delivery status of a sent email
cancel_emailCancel a scheduled email
Templates
list_templatesList all email templates
get_templateGet template details and variables
create_templateCreate a draft template
update_templateEdit template content or variables
publish_templateMake template available for sending
unpublish_templateRevert template to draft
test_templateSend a test email from template
delete_templateRemove a template
Domains
list_domainsList domains and verification status
create_domainAdd a domain, returns DNS records
get_domainGet domain details and DNS records
verify_domainCheck DNS verification
delete_domainRemove a domain
Contacts
list_contactsBrowse contacts with tag/email filters
get_contactGet contact details by ID
create_contactAdd a contact to your audience
update_contactEdit fields, tags, or timezone
delete_contactRemove a contact permanently
batch_contactsBulk create/update contacts
get_contact_tagsList all unique tags
get_audience_statsActive, unsubscribed, bounced counts
unsubscribe_contactUnsubscribe a contact
resubscribe_contactResubscribe a contact
Broadcasts
list_broadcastsList broadcasts with status filter
create_broadcastCreate a draft marketing email
get_broadcastGet broadcast details and stats
update_broadcastEdit draft broadcast content
delete_broadcastDelete a draft broadcast
duplicate_broadcastCopy an existing broadcast
send_broadcastSend immediately to audience
schedule_broadcastSchedule for future delivery
cancel_broadcastCancel a scheduled broadcast
test_broadcastSend a test preview email
get_broadcast_analyticsOpens over time, link performance
list_broadcast_recipientsRecipients with delivery status
Webhooks
get_webhook_configCurrent webhook configuration
enable_webhookSet URL + events, get signing secret
update_webhookChange URL or events
disable_webhookStop receiving webhooks
delete_webhookDelete webhook configuration
regenerate_webhook_secretRegenerate signing secret
test_webhookSend a test payload
list_webhook_deliveriesRecent delivery attempts
Tracking & Suppressions
get_tracking_defaultsCurrent open/click tracking settings
update_tracking_defaultsToggle tracking or privacy mode
list_suppressionsBounced/complained addresses
delete_suppressionRemove from suppression list

Example

Sending a welcome email via template:

You: Send the welcome template to sarah@acme.com from hello@myapp.com. Set name to Sarah and company to Acme Corp.

AI calls get_template → finds variables name, company

AI calls send_template_email with the parameters

AI: Done! Email sent (ID: em_x7k9m2). Want me to check the status in a minute?

Tip: Use a test-mode API key (sk_test_...) during development. Emails go to the local dev server instead of delivering.