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
create_templateCreate a draft template
update_templateEdit template content or variables
publish_templateMake template available for sending
delete_templateRemove a template
Domains
list_domainsList domains and verification status
create_domainAdd a domain, returns DNS records
verify_domainCheck DNS verification
delete_domainRemove a domain
Contacts
list_contactsBrowse contacts with tag/email filters
create_contactAdd a contact to your audience
update_contactEdit fields, tags, or timezone
batch_contactsBulk create/update contacts
get_audience_statsActive, unsubscribed, bounced counts
Broadcasts
create_broadcastCreate a draft marketing email
send_broadcastSend immediately to audience
schedule_broadcastSchedule for future delivery
get_broadcast_analyticsOpens over time, link performance
Webhooks
get_webhook_configCurrent webhook configuration
enable_webhookSet URL + events, get signing secret
update_webhookChange URL or events
disable_webhookStop receiving webhooks
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.