mcp server
Courier
Send notifications, manage templates, and configure integrations with Courier.
Description as published by the maintainer. Source
- version 1.3.7
- active
- workflow automation
active — Registry entry last updated 2026-06-18. Dashed tags are derived by ZBS Index from the published description, not stated by the maintainer.
What this server can do
144 functions, named and described by the server itself. Parameter names are shown because they say more about what a function does than its name usually does.
add_bulk_users(users, job_id)- Add users to an existing bulk job. Required: job_id, users.
add_subscribers_to_list(list_id, recipients)- Append subscribers to a list without removing existing subscribers. Required: list_id, recipients.
add_user_to_tenant(profile, user_id, tenant_id)- Add a user to a tenant. Required: user_id, tenant_id.
archive_journey(journey_id)- Archive a journey. Archived journeys cannot be invoked but existing runs continue to completion. Required: journey_id.
archive_journey_template(journey_id, notification_id)- Archive a journey-scoped notification template. Archived templates cannot be sent. Required: notification_id, journey_id.
archive_notification(notification_id)- Archive a notification template by ID. Required: notification_id.
archive_preference_section(section_id)- Archive a preference section. The section must be empty: delete its topics first, otherwise the request fails with 409. Required: section_id.
archive_preference_topic(topic_id, section_id)- Archive a topic within a section. Required: section_id, topic_id.
archive_request(request_id)- Archive a send request and all its associated messages by request ID. Required: request_id.
archive_routing_strategy(routing_strategy_id)- Archive a routing strategy. The strategy must not have associated notification templates; unlink all templates before archiving. Required: routing_strategy_id.
bulk_add_user_tenants(tenants, user_id)- Add a user to multiple tenants at once. A custom profile can be supplied per tenant. Required: user_id, tenants.
bulk_add_user_tokens(tokens, user_id)- Add multiple push/device tokens for a user in one request. Overwrites matching existing tokens. Required: user_id, tokens.
bulk_replace_user_preferences(topics, user_id, tenant_id)- Replace a user's complete set of preference overrides in one request. The topics in the body become the recipient's entire override set: listed topics are created or updated, and every existing override not included is reset to its topic default. An empty `topics` array clears all overrides. Validation-atomic (all-or-nothing). Required: user_id, topics.
bulk_subscribe_to_list(list_id, recipients)- Replace all subscribers on a list with the given recipients. Required: list_id, recipients.
bulk_update_user_preferences(topics, user_id, tenant_id)- Additively create or update a user's preferences for one or more topics in a single request. Only the topics in the body are touched; existing overrides for other topics are left untouched. Partial-success: valid topics are written and returned in `items`, unapplicable ones collected in `errors`. Required: user_id, topics.
cancel_automation(cancelation_token)- Cancel a running automation by its cancelation_token. This invokes a second ad-hoc automation with a single cancel step. The token must match the cancelation_token set when the original automation was started. Note: spelling is "cancelation_token" (single "l"). Required: cancelation_token.
cancel_journey(run_id, cancelation_token)- Cancel journey runs. Supply EXACTLY ONE of cancelation_token (cancels every run associated with the token) or run_id (cancels a single run). Cancelation is idempotent: a run that already finished or was already canceled is left unchanged.
cancel_message(message_id)- Cancel a message that is currently being delivered. Returns the message details with updated status. Required: message_id.
cancel_notification_submission(submission_id, notification_id)- Cancel a notification template submission. Required: notification_id, submission_id.
courier_installation_guide(user_id, platform)- Get the Courier SDK installation guide for a specific platform. For client-side SDKs (React, iOS, Android, Flutter, React Native), also generates a sample JWT. Required: platform.
create_brand(id, name, settings, snippets)- Create a new brand. The API requires settings — omitting it returns a 400. If you do not have specific brand colors, omit settings and a safe default will be used automatically (black primary, white secondary). Example: { name: "Acme", settings: { colors: { primary: "#1a73e8", secondary: "#ffffff" } } }. Required: name.
create_bulk_job(message)- Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job. Required: message.
create_journey(name, nodes, state, enabled)- Create a new journey. Defaults to DRAFT state. Send nodes are not allowed on create — create the shell with a trigger node, then call replace_journey to add send nodes after linking notification templates. Call publish_journey to make it live. Node ids are server-generated; do NOT include an id field. Example: { name: "Welcome Journey", nodes: [{ type: "trigger", trigger_type: "api-invoke" }], enabled: true }. Required: name, nodes.
create_journey_template(state, channel, journey_id, notification, provider_key)- Create a notification template scoped to a journey. Defaults to DRAFT; pass state: "PUBLISHED" to publish on create. The template can then be referenced in journey send nodes. Example: { journey_id: "j-abc", channel: "email", notification: { name: "Welcome Email", tags: [], brand: null, subscription: null, content: { version: "2022-01-01", elements: [{ type: "text", content: "Hello!" }] } } }. Required: journey_id, channel, notification.
create_list(name, list_id)- Create or update a list by list ID. Required: list_id, name.
create_notification(state, notification)- Create a V2 notification template. name is required. Provide content inline or set it immediately after creation via put_notification_content. To send with this template you must publish it first via publish_notification (or pass state: 'PUBLISHED' on create). Link a routing strategy via notification.routing.strategy_id to control which channels are used. Example: { notification: { name: 'welcome-email', tags: [], brand: null, subscription: null, routing: { strategy_id: 'rs_01abc' }, content: { version: '2022-01-01', elements: [] } } }. Required: notification.
create_or_merge_user(profile, user_id)- Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved. Required: user_id.
create_or_replace_user_push_token(token, device, user_id, provider_key)- Create or replace a push/device token for a user. Required: user_id, token, provider_key.
create_or_update_tenant(name, brand_id, tenant_id, properties, user_profile, parent_tenant_id, default_preferences)- Create or replace a tenant. Tenants represent organizations or groups that users belong to. Required: tenant_id, name.
create_preference_section(name, routing_options, has_custom_routing)- Create a preference section in your workspace. The section id is generated and returned. Add topics afterwards with create_preference_topic. Required: name.
create_preference_topic(name, section_id, topic_data, default_status, routing_options, allowed_preferences, include_unsubscribe_header)- Create a subscription preference topic inside a section. The topic id is generated and returned. Fails with 404 if the section does not exist. Required: section_id, name, default_status.
create_provider(alias, title, provider, settings)- Create a new provider (integration) configuration. Once routing strategies or notification templates reference this config, credential or settings mistakes can affect live sends—confirm provider key and settings against list_provider_catalog before saving. The provider field must be a known Courier provider key. Required: provider.
create_routing_strategy(name, tags, routing, channels, providers, description)- Create a routing strategy defining how notifications are delivered across channels and providers. Required: name, routing.
delete_audience(audience_id)- Delete an audience by its ID. Required: audience_id.
delete_brand(brand_id)- Delete a brand by its ID. Required: brand_id.
delete_list(list_id)- Delete a list by its ID. Required: list_id.
delete_profile(user_id)- Delete a user profile permanently. Required: user_id.
delete_provider(provider_id)- Delete a provider configuration. Returns 409 if the provider is still referenced by routing or notifications. Required: provider_id.
delete_tenant(tenant_id)- Delete a tenant by its ID. Required: tenant_id.
delete_tenant_preference(topic_id, tenant_id)- Remove default notification preference for a topic from a tenant. Required: tenant_id, topic_id.
delete_tenant_template(tenant_id, template_id)- Delete a tenant notification template. Returns 204 on success, 404 if the template does not exist for this tenant. Required: tenant_id, template_id.
delete_user_list_subscriptions(user_id)- Delete all list subscriptions for a user. Required: user_id.
delete_user_preference_topic(user_id, topic_id)- Delete a user's preference for a specific subscription topic, reverting it to the topic's default status. Required: user_id, topic_id.
delete_user_token(token, user_id)- Delete a specific push token for a user. Required: user_id, token.
generate_jwt_for_user(scopes, user_id, expires_in)- Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.). Required: user_id.
get_audience(audience_id)- Get an audience by its ID, including its filter definition. Required: audience_id.
get_audit_event(audit_event_id)- Get a specific audit event by its ID. Required: audit_event_id.
get_brand(brand_id)- Get a brand by its ID. Required: brand_id.
get_bulk_job(job_id)- Get the status of a bulk job. Required: job_id.
get_journey(version, journey_id)- Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published. Required: journey_id.
get_journey_template(version, journey_id, notification_id)- Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published). Defaults to published. Required: notification_id, journey_id.
get_journey_template_content(version, journey_id, notification_id)- Fetch the elemental content of a journey-scoped notification template. Pass version=draft for the working draft, or vN for a historical version. Defaults to published. Required: notification_id, journey_id.
get_list(list_id)- Get a list by its ID. Required: list_id.
get_list_subscribers(cursor, list_id)- Get all subscribers of a list. Required: list_id.
get_message(message_id)- Get the full details and status of a single message by its ID. Required: message_id.
get_message_content(message_id)- Get the rendered content (HTML, text, subject) of a previously sent message. Required: message_id.
get_message_history(type, message_id)- Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.). Required: message_id.
get_notification(version, notification_id)- Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001. Required: notification_id.
get_notification_content(notification_id)- Get the published content blocks of a notification template. Required: notification_id.
get_notification_draft_content(notification_id)- Get the draft (unpublished) content blocks of a notification template. Required: notification_id.
get_preference_section(section_id)- Retrieve a preference section by id, including its topics. Required: section_id.
get_preference_topic(topic_id, section_id)- Retrieve a topic within a section. Returns 404 if the section or topic does not exist, or the topic belongs to a different section. Required: section_id, topic_id.
get_provider(provider_id)- Fetch a single provider configuration by ID. Required: provider_id.
get_routing_strategy(routing_strategy_id)- Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers. Required: routing_strategy_id.
get_tenant(tenant_id)- Get a tenant by its ID. Required: tenant_id.
get_tenant_template(tenant_id, template_id)- Get a tenant notification template association by template ID. Required: tenant_id, template_id.
get_tenant_template_version(version, tenant_id, template_id)- Get a specific version of a tenant notification template (e.g. latest, published, or v1). Required: tenant_id, template_id, version.
get_translation(domain, locale)- Get a translation for a specific locale (e.g. "en_US", "fr_FR"). Required: locale.
get_user_list_subscriptions(cursor, user_id)- Get all list subscriptions for a user. Required: user_id.
get_user_preference_topic(user_id, topic_id, tenant_id)- Get a user's preference for a specific subscription topic. Required: user_id, topic_id.
get_user_preferences(user_id, tenant_id)- Get a user's notification preferences (subscriptions, opt-outs, channel preferences). Required: user_id.
get_user_profile_by_id(user_id)- Get a user profile by their ID. Returns profile data including email, phone, and custom properties. Required: user_id.
get_user_push_token(token, user_id)- Get a specific push/device token for a user. Required: user_id, token.
invoke_ad_hoc_automation(data, brand, profile, template, recipient, automation)- Invoke an ad-hoc automation with inline steps. Valid step actions: send, send-list, delay, cancel, update-profile, invoke, fetch-data. To cancel a previously started automation, use the cancel_automation tool instead. Required: automation.
invoke_automation_template(data, brand, profile, template, recipient, template_id)- Invoke an automation run from an existing automation template. Call list_automations first to get the template_id. Example: { template_id: "auto-onboarding", recipient: "user-123", data: { plan: "pro" } }. Required: template_id, recipient.
invoke_journey(data, profile, user_id, template_id)- Invoke a journey run from a journey template. Call list_journeys first to find the template_id. Example: { template_id: "j-onboarding", user_id: "user-123", data: { plan: "pro" } }. Required: template_id.
list_audience_members(cursor, audience_id)- List all members of an audience. Required: audience_id.
list_audiences(cursor)- List all audiences in the workspace.
list_audit_events(cursor)- List audit events in the workspace. Useful for tracking API usage and changes.
list_automations(cursor, version)- List automation templates in the workspace. Always call this first to discover template_id values before calling invoke_automation_template. Optionally filter by version.
list_brands(cursor)- List all brands in the workspace.
list_bulk_users(cursor, job_id)- List the users in a bulk job. Required: job_id.
list_digest_instances(limit, cursor, schedule_id)- List the digest instances for a schedule. Each instance represents the events accumulated for a single user against the schedule, useful for monitoring accumulation before a digest is released. Required: schedule_id.
list_journey_template_versions(journey_id, notification_id)- List published versions of a journey-scoped notification template, ordered most recent first. Required: notification_id, journey_id.
list_journey_templates(limit, cursor, journey_id)- List notification templates scoped to a journey. Journey-scoped templates can only be used by send nodes within the same journey. Call this to discover template IDs before wiring send nodes in replace_journey. Required: journey_id.
list_journey_versions(journey_id)- List published versions of a journey, ordered most recent first. Required: journey_id.
list_journeys(cursor, version)- List journey templates in the workspace. Call this first to discover journey IDs before calling invoke_journey, get_journey, or replace_journey. Optionally filter by version (published or draft).
list_lists(cursor, pattern)- Get all lists. Optionally filter by pattern (e.g. 'example.list.*').
list_messages(tag, list, tags, event, cursor, status, traceId, archived, provider, messageId, recipient, tenant_id, notification, enqueued_after)- List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.
list_notification_checks(submission_id, notification_id)- List checks for a notification submission. Required: notification_id, submission_id.
list_notification_versions(limit, cursor, notification_id)- List version history for a notification template. Required: notification_id.
list_notifications(cursor)- List notification templates. Optionally filter by cursor.
list_preference_sections- List the workspace's preference sections. Each section embeds its topics.
list_preference_topics(section_id)- List the topics in a preference section. Required: section_id.
list_provider_catalog(keys, name, channel)- List available provider types from the catalog with their configuration schemas.
list_providers(cursor)- List configured provider integrations for the workspace.
list_routing_strategies(limit, cursor)- List routing strategies in the workspace. Returns metadata only; use get for full details.
list_routing_strategy_notifications(limit, cursor, routing_strategy_id)- List notification templates associated with a routing strategy. Useful for checking linked templates before archiving. Required: routing_strategy_id.
list_tenant_templates(limit, cursor, tenant_id)- List notification templates configured for a tenant. Required: tenant_id.
list_tenant_users(limit, cursor, tenant_id)- List users associated with a tenant. Required: tenant_id.
list_tenants(limit, cursor)- List all tenants in the workspace.
list_user_push_tokens(user_id)- List all push/device tokens for a user. Required: user_id.
list_user_tenants(limit, cursor, user_id)- List all tenants a user belongs to. Required: user_id.
patch_profile(patch, user_id)- Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths. Required: user_id, patch.
patch_user_token(patch, token, user_id)- Apply a JSON Patch (RFC 6902) to a specific push token. Required: user_id, token, patch.
publish_journey(version, journey_id)- Publish the current draft of a journey, making it live and invokable. Pass version to roll back to a prior published version instead of publishing the draft. Returns 404 if there is no draft to publish. Required: journey_id.
publish_journey_template(version, journey_id, notification_id)- Publish the current draft of a journey-scoped notification template. Optionally pass version to roll back to a prior version. Required: notification_id, journey_id.
publish_notification(version, notification_id)- Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLISHED'. Publishes the current draft by default; pass version (e.g. 'v001') to publish a specific historical version. Returns 204 on success. Required: notification_id.
publish_preferences- Publish the workspace's preferences page. Takes a snapshot of every section with its topics under a new published version, making the current state visible on the hosted preferences page.
publish_tenant_template(version, tenant_id, template_id)- Publish a version of a tenant notification template. Required: tenant_id, template_id.
put_journey_template_content(state, version, elements, journey_id, notification_id)- Replace the elemental content of a journey-scoped notification template. Overwrites all elements. Call publish_journey_template afterwards to make it live. Required: notification_id, journey_id, elements.
put_journey_template_locale(state, elements, locale_id, journey_id, notification_id)- Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. Required: notification_id, journey_id, locale_id, elements.
put_notification_content(state, version, elements, notification_id)- Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: elements: [{ type: "channel", channel: "email", elements: [{ type: "meta", title: "Hello" }, { type: "text", content: "Email body" }] }, { type: "channel", channel: "push", elements: [{ type: "meta", title: "Hello" }, { type: "text", content: "Push body" }] }, { type: "channel", channel: "inbox", elements: [{ type: "text", content: "Inbox plain text only" }] }]. Required: notification_id, elements.
put_notification_element(if, ref, data, loop, type, state, channels, element_id, notification_id)- Update a single element within a V2 notification template. Required: notification_id, element_id, type.
put_notification_locale(state, elements, locale_id, notification_id)- Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish locale: { notification_id: "nt_01abc", locale_id: "es", elements: [{ id: "elem_meta_1", title: "Restablecer contraseña" }, { id: "elem_text_1", content: "Haga clic en el enlace para restablecer su contraseña." }] }. Required: notification_id, locale_id, elements.
release_digest(schedule_id)- Release a digest schedule early — send what users have collected so far now instead of waiting for the scheduled time. A 204 is also returned when the schedule has no in-progress instances to release. Required: schedule_id.
remove_all_user_tenants(user_id)- Remove a user from all tenants. Required: user_id.
remove_user_from_tenant(user_id, tenant_id)- Remove a user from a tenant. Required: user_id, tenant_id.
replace_journey(name, nodes, state, enabled, journey_id)- Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body. Call publish_journey afterwards to make changes live, or pass state: "PUBLISHED" to publish immediately. Send node template IDs must already be scoped to this journey. Required: journey_id, name, nodes.
replace_journey_template(state, journey_id, notification, notification_id)- Replace the draft of a journey-scoped notification template. Full document replacement. Call publish_journey_template afterwards to make it live. Required: notification_id, journey_id, notification.
replace_notification(state, notification, notification_id)- Replace a notification template entirely (full document PUT). Required: notification_id, notification.
replace_preference_section(name, section_id, routing_options, has_custom_routing)- Replace a preference section. Full document replacement; missing optional fields are cleared. Topics attached to the section are unaffected. Required: section_id, name.
replace_preference_topic(name, topic_id, section_id, topic_data, default_status, routing_options, allowed_preferences, include_unsubscribe_header)- Replace a topic within a section. Full document replacement; missing optional fields are cleared. Required: section_id, topic_id, name, default_status.
replace_profile(profile, user_id)- Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep. Required: user_id, profile.
replace_routing_strategy(name, tags, routing, channels, providers, description, routing_strategy_id)- Replace a routing strategy. Full document replacement; missing optional fields are cleared. Required: routing_strategy_id, name, routing.
replace_tenant_template(title, content, routing, channels, providers, published, tenant_id, template_id)- Create or replace a tenant notification template (draft unless published is true). Required: tenant_id, template_id.
resend_message(message_id)- Resend a previously sent message. Loads the original send request and enqueues a brand-new send to the same recipient with the same content, producing a new messageId; the original message is unchanged. Rate limited per message (429 on rapid repeats). Required: message_id.
restore_list(list_id)- Restore a previously deleted list. Required: list_id.
run_bulk_job(job_id)- Run a bulk job, triggering delivery to all added users. Required: job_id.
send_message(body, data, title, method, user_id, channels)- Send a message to a user using inline title and body content (no template). Optionally specify routing channels. Required: user_id, title, body.
send_message_template(data, method, user_id, channels, template)- Send a message to a user using a published notification template. The template must be published before sending — call publish_notification first if needed. Example: { user_id: "user-123", template: "nt_01abc123", data: { name: "Alex", resetUrl: "https://app.example.com/reset" } }. Required: user_id, template.
send_message_to_list(body, data, title, method, list_id, channels)- Send a message to all subscribers of a list using inline title and body content. Required: list_id, title, body.
send_message_to_list_template(data, method, list_id, channels, template)- Send a message to all subscribers of a list using a notification template. Required: list_id, template.
subscribe_user_to_list(list_id, user_id, preferences)- Subscribe a user to a list. Creates the list if it doesn't exist. Required: list_id, user_id.
subscribe_user_to_lists(lists, user_id)- Subscribe a user to one or more lists. Creates lists that do not exist. Required: user_id, lists.
track_inbound_event(event, userId, messageId, properties)- Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties. Required: event, messageId, properties.
unsubscribe_user_from_list(list_id, user_id)- Unsubscribe a user from a list. Required: list_id, user_id.
update_audience(name, filter, audience_id, description)- Create or update an audience with a filter definition. Required: audience_id.
update_brand(name, brand_id, settings, snippets)- Replace an existing brand with new values. Required: brand_id, name.
update_notification_checks(checks, submission_id, notification_id)- Update check statuses for a notification submission. Required: notification_id, submission_id, checks.
update_provider(alias, title, provider, settings, provider_id)- Replace an existing provider configuration. Full replacement — retrieve current config with get_provider first; omitted optional fields are cleared. Changing API keys or settings affects live delivery if this integration is in use. Required: provider_id, provider.
update_tenant_preference(status, topic_id, tenant_id, custom_routing, has_custom_routing)- Set the default notification preference for a subscription topic on a tenant. This controls tenant-level defaults — it does NOT set per-user preferences (use the user preferences API for that). The topic_id must already exist as a subscription topic in the workspace; a 404 means the topic has not been created yet. Example: { tenant_id: "acme", topic_id: "marketing-updates", status: "OPTED_IN", has_custom_routing: true, custom_routing: ["email", "push"] }. Required: tenant_id, topic_id, status.
update_translation(body, domain, locale)- Create or update a translation for a specific locale. Required: locale, body.
update_user_preference_topic(status, user_id, topic_id, custom_routing, has_custom_routing)- Update a user's preference for a specific subscription topic (opt in, opt out, or set channel preferences). Required: user_id, topic_id, status.
Last successful function declaration observed on . Source: https://mcp.courier.com. We list what the server declared; we do not call any of these functions.
Endpoint status observed on . Source: https://mcp.courier.com.
Signals
These are separate measurements of different things. They are deliberately not combined into one score, because a popularity number that mixes website traffic with saves and stars cannot be checked or acted on.
| Signal | Value | What it measures | Window | Observed | Source |
|---|---|---|---|---|---|
| Latest published version | 1.3.7 | Latest version string the maintainer published to the registry. | as of fetch | Model Context Protocol | |
| Registry record last updated | 2026-06-18 | When the registry record was last updated by its maintainer. | point in time | Model Context Protocol | |
| First listed in the MCP Registry | 2026-06-18 | Date this server was first published to the official MCP Registry. Not a usage or quality measure. | point in time | Model Context Protocol | |
| mcp tools declared | 144 tools | Number of functions the server itself declared when asked to list them. This is what the server offers an agent, not a measure of how well any of them work. | as of probe | mcp.courier.com | |
| mcp endpoint status | ok | The server listed 144 functions when asked. | as of probe | mcp.courier.com |
Where to get it
This record as data
Every field on this page, with its source and observation date, is in the catalog JSON. Fetch the whole kind at once instead of parsing this HTML.
GET /api/v1/entries/mcp_server.json