Skip to main content
Give your coding agent two things and it can do everything in the language quickstarts for you: the Courier skill, which teaches it the API, the channels, and the patterns that hold up in production, and the hosted MCP server, which lets it act on your workspace directly. This guide walks through the same five steps as the Node.js quickstart, except each step is a prompt. About five minutes, most of it watching. What you need
  • A Courier account. Start free.
  • A Test API key from Settings β†’ API Keys. Set it as COURIER_API_KEY in your shell.
  • Claude Code, Cursor, or Codex. Other agents that support skills and MCP work the same way.

1. Install the skill

The skill is a set of instructions your agent loads when a task involves notifications. It covers channel selection, deliverability, compliance, and the code patterns for every SDK, so the agent writes the second call correctly, not just the first.
Claude Code can also install it as a plugin: /plugin marketplace add trycourier/courier-skills then /plugin install courier@courier-skills.

2. Connect the MCP server

The skill teaches; the MCP server acts. Connected to your workspace, the agent can create users, send messages, build and publish templates and journeys, and read delivery status, without you switching to the dashboard.
Cursor, Codex, and VS Code setup is in the MCP docs. Use a Test key here; everything the agent does lands in your Test environment.

3. Set up Courier in your project

Paste this into your agent. It reads your project, picks the right SDK, and wires the key from the environment.
Check: a new dependency in your manifest and a client module that reads the env var, nothing hardcoded.

4. Create a user and send a notification

This is the same as steps 2 and 3 of the language quickstart, done for you. The agent creates a test user with your email, creates a template in Design Studio, and sends through it.
Check: the email in your inbox, and the request in Message Logs with the channel and provider Courier chose.

5. Add routing and a journey

Now the two things that are tedious by hand. Routing with a fallback, then a multi-step sequence the agent builds in Journeys and triggers from code.
Check: the journey in the dashboard with three nodes, and a run for user_test showing WAITING at the delay.

Confirm what the agent did

Ask it to read back its own work. The MCP server exposes Message Logs and journey runs, so the answer comes from Courier, not from the agent’s memory.

Prompt library

Copy, paste, adjust the names. Each assumes the skill and MCP server from steps 1 and 2. Transactional
  • Add a password-reset notification: SMS first, email fallback, 10-minute expiry in the message. Create the template, wire it to the reset flow in this codebase, and send a test to user_test.
  • Create an order-confirmation template with order_id, items, and total as variables. Send a test with sample data and show me the rendered email.
  • Add an in-app inbox to this React app for the signed-in user, with a server endpoint that issues the Courier JWT.
Lifecycle
  • Build a weekly digest journey: collect "comment_added" events per user and send one email every Monday at 9am in the user's timezone. Publish it.
  • Build a re-engagement journey for users with no login in 14 days: an email, wait 3 days, a push notification if the user has a token, then stop. Trigger it for user_test.
  • Add a preferences page so users can turn each notification topic on or off per channel. Use the Courier preferences component.
Operations
  • Add a webhook endpoint to this project that receives Courier delivery events, verifies the signature, and logs undeliverable messages.
  • List every template in my Test environment that has no SMS channel configured.
  • Review the "welcome" template for deliverability problems: subject length, link count, image-to-text ratio, unsubscribe footer. Fix what you can.
Migration
  • I'm moving from Knock. Read the workflows in this repo's knock/ folder and recreate each one as a Courier journey with matching templates, then list what didn't map.

Next steps