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
add_bulk_users ~42

Add users to an existing bulk job.

NameTypeReqDescription
job_idstringyesThe bulk job ID
usersarrayyesArray of user objects to add

No output schema declared.

No examples provided.

add_subscribers_to_list ~46

Append subscribers to a list without removing existing subscribers.

NameTypeReqDescription
list_idstringyesThe list ID
recipientsarrayyesRecipients to set on the list

No output schema declared.

No examples provided.

add_user_to_tenant ~52

Add a user to a tenant.

NameTypeReqDescription
profileobjectTenant-scoped profile overrides
tenant_idstringyesThe tenant ID
user_idstringyesThe user ID

No output schema declared.

No examples provided.

archive_journey ~39

Archive a journey. Archived journeys cannot be invoked but existing runs continue to completion.

NameTypeReqDescription
journey_idstringyesThe journey template ID to archive

No output schema declared.

No examples provided.

archive_journey_template ~52

Archive a journey-scoped notification template. Archived templates cannot be sent.

NameTypeReqDescription
journey_idstringyesThe journey template ID that owns this notification
notification_idstringyesThe notification template ID

No output schema declared.

No examples provided.

archive_notification ~29

Archive a notification template by ID.

NameTypeReqDescription
notification_idstringyesThe notification template ID to archive

No output schema declared.

No examples provided.

archive_preference_section ~49

Archive a preference section. The section must be empty: delete its topics first, otherwise the request fails with 409.

NameTypeReqDescription
section_idstringyesId of the preference section to archive

No output schema declared.

No examples provided.

archive_preference_topic ~46

Archive a topic within a section.

NameTypeReqDescription
section_idstringyesId of the preference section
topic_idstringyesId of the subscription preference topic to archive

No output schema declared.

No examples provided.

archive_request ~39

Archive a send request and all its associated messages by request ID.

NameTypeReqDescription
request_idstringyesThe request ID (requestId returned from /send)

No output schema declared.

No examples provided.

archive_routing_strategy ~46

Archive a routing strategy. The strategy must not have associated notification templates; unlink all templates before archiving.

NameTypeReqDescription
routing_strategy_idstringyesThe routing strategy ID to archive

No output schema declared.

No examples provided.

bulk_add_user_tenants ~51

Add a user to multiple tenants at once. A custom profile can be supplied per tenant.

NameTypeReqDescription
tenantsarrayyesArray of tenant associations
user_idstringyesThe user ID

No output schema declared.

No examples provided.

bulk_add_user_tokens ~51

Add multiple push/device tokens for a user in one request. Overwrites matching existing tokens.

NameTypeReqDescription
tokensarrayyesToken records to upsert
user_idstringyesThe user ID

No output schema declared.

No examples provided.

bulk_replace_user_preferences ~122

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

NameTypeReqDescription
tenant_idstringScope the replacement to a specific tenant context
topicsarrayyesThe complete set of topic overrides. An empty array resets every existing override.
user_idstringyesThe user ID

No output schema declared.

No examples provided.

bulk_subscribe_to_list ~47

Replace all subscribers on a list with the given recipients.

NameTypeReqDescription
list_idstringyesThe list ID
recipientsarrayyesRecipients to set on the list

No output schema declared.

No examples provided.

bulk_update_user_preferences ~108

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

NameTypeReqDescription
tenant_idstringScope the update to a specific tenant context
topicsarrayyesTopics to create or update
user_idstringyesThe user ID

No output schema declared.

No examples provided.

cancel_automation ~85

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

NameTypeReqDescription
cancelation_tokenstringyesThe cancelation_token that was set when the automation was originally invoked

No output schema declared.

No examples provided.

cancel_journey ~110

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.

NameTypeReqDescription
cancelation_tokenstringCancels every run associated with this token. Mutually exclusive with run_id.
run_idstringCancels a single run by id. Mutually exclusive with cancelation_token.

No output schema declared.

No examples provided.

cancel_message ~38

Cancel a message that is currently being delivered. Returns the message details with updated status.

NameTypeReqDescription
message_idstringyesThe message ID to cancel

