Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

Courier

REMOTE · MCP.COURIER.COM · SCANNED AUG 3

Send notifications, manage templates, and configure integrations with Courier.

Available components

+4 this week 69 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability73
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 10121 tokens (~70/item across 144 items; 144 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · mcp.courier.com

# add to Claude Code
claude mcp add --transport http trycourier-courier https://mcp.courier.com/
# ~/.codex/config.toml
[mcp_servers.trycourier-courier]
url = "https://mcp.courier.com/"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "trycourier-courier": {
      "type": "remote",
      "url": "https://mcp.courier.com/",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add trycourier-courier --url https://mcp.courier.com/ --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  trycourier-courier:
    url: "https://mcp.courier.com/"
// mcp.json
{
  "mcpServers": {
    "trycourier-courier": {
      "type": "http",
      "url": "https://mcp.courier.com/"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 64

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://mcp.courier.com

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.courier.com CN=WE1,O=Google Trust Services,C=US 11 Jun 2026 9 Sept 2026 ECDSA 256 ECDSA-SHA256 634e69f13e12e0100ee909f741870a8b
SANs: mcp.courier.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC insecure

Validation of mcp.courier.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
courier.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=15552000; includeSubDomains
content-security-policy default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy no-referrer
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.courier.com Verified 200
http (plaintext) http://mcp.courier.com HTTPS enforced 301 https://mcp.courier.com/
MCP tools — 144 exposed · ~10,121 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
list_tenants ~36

List all tenants in the workspace.

NameTypeReqDescription
cursorstringPagination cursor
limitnumberMax results per page

No output schema declared.

No examples provided.

list_user_push_tokens ~30

List all push/device tokens for a user.

NameTypeReqDescription
user_idstringyesThe user ID

No output schema declared.

No examples provided.

list_user_tenants ~49

List all tenants a user belongs to.

NameTypeReqDescription
cursorstringPagination cursor
limitnumberMax results per page
user_idstringyesThe user ID

No output schema declared.

No examples provided.

patch_profile ~62

Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths.

NameTypeReqDescription
patcharrayyesArray of JSON Patch operations to apply to the profile
user_idstringyesThe user ID

No output schema declared.

No examples provided.

patch_user_token ~58

Apply a JSON Patch (RFC 6902) to a specific push token.

NameTypeReqDescription
patcharrayyesArray of JSON Patch operations
tokenstringyesThe token identifier
user_idstringyesThe user ID

No output schema declared.

No examples provided.

publish_journey ~93

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.

NameTypeReqDescription
journey_idstringyesThe journey template ID to publish
versionstringHistorical version to roll back to (e.g. "v001"). Omit to publish the current draft.

No output schema declared.

No examples provided.

publish_journey_template ~88

Publish the current draft of a journey-scoped notification template. Optionally pass version to roll back to a prior version.

NameTypeReqDescription
journey_idstringyesThe journey template ID that owns this notification
notification_idstringyesThe notification template ID
versionstringVersion to roll back to (e.g. "v1"). Omit to publish current draft.

No output schema declared.

No examples provided.

publish_notification ~106

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.

NameTypeReqDescription
notification_idstringyesThe notification template ID to publish
versionstringHistorical version to publish (e.g. v001); omit to publish current draft

No output schema declared.

No examples provided.

publish_preferences ~41

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

publish_tenant_template ~65

Publish a version of a tenant notification template.

NameTypeReqDescription
template_idstringyesThe template ID
tenant_idstringyesThe tenant ID
versionstringVersion to publish (e.g. v1, latest); defaults to latest if omitted

No output schema declared.

No examples provided.

put_journey_template_content ~116

Replace the elemental content of a journey-scoped notification template. Overwrites all elements. Call publish_journey_template afterwards to make it live.

NameTypeReqDescription
elementsarrayyesArray of elemental content nodes
journey_idstringyesThe journey template ID that owns this notification
notification_idstringyesThe notification template ID
statestringTemplate state after update
versionstringContent version string (e.g. "2022-01-01"). Server defaults when omitted.

No output schema declared.

No examples provided.

put_journey_template_locale ~113

Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id.

NameTypeReqDescription
elementsarrayyesArray of element overrides with id and locale-specific content
journey_idstringyesThe journey template ID that owns this notification
locale_idstringyesLocale identifier (e.g. es, fr, pt-BR)
notification_idstringyesThe notification template ID
statestringTemplate state after update

No output schema declared.

No examples provided.

put_notification_content ~197

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" }] }].

NameTypeReqDescription
elementsarrayyesArray of elemental content nodes
notification_idstringyesThe notification template ID (nt_ prefix)
statestringTemplate state after update
versionstringContent version string

No output schema declared.

No examples provided.

put_notification_element ~137

Update a single element within a V2 notification template.

NameTypeReqDescription
channelsarrayChannels this element applies to
dataobjectElement data payload
element_idstringyesThe element ID to update
ifstringConditional expression for element visibility
loopstringLoop expression for repeating elements
notification_idstringyesThe notification template ID (nt_ prefix)
refstringReference identifier
statestringTemplate state after update
typestringyesElement type (e.g. text, action, image, divider, meta)

No output schema declared.

No examples provided.

put_notification_locale ~167

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." }] }.

NameTypeReqDescription
elementsarrayyesArray of element overrides with id and locale-specific content
locale_idstringyesLocale identifier (e.g. es, fr, pt-BR)
notification_idstringyesThe notification template ID (nt_ prefix)
statestringTemplate state after update

No output schema declared.

No examples provided.

release_digest ~67

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.

NameTypeReqDescription
schedule_idstringyesThe digest schedule id, in the form "sch/{uuid}"

No output schema declared.

No examples provided.

remove_all_user_tenants ~29

Remove a user from all tenants.

NameTypeReqDescription
user_idstringyesThe user ID

No output schema declared.

No examples provided.

remove_user_from_tenant ~40

Remove a user from a tenant.

NameTypeReqDescription
tenant_idstringyesThe tenant ID
user_idstringyesThe user ID

No output schema declared.

No examples provided.

replace_journey ~154

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.

NameTypeReqDescription
enabledbooleanWhether the journey is active.
journey_idstringyesThe journey template ID to update
namestringyesJourney display name
nodesarrayyesComplete array of journey nodes. Use server-assigned node ids from get_journey — do NOT invent new ids. Each node requires type plus type-specific fields.
statestringSet to PUBLISHED to publish immediately after replace.

No output schema declared.

No examples provided.

replace_journey_template ~91

Replace the draft of a journey-scoped notification template. Full document replacement. Call publish_journey_template afterwards to make it live.

NameTypeReqDescription
journey_idstringyesThe journey template ID that owns this notification
notificationobjectyesFull notification template definition
notification_idstringyesThe notification template ID
statestring"PUBLISHED" to publish immediately after replace

No output schema declared.

No examples provided.

replace_notification ~59

Replace a notification template entirely (full document PUT).

NameTypeReqDescription
notificationobjectyesFull notification template payload
notification_idstringyesThe notification template ID to replace
statestringTemplate state after update (defaults to DRAFT)

No output schema declared.

No examples provided.

replace_preference_section ~96

Replace a preference section. Full document replacement; missing optional fields are cleared. Topics attached to the section are unaffected.

NameTypeReqDescription
has_custom_routingbooleanWhether the section defines custom routing for its topics
namestringyesHuman-readable name for the section
routing_optionsarrayDefault channels for the section. Omit to clear.
section_idstringyesId of the preference section

No output schema declared.

No examples provided.

replace_preference_topic ~169

Replace a topic within a section. Full document replacement; missing optional fields are cleared.

NameTypeReqDescription
allowed_preferencesarrayPreference controls a recipient may customize. Omit to clear.
default_statusstringyesDefault subscription status applied when a recipient has not set their own
include_unsubscribe_headerbooleanWhether to include a list-unsubscribe header on emails for this topic
namestringyesHuman-readable name for the preference topic
routing_optionsarrayDefault channels delivered for this topic. Omit to clear.
section_idstringyesId of the preference section
topic_dataobjectArbitrary metadata associated with the topic. Omit to clear.
topic_idstringyesId of the subscription preference topic

No output schema declared.

No examples provided.

replace_profile ~54

Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep.

NameTypeReqDescription
profileobjectyesComplete profile data to replace with
user_idstringyesThe user ID

No output schema declared.

No examples provided.

replace_routing_strategy ~115

Replace a routing strategy. Full document replacement; missing optional fields are cleared.

NameTypeReqDescription
channelsobjectPer-channel delivery configuration. Omit to clear.
descriptionstringDescription. Omit to clear.
namestringyesHuman-readable name
providersobjectPer-provider delivery configuration. Omit to clear.
routingobjectyesRouting tree
routing_strategy_idstringyesThe routing strategy ID
tagsarrayTags. Omit to clear.

No output schema declared.

No examples provided.

replace_tenant_template ~122

Create or replace a tenant notification template (draft unless published is true).

NameTypeReqDescription
channelsChannel-specific delivery configuration
contentElemental content object (e.g. elements and version per Courier Elemental schema)
providersProvider-specific routing configuration
publishedbooleanWhen true, publish immediately after save
routingMessage routing configuration
template_idstringyesThe template ID
tenant_idstringyesThe tenant ID
titlestringOptional title merged into template content when provided

No output schema declared.

No examples provided.

resend_message ~75

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).

NameTypeReqDescription
message_idstringyesThe message ID of the original message to resend

No output schema declared.

No examples provided.

restore_list ~25

Restore a previously deleted list.

NameTypeReqDescription
list_idstringyesThe list ID

No output schema declared.

No examples provided.

run_bulk_job ~35

Run a bulk job, triggering delivery to all added users.

NameTypeReqDescription
job_idstringyesThe bulk job ID to run

No output schema declared.

No examples provided.

send_message ~122

Send a message to a user using inline title and body content (no template). Optionally specify routing channels.

NameTypeReqDescription
bodystringyesMessage body
channelsarrayChannel names to route through (e.g. email, sms, push). Omit to use default routing.
dataobjectKey-value data to include with the message
methodstringRouting method: deliver to all channels or stop after first success
titlestringyesMessage title
user_idstringyesThe recipient user ID

No output schema declared.

No examples provided.

send_message_template ~144

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" } }.

NameTypeReqDescription
channelsarrayChannel names to route through. Omit to use template routing config.
dataobjectKey-value data for template variables
methodstringRouting method
templatestringyesTemplate ID or notification slug
user_idstringyesThe recipient user ID

No output schema declared.

No examples provided.

send_message_to_list ~98

Send a message to all subscribers of a list using inline title and body content.

NameTypeReqDescription
bodystringyesMessage body
channelsarrayChannel names to route through. Omit to use default routing.
dataobjectKey-value data to include
list_idstringyesThe list ID to send to
methodstringRouting method
titlestringyesMessage title

No output schema declared.

No examples provided.

send_message_to_list_template ~93

Send a message to all subscribers of a list using a notification template.

NameTypeReqDescription
channelsarrayChannel names to route through. Omit to use template routing config.
dataobjectKey-value data for template variables
list_idstringyesThe list ID to send to
methodstringRouting method
templatestringyesTemplate ID or notification slug

No output schema declared.

No examples provided.

subscribe_user_to_list ~59

Subscribe a user to a list. Creates the list if it doesn't exist.

NameTypeReqDescription
list_idstringyesThe list ID
preferencesobjectOptional notification preferences
user_idstringyesThe user ID to subscribe

No output schema declared.

No examples provided.

subscribe_user_to_lists ~50

Subscribe a user to one or more lists. Creates lists that do not exist.

NameTypeReqDescription
listsarrayyesArray of lists to subscribe to
user_idstringyesThe user ID

No output schema declared.

No examples provided.

track_inbound_event ~99

Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties.

NameTypeReqDescription
eventstringyesThe event name (appears as trigger in Automation Trigger node)
messageIdstringyesUnique ID for deduplication (returns 409 if not unique)
propertiesobjectyesEvent properties payload
userIdstringUser ID associated with the event

No output schema declared.

No examples provided.

unsubscribe_user_from_list ~42

Unsubscribe a user from a list.

NameTypeReqDescription
list_idstringyesThe list ID
user_idstringyesThe user ID to unsubscribe

No output schema declared.

No examples provided.

update_audience ~59

Create or update an audience with a filter definition.

NameTypeReqDescription
audience_idstringyesThe audience ID
descriptionstringDescription
filterFilter definition object (operator, rules)
namestringDisplay name

No output schema declared.

No examples provided.

update_brand ~64

Replace an existing brand with new values.

NameTypeReqDescription
brand_idstringyesThe brand ID to update
namestringyesBrand display name
settingsobjectBrand settings (colors, email, inapp)
snippetsobjectBrand snippets

No output schema declared.

No examples provided.

update_notification_checks ~54

Update check statuses for a notification submission.

NameTypeReqDescription
checksarrayyesChecks to update
notification_idstringyesThe notification template ID
submission_idstringyesThe submission ID for the checks resource

No output schema declared.

No examples provided.

update_provider ~106

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.

NameTypeReqDescription
aliasstringShort alias
providerstringyesProvider key (must match existing; changing provider type is not supported)
provider_idstringyesThe provider configuration ID
settingsobjectProvider-specific settings
titlestringDisplay name

No output schema declared.

No examples provided.

update_tenant_preference ~216

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"] }.

NameTypeReqDescription
custom_routingarrayDefault channels when has_custom_routing is enabled
has_custom_routingbooleanWhen true, use custom_routing instead of template defaults
statusstringyesSubscription status for the topic
tenant_idstringyesThe tenant ID
topic_idstringyesThe subscription topic ID — must already exist in the workspace. A 404 response means the topic does not exist; create it in the Preferences Editor first.

No output schema declared.

No examples provided.

update_translation ~58

Create or update a translation for a specific locale.

NameTypeReqDescription
bodystringyesTranslation content (PO file format)
domainstringTranslation domain
localestringyesLocale code (e.g. en_US, fr_FR)

No output schema declared.

No examples provided.

update_user_preference_topic ~93

Update a user's preference for a specific subscription topic (opt in, opt out, or set channel preferences).

NameTypeReqDescription
custom_routingarrayCustom channel routing order
has_custom_routingbooleanWhether custom channel routing is set
statusstringyesPreference status
topic_idstringyesThe subscription topic ID
user_idstringyesThe user ID

No output schema declared.

No examples provided.