mcpbeat Sign in

Ray notifications MCP Server

answering

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

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

Installs per day peak 133 · avg 4
a month agotoday
Uptime history 4 days of history · worst day 98%
4 days agonow
97.8%
Uptime 24h
89 of 91 checks
21
Tools
read from the server
1058 ms
Response time
average over 24h
141
Installs / week
npm and PyPI

Ray notifications does not always answer

Over the last week it answered 99.1% of our checks. We check every 15 minutes, so you hear about the next outage within the hour — not 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 14 min ago.

run in your terminal
claude mcp add ray-mcp --transport http https://ray-api.gege.mn/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "ray-mcp": {
      "url": "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
{
  "mcpServers": {
    "ray-mcp": {
      "url": "https://ray-api.gege.mn/mcp"
    }
  }
}

This one needs environment variables set before it will start: RAY_API_KEY (Ray API key (ck_live_...). Create one at https://ray.gege.mn under API keys; use the write scope to send and edit.), RAY_MCP_URL (Hosted Ray MCP endpoint to bridge to. Only change this for self-hosted or staging deployments.). The author declared them in the registry entry; get the values from the project itself.

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, 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 901 ms 14 min ago

Alternatives to Ray notifications

same job, measured the same way
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

128 installs/wk answering
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.

50 installs/wk local only
Pingfyr
by pingfyr

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

answering
Outbox
by fieldcure

Multi-channel messaging MCP server for Slack, Telegram, Email, KakaoTalk, and Discord.

local only
MCP Registry Monitor
by nirholas

Monitor MCP registry for new servers - Discord Slack notifications alerts

local only
Qmailing
by qmailing

AI agents read & send email, manage mailboxes, domains and webhooks via the QMailing API.

67 installs/wk 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 89 of 91 checks got a reply (97.8%), average response time 1058 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 with the file path 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 1058 ms on average, which is faster than 7% 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 141 times in the last week. 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?
Yes — it is published under the MIT licence, written in TypeScript and 0 stars on GitHub. The source link is on this page, so you can read exactly what it does with your data before you connect it.