Skip to main content
Glama
Notify

Notify

Official

notifycx

npm CI Docs License: MIT

Official Node/TypeScript client for Notify — a deliberately minimal transactional email API.

Notify sends email with one HTTPS request. You (or your AI) already render the HTML; Notify delivers it. Domain auth (SPF/DKIM/DMARC), logs, and webhooks included.

Pro is $10 for 10,000 emails · Pricing

What this repo is

This repository is the official client (notifycx) and official MCP (notifycx-mcp). It talks to https://notify.cx over HTTPS.

It does not include Notify’s server, AWS SES credentials, or any way to use Notify’s infrastructure without your own API key from the dashboard. Forks cannot send on Notify’s AWS account.

Related MCP server: SuprSend MCP Server - deprecated

Three ways to send

Context

Prefer

App / CI / production (Node/TS)

npm i notifycx (this package)

App / any language

Native fetch / curl — see examples/fetch-send

IDE coding agents

notifycx-mcp — npx -y notifycx-mcp with NOTIFY_API_KEY

First email in minutes

  1. Create an account at notify.cx and copy an API key.

  2. Install and send (sandbox first if you have not verified a domain yet):

npm install notifycx
import Notify from 'notifycx'

const notify = new Notify({ apiKey: process.env.NOTIFY_API_KEY! })

// Non-delivering API rehearsal (no SES):
await notify.sendTest({
  to: 'you@example.com',
  from: 'hello@yourdomain.com',
  subject: 'API rehearsal',
  html: '<p>Does not deliver</p>',
})

// Production (requires verified domain for custom from):
await notify.send({
  to: 'user@example.com',
  from: 'Acme <hello@yourdomain.com>',
  subject: 'Reset your password',
  html: '<p>Click to reset…</p>',
})

Prefer html in new code. message and text are also accepted.

Auth

  • Header: x-api-key (the SDK sets this for you)

  • Env: NOTIFY_API_KEY — never commit real keys; never put keys in client bundles

  • Optional: NOTIFY_BASE_URL / baseUrl for local mocks only (default https://notify.cx)

Responses

Success: { success: true, data: { messageId: "…" } }
Failure: { success: false, error: "…", code: "…" } — the SDK throws NotifyError with status and body.

Security

  • Call Notify only from server-side code (Route Handlers, Workers, Actions, backends).

  • Prefer domain-locked sending_access keys in apps; use full_access for MCP / dashboard management.

  • No AWS keys belong in this client. SES runs on Notify’s servers after your authenticated API request.

Native fetch (no SDK)

See examples/fetch-send or:

const res = await fetch('https://notify.cx/api/email/send', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': process.env.NOTIFY_API_KEY,
  },
  body: JSON.stringify({
    to: 'user@example.com',
    from: 'noreply@your-verified-domain.com',
    subject: 'Hello',
    html: '<p>Sent with fetch.</p>',
  }),
})

OpenAPI

MCP for coding agents

npx -y notifycx-mcp

Set NOTIFY_API_KEY in your MCP server env. Details: mcp/README.md · notify.cx/mcp

Develop

npm test
npm run build

See CONTRIBUTING.md and MAINTAINING.md.

Available Tools

21 tools
add_domainA

Add a sending domain and start SPF/DKIM verification. Returns dnsRecords (type/name/value) the user must add at their DNS host — Notify does not publish DNS. After DNS is configured, call check_domain. Then use send_email with a from address on that domain.

Inputs: domain (required), dnsProvider.

bootstrap_confirmA

Confirm the email OTP from bootstrap_start. Returns api_key once — instruct the user to put it in MCP env NOTIFY_API_KEY (do not leave the secret in chat). Then use add_domain / send_email. No NOTIFY_API_KEY required for this call.

Inputs: code (required), email (required), intent, clientHint.

bootstrap_startA