No output schema declared.

No examples provided.

cancel_notification_submission ~40

Cancel a notification template submission.

NameTypeReqDescription
notification_idstringyesThe notification template ID
submission_idstringyesThe submission ID to cancel

No output schema declared.

No examples provided.

courier_installation_guide ~85

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.

NameTypeReqDescription
platformstringyesThe platform to get installation guide for
user_idstringUser ID for JWT generation (client-side SDKs only). Defaults to "example_user".

No output schema declared.

No examples provided.

create_brand ~152

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

NameTypeReqDescription
idstringOptional brand ID; auto-generated if omitted
namestringyesBrand display name
settingsobjectBrand appearance settings. If omitted, defaults to { colors: { primary: "#000000", secondary: "#ffffff" } }.
snippetsobjectBrand snippets

No output schema declared.

No examples provided.

create_bulk_job ~50

Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job.

NameTypeReqDescription
messageobjectyesBulk message definition with event/template and content

No output schema declared.

No examples provided.

create_journey ~234

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

NameTypeReqDescription
enabledbooleanWhether the journey is active. Defaults to true.
namestringyesJourney display name
nodesarrayyesArray of journey node objects. Node ids are server-generated — do NOT include an id field. Trigger node example: { type: "trigger", trigger_type: "api-invoke" }. Send node example: { type: "send", te…
statestringCreate as DRAFT (default) or PUBLISHED immediately.

No output schema declared.

No examples provided.

create_journey_template ~197

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

NameTypeReqDescription
channelstringyesChannel for this template (e.g. "email", "push", "sms", "inbox")
journey_idstringyesThe journey template ID
notificationobjectyesNotification template definition
provider_keystringSpecific provider key to target
statestringInitial state: "DRAFT" (default) or "PUBLISHED"

No output schema declared.

No examples provided.

create_list ~40

Create or update a list by list ID.

NameTypeReqDescription
list_idstringyesThe list ID
namestringyesDisplay name for the list

No output schema declared.

No examples provided.

create_notification ~156

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: [] } } }.

NameTypeReqDescription
notificationobjectyesNotification template payload
statestringTemplate state after creation (defaults to DRAFT)

No output schema declared.

No examples provided.

create_or_merge_user ~71

Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved.

NameTypeReqDescription
profileobjectProfile data to create or merge (e.g. { email: "...", phone_number: "..." })
user_idstringyesThe user ID

No output schema declared.

No examples provided.

create_or_replace_user_push_token ~63

Create or replace a push/device token for a user.

NameTypeReqDescription
deviceobjectDevice metadata
provider_keystringyesPush provider
tokenstringyesThe token string
user_idstringyesThe user ID

No output schema declared.

No examples provided.

create_or_update_tenant ~124

Create or replace a tenant. Tenants represent organizations or groups that users belong to.

NameTypeReqDescription
brand_idstringBrand ID to associate with this tenant
default_preferencesDefault notification preferences for users in this tenant
namestringyesDisplay name for the tenant
parent_tenant_idstringParent tenant ID for hierarchical tenants
propertiesobjectCustom properties for the tenant
tenant_idstringyesThe tenant ID
user_profileobjectDefault profile data for users in this tenant

No output schema declared.

No examples provided.

create_preference_section ~86

Create a preference section in your workspace. The section id is generated and returned. Add topics afterwards with create_preference_topic.

NameTypeReqDescription
has_custom_routingbooleanWhether the section defines custom routing for its topics
namestringyesHuman-readable name for the section
routing_optionsarrayDefault channels for the section. Defaults to empty if omitted.

No output schema declared.

No examples provided.

create_preference_topic ~166

Create a subscription preference topic inside a section. The topic id is generated and returned. Fails with 404 if the section does not exist.

NameTypeReqDescription
allowed_preferencesarrayPreference controls a recipient may customize for this topic
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. Defaults to empty if omitted.
section_idstringyesId of the preference section to create the topic in
topic_dataobjectArbitrary metadata associated with the topic

No output schema declared.

No examples provided.

create_provider ~127

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.

