senderkit_
so they don’t collide with other servers in a multi-server setup.
No MCP prompts or resources are exposed — tools only.
Workspace
senderkit_context
Report the connected workspace and the active send mode. No parameters.
Call this before sending when you need to confirm which workspace subsequent
calls will affect, or whether messages will really be delivered (live) or
only recorded in test mode (test). The mode is fixed per connection —
derived from the API key prefix for API-key connections (sk_live_ /
sk_test_), or from the workspace/mode you chose on the consent screen for
OAuth connections.
Returns { workspace: { id, slug, name }, mode: "live" | "test" }.
Sending
senderkit_send
Send a templated message to a recipient. Dispatches a real message; live vs
test mode is fixed per connection (call senderkit_context
to confirm before sending). The result includes a mode field alongside the
message ID and status.
The most common tool — an agent uses this when you ask it to “send the welcome
template” or “email a notice to user@example.com”. Mirrors the
POST /v1/send endpoint.
Recipient address — email address, E.164 phone number, push device token, or
JSON-encoded web-push
PushSubscription.Force a channel. Defaults to the template’s primary channel.
Free-form metadata as a JSON object of scalar values. Indexed for filtering
in
senderkit_messages_list.ISO 8601 timestamp for scheduled delivery.
Must be in the future, within 30 days.
Idempotency key. Repeat values return the
original send instead of duplicating.
Email-only. Cc recipients.
Email-only. Bcc recipients.
Email-only. Reply-To address.
Email-only. Up to 10 MB total across all attachments. Each
Attachment is
{ filename, contentType, content (base64), inline?, contentId? }.Email-only. From address override (bare address). Must match a verified custom sending domain when using the managed email sender.
Email-only. From display name override, rendered as
Name <address>. Max 128 characters; no control characters or angle brackets. Always applies, regardless of sending domain.senderkit_send_raw
Send inline content without a registered template. Dispatches a real message;
live vs test mode is fixed per connection (call senderkit_context
to confirm). The result includes a mode field.
Useful for one-off sends an agent constructs in the moment — e.g. “draft and
send a status update to this list.” See
Template sends and raw sends.
The channel to send on.
Recipient address. For
channel: "web-push", the JSON-encoded browser
PushSubscription (endpoint + p256dh/auth keys).Email subject. Required for
channel: "email".Email preheader (the snippet preview some clients show).
Email HTML body. Required for
channel: "email".Email plain-text body.
Email from-address override. Must match a verified custom sending domain when using the managed email sender.
Email-only. From display name override, rendered as
Name <address>. Max 128 characters; no control characters or angle brackets. Always applies, regardless of sending domain.Message body. Required for
channel: "sms", channel: "push", and
channel: "web-push".Notification title. Required for
channel: "push" and channel: "web-push".Badge count. Push and web-push.
Notification sound name. Push only.
Icon URL shown in the notification. Web-push only.
URL opened when the user clicks the notification. Web-push only.
Data payload as a JSON object of string values. Push and web-push.
Variables for interpolation. Only applied when
interpolate: true.Run server-side variable substitution over the inline content. Defaults to
false (content delivered verbatim).Free-form metadata.
ISO 8601 timestamp for scheduled delivery.
Idempotency key.
Email-only. Cc recipients.
Email-only. Bcc recipients.
Email-only. Reply-To address.
Email-only. Same shape as
senderkit_send.Templates
senderkit_templates_list
List available templates. No parameters.
Use when the agent needs to discover what’s available before sending — e.g.
asking “which templates exist?” — or to confirm a slug before referencing it.
Mirrors GET /v1/templates. See Templates.
senderkit_templates_get
Fetch a single template by slug.
Use to inspect a template’s current state — its channel, status, and currently
published version (excluding the raw content blob). Mirrors
GET /v1/templates/{slug}.
Template slug, e.g.
"welcome". Slugs are always lowercase.senderkit_templates_create
Generate a new template from a plain-language brief and save it as a draft.
The tool composes channel-native content server-side and returns a deep link to
review the draft in the editor. Nothing is sent until the user reviews and
publishes the draft. Template creation counts toward the workspace’s template
cap; the tool returns 409 template_limit_reached if the cap is hit before the
AI call runs.
The channel for the new template.
Plain-language description of the message to generate (max 4,000 characters).
Lowercase URL-safe identifier (digits,
a-z, _, -). Converted to
lowercase automatically. Auto-derived from the brief if omitted; a numeric
suffix is appended on collision.Optional internal note (max 280 characters).
senderkit_templates_regenerate
Regenerate an existing draft template from a new brief.
This fully replaces the draft’s content and discards any manual edits made in
the editor — warn the user before calling. Only draft templates can be
regenerated; published templates are left untouched.
Slug of the draft template to regenerate.
New brief that fully replaces the draft’s content (max 4,000 characters).
Messages
senderkit_messages_list
List messages, optionally filtered.
The agent’s window into message history. Use it to answer
“did the welcome email to user@example.com go through?” or “show me recent
failures.” Mirrors GET /v1/messages.
Max messages to return.
Pagination cursor from a previous response.
status
"scheduled" | "queued" | "rendered" | "dispatched" | "sent" | "delivered" | "failed" | "opted_out" | "blocked" | "canceled"
Filter by message status.
Filter by channel.
Filter by template slug.
Filter by metadata; every key/value must match (jsonb containment).
senderkit_messages_get
Fetch a single message by ID.
Use to inspect the full record for one send — its current status, the
provider’s response, and the timeline of events. Mirrors
GET /v1/messages/{id}.
Public message id, e.g.
"msg_…".senderkit_cancel_message
Cancel a still-pending (scheduled or queued) message by ID.
Use to abort a scheduled send before its
fire time, or pull back a message that hasn’t yet been handed to a provider.
Only scheduled and queued messages are cancelable — anything later returns
a 409, since delivery once started isn’t reversible. Mirrors
DELETE /v1/messages/{id}.
Public message id, e.g.
"msg_…".Errors
Tool failures come back as MCP errors with a single text message. The shape:- Validation —
invalid_request: <field> <message>. A missing required field, wrong type, or invalid ISO timestamp. - Domain —
<code>: <message>from the underlying API. e.g.template_not_found: No template "welcom",rate_limited: Too many requests. - Auth —
unauthorizedon a missing or invalid API key. - Permission —
insufficient_scopewhen the key is valid but doesn’t hold the scope required by the called tool. See Authentication → Scopes.
code /
message pair, so anything in the API troubleshooting guide applies here too.
Sending
How a send becomes a delivered message.
Messages
The lifecycle behind every tool response.
API Reference
The REST surface backing these tools.
Installation
Connect a client and start calling tools.