Courier
REMOTE · MCP.COURIER.COM · SCANNED AUG 3
Send notifications, manage templates, and configure integrations with Courier.
Available components
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (delete_audience). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http trycourier-courier https://mcp.courier.com/
[mcp_servers.trycourier-courier] url = "https://mcp.courier.com/"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"trycourier-courier": {
"type": "remote",
"url": "https://mcp.courier.com/",
"enabled": true
}
}
} openclaw mcp add trycourier-courier --url https://mcp.courier.com/ --transport streamable-http
mcp_servers:
trycourier-courier:
url: "https://mcp.courier.com/" {
"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.
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.
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/ |
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.
add_bulk_users ~42
Add users to an existing bulk job.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The bulk job ID |
| users | array | yes | Array 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.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | The list ID |
| recipients | array | yes | Recipients to set on the list |
No output schema declared.
No examples provided.
add_user_to_tenant ~52
Add a user to a tenant.
| Name | Type | Req | Description |
|---|---|---|---|
| profile | object | — | Tenant-scoped profile overrides |
| tenant_id | string | yes | The tenant ID |
| user_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| journey_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| journey_id | string | yes | The journey template ID that owns this notification |
| notification_id | string | yes | The notification template ID |
No output schema declared.
No examples provided.
archive_notification ~29
Archive a notification template by ID.
| Name | Type | Req | Description |
|---|---|---|---|
| notification_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| section_id | string | yes | Id of the preference section to archive |
No output schema declared.
No examples provided.
archive_preference_topic ~46
Archive a topic within a section.
| Name | Type | Req | Description |
|---|---|---|---|
| section_id | string | yes | Id of the preference section |
| topic_id | string | yes | Id 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.
| Name | Type | Req | Description |
|---|---|---|---|
| request_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| routing_strategy_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| tenants | array | yes | Array of tenant associations |
| user_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| tokens | array | yes | Token records to upsert |
| user_id | string | yes | The 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).
| Name | Type | Req | Description |
|---|---|---|---|
| tenant_id | string | — | Scope the replacement to a specific tenant context |
| topics | array | yes | The complete set of topic overrides. An empty array resets every existing override. |
| user_id | string | yes | The user ID |
No output schema declared.
No examples provided.
bulk_subscribe_to_list ~47
Replace all subscribers on a list with the given recipients.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | The list ID |
| recipients | array | yes | Recipients 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| tenant_id | string | — | Scope the update to a specific tenant context |
| topics | array | yes | Topics to create or update |
| user_id | string | yes | The 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").
| Name | Type | Req | Description |
|---|---|---|---|
| cancelation_token | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cancelation_token | string | — | Cancels every run associated with this token. Mutually exclusive with run_id. |
| run_id | string | — | Cancels 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.
| Name | Type | Req | Description |
|---|---|---|---|
| message_id | string | yes | The message ID to cancel |
No output schema declared.
No examples provided.
cancel_notification_submission ~40
Cancel a notification template submission.
| Name | Type | Req | Description |
|---|---|---|---|
| notification_id | string | yes | The notification template ID |
| submission_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| platform | string | yes | The platform to get installation guide for |
| user_id | string | — | User 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" } } }.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | — | Optional brand ID; auto-generated if omitted |
| name | string | yes | Brand display name |
| settings | object | — | Brand appearance settings. If omitted, defaults to { colors: { primary: "#000000", secondary: "#ffffff" } }. |
| snippets | object | — | Brand 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.
| Name | Type | Req | Description |
|---|---|---|---|
| message | object | yes | Bulk 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 }.
| Name | Type | Req | Description |
|---|---|---|---|
| enabled | boolean | — | Whether the journey is active. Defaults to true. |
| name | string | yes | Journey display name |
| nodes | array | yes | Array 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… |
| state | string | — | Create 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!" }] } } }.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel for this template (e.g. "email", "push", "sms", "inbox") |
| journey_id | string | yes | The journey template ID |
| notification | object | yes | Notification template definition |
| provider_key | string | — | Specific provider key to target |
| state | string | — | Initial state: "DRAFT" (default) or "PUBLISHED" |
No output schema declared.
No examples provided.
create_list ~40
Create or update a list by list ID.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | The list ID |
| name | string | yes | Display 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: [] } } }.
| Name | Type | Req | Description |
|---|---|---|---|
| notification | object | yes | Notification template payload |
| state | string | — | Template 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.
| Name | Type | Req | Description |
|---|---|---|---|
| profile | object | — | Profile data to create or merge (e.g. { email: "...", phone_number: "..." }) |
| user_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| device | object | — | Device metadata |
| provider_key | string | yes | Push provider |
| token | string | yes | The token string |
| user_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_id | string | — | Brand ID to associate with this tenant |
| default_preferences | — | — | Default notification preferences for users in this tenant |
| name | string | yes | Display name for the tenant |
| parent_tenant_id | string | — | Parent tenant ID for hierarchical tenants |
| properties | object | — | Custom properties for the tenant |
| tenant_id | string | yes | The tenant ID |
| user_profile | object | — | Default 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.
| Name | Type | Req | Description |
|---|---|---|---|
| has_custom_routing | boolean | — | Whether the section defines custom routing for its topics |
| name | string | yes | Human-readable name for the section |
| routing_options | array | — | Default 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.
| Name | Type | Req | Description |
|---|---|---|---|
| allowed_preferences | array | — | Preference controls a recipient may customize for this topic |
| default_status | string | yes | Default subscription status applied when a recipient has not set their own |
| include_unsubscribe_header | boolean | — | Whether to include a list-unsubscribe header on emails for this topic |
| name | string | yes | Human-readable name for the preference topic |
| routing_options | array | — | Default channels delivered for this topic. Defaults to empty if omitted. |
| section_id | string | yes | Id of the preference section to create the topic in |
| topic_data | object | — | Arbitrary 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.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | — | Short alias for referencing this provider |
| provider | string | yes | Provider key from the catalog (e.g. sendgrid, twilio, firebase-fcm) |
| settings | object | — | Provider-specific settings (API keys, credentials, etc.) |
| title | string | — | Display 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.
| Name | Type | Req | Description |
|---|---|---|---|
| channels | object | — | Per-channel delivery configuration |
| description | string | — | Description of the routing strategy |
| name | string | yes | Human-readable name for the routing strategy |
| providers | object | — | Per-provider delivery configuration |
| routing | object | yes | Routing tree defining channel selection method and order |
| tags | array | — | Tags for categorization |
No output schema declared.
No examples provided.
delete_audience ~29
Delete an audience by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| audience_id | string | yes | The audience ID to delete |
No output schema declared.
No examples provided.
delete_brand ~28
Delete a brand by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_id | string | yes | The brand ID to delete |
No output schema declared.
No examples provided.
delete_list ~26
Delete a list by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | The list ID |
No output schema declared.
No examples provided.
delete_profile ~27
Delete a user profile permanently.
| Name | Type | Req | Description |
|---|---|---|---|
| user_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| provider_id | string | yes | The provider configuration ID to delete |
No output schema declared.
No examples provided.
delete_tenant ~29
Delete a tenant by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| tenant_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| tenant_id | string | yes | The tenant ID |
| topic_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| template_id | string | yes | The notification template ID to delete |
| tenant_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| user_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| topic_id | string | yes | The subscription topic ID |
| user_id | string | yes | The user ID |
No output schema declared.
No examples provided.
delete_user_token ~41
Delete a specific push token for a user.
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | The token identifier to delete |
| user_id | string | yes | The 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.).
| Name | Type | Req | Description |
|---|---|---|---|
| expires_in | string | — | Token expiry duration (e.g. "1h", "2 days") |
| scopes | array | — | Permission scopes for the token |
| user_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| audience_id | string | yes | The audience ID |
No output schema declared.
No examples provided.
get_audit_event ~32
Get a specific audit event by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| audit_event_id | string | yes | The audit event ID |
No output schema declared.
No examples provided.
get_brand ~26
Get a brand by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_id | string | yes | The brand ID |
No output schema declared.
No examples provided.
get_bulk_job ~29
Get the status of a bulk job.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| journey_id | string | yes | The journey template ID |
| version | string | — | Version to retrieve: "draft", "published" (default), or a version string like "v001" |
No output schema declared.
No examples provided.