mcpbeat Sign in

Courier MCP Server

by trycourier Your server? Claim it
answering

Courier is answering right now. Last checked 3 min ago. It exposes 145 tools.

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

The linked repository no longer exists on GitHub — it was deleted or made private.

Uptime history 47 days of history
47 days agonow
100.0%
Uptime 24h
92 of 92 checks
145
Tools
read from the server
628 ms
Response time
average over 24h
open, no key
Access
streamable-http

What changed 55

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 19 August 2026. No other catalogue keeps this.

16 Sep 20 tools changed the parameters they ask for create_journey_template, create_notification, get_journey and 17 more
16 Sep 6 tool descriptions were rewritten create_journey_template, create_notification, put_notification_content and 3 more
14 Sep a tool appeared get_notification_metrics
3 Sep 12 tool descriptions were rewritten create_journey, create_journey_template, create_notification and 9 more
3 Sep 4 tools changed the parameters they ask for create_or_update_tenant, replace_journey, replace_tenant_template and 1 more
25 Aug 2 tool descriptions were rewritten create_journey, replace_journey
25 Aug 2 tools changed the parameters they ask for create_journey, replace_journey
19 Aug 4 tool descriptions were rewritten create_journey, create_journey_template, put_journey_template_content and 1 more
19 Aug 4 tools changed the parameters they ask for create_journey, create_journey_template, put_journey_template_content and 1 more

What the code does

We have not read this server's code yet, 9 d ago · tools taken from the live server · rules 3dff92dd89df

In the project's build, not in the package

Found in continuous integration, deployment or infrastructure files, or in a neighbouring package of the same monorepo. None of this is installed when you add the server: it describes how the project is built and released. We list it because a leaked key in a build pipeline is still a real problem, but it is not something this server does on your machine.

Builds a database query by concatenation .github/workflows/bump-services.yml:49
        id: update
        working-directory: services-repo
        env:
          REFRESH: ${{ github.event_name == 'workflow_dispatch' && inputs.refresh_services_pr == true }}

Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.

This one has been quiet for a while

Quiet is not dead — but it is worth knowing when it wakes up, or when someone else takes it over. We watch the repository and tell you either way.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 3 min ago.

