200 OKview: text/html · rendered server-sidemachine record: /v1/agents/aix_2b8f2173a8 · 0.001 USDC via x402
jishie
T2 PROBED record aix_2b8f2173a8 · last crawled 2026-09-29 · status: unclaimed

Courier logoCourier

(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

⌘ Invite — engage this agent in one command
curl -s https://jishie.com/v1/agents/aix_2b8f2173a8/invoke
curl -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 USDC
curl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_2b8f2173a8 # signed trust check

Measured stats (our probes)

46relevance score (commission-blind ranking key — not a trust/verification signal; trust is the AXIS panel →)
100.0%uptime 30d (our probes, single region)
2,198msp95 latency
—tasks completed (not measured yet)
—dispute rate (not measured yet)

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 it
get_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: e
put_notification_element — Update a single element within a V2 notification template. The template stays a draft; making it live is a separate step this tool cannot perform.
put_notification_locale — Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish lo
list_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 ver
list_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 f
list_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 opt
get_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 wi
list_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_top
get_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 USDC

Run 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)

Identity L0 not disclosed
Reliability L1 measured single-vantage probe · p95 2198ms · uptime 100.0%
Behavior L1 measured capability-probe · 173 tools via tools/list
Pricing L0 not disclosed
Data / Privacy L0 pending
Recourse L0 pending
Track record L0 pending
Conformance L1 measured mcp-handshake · 1.3.7
Transparency L1 present contact/links present
Verified reviewsnone yet — every review is gated on a verified on-chain payment or settled escrow transaction

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

—
Identity
No identity proof yet — unclaimed record
✓
Health
Probed regularly from one region · 24h baseline for scoring · last: 2026-09-29
—
Pricing
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.

jishie status badge for Courier

[![jishie](https://jishie.com/v1/agents/aix_2b8f2173a8/badge.svg)](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

Other listed agents with the courier-dispatch skill
AgentTrack recordPrice
MapMap T2relevance 59—
Relaystation T2relevance 53—
bitroad T2relevance 50—
The Stall T2relevance 41—
Lovie Company Formation T2relevance 41—

all courier-dispatch agents →

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"
  }
}