Перейти к содержанию

Ray notifications

Отправка уведомлений по почте, push, Slack, Discord, Telegram и вебхукам с шаблонами

Коммуникацияавтор: gege-mn · добавлен каталогом✓ Проверен модератором
21 инструмент
подключить к ассистенту

Добавьте сервер в «Мои MCP» — получите адрес подключения для Claude и ChatGPT.

Добавить в «Мои MCP»

Нужно войти или зарегистрироваться — вернём на эту страницу.

/about

Описание

Ray — сервис для отправки уведомлений из приложений по разным каналам: email, push, Slack, Discord, Telegram и вебхуки. Сервер позволяет управлять им из диалога с ассистентом. Можно посмотреть настроенные каналы доставки, отправить уведомление и отследить статус доставки по получателям. Шаблоны сообщений создаются, редактируются, публикуются, архивируются и восстанавливаются, а тестовая отправка проверяет опубликованную версию. Также доступны лента уведомлений пользователя внутри приложения, статистика кликов по ссылкам в письмах, управление исходящими вебхуками, сведения о тарифе и расходе квоты и документация сервиса. Для работы нужен аккаунт Ray и API-ключ; часть функций, например вебхуки, доступна на старших тарифах.

/tools

Инструменты · 21

из ответа tools/list

Archive template

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.

archive_template(templateId: string)

Create 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.

create_template(name: string, folder?: string, content: object, publish?: boolean, logTitle: string, channelKind: string, logDescription: string, paramOverrides?: object)

Create 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.

create_webhook(url: string, name: string, events: array)

Delete webhook

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.

delete_webhook(webhookId: string)

Get click stats

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.

get_click_stats(sendId?: string, campaignId?: string)

Get send status

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`.

get_send_status(limit?: integer, cursor?: string, sendId: string)

Get template

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.

get_template(templateId: string)

Get plan and 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.

get_usage()

Get webhook

get_webhook

Get one outbound webhook (GET /tenant-webhooks/{id}) including its delivery health (consecutiveFailures, lastDeliveryAt, lastFailureAt, lastError).

get_webhook(webhookId: string)

List 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.

list_channels()

List feed notifications

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`.

list_feed_notifications(after?: string, limit?: integer, before?: string, cursor?: string, templateId?: string, externalUserId: string, channelConfigId?: string)

List 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.

list_templates(folder?: string, includeArchived?: boolean)

List 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.

list_webhooks(includeArchived?: boolean)

Publish template

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.

publish_template(templateId: string)

Read Ray 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.

read_docs(slug?: string)

Send notification

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.

send_notification(feed?: object, params?: object, content?: object, targets?: array, logTitle?: string, priority?: string, notBefore?: string, recipient?: object, campaignId?: string, deliveries?: array, showInFeed?: boolean, templateId?: string, trackClicks?: boolean, externalUserId?: string, idempotencyKey?: string, logDescription?: string, channelConfigId?: string)

Test-send template

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.

test_send_template(params?: object, recipient: object, templateId: string, channelConfigId: string)

Unarchive template

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.

unarchive_template(templateId: string)

Update template draft

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.

update_template_draft(name: string, folder?: string, content: object, publish?: boolean, logTitle: string, templateId: string, channelKind: string, logDescription: string, paramOverrides?: object)

Update webhook

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.

update_webhook(url?: string, name?: string, events?: array, enabled?: boolean, webhookId: string, rotateSecret?: boolean)

Who am I

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.

whoami()

Вопросы, новые серверы, обсуждение MCP

t.me/rusmcp · t.me/RusMcp_bot