nitro
v1.0.0https://api.nitrosend.com/mcpMulti-channel marketing automation platform. Use nitro_get_status first to understand account state. Read nitro://guide for vocabulary and workflow.
Add to your MCP client configuration:
Tools
nitro_get_status
read-onlyidempotentGet current account health, onboarding status, and recommendations.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_get_status",
"arguments": {}
}
}const result = await client.callTool("nitro_get_status", {});result = await session.call_tool("nitro_get_status", arguments={}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_query
read-onlyidempotentQuery any Nitrosend entity. Returns paginated results.
Parameters
entitystringflowscampaignstemplatessegmentscontactslistseventsimportsmessagesrequiredargumentWhich entity type to query. Use nitro_search_contacts for full-text contact search.
filtersobjectargumentEntity-specific filters. All entities support id (integer) to fetch a single record.
- flows — status (draft/active/paused/archived), campaign_id (integer|null), trigger_event (string), search (string)
- campaigns — status (draft/active/paused/completed), search (string)
- templates — subject (string, ILIKE match on subject line)
- segments — name (string, ILIKE match)
- contacts — query (string, full-text search), subscribed_email (boolean), subscribed_phone (boolean), list_id (integer)
- lists — name (string, ILIKE match)
- events — name (string, exact event type), from (ISO 8601 datetime), to (ISO 8601 datetime)
- imports — status (pending/processing/completed/failed)
- messages — channel (email/sms), status (queued/sent/failed), to (string, recipient address)
pageintegerargumentPage number (default 1)
perintegerargumentResults per page (max 50, default 25)
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_query",
"arguments": {
"entity": "flows",
"filters": {},
"page": 0,
"per": 0
}
}
}const result = await client.callTool("nitro_query", {
"entity": "flows",
"filters": {},
"page": 0,
"per": 0
});result = await session.call_tool("nitro_query", arguments={
"entity": "flows",
"filters": {},
"page": 0,
"per": 0
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_search_contacts
read-onlyidempotentSearch contacts by email, name, or phone. Returns summary list or full profile.
Parameters
querystringrequiredargumentEmail address, name, or phone number
modestringsummaryprofileargumentsummary = list, profile = single contact detail (default: summary)
pageintegerargumentPage number (default 1)
perintegerargumentResults per page (max 50, default 25)
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_search_contacts",
"arguments": {
"query": "string",
"mode": "summary",
"page": 0,
"per": 0
}
}
}const result = await client.callTool("nitro_search_contacts", {
"query": "string",
"mode": "summary",
"page": 0,
"per": 0
});result = await session.call_tool("nitro_search_contacts", arguments={
"query": "string",
"mode": "summary",
"page": 0,
"per": 0
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_set_brand
idempotentopen-worldSet up brand identity from website URL or direct fields. Provide url to auto-scrape brand colors/fonts, or fields to set values directly, or both (fields override scraped values). Sync mode (default) returns results immediately — best when you need brand data now for composing. Async mode (mode: 'async') runs scraping in the background — use when deferred completion is acceptable.
Body
urlstringWebsite URL to scrape brand from
logo_urlstringDirect URL to a logo image (png/jpg/webp/svg) to attach — SVGs are auto-converted to PNG
fieldsobjectDirect brand field updates
documentstringFull brand voice markdown document
dry_runbooleanfalsePreview changes without persisting
modestringsyncasyncsyncsync (default) or async for URL scraping
idempotency_keystringOptional dedup key
Parameters
urlstringargumentWebsite URL to scrape brand from
logo_urlstringargumentDirect URL to a logo image (png/jpg/webp/svg) to attach — SVGs are auto-converted to PNG
fieldsobjectargumentDirect brand field updates
documentstringargumentFull brand voice markdown document
dry_runbooleanfalseargumentPreview changes without persisting
modestringsyncasyncsyncargumentsync (default) or async for URL scraping
idempotency_keystringargumentOptional dedup key
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_set_brand",
"arguments": {
"url": "string",
"logo_url": "string",
"fields": {
"company_name": "string",
"company_description": "string",
"brand_color": "string",
"text_color": "string",
"bg_color": "string",
"font_heading": "string",
"font_body": "string",
"physical_address": "string"
},
"document": "string",
"dry_run": false,
"mode": "sync",
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_set_brand", {
"url": "string",
"logo_url": "string",
"fields": {
"company_name": "string",
"company_description": "string",
"brand_color": "string",
"text_color": "string",
"bg_color": "string",
"font_heading": "string",
"font_body": "string",
"physical_address": "string"
},
"document": "string",
"dry_run": false,
"mode": "sync",
"idempotency_key": "string"
});result = await session.call_tool("nitro_set_brand", arguments={
"url": "string",
"logo_url": "string",
"fields": {
"company_name": "string",
"company_description": "string",
"brand_color": "string",
"text_color": "string",
"bg_color": "string",
"font_heading": "string",
"font_body": "string",
"physical_address": "string"
},
"document": "string",
"dry_run": false,
"mode": "sync",
"idempotency_key": "string"
}){
"url": "string",
"logo_url": "string",
"fields": {
"company_name": "string",
"company_description": "string",
"brand_color": "string",
"text_color": "string",
"bg_color": "string",
"font_heading": "string",
"font_body": "string",
"physical_address": "string"
},
"document": "string",
"dry_run": false,
"mode": "sync",
"idempotency_key": "string"
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_manage_audience
destructiveCreate contacts, manage subscriptions, lists, events, segments, and tags.
Parameters
operationstringcreate_contactset_subscriptionmanage_listrecord_eventdelete_segmentbulk_tagrequiredargumentWhich audience operation to perform. Each operation expects specific params:
- create_contact — params: {email (string), phone (string), opt_in (boolean, recommended: true), attributes: {first_name, last_name, country_code, source}}
- set_subscription — params: {contact_id (required), kind: "email"|"phone" (required), opt_in (boolean), opt_out (boolean), unsubscribe_all (boolean)}. Value auto-resolved from contact.
- manage_list — params: {action: "create"|"rename"|"delete"|"add_contacts"|"remove_contacts" (required), list_id (integer), name (string), contact_ids (integer[]) or emails (string[])}
- record_event — params: {contact_id or contact_email (one required), event (required, custom names allowed e.g. order_confirmed), data (object, max 32KB), resource_uid, resource_name, resource_url, amount}
- delete_segment — params: {segment_id (required), force (boolean)}. Requires confirm: true.
- bulk_tag — params: {contact_ids (integer[], required), tags (string[], required), tag_action: "add"|"remove"|"set" (default: "add")}
paramsobjectrequiredargumentOperation-specific parameters. See operation description for required/optional fields.
dry_runbooleanfalseargumentPreview changes without persisting (default: false)
confirmbooleanfalseargumentRequired for destructive operations: delete_segment, manage_list with action='delete'
idempotency_keystringargumentOptional deduplication key. Same key returns cached result.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_manage_audience",
"arguments": {
"operation": "create_contact",
"params": {},
"dry_run": false,
"confirm": false,
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_manage_audience", {
"operation": "create_contact",
"params": {},
"dry_run": false,
"confirm": false,
"idempotency_key": "string"
});result = await session.call_tool("nitro_manage_audience", arguments={
"operation": "create_contact",
"params": {},
"dry_run": false,
"confirm": false,
"idempotency_key": "string"
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_define_segment
idempotentDefine a contact segment with explicit filters and preview. Defaults to preview_only: true (dry preview without saving). Set preview_only: false and provide a name to persist.
Body
namestringSegment name (required when preview_only: false)
filtersArray<object>requiredArray of filter objects. Each filter has:
- name — filter alias from flows.yml (e.g. "contact_email", "contact_first_name", "contact_country", "contact_subscribed_email", "contact_created_at", "contact_tag")
- predicate — Ransack predicate — eq, not_eq, cont, not_cont, start, end, gt, lt, gteq, lteq, present, blank, true, false, in, not_in
- value — filter value (string, number, boolean, or array for in/not_in). For present/blank/true/false predicates, pass true.
segment_idintegerExisting segment ID to update (omit for new segment)
preview_onlybooleantrueOnly preview matching contacts, do not save (default: true). Set to false + provide name to persist.
idempotency_keystringOptional deduplication key
Parameters
namestringargumentSegment name (required when preview_only: false)
filtersArray<object>requiredargumentArray of filter objects. Each filter has:
- name — filter alias from flows.yml (e.g. "contact_email", "contact_first_name", "contact_country", "contact_subscribed_email", "contact_created_at", "contact_tag")
- predicate — Ransack predicate — eq, not_eq, cont, not_cont, start, end, gt, lt, gteq, lteq, present, blank, true, false, in, not_in
- value — filter value (string, number, boolean, or array for in/not_in). For present/blank/true/false predicates, pass true.
segment_idintegerargumentExisting segment ID to update (omit for new segment)
preview_onlybooleantrueargumentOnly preview matching contacts, do not save (default: true). Set to false + provide name to persist.
idempotency_keystringargumentOptional deduplication key
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_define_segment",
"arguments": {
"name": "string",
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"segment_id": 0,
"preview_only": true,
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_define_segment", {
"name": "string",
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"segment_id": 0,
"preview_only": true,
"idempotency_key": "string"
});result = await session.call_tool("nitro_define_segment", arguments={
"name": "string",
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"segment_id": 0,
"preview_only": true,
"idempotency_key": "string"
}){
"name": "string",
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"segment_id": 0,
"preview_only": true,
"idempotency_key": "string"
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_import_contacts
Import contacts from inline records (< 100) or reference a pre-uploaded CSV import. Email contacts are auto-subscribed by default. For SMS-only contacts, set opt_in: true explicitly (TCPA compliance).
Body
recordsArray<object>Array of contact objects (max 100): {email, phone, first_name, last_name, country_code, source, opt_in}
import_idintegerExisting Import record ID for CSV processing
dry_runbooleanfalsePreview import without persisting (default: false)
idempotency_keystringOptional deduplication key
Parameters
recordsArray<object>argumentArray of contact objects (max 100): {email, phone, first_name, last_name, country_code, source, opt_in}
import_idintegerargumentExisting Import record ID for CSV processing
dry_runbooleanfalseargumentPreview import without persisting (default: false)
idempotency_keystringargumentOptional deduplication key
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_import_contacts",
"arguments": {
"records": [
{
"email": "string",
"phone": "string",
"first_name": "string",
"last_name": "string",
"country_code": "string",
"source": "string",
"opt_in": true
}
],
"import_id": 0,
"dry_run": false,
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_import_contacts", {
"records": [
{
"email": "string",
"phone": "string",
"first_name": "string",
"last_name": "string",
"country_code": "string",
"source": "string",
"opt_in": true
}
],
"import_id": 0,
"dry_run": false,
"idempotency_key": "string"
});result = await session.call_tool("nitro_import_contacts", arguments={
"records": [
{
"email": "string",
"phone": "string",
"first_name": "string",
"last_name": "string",
"country_code": "string",
"source": "string",
"opt_in": true
}
],
"import_id": 0,
"dry_run": false,
"idempotency_key": "string"
}){
"records": [
{
"email": "string",
"phone": "string",
"first_name": "string",
"last_name": "string",
"country_code": "string",
"source": "string",
"opt_in": true
}
],
"import_id": 0,
"dry_run": false,
"idempotency_key": "string"
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_manage_template
Create, update, or clone a reusable email template. Brand theme applied automatically. For composing new emails to send, use nitro_compose_campaign instead.
Modes (auto-detected):
- Create — provide sections + subject (required). Sections define the email layout.
- Update — provide template_id + any fields to change. Use if_version for optimistic concurrency.
- Clone — provide based_on (source template_id). Optionally override sections/subject/name.
Retry safety: pass the same idempotency_key on retry to avoid duplicate templates.
Body
sectionsArray<object>Array of section objects: {type, props, styles?}. Read nitro://schema for full prop specs.
Section types and key props:
- header — {logo_url, logo_alt, logo_width, background_color}
- text — {content (HTML string)}
- image — {src, alt, href, width}
- button — {text, href, background_color, text_color, align, border_radius}
- columns — {columns: [{width, sections: [...]}]} — nested sections inside columns
- product — {name, price, image_url, href, description}
- social — {links: [{platform, url}], align}
- divider — {color, width, padding}
- spacer — {height}
- footer — {company_name, address, unsubscribe_text}
subjectstringEmail subject line (recommended under 60 chars)
namestringTemplate display name
preheaderstringEmail preheader text shown in inbox preview
from_namestringSender name (falls back to account default)
from_emailstringSender email (falls back to account default)
reply_tostringReply-to email address
themeobjectTheme overrides merged on top of brand theme. Keys: brand_color (hex), bg_color (hex), text_color (hex), font_body (string), font_heading (string), logo_url (URL)
template_idintegerTemplate ID for update mode — provide with fields to change
based_onintegerSource template ID for clone mode — creates a copy
if_versionintegerOptimistic concurrency — rejects update if template version mismatches
goalstringGoal-driven composition (Phase 5 — not yet available)
dry_runbooleanfalseValidate and preview without persisting
idempotency_keystringDedup key — same key returns cached result
Parameters
sectionsArray<object>argumentArray of section objects: {type, props, styles?}. Read nitro://schema for full prop specs.
Section types and key props:
- header — {logo_url, logo_alt, logo_width, background_color}
- text — {content (HTML string)}
- image — {src, alt, href, width}
- button — {text, href, background_color, text_color, align, border_radius}
- columns — {columns: [{width, sections: [...]}]} — nested sections inside columns
- product — {name, price, image_url, href, description}
- social — {links: [{platform, url}], align}
- divider — {color, width, padding}
- spacer — {height}
- footer — {company_name, address, unsubscribe_text}
subjectstringargumentEmail subject line (recommended under 60 chars)
namestringargumentTemplate display name
preheaderstringargumentEmail preheader text shown in inbox preview
from_namestringargumentSender name (falls back to account default)
from_emailstringargumentSender email (falls back to account default)
reply_tostringargumentReply-to email address
themeobjectargumentTheme overrides merged on top of brand theme. Keys: brand_color (hex), bg_color (hex), text_color (hex), font_body (string), font_heading (string), logo_url (URL)
template_idintegerargumentTemplate ID for update mode — provide with fields to change
based_onintegerargumentSource template ID for clone mode — creates a copy
if_versionintegerargumentOptimistic concurrency — rejects update if template version mismatches
goalstringargumentGoal-driven composition (Phase 5 — not yet available)
dry_runbooleanfalseargumentValidate and preview without persisting
idempotency_keystringargumentDedup key — same key returns cached result
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_manage_template",
"arguments": {
"sections": [
{}
],
"subject": "string",
"name": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"theme": {},
"template_id": 0,
"based_on": 0,
"if_version": 0,
"goal": "string",
"dry_run": false,
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_manage_template", {
"sections": [
{}
],
"subject": "string",
"name": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"theme": {},
"template_id": 0,
"based_on": 0,
"if_version": 0,
"goal": "string",
"dry_run": false,
"idempotency_key": "string"
});result = await session.call_tool("nitro_manage_template", arguments={
"sections": [
{}
],
"subject": "string",
"name": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"theme": {},
"template_id": 0,
"based_on": 0,
"if_version": 0,
"goal": "string",
"dry_run": false,
"idempotency_key": "string"
}){
"sections": [
{}
],
"subject": "string",
"name": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"theme": {},
"template_id": 0,
"based_on": 0,
"if_version": 0,
"goal": "string",
"dry_run": false,
"idempotency_key": "string"
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_compose_flow
destructiveCreate or replace an automation flow from trigger + steps array. Creates a draft — use nitro_control_delivery to approve and activate.
Modes: create (new flow), replace (rebuild existing — requires confirm: true + flow_id), patch (rename only — requires flow_id). Step types: email (subject + design or body), sms (body), wait (duration in seconds), split (filters + yes/no branches, no nesting), emit_event (fire event for contact to trigger other flows), webhook (url + optional method/headers/body), subscribe (opt-in contact to channel), unsubscribe (opt-out contact from channel).
Retry safety: pass the same idempotency_key on retry to avoid duplicate flows.
Body
namestringrequiredFlow name (required for create mode)
modestringcreatereplacepatchcreatecreate: new flow; replace: rebuild existing flow graph; patch: metadata only
flow_idintegerRequired for replace/patch modes
goalstringGoal string for AI generation (Phase 5C — feature gated)
triggerobjectrequiredstepsArray<object>requiredOrdered array of flow steps. Required props per type:
- email — subject (required), design ({sections, theme}) or body, preheader, from_name, from_email, reply_to, transactional (boolean), bcc (string, optional BCC email address)
- sms — body (required)
- wait — duration (integer, seconds — e.g. 86400 = 1 day)
- split — filters (required, [{name, predicate, value}]), yes (steps array), no (steps array). NO nested splits.
- emit_event — event_name (required), event_data (object), forward_event_data (boolean)
- webhook — url (required), method (POST or PUT, default POST), headers (object), body (template string with merge tags)
- subscribe — channel (phone, email, or all — default phone). Subscribes the contact.
- unsubscribe — channel (phone, email, or all — default phone). Unsubscribes the contact.
dry_runbooleanfalsePreview graph without persisting
idempotency_keystringDeduplication key for retry safety
confirmbooleanfalseRequired for replace mode
Parameters
namestringrequiredargumentFlow name (required for create mode)
modestringcreatereplacepatchcreateargumentcreate: new flow; replace: rebuild existing flow graph; patch: metadata only
flow_idintegerargumentRequired for replace/patch modes
goalstringargumentGoal string for AI generation (Phase 5C — feature gated)
triggerobjectrequiredargumentstepsArray<object>requiredargumentOrdered array of flow steps. Required props per type:
- email — subject (required), design ({sections, theme}) or body, preheader, from_name, from_email, reply_to, transactional (boolean), bcc (string, optional BCC email address)
- sms — body (required)
- wait — duration (integer, seconds — e.g. 86400 = 1 day)
- split — filters (required, [{name, predicate, value}]), yes (steps array), no (steps array). NO nested splits.
- emit_event — event_name (required), event_data (object), forward_event_data (boolean)
- webhook — url (required), method (POST or PUT, default POST), headers (object), body (template string with merge tags)
- subscribe — channel (phone, email, or all — default phone). Subscribes the contact.
- unsubscribe — channel (phone, email, or all — default phone). Unsubscribes the contact.
dry_runbooleanfalseargumentPreview graph without persisting
idempotency_keystringargumentDeduplication key for retry safety
confirmbooleanfalseargumentRequired for replace mode
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_compose_flow",
"arguments": {
"name": "string",
"mode": "create",
"flow_id": 0,
"goal": "string",
"trigger": {
"event": "string",
"segment_id": 0,
"contact_list_id": 0,
"data": {}
},
"steps": [
{
"type": "email",
"subject": "string",
"body": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"design": {},
"transactional": false,
"bcc": "string",
"duration": 0,
"event_name": "string",
"event_data": {},
"forward_event_data": false,
"url": "string",
"method": "POST",
"headers": {},
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"yes": [
{}
],
"no": [
{}
],
"channel": "phone"
}
],
"dry_run": false,
"idempotency_key": "string",
"confirm": false
}
}
}const result = await client.callTool("nitro_compose_flow", {
"name": "string",
"mode": "create",
"flow_id": 0,
"goal": "string",
"trigger": {
"event": "string",
"segment_id": 0,
"contact_list_id": 0,
"data": {}
},
"steps": [
{
"type": "email",
"subject": "string",
"body": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"design": {},
"transactional": false,
"bcc": "string",
"duration": 0,
"event_name": "string",
"event_data": {},
"forward_event_data": false,
"url": "string",
"method": "POST",
"headers": {},
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"yes": [
{}
],
"no": [
{}
],
"channel": "phone"
}
],
"dry_run": false,
"idempotency_key": "string",
"confirm": false
});result = await session.call_tool("nitro_compose_flow", arguments={
"name": "string",
"mode": "create",
"flow_id": 0,
"goal": "string",
"trigger": {
"event": "string",
"segment_id": 0,
"contact_list_id": 0,
"data": {}
},
"steps": [
{
"type": "email",
"subject": "string",
"body": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"design": {},
"transactional": false,
"bcc": "string",
"duration": 0,
"event_name": "string",
"event_data": {},
"forward_event_data": false,
"url": "string",
"method": "POST",
"headers": {},
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"yes": [
{}
],
"no": [
{}
],
"channel": "phone"
}
],
"dry_run": false,
"idempotency_key": "string",
"confirm": false
}){
"name": "string",
"mode": "create",
"flow_id": 0,
"goal": "string",
"trigger": {
"event": "string",
"segment_id": 0,
"contact_list_id": 0,
"data": {}
},
"steps": [
{
"type": "email",
"subject": "string",
"body": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"design": {},
"transactional": false,
"bcc": "string",
"duration": 0,
"event_name": "string",
"event_data": {},
"forward_event_data": false,
"url": "string",
"method": "POST",
"headers": {},
"filters": [
{
"name": "contact_first_name",
"predicate": "eq"
}
],
"yes": [
{}
],
"no": [
{}
],
"channel": "phone"
}
],
"dry_run": false,
"idempotency_key": "string",
"confirm": false
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_compose_campaign
destructiveCompose and send an email or SMS to an audience. This is the default tool when users want to draft, write, or send an email. Creates a draft — use nitro_control_delivery to approve and send.
Email modes (channel auto-detected as "email" when sections or template_id provided):
- Inline — sections + subject (required) — compose email design directly
- Clone — template_id — clone design from existing template, optionally override subject
- Plain text — body + subject — simple text email without design
SMS mode: channel: "sms" + body (required)
Retry safety: pass the same idempotency_key on retry to avoid duplicate campaigns.
Body
namestringrequiredCampaign name
channelstringemailsmsemailAuto-detected as 'email' when sections or template_id provided. Set explicitly to 'sms' for SMS campaigns.
goalstringGoal string for AI generation (Phase 5C — feature gated)
subjectstringEmail subject line (email campaigns)
preheaderstringEmail preheader (email campaigns)
from_namestringSender name override
from_emailstringSender email override
reply_tostringReply-to email override
bodystringSMS body text (sms campaigns) or email plain text
sectionsArray<object>Email design sections array — same format as nitro_manage_template. Requires subject.
themeobjectEmail theme overrides merged on brand theme: {brand_color, bg_color, text_color, font_body, font_heading, logo_url}
template_idintegerClone design from existing template (email campaigns)
audienceobjectTarget audience for the campaign. Use audience_type='all_contacts' only for an explicit all-subscribed-contacts send.
scheduled_atstring<date-time>ISO 8601 delivery time (e.g. '2026-03-01T10:00:00Z'). Omit for manual send.
dry_runbooleanfalsePreview campaign without creating (default: false)
idempotency_keystringOptional deduplication key
Parameters
namestringrequiredargumentCampaign name
channelstringemailsmsemailargumentAuto-detected as 'email' when sections or template_id provided. Set explicitly to 'sms' for SMS campaigns.
goalstringargumentGoal string for AI generation (Phase 5C — feature gated)
subjectstringargumentEmail subject line (email campaigns)
preheaderstringargumentEmail preheader (email campaigns)
from_namestringargumentSender name override
from_emailstringargumentSender email override
reply_tostringargumentReply-to email override
bodystringargumentSMS body text (sms campaigns) or email plain text
sectionsArray<object>argumentEmail design sections array — same format as nitro_manage_template. Requires subject.
themeobjectargumentEmail theme overrides merged on brand theme: {brand_color, bg_color, text_color, font_body, font_heading, logo_url}
template_idintegerargumentClone design from existing template (email campaigns)
audienceobjectargumentTarget audience for the campaign. Use audience_type='all_contacts' only for an explicit all-subscribed-contacts send.
scheduled_atstring<date-time>argumentISO 8601 delivery time (e.g. '2026-03-01T10:00:00Z'). Omit for manual send.
dry_runbooleanfalseargumentPreview campaign without creating (default: false)
idempotency_keystringargumentOptional deduplication key
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_compose_campaign",
"arguments": {
"name": "string",
"channel": "email",
"goal": "string",
"subject": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"body": "string",
"sections": [
{}
],
"theme": {},
"template_id": 0,
"audience": {
"audience_type": "lists",
"contact_list_ids": [
0
],
"contact_list_id": 0,
"segment_id": 0
},
"scheduled_at": "2024-01-15T09:30:00Z",
"dry_run": false,
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_compose_campaign", {
"name": "string",
"channel": "email",
"goal": "string",
"subject": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"body": "string",
"sections": [
{}
],
"theme": {},
"template_id": 0,
"audience": {
"audience_type": "lists",
"contact_list_ids": [
0
],
"contact_list_id": 0,
"segment_id": 0
},
"scheduled_at": "2024-01-15T09:30:00Z",
"dry_run": false,
"idempotency_key": "string"
});result = await session.call_tool("nitro_compose_campaign", arguments={
"name": "string",
"channel": "email",
"goal": "string",
"subject": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"body": "string",
"sections": [
{}
],
"theme": {},
"template_id": 0,
"audience": {
"audience_type": "lists",
"contact_list_ids": [
0
],
"contact_list_id": 0,
"segment_id": 0
},
"scheduled_at": "2024-01-15T09:30:00Z",
"dry_run": false,
"idempotency_key": "string"
}){
"name": "string",
"channel": "email",
"goal": "string",
"subject": "string",
"preheader": "string",
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"body": "string",
"sections": [
{}
],
"theme": {},
"template_id": 0,
"audience": {
"audience_type": "lists",
"contact_list_ids": [
0
],
"contact_list_id": 0,
"segment_id": 0
},
"scheduled_at": "2024-01-15T09:30:00Z",
"dry_run": false,
"idempotency_key": "string"
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_manage_domains
destructiveopen-worldManage sending domains — add, verify, check DNS, list, and remove. Add returns the core DNS records needed to finish setup plus any optional improvements such as tracking or inbound routing. check_dns validates both the customer-facing records and the Nitro-owned delegate targets behind them. Managed SES uses Nitro-branded MX indirection, while BYO providers return their own receiving records.
Body
operationstringaddverifycheck_dnslistremoverequiredWhich domain operation to perform:
- add — params: {domain_name (required, e.g. "send.acme.com")}. Registers domain with email provider and returns DNS records. The user must add these DNS records at their domain registrar. Idempotent: calling add on a pending domain re-returns the DNS records.
- verify — params: {domain_name (required)}. Checks with the email provider if the core DNS records have propagated. Also runs independent DNS validation and returns per-record dns_health. Optional records like tracking are reported separately and do not block completion. If verified, completes the domain_verified onboarding step and unlocks sending. If still pending, returns the DNS records again so you can re-show them to the user.
- check_dns — params: {domain_name (required)}. Runs independent DNS validation only. Does not call the email provider. Useful for diagnosing missing or incorrect customer-facing records and Nitro-managed delegate targets before verify. Optional improvements are surfaced without blocking setup completion.
- list — no params needed. Returns all account domains with their verification status and DNS records. Includes dns_health, dmarc_policy, domain_limit (from tier), and domains_used count.
- remove — params: {domain_name (required)}. Deletes the domain. Requires confirm: true.
paramsobjectOperation-specific parameters.
confirmbooleanfalseRequired for remove operation (destructive)
Parameters
operationstringaddverifycheck_dnslistremoverequiredargumentWhich domain operation to perform:
- add — params: {domain_name (required, e.g. "send.acme.com")}. Registers domain with email provider and returns DNS records. The user must add these DNS records at their domain registrar. Idempotent: calling add on a pending domain re-returns the DNS records.
- verify — params: {domain_name (required)}. Checks with the email provider if the core DNS records have propagated. Also runs independent DNS validation and returns per-record dns_health. Optional records like tracking are reported separately and do not block completion. If verified, completes the domain_verified onboarding step and unlocks sending. If still pending, returns the DNS records again so you can re-show them to the user.
- check_dns — params: {domain_name (required)}. Runs independent DNS validation only. Does not call the email provider. Useful for diagnosing missing or incorrect customer-facing records and Nitro-managed delegate targets before verify. Optional improvements are surfaced without blocking setup completion.
- list — no params needed. Returns all account domains with their verification status and DNS records. Includes dns_health, dmarc_policy, domain_limit (from tier), and domains_used count.
- remove — params: {domain_name (required)}. Deletes the domain. Requires confirm: true.
paramsobjectargumentOperation-specific parameters.
confirmbooleanfalseargumentRequired for remove operation (destructive)
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_manage_domains",
"arguments": {
"operation": "add",
"params": {
"domain_name": "string"
},
"confirm": false
}
}
}const result = await client.callTool("nitro_manage_domains", {
"operation": "add",
"params": {
"domain_name": "string"
},
"confirm": false
});result = await session.call_tool("nitro_manage_domains", arguments={
"operation": "add",
"params": {
"domain_name": "string"
},
"confirm": false
}){
"operation": "add",
"params": {
"domain_name": "string"
},
"confirm": false
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_configure_account
idempotentConfigure account sender defaults (from_name, from_email, reply_to) and test email recipients. Call with no fields to read current config. from_email must match a verified domain.
Parameters
from_namestringargumentSender display name (e.g. 'Acme Marketing')
from_emailstringargumentSender email address (must match a verified domain)
reply_tostringargumentReply-to email address
test_email_recipientsArray<string>argumentSaved email addresses for test sends (max 5). Pass empty array to clear.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_configure_account",
"arguments": {
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"test_email_recipients": [
"user@example.com"
]
}
}
}const result = await client.callTool("nitro_configure_account", {
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"test_email_recipients": [
"user@example.com"
]
});result = await session.call_tool("nitro_configure_account", arguments={
"from_name": "string",
"from_email": "string",
"reply_to": "string",
"test_email_recipients": [
"user@example.com"
]
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_review_delivery
read-onlyidempotentRead-only review of email/SMS content and delivery readiness for templates, flows, and campaigns. Returns validation, spam score for email, SMS segment info, preflight checks, and editor/preview URLs. This never approves delivery and never sends test messages.
Parameters
target_typestringtemplateflowcampaignrequiredargumentEntity type to review
target_idintegerrequiredargumentEntity ID to review
contact_idintegerargumentOptional contact ID for merge-tag personalization during review
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_review_delivery",
"arguments": {
"target_type": "template",
"target_id": 1,
"contact_id": 1
}
}
}const result = await client.callTool("nitro_review_delivery", {
"target_type": "template",
"target_id": 1,
"contact_id": 1
});result = await session.call_tool("nitro_review_delivery", arguments={
"target_type": "template",
"target_id": 1,
"contact_id": 1
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_send_test_message
open-worldSend a real test message for an existing template, campaign, or flow step. Supports email and SMS targets. This never sends to a campaign audience, never approves delivery, and never schedules or launches a campaign. For the common "send a test of the last campaign" workflow, pass latest_campaign: true. If a flow has multiple message steps, pass action_id or template_id from nitro_review_delivery review_steps. Retry safety: pass the same idempotency_key on retry to avoid duplicate test messages.
Parameters
target_typestringtemplateflowcampaignargumentTarget entity type. Use with target_id unless latest_campaign or template_id is used.
target_idintegerargumentTarget entity ID. Use with target_type.
latest_campaignbooleanfalseargumentUse the most recently created campaign in this brand.
template_idintegerargumentTemplate to test directly, or the specific flow/campaign template to choose.
action_idintegerargumentFlow action ID to test when a flow has multiple message steps.
channelstringautoemailsmsautoargumentChannel to test. Use auto unless a standalone template is ambiguous.
contact_idintegerargumentContact ID for recipient and merge-tag personalization. If present, this contact supplies the recipient address/phone.
toArray<string>argumentExplicit test recipients. Use email addresses for email targets and E.164 phone numbers for SMS targets.
dry_runbooleanfalseargumentValidate target and recipients without sending.
idempotency_keystringargumentOptional deduplication key for retry safety.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_send_test_message",
"arguments": {
"target_type": "template",
"target_id": 1,
"latest_campaign": false,
"template_id": 1,
"action_id": 1,
"channel": "auto",
"contact_id": 1,
"to": [
"string"
],
"dry_run": false,
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_send_test_message", {
"target_type": "template",
"target_id": 1,
"latest_campaign": false,
"template_id": 1,
"action_id": 1,
"channel": "auto",
"contact_id": 1,
"to": [
"string"
],
"dry_run": false,
"idempotency_key": "string"
});result = await session.call_tool("nitro_send_test_message", arguments={
"target_type": "template",
"target_id": 1,
"latest_campaign": false,
"template_id": 1,
"action_id": 1,
"channel": "auto",
"contact_id": 1,
"to": [
"string"
],
"dry_run": false,
"idempotency_key": "string"
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_control_delivery
destructiveopen-worldManage delivery lifecycle for flows and campaigns. State: draft -> approve -> live/schedule <> pause, cancel -> archive.
Parameters
target_typestringflowcampaignrequiredargumentEntity type
target_idintegerrequiredargumentEntity ID
operationstringapproverejectliveschedulepauseresumecancelarchiverestorerequiredargumentLifecycle operation. approve runs preflight. schedule is campaign-only (requires scheduled_at). Most require prior approval.
scheduled_atstring<date-time>argumentRequired for schedule operation (ISO 8601 datetime)
confirm_send_to_allbooleanargumentRequired when making a campaign live or scheduled with audience_type='all_contacts'. Forces an explicit all-subscribed-contacts confirmation.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_control_delivery",
"arguments": {
"target_type": "flow",
"target_id": 1,
"operation": "approve",
"scheduled_at": "2024-01-15T09:30:00Z",
"confirm_send_to_all": true
}
}
}const result = await client.callTool("nitro_control_delivery", {
"target_type": "flow",
"target_id": 1,
"operation": "approve",
"scheduled_at": "2024-01-15T09:30:00Z",
"confirm_send_to_all": true
});result = await session.call_tool("nitro_control_delivery", arguments={
"target_type": "flow",
"target_id": 1,
"operation": "approve",
"scheduled_at": "2024-01-15T09:30:00Z",
"confirm_send_to_all": true
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_get_insights
read-onlyidempotentGet email analytics with trends, benchmarks, and recommendations.
Parameters
scopestringaccountflowcampaignmessagerequiredargumentScope of insights: account-wide, per flow, per campaign, or per message
entity_idintegerargumentRequired for flow/campaign/message scope
periodstring7d30d90d30dargumentTime period for metrics (default 30d)
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_get_insights",
"arguments": {
"scope": "account",
"entity_id": 1,
"period": "30d"
}
}
}const result = await client.callTool("nitro_get_insights", {
"scope": "account",
"entity_id": 1,
"period": "30d"
});result = await session.call_tool("nitro_get_insights", arguments={
"scope": "account",
"entity_id": 1,
"period": "30d"
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_configure_providers
idempotentConfigure BYO email provider credentials or check provider status.
Parameters
operationstringconfigurestatusrequiredargumentconfigure sets BYO provider credentials; status checks current provider health
providerstringmailgunsesargumentEmail provider (required for configure)
api_keystringargumentProvider API key (required for configure, never returned in responses)
api_secretstringargumentOptional provider secret (never returned in responses)
regionstringargumentOptional provider region, e.g. us-east-1
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_configure_providers",
"arguments": {
"operation": "configure",
"provider": "mailgun",
"api_key": "string",
"api_secret": "string",
"region": "string"
}
}
}const result = await client.callTool("nitro_configure_providers", {
"operation": "configure",
"provider": "mailgun",
"api_key": "string",
"api_secret": "string",
"region": "string"
});result = await session.call_tool("nitro_configure_providers", arguments={
"operation": "configure",
"provider": "mailgun",
"api_key": "string",
"api_secret": "string",
"region": "string"
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_set_memory
idempotentRead or update the AI memory document. Operations: read (get current), update (replace entirely), patch (replace a ## section by heading), append (add text to end).
Parameters
operationstringreadupdatepatchappendrequiredargumentread: get current document. update: replace entirely. patch: replace a ## section by heading. append: add text to end.
documentstringargumentFull markdown document (required for update).
headingstringargumentSection heading to patch (e.g. 'Brand Goals'). Required for patch operation. Matches ## headings.
contentstringargumentNew content for the section (patch) or text to append (append).
dry_runbooleanfalseargumentidempotency_keystringargumentReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_set_memory",
"arguments": {
"operation": "read",
"document": "string",
"heading": "string",
"content": "string",
"dry_run": false,
"idempotency_key": "string"
}
}
}const result = await client.callTool("nitro_set_memory", {
"operation": "read",
"document": "string",
"heading": "string",
"content": "string",
"dry_run": false,
"idempotency_key": "string"
});result = await session.call_tool("nitro_set_memory", arguments={
"operation": "read",
"document": "string",
"heading": "string",
"content": "string",
"dry_run": false,
"idempotency_key": "string"
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_manage_billing
open-worldManage subscription billing — check plan status, start checkout, poll payment, list plans.
- status — no params. Returns current subscription, plan, and account tier.
- checkout — params: {plan_id (required)}. Creates a Stripe Checkout Session URL for the operator to complete payment. The agent CANNOT pay directly — tell the operator to open the URL.
- checkout_status — no params. Poll whether subscription is active after checkout.
- plans — no params. Lists available paid plans with pricing.
Body
operationstringstatuscheckoutcheckout_statusplansrequiredBilling operation to perform
paramsobjectOperation-specific parameters.
Parameters
operationstringstatuscheckoutcheckout_statusplansrequiredargumentBilling operation to perform
paramsobjectargumentOperation-specific parameters.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_manage_billing",
"arguments": {
"operation": "status",
"params": {
"plan_id": 0
}
}
}
}const result = await client.callTool("nitro_manage_billing", {
"operation": "status",
"params": {
"plan_id": 0
}
});result = await session.call_tool("nitro_manage_billing", arguments={
"operation": "status",
"params": {
"plan_id": 0
}
}){
"operation": "status",
"params": {
"plan_id": 0
}
}{
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_send_message
destructiveopen-worldSend a transactional email or SMS to a single recipient immediately. No campaign, no audience, no approval required. Use for: receipts, password resets, OTPs, order confirmations, system notifications. NOT for marketing broadcasts to lists/segments — use nitro_compose_campaign. NOT for automated sequences triggered by events — use nitro_compose_flow. Retry safety: pass the same idempotency_key on retry to avoid duplicate sends.
Parameters
channelstringemailsmsrequiredargumentDelivery channel
tostringrequiredargumentRecipient email address or E.164 phone number
subjectstringargumentEmail subject line (required for email)
bodystringargumentMessage body. Required for SMS. Optional plain text for email.
template_idintegerargumentLoad email design from an existing template (email only)
dataobjectargumentMerge variables e.g. { order_id: 123, name: 'Alice' }
idempotency_keystringargumentPrevents duplicate sends on retry
dry_runbooleanfalseargumentValidate and preview without sending
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_send_message",
"arguments": {
"channel": "email",
"to": "string",
"subject": "string",
"body": "string",
"template_id": 0,
"data": {},
"idempotency_key": "string",
"dry_run": false
}
}
}const result = await client.callTool("nitro_send_message", {
"channel": "email",
"to": "string",
"subject": "string",
"body": "string",
"template_id": 0,
"data": {},
"idempotency_key": "string",
"dry_run": false
});result = await session.call_tool("nitro_send_message", arguments={
"channel": "email",
"to": "string",
"subject": "string",
"body": "string",
"template_id": 0,
"data": {},
"idempotency_key": "string",
"dry_run": false
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}nitro_request_support
Submit a support request to the Nitrosend team. Only call when the user explicitly asks to contact support or when you have exhausted other options and cannot resolve their issue. Never suggest or mention this tool proactively. Before calling, summarize the issue and attempt to resolve it with available tools first.
Parameters
subjectstringrequiredargumentBrief summary of the issue
messagestringrequiredargumentDetailed description of the issue (max 1000 chars)
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nitro_request_support",
"arguments": {
"subject": "string",
"message": "string"
}
}
}const result = await client.callTool("nitro_request_support", {
"subject": "string",
"message": "string"
});result = await session.call_tool("nitro_request_support", arguments={
"subject": "string",
"message": "string"
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}Resources
guide
The platform guide your AI reads before doing anything. Covers Nitrosend vocabulary (contacts, channels, flows, campaigns, templates, segments), the two operating modes (tool-driven and goal-driven), the recommended workflow sequence, volume and tier constraints, and common pitfalls to avoid. Read this first.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://guide"
}
}const result = await client.readResource("nitro://guide");result = await session.read_resource("nitro://guide"){
"content": [
{
"type": "text",
"text": "..."
}
]
}account
Live snapshot of the current account: tier (free / paid / trusted), email and SMS volume used vs caps, onboarding checklist progress (brand_setup, domain_verified, first_draft, first_send), contact and list counts, and active flow/campaign summary.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://account"
}
}const result = await client.readResource("nitro://account");result = await session.read_resource("nitro://account"){
"content": [
{
"type": "text",
"text": "..."
}
]
}schema
Machine-readable schema for composing emails and flows. Includes every email section type (header, text, image, button, columns, product, social, divider, spacer, footer) with required and optional props, all flow step types with their parameters, trigger event names, and the full list of segment filter names and predicates.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://schema"
}
}const result = await client.readResource("nitro://schema");result = await session.read_resource("nitro://schema"){
"content": [
{
"type": "text",
"text": "..."
}
]
}brand
The account's brand identity as configured in Brand Settings. Returns brand_color, text_color, bg_color, font_heading, font_body, logo_url, company_name, company_description, physical_address, and the brand voice document. Your AI reads this automatically when composing emails so designs match the brand.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://brand"
}
}const result = await client.readResource("nitro://brand");result = await session.read_resource("nitro://brand"){
"content": [
{
"type": "text",
"text": "..."
}
]
}providers
Current email provider configuration and health. Shows whether the account uses Nitrosend's managed SES or a BYO provider (Mailgun, SES), domain verification status for each sending domain, and the active sending mode (sandbox vs production).
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://providers"
}
}const result = await client.readResource("nitro://providers");result = await session.read_resource("nitro://providers"){
"content": [
{
"type": "text",
"text": "..."
}
]
}config
Account-level sender defaults: from_name, from_email, reply_to, and saved test email recipients. These are applied automatically to campaigns and flows when per-message overrides are not specified.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://config"
}
}const result = await client.readResource("nitro://config");result = await session.read_resource("nitro://config"){
"content": [
{
"type": "text",
"text": "..."
}
]
}example-email
A complete working email design showing every section type in context — header with logo, hero image, text blocks, buttons, two-column product grid, social links, divider, spacer, and footer with unsubscribe. Use as a copy-paste starting point or reference for prop names, style overrides, and column nesting.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://examples/email"
}
}const result = await client.readResource("nitro://examples/email");result = await session.read_resource("nitro://examples/email"){
"content": [
{
"type": "text",
"text": "..."
}
]
}example-flow
A complete automation flow example demonstrating all step types: email with inline design, SMS, wait (duration in seconds), split with filter conditions and yes/no branches, emit_event, webhook, subscribe, and unsubscribe. Shows trigger configuration, branching structure, and merge-tag usage.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://examples/flow"
}
}const result = await client.readResource("nitro://examples/flow");result = await session.read_resource("nitro://examples/flow"){
"content": [
{
"type": "text",
"text": "..."
}
]
}example-campaign
Complete campaign examples for both email and SMS channels. Shows audience targeting with contact_list_ids and segment_id, scheduled delivery with scheduled_at, inline email design with sections, and SMS body composition.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://examples/campaign"
}
}const result = await client.readResource("nitro://examples/campaign");result = await session.read_resource("nitro://examples/campaign"){
"content": [
{
"type": "text",
"text": "..."
}
]
}knowledge-index
Index of built-in email marketing knowledge topics. Returns a list of available slugs with titles and short descriptions. Use a slug with nitro://knowledge/{slug} to read the full topic content. Topics cover deliverability, subject lines, segmentation, automation best practices, and compliance.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://knowledge/index"
}
}const result = await client.readResource("nitro://knowledge/index");result = await session.read_resource("nitro://knowledge/index"){
"content": [
{
"type": "text",
"text": "..."
}
]
}memory
The operator's persistent AI memory document. Contains business goals, target audience, preferred email strategy, tone of voice notes, and any other context the operator has saved. Your AI reads this automatically to inform decisions about email content, flow design, and campaign targeting. Managed via the nitro_set_memory tool.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://memory"
}
}const result = await client.readResource("nitro://memory");result = await session.read_resource("nitro://memory"){
"content": [
{
"type": "text",
"text": "..."
}
]
}knowledge-topic
Full content for a single knowledge topic. Pass a slug from the knowledge index (e.g. nitro://knowledge/deliverability). Returns a markdown document with actionable guidance your AI can apply when composing emails, building flows, or advising on strategy.
Parameters
slugstringrequiredpathReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://knowledge/{slug}"
}
}const result = await client.readResource("nitro://knowledge/{slug}");result = await session.read_resource("nitro://knowledge/{slug}"){
"content": [
{
"type": "text",
"text": "..."
}
]
}prompt
Rendered prompt template by name. Returns structured workflow instructions that guide the AI through multi-step tasks like onboarding a new account, running a campaign review, or setting up a welcome series. Each prompt includes context requirements, step sequence, and expected tool calls.
Parameters
namestringrequiredpathReturns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "nitro://prompts/{name}"
}
}const result = await client.readResource("nitro://prompts/{name}");result = await session.read_resource("nitro://prompts/{name}"){
"content": [
{
"type": "text",
"text": "..."
}
]
}Prompts
audience-analysis
Analyse audience segments and engagement
Parameters
goalstringrequiredargumentWhat you want to learn or achieve, e.g. 'find disengaged subscribers', 'segment by purchase history', 'identify VIP customers'
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "audience-analysis",
"arguments": {
"goal": "<goal>"
}
}
}const result = await client.getPrompt("audience-analysis", {
goal: "<goal>",
});result = await session.get_prompt("audience-analysis", arguments={
"goal": "<goal>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}build-email
Compose a marketing email
Parameters
goalstringrequiredargumentWhat the email is for, e.g. 'announce our spring sale', 'weekly newsletter', 'event invitation', 'product launch'
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "build-email",
"arguments": {
"goal": "<goal>"
}
}
}const result = await client.getPrompt("build-email", {
goal: "<goal>",
});result = await session.get_prompt("build-email", arguments={
"goal": "<goal>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}build-flow
Create an automated email flow from scratch
Parameters
goalstringrequiredargumentWhat the flow should achieve, e.g. 'welcome series for new signups', 'abandoned cart recovery', 're-engage inactive subscribers'
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "build-flow",
"arguments": {
"goal": "<goal>"
}
}
}const result = await client.getPrompt("build-flow", {
goal: "<goal>",
});result = await session.get_prompt("build-flow", arguments={
"goal": "<goal>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}diagnose-deliverability
Diagnose and fix email deliverability issues
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "diagnose-deliverability",
"arguments": {}
}
}const result = await client.getPrompt("diagnose-deliverability");result = await session.get_prompt("diagnose-deliverability"){
"content": [
{
"type": "text",
"text": "..."
}
]
}flow-review
Review and optimise an existing flow
Parameters
flow_idstringargumentID of the flow to review. If omitted, lists active flows for the user to choose.
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "flow-review",
"arguments": {
"flow_id": "<flow_id>"
}
}
}const result = await client.getPrompt("flow-review", {
flow_id: "<flow_id>",
});result = await session.get_prompt("flow-review", arguments={
"flow_id": "<flow_id>",
}){
"content": [
{
"type": "text",
"text": "..."
}
]
}onboard-brand
Set up brand identity for a new account
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "onboard-brand",
"arguments": {}
}
}const result = await client.getPrompt("onboard-brand");result = await session.get_prompt("onboard-brand"){
"content": [
{
"type": "text",
"text": "..."
}
]
}weekly-report
Generate a weekly performance report
Returns
Returns MCP content array (text, image, or embedded resource).
{
"jsonrpc": "2.0",
"method": "prompts/get",
"params": {
"name": "weekly-report",
"arguments": {}
}
}const result = await client.getPrompt("weekly-report");result = await session.get_prompt("weekly-report"){
"content": [
{
"type": "text",
"text": "..."
}
]
}