Home

nitro

v1.0.0
Base URL
https://api.nitrosend.com/mcp

Multi-channel marketing automation platform. Use nitro_get_status first to understand account state. Read nitro://guide for vocabulary and workflow.

Connect

Add to your MCP client configuration:

{ "mcpServers": { "nitro": { "url": "https://api.nitrosend.com/mcp" } } }
Protocol MCP 2025-11-25Transport streamable-httpCapabilities tools, resources, prompts

Tools

nitro_get_status

read-onlyidempotent
TOOLnitro_get_status

Get current account health, onboarding status, and recommendations.

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_get_status
{
  "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={})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_query

read-onlyidempotent
TOOLnitro_query

Query any Nitrosend entity. Returns paginated results.

Parameters

entitystringflowscampaignstemplatessegmentscontactslistseventsimportsmessagesrequiredargument

Which entity type to query. Use nitro_search_contacts for full-text contact search.

filtersobjectargument

Entity-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)
pageintegerargument

Page number (default 1)

perintegerargument

Results per page (max 50, default 25)

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_query
{
  "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
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_search_contacts

read-onlyidempotent
TOOLnitro_search_contacts

Search contacts by email, name, or phone. Returns summary list or full profile.

Parameters

querystringrequiredargument

Email address, name, or phone number

modestringsummaryprofileargument

summary = list, profile = single contact detail (default: summary)

pageintegerargument

Page number (default 1)

perintegerargument

Results per page (max 50, default 25)

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_search_contacts
{
  "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
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_set_brand

idempotentopen-world
TOOLnitro_set_brand

Set 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

application/json
urlstring

Website URL to scrape brand from

logo_urlstring

Direct URL to a logo image (png/jpg/webp/svg) to attach — SVGs are auto-converted to PNG

fieldsobject

Direct brand field updates

Show child attributes
company_namestring
company_descriptionstring
brand_colorstring

Hex color e.g. #ff0000

text_colorstring

Hex color

bg_colorstring

Hex color

font_headingstring
font_bodystring
physical_addressstring
documentstring

Full brand voice markdown document

dry_runbooleanfalse

Preview changes without persisting

modestringsyncasyncsync

sync (default) or async for URL scraping

idempotency_keystring

Optional dedup key

Parameters

urlstringargument

Website URL to scrape brand from

logo_urlstringargument

Direct URL to a logo image (png/jpg/webp/svg) to attach — SVGs are auto-converted to PNG

fieldsobjectargument

Direct brand field updates

documentstringargument

Full brand voice markdown document

dry_runbooleanfalseargument

Preview changes without persisting

modestringsyncasyncsyncargument

sync (default) or async for URL scraping

idempotency_keystringargument

Optional dedup key

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_set_brand
{
  "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"
})
Request Body
{
  "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"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_manage_audience

destructive
TOOLnitro_manage_audience

Create contacts, manage subscriptions, lists, events, segments, and tags.

Parameters

operationstringcreate_contactset_subscriptionmanage_listrecord_eventdelete_segmentbulk_tagrequiredargument

Which 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")}
paramsobjectrequiredargument

Operation-specific parameters. See operation description for required/optional fields.

dry_runbooleanfalseargument

Preview changes without persisting (default: false)

confirmbooleanfalseargument

Required for destructive operations: delete_segment, manage_list with action='delete'

idempotency_keystringargument

Optional deduplication key. Same key returns cached result.

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_manage_audience
{
  "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"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_define_segment

idempotent
TOOLnitro_define_segment

Define 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

application/json
namestring

Segment name (required when preview_only: false)

filtersArray<object>required

Array 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.
Show child attributes
namestringcontact_first_namecontact_last_namecontact_phone_numbercontact_emailcontact_countrycontact_subscribed_phonecontact_subscribed_emailcontact_created_atcontact_last_interacted_atcontact_sourcecontact_tagcontact_verifiedcontact_enrichedrequired

Filter name — read nitro://schema for full details

predicatestringeqnot_eqcontnot_contstartendgtltgteqlteqpresentblanktruefalseinnot_inrequired

Ransack predicate

valueanyrequired

Filter value — string, number, boolean, or array. For present/blank predicates, pass true.

segment_idinteger

Existing segment ID to update (omit for new segment)

preview_onlybooleantrue

Only preview matching contacts, do not save (default: true). Set to false + provide name to persist.

idempotency_keystring

Optional deduplication key

Parameters

namestringargument

Segment name (required when preview_only: false)

filtersArray<object>requiredargument

Array 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_idintegerargument

Existing segment ID to update (omit for new segment)

preview_onlybooleantrueargument

Only preview matching contacts, do not save (default: true). Set to false + provide name to persist.

idempotency_keystringargument

Optional deduplication key

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_define_segment
{
  "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"
})
Request Body
{
  "name": "string",
  "filters": [
    {
      "name": "contact_first_name",
      "predicate": "eq"
    }
  ],
  "segment_id": 0,
  "preview_only": true,
  "idempotency_key": "string"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_import_contacts

TOOLnitro_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

application/json
recordsArray<object>

Array of contact objects (max 100): {email, phone, first_name, last_name, country_code, source, opt_in}

Show child attributes
emailstring
phonestring
first_namestring
last_namestring
country_codestring
sourcestring
opt_inboolean

Subscribe contact for delivery. Defaults to true for email contacts. Must be explicitly true for SMS (TCPA). Set false to import without subscribing.

import_idinteger

Existing Import record ID for CSV processing

dry_runbooleanfalse

Preview import without persisting (default: false)

idempotency_keystring

Optional deduplication key

Parameters

recordsArray<object>argument

Array of contact objects (max 100): {email, phone, first_name, last_name, country_code, source, opt_in}

import_idintegerargument

Existing Import record ID for CSV processing

dry_runbooleanfalseargument

Preview import without persisting (default: false)

idempotency_keystringargument

Optional deduplication key

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_import_contacts
{
  "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"
})
Request Body
{
  "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"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_manage_template

TOOLnitro_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

application/json
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}
subjectstring

Email subject line (recommended under 60 chars)

namestring

Template display name

preheaderstring

Email preheader text shown in inbox preview

from_namestring

Sender name (falls back to account default)

from_emailstring

Sender email (falls back to account default)

reply_tostring

Reply-to email address

themeobject

Theme 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_idinteger

Template ID for update mode — provide with fields to change

based_oninteger

Source template ID for clone mode — creates a copy

if_versioninteger

Optimistic concurrency — rejects update if template version mismatches

goalstring

Goal-driven composition (Phase 5 — not yet available)

dry_runbooleanfalse

Validate and preview without persisting

idempotency_keystring

Dedup key — same key returns cached result

Parameters

sectionsArray<object>argument

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}
subjectstringargument

Email subject line (recommended under 60 chars)

namestringargument

Template display name

preheaderstringargument

Email preheader text shown in inbox preview

from_namestringargument

Sender name (falls back to account default)

from_emailstringargument

Sender email (falls back to account default)

reply_tostringargument

Reply-to email address

themeobjectargument

Theme 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_idintegerargument

Template ID for update mode — provide with fields to change

based_onintegerargument

Source template ID for clone mode — creates a copy

if_versionintegerargument

Optimistic concurrency — rejects update if template version mismatches

goalstringargument

Goal-driven composition (Phase 5 — not yet available)

dry_runbooleanfalseargument

Validate and preview without persisting

idempotency_keystringargument

Dedup key — same key returns cached result

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_manage_template
{
  "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"
})
Request Body
{
  "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"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_compose_flow

destructive
TOOLnitro_compose_flow

Create 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

application/json
namestringrequired

Flow name (required for create mode)

modestringcreatereplacepatchcreate

create: new flow; replace: rebuild existing flow graph; patch: metadata only

flow_idinteger

Required for replace/patch modes

goalstring

Goal string for AI generation (Phase 5C — feature gated)

triggerobjectrequired
Show child attributes
eventstring

Trigger event name. Built-in: contact_add, contact_enriched, keyword, message, list_add, list_remove, product_view, checkout, cart_add, cart_remove, cart_abandoned, browse_abandoned. Custom: any lowercase alphanumeric with underscores (e.g. order_confirmed, password_reset).

segment_idinteger

Optional segment filter on trigger

contact_list_idinteger

Optional contact list for audience targeting

dataobject

Event-specific config (e.g. {keywords: ['STOP']})

stepsArray<object>required

Ordered 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.
Show child attributes
typestringemailsmswaitsplitemit_eventwebhooksubscribeunsubscriberequired
subjectstring

Email subject line (email steps)

bodystring

SMS body text (sms steps) or email plain text

preheaderstring

Email preheader (email steps)

from_namestring

Sender name override (email steps)

from_emailstring

Sender email override (email steps)

reply_tostring

Reply-to override (email steps)

designobject

Email design: { sections: [...], theme: {...} }

transactionalbooleanfalse

Mark email as transactional. Skips subscription check, CAN-SPAM footer, warmup, List-Unsubscribe, and tracking. Use for receipts, password resets, etc.

bccstring

Optional BCC email address. A copy of each email sent by this step will be blind-copied to this address.

durationinteger

Wait duration in seconds (wait steps)

event_namestring

Event name to fire (emit_event steps). Lowercase alphanumeric with underscores.

event_dataobject

Static data payload for emitted event (emit_event steps)

forward_event_databooleanfalse

Merge triggering event data into emitted event (emit_event steps)

urlstring

Webhook URL (webhook steps). Supports merge tags.

methodstringPOSTPUTPOST

HTTP method (webhook steps)

headersobject

Custom HTTP headers as key-value pairs (webhook steps)

filtersArray<object>

Split condition filters

Show child attributes
namestringcontact_first_namecontact_last_namecontact_phone_numbercontact_emailcontact_countrycontact_subscribed_phonecontact_subscribed_emailcontact_created_atcontact_last_interacted_atcontact_sourcecontact_tagcontact_verifiedcontact_enrichedrequired

Filter name — read nitro://schema for full details

predicatestringeqnot_eqcontnot_contstartendgtltgteqlteqpresentblanktruefalseinnot_inrequired

Ransack predicate

valueany

Filter value. For present/blank/true/false predicates, omit or pass true.

yesArray<object>

Steps for yes branch (split steps, NO nested splits)

noArray<object>

Steps for no branch (split steps, NO nested splits)

channelstringphoneemailallphone

Channel for subscribe/unsubscribe steps

dry_runbooleanfalse

Preview graph without persisting

idempotency_keystring

Deduplication key for retry safety

confirmbooleanfalse

Required for replace mode

Parameters

namestringrequiredargument

Flow name (required for create mode)

modestringcreatereplacepatchcreateargument

create: new flow; replace: rebuild existing flow graph; patch: metadata only

flow_idintegerargument

Required for replace/patch modes

goalstringargument

Goal string for AI generation (Phase 5C — feature gated)

triggerobjectrequiredargument
stepsArray<object>requiredargument

Ordered 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_runbooleanfalseargument

Preview graph without persisting

idempotency_keystringargument

Deduplication key for retry safety

confirmbooleanfalseargument

Required for replace mode

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_compose_flow
{
  "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
})
Request Body
{
  "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
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_compose_campaign

destructive
TOOLnitro_compose_campaign

Compose 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

application/json
namestringrequired

Campaign name

channelstringemailsmsemail

Auto-detected as 'email' when sections or template_id provided. Set explicitly to 'sms' for SMS campaigns.

goalstring

Goal string for AI generation (Phase 5C — feature gated)

subjectstring

Email subject line (email campaigns)

preheaderstring

Email preheader (email campaigns)

from_namestring

Sender name override

from_emailstring

Sender email override

reply_tostring

Reply-to email override

bodystring

SMS body text (sms campaigns) or email plain text

sectionsArray<object>

Email design sections array — same format as nitro_manage_template. Requires subject.

themeobject

Email theme overrides merged on brand theme: {brand_color, bg_color, text_color, font_body, font_heading, logo_url}

template_idinteger

Clone design from existing template (email campaigns)

audienceobject

Target audience for the campaign. Use audience_type='all_contacts' only for an explicit all-subscribed-contacts send.

Show child attributes
audience_typestringlistssegmentall_contacts

Explicit audience target: lists, segment, or all_contacts

contact_list_idsArray<integer>

Send to contacts in these lists (union with dedup)

contact_list_idinteger

Deprecated — use contact_list_ids. Send to contacts in this list

segment_idinteger

Filter trigger to contacts matching this segment

scheduled_atstring<date-time>

ISO 8601 delivery time (e.g. '2026-03-01T10:00:00Z'). Omit for manual send.

dry_runbooleanfalse

Preview campaign without creating (default: false)

idempotency_keystring

Optional deduplication key

Parameters

namestringrequiredargument

Campaign name

channelstringemailsmsemailargument

Auto-detected as 'email' when sections or template_id provided. Set explicitly to 'sms' for SMS campaigns.

goalstringargument

Goal string for AI generation (Phase 5C — feature gated)

subjectstringargument

Email subject line (email campaigns)

preheaderstringargument

Email preheader (email campaigns)

from_namestringargument

Sender name override

from_emailstringargument

Sender email override

reply_tostringargument

Reply-to email override

bodystringargument

SMS body text (sms campaigns) or email plain text

sectionsArray<object>argument

Email design sections array — same format as nitro_manage_template. Requires subject.

themeobjectargument

Email theme overrides merged on brand theme: {brand_color, bg_color, text_color, font_body, font_heading, logo_url}

template_idintegerargument

Clone design from existing template (email campaigns)

audienceobjectargument

Target audience for the campaign. Use audience_type='all_contacts' only for an explicit all-subscribed-contacts send.

scheduled_atstring<date-time>argument

ISO 8601 delivery time (e.g. '2026-03-01T10:00:00Z'). Omit for manual send.

dry_runbooleanfalseargument

Preview campaign without creating (default: false)

idempotency_keystringargument

Optional deduplication key

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_compose_campaign
{
  "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"
})
Request Body
{
  "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"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_manage_domains

destructiveopen-world
TOOLnitro_manage_domains

Manage 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

application/json
operationstringaddverifycheck_dnslistremoverequired

Which 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.
paramsobject

Operation-specific parameters.

Show child attributes
domain_namestring

Domain to manage (e.g. 'send.acme.com'). Required for add, verify, remove.

confirmbooleanfalse

Required for remove operation (destructive)

Parameters

operationstringaddverifycheck_dnslistremoverequiredargument

Which 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.
paramsobjectargument

Operation-specific parameters.

confirmbooleanfalseargument

Required for remove operation (destructive)

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_manage_domains
{
  "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
})
Request Body
{
  "operation": "add",
  "params": {
    "domain_name": "string"
  },
  "confirm": false
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_configure_account

idempotent
TOOLnitro_configure_account

Configure 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_namestringargument

Sender display name (e.g. 'Acme Marketing')

from_emailstringargument

Sender email address (must match a verified domain)

reply_tostringargument

Reply-to email address

test_email_recipientsArray<string>argument

Saved email addresses for test sends (max 5). Pass empty array to clear.

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_configure_account
{
  "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"
  ]
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_review_delivery

read-onlyidempotent
TOOLnitro_review_delivery

Read-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_typestringtemplateflowcampaignrequiredargument

Entity type to review

target_idintegerrequiredargument

Entity ID to review

contact_idintegerargument

Optional contact ID for merge-tag personalization during review

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_review_delivery
{
  "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
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_send_test_message

open-world
TOOLnitro_send_test_message

Send 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_typestringtemplateflowcampaignargument

Target entity type. Use with target_id unless latest_campaign or template_id is used.

target_idintegerargument

Target entity ID. Use with target_type.

latest_campaignbooleanfalseargument

Use the most recently created campaign in this brand.

template_idintegerargument

Template to test directly, or the specific flow/campaign template to choose.

action_idintegerargument

Flow action ID to test when a flow has multiple message steps.

channelstringautoemailsmsautoargument

Channel to test. Use auto unless a standalone template is ambiguous.

contact_idintegerargument

Contact ID for recipient and merge-tag personalization. If present, this contact supplies the recipient address/phone.

toArray<string>argument

Explicit test recipients. Use email addresses for email targets and E.164 phone numbers for SMS targets.

dry_runbooleanfalseargument

Validate target and recipients without sending.

idempotency_keystringargument

Optional deduplication key for retry safety.

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_send_test_message
{
  "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"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_control_delivery

destructiveopen-world
TOOLnitro_control_delivery

Manage delivery lifecycle for flows and campaigns. State: draft -> approve -> live/schedule <> pause, cancel -> archive.

Parameters

target_typestringflowcampaignrequiredargument

Entity type

target_idintegerrequiredargument

Entity ID

operationstringapproverejectliveschedulepauseresumecancelarchiverestorerequiredargument

Lifecycle operation. approve runs preflight. schedule is campaign-only (requires scheduled_at). Most require prior approval.

scheduled_atstring<date-time>argument

Required for schedule operation (ISO 8601 datetime)

confirm_send_to_allbooleanargument

Required 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).

nitro_control_delivery
{
  "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
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_get_insights

read-onlyidempotent
TOOLnitro_get_insights

Get email analytics with trends, benchmarks, and recommendations.

Parameters

scopestringaccountflowcampaignmessagerequiredargument

Scope of insights: account-wide, per flow, per campaign, or per message

entity_idintegerargument

Required for flow/campaign/message scope

periodstring7d30d90d30dargument

Time period for metrics (default 30d)

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_get_insights
{
  "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"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_configure_providers

idempotent
TOOLnitro_configure_providers

Configure BYO email provider credentials or check provider status.

Parameters

operationstringconfigurestatusrequiredargument

configure sets BYO provider credentials; status checks current provider health

providerstringmailgunsesargument

Email provider (required for configure)

api_keystringargument

Provider API key (required for configure, never returned in responses)

api_secretstringargument

Optional provider secret (never returned in responses)

regionstringargument

Optional provider region, e.g. us-east-1

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_configure_providers
{
  "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"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_set_memory

idempotent
TOOLnitro_set_memory

Read 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

operationstringreadupdatepatchappendrequiredargument

read: get current document. update: replace entirely. patch: replace a ## section by heading. append: add text to end.

documentstringargument

Full markdown document (required for update).

headingstringargument

Section heading to patch (e.g. 'Brand Goals'). Required for patch operation. Matches ## headings.

contentstringargument

New content for the section (patch) or text to append (append).

dry_runbooleanfalseargument
idempotency_keystringargument

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_set_memory
{
  "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"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_manage_billing

open-world
TOOLnitro_manage_billing

Manage 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

application/json
operationstringstatuscheckoutcheckout_statusplansrequired

Billing operation to perform

paramsobject

Operation-specific parameters.

Show child attributes
plan_idinteger

Plan ID (required for checkout)

Parameters

operationstringstatuscheckoutcheckout_statusplansrequiredargument

Billing operation to perform

paramsobjectargument

Operation-specific parameters.

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_manage_billing
{
  "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
  }
})
Request Body
{
  "operation": "status",
  "params": {
    "plan_id": 0
  }
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_send_message

destructiveopen-world
TOOLnitro_send_message

Send 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

channelstringemailsmsrequiredargument

Delivery channel

tostringrequiredargument

Recipient email address or E.164 phone number

subjectstringargument

Email subject line (required for email)

bodystringargument

Message body. Required for SMS. Optional plain text for email.

template_idintegerargument

Load email design from an existing template (email only)

dataobjectargument

Merge variables e.g. { order_id: 123, name: 'Alice' }

idempotency_keystringargument

Prevents duplicate sends on retry

dry_runbooleanfalseargument

Validate and preview without sending

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_send_message
{
  "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
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_request_support

TOOLnitro_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

subjectstringrequiredargument

Brief summary of the issue

messagestringrequiredargument

Detailed description of the issue (max 1000 chars)

Returns

Returns MCP content array (text, image, or embedded resource).

nitro_request_support
{
  "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"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

Resources

guide

RESOURCEnitro://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).

guide
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://guide"
  }
}
const result = await client.readResource("nitro://guide");
result = await session.read_resource("nitro://guide")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

account

RESOURCEnitro://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).

account
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://account"
  }
}
const result = await client.readResource("nitro://account");
result = await session.read_resource("nitro://account")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

schema

RESOURCEnitro://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).

schema
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://schema"
  }
}
const result = await client.readResource("nitro://schema");
result = await session.read_resource("nitro://schema")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

brand

RESOURCEnitro://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).

brand
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://brand"
  }
}
const result = await client.readResource("nitro://brand");
result = await session.read_resource("nitro://brand")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

