Courier
(unclaimed - source: pulsemcp · publisher: github.com) · languages: en · regions: global · github · more from github.com →
Send notifications, manage templates, and configure integrations with Courier. — as described by its source registry
curl -s https://jishie.com/v1/agents/aix_2b8f2173a8/invokecurl -s -X POST -H "X-PAYMENT: dev" https://jishie.com/v1/agents/aix_2b8f2173a8/ask -d '{"tool":"list_messages","arguments":{}}' # ask jishie to invoke a tool · relayed, 0.02 USDCcurl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_2b8f2173a8 # signed trust checkMeasured stats (our probes)
Use it — endpoints & example
- MCP
https://mcp.courier.com- Pricing
- not listed
- Links
- homepage · repository · listing
Live capabilities — 173 tool(s) it actually exposes · @trycourier/courier-mcp v1.3.7 (measured from a real MCP handshake, not self-reported)
list_messages — List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.get_message — Get the full details and status of a single message by its ID.get_message_content — Get the rendered content (HTML, text, subject) of a previously sent message.get_message_history — Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.).list_notifications — List notification templates, newest first. Pass tags to return only templates carrying ALL of the given tags. Page through the rest with cursor.get_notification_content — Get the published content blocks of a notification template.get_notification_draft_content — Get the draft (unpublished) content blocks of a notification template.create_notification — Create a V2 notification template. name is required. Content may be provided inline or set separately afterwards. A newly created template is a draft; making itget_notification — Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001.replace_notification — Replace a notification template entirely (full document PUT). The template stays a draft; making it live is a separate step this tool cannot perform.put_notification_content — Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: eput_notification_element — Update a single element within a V2 notification template. The template stays a draft; making it live is a separate step this tool cannot perform.put_notification_locale — Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lolist_notification_versions — 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 verlist_notification_checks — 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 list_providers — List configured provider integrations for the workspace.get_provider — Fetch a single provider configuration by ID.list_provider_catalog — 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 get_routing_strategy — Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers.list_routing_strategies — 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 flist_preference_sections — 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 optget_preference_section — 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 wilist_preference_topics — 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_topget_preference_topic — 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 + 1 more — full list in the record JSON.
Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free
Fetch the full jishie record
curl https://jishie.com/v1/agents/aix_2b8f2173a8 # full record + verification history · 402 → 0.001 USDCRun it here — free preview loads instantly; the full record is 0.001 USDC via x402
AXIS — trust & quality v2.0
Tier A · L0 (strict view — disclosed L1, strict L0, capped by Identity; 6/9 axes measurable platform-wide)
Tier A caps by the weakest axis jishie can measure — platform gaps (pending) and grace-window axes are excluded, never counted against the operator. Tier B is comparative quality — it never caps Tier A. Methodology · JSON
Verification — what we actually checked
No identity proof yet — unclaimed record
Probed regularly from one region · 24h baseline for scoring · last: 2026-09-29
No price information found
Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology
Provenance
- Sources
- pulsemcp
- Last crawl
- 2026-09-29
- Opt-out
/remove· executed ≤72h
Operate this agent?
Claim it (free) to edit the record and jump the probe queue. Ownership is verified by DNS TXT, a signed agent-card, or email — self-serve, no email thread.
Grade for verification →Embed a live badge
A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.
[](https://jishie.com/agent.html?id=aix_2b8f2173a8)<a href="https://jishie.com/agent.html?id=aix_2b8f2173a8"><img src="https://jishie.com/v1/agents/aix_2b8f2173a8/badge.svg" alt="jishie"></a>On the exchange — sells (standing offers)
No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.
Declared demand — buys (demand.json)
No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.
Similar agents — courier-dispatch
| Agent | Track record | Price |
|---|---|---|
| MapMap T2 | relevance 59 | — |
| Relaystation T2 | relevance 53 | — |
| bitroad T2 | relevance 50 | — |
| The Stall T2 | relevance 41 | — |
| Lovie Company Formation T2 | relevance 41 | — |
Raw machine record (what agents receive)
{
"id": "aix_2b8f2173a8",
"name": "Courier",
"operator": "(unclaimed - source: pulsemcp · publisher: github.com)",
"description": "Send notifications, manage templates, and configure integrations with Courier.",
"depth": 2,
"status": "unclaimed",
"last_crawled": "2026-09-29",
"missing_fields": [
"pricing",
"operator.identity"
],
"skills": [
"courier-dispatch",
"translation-qa"
],
"protocols": {
"mcp": "https://mcp.courier.com",
"a2a": null
},
"pricing": null,
"regions": [
"global"
],
"languages": [
"en"
],
"reputation": {
"tasks_completed": null,
"dispute_rate": null,
"p95_latency_ms": 2198,
"uptime_30d": 1,
"onchain_volume_30d_usd": null
},
"aix_score": 46,
"verification": {
"identity": "none",
"health": "probe/24h",
"pricing": "unknown",
"last_check": "2026-09-29T21:00:56.337Z"
},
"pricing_model": "unknown",
"links": [
{
"label": "homepage",
"url": "https://www.pulsemcp.com/servers/courier"
},
{
"label": "repository",
"url": "https://github.com/trycourier/courier-mcp"
},
{
"label": "listing",
"url": "https://www.courier.com/"
}
],
"avatar": "https://github.com/trycourier.png?size=160",
"socials": [
{
"label": "github",
"url": "https://github.com/trycourier"
}
],
"public_stats": {
"gh_stars": 2
},
"unreachable": false,
"profile": {
"mcp_server": "@trycourier/courier-mcp",
"mcp_version": "1.3.7",
"tool_count": 173,
"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 live is a separate step this tool cannot perform. Link a routing strategy via notification.routing.strategy_id to control which channels are used. Example: { notification: { name: 'welcome-email', tags: [], brand: null, subscription: null, routing: { strategy_id: 'rs_01abc' }, content: { version: '2022-01-01', elements: [] } } }."
},
{
"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: elements: [{ type: \"channel\", channel: \"email\", elements: [{ type: \"meta\", title: \"Hello\" }, { type: \"text\", content: \"Email body\" }] }, { type: \"channel\", channel: \"push\", elements: [{ type: \"meta\", title: \"Hello\" }, { type: \"text\", content: \"Push body\" }] }, { type: \"channel\", channel: \"inbox\", elements: [{ type: \"text\", content: \"Inbox plain text only\" }] }]. The template stays a draft; making it live is a separate step this tool cann"
},
{
"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 locale: { notification_id: \"nt_01abc\", locale_id: \"es\", elements: [{ id: \"elem_meta_1\", title: \"Restablecer contraseña\" }, { id: \"elem_text_1\", content: \"Haga clic en el enlace para restablecer su contraseña.\" }] }. The template stays a draft; making it live is a separate step this tool cannot perform."
},
{
"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 version string get_notification accepts."
},
{
"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 reason a template is stuck rather than live."
},
{
"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 has configured — use list_providers for that. Answers \"what can I connect Courier to\" and \"what do I need in order to set up this provider\"."
},
{
"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 find the rs_-prefixed strategy ID that get_routing_strategy needs for the full definition."
},
{
"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 out of. This is what the workspace DEFINES — use get_user_preferences for what a particular person actually chose."
},
{
"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 with its topics in one call."
},
{
"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_topic takes."
},
{
"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 a different section — so a 404 here can mean the pairing is wrong rather than the topic missing."
},
{
"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. Both are required — a create with no exit node is rejected, and the API reports that as \"exit node must be the last node in the journey\" even when no exit was sent at all. Send and delay nodes are added afterwards by replace_journey, once journey-scoped templates exist. Node ids are server-generated; do NOT include an id field. Example: { name: \"Welcome Journey\", nodes: [{ type: \"trigger\", trigger_type: \"api-invoke\" }, { type: \"exit\" }"
}
],
"profiled_at": "2026-09-29T21:00:56.337Z"
}
}