send-transactional
Skill3 starsChanged 7 months agoMITView on GitHub
Send transactional emails or SMS for app-triggered communications: receipts, password resets, OTPs, order confirmations, shipping notifications, system alerts. Single recipient, immediate delivery, no campaign or approval needed. Use when: "transactional email", "receipt email", "password reset email", "send notification email", "order confirmation", "OTP email", or "system email".
In this repository6 other files it gives its agents.
- build-flowSkill
- compose-emailSkill
- import-contactsSkill
- nitrosend-analyticsSkill
- nitrosend-setupSkill
- send-campaignSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 38
Create a template with nitro_manage_template via the composition contract (composition_mode: "intent" → fill the returned next_call → …
- Very specific: line 48
Use the data field for personalization:
- Very specific: line 67
Do not model transactional sends as MCP flows.
- Very specific: line 104
Always offer to do a dry run first: nitro_send_message or POST /v1/my/messages with dry_run: true validates without sending.
- Distinctive: line 109
Every live send must have a stable idempotency key.
- Very specific: line 117
Before the first live email, inspect brand_subdomain in nitro_get_status.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Send Transactional
Help the user send or set up transactional emails/SMS — immediate, single-recipient messages triggered by application events.
Understand the Use Case
Common transactional email types:
- Password reset: OTP or magic link
- Order confirmation: Receipt with order details
- Shipping notification: Tracking info
- Welcome/verification: Account activation
- System alert: Service status, security notice
- Invoice/receipt: Payment confirmation
Design Approach
Quick Send (Plain Text)
For a one-off send from Claude over MCP, use nitro_send_message:
channel: "email"
to: "user@example.com"
subject: "Your order #1234 is confirmed"
body: "Thank you for your order..."Branded Template
For on-brand transactional emails:
- Create a template with
nitro_manage_templatevia the composition contract (composition_mode: "intent"→ fill the returnednext_call→ persist withcomposition_mode: "draft"; see the compose-email skill) - For a one-off MCP send, call
nitro_send_messagewithtemplate_id - For application-triggered production sends, wire
POST /v1/my/messagesorns.messages.sendusingtemplate_id
Live sends require an idempotency_key — reuse the same stable key on retry to
prevent duplicate delivery.
Merge Variables
Use the data field for personalization:
data: { order_id: "1234", customer: { name: "Alice" }, amount: "$49.99" }Reference in templates/body as {{ data.order_id }}, {{ data.amount }}, or
nested paths like {{ data.customer.name }}.
Key Differences from Marketing Email
| Marketing | Transactional | |
| Audience | Lists/segments | Single recipient |
| Requires subscription | Yes | No |
| CAN-SPAM footer | Required | Skipped |
| Unsubscribe link | Required | Not needed |
| Delivery | Campaign workflow | Immediate |
| Tracking | Opens/clicks tracked | Opens/clicks tracked (engagement tracking stays enabled) |
Do not model transactional sends as MCP flows. Use nitro_send_message for one-off MCP sends, normal flow email steps for lifecycle automation, and API/SDK transactional sends for application events.
For Developers
Help developers integrate transactional emails into their apps:
API Integration
POST https://api.nitrosend.com/v1/my/messages
Authorization: Bearer nskey_live_...
Idempotency-Key: verification-user-123-attempt-1
Content-Type: application/json
{
"channel": "email",
"to": "user@example.com",
"subject": "Your verification code",
"body": "Your code is: 123456",
"data": { "code": "123456" }
}SDK Integration
import { Nitrosend } from '@nitrosend/sdk'
const ns = new Nitrosend('nskey_live_...')
await ns.messages.send({
channel: 'email',
to: 'user@example.com',
subject: 'Your verification code',
template_id: 42,
data: { code: '123456' }
}, 'verification-user-123-attempt-1')Dry Run
Always offer to do a dry run first:
nitro_send_message or POST /v1/my/messages with dry_run: true validates without sending.
Idempotency
Every live send must have a stable idempotency key. Reuse it only for an exact
retry of the same recipient and payload; use a new key for a different logical
message. MCP uses idempotency_key, the REST API uses the Idempotency-Key
header, and the Node SDK accepts the key as the second argument to
messages.send.
Nitrosend Sender Readiness
Before the first live email, inspect brand_subdomain in
nitro_get_status. If preparation is required, use
nitro_manage_domains(operation: "prepare_brand_subdomain"), poll until it
is ready, then select it explicitly. A first authenticated send may return
sender_identity_provisioning; that response is retryable, but no message was
stored or queued. Retry with the same idempotency key only after readiness and
selection.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

