Courier MCP Server
Official Courier MCP server for sending notifications, managing users and lists, configuring brands, and invoking automations across email, SMS, push, and chat.
The Courier MCP server is the official Model Context Protocol implementation for Courier's notification API. It exposes around 60 tools that let AI agents send messages across email, SMS, push, and chat channels, manage user profiles and subscriptions, configure brands and templates, and orchestrate bulk and automated notification flows.
Courier hosts the server at https://mcp.courier.com, so most users do not need to run anything locally. Authentication is handled with a Courier API key passed in the api_key header. The server is built on top of the official @trycourier/courier Node SDK, which is auto-generated from Courier's API spec, so coverage stays in sync with the underlying platform.
Capabilities include direct and templated sends, list and audience management, tenant operations for multi-tenant workspaces, JWT generation for user-scoped auth, push token registration, audit event lookups, translation updates, and bulk job creation. A local development mode is also available for self-hosting via sh dev.sh.
Tools
| Tool | Description |
|---|---|
send_message |
Send a direct notification to one or more recipients across configured channels. |
send_message_template |
Send a notification using a saved Courier template. |
send_message_to_list |
Send a message to all subscribers of a Courier list. |
send_message_to_list_template |
Send a templated message to a Courier list. |
list_messages |
List messages with filtering by status, recipient, or time. |
get_message |
Retrieve a message by ID. |
get_message_content |
Get the rendered content of a delivered message. |
get_message_history |
Get the delivery history for a message. |
cancel_message |
Cancel a queued or in-flight message. |
get_user_profile_by_id |
Retrieve a user profile. |
create_or_merge_user |
Create a user profile or merge data into an existing one. |
replace_profile |
Replace a user profile in full. |
delete_profile |
Delete a user profile. |
get_user_list_subscriptions |
List the lists a user is subscribed to. |
subscribe_user_to_lists |
Subscribe a user to one or more lists. |
delete_user_list_subscriptions |
Remove a user from list subscriptions. |
list_lists |
List all Courier lists. |
get_list |
Get a list by ID. |
get_list_subscribers |
Get subscribers of a list. |
create_list |
Create a new list. |
subscribe_user_to_list |
Subscribe a single user to a list. |
unsubscribe_user_from_list |
Unsubscribe a user from a list. |
list_audiences |
List all audiences. |
get_audience |
Get an audience by ID. |
list_audience_members |
List members of an audience. |
update_audience |
Create or update an audience. |
delete_audience |
Delete an audience. |
list_notifications |
List notifications in the Courier library. |
get_notification_content |
Get published notification content. |
get_notification_draft_content |
Get draft notification content. |
create_brand |
Create a new brand. |
get_brand |
Retrieve a brand by ID. |
list_brands |
List configured brands. |
generate_jwt_for_user |
Generate a JWT for client-side user-scoped auth. |
list_user_push_tokens |
List push tokens for a user. |
get_user_push_token |
Get a specific push token. |
create_or_replace_user_push_token |
Register or replace a push token for a user. |
invoke_automation_template |
Run a saved Courier automation by template ID. |
invoke_ad_hoc_automation |
Run an ad-hoc automation definition. |
create_bulk_job |
Create a new bulk send job. |
add_bulk_users |
Add recipients to a bulk job. |
run_bulk_job |
Execute a previously created bulk job. |
get_bulk_job |
Get status of a bulk job. |
list_bulk_users |
List recipients added to a bulk job. |
get_audit_event |
Retrieve a single audit event. |
list_audit_events |
List audit events. |
track_inbound_event |
Track an inbound event into Courier. |
get_tenant |
Retrieve a tenant. |
create_or_update_tenant |
Create or update a tenant. |
list_tenants |
List tenants. |
delete_tenant |
Delete a tenant. |
get_user_preferences |
Get a user's notification preferences. |
update_user_preference_topic |
Update a user's preference for a topic. |
list_user_tenants |
List tenants a user belongs to. |
add_user_to_tenant |
Add a user to a tenant. |
remove_user_from_tenant |
Remove a user from a tenant. |
get_translation |
Get a translation entry. |
update_translation |
Update a translation entry. |
courier_installation_guide |
Returns documentation for installing and configuring Courier. |
get_environment_config |
Local-only diagnostic that returns environment configuration. |
Prerequisites
- A Courier account with an API key from
app.courier.com/settings/api-keys
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"Courier": {
"url": "https://mcp.courier.com",
"headers": {
"api_key": "YOUR_COURIER_API_KEY"
}
}
}
}
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"Courier": {
"url": "https://mcp.courier.com",
"headers": {
"api_key": "YOUR_COURIER_API_KEY"
}
}
}
}
Claude Code CLI
claude mcp add Courier --transport http --url https://mcp.courier.com --header "api_key: YOUR_COURIER_API_KEY"
Local development (optional)
git clone https://github.com/trycourier/courier-mcp.git
cd courier-mcp
sh dev.sh
Then point your MCP client at http://localhost:3000. The optional base_url header can be used to override the default https://api.courier.com endpoint.
- Send transactional notifications from an agent across email, SMS, push, and chat in one call without writing channel-specific code.
- Sync user profiles and list subscriptions during onboarding flows, including merging traits and toggling preferences from natural language.
- Trigger Courier automations or bulk jobs for campaigns like dunning, password resets, or product announcements, then monitor delivery status.
- Audit message delivery by retrieving message history, content, and audit events to diagnose why a notification did or did not reach a recipient.
- Manage multi-tenant workspaces by creating tenants, assigning users, and customizing brands per tenant from a single agent session.
- "Send a welcome email using the
welcome-v2template to user_idusr_123with their first name." - "List all messages sent in the last 24 hours that failed delivery and show the error from each message history."
- "Create a list called
beta-program, subscribe these five user IDs, and send them thebeta-invitetemplate." - "Generate a Courier JWT for user
acme_42scoped to read their inbox." - "Create a bulk job from the
monthly-newslettertemplate, add the audience members fromaudience_paid_users, then run it."
- Official server maintained by Courier and hosted at
mcp.courier.com, so no infrastructure to run. - Broad coverage with around 60 tools spanning sends, profiles, lists, audiences, brands, automations, tenants, and audit events.
- Built on the auto-generated
@trycourier/courierSDK, so the surface stays current with the underlying API. - Simple API key auth via header works cleanly across Cursor, Claude Desktop, and Claude Code.
- Requires a Courier account and API key, and notification volume is tied to Courier pricing.
- Many tools are destructive or perform live sends, so clients without per-tool gating risk unintended messages going out. Some tools carry
destructiveHintannotations but enforcement is up to the client. - Header-based API key auth means anyone with access to the client config can send on your behalf; there is no per-user OAuth flow.
- Resend MCP server for transactional email only.
- Twilio MCP server for SMS, voice, and WhatsApp messaging.
- SendGrid via a community MCP wrapper if you are already standardized on SendGrid for email delivery.