NameTypeReqDescription
aliasstringShort alias for referencing this provider
providerstringyesProvider key from the catalog (e.g. sendgrid, twilio, firebase-fcm)
settingsobjectProvider-specific settings (API keys, credentials, etc.)
titlestringDisplay name for this provider configuration

No output schema declared.

No examples provided.

create_routing_strategy ~98

Create a routing strategy defining how notifications are delivered across channels and providers.

NameTypeReqDescription
channelsobjectPer-channel delivery configuration
descriptionstringDescription of the routing strategy
namestringyesHuman-readable name for the routing strategy
providersobjectPer-provider delivery configuration
routingobjectyesRouting tree defining channel selection method and order
tagsarrayTags for categorization

No output schema declared.

No examples provided.

delete_audience ~29

Delete an audience by its ID.

NameTypeReqDescription
audience_idstringyesThe audience ID to delete

No output schema declared.

No examples provided.

delete_brand ~28

Delete a brand by its ID.

NameTypeReqDescription
brand_idstringyesThe brand ID to delete

No output schema declared.

No examples provided.

delete_list ~26

Delete a list by its ID.

NameTypeReqDescription
list_idstringyesThe list ID

No output schema declared.

No examples provided.

delete_profile ~27

Delete a user profile permanently.

NameTypeReqDescription
user_idstringyesThe user ID to delete

No output schema declared.

No examples provided.

delete_provider ~41

Delete a provider configuration. Returns 409 if the provider is still referenced by routing or notifications.

NameTypeReqDescription
provider_idstringyesThe provider configuration ID to delete

No output schema declared.

No examples provided.

delete_tenant ~29

Delete a tenant by its ID.

NameTypeReqDescription
tenant_idstringyesThe tenant ID to delete

No output schema declared.

No examples provided.

delete_tenant_preference ~45

Remove default notification preference for a topic from a tenant.

NameTypeReqDescription
tenant_idstringyesThe tenant ID
topic_idstringyesThe subscription topic ID

No output schema declared.

No examples provided.

delete_tenant_template ~63

Delete a tenant notification template. Returns 204 on success, 404 if the template does not exist for this tenant.

NameTypeReqDescription
template_idstringyesThe notification template ID to delete
tenant_idstringyesThe tenant ID that owns the template

No output schema declared.

No examples provided.

delete_user_list_subscriptions ~30

Delete all list subscriptions for a user.

NameTypeReqDescription
user_idstringyesThe user ID

No output schema declared.

No examples provided.

delete_user_preference_topic ~53

Delete a user's preference for a specific subscription topic, reverting it to the topic's default status.

NameTypeReqDescription
topic_idstringyesThe subscription topic ID
user_idstringyesThe user ID

No output schema declared.

No examples provided.

delete_user_token ~41

Delete a specific push token for a user.

NameTypeReqDescription
tokenstringyesThe token identifier to delete
user_idstringyesThe user ID

No output schema declared.

No examples provided.

generate_jwt_for_user ~83

Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.).

NameTypeReqDescription
expires_instringToken expiry duration (e.g. "1h", "2 days")
scopesarrayPermission scopes for the token
user_idstringyesThe user ID to scope the token to

No output schema declared.

No examples provided.

get_audience ~32

Get an audience by its ID, including its filter definition.

NameTypeReqDescription
audience_idstringyesThe audience ID

No output schema declared.

No examples provided.

get_audit_event ~32

Get a specific audit event by its ID.

NameTypeReqDescription
audit_event_idstringyesThe audit event ID

No output schema declared.

No examples provided.

get_brand ~26

Get a brand by its ID.

NameTypeReqDescription
brand_idstringyesThe brand ID

No output schema declared.

No examples provided.

get_bulk_job ~29

Get the status of a bulk job.

NameTypeReqDescription
job_idstringyesThe bulk job ID

No output schema declared.

No examples provided.

get_journey ~78

Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published.

NameTypeReqDescription
journey_idstringyesThe journey template ID
versionstringVersion to retrieve: "draft", "published" (default), or a version string like "v001"

No output schema declared.

No examples provided.