Start Notify agent signup or key recovery without the dashboard. Sends a 6-digit email OTP. No NOTIFY_API_KEY required. Ask the user to paste the code, then call bootstrap_confirm. Requires acceptTerms: true (https://notify.cx/terms).

Inputs: email (required), acceptTerms (required), intent.

check_domainA

Poll SES for domain SPF/DKIM verification status after DNS records were added. Call after add_domain. When both succeed, production send_email with that from domain is unlocked and the plan email limit lifts.

Inputs: domain (required).

create_api_keyA

Create an API key (full_access required). Free plan allows one key. Prefer sending_access + domainId for app keys on Pro+.

Inputs: name (required), domainId, permission.

create_billing_checkoutA

Get a Stripe Checkout URL for Pro or Scale (full_access key). User opens the URL in a browser to pay — not the Notify dashboard.

Inputs: plan.

create_webhookA

Create a Notify webhook for delivery events on a verified domain. Requires Pro or Scale (free plan has 0 webhooks). Use list_domains to get domainId.

Inputs: domainId (required), webhookUrl (required), subscribedEvents (required), matchMode, +2 more.

delete_api_keyB

Deactivate an API key by keyId. Cannot delete the last full_access key.

Inputs: keyId (required).

delete_webhookC

Delete a Notify webhook subscription by id.

Inputs: id (required).

get_domainA

Get one Notify sending domain by hostname, including dnsRecords (type/name/value) and raw DNS tokens for pending verification. Show dnsRecords to the user so they can add them at their hosting provider.

Inputs: domain (required).

get_usageA

Get Notify plan usage and quota (hourly/monthly sends, account_verified). Use when debugging limits or confirming production unlock.

Inputs: no named parameters.

get_webhookC

Get one Notify webhook by id.

Inputs: id (required).

list_api_keysA

List API key metadata for the account (id, name, prefix only — never the full secret).

Inputs: no named parameters.

list_domainsA

List Notify sending domains and verification status (SPF/DKIM). Includes structured dnsRecords (type/name/value) for the user to publish at their DNS host.

Inputs: no named parameters.

list_email_logsA

List recent Notify email delivery logs. Use after a send to check delivery, bounce, open, or click status.

Inputs: page, limit, eventType.

list_webhooksB

List Notify webhook subscriptions (URL, events, domain scope).

Inputs: no named parameters.

regenerate_api_keyA

Rotate an API key secret by keyId. Returns the new api_key once — update NOTIFY_API_KEY / app secrets.

Inputs: keyId (required).

send_emailA

Send transactional email via Notify (password reset, receipt, magic link, invoice, etc.) with a verified from domain. Use when the user wants production delivery. Prefer html for the body. For non-delivering API rehearsal before domain verification, use send_test_email instead.

Inputs: to (required), from (required), subject (required), html, +2 more.

send_test_emailA

API rehearsal for Notify: same request shape as production send but does not deliver and does not count toward quota. Use before domain verification or when testing the HTTP contract. For real inbox delivery, use send_email after verifying SPF/DKIM.

Inputs: to (required), from (required), subject (required), html, +2 more.

test_webhookA

Send a test Notify webhook payload to a URL (does not require an existing subscription id).

Inputs: eventType (required), webhookUrl (required), domainId.

update_webhookC

Update an existing Notify webhook (URL, events, domain scope).

Inputs: id (required), domainId, matchMode, matchFroms, +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 21 tools

    Disambiguation4/5

    Each tool targets a distinct resource+action (email send vs test send, webhook CRUD, API key lifecycle, domain verification), and descriptions explicitly steer between near-neighbors like send_email/send_test_email. The only mild overlap is between list_domains, get_domain, and check_domain, which all surface SPF/DKIM verification state, though their verbs still differentiate intent.

    Naming Consistency4/5

    Nearly all tools follow a predictable verb_noun pattern (send_email, list_webhooks, create_api_key, delete_webhook). Minor deviations: bootstrap_start/bootstrap_confirm read as noun_verb, and the create/add split (add_domain vs create_webhook/create_api_key) introduces slight inconsistency.

    Tool Count4/5

    21 tools is on the heavy side, but the surface spans several real sub-domains (sending, domains, API keys, webhooks, billing, onboarding) and each tool maps to a concrete operation. Nothing looks redundant or filler, so the count is defensible rather than bloated.

    Completeness4/5

    Webhooks have full CRUD plus test, API keys have create/list/delete/regenerate, and domains cover add/list/get/verify. Gaps exist but are minor: no delete_domain or domain removal path, no single-log retrieval or log filtering, and billing is checkout-only with no subscription management.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      A multi-service email platform for MCP-compatible clients that supports standard email providers, transactional APIs, and local testing environments. It enables users to send and receive emails, monitor service health, and integrate with messaging webhooks like Slack and Discord through natural language commands.
      10
      4
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Manage your entire notification infrastructure using natural language. Trigger workflows, create users, manage preferences, update tenant branding, and access docs — all from Cursor, Claude Desktop, or Windsurf. 24 tools covering email, SMS, push, WhatsApp, Slack, MS Teams, and in-app notifications.
      22
      12
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      The official MCP server for Nahook. Manage webhook endpoints, inspect deliveries and delivery attempts, retry failed deliveries, and list environments — directly from Claude, Cursor, Cline, or any MCP-compatible client.
      12
      1
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Official MCP server for Shipmail, enabling agents to manage domains, mailboxes, messages, threads, webhooks, and suppressions via natural language.
      100
      837 npm
      1
      MIT