io.github.trycourier/courier
repo:https://github.com/trycourier/courier-mcp
Send notifications, manage templates, and configure integrations with Courier.
- transport:
- remote
- credential class:
- self-provisionable
Owner verification
Not yet verified. Verifying proves you control this server and is free, permanently — it never changes a published score.
Start verification →Tools
- add_bulk_usersshallow
Add users to an existing bulk job.
- add_subscribers_to_listshallow
Append subscribers to a list without removing existing subscribers.
- add_user_to_tenantshallow
Add a user to a tenant.
- archive_journeyshallow
Archive a journey. Archived journeys cannot be invoked but existing runs continue to completion.
- archive_journey_templateshallow
Archive a journey-scoped notification template. Archived templates cannot be sent.
- archive_notificationshallow
Archive a notification template by ID.
- archive_preference_sectionshallow
Archive a preference section. The section must be empty: delete its topics first, otherwise the request fails with 409.
- archive_preference_topicshallow
Archive a topic within a section.
- archive_preview_device_setshallow
Archive a preview device set. Runs that used it keep their own copy of its devices. The Courier Recommended set cannot be archived.
- archive_requestshallow
Archive a send request and all its associated messages by request ID.
- archive_routing_strategyshallow
Archive a routing strategy. The strategy must not have associated notification templates; unlink all templates before archiving.
- bulk_add_user_tenantsshallow
Add a user to multiple tenants at once. A custom profile can be supplied per tenant.
- bulk_add_user_tokensshallow
Add multiple push/device tokens for a user in one request. Overwrites matching existing tokens.
- bulk_replace_user_preferencesshallow
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).
- bulk_subscribe_to_listshallow
Replace all subscribers on a list with the given recipients.
- bulk_update_user_preferencesshallow
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`.
- cancel_automationshallow
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").
- cancel_broadcast_scheduleshallow
Cancel a broadcast's scheduled send. The broadcast itself is kept.
- cancel_journeyshallow
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_messageshallow
Cancel a message that is currently being delivered. Returns the message details with updated status.
- cancel_notification_submissionshallow
Cancel a notification template submission.
- courier_installation_guideshallow
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.
- create_brandshallow
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" } } }.
- create_broadcastshallow
Create a broadcast: a one-off message to a list or audience on a single channel. It starts as a draft with no content; add content with put_broadcast_content, then send_broadcast or schedule_broadcast.
- create_bulk_jobshallow
Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job.
- create_journeyshallow
Create a new journey. Always created as a draft; making it live is a separate step this tool cannot perform. 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. Node ids are server-generated; do NOT include an id field. Example: { name: "Welcome Journey", nodes: [{ type: "trigger", trigger_type: "api-invoke" }], enabled: true }.
- create_journey_templateshallow
Create a notification template scoped to a journey. Always created as a draft; making it live is a separate step this tool cannot perform. 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!" }] } } }.
- create_listshallow
Create or update a list by list ID.
- create_notificationshallow
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: [] } } }.
- create_or_merge_usershallow
Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved.
- create_or_replace_user_push_tokenshallow
Create or replace a push/device token for a user.
- create_or_update_tenantshallow
Create or replace a tenant. Tenants represent organizations or groups that users belong to.
- create_preference_sectionshallow
Create a preference section in your workspace. The section id is generated and returned. Add topics afterwards with create_preference_topic.
- create_preference_topicshallow
Create a subscription preference topic inside a section. The topic id is generated and returned. Fails with 404 if the section does not exist.
- create_preview_device_setshallow
Create a named, reusable set of preview devices.
- create_preview_runshallow
Render a template's email on real email clients and capture screenshots. Pass exactly one of device_set_id or device_ids. Each run is billed to the workspace's previews add-on. The run starts PENDING, so poll get_preview_run for the results.
- create_providershallow
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.
- create_routing_strategyshallow
Create a routing strategy defining how notifications are delivered across channels and providers.
- delete_audienceshallow
Delete an audience by its ID.
- delete_brandshallow
Delete a brand by its ID.
- delete_broadcastshallow
Delete a broadcast.
- delete_listshallow
Delete a list by its ID.
- delete_profileshallow
Delete a user profile permanently.
- delete_providershallow
Delete a provider configuration. Returns 409 if the provider is still referenced by routing or notifications.
- delete_tenantshallow
Delete a tenant by its ID.
- delete_tenant_preferenceshallow
Remove default notification preference for a topic from a tenant.
- delete_tenant_templateshallow
Delete a tenant notification template. Returns 204 on success, 404 if the template does not exist for this tenant.
- delete_user_list_subscriptionsshallow
Delete all list subscriptions for a user.
- delete_user_preference_topicshallow
Delete a user's preference for a specific subscription topic, reverting it to the topic's default status.
- delete_user_tokenshallow
Delete a specific push token for a user.
- duplicate_broadcastshallow
Copy a broadcast into a new draft. The original is left unchanged.
- generate_jwt_for_usershallow
Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.).
- get_audienceshallow
Get an audience by its ID, including its filter definition.
- get_audit_eventshallow
Get a specific audit event by its ID.
- get_brandshallow
Get a brand by its ID.
- get_broadcastshallow
Get a broadcast by id, including its channel and send or schedule state.
- get_broadcast_contentshallow
Get a broadcast's Elemental content.
- get_bulk_jobshallow
Get the status of a bulk job.
- get_journeyshallow
Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published.
- get_journey_runshallow
Get one journey run by id: its journey, status, and timestamps.
- get_journey_templateshallow
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.
- get_journey_template_contentshallow
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.
- get_listshallow
Get a list by its ID.
- get_list_subscribersshallow
Get all subscribers of a list.
- get_messageshallow
Get the full details and status of a single message by its ID.
- get_message_contentshallow
Get the rendered content (HTML, text, subject) of a previously sent message.
- get_message_historyshallow
Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.).
- get_notificationshallow
Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001.
- get_notification_contentshallow
Get the published content blocks of a notification template.
- get_notification_draft_contentshallow
Get the draft (unpublished) content blocks of a notification template.
- get_notification_metricsshallow
Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked, errors and undeliverable, per provider and channel, in time buckets. Choosing the window — supply EITHER `lookback` OR `start` and `end` together, NEVER both. Supplying both is rejected. For a relative window like 'the last week', `lookback` alone is the whole answer: do not also pin `start` and `end`. Default is the last 30 days by day. Fine granularities cover shorter windows: HOUR spans at most 7 days and DAY at most 90. How far back a workspace may look also depends on its plan; a request reaching further back is refused with a payment error, which means the plan does not cover that window, NOT that there is no data. A coarser granularity can reach further back than a fine one. Reading the numbers correctly: - The first four counters are NESTED, not separate groups. Every delivered message is also counted in sent, every opened one in delivered, every clicked one in opened. So sent >= delivered >= opened >= clicked always. Report rates (delivered/sent) or the counters themselves. Do NOT add them together — the total is meaningless. And sent minus delivered is NOT a failure count; it is only 'did not reach the delivered stage', for any reason. - errors and undeliverable are counted separately and OVERLAP the funnel: a message that failed on one provider and succeeded on a retry appears in both errors and sent. They are not a remainder and do not complete a total. - Every counter is a count of distinct MESSAGES, not of events. A message that errored three times counts once in errors. - A bucket's `data` array holds one entry per provider and channel. To get a bucket total, add up the entries in that array — that is the only sum that means anything here. Note that rows for Courier's own built-in email sender are excluded, so these entries can add up to less than the workspace's true volume. What the buckets mean: - A message is counted in the bucket it was ENQUEUED in, not when the event happened. An open today of a message sent last Tuesday is counted in last Tuesday's bucket. So a past bucket can still change: yesterday's `opened` may be higher when you ask again tomorrow. - Results are cached for up to an hour and the pipeline adds its own lag, so a message sent minutes ago is expected NOT to appear yet. Never tell a user a just-sent message is missing; say the data has not caught up. - Read the window off the response's `start` and `end`, not off what you asked for. The API widens the window to whole buckets and returns the boundaries it actually used. - Quiet buckets are returned with an empty `data` array, so the series has no gaps. - An unknown template id returns an all-empty series rather than an error, and messages sent without a template never appear here at all. An empty result is not proof a template is unused — check that the id is right before concluding anything from it. - Because of that, a NOT FOUND / 404 error is never about the template id. It means the metrics endpoint itself could not be reached, which is an infrastructure or configuration problem on Courier's side. Say that the metrics service is unreachable and that someone should be told; do NOT tell the user to check or correct their template id, which sends them to fix something that was never wrong.
- get_preference_sectionshallow
Retrieve a preference section by id, including its topics.
- get_preference_topicshallow
Retrieve a topic within a section. Returns 404 if the section or topic does not exist, or the topic belongs to a different section.
- get_preview_device_setshallow
Get a preview device set by id.
- get_preview_runshallow
Get a preview run with its per-device results and screenshot URLs. Poll until status is COMPLETED or FAILED. The URLs are short-lived and re-signed on every read, so fetch them rather than storing them.
- get_providershallow
Fetch a single provider configuration by ID.
- get_routing_strategyshallow
Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers.
- get_tenantshallow
Get a tenant by its ID.
- get_tenant_templateshallow
Get a tenant notification template association by template ID.
- get_tenant_template_versionshallow
Get a specific version of a tenant notification template (e.g. latest, published, or v1).
- get_translationshallow
Get a translation for a specific locale (e.g. "en_US", "fr_FR").
- get_user_list_subscriptionsshallow
Get all list subscriptions for a user.
- get_user_preference_topicshallow
Get a user's preference for a specific subscription topic.
- get_user_preferencesshallow
Get a user's notification preferences (subscriptions, opt-outs, channel preferences).
- get_user_profile_by_idshallow
Get a user profile by their ID. Returns profile data including email, phone, and custom properties.
- get_user_push_tokenshallow
Get a specific push/device token for a user.
- invoke_ad_hoc_automationshallow
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.
- invoke_automation_templateshallow
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" } }.
- invoke_journeyshallow
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" } }.
- list_audience_membersshallow
List all members of an audience.
- list_audiencesshallow
List all audiences in the workspace.
- list_audit_eventsshallow
List audit events in the workspace. Useful for tracking API usage and changes.
- list_automation_run_stepsshallow
List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message.
- list_automation_runsshallow
List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps with list_automation_run_steps. Journey runs are listed by list_journey_runs instead.
- list_automationsshallow
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_brandsshallow
List all brands in the workspace.
- list_broadcastsshallow
List broadcasts in the workspace.
- list_bulk_usersshallow
List the users in a bulk job.
- list_digest_instancesshallow
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.
- list_journey_run_stepsshallow
List the steps of a journey run in order, with each node and what happened at it. This is how to see where a run stopped and why.
- list_journey_runsshallow
List journey runs, newest first. Filter by journey, status, or a created_at window to find a run that stalled or errored, then read its steps with list_journey_run_steps.
- list_journey_template_versionsshallow
List published versions of a journey-scoped notification template, ordered most recent first.
- list_journey_templatesshallow
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.
- list_journey_versionsshallow
List published versions of a journey, ordered most recent first.
- list_journeysshallow
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_listsshallow
Get all lists. Optionally filter by pattern (e.g. 'example.list.*').
- list_messagesshallow
List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.
- list_notification_checksshallow
List checks for a notification submission.
- list_notification_versionsshallow
List version history for a notification template.
- list_notificationsshallow
List notification templates. Optionally filter by cursor.
- list_preference_logsshallow
List preference changes, newest first. Each entry is one change a user made to one subscription topic, with the value before it where there was one. Pass user_id to answer "when did this user opt out, and of what?"; omit it to read the whole environment. Page with paging.cursor while paging.more is true.
- list_preference_sectionsshallow
List the workspace's preference sections. Each section embeds its topics.
- list_preference_topicsshallow
List the topics in a preference section.
- list_preview_device_setsshallow
List saved preview device sets. Every workspace has a read-only Courier Recommended set that runs can use without creating a set first.
- list_preview_devicesshallow
List the email clients a preview can render on. Each device has a pvd_ id, a display name, and fields to filter by: category, app, platform, os, os_version and theme. Use these ids in a device set or in create_preview_run.
- list_preview_runsshallow
List a template's preview runs, newest first.
- list_provider_catalogshallow
List available provider types from the catalog with their configuration schemas.
- list_providersshallow
List configured provider integrations for the workspace.
- list_routing_strategiesshallow
List routing strategies in the workspace. Returns metadata only; use get for full details.
- list_routing_strategy_notificationsshallow
List notification templates associated with a routing strategy. Useful for checking linked templates before archiving.
- list_tenant_templatesshallow
List notification templates configured for a tenant.
- list_tenant_usersshallow
List users associated with a tenant.
- list_tenantsshallow
List all tenants in the workspace.
- list_user_push_tokensshallow
List all push/device tokens for a user.
- list_user_tenantsshallow
List all tenants a user belongs to.
- patch_profileshallow
Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths.
- patch_user_tokenshallow
Apply a JSON Patch (RFC 6902) to a specific push token.
- publish_journeyshallow
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.
- publish_journey_templateshallow
Publish the current draft of a journey-scoped notification template. Optionally pass version to roll back to a prior version.
- publish_notificationshallow
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.
- publish_preferencesshallow
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_templateshallow
Publish a version of a tenant notification template.
- put_broadcast_contentshallow
Replace a broadcast's content with an Elemental document. Saved as a draft unless state is PUBLISHED.
- put_journey_template_contentshallow
Replace the elemental content of a journey-scoped notification template. Overwrites all elements. The template stays a draft; making it live is a separate step this tool cannot perform.
- put_journey_template_localeshallow
Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id.
- put_notification_contentshallow
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" }] }].
- put_notification_elementshallow
Update a single element within a V2 notification template.
- put_notification_localeshallow
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." }] }.
- release_digestshallow
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.
- release_user_digestshallow
Release one recipient's held digest for a topic now, instead of waiting for its schedule. Use it to preview a digest, or to let a user flush their own, without releasing everyone else on the schedule. There is no release-everyone form of this call; use release_digest with a schedule id for that.
- remove_all_user_tenantsshallow
Remove a user from all tenants.
- remove_user_from_tenantshallow
Remove a user from a tenant.
- rename_broadcastshallow
Rename a broadcast. Content and channel are unchanged.
- replace_journeyshallow
Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body. The journey stays a draft; making the change live is a separate step this tool cannot perform. Send node template IDs must already be scoped to this journey.
- replace_journey_templateshallow
Replace the draft of a journey-scoped notification template. Full document replacement. Call publish_journey_template afterwards to make it live.
- replace_notificationshallow
Replace a notification template entirely (full document PUT).
- replace_preference_sectionshallow
Replace a preference section. Full document replacement; missing optional fields are cleared. Topics attached to the section are unaffected.
- replace_preference_topicshallow
Replace a topic within a section. Full document replacement; missing optional fields are cleared.
- replace_preview_device_setshallow
Replace a preview device set's name and devices. This is a full replace, so send every device the set should keep. The Courier Recommended set cannot be changed.
- replace_profileshallow
Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep.
- replace_routing_strategyshallow
Replace a routing strategy. Full document replacement; missing optional fields are cleared.
- replace_tenant_templateshallow
Create or replace a tenant notification template (draft unless published is true).
- resend_messageshallow
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).
- restore_listshallow
Restore a previously deleted list.
- run_bulk_jobshallow
Run a bulk job, triggering delivery to all added users.
- schedule_broadcastshallow
Schedule a broadcast to send later to a list or audience. Cancel with cancel_broadcast_schedule.
- send_broadcastshallow
Send a broadcast now to every member of a list or audience. This delivers real messages.
- send_messageshallow
Send a message to a user using inline title and body content (no template). Optionally specify routing channels.
- send_message_templateshallow
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" } }.
- send_message_to_listshallow
Send a message to all subscribers of a list using inline title and body content.
- send_message_to_list_templateshallow
Send a message to all subscribers of a list using a notification template.
- subscribe_user_to_listshallow
Subscribe a user to a list. Creates the list if it doesn't exist.
- subscribe_user_to_listsshallow
Subscribe a user to one or more lists. Creates lists that do not exist.
- trace_messageshallow
Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages). Returns each matching message with its event history, which carries the status reason when a message is undeliverable. Set include_output to also return the rendered content each provider received.
- track_inbound_eventshallow
Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties.
- unsubscribe_user_from_listshallow
Unsubscribe a user from a list.
- update_audienceshallow
Create or update an audience with a filter definition.
- update_brandshallow
Replace an existing brand with new values.
- update_notification_checksshallow
Update check statuses for a notification submission.
- update_providershallow
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.
- update_tenant_preferenceshallow
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"] }.
- update_translationshallow
Create or update a translation for a specific locale.
- update_user_preference_topicshallow
Update a user's preference for a specific subscription topic (opt in, opt out, or set channel preferences).
Embed this server’s score
Tool count and median score across every tool in this server’s corpus — honest in a way a single cherry-picked tool’s badge wouldn’t be.
[](https://vouch.tools/servers/1accc076-a7b0-485c-81e1-3aefdab7b224)