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

Courier

REMOTE · MCP.COURIER.COM · SCANNED SEP 24

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

Available components

0 this week 79 Trust /100
Trust breakdown (7 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 → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability82
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 14709 tokens (~91/item across 161 items; 161 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 17 additions. See how to fix → Fail
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
Tool Safety50
  • Injection-marker check failed: the description of tool "get_notification_metrics" contains an instruction to conceal the call from the user, the text "do NOT tell the user", at byte 3262 of that field. See how to fix → Fail
  • All 25 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 161 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Courier MCP server?

Courier is a hosted endpoint at https://mcp.courier.com/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.courier.com

# add to Claude Code
claude mcp add --transport http trycourier-courier 'https://mcp.courier.com/'
// .cursor/mcp.json
{
  "mcpServers": {
    "trycourier-courier": {
      "url": "https://mcp.courier.com/"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "trycourier-courier": {
      "type": "http",
      "url": "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/"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "trycourier-courier": {
      "Transport": "http",
      "Url": "https://mcp.courier.com/"
    }
  }
}
# add to Vellum
assistant mcp add trycourier-courier -t streamable-http -u '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.

  • 23 Sept 26 0
    • New tool “cancel_broadcast_schedule”, which the server declares destructive security
    • New tool “delete_broadcast”, which the server declares destructive security
    • Tool “put_journey_template_locale” rewrote its description, which is the text the model reads security
    • Tool “replace_preference_topic” rewrote its description, which is the text the model reads security
    • Schema quality: 13327 → 14709 functional
    • New tool “create_broadcast” functional
    • New tool “duplicate_broadcast” functional
    • New tool “get_broadcast” functional
    • New tool “get_broadcast_content” functional
    • New tool “get_journey_run” functional
    • New tool “list_broadcasts” functional
    • New tool “list_journey_run_steps” functional
    • New tool “list_journey_runs” functional
    • New tool “put_broadcast_content” functional
    • New tool “release_user_digest” functional
    • New tool “rename_broadcast” functional
    • New tool “schedule_broadcast” functional
    • New tool “send_broadcast” functional
    • New tool “trace_message” functional
    • “create_preference_topic” added an optional parameter “digest” cosmetic
    • “replace_preference_topic” added an optional parameter “digest” cosmetic
    • “update_user_preference_topic” added an optional parameter “digest_schedule_id” cosmetic
    • “update_user_preference_topic” added an optional parameter “tenant_id” cosmetic
    • “put_journey_template_locale” reworded the description of “journey_id” cosmetic
    • “put_journey_template_locale” reworded the description of “notification_id” cosmetic
    • “put_journey_template_locale” reworded the description of “state” cosmetic
  • 16 Sept 26 0
    • Tool “create_journey_template” rewrote its description, which is the text the model reads security
    • Tool “create_notification” rewrote its description, which is the text the model reads security
    • Tool “put_notification_content” rewrote its description, which is the text the model reads security
    • Tool “put_notification_element” rewrote its description, which is the text the model reads security
    • Tool “put_notification_locale” rewrote its description, which is the text the model reads security
    • Tool “replace_notification” rewrote its description, which is the text the model reads security
    • “create_journey_template” reworded the description of “journey_id” cosmetic
    • “create_notification” reworded the description of “state” cosmetic
    • “get_journey” reworded the description of “journey_id” cosmetic
    • “get_journey_template” reworded the description of “journey_id” cosmetic
    • “get_journey_template” reworded the description of “notification_id” cosmetic
    • “get_journey_template_content” reworded the description of “journey_id” cosmetic
    • “get_journey_template_content” reworded the description of “notification_id” cosmetic
    • “get_notification” reworded the description of “notification_id” cosmetic
    • “get_notification” reworded the description of “version” cosmetic
    • “get_notification_content” reworded the description of “notification_id” cosmetic
    • “get_notification_draft_content” reworded the description of “notification_id” cosmetic
    • “get_user_preferences” reworded the description of “tenant_id” cosmetic
    • “list_journey_templates” reworded the description of “cursor” cosmetic
    • “list_journey_templates” reworded the description of “journey_id” cosmetic
    • “list_journeys” reworded the description of “cursor” cosmetic
    • “list_journeys” reworded the description of “version” cosmetic
    • “list_messages” reworded the description of “archived” cosmetic
    • “list_messages” reworded the description of “cursor” cosmetic
    • “list_notifications” reworded the description of “cursor” cosmetic
    • “list_providers” reworded the description of “cursor” cosmetic
    • “put_journey_template_content” reworded the description of “elements” cosmetic
    • “put_journey_template_content” reworded the description of “journey_id” cosmetic
    • “put_journey_template_content” reworded the description of “notification_id” cosmetic
    • “put_notification_content” reworded the description of “notification_id” cosmetic
    • “put_notification_content” reworded the description of “state” cosmetic
    • “put_notification_content” reworded the description of “version” cosmetic
    • “put_notification_element” reworded the description of “element_id” cosmetic
    • “put_notification_element” reworded the description of “notification_id” cosmetic
    • “put_notification_element” reworded the description of “state” cosmetic
    • “put_notification_locale” reworded the description of “notification_id” cosmetic
    • “put_notification_locale” reworded the description of “state” cosmetic
    • “replace_journey” reworded the description of “journey_id” cosmetic
    • “replace_notification” reworded the description of “notification_id” cosmetic
    • “replace_notification” reworded the description of “state” cosmetic
  • 15 Sept 26 −3
    • Injection markers: pass → fail security
    • New tool “get_notification_metrics” functional
  • 4 Sept 26 +1
    • Stability: pass → fail security
    • A breaking change shipped without a version bump: still 1.3.7 security
    • Tool “create_journey” rewrote its description, which is the text the model reads security
    • Tool “create_journey_template” rewrote its description, which is the text the model reads security
    • Tool “create_notification” rewrote its description, which is the text the model reads security
    • Tool “invoke_automation_template” rewrote its description, which is the text the model reads security
    • Tool “invoke_journey” rewrote its description, which is the text the model reads security
    • Tool “list_automations” rewrote its description, which is the text the model reads security
    • Tool “list_journeys” rewrote its description, which is the text the model reads security
    • Tool “replace_journey” rewrote its description, which is the text the model reads security
    • Tool “send_message” rewrote its description, which is the text the model reads security
    • Tool “send_message_template” rewrote its description, which is the text the model reads security
    • Tool “send_message_to_list” rewrote its description, which is the text the model reads security
    • Tool “update_translation” rewrote its description, which is the text the model reads security
    • Tool “bulk_subscribe_to_list” is now declared destructive security
    • Tool “update_provider” is now declared destructive security
    • “replace_tenant_template” made “content” required, so existing callers break functional
    • Destructive annotations: All 23 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation. functional
    • “create_or_update_tenant” reworded the description of “default_preferences” cosmetic
    • “replace_journey” reworded the description of “nodes” cosmetic
    • “replace_tenant_template” reworded the description of “channels” cosmetic
    • “replace_tenant_template” reworded the description of “content” cosmetic
    • “replace_tenant_template” reworded the description of “providers” cosmetic
    • “replace_tenant_template” reworded the description of “routing” cosmetic
    • “update_audience” reworded the description of “filter” cosmetic
  • 26 Aug 26 81
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • Stability: 0.97 → pass security
  • 20 Aug 26 0
    • Tool “create_journey” rewrote its description, which is the text the model reads security
    • Tool “create_journey_template” rewrote its description, which is the text the model reads security
    • Tool “put_journey_template_content” rewrote its description, which is the text the model reads security
    • Tool “replace_journey” rewrote its description, which is the text the model reads security
    • Tool “put_journey_template_content” is now declared destructive security
    • Tool “replace_journey” is now declared destructive security
    • “create_journey” reworded the description of “state” cosmetic
    • “create_journey_template” reworded the description of “state” cosmetic
    • “put_journey_template_content” reworded the description of “state” cosmetic
    • “replace_journey” reworded the description of “state” cosmetic
  • 11 Aug 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
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 24 Sept 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 9 Aug 2026 7 Nov 2026 ECDSA 256 ECDSA-SHA256 df2aea7fc821556213cbc21276951523
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

Background: What to check on a remote MCP endpoint →

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

Background: How OAuth 2.1 works in the 2026 MCP spec →

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 · 161 exposed · ~14,709 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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
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_broadcast ~35

Get a broadcast by id, including its channel and send or schedule state.

NameTypeReqDescription
broadcast_idstringyesThe broadcast id

No output schema declared.

No examples provided.

get_broadcast_content ~29

Get a broadcast's Elemental content.

NameTypeReqDescription
broadcast_idstringyesThe broadcast 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 ~103

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. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.
versionstringVersion to retrieve: "draft", "published" (default), or a version string like "v001"

No output schema declared.

No examples provided.

get_journey_run ~37

Get one journey run by id: its journey, status, and timestamps.

NameTypeReqDescription
run_idstringyesThe journey run id

No output schema declared.

No examples provided.

get_journey_template ~145

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.

NameTypeReqDescription
journey_idstringyesThe journey template ID that owns this notification. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.
notification_idstringyesThe notification template ID. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.
versionstringVersion to retrieve: "draft", "published" (default), or "vN"

No output schema declared.

No examples provided.

get_journey_template_content ~150

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.

NameTypeReqDescription
journey_idstringyesThe journey template ID that owns this notification. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.
notification_idstringyesThe notification template ID. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.
versionstringVersion to retrieve: "draft", "published" (default), or a version string like "v001"

No output schema declared.

No examples provided.

get_list ~26

Get a list by its ID.

NameTypeReqDescription
list_idstringyesThe list ID

No output schema declared.

No examples provided.

get_list_subscribers ~37

Get all subscribers of a list.

NameTypeReqDescription
cursorstringPagination cursor
list_idstringyesThe list ID

No output schema declared.

No examples provided.

get_message ~35

Get the full details and status of a single message by its ID.

NameTypeReqDescription
message_idstringyesThe message ID to retrieve

No output schema declared.

No examples provided.

get_message_content ~37

Get the rendered content (HTML, text, subject) of a previously sent message.

NameTypeReqDescription
message_idstringyesThe message ID

No output schema declared.

No examples provided.

get_message_history ~56

Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.).

NameTypeReqDescription
message_idstringyesThe message ID
typestringFilter by event type

No output schema declared.

No examples provided.

get_notification ~101

Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001.

NameTypeReqDescription
notification_idstringyesThe notification template ID. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.
versionstringVersion to retrieve: "draft", "published" (default — omit this to get it), or a version string like "v001"

No output schema declared.

No examples provided.

get_notification_content ~56

Get the published content blocks of a notification template.

NameTypeReqDescription
notification_idstringyesThe notification template ID. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.

No output schema declared.

No examples provided.

get_notification_draft_content ~62

Get the draft (unpublished) content blocks of a notification template.

NameTypeReqDescription
notification_idstringyesThe notification template ID. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.

No output schema declared.

No examples provided.

get_notification_metrics ~952

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…

NameTypeReqDescription
endstringWindow end, ISO 8601 with offset. Requires start. Must not be combined with lookback.
granularitystringBucket size. HOUR covers at most 7 days, DAY at most 90. Defaults to DAY.
lookbackstringWindow length counted back from now, as an ISO 8601 duration (P30D, P12W, PT12H). Defaults to P30D. Must not be combined with start/end.
notification_idstringyesThe notification template ID to report on (no commas or whitespace)
startstringInclusive window start, ISO 8601 with offset (2026-04-01T00:00:00Z). Requires end. Must not be combined with lookback.

No output schema declared.

No examples provided.

get_preference_section ~34

Retrieve a preference section by id, including its topics.

NameTypeReqDescription
section_idstringyesId of the preference section

No output schema declared.

No examples provided.

get_preference_topic ~65

Retrieve a topic within a section. Returns 404 if the section or topic does not exist, or the topic belongs to a different section.

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

No output schema declared.

No examples provided.

get_provider ~28

Fetch a single provider configuration by ID.

NameTypeReqDescription
provider_idstringyesThe provider configuration ID

No output schema declared.

No examples provided.

get_routing_strategy ~46

Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers.

NameTypeReqDescription
routing_strategy_idstringyesThe routing strategy ID (rs_ prefix)

No output schema declared.

No examples provided.

get_tenant ~27

Get a tenant by its ID.

NameTypeReqDescription
tenant_idstringyesThe tenant ID

No output schema declared.

No examples provided.

get_tenant_template ~42

Get a tenant notification template association by template ID.

NameTypeReqDescription
template_idstringyesThe template ID
tenant_idstringyesThe tenant ID

No output schema declared.

No examples provided.

get_tenant_template_version ~72

Get a specific version of a tenant notification template (e.g. latest, published, or v1).

NameTypeReqDescription
template_idstringyesThe template ID
tenant_idstringyesThe tenant ID
versionstringyesVersion identifier (latest, published, or v-prefixed)

No output schema declared.

No examples provided.

get_translation ~62

Get a translation for a specific locale (e.g. "en_US", "fr_FR").

NameTypeReqDescription
domainstringTranslation domain (only "default" is supported currently)
localestringyesLocale code (e.g. en_US, fr_FR)

No output schema declared.

No examples provided.

get_user_list_subscriptions ~39

Get all list subscriptions for a user.

NameTypeReqDescription
cursorstringPagination cursor
user_idstringyesThe user ID

No output schema declared.

No examples provided.

get_user_preference_topic ~57

Get a user's preference for a specific subscription topic.

NameTypeReqDescription
tenant_idstringScope to a specific tenant
topic_idstringyesThe subscription topic ID
user_idstringyesThe user ID

No output schema declared.

No examples provided.

get_user_preferences ~75

Get a user's notification preferences (subscriptions, opt-outs, channel preferences).

NameTypeReqDescription
tenant_idstringOmit this to get the user's workspace-level preferences — that answers most preference questions. Only pass it when you need the tenant-scoped overrides for one specific tenant instead.
user_idstringyesThe user ID

No output schema declared.

No examples provided.

get_user_profile_by_id ~45

Get a user profile by their ID. Returns profile data including email, phone, and custom properties.

NameTypeReqDescription
user_idstringyesThe user ID to look up

No output schema declared.

No examples provided.

get_user_push_token ~41

Get a specific push/device token for a user.

NameTypeReqDescription
tokenstringyesThe token identifier
user_idstringyesThe user ID

No output schema declared.

No examples provided.

invoke_ad_hoc_automation ~106

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.

NameTypeReqDescription
automationobjectyesThe automation definition with typed steps
brandstring
dataobject
profileobject
recipientstring
templatestring

No output schema declared.

No examples provided.

invoke_automation_template ~128

Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: "auto-onboarding", recipient: "user-123", data: { plan: "pro" } }.

NameTypeReqDescription
brandstringBrand ID override
dataobjectData to pass to the automation
profileobjectProfile data for the recipient
recipientstringyesRecipient user ID
templatestringNotification template override
template_idstringyesThe automation template ID

No output schema declared.

No examples provided.

invoke_journey ~129

Invoke a journey run from a journey template. template_id refers to an existing journey template in the workspace. Example: { template_id: "j-onboarding", user_id: "user-123", data: { plan: "pro" } }.

NameTypeReqDescription
dataobjectData payload passed to the journey for conditions and template variables
profileobjectProfile data for the user (email, phone, custom fields)
template_idstringyesThe journey template ID
user_idstringRecipient user ID. Can also be resolved from profile or data.

No output schema declared.

No examples provided.

list_audience_members ~37

List all members of an audience.

NameTypeReqDescription
audience_idstringyesThe audience ID
cursorstringPagination cursor

No output schema declared.

No examples provided.

list_audiences ~26

List all audiences in the workspace.

NameTypeReqDescription
cursorstringPagination cursor

No output schema declared.

No examples provided.

list_audit_events ~34

List audit events in the workspace. Useful for tracking API usage and changes.

NameTypeReqDescription
cursorstringPagination cursor

No output schema declared.

No examples provided.

list_automations ~52

List automation templates in the workspace, returning each template_id and its version state. Optionally filter by version.

NameTypeReqDescription
cursorstringPagination cursor
versionstringFilter by version state

No output schema declared.

No examples provided.

list_brands ~25

List all brands in the workspace.

NameTypeReqDescription
cursorstringPagination cursor

No output schema declared.

No examples provided.

list_broadcasts ~40

List broadcasts in the workspace.

NameTypeReqDescription
cursorstringPagination cursor from a previous response
limitintegerMax broadcasts per page

No output schema declared.

No examples provided.

list_bulk_users ~38

List the users in a bulk job.

NameTypeReqDescription
cursorstringPagination cursor
job_idstringyesThe bulk job ID

No output schema declared.

No examples provided.

list_digest_instances ~93

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.

NameTypeReqDescription
cursorstringPagination cursor from a previous response
limitnumberMax instances to return (default 20, max 100)
schedule_idstringyesThe digest schedule id, in the form "sch/{uuid}"

No output schema declared.

No examples provided.

list_journey_run_steps ~54

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.

NameTypeReqDescription
run_idstringyesThe journey run id

No output schema declared.

No examples provided.

list_journey_runs ~167

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.

NameTypeReqDescription
cursorstringnext_cursor from a previous response
end_datestringInclusive upper bound on created_at, ISO 8601 date or timestamp
limitintegerRuns per page, 1 to 50. Defaults to 20.
start_datestringInclusive lower bound on created_at, ISO 8601 date or timestamp
statusstringComma-separated run statuses to filter on, e.g. PROCESSED,ERROR
template_idstringComma-separated journey ids to filter on

No output schema declared.

No examples provided.

list_journey_template_versions ~55

List published versions of a journey-scoped notification template, ordered most recent first.

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

No output schema declared.

No examples provided.

list_journey_templates ~193

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.

NameTypeReqDescription
cursorstringCheck the response's paging.more before calling again — false means every template already came back, and calling again with the same arguments returns the same page, not new data. This is an opaque…
journey_idstringyesThe journey template ID. Copy it exactly, character for character, from the response that returned it — never retype it from memory or reconstruct it.
limitnumberPage size (1–100)

No output schema declared.

No examples provided.

list_journey_versions ~34

List published versions of a journey, ordered most recent first.

NameTypeReqDescription
journey_idstringyesThe journey template ID

No output schema declared.

No examples provided.

list_journeys ~187

List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft).

NameTypeReqDescription
cursorstringIf a response has no cursor, every journey already came back — calling this again with the same arguments returns the same page, not new data. This is an opaque token — never decode it, edit it, or r…
versionstringFilter by version state. Defaults to published, and the two are never combined in one call. If you don't know whether the journey you want is published or still a draft, calling this twice — once per…

No output schema declared.

No examples provided.

list_lists ~52

Get all lists. Optionally filter by pattern (e.g. 'example.list.*').

NameTypeReqDescription
cursorstringPagination cursor
patternstringFilter pattern (e.g. 'example.list.*')

No output schema declared.

No examples provided.

list_messages ~332

List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.

NameTypeReqDescription
archivedbooleanThis NARROWS, it does not widen: true returns ONLY archived messages, excluding every active one. Omit it entirely to search active messages — the default view for a normal delivery question. Setting…
cursorstringFor fetching the next page. This is an opaque token — never decode it, edit it, or rebuild it. Pass it back exactly as it appeared in the previous response's cursor field, byte for byte. Omit this en…
enqueued_afterstringISO 8601 timestamp; only return messages enqueued after this time
eventstringFilter by event ID
liststringFilter by list ID
messageIdstringFilter by message ID
notificationstringFilter by notification ID
providerarrayFilter by provider key (e.g. sendgrid, twilio)
recipientstringFilter by recipient user ID
statusarrayFilter by status (e.g. DELIVERED, UNDELIVERABLE)
tagarrayFilter by metadata tags
tagsstringComma-delimited list of tags
tenant_idstringFilter by tenant ID
traceIdstringFilter by trace ID

No output schema declared.

No examples provided.

Common questions

What is the Courier MCP server?

Courier is an MCP server listed in the public MCP registry as io.github.trycourier/courier. Send notifications, manage templates, and configure integrations with Courier. This page covers its hosted endpoint (https://mcp.courier.com).

Is the Courier MCP server safe to use?

Courier scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Courier MCP server expose?

Courier exposes 161 tools: list_messages, get_message, get_message_content, get_message_history, list_notifications, and 156 more. Their descriptions and schemas cost roughly 14,709 tokens of context every time the server is loaded.

Does the Courier MCP server require authentication?

No. We connected to Courier without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Courier MCP server still maintained?

Courier is still listed as active in the MCP registry. We last reached this channel on 24 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.