{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_tvgc9ytz9za3","handle":"trycourier-courier","url":"https://wellknown.network/agents/trycourier-courier","links":{"self":"https://wellknown.network/agents/trycourier-courier/record.json","html":"https://wellknown.network/agents/trycourier-courier","markdown":"https://wellknown.network/agents/trycourier-courier/record.md","api":"https://wellknown.network/api/v1/agents/trycourier-courier","status":"https://wellknown.network/api/v1/agents/trycourier-courier/status","claim":"https://wellknown.network/agents/trycourier-courier/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/trycourier-courier/claim.json","badge":"https://wellknown.network/agents/trycourier-courier/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/trycourier-courier/history","tools":"https://wellknown.network/api/v1/agents/trycourier-courier/tools"},"ard":{"identifier":"urn:air:mcp.courier.com:server:trycourier-courier","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Courier","summary":"Send notifications, manage templates, and configure integrations with Courier.","description":"Send notifications, manage templates, and configure integrations with Courier.","publisher":{"name":"trycourier","url":null},"homepage":"https://courier.com","repository":"https://github.com/trycourier/courier-mcp","version":"1.3.7","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.courier.com","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-06-18T18:05:58.113087Z","publishedAt":"2026-06-18T18:05:58.113087Z","registryName":"io.github.trycourier/courier"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":1,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"},{"slug":"productivity.email","name":"Email","confidence":0.962,"provenance":"derived"},{"slug":"ai.prompting","name":"Prompt Management","confidence":0.938,"provenance":"derived"},{"slug":"knowledge.reasoning","name":"Reasoning & Planning","confidence":0.54,"provenance":"derived"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":0.525,"provenance":"derived"},{"slug":"productivity.crm","name":"CRM & Sales","confidence":0.525,"provenance":"derived"}],"categories":["ai","communication","dev","knowledge","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-10T20:26:56.265Z","lastProbedAt":"2026-10-10T20:26:56.265Z","statusComputedAt":"2026-10-10T20:29:14.089Z","reliability30d":{"probes":110,"successRate":1,"p50Ms":394,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":107,"ok":107,"authBoundaryOk":0,"serviceOk":107,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T20:26:56.265Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":506,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T13:24:42.713Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":387,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T06:28:06.030Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":402,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T00:28:32.345Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":388,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T18:25:54.083Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":411,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T11:26:08.887Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":400,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T04:29:03.852Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":378,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T22:24:22.963Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":404,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T15:23:57.235Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":398,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T08:28:41.480Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":407,"error":null,"detail":{"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"toolCount":173,"toolsHash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","serverName":"@trycourier/courier-mcp","capabilities":["tools"],"serverVersion":"1.3.7","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_messages","description":"List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant."},{"name":"get_message","description":"Get the full details and status of a single message by its ID."},{"name":"get_message_content","description":"Get the rendered content (HTML, text, subject) of a previously sent message."},{"name":"get_message_history","description":"Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.)."},{"name":"list_notifications","description":"List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor."},{"name":"get_notification_content","description":"Get the published content blocks of a notification template."},{"name":"get_notification_draft_content","description":"Get the draft (unpublished) content blocks of a notification template."},{"name":"create_notification","description":"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"},{"name":"get_notification","description":"Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001."},{"name":"replace_notification","description":"Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform."},{"name":"put_notification_content","description":"Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: e"},{"name":"put_notification_element","description":"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."},{"name":"put_notification_locale","description":"Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo"},{"name":"list_notification_versions","description":"List the version history of a notification template — each published version with when it was created. Use this to say what changed and when, or to find the ver"},{"name":"list_notification_checks","description":"List the checks recorded against one notification submission. Checks are the gates a submission has to clear before it goes out, so a failing check here is the "},{"name":"list_providers","description":"List configured provider integrations for the workspace."},{"name":"get_provider","description":"Fetch a single provider configuration by ID."},{"name":"list_provider_catalog","description":"List the provider integrations Courier supports and the configuration each one expects. This is the catalog of what COULD be connected, not what this workspace "},{"name":"get_routing_strategy","description":"Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers."},{"name":"list_routing_strategies","description":"List the workspace's routing strategies, returning metadata only. A routing strategy decides which channel a notification takes and in what order. Use this to f"},{"name":"list_preference_sections","description":"List the workspace's preference sections, each with the topics inside it. One call returns the whole opt-in surface: everything a user could subscribe to or opt"},{"name":"get_preference_section","description":"Get one preference section by ID, including its topics. Use this when you already know which section you need; list_preference_sections returns every section wi"},{"name":"list_preference_topics","description":"List the subscription topics inside one preference section. A topic is the individual thing a user opts in or out of, and its ID is what get_user_preference_top"},{"name":"get_preference_topic","description":"Get one subscription topic within a section, including its default opt-in state. Returns 404 if the section or topic does not exist, or if the topic belongs to "},{"name":"create_journey","description":"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."},{"name":"get_journey","description":"Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published."},{"name":"replace_journey","description":"Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. T"},{"name":"create_journey_template","description":"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"},{"name":"put_journey_template_content","description":"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 "},{"name":"put_journey_template_locale","description":"Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id. The templa"},{"name":"list_journeys","description":"List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft)."},{"name":"list_journey_templates","description":"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"},{"name":"get_journey_template","description":"Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published"},{"name":"get_journey_template_content","description":"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 pub"},{"name":"get_notification_metrics","description":"Delivery funnel for ONE notification template over time: sent, delivered, opened, clicked,\nerrors and undeliverable, per provider and channel, in time buckets.\n"},{"name":"get_tenant","description":"Get a tenant by its ID."},{"name":"list_tenants","description":"List the workspace's tenants. A tenant is a customer or organisation whose users, branding and preferences are scoped separately; this answers \"what tenants do "},{"name":"list_tenant_users","description":"List the users associated with one tenant. Use this to confirm whether someone actually belongs to the tenant whose branding or preferences you are reasoning ab"},{"name":"get_user_profile_by_id","description":"Get a user profile by their ID. Returns profile data including email, phone, and custom properties."},{"name":"get_user_list_subscriptions","description":"List the lists one user is subscribed to. Use this when explaining why a user received something — a subscription here is the reason a list-addressed send reach"},{"name":"get_user_preferences","description":"Get a user's notification preferences (subscriptions, opt-outs, channel preferences)."},{"name":"get_user_preference_topic","description":"Get one user's choice for a single subscription topic — whether they opted in or out, and per channel. Use this when you already know which topic is in question"},{"name":"list_user_tenants","description":"List the tenants a user belongs to. Preferences and branding can be scoped per tenant, so this tells you which tenant-scoped settings could apply to this user a"},{"name":"list_brands","description":"List the workspace's brands. A brand is the reusable logo, colors and email styling a notification template renders with; this gives you the brand IDs a templat"},{"name":"get_brand","description":"Get one brand by ID, including its colors, logo and styling settings. Read this to describe what a template referencing this brand will actually look like."},{"name":"courier_installation_guide","description":"Get the Courier SDK installation guide for one platform: the install command, a quick-start code sample and the relevant doc links. This is the answer to \"how d"},{"name":"list_automations","description":"List the workspace's automation templates, each with its template ID and whether it has a published or draft version. Answers \"what automations already exist he"},{"name":"list_audiences","description":"List the workspace's audiences. An audience is a saved filter over user profiles — a dynamic segment — so this answers \"who can I target\" and gives you the audi"},{"name":"get_audience","description":"Get one audience by ID, including the filter that defines its membership. Read this to explain why someone is or is not in an audience — the filter is the rule,"},{"name":"list_audience_members","description":"List the users who currently match an audience's filter. Membership is computed, so this reflects profiles as they are right now — a profile change can move som"},{"name":"list_lists","description":"List the workspace's lists. A list is an explicit, subscription-based group of users — someone is on it because they were subscribed, not because they match a r"},{"name":"get_list","description":"Get one list by its ID, including its name and current state."},{"name":"get_list_subscribers","description":"List the users subscribed to a list. Use this to confirm whether someone was actually on a list at all — a subscription here is the reason a list-addressed send"},{"name":"list_digest_instances","description":"List the digest instances for a digest schedule. Each instance is the events accumulated so far for one user against that schedule, so this shows what is waitin"},{"name":"update_audience","description":"Create or update an audience with a filter definition."},{"name":"delete_audience","description":"Delete an audience by its ID."},{"name":"get_audit_event","description":"Get a specific audit event by its ID."},{"name":"list_audit_events","description":"List audit events in the workspace. Useful for tracking API usage and changes."},{"name":"generate_jwt_for_user","description":"Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.)."},{"name":"invoke_automation_template","description":"Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: \""},{"name":"invoke_ad_hoc_automation","description":"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 st"},{"name":"cancel_automation","description":"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_to"},{"name":"list_automation_runs","description":"List automation runs, newest first. Filter by automation template, status, or a created_at window to find a run that stalled or errored, then read its steps wit"},{"name":"list_automation_run_steps","description":"List the steps of an automation run in order, with what happened at each. Send steps carry a message_id to follow with get_message."},{"name":"create_brand","description":"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 us"},{"name":"update_brand","description":"Replace an existing brand with new values."},{"name":"delete_brand","description":"Delete a brand by its ID."},{"name":"create_bulk_job","description":"Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job."},{"name":"add_bulk_users","description":"Add users to an existing bulk job."},{"name":"run_bulk_job","description":"Run a bulk job, triggering delivery to all added users."},{"name":"get_bulk_job","description":"Get the status of a bulk job."},{"name":"list_bulk_users","description":"List the users in a bulk job."},{"name":"track_inbound_event","description":"Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties."},{"name":"create_list","description":"Create or update a list by list ID."},{"name":"subscribe_user_to_list","description":"Subscribe a user to a list. Creates the list if it doesn't exist."},{"name":"unsubscribe_user_from_list","description":"Unsubscribe a user from a list."},{"name":"delete_list","description":"Delete a list by its ID."},{"name":"restore_list","description":"Restore a previously deleted list."},{"name":"bulk_subscribe_to_list","description":"Replace all subscribers on a list with the given recipients."},{"name":"add_subscribers_to_list","description":"Append subscribers to a list without removing existing subscribers."},{"name":"cancel_message","description":"Cancel a message that is currently being delivered. Returns the message details with updated status."},{"name":"resend_message","description":"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 mes"},{"name":"trace_message","description":"Trace delivery in one call. Give EXACTLY ONE of message_id (a single message) or trace_id (the metadata.trace_id set on a send, which can span several messages)"},{"name":"archive_notification","description":"Archive a notification template by ID."},{"name":"publish_notification","description":"Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLI"},{"name":"update_notification_checks","description":"Update check statuses for a notification submission."},{"name":"cancel_notification_submission","description":"Cancel a notification template submission."},{"name":"create_or_merge_user","description":"Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved."},{"name":"replace_profile","description":"Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep."},{"name":"patch_profile","description":"Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths."},{"name":"delete_profile","description":"Delete a user profile permanently."},{"name":"subscribe_user_to_lists","description":"Subscribe a user to one or more lists. Creates lists that do not exist."},{"name":"delete_user_list_subscriptions","description":"Delete all list subscriptions for a user."},{"name":"send_message","description":"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"},{"name":"send_message_template","description":"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: { u"},{"name":"send_message_to_list","description":"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."},{"name":"send_message_to_list_template","description":"Send a message to all subscribers of a list using a notification template."},{"name":"create_or_update_tenant","description":"Create or replace a tenant. Tenants represent organizations or groups that users belong to."},{"name":"delete_tenant","description":"Delete a tenant by its ID."},{"name":"update_tenant_preference","description":"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 th"}],"package":null,"toolSurface":{"id":"ts_s3hu7xqvg96b","endpointId":"ep_kh8rjdaz9wup","hash":"5c93a29c0b2b3b521fb768430e66a39ecb341409a060f82e8ffa5735225575fd","toolCount":173,"serverName":"@trycourier/courier-mcp","serverVersion":"1.3.7","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-29T00:27:59.963Z","lastSeenAt":"2026-10-10T20:26:56.273Z","observations":44,"toolNames":["list_messages","get_message","get_message_content","get_message_history","list_notifications","get_notification_content","get_notification_draft_content","create_notification","get_notification","replace_notification","put_notification_content","put_notification_element","put_notification_locale","list_notification_versions","list_notification_checks","list_providers","get_provider","list_provider_catalog","get_routing_strategy","list_routing_strategies","list_preference_sections","get_preference_section","list_preference_topics","get_preference_topic","create_journey","get_journey","replace_journey","create_journey_template","put_journey_template_content","put_journey_template_locale","list_journeys","list_journey_templates","get_journey_template","get_journey_template_content","get_notification_metrics","get_tenant","list_tenants","list_tenant_users","get_user_profile_by_id","get_user_list_subscriptions","get_user_preferences","get_user_preference_topic","list_user_tenants","list_brands","get_brand","courier_installation_guide","list_automations","list_audiences","get_audience","list_audience_members","list_lists","get_list","get_list_subscribers","list_digest_instances","update_audience","delete_audience","get_audit_event","list_audit_events","generate_jwt_for_user","invoke_automation_template","invoke_ad_hoc_automation","cancel_automation","list_automation_runs","list_automation_run_steps","create_brand","update_brand","delete_brand","create_bulk_job","add_bulk_users","run_bulk_job","get_bulk_job","list_bulk_users","track_inbound_event","create_list","subscribe_user_to_list","unsubscribe_user_from_list","delete_list","restore_list","bulk_subscribe_to_list","add_subscribers_to_list","cancel_message","resend_message","trace_message","archive_notification","publish_notification","update_notification_checks","cancel_notification_submission","create_or_merge_user","replace_profile","patch_profile","delete_profile","subscribe_user_to_lists","delete_user_list_subscriptions","send_message","send_message_template","send_message_to_list","send_message_to_list_template","create_or_update_tenant","delete_tenant","update_tenant_preference","delete_tenant_preference","list_tenant_templates","get_tenant_template","replace_tenant_template","publish_tenant_template","get_tenant_template_version","delete_tenant_template","get_translation","update_translation","list_user_push_tokens","get_user_push_token","create_or_replace_user_push_token","bulk_add_user_tokens","patch_user_token","delete_user_token","update_user_preference_topic","delete_user_preference_topic","add_user_to_tenant","remove_user_from_tenant","bulk_add_user_tenants","remove_all_user_tenants","bulk_update_user_preferences","bulk_replace_user_preferences","archive_request","create_routing_strategy","replace_routing_strategy","archive_routing_strategy","list_routing_strategy_notifications","invoke_journey","publish_journey","archive_journey","list_journey_versions","replace_journey_template","archive_journey_template","publish_journey_template","list_journey_template_versions","cancel_journey","list_journey_runs","get_journey_run","list_journey_run_steps","create_provider","update_provider","delete_provider","create_preference_section","replace_preference_section","archive_preference_section","publish_preferences","create_preference_topic","replace_preference_topic","archive_preference_topic","list_preference_logs","release_digest","release_user_digest","list_broadcasts","create_broadcast","get_broadcast","rename_broadcast","delete_broadcast","get_broadcast_content","put_broadcast_content","send_broadcast","schedule_broadcast","cancel_broadcast_schedule","duplicate_broadcast","list_preview_devices","list_preview_device_sets","create_preview_device_set","get_preview_device_set","replace_preview_device_set","archive_preview_device_set","create_preview_run","list_preview_runs","get_preview_run"],"distinctSurfaces":8},"endpointFacts":[{"id":"ep_kh8rjdaz9wup","url":"https://mcp.courier.com","type":"mcp_streamable_http","factsCheckedAt":"2026-10-10T20:26:56.284Z","auth":{"observedAt":"2026-10-10T20:26:56.383Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-10T20:26:56.392Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"mcp.courier.com","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-10-07T09:40:13.000Z","validTo":"2027-01-05T10:40:09.000Z","daysToExpiry":86,"sanCount":1,"fingerprint256":"B6:C8:0E:3A:15:2D:58:C8:34:C4:BB:5B:27:F6:3C:19:31:5B:05:F7:9B:AB:EF:D4:96:21:76:02:62:5C:9C:F2"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.trycourier/courier","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.trycourier%2Fcourier","firstSeenAt":"2026-09-07T05:18:16.291Z","fetchedAt":"2026-10-08T12:19:43.138Z","normalizedAt":"2026-10-08T12:19:43.138Z"}]},"firstSeenAt":"2026-09-07T05:18:16.291Z","updatedAt":"2026-10-10T20:29:55.106Z"}