mcpbeat Sign in

Ray notifications MCP Server

answering

Ray notifications is answering right now. Last checked 6 min ago. 32 installs a week from npm. It exposes 21 tools. Last commit 19 Sep 2026.

Send email, push, Slack, Discord, Telegram and webhook notifications and manage templates with Ray.

Installs per day peak 9 · avg 3 · +167% w/w
a month agotoday
Uptime history 49 days of history · worst day 76%
49 days agonow
100.0%
Uptime 24h
91 of 91 checks
21
Tools
read from the server
1141 ms
Response time
average over 24h
32
Installs / week
npm and PyPI

What changed 10

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 19 September 2026. No other catalogue keeps this.

25 Oct 2 tools changed the parameters they ask for send_notification, test_send_template
19 Sep 4 tools changed the parameters they ask for7 times that day create_template, send_notification, test_send_template and 1 more
19 Sep a tool description was rewritten list_channels
and 3 more, back to 19 September 2026

Ray notifications missed one check this week

Everything else answered, so this is steady rather than shaky. We check every 15 minutes, which is how a one-off gets told apart from the start of a pattern, and how you hear about the next one within the hour instead of from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 6 min ago.

run in your terminal
claude mcp add ray-mcp --transport http https://ray-api.gege.mn/mcp
Settings → Connectors → Add custom connector, then paste this address
https://ray-api.gege.mn/mcp
~/.codex/config.toml
[mcp_servers.ray-mcp]
url = "https://ray-api.gege.mn/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "ray-mcp": {
      "url": "https://ray-api.gege.mn/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "ray-mcp": {
      "type": "http",
      "url": "https://ray-api.gege.mn/mcp"
    }
  }
}

Available tools 21

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

webhook
create_webhook
Create an outbound webhook that Ray POSTs signed event payloads to (POST /tenant-webhooks; write scope; Pro plan or higher, otherwise 403). The URL must be public HTTPS. The response contains the signing `secret` exactly once: show it to the user to store (e.g. as an env var), since it can't be read again, only rotated with update_webhook. Read the `webhooks` docs page for the signature scheme.
delete_webhook
Delete (archive) a webhook so it receives no more events (DELETE /tenant-webhooks/{id}; write scope). It cannot be restored through the API; confirm with the user first.
get_webhook
Get one outbound webhook (GET /tenant-webhooks/{id}) including its delivery health (consecutiveFailures, lastDeliveryAt, lastFailureAt, lastError).
update_webhook
Change a webhook (PATCH /tenant-webhooks/{id}; write scope). Only the fields you pass change; pass at least one. `rotateSecret: true` issues a new signing secret, returned once in the response, and the old secret stops verifying immediately, so the receiving service must be updated at the same time.
template
create_template
Create a template (POST /templates; write scope). `channelKind` is permanent and must match the channels you'll send through (list_channels `templateKind`). It is saved as an unpublished draft unless `publish: true`; sending by templateId needs a published version (publish_template). Names are unique per workspace including archived templates: a collision returns 409, so unarchive_template the old one instead. Returns `{ id, requiredParams }`. Designed (drag-and-drop) email templates can only be made in the dashboard.
get_template
Get one template with its published version and its current draft (GET /templates/{id}): content, logTitle/logDescription, `requiredParams` a send must supply, and paramOverrides. Read this before update_template_draft, which needs the full body.
update_template_draft
Replace a template's draft (PATCH /templates/{id}; write scope). This is a full replacement, not a partial patch: pass content, logTitle, logDescription and paramOverrides as they should end up (get_template first). `name`, `folder` and `channelKind` are required for validation but not changed (channelKind must equal the original). Live sends keep using the published version until you publish, either with `publish: true` here or publish_template. Fails on archived templates.
send
get_send_status
Delivery status of a send (GET /sends/{id}): `aggregate` counts per status over the whole send (pending, claimed, delivered, failed_retryable, failed_terminal, suppressed) plus one page of per-recipient delivery rows including provider errors. Right after sending, rows are usually `pending`; check again after a few seconds. Feed-only sends have no rows. For more rows, pass the returned `nextCursor` as `cursor`.
send_notification
Send a notification (POST /send; needs a `write`-scoped key). Returns `{ sendId }` with HTTP 202: delivery is asynchronous, so check the outcome with get_send_status. Use exactly one mode: 1. Single: `channelConfigId` + `recipient`. 2. Fan-out: `channelConfigId` + `targets` (1-1000 `{ recipient, externalUserId? }`), one channel, one sendId. 3. Multi-channel: `deliveries` (1-10, each with its own `channelConfigId`, `recipient` and `templateId` or `content`) for ONE person over several channels; add `feed` + `externalUserId` for a single in-app feed entry. 4. Feed-only: `feed` (with `title`) + `externalUserId` and no channel: an in-app notification only. In modes 1-2 give exactly one of `templateId` (a published template, plus `params`) or inline `content`; in mode 3 that choice is made per delivery. Get channel ids and each recipient shape from list_channels first. Pass `idempotencyKey` whenever a retry must not deliver twice.
archive
archive_template
Archive a template (POST /templates/{id}/archive; write scope). Sends that reference it fail until it is restored with unarchive_template; its name stays reserved meanwhile. Confirm with the user first if it may be in production use.
channels
list_channels
List the delivery channels configured in this workspace (GET /channels). Call this FIRST before sending: each entry's `id` is the `channelConfigId` for send_notification and test_send_template, `kind` is the channel type (ses_email, smtp_email, fcm_push, slack_webhook, discord_webhook, telegram_bot, twilio_sms, sendsms_mn, generic_webhook), `templateKind` is the template channelKind it accepts, and `recipientSchema` is the exact JSON Schema of the `recipient` it expects. Channels and their provider credentials are set up in the Ray dashboard, not through this API; if the list is empty, ask the user to add one there.
click
get_click_stats
Email link click counts grouped by destination URL (GET /clicks) for a `sendId`, a `campaignId`, or both (at least one is required). Only links from email sends made with `trackClicks: true` are counted.
docs
read_docs
Read Ray's documentation as markdown. With no `slug` it returns the index (llms.txt) listing every page; then pass a page slug, i.e. the path after /docs/ without `.md`, such as `sending`, `templates`, `idempotency`, `errors`, `rate-limits`, `webhooks`, `status-and-feeds` or `channels/telegram`. Use it for anything the tool descriptions don't cover.
feed
list_feed_notifications
Read one end user's in-app notification feed (GET /notifications): the entries created by sends with `feed` or `showInFeed`. This is what an in-app inbox would show, not delivery status (use get_send_status for that). Paginate by passing `nextCursor` back as `cursor`.
publish
publish_template
Publish a template's current draft as its new live version (POST /templates/{id}/publish; write scope). Sends by templateId use it immediately. Fails if there is no draft or the template is archived.
templates
list_templates
List message templates (GET /templates): id, name, folder, channelKind, and `publishedVersionId` (null = never published, so it cannot be sent by templateId yet). Archived templates are hidden unless `includeArchived` is true. Use get_template for content and required params.
test
test_send_template
Send a real test of a template's PUBLISHED version to one recipient (POST /templates/{id}/test-send; write scope). It goes through the provider for real, so use a recipient the user controls. Test sends don't count toward the monthly quota (a small daily allowance applies instead) and never appear in feeds. Returns `{ sendId }` for get_send_status.
unarchive
unarchive_template
Restore an archived template (POST /templates/{id}/unarchive; write scope). This is how to reclaim a name held by an archived template instead of creating a new one.
usage
get_usage
The workspace's plan, subscription status and this calendar month's usage against the monthly quota (GET /billing/subscription). `used`/`remaining` are null on unmetered plans. On a hard-capped plan, sends beyond the quota fail with HTTP 402 quota_exceeded.
webhooks
list_webhooks
List the workspace's outbound event webhooks (GET /tenant-webhooks): url, subscribed events, enabled flag and delivery health (consecutiveFailures, lastError). Signing secrets are never returned.
whoami
whoami
Identify the API key this connection uses (GET /me): `tenantId` (the workspace), `apiKeyId` and `scopes`. Write tools need the `write` scope; call this to check before attempting them.