providers

RESOURCEnitro://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).

providers
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://providers"
  }
}
const result = await client.readResource("nitro://providers");
result = await session.read_resource("nitro://providers")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

config

RESOURCEnitro://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).

config
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://config"
  }
}
const result = await client.readResource("nitro://config");
result = await session.read_resource("nitro://config")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

example-email

RESOURCEnitro://examples/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).

example-email
{
  "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")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

example-flow

RESOURCEnitro://examples/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).

example-flow
{
  "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")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

example-campaign

RESOURCEnitro://examples/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).

example-campaign
{
  "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")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

knowledge-index

RESOURCEnitro://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).

knowledge-index
{
  "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")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

memory

RESOURCEnitro://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).

memory
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://memory"
  }
}
const result = await client.readResource("nitro://memory");
result = await session.read_resource("nitro://memory")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

knowledge-topic

RESOURCEnitro://knowledge/{slug}

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

slugstringrequiredpath

Returns

Returns MCP content array (text, image, or embedded resource).

knowledge-topic
{
  "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}")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

prompt

RESOURCEnitro://prompts/{name}

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

namestringrequiredpath

Returns

Returns MCP content array (text, image, or embedded resource).

prompt
{
  "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}")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

Prompts

audience-analysis

PROMPTaudience-analysis

Analyse audience segments and engagement

Parameters

goalstringrequiredargument

What 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).

audience-analysis
{
  "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>",
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

build-email

PROMPTbuild-email

Compose a marketing email

Parameters

goalstringrequiredargument

What 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).

build-email
{
  "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>",
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

build-flow

PROMPTbuild-flow

Create an automated email flow from scratch

Parameters

goalstringrequiredargument

What 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).

build-flow
{
  "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>",
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

diagnose-deliverability

PROMPTdiagnose-deliverability

Diagnose and fix email deliverability issues

Returns

Returns MCP content array (text, image, or embedded resource).

diagnose-deliverability
{
  "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")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

flow-review

PROMPTflow-review

Review and optimise an existing flow

Parameters

flow_idstringargument

ID 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).

flow-review
{
  "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>",
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

onboard-brand

PROMPTonboard-brand

Set up brand identity for a new account

Returns

Returns MCP content array (text, image, or embedded resource).

onboard-brand
{
  "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")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

weekly-report

PROMPTweekly-report

Generate a weekly performance report

Returns

Returns MCP content array (text, image, or embedded resource).

weekly-report
{
  "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")
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}