此 MCP 可以做什么
Sends and tracks email, push, Slack, Discord, Telegram, SMS, and webhook notifications while managing templates, channels, and delivery events.
工具
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templateId'], 'properties': {'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The template id (UUID).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'channelKind', 'content', 'logTitle', 'logDescription'], 'properties': {'name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Template name, unique per workspace (archived templates included).'}, 'folder': {'type': 'string', 'maxLength': 200, 'description': 'Optional folder path for organisation, e.g. "billing".'}, 'content': {'type': 'object', 'description': 'Channel-shaped template body; the shape is fixed by `channelKind`: email_html → `{ subject, bodyHtml, bodyText }`; fcm_basic → `{ title, body, imageUrl?, data?: { [key]: string } }`; slack_text → `{ text }`; discord_text → `{ content }` (max 2000 chars); telegram_text → `{ text, disableLinkPreview? }`; sms_text → `{ text }` (plain text, max 1600; long text is split into several billed SMS — on sendsms_mn into parts of 159 plain-Latin / 69 Cyrillic chars); webhook_json → `{ title, body, data?: { [key]: string } }`. Use `{{name}}` placeholders and `{{#items}}…{{/items}}` sections; the required params are derived from them automatically.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'publish': {'type': 'boolean', 'description': 'true = publish this version immediately so sends by templateId use it. Default false (saved as draft).'}, 'logTitle': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': 'Short title shown in the in-app feed and delivery logs, e.g. "Invoice {{number}} is due". Placeholders allowed.'}, 'channelKind': {'enum': ['email_html', 'fcm_basic', 'slack_text', 'discord_text', 'telegram_text', 'sms_text', 'webhook_json'], 'type': 'string', 'description': "Which channel family the template renders for. Must match the `templateKind` of the channels you will send through (list_channels). Can't be changed after creation."}, 'logDescription': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'One-line description for the in-app feed and delivery logs. Placeholders allowed.'}, 'paramOverrides': {'type': 'object', 'description': 'Per-param metadata keyed by param name: `{ optional?: boolean, description?: string }`. Mark a placeholder optional so sends may omit it.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'properties': {'optional': {'type': 'boolean'}, 'description': {'type': 'string', 'maxLength': 500}}}}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'url', 'events'], 'properties': {'url': {'type': 'string', 'description': 'Public HTTPS endpoint that will receive the events.'}, 'name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Label for the webhook, e.g. "Production delivery events".'}, 'events': {'type': 'array', 'items': {'enum': ['notification.delivered', 'notification.failed_terminal', 'send.completed'], 'type': 'string'}, 'minItems': 1, 'description': 'Events to receive: "notification.delivered", "notification.failed_terminal" (one per recipient), and "send.completed" (once per send, with status totals).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['webhookId'], 'properties': {'webhookId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The webhook id (UUID).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'sendId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'A sendId from send_notification.'}, 'campaignId': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'The `campaignId` passed to send_notification, to total clicks across many sends.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sendId'], 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Rows per page (default 50, max 200).'}, 'cursor': {'type': 'string', 'minLength': 1, 'description': '`nextCursor` from the previous page.'}, 'sendId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The `sendId` returned by send_notification or test_send_template.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templateId'], 'properties': {'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The template id (UUID).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['webhookId'], 'properties': {'webhookId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The webhook id (UUID).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['externalUserId'], 'properties': {'after': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$', 'description': 'Only entries created after this ISO 8601 UTC datetime (e.g. "2026-09-01T00:00:00Z").'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Entries per page (default 50, max 200).'}, 'before': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$', 'description': 'Only entries created before this ISO 8601 UTC datetime.'}, 'cursor': {'type': 'string', 'minLength': 1, 'description': '`nextCursor` from the previous page.'}, 'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Only entries from this template.'}, 'externalUserId': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'The end user whose feed to read (the `externalUserId` used when sending).'}, 'channelConfigId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Only entries whose first delivery used this channel.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'folder': {'type': 'string', 'maxLength': 200, 'description': 'Only templates in this folder.'}, 'includeArchived': {'type': 'boolean', 'description': 'Include archived templates. Default false.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'includeArchived': {'type': 'boolean', 'description': 'Include deleted (archived) webhooks. Default false.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templateId'], 'properties': {'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The template id (UUID).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'slug': {'type': 'string', 'maxLength': 100, 'description': 'Page slug like "sending" or "channels/push-fcm". Omit for the index of all pages.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'feed': {'type': 'object', 'properties': {'title': {'type': 'string', 'maxLength': 500}, 'description': {'type': 'string', 'maxLength': 2000}}, 'description': 'Create exactly ONE in-app feed entry for `externalUserId` (read back with list_feed_notifications). `title`/`description` default to the rendered template text; `title` is required for a feed-only send (mode 4).'}, 'params': {'type': 'object', 'description': "Values for the template's `{{placeholders}}`. Any JSON: strings, numbers, booleans, arrays and nested objects (arrays/objects drive `{{#section}}…{{/section}}` blocks). Missing required params are rejected with a 400 naming them.", 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'content': {'type': 'object', 'description': 'Inline message content, used INSTEAD of `templateId` (give exactly one of the two). Shape by channel kind: ses_email / smtp_email → `{ subject, bodyHtml, bodyText }`; fcm_push → `{ title, body, imageUrl?, data?: { [key]: string } }`; slack_webhook → `{ text }` (Slack mrkdwn); discord_webhook → `{ content }` (max 2000 chars); telegram_bot → `{ text, disableLinkPreview? }` (Telegram HTML subset); twilio_sms / sendsms_mn → `{ text }` (plain text; up to 1600 chars on Twilio, sendsms_mn splits long text into SMS of 159 plain-Latin / 69 Cyrillic chars, each billed); generic_webhook → `{ title, body, data?: { [key]: string } }`. `{{name}}` placeholders are filled from `params` and escaped for the channel.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'targets': {'type': 'array', 'items': {'type': 'object', 'required': ['recipient'], 'properties': {'recipient': {'type': 'object', 'description': 'Channel-specific delivery target. Its shape depends on the kind of the chosen channel (list_channels returns each channel\'s exact `recipientSchema`): ses_email / smtp_email → `{ email, name?, cc?: [{ email, name? }], bcc?: [...], attachments?: [{ filename, content (base64), contentType?, disposition?: "attachment"|"inline", contentId? }] }`; fcm_push → `{ deviceToken }` OR `{ topic }` (exactly one; Ray keeps no device registry); telegram_bot → `{ chatId }` (numeric id as a string, or "@channelname"); twilio_sms → `{ phoneNumber }` (international E.164, e.g. "+97699112233"); sendsms_mn → `{ phoneNumber }` (Mongolian 8-digit, e.g. "99112233"); slack_webhook, discord_webhook, generic_webhook → `{}` (the destination is part of the channel config).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'externalUserId': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Your own id for this recipient. With `feed`/`showInFeed` they also get an in-app feed entry.'}}}, 'maxItems': 1000, 'minItems': 1, 'description': 'Mode 2: fan-out to 1-1000 recipients over ONE channel, sharing one sendId. Mutually exclusive with `recipient`.'}, 'logTitle': {'type': 'string', 'maxLength': 500, 'description': 'Feed/log title for inline `content` sends only (template sends take it from the template). Placeholders allowed.'}, 'priority': {'enum': ['high', 'low'], 'type': 'string', 'description': '"high" (default) for transactional messages; "low" for marketing/bulk so it never delays transactional sends.'}, 'notBefore': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$', 'description': 'Schedule delivery for later: ISO 8601 datetime with offset, e.g. "2026-09-15T09:00:00+08:00". Omit to send now.'}, 'recipient': {'type': 'object', 'description': 'Mode 1: the single recipient. Mutually exclusive with `targets`. Channel-specific delivery target. Its shape depends on the kind of the chosen channel (list_channels returns each channel\'s exact `recipientSchema`): ses_email / smtp_email → `{ email, name?, cc?: [{ email, name? }], bcc?: [...], attachments?: [{ filename, content (base64), contentType?, disposition?: "attachment"|"inline", contentId? }] }`; fcm_push → `{ deviceToken }` OR `{ topic }` (exactly one; Ray keeps no device registry); telegram_bot → `{ chatId }` (numeric id as a string, or "@channelname"); twilio_sms → `{ phoneNumber }` (international E.164, e.g. "+97699112233"); sendsms_mn → `{ phoneNumber }` (Mongolian 8-digit, e.g. "99112233"); slack_webhook, discord_webhook, generic_webhook → `{}` (the destination is part of the channel config).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'campaignId': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Free-form campaign id used to group click stats across sends.'}, 'deliveries': {'type': 'array', 'items': {'type': 'object', 'required': ['channelConfigId', 'recipient'], 'properties': {'params': {'type': 'object', 'description': 'Params for this delivery; falls back to the top-level `params`.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'content': {'type': 'object', 'description': 'Inline message content, used INSTEAD of `templateId` (give exactly one of the two). Shape by channel kind: ses_email / smtp_email → `{ subject, bodyHtml, bodyText }`; fcm_push → `{ title, body, imageUrl?, data?: { [key]: string } }`; slack_webhook → `{ text }` (Slack mrkdwn); discord_webhook → `{ content }` (max 2000 chars); telegram_bot → `{ text, disableLinkPreview? }` (Telegram HTML subset); twilio_sms / sendsms_mn → `{ text }` (plain text; up to 1600 chars on Twilio, sendsms_mn splits long text into SMS of 159 plain-Latin / 69 Cyrillic chars, each billed); generic_webhook → `{ title, body, data?: { [key]: string } }`. `{{name}}` placeholders are filled from `params` and escaped for the channel.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'logTitle': {'type': 'string', 'maxLength': 500, 'description': 'Feed/log title; only valid with inline `content`.'}, 'recipient': {'type': 'object', 'description': 'Channel-specific delivery target. Its shape depends on the kind of the chosen channel (list_channels returns each channel\'s exact `recipientSchema`): ses_email / smtp_email → `{ email, name?, cc?: [{ email, name? }], bcc?: [...], attachments?: [{ filename, content (base64), contentType?, disposition?: "attachment"|"inline", contentId? }] }`; fcm_push → `{ deviceToken }` OR `{ topic }` (exactly one; Ray keeps no device registry); telegram_bot → `{ chatId }` (numeric id as a string, or "@channelname"); twilio_sms → `{ phoneNumber }` (international E.164, e.g. "+97699112233"); sendsms_mn → `{ phoneNumber }` (Mongolian 8-digit, e.g. "99112233"); slack_webhook, discord_webhook, generic_webhook → `{}` (the destination is part of the channel config).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Published template for this delivery. Exactly one of `templateId` or `content`.'}, 'logDescription': {'type': 'string', 'maxLength': 2000, 'description': 'Feed/log description; only valid with inline `content`.'}, 'channelConfigId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Channel for this delivery (from list_channels).'}}}, 'maxItems': 10, 'minItems': 1, 'description': 'Mode 3: the same notification to ONE person over several channels (e.g. push + email), max 10. Each entry has its own channel, recipient and content source. Do not combine with top-level channelConfigId/recipient/targets/templateId/content.'}, 'showInFeed': {'type': 'boolean', 'description': 'Legacy modes 1-2 flag: also add a feed entry for each target that has an externalUserId. Prefer `feed`. Not valid with `deliveries`.'}, 'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Modes 1-2: a PUBLISHED template to render (see list_templates / publish_template). Exactly one of `templateId` or `content`. Its channelKind must match the channel's `templateKind`."}, 'trackClicks': {'type': 'boolean', 'description': 'Email channels only: rewrite links in bodyHtml so clicks are counted (read with get_click_stats). Default false.'}, 'externalUserId': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Your own id for the end user. Required with `feed`; keys their in-app feed.'}, 'idempotencyKey': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Sent as the Idempotency-Key header. Retrying with the same key and same arguments returns the original sendId without sending again (24h window); the same key with different arguments fails with 409. Use a fresh unique value (e.g. a UUID) per logical notification.'}, 'logDescription': {'type': 'string', 'maxLength': 2000, 'description': 'Feed/log description for inline `content` sends only. Placeholders allowed.'}, 'channelConfigId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Modes 1-2: the channel to send through — an `id` from list_channels. Not allowed together with `deliveries`.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templateId', 'channelConfigId', 'recipient'], 'properties': {'params': {'type': 'object', 'description': "Values for the template's `{{placeholders}}`. Any JSON: strings, numbers, booleans, arrays and nested objects (arrays/objects drive `{{#section}}…{{/section}}` blocks). Missing required params are rejected with a 400 naming them.", 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'recipient': {'type': 'object', 'description': 'Channel-specific delivery target. Its shape depends on the kind of the chosen channel (list_channels returns each channel\'s exact `recipientSchema`): ses_email / smtp_email → `{ email, name?, cc?: [{ email, name? }], bcc?: [...], attachments?: [{ filename, content (base64), contentType?, disposition?: "attachment"|"inline", contentId? }] }`; fcm_push → `{ deviceToken }` OR `{ topic }` (exactly one; Ray keeps no device registry); telegram_bot → `{ chatId }` (numeric id as a string, or "@channelname"); twilio_sms → `{ phoneNumber }` (international E.164, e.g. "+97699112233"); sendsms_mn → `{ phoneNumber }` (Mongolian 8-digit, e.g. "99112233"); slack_webhook, discord_webhook, generic_webhook → `{}` (the destination is part of the channel config).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The template id (UUID).'}, 'channelConfigId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Channel to test through (from list_channels); its templateKind must match the template's channelKind."}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templateId'], 'properties': {'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The template id (UUID).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templateId', 'name', 'channelKind', 'content', 'logTitle', 'logDescription'], 'properties': {'name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Template name, unique per workspace (archived templates included).'}, 'folder': {'type': 'string', 'maxLength': 200, 'description': 'Optional folder path for organisation, e.g. "billing".'}, 'content': {'type': 'object', 'description': 'Channel-shaped template body; the shape is fixed by `channelKind`: email_html → `{ subject, bodyHtml, bodyText }`; fcm_basic → `{ title, body, imageUrl?, data?: { [key]: string } }`; slack_text → `{ text }`; discord_text → `{ content }` (max 2000 chars); telegram_text → `{ text, disableLinkPreview? }`; sms_text → `{ text }` (plain text, max 1600; long text is split into several billed SMS — on sendsms_mn into parts of 159 plain-Latin / 69 Cyrillic chars); webhook_json → `{ title, body, data?: { [key]: string } }`. Use `{{name}}` placeholders and `{{#items}}…{{/items}}` sections; the required params are derived from them automatically.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'publish': {'type': 'boolean', 'description': 'true = publish this version immediately so sends by templateId use it. Default false (saved as draft).'}, 'logTitle': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': 'Short title shown in the in-app feed and delivery logs, e.g. "Invoice {{number}} is due". Placeholders allowed.'}, 'templateId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The template id (UUID).'}, 'channelKind': {'enum': ['email_html', 'fcm_basic', 'slack_text', 'discord_text', 'telegram_text', 'sms_text', 'webhook_json'], 'type': 'string', 'description': "Which channel family the template renders for. Must match the `templateKind` of the channels you will send through (list_channels). Can't be changed after creation."}, 'logDescription': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'One-line description for the in-app feed and delivery logs. Placeholders allowed.'}, 'paramOverrides': {'type': 'object', 'description': 'Per-param metadata keyed by param name: `{ optional?: boolean, description?: string }`. Mark a placeholder optional so sends may omit it.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'properties': {'optional': {'type': 'boolean'}, 'description': {'type': 'string', 'maxLength': 500}}}}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['webhookId'], 'properties': {'url': {'type': 'string', 'description': 'New public HTTPS endpoint.'}, 'name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'New label.'}, 'events': {'type': 'array', 'items': {'enum': ['notification.delivered', 'notification.failed_terminal', 'send.completed'], 'type': 'string'}, 'minItems': 1, 'description': 'Replaces the subscribed events. Events to receive: "notification.delivered", "notification.failed_terminal" (one per recipient), and "send.completed" (once per send, with status totals).'}, 'enabled': {'type': 'boolean', 'description': 'false pauses deliveries without deleting the webhook.'}, 'webhookId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The webhook id (UUID).'}, 'rotateSecret': {'type': 'boolean', 'description': 'true rotates the signing secret (new secret returned once; old one invalid immediately).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
近期工具变更
类似的 MCP 服务器
独行录 / opcmenu
Supports founder and company discovery, collaboration goals and tasks, events and signups, networking, messaging, profiles, produ…
Odichat
Manages WhatsApp, Instagram, and Facebook inboxes with contacts, conversations, agents, automation rules, labels, canned response…
KaiCalls
Provides AI phone reception, outbound calling campaigns, call transcripts and recordings, lead management, routing, staff alerts,…
anima
Provides agent-owned email inboxes, phone and SMS identities, email drafting and sending, message search and threading, domains, …
agendaforge
Manages events, agendas, sessions, speakers, attendees, sponsors, forms, contacts, email templates, approvals, and organizer work…
Asyntai
Manages website AI support agents, their knowledge bases, conversations, live replies, leads, products, webhooks, analytics, and …
ikeytz – Schlüsseldienst Ludwigsburg
Publishes read-only business information, locksmith pricing and service details, and links for phone, email, and WhatsApp contact.
mailbox
Manages physical inbound and outbound mail, postal fulfillment, OCR-backed mail context, facility messaging, delivery tracking, c…