Endpoints

URLTransportStateLatencyChecked
https://ray-api.gege.mn/mcp streamable-http answering 1094 ms 6 min ago

Alternatives to Ray notifications

same job, measured the same way
Groundmail
by groundmail

Send transactional email and manage domains, templates, webhooks and suppressions with Groundmail.

1 920 installs/wk answering
AgentPing
by noriget

Let your AI agent notify you by email, Slack, Discord, or webhook. One tool: send_notification.

answering
Mailkite
by mailkite

Send email, manage domains, DNS, webhooks, templates, and inbound routing on MailKite

105 installs/wk answering
Alphorn
by alphorn-dev

Let AI agents notify you on Slack, Telegram, email, SMS, or push via an Alphorn webhook.

44 installs/wk local only
Email Agent
by mailkite

Email for AI agents — send, receive as a webhook, manage domains, templates, routing.

answering
Telegram Notify MCP
by parthjadhav

Send Telegram notifications from AI agents — text, photos, and documents.

76 installs/wk local only
Pingfyr
by pingfyr

Schedule reminders for AI agents via email, webhook, Slack, Discord, Telegram, or Google Calendar.

answering
BootForm
by bootform

Form backend for static sites: create forms, add email or Discord notifications, read submissions.

answering

Ray notifications — questions

Answers built from our own checks of this server.

What can Ray notifications do?
It exposes 21 tools, read directly from the server on our last check. Among them: archive_template, create_template, create_webhook, delete_webhook, get_click_stats, get_send_status and 15 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Ray notifications mostly used for?
Its tools cluster around webhook, template and send. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Ray notifications working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 1141 ms. The bar chart above shows every period we have measured.
How do I connect Ray notifications?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Ray notifications need an API key?
No. Ray notifications completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 21 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Ray notifications?
It answers our handshake in 1141 ms on average, which is faster than 4% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use Ray notifications?
The npm package @gege-mn/ray-mcp was installed 32 times in the last week. Week over week that is +167%. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is Ray notifications open source?
The code is open source: it is published under the MIT licence, written in TypeScript and 0 stars on GitHub. The licence covers the code in the repository, not the hosted service at ray-api.gege.mn, which runs on its operator's own terms.