run in your terminal
claude mcp add courier --transport http https://mcp.courier.com
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "courier": {
      "url": "https://mcp.courier.com"
    }
  }
}
~/.codex/config.toml
[mcp_servers.courier]
url = "https://mcp.courier.com"
.cursor/mcp.json
{
  "mcpServers": {
    "courier": {
      "url": "https://mcp.courier.com"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "courier": {
      "url": "https://mcp.courier.com"
    }
  }
}

Available tools 145

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

user
add_user_to_tenant
Add a user to a tenant.
delete_user_list_subscriptions
Delete all list subscriptions for a user.
delete_user_preference_topic
Delete a user's preference for a specific subscription topic, reverting it to the topic's default status.
delete_user_token
Delete a specific push token for a user.
get_user_list_subscriptions
Get all list subscriptions for a user.
get_user_preference_topic
Get a user's preference for a specific subscription topic.
get_user_preferences
Get a user's notification preferences (subscriptions, opt-outs, channel preferences).
get_user_profile_by_id
Get a user profile by their ID. Returns profile data including email, phone, and custom properties.
get_user_push_token
Get a specific push/device token for a user.
list_user_push_tokens
List all push/device tokens for a user.
list_user_tenants
List all tenants a user belongs to.
remove_user_from_tenant
Remove a user from a tenant.
update_user_preference_topic
Update a user's preference for a specific subscription topic (opt in, opt out, or set channel preferences).
bulk
add_bulk_users
Add users to an existing bulk job.
bulk_add_user_tenants
Add a user to multiple tenants at once. A custom profile can be supplied per tenant.
bulk_add_user_tokens
Add multiple push/device tokens for a user in one request. Overwrites matching existing tokens.
bulk_replace_user_preferences
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).
bulk_subscribe_to_list
Replace all subscribers on a list with the given recipients.
bulk_update_user_preferences
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`.
create_bulk_job
Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job.
get_bulk_job
Get the status of a bulk job.
list_bulk_users
List the users in a bulk job.
run_bulk_job
Run a bulk job, triggering delivery to all added users.
tenant
create_or_update_tenant
Create or replace a tenant. Tenants represent organizations or groups that users belong to.
delete_tenant
Delete a tenant by its ID.
delete_tenant_preference
Remove default notification preference for a topic from a tenant.
delete_tenant_template
Delete a tenant notification template. Returns 204 on success, 404 if the template does not exist for this tenant.
get_tenant
Get a tenant by its ID.
get_tenant_template
Get a tenant notification template association by template ID.
get_tenant_template_version
Get a specific version of a tenant notification template (e.g. latest, published, or v1).
list_tenant_templates
List notification templates configured for a tenant.
list_tenant_users
List users associated with a tenant.
update_tenant_preference
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"] }.
replace
create_or_replace_user_push_token
Create or replace a push/device token for a user.
replace_journey
Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. The journey stays a draft; making the change live is a separate step this tool cannot perform. This is where send, delay, branch and exit nodes are added, and send node template IDs must already be scoped to this journey. The result carries a "verification" object read back from the server after the write — check it every time. verified:true means what you asked for is what saved. verified:false names what did not: "fieldMismatches" for node fields that failed to land, "nodeCountMismatch" for a node dropped or added, and "unknownTemplateReferences" for a send node pointing at a template id this journey does not have — almost always a mistyped id, so re-copy it from the create_journey_template or get_journey response it came from. Fix the specific thing named and send the corrected document. Re-sending an identical call changes nothing, and every replace_journey overwrites the whole draft again. An "errorKind" of "unauthorized" means the write itself succeeded and only the read-back was refused: report that as unconfirmed, never as a failed write.
replace_journey_template
Replace the draft of a journey-scoped notification template. Full document replacement. Call publish_journey_template afterwards to make it live.
replace_notification
Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform.
replace_preference_section
Replace a preference section. Full document replacement; missing optional fields are cleared. Topics attached to the section are unaffected.
replace_preference_topic
Replace a topic within a section. Full document replacement; missing optional fields are cleared.
replace_profile
Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep.
replace_routing_strategy
Replace a routing strategy. Full document replacement; missing optional fields are cleared.
replace_tenant_template
Create or replace a tenant notification template (draft unless published is true).
journey
create_journey
Create a new journey. Always created as a draft; making it live is a separate step this tool cannot perform. Send two nodes: the trigger, and an exit node last. Both are required — a create with no exit node is rejected, and the API reports that as "exit node must be the last node in the journey" even when no exit was sent at all. Send and delay nodes are added afterwards by replace_journey, once journey-scoped templates exist. Node ids are server-generated; do NOT include an id field. Example: { name: "Welcome Journey", nodes: [{ type: "trigger", trigger_type: "api-invoke" }, { type: "exit" }], enabled: true }. The result carries a "verification" object read back from the server after the write — check it every time. verified:true means what you asked for is what saved. verified:false names what did not: "fieldMismatches" for node fields that failed to land, "nodeCountMismatch" for a node dropped or added, and "unknownTemplateReferences" for a send node pointing at a template id this journey does not have — almost always a mistyped id, so re-copy it from the create_journey_template or get_journey response it came from. Fix the specific thing named and send the corrected document. Re-sending an identical call changes nothing, and every replace_journey overwrites the whole draft again. An "errorKind" of "unauthorized" means the write itself succeeded and only the read-back was refused: report that as unconfirmed, never as a failed write.
create_journey_template
Create a notification template scoped to a journey. Always created as a draft; making it live is a separate step this tool cannot perform. The template can then be referenced in journey send nodes. content.elements must be wrapped in a channel block — the API rejects bare elements. Example: { journey_id: "j-abc", channel: "email", notification: { name: "Welcome Email", tags: [], brand: null, subscription: null, content: { version: "2022-01-01", elements: [{ type: "channel", channel: "email", elements: [{ type: "text", content: "Hello!" }] }] } } }. The result carries a "verification" object confirming the new id is really present on the journey. verified:true means the id in this response is safe to reference from a send node. verified:false means it is not visible yet — re-read the journey before referencing it, and do not create a second template to work around it. An "errorKind" of "unauthorized" means the template was created and only the check was refused.
get_journey
Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published.
get_journey_template
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.
get_journey_template_content
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.
list_journey_template_versions
List published versions of a journey-scoped notification template, ordered most recent first.
list_journey_templates
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.
list_journey_versions
List published versions of a journey, ordered most recent first.
notification
create_notification
Create a V2 notification template. name is required. Content may be provided inline or set separately afterwards. A newly created template is a draft; making it live is a separate step this tool cannot perform. 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: [] } } }.
get_notification
Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001.
get_notification_content
Get the published content blocks of a notification template.
get_notification_draft_content
Get the draft (unpublished) content blocks of a notification template.
get_notification_metrics
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 was ENQUEUED in, not when the event happened. An open today of a message sent last Tuesday is counted in last Tuesday's bucket. So a past bucket can still change: yesterday's `opened` may be higher when you ask again tomorrow. - Results are cached for up to an hour and the pipeline adds its own lag, so a message sent minutes ago is expected NOT to appear yet. Never tell a user a just-sent message is missing; say the data has not caught up. - Read the window off the response's `start` and `end`, not off what you asked for. The API widens the window to whole buckets and returns the boundaries it actually used. - Quiet buckets are returned with an empty `data` array, so the series has no gaps. - An unknown template id returns an all-empty series rather than an error, and messages sent without a template never appear here at all. An empty result is not proof a template is unused — check that the id is right before concluding anything from it. - Because of that, a NOT FOUND / 404 error is never about the template id. It means the metrics endpoint itself could not be reached, which is an infrastructure or configuration problem on Courier's side. Say that the metrics service is unreachable and that someone should be told; do NOT tell the user to check or correct their template id, which sends them to fix something that was never wrong.
list_notification_checks
List checks for a notification submission.
list_notification_versions
List version history for a notification template.
update_notification_checks
Update check statuses for a notification submission.
archive
archive_journey
Archive a journey. Archived journeys cannot be invoked but existing runs continue to completion.
archive_journey_template
Archive a journey-scoped notification template. Archived templates cannot be sent.
archive_notification
Archive a notification template by ID.
archive_preference_section
Archive a preference section. The section must be empty: delete its topics first, otherwise the request fails with 409.
archive_preference_topic
Archive a topic within a section.
archive_request
Archive a send request and all its associated messages by request ID.
archive_routing_strategy
Archive a routing strategy. The strategy must not have associated notification templates; unlink all templates before archiving.
preference
create_preference_section
Create a preference section in your workspace. The section id is generated and returned. Add topics afterwards with create_preference_topic.
create_preference_topic
Create a subscription preference topic inside a section. The topic id is generated and returned. Fails with 404 if the section does not exist.
get_preference_section
Retrieve a preference section by id, including its topics.
get_preference_topic
Retrieve a topic within a section. Returns 404 if the section or topic does not exist, or the topic belongs to a different section.
list_preference_sections
List the workspace's preference sections. Each section embeds its topics.
list_preference_topics
List the topics in a preference section.
provider
create_provider
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.
delete_provider
Delete a provider configuration. Returns 409 if the provider is still referenced by routing or notifications.
get_provider
Fetch a single provider configuration by ID.
list_provider_catalog
List available provider types from the catalog with their configuration schemas.
update_provider
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.
publish
publish_journey
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.
publish_journey_template
Publish the current draft of a journey-scoped notification template. Optionally pass version to roll back to a prior version.
publish_notification
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.
publish_preferences
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.
publish_tenant_template
Publish a version of a tenant notification template.
put
put_journey_template_content
Replace the elemental content of a journey-scoped notification template. Overwrites all elements. The template stays a draft; making it live is a separate step this tool cannot perform.
put_journey_template_locale
Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id.
put_notification_content
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" }] }]. The template stays a draft; making it live is a separate step this tool cannot perform.
put_notification_element
Update a single element within a V2 notification template. The template stays a draft; making it live is a separate step this tool cannot perform.
put_notification_locale
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." }] }. The template stays a draft; making it live is a separate step this tool cannot perform.
audience
delete_audience
Delete an audience by its ID.
get_audience
Get an audience by its ID, including its filter definition.
list_audience_members
List all members of an audience.
update_audience
Create or update an audience with a filter definition.
brand
create_brand
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" } } }.
delete_brand
Delete a brand by its ID.
get_brand
Get a brand by its ID.
update_brand
Replace an existing brand with new values.
cancel
cancel_automation
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").
cancel_journey
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.
cancel_message
Cancel a message that is currently being delivered. Returns the message details with updated status.
cancel_notification_submission
Cancel a notification template submission.
routing
create_routing_strategy
Create a routing strategy defining how notifications are delivered across channels and providers.
get_routing_strategy
Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers.
list_routing_strategies
List routing strategies in the workspace. Returns metadata only; use get for full details.
list_routing_strategy_notifications
List notification templates associated with a routing strategy. Useful for checking linked templates before archiving.
send
send_message
Send a message to a user using inline title and body content (no template). Optionally specify routing channels. API reference: https://www.courier.com/docs/api-reference/send/send-a-message.
send_message_template
Send a message to a user using a published notification template. Only published templates can be sent; publishing a draft is a separate operation. Example: { user_id: "user-123", template: "nt_01abc123", data: { name: "Alex", resetUrl: "https://app.example.com/reset" } }.
send_message_to_list
Send a message to all subscribers of a list using inline title and body content. API reference: https://www.courier.com/docs/api-reference/send/send-a-message.
send_message_to_list_template
Send a message to all subscribers of a list using a notification template.
invoke
invoke_ad_hoc_automation
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.
invoke_automation_template
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" } }.
invoke_journey
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" } }.
message
get_message
Get the full details and status of a single message by its ID.
get_message_content
Get the rendered content (HTML, text, subject) of a previously sent message.
get_message_history
Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.).
audit
get_audit_event
Get a specific audit event by its ID.
list_audit_events
List audit events in the workspace. Useful for tracking API usage and changes.
patch
patch_profile
Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths.
patch_user_token
Apply a JSON Patch (RFC 6902) to a specific push token.
subscribe
subscribe_user_to_list
Subscribe a user to a list. Creates the list if it doesn't exist.
subscribe_user_to_lists
Subscribe a user to one or more lists. Creates lists that do not exist.
subscribers
add_subscribers_to_list
Append subscribers to a list without removing existing subscribers.
get_list_subscribers
Get all subscribers of a list.
translation
get_translation
Get a translation for a specific locale (e.g. "en_US", "fr_FR").
update_translation
Create or update a translation for a specific locale. API reference: https://www.courier.com/docs/api-reference/translations/update-translations-by-locale.
all
remove_all_user_tenants
Remove a user from all tenants.
audiences
list_audiences
List all audiences in the workspace.
automations
list_automations
List automation templates in the workspace, returning each template_id and its version state. Optionally filter by version.
brands
list_brands
List all brands in the workspace.
courier
courier_installation_guide
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.
create
create_list
Create or update a list by list ID.
delete
delete_list
Delete a list by its ID.
digest
list_digest_instances
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.
generate
generate_jwt_for_user
Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.).
get
get_list
Get a list by its ID.
journeys
list_journeys
List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft).
lists
list_lists
Get all lists. Optionally filter by pattern (e.g. 'example.list.*').
merge
create_or_merge_user
Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved.
messages
list_messages
List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.
notifications
list_notifications
List notification templates. Optionally filter by cursor.
profile
delete_profile
Delete a user profile permanently.
providers
list_providers
List configured provider integrations for the workspace.
release
release_digest
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.
resend
resend_message
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).
restore
restore_list
Restore a previously deleted list.
tenants
list_tenants
List all tenants in the workspace.
track
track_inbound_event
Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties.
unsubscribe
unsubscribe_user_from_list
Unsubscribe a user from a list.

Endpoints

URLTransportStateLatencyChecked
https://mcp.courier.com streamable-http answering 633 ms 3 min ago

Alternatives to Courier

same job, measured the same way
Ray notifications
by gege-mn

Send email, push, Slack, Discord, Telegram and webhook notifications and manage templates with Ray.

141 installs/wk 21 tools answering
Ntfy MCP Server
by cyanheads

Send, manage, and replay ntfy push notifications via MCP.

1 085 installs/wk local only
Gotify MCP
by kcofoni

MCP server for Gotify push notifications - send messages and manage apps/clients.

local only
Agent Push Kit
by justinbstrong

Send, search, and manage notifications, accounts, and push preferences

30 installs/wk answering
Studex MCP Server
by itshivams

Model Context Protocol server for Studex tools, notifications, and profile integrations

answering
Vybit
by vybit

Push notifications with personalized sounds - manage and trigger your vybits via MCP

answering
I
Outlook
by mcp-z

Outlook integration with OAuth, message search, batch operations, and calendar management

447 installs/wk local only
Elaan
by elaan

Create Elaan notification types, templates and brands, trigger sends, and debug delivery.

61 installs/wk local only

Courier — questions

Answers built from our own checks of this server.

What can Courier do?
It exposes 145 tools, read directly from the server on our last check. Among them: add_bulk_users, add_subscribers_to_list, add_user_to_tenant, archive_journey, archive_journey_template, archive_notification and 139 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Courier mostly used for?
Its tools cluster around user, tenant and bulk. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Courier working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 92 of 92 checks got a reply (100.0%), average response time 628 ms. The bar chart above shows every period we have measured.
Is Courier still maintained?
The linked repository no longer exists on GitHub — it was deleted or made private. We show this because it changes what you can expect: an unmaintained server may keep answering for months and then stop without warning.
How do I connect Courier?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Courier need an API key?
No. Courier completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 145 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Courier?
It answers our handshake in 628 ms on average, which is faster than 20% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.