Skip to main content
The hosted MCP server exposes 170 tools, one per Courier API operation. first, then describe the job to your agent and it picks the tools. A request like the one below maps to list_messages filtered to the recipient, then trace_message on the match, which returns the event history and the status reason.
MCP

How an agent uses these tools

Your agent reads each tool’s name, description, and input schema when it connects. The descriptions below come from the same tool registry, trimmed to one line. You never call a tool by name yourself. The API key decides where every tool acts. A key belongs to one , and each environment has its own templates, users, and logs. Connect a Test key while the agent is learning your workspace, because Test’s built-in email provider only delivers to the address you signed up with. Write in the tables marks a tool that changes workspace state, including every send. Everything unmarked is a read. If your client can require approval per tool, require it for the write tools. A template edit is a draft until something publishes it. The put_ and replace_ tools for templates and journeys write the draft, and sends use the published version. An agent that edits content and stops there has changed nothing a recipient sees, so ask it to publish.

Common tasks

Send

send_message and send_message_to_list take an inline title and body. The _template versions send a published template. A list send reaches every subscriber at once. For an announcement you want to schedule, use Broadcasts.

Messages

Every read here comes from the message logs. trace_message is the one to reach for first. Give it a message_id, or the metadata.trace_id you set on a send, and it returns each matching message with its event history and status reason. explains what each status means.

Profiles

Three writes that behave differently. create_or_merge_user merges into an existing profile, replace_profile overwrites every field, and patch_profile applies JSON Patch operations. Ask for a merge when you mean “add this field”, or a replace can drop the fields you left out.

Lists

A list is a set of users you subscribe explicitly. bulk_subscribe_to_list replaces every subscriber, while add_subscribers_to_list appends. Say “add” when you mean add, or the agent can pick the tool that removes everyone else.

Audiences

An audience is a filter on profile fields, so its membership updates as profiles change. You never add users to it, and a broadcast can target it.

Notification templates

Content is Elemental JSON, and writes land on the draft. publish_notification makes the draft live. put_notification_locale sets one locale’s translations and merges them into what’s there. put_notification_element replaces an element with only the fields it takes (type, data, channels, if, loop, ref), so change an element’s text or translations with put_notification_content or put_notification_locale.

Brands

A brand holds the styling a template renders with. update_brand replaces the whole brand, so read it first and send every field back.

Auth

generate_jwt_for_user issues the token a client SDK, such as Inbox, signs in with. Scope each token to one user.

Device tokens

Push tokens stored on a user, for Firebase FCM, APNs, Expo, and OneSignal.

Bulk

Same order as the API: create the job, add users, then run it. Nothing sends until run_bulk_job, and get_bulk_job reports progress.

Tenants

A tenant is one of your customer organizations. Tenant templates override a workspace template for that one tenant, and tenant preferences set the defaults its users start from.

Users

Per-user preferences and tenant membership. bulk_update_user_preferences adds to what the user already has, and bulk_replace_user_preferences replaces their whole set. update_user_preference_topic takes tenant_id to write the preference in one tenant’s context, and digest_schedule_id to move the user onto another of the topic’s digest schedules.

Routing strategies

A routing strategy is a reusable channel and provider order that templates reference. list_routing_strategy_notifications shows which templates a change would affect.

Journeys

A journey has a draft and published versions, like a template, and only a published journey can be invoked. Journey-scoped templates live inside one journey and publish separately. list_journey_run_steps shows what happened at each node of a run.

Broadcasts

One message to a list or audience on one channel, sent now or scheduled. A scheduled broadcast locks its content, so call cancel_broadcast_schedule before editing it.

Previews

Render a template’s email on real email clients and read the screenshots back. A run is billed to the workspace’s previews add-on and finishes asynchronously, so poll get_preview_run until its status is COMPLETED or FAILED. Every workspace has a read-only Courier Recommended device set to start from.

Requests

One send request can produce several messages. Archiving the request archives all of them.

Providers

A provider configuration holds your credentials for one delivery service. list_provider_catalog returns the fields each provider type needs, which the agent reads before create_provider.

Translations

Workspace .po files for the , one per locale. Only the default domain exists today.

Inbound

Sends an event into Courier that can trigger automations.

Audit events

A record of who changed what in the workspace.

Preferences

Workspace-level preference setup. Sections group topics, and a topic is what a user opts in or out of. publish_preferences pushes changes to the hosted preferences page. create_preference_topic and replace_preference_topic take a digest object: its template, schedules, and categories. Leaving digest out of a replace keeps the topic’s digest, and null turns it off.

Digests

release_digest sends every recipient’s held digest for a schedule now. release_user_digest does the same for one recipient and topic.

Automations (legacy)

Automations is the previous workflow product. Existing automations keep running, and new workflows are built as .

Docs

Returns the SDK install steps for a platform, so an agent adding Courier to your app installs the current package.

Diagnostics

Reports the key, base URL, and package version a session is using, which answers “which workspace is this agent talking to?”

FAQ

The hosted Courier MCP server exposes 170 tools, covering sends, message logs, profiles, lists, audiences, templates, journeys, broadcasts, email previews, tenants, preferences, providers, and more. Ask your agent to list its Courier tools to see the set it loaded.
Every Courier MCP tool marked Write on this page changes workspace state, and that includes every send. The unmarked tools only read. Require approval for the write tools if your client supports it.
The Courier MCP send tools deliver through the providers configured in the API key’s environment, so a Production key reaches real customers. Connect a Test key while you experiment. Test’s built-in email provider only delivers to the address you signed up with.
Template writes through Courier MCP land on the draft, and sends use the published version. Ask the agent to call publish_notification, or publish_journey_template for a template inside a journey.
The Courier MCP server gives an agent tools that call the Courier API on your workspace. gives a coding agent instructions for writing Courier code in your app. Most setups use both: Skills while the agent writes code, MCP when it needs to read or change the workspace.