Home

nitro

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

AI-native email marketing platform for campaigns, lifecycle flows, and transactional email

Connect

Add to your MCP client configuration:

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

Tools

nitro_get_status

read-onlyidempotent
TOOLnitro_get_status

Get current account context, sender identity, dashboard links, readiness, 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_select_account

idempotent
TOOLnitro_select_account

Switch this OAuth MCP connection to an account listed by nitro_get_status; the next call uses it. Credential-authenticated connections are pinned and cannot switch.

Parameters

account_idintegerrequiredargument

ID of the account to switch to. Get IDs from nitro_get_status.available_accounts.items[*].id.

Returns

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

nitro_select_account
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_select_account",
    "arguments": {
        "account_id": 0
      }
  }
}
const result = await client.callTool("nitro_select_account", {
  "account_id": 0
});
result = await session.call_tool("nitro_select_account", arguments={
  "account_id": 0
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_select_brand

idempotent
TOOLnitro_select_brand

Select the current brand for this OAuth MCP connection. Use this instead of passing brand_sid to other tools. Credential-authenticated connections are pinned to one brand and cannot switch.

Parameters

brand_sidstringargument

Exact brand SID to select. Provide either brand_sid or name.

namestringargument

Brand name to select when the SID is unknown. Provide either name or brand_sid. Ambiguous names return candidates without changing context.

Returns

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

nitro_select_brand
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_select_brand",
    "arguments": {
        "brand_sid": "string",
        "name": "string"
      }
  }
}
const result = await client.callTool("nitro_select_brand", {
  "brand_sid": "string",
  "name": "string"
});
result = await session.call_tool("nitro_select_brand", arguments={
  "brand_sid": "string",
  "name": "string"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_query

read-onlyidempotent
TOOLnitro_query

Query any Nitrosend entity. Returns paginated results.

Parameters

entitystringflowscampaignstemplatessegmentscontactslistseventsimportsmessagessuppressionshistoryproductsrequiredargument

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

filtersobjectargument

Entity filters: flows status/campaign_id/trigger_event/search; campaigns status/search; templates subject; segments/lists name; contacts query/subscribed_email/subscribed_phone/list_id; events name/from/to; imports status; messages channel/status/to; suppressions email/reason/source_provider/active; history source/event_type/tool/actor/correlation_id/resource_uri/from/to; products status/query. All support integer id.

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_kit

idempotentopen-world
TOOLnitro_set_brand_kit

Set Brand Kit from a website, typed fields, document, or logo URL. Fields override scraping; async is URL-only.

Body

application/json
urlstring
logo_urlstring

Public/Nitro image URL; ingest local logos first.

fieldsobject

Typed Brand Kit fields.

Show child attributes
brand_colorstring

Hex color e.g. #ff0000

text_colorstring

Hex color

bg_colorstring

Hex color

font_bodystring
font_headingstring
heading_sizeinteger

Heading/title font size in pixels, 12-48

body_sizeinteger

Body text font size in pixels, 12-20

radiusinteger

Global brand corner radius in pixels, 0-64. Defaults to 8; set 0 for square corners across every eligible layer.

spacing_densitystringcompactnormalspacious

Section spacing rhythm: compact, normal, or spacious

company_namestring
physical_addressstring
company_descriptionstring
documentstring
dry_runbooleanfalse
modestringsyncasyncsync
idempotency_keystring

Required for live URL scraping or remote logo fetch; reuse only for an exact retry.

Returns

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

nitro_set_brand_kit
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_set_brand_kit",
    "arguments": {
        "url": "string",
        "logo_url": "string",
        "fields": {
          "brand_color": "string",
          "text_color": "string",
          "bg_color": "string",
          "font_body": "string",
          "font_heading": "string",
          "heading_size": 0,
          "body_size": 0,
          "radius": 0,
          "spacing_density": "compact",
          "company_name": "string",
          "physical_address": "string",
          "company_description": "string"
        },
        "document": "string",
        "dry_run": false,
        "mode": "sync",
        "idempotency_key": "string"
      }
  }
}
const result = await client.callTool("nitro_set_brand_kit", {
  "url": "string",
  "logo_url": "string",
  "fields": {
    "brand_color": "string",
    "text_color": "string",
    "bg_color": "string",
    "font_body": "string",
    "font_heading": "string",
    "heading_size": 0,
    "body_size": 0,
    "radius": 0,
    "spacing_density": "compact",
    "company_name": "string",
    "physical_address": "string",
    "company_description": "string"
  },
  "document": "string",
  "dry_run": false,
  "mode": "sync",
  "idempotency_key": "string"
});
result = await session.call_tool("nitro_set_brand_kit", arguments={
  "url": "string",
  "logo_url": "string",
  "fields": {
    "brand_color": "string",
    "text_color": "string",
    "bg_color": "string",
    "font_body": "string",
    "font_heading": "string",
    "heading_size": 0,
    "body_size": 0,
    "radius": 0,
    "spacing_density": "compact",
    "company_name": "string",
    "physical_address": "string",
    "company_description": "string"
  },
  "document": "string",
  "dry_run": false,
  "mode": "sync",
  "idempotency_key": "string"
})
Request Body
{
  "url": "string",
  "logo_url": "string",
  "fields": {
    "brand_color": "string",
    "text_color": "string",
    "bg_color": "string",
    "font_body": "string",
    "font_heading": "string",
    "heading_size": 0,
    "body_size": 0,
    "radius": 0,
    "spacing_density": "compact",
    "company_name": "string",
    "physical_address": "string",
    "company_description": "string"
  },
  "document": "string",
  "dry_run": false,
  "mode": "sync",
  "idempotency_key": "string"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_ingest

open-world
TOOLnitro_ingest

Validate and store an image in the brand library. Use image_data for small images, upload then signed_id for local files, or image_url for external/generated assets. Returns a durable email URL.

Body

application/json
kindstring
image_datastring

Base64/data URL for PNG, JPEG, or WebP under 10 MB.

image_urlstring

Public PNG, JPEG, or WebP URL under 10 MB.

signed_idstring

signed_id returned after the reserved upload PUT.

descriptionstring

Truthful visible content for library selection and alt text.

uploadobject

Reserve a local-image upload; PUT bytes, then ingest its signed_id.

Show child attributes
kindstringrequired
filenamestringrequired
content_typestringrequired
byte_sizeintegerrequired
checksumstringrequired

Base64 MD5.

filenamestring
content_typestring

Returns

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

nitro_ingest
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_ingest",
    "arguments": {
        "kind": "string",
        "image_data": "string",
        "image_url": "string",
        "signed_id": "string",
        "description": "string",
        "upload": {
          "kind": "string",
          "filename": "string",
          "content_type": "string",
          "byte_size": 0,
          "checksum": "string"
        },
        "filename": "string",
        "content_type": "string"
      }
  }
}
const result = await client.callTool("nitro_ingest", {
  "kind": "string",
  "image_data": "string",
  "image_url": "string",
  "signed_id": "string",
  "description": "string",
  "upload": {
    "kind": "string",
    "filename": "string",
    "content_type": "string",
    "byte_size": 0,
    "checksum": "string"
  },
  "filename": "string",
  "content_type": "string"
});
result = await session.call_tool("nitro_ingest", arguments={
  "kind": "string",
  "image_data": "string",
  "image_url": "string",
  "signed_id": "string",
  "description": "string",
  "upload": {
    "kind": "string",
    "filename": "string",
    "content_type": "string",
    "byte_size": 0,
    "checksum": "string"
  },
  "filename": "string",
  "content_type": "string"
})
Request Body
{
  "kind": "string",
  "image_data": "string",
  "image_url": "string",
  "signed_id": "string",
  "description": "string",
  "upload": {
    "kind": "string",
    "filename": "string",
    "content_type": "string",
    "byte_size": 0,
    "checksum": "string"
  },
  "filename": "string",
  "content_type": "string"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_manage_audience

destructive
TOOLnitro_manage_audience

Create or update contacts, manage subscriptions, lists, events, segments, tags, and explicit prepaid email validation. Custom contact fields belong in attributes.data. For more than 100 contact writes, use nitro_import_contacts with CSV.

Parameters

operationstringcreate_contactupdate_contactset_subscriptionmanage_listrecord_eventdelete_segmentbulk_tagvalidaterequiredargument

Choose one audience operation. validate accepts exactly one of contact_channel_ids, contact_ids, list_id, or segment_id. Dry-run quotes without mutation; execution needs idempotency_key and prepaid funds. Deletion needs confirm.

paramsobjectrequiredargument

Parameters named by operation. Contact custom fields belong in attributes.data.

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_manage_outreach

destructiveopen-world
TOOLnitro_manage_outreach

Discover named people for outreach: intent, estimate, then start. Companies are evidence, never recipients. start requires the quoted USD-cent spend cap and idempotency key.

Body

application/json
actionstringintentestimatestartstatuspauseresumecancelrequired
goalstring

Outreach objective for intent.

namestring

Required for start.

target_profileobject
Show child attributes
criteriaArray<object>required
Show child attributes
keystring
subjectstringprospectcompanysignalprospect
fieldstringrequired

Canonical person, company, or signal field.

operatorstringequalsincludesincludes_anyinrangepresentequals
valueany

Scalar, list, or range; omit for present.

requiredbooleanfalse

Unknown/mismatch prevents a match.

weightnumber1
minimum_confidencenumber[0, 1]0
maximum_age_daysinteger>= 1
capabilitiesArray<string>professional_profilesconnected_profilescommunity_signalshiring_activity

Requested intent capabilities; required capabilities remain included.

seedsArray<object>

Up to 100 first-party person/company seeds.

Show child attributes
domainstring
website_urlstring
careers_urlstring
company_namestring
first_namestring
last_namestring
linkedin_urlstring
source_record_idstring
seed_artifactsArray<object>

Uploaded CSV seed manifests.

Show child attributes
signed_idstringrequired
exclusionsobject

Campaign company exclusions; brand suppressions always apply.

Show child attributes
company_domainsArray<string>
target_countinteger[1, 1000]

Qualified-person limit.

maximum_spend_centsinteger>= 0

Authorized USD-cent cap from estimate.

campaign_idinteger

Required for status or control.

brand_context_refstring

Current ref returned by intent.

idempotency_keystring

Required for start; reuse only for an exact retry.

Returns

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

nitro_manage_outreach
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_manage_outreach",
    "arguments": {
        "action": "intent",
        "goal": "string",
        "name": "string",
        "target_profile": {
          "criteria": [
            {
              "key": "string",
              "subject": "prospect",
              "field": "string",
              "operator": "equals",
              "required": false,
              "weight": 1,
              "minimum_confidence": 0,
              "maximum_age_days": 1
            }
          ]
        },
        "capabilities": [
          "professional_profiles"
        ],
        "seeds": [
          {
            "domain": "string",
            "website_url": "string",
            "careers_url": "string",
            "company_name": "string",
            "first_name": "string",
            "last_name": "string",
            "linkedin_url": "string",
            "source_record_id": "string"
          }
        ],
        "seed_artifacts": [
          {
            "signed_id": "string"
          }
        ],
        "exclusions": {
          "company_domains": [
            "string"
          ]
        },
        "target_count": 1,
        "maximum_spend_cents": 0,
        "campaign_id": 0,
        "brand_context_ref": "string",
        "idempotency_key": "string"
      }
  }
}
const result = await client.callTool("nitro_manage_outreach", {
  "action": "intent",
  "goal": "string",
  "name": "string",
  "target_profile": {
    "criteria": [
      {
        "key": "string",
        "subject": "prospect",
        "field": "string",
        "operator": "equals",
        "required": false,
        "weight": 1,
        "minimum_confidence": 0,
        "maximum_age_days": 1
      }
    ]
  },
  "capabilities": [
    "professional_profiles"
  ],
  "seeds": [
    {
      "domain": "string",
      "website_url": "string",
      "careers_url": "string",
      "company_name": "string",
      "first_name": "string",
      "last_name": "string",
      "linkedin_url": "string",
      "source_record_id": "string"
    }
  ],
  "seed_artifacts": [
    {
      "signed_id": "string"
    }
  ],
  "exclusions": {
    "company_domains": [
      "string"
    ]
  },
  "target_count": 1,
  "maximum_spend_cents": 0,
  "campaign_id": 0,
  "brand_context_ref": "string",
  "idempotency_key": "string"
});
result = await session.call_tool("nitro_manage_outreach", arguments={
  "action": "intent",
  "goal": "string",
  "name": "string",
  "target_profile": {
    "criteria": [
      {
        "key": "string",
        "subject": "prospect",
        "field": "string",
        "operator": "equals",
        "required": false,
        "weight": 1,
        "minimum_confidence": 0,
        "maximum_age_days": 1
      }
    ]
  },
  "capabilities": [
    "professional_profiles"
  ],
  "seeds": [
    {
      "domain": "string",
      "website_url": "string",
      "careers_url": "string",
      "company_name": "string",
      "first_name": "string",
      "last_name": "string",
      "linkedin_url": "string",
      "source_record_id": "string"
    }
  ],
  "seed_artifacts": [
    {
      "signed_id": "string"
    }
  ],
  "exclusions": {
    "company_domains": [
      "string"
    ]
  },
  "target_count": 1,
  "maximum_spend_cents": 0,
  "campaign_id": 0,
  "brand_context_ref": "string",
  "idempotency_key": "string"
})
Request Body
{
  "action": "intent",
  "goal": "string",
  "name": "string",
  "target_profile": {
    "criteria": [
      {
        "key": "string",
        "subject": "prospect",
        "field": "string",
        "operator": "equals",
        "required": false,
        "weight": 1,
        "minimum_confidence": 0,
        "maximum_age_days": 1
      }
    ]
  },
  "capabilities": [
    "professional_profiles"
  ],
  "seeds": [
    {
      "domain": "string",
      "website_url": "string",
      "careers_url": "string",
      "company_name": "string",
      "first_name": "string",
      "last_name": "string",
      "linkedin_url": "string",
      "source_record_id": "string"
    }
  ],
  "seed_artifacts": [
    {
      "signed_id": "string"
    }
  ],
  "exclusions": {
    "company_domains": [
      "string"
    ]
  },
  "target_count": 1,
  "maximum_spend_cents": 0,
  "campaign_id": 0,
  "brand_context_ref": "string",
  "idempotency_key": "string"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_define_segment

idempotent
TOOLnitro_define_segment

Preview or persist a filtered contact segment. preview_only defaults true; set false and provide name to save.

Body

application/json
namestring
filtersArray<any> | anyrequired

Flat AND filters or a boolean group tree of attribute/event filters.

segment_idinteger
preview_onlybooleantrue
idempotency_keystring

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": [],
        "segment_id": 0,
        "preview_only": true,
        "idempotency_key": "string"
      }
  }
}
const result = await client.callTool("nitro_define_segment", {
  "name": "string",
  "filters": [],
  "segment_id": 0,
  "preview_only": true,
  "idempotency_key": "string"
});
result = await session.call_tool("nitro_define_segment", arguments={
  "name": "string",
  "filters": [],
  "segment_id": 0,
  "preview_only": true,
  "idempotency_key": "string"
})
Request Body
{
  "name": "string",
  "filters": [],
  "segment_id": 0,
  "preview_only": true,
  "idempotency_key": "string"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_import_contacts

TOOLnitro_import_contacts

Import up to 100 inline contacts or use the CSV upload/finalize path for up to 250k. Existing subscription state is preserved unless opt_in is explicit; SMS opt-in must be explicit.

Body

application/json
recordsArray<object>

Up to 100 contacts; use data for custom fields.

Show child attributes
emailstring
phonestring
first_namestring
last_namestring
country_codestring
sourcestring
dataobject

Custom contact fields.

opt_inboolean

Explicit subscription state; required true for SMS opt-in.

import_idinteger
signed_idstring

signed_id returned after the reserved CSV upload PUT.

uploadobject

Reserve a CSV upload; PUT bytes, then process its signed_id.

Show child attributes
filenamestringrequired
content_typestringrequired
byte_sizeintegerrequired
checksumstringrequired

Base64 MD5.

resourcestringcontacts
parserstringdefault
columnsobject
optionsobject

Import options, including list_ids.

Show child attributes
list_idsArray<integer>
dry_runbooleanfalse
idempotency_keystring

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",
            "data": {},
            "opt_in": true
          }
        ],
        "import_id": 0,
        "signed_id": "string",
        "upload": {
          "filename": "string",
          "content_type": "string",
          "byte_size": 0,
          "checksum": "string"
        },
        "resource": "contacts",
        "parser": "default",
        "columns": {},
        "options": {
          "list_ids": [
            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",
      "data": {},
      "opt_in": true
    }
  ],
  "import_id": 0,
  "signed_id": "string",
  "upload": {
    "filename": "string",
    "content_type": "string",
    "byte_size": 0,
    "checksum": "string"
  },
  "resource": "contacts",
  "parser": "default",
  "columns": {},
  "options": {
    "list_ids": [
      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",
      "data": {},
      "opt_in": true
    }
  ],
  "import_id": 0,
  "signed_id": "string",
  "upload": {
    "filename": "string",
    "content_type": "string",
    "byte_size": 0,
    "checksum": "string"
  },
  "resource": "contacts",
  "parser": "default",
  "columns": {},
  "options": {
    "list_ids": [
      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",
      "data": {},
      "opt_in": true
    }
  ],
  "import_id": 0,
  "signed_id": "string",
  "upload": {
    "filename": "string",
    "content_type": "string",
    "byte_size": 0,
    "checksum": "string"
  },
  "resource": "contacts",
  "parser": "default",
  "columns": {},
  "options": {
    "list_ids": [
      0
    ]
  },
  "dry_run": false,
  "idempotency_key": "string"
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_manage_template

TOOLnitro_manage_template

Create, edit, or clone a reusable email template. For a creative design, start with composition_mode=intent and follow its exact next_call. Exact edits use template_id, section_updates, and if_version; based_on clones. Use nitro_compose_campaign for broadcasts.

Body

application/json
sectionsArray<object>

Email sections. Follow next_call for composition; use nitro://schema only for full authoring. Images use public or nitro_ingest media_url/image_url, never signed_id.

section_updatesArray<object>

Targeted section edits; never changes order or type.

Show child attributes
idstring

Preferred stable section id.

indexinteger
typestring

Existing type to target or assert.

occurrenceinteger

0-based occurrence of type.

propsobject

Non-copy props to shallow-merge.

stylesobject

Styles to shallow-merge.

text_patchobject

Literal replacement in one string prop.

Show child attributes
propstring

String prop to edit. Required when the section type has no clear default or when editing a non-default prop.

findstring
replacestring
allbooleanfalse

Replace every occurrence; requires at least one match

subjectstring
namestring
composition_modestringintentdraftvalidategenerate

intent plans; validate checks; draft persists; generate composes and persists.

contract_idstring
brand_context_refstring
validate_onlybooleanfalse

Alias for validate; never persists.

design_mode_overridestringpremium_richpremium_minimalfounder_letterutility_plain
renegotiatebooleanfalse
user_instructionstring
creative_route_idstring

Intent-only route id; unavailable or invalid routes fail explicitly.

source_textstring

Untrusted source evidence; put authoring directions in user_instruction.

factsArray<object>

Literal evidence: required values must appear; available values may be used.

Show child attributes
kindstringurlimage_urloffer_codepricedeadlineoffercta_textrequired
valuestringrequired
descriptionstring

For image_url: truthful visible content for selection and alt text.

requirementstringrequiredavailablerequired
draft_metaobject

Optional authoring provenance; never blocks validation or persistence.

Show child attributes
creative_route_idstring
concrete_anchorstring
why_this_earns_the_inboxstring
preheaderstring
bodystring

Plain-text alternative for custom mode.

plain_text_modestringderivedcustom

Whether plain text is derived or custom.

from_namestring
from_emailstring
reply_tostring
themeobject

Brand-theme overrides; logo_url uses public or nitro_ingest media_url/image_url, never signed_id.

template_idinteger
based_oninteger
if_versioninteger

Version token for conflict-safe writes.

goalstring
dry_runbooleanfalse
idempotency_keystring

Required for non-dry-run persistence; reuse only for an exact retry.

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": [
          {}
        ],
        "section_updates": [
          {
            "id": "string",
            "index": 0,
            "type": "string",
            "occurrence": 0,
            "props": {},
            "styles": {},
            "text_patch": {
              "prop": "string",
              "find": "string",
              "replace": "string",
              "all": false
            }
          }
        ],
        "subject": "string",
        "name": "string",
        "composition_mode": "intent",
        "contract_id": "string",
        "brand_context_ref": "string",
        "validate_only": false,
        "design_mode_override": "premium_rich",
        "renegotiate": false,
        "user_instruction": "string",
        "creative_route_id": "string",
        "source_text": "string",
        "facts": [
          {
            "kind": "url",
            "value": "string",
            "description": "string",
            "requirement": "required"
          }
        ],
        "draft_meta": {
          "creative_route_id": "string",
          "concrete_anchor": "string",
          "why_this_earns_the_inbox": "string"
        },
        "preheader": "string",
        "body": "string",
        "plain_text_mode": "derived",
        "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": [
    {}
  ],
  "section_updates": [
    {
      "id": "string",
      "index": 0,
      "type": "string",
      "occurrence": 0,
      "props": {},
      "styles": {},
      "text_patch": {
        "prop": "string",
        "find": "string",
        "replace": "string",
        "all": false
      }
    }
  ],
  "subject": "string",
  "name": "string",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "preheader": "string",
  "body": "string",
  "plain_text_mode": "derived",
  "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": [
    {}
  ],
  "section_updates": [
    {
      "id": "string",
      "index": 0,
      "type": "string",
      "occurrence": 0,
      "props": {},
      "styles": {},
      "text_patch": {
        "prop": "string",
        "find": "string",
        "replace": "string",
        "all": false
      }
    }
  ],
  "subject": "string",
  "name": "string",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "preheader": "string",
  "body": "string",
  "plain_text_mode": "derived",
  "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": [
    {}
  ],
  "section_updates": [
    {
      "id": "string",
      "index": 0,
      "type": "string",
      "occurrence": 0,
      "props": {},
      "styles": {},
      "text_patch": {
        "prop": "string",
        "find": "string",
        "replace": "string",
        "all": false
      }
    }
  ],
  "subject": "string",
  "name": "string",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "preheader": "string",
  "body": "string",
  "plain_text_mode": "derived",
  "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 edit an automation-flow draft; never activates it. For creative email, start with composition_mode=intent and follow its exact next_call. Multi-email flows choose routes per action_name. replace requires flow_id, confirm, and the draft revision; patch preserves other nodes. Activation uses nitro_control_delivery.

Body

application/json
namestring

Flow name; required when creating.

modestringcreatereplacepatchcreate

create: new complete graph; replace: complete existing draft graph; patch: name and/or selected email actions

flow_idinteger
expected_updated_atstring

Legacy compatibility token; prefer draft revision id.

expected_draft_revision_idinteger

Latest draft revision id for conflict-safe writes.

goalstring
composition_modestringintentdraftvalidategenerate

intent plans; validate checks; draft persists; generate composes and persists.

contract_idstring
brand_context_refstring
validate_onlybooleanfalse

Alias for validate; never persists.

design_mode_overridestringpremium_richpremium_minimalfounder_letterutility_plain
renegotiatebooleanfalse
user_instructionstring
creative_route_idstring

Intent-only sequence-wide route id; invalid choices fail.

email_baseline_selectionsArray<object>

Intent-only creative_routes[].id and image binding ids per email action_name.

Show child attributes
action_namestringrequired
route_idstringrequired
image_binding_idsArray<string>
source_textstring

Untrusted source evidence; put authoring directions in user_instruction.

factsArray<object>

Literal evidence: required values must appear; available values may be used.

Show child attributes
kindstringurlimage_urloffer_codepricedeadlineoffercta_textrequired
valuestringrequired
descriptionstring

For image_url: truthful visible content for selection and alt text.

requirementstringrequiredavailablerequired
draft_metaobject

Optional authoring provenance; never blocks validation or persistence.

Show child attributes
creative_route_idstring
concrete_anchorstring
why_this_earns_the_inboxstring
triggerobject
Show child attributes
eventstring

Built-in or lowercase underscore event name.

action_namestring

Persisted trigger identity; preserve it.

segment_idinteger
contact_list_idinteger
resource_typestring

Frozen trigger resource type.

resource_idany

Frozen trigger resource id.

dataobject

Event-specific configuration.

stepsArray<any>

Ordered graph steps; exact typed fields are in $defs.flowStep.

dry_runbooleanfalse
idempotency_keystring

Required for non-dry-run persistence; reuse only for an exact retry.

confirmbooleanfalse

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,
        "expected_updated_at": "string",
        "expected_draft_revision_id": 0,
        "goal": "string",
        "composition_mode": "intent",
        "contract_id": "string",
        "brand_context_ref": "string",
        "validate_only": false,
        "design_mode_override": "premium_rich",
        "renegotiate": false,
        "user_instruction": "string",
        "creative_route_id": "string",
        "email_baseline_selections": [
          {
            "action_name": "string",
            "route_id": "string",
            "image_binding_ids": [
              "string"
            ]
          }
        ],
        "source_text": "string",
        "facts": [
          {
            "kind": "url",
            "value": "string",
            "description": "string",
            "requirement": "required"
          }
        ],
        "draft_meta": {
          "creative_route_id": "string",
          "concrete_anchor": "string",
          "why_this_earns_the_inbox": "string"
        },
        "trigger": {
          "event": "string",
          "action_name": "string",
          "segment_id": 0,
          "contact_list_id": 0,
          "resource_type": "string",
          "data": {}
        },
        "steps": [],
        "dry_run": false,
        "idempotency_key": "string",
        "confirm": false
      }
  }
}
const result = await client.callTool("nitro_compose_flow", {
  "name": "string",
  "mode": "create",
  "flow_id": 0,
  "expected_updated_at": "string",
  "expected_draft_revision_id": 0,
  "goal": "string",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "email_baseline_selections": [
    {
      "action_name": "string",
      "route_id": "string",
      "image_binding_ids": [
        "string"
      ]
    }
  ],
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "trigger": {
    "event": "string",
    "action_name": "string",
    "segment_id": 0,
    "contact_list_id": 0,
    "resource_type": "string",
    "data": {}
  },
  "steps": [],
  "dry_run": false,
  "idempotency_key": "string",
  "confirm": false
});
result = await session.call_tool("nitro_compose_flow", arguments={
  "name": "string",
  "mode": "create",
  "flow_id": 0,
  "expected_updated_at": "string",
  "expected_draft_revision_id": 0,
  "goal": "string",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "email_baseline_selections": [
    {
      "action_name": "string",
      "route_id": "string",
      "image_binding_ids": [
        "string"
      ]
    }
  ],
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "trigger": {
    "event": "string",
    "action_name": "string",
    "segment_id": 0,
    "contact_list_id": 0,
    "resource_type": "string",
    "data": {}
  },
  "steps": [],
  "dry_run": false,
  "idempotency_key": "string",
  "confirm": false
})
Request Body
{
  "name": "string",
  "mode": "create",
  "flow_id": 0,
  "expected_updated_at": "string",
  "expected_draft_revision_id": 0,
  "goal": "string",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "email_baseline_selections": [
    {
      "action_name": "string",
      "route_id": "string",
      "image_binding_ids": [
        "string"
      ]
    }
  ],
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "trigger": {
    "event": "string",
    "action_name": "string",
    "segment_id": 0,
    "contact_list_id": 0,
    "resource_type": "string",
    "data": {}
  },
  "steps": [],
  "dry_run": false,
  "idempotency_key": "string",
  "confirm": false
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_compose_campaign

destructive
TOOLnitro_compose_campaign

Create or edit an email/SMS broadcast draft; never delivers it. For creative email, start with composition_mode=intent and follow its exact next_call. patch preserves omitted fields; replace requires campaign_id and confirm, and clears omitted audience or schedule. Use nitro_compose_flow for automation and nitro_send_message for transactional mail.

Body

application/json
namestring

Campaign name; required when creating.

modestringcreatepatchreplacecreate

create a draft; patch supplied fields; replace all draft state and requires confirm.

campaign_idinteger
channelstringemailsmsemail

email or sms; immutable after creation.

goalstring
categorystringpromotionannouncementnewsletterwelcomereengagementtransactionalplainoutreach

Email job used to select a baseline.

composition_modestringintentdraftvalidategenerate

intent plans; validate checks; draft persists; generate composes and persists.

contract_idstring
brand_context_refstring
validate_onlybooleanfalse

Alias for validate; never persists.

design_mode_overridestringpremium_richpremium_minimalfounder_letterutility_plain
renegotiatebooleanfalse
user_instructionstring
creative_route_idstring

Intent-only route id; unavailable or invalid routes fail explicitly.

source_textstring

Untrusted source evidence; put authoring directions in user_instruction.

factsArray<object>

Literal evidence: required values must appear; available values may be used.

Show child attributes
kindstringurlimage_urloffer_codepricedeadlineoffercta_textrequired
valuestringrequired
descriptionstring

For image_url: truthful visible content for selection and alt text.

requirementstringrequiredavailablerequired
draft_metaobject

Optional authoring provenance; never blocks validation or persistence.

Show child attributes
creative_route_idstring
concrete_anchorstring
why_this_earns_the_inboxstring
subjectstring
preheaderstring
from_namestring
from_emailstring
reply_tostring
bodystring
plain_text_modestringderivedcustom

Whether plain text is derived or custom.

sectionsArray<object>

Email design sections; requires subject. Images accept public or nitro_ingest media_url/image_url, never raw signed_id.

themeobject

Brand-theme overrides. logo_url must be public or a nitro_ingest media_url/image_url, never raw signed_id.

template_idinteger
if_versioninteger

Version token for conflict-safe writes.

audienceobject

Target audience; all_contacts must be explicit.

Show child attributes
audience_typestringlistssegmentall_contacts

lists, segment, or all_contacts.

contact_list_idsArray<integer>
contact_list_idinteger

Deprecated single list id.

segment_idinteger
exclude_segment_idsArray<integer>

Suppressed segment ids; [] clears.

exclude_contact_list_idsArray<integer>

Suppressed list ids; [] clears.

scheduled_atstring<date-time>

ISO 8601 delivery time.

dry_runbooleanfalse
idempotency_keystring

Required for non-dry-run persistence; reuse only for an exact retry.

confirmbooleanfalse

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",
        "mode": "create",
        "campaign_id": 0,
        "channel": "email",
        "goal": "string",
        "category": "promotion",
        "composition_mode": "intent",
        "contract_id": "string",
        "brand_context_ref": "string",
        "validate_only": false,
        "design_mode_override": "premium_rich",
        "renegotiate": false,
        "user_instruction": "string",
        "creative_route_id": "string",
        "source_text": "string",
        "facts": [
          {
            "kind": "url",
            "value": "string",
            "description": "string",
            "requirement": "required"
          }
        ],
        "draft_meta": {
          "creative_route_id": "string",
          "concrete_anchor": "string",
          "why_this_earns_the_inbox": "string"
        },
        "subject": "string",
        "preheader": "string",
        "from_name": "string",
        "from_email": "string",
        "reply_to": "string",
        "body": "string",
        "plain_text_mode": "derived",
        "sections": [
          {}
        ],
        "theme": {},
        "template_id": 0,
        "if_version": 0,
        "audience": {
          "audience_type": "lists",
          "contact_list_ids": [
            0
          ],
          "contact_list_id": 0,
          "segment_id": 0,
          "exclude_segment_ids": [
            0
          ],
          "exclude_contact_list_ids": [
            0
          ]
        },
        "scheduled_at": "2024-01-15T09:30:00Z",
        "dry_run": false,
        "idempotency_key": "string",
        "confirm": false
      }
  }
}
const result = await client.callTool("nitro_compose_campaign", {
  "name": "string",
  "mode": "create",
  "campaign_id": 0,
  "channel": "email",
  "goal": "string",
  "category": "promotion",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "subject": "string",
  "preheader": "string",
  "from_name": "string",
  "from_email": "string",
  "reply_to": "string",
  "body": "string",
  "plain_text_mode": "derived",
  "sections": [
    {}
  ],
  "theme": {},
  "template_id": 0,
  "if_version": 0,
  "audience": {
    "audience_type": "lists",
    "contact_list_ids": [
      0
    ],
    "contact_list_id": 0,
    "segment_id": 0,
    "exclude_segment_ids": [
      0
    ],
    "exclude_contact_list_ids": [
      0
    ]
  },
  "scheduled_at": "2024-01-15T09:30:00Z",
  "dry_run": false,
  "idempotency_key": "string",
  "confirm": false
});
result = await session.call_tool("nitro_compose_campaign", arguments={
  "name": "string",
  "mode": "create",
  "campaign_id": 0,
  "channel": "email",
  "goal": "string",
  "category": "promotion",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "subject": "string",
  "preheader": "string",
  "from_name": "string",
  "from_email": "string",
  "reply_to": "string",
  "body": "string",
  "plain_text_mode": "derived",
  "sections": [
    {}
  ],
  "theme": {},
  "template_id": 0,
  "if_version": 0,
  "audience": {
    "audience_type": "lists",
    "contact_list_ids": [
      0
    ],
    "contact_list_id": 0,
    "segment_id": 0,
    "exclude_segment_ids": [
      0
    ],
    "exclude_contact_list_ids": [
      0
    ]
  },
  "scheduled_at": "2024-01-15T09:30:00Z",
  "dry_run": false,
  "idempotency_key": "string",
  "confirm": false
})
Request Body
{
  "name": "string",
  "mode": "create",
  "campaign_id": 0,
  "channel": "email",
  "goal": "string",
  "category": "promotion",
  "composition_mode": "intent",
  "contract_id": "string",
  "brand_context_ref": "string",
  "validate_only": false,
  "design_mode_override": "premium_rich",
  "renegotiate": false,
  "user_instruction": "string",
  "creative_route_id": "string",
  "source_text": "string",
  "facts": [
    {
      "kind": "url",
      "value": "string",
      "description": "string",
      "requirement": "required"
    }
  ],
  "draft_meta": {
    "creative_route_id": "string",
    "concrete_anchor": "string",
    "why_this_earns_the_inbox": "string"
  },
  "subject": "string",
  "preheader": "string",
  "from_name": "string",
  "from_email": "string",
  "reply_to": "string",
  "body": "string",
  "plain_text_mode": "derived",
  "sections": [
    {}
  ],
  "theme": {},
  "template_id": 0,
  "if_version": 0,
  "audience": {
    "audience_type": "lists",
    "contact_list_ids": [
      0
    ],
    "contact_list_id": 0,
    "segment_id": 0,
    "exclude_segment_ids": [
      0
    ],
    "exclude_contact_list_ids": [
      0
    ]
  },
  "scheduled_at": "2024-01-15T09:30:00Z",
  "dry_run": false,
  "idempotency_key": "string",
  "confirm": false
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_manage_domains

destructiveopen-world
TOOLnitro_manage_domains

Activate or select the Nitrosend brand-subdomain sender, or add, verify, diagnose, list, and remove customer sending domains. Receiving MX appears only after forward-all exists.

Body

application/json
operationstringprepare_brand_subdomainselect_brand_subdomainaddverifycheck_dnslistremoverequired

prepare_brand_subdomain locally materializes the shared-root sender and is idempotent. select_brand_subdomain selects a ready sender with optional local_part and apex. add registers a customer domain and returns required DNS records. verify checks provider and DNS readiness. check_dns diagnoses DNS and tracking HTTPS only. list returns domains, readiness, records, DMARC, and allowance use. remove requires domain_name and confirm; retry paired removal with unpair after showing its effect.

paramsobject

Operation-specific parameters.

Show child attributes
domain_namestring

Customer sending domain for add, verify, check_dns, or remove.

author_domainstring

Optional aligned visible From domain for Nitrosend SES.

local_partstring

Optional brand-subdomain From local part.

apexstring

Optional active Nitrosend sending apex.

unpairboolean

Confirm removal of the domain's identity pair.

confirmbooleanfalse

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": "prepare_brand_subdomain",
        "params": {
          "domain_name": "string",
          "author_domain": "string",
          "local_part": "string",
          "apex": "string",
          "unpair": true
        },
        "confirm": false
      }
  }
}
const result = await client.callTool("nitro_manage_domains", {
  "operation": "prepare_brand_subdomain",
  "params": {
    "domain_name": "string",
    "author_domain": "string",
    "local_part": "string",
    "apex": "string",
    "unpair": true
  },
  "confirm": false
});
result = await session.call_tool("nitro_manage_domains", arguments={
  "operation": "prepare_brand_subdomain",
  "params": {
    "domain_name": "string",
    "author_domain": "string",
    "local_part": "string",
    "apex": "string",
    "unpair": true
  },
  "confirm": false
})
Request Body
{
  "operation": "prepare_brand_subdomain",
  "params": {
    "domain_name": "string",
    "author_domain": "string",
    "local_part": "string",
    "apex": "string",
    "unpair": true
  },
  "confirm": false
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_configure_account

idempotent
TOOLnitro_configure_account

Read or configure sender defaults and test recipients. Use nitro_get_status for readiness; from_email explicitly selects an authorized, ready, brand-owned sending identity.

Parameters

from_namestringargument

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

from_emailstringargument

Exact visible From address to select. May use the apex when a ready aligned sending subdomain authorizes it.

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 content and readiness review with validation, spam/SMS analysis, preflight, and previews. Flow review needs exact revision_id; this never approves or sends.

Parameters

target_typestringtemplateflowcampaignrequiredargument

Entity type to review

target_idinteger>= 1requiredargument

Entity ID to review

revision_idinteger>= 1argument

Required for flows. Exact immutable flow revision to review.

contact_idinteger>= 1argument

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,
        "revision_id": 1,
        "contact_id": 1
      }
  }
}
const result = await client.callTool("nitro_review_delivery", {
  "target_type": "template",
  "target_id": 1,
  "revision_id": 1,
  "contact_id": 1
});
result = await session.call_tool("nitro_review_delivery", arguments={
  "target_type": "template",
  "target_id": 1,
  "revision_id": 1,
  "contact_id": 1
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_send_test_message

destructiveidempotentopen-world
TOOLnitro_send_test_message

Send one real email/SMS test for a template, campaign, or exact flow revision. Never approves or sends to an audience.

Parameters

target_typestringtemplateflowcampaignargument

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

target_idinteger>= 1argument

Target entity ID. Use with target_type.

latest_campaignbooleanfalseargument

Use the most recently created campaign in this brand.

template_idinteger>= 1argument

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

action_idinteger>= 1argument

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

revision_idinteger>= 1argument

Required for flow targets. Exact immutable flow revision to test.

channelstringautoemailsmsautoargument

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

contact_idinteger>= 1argument

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

Required for live test sends. Reuse the same stable key on retry to prevent duplicate delivery.

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,
        "revision_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,
  "revision_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,
  "revision_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

Approve or control flow/campaign delivery after review. Requires the reviewed brand sid; resume never publishes a draft, and flow publication requires its exact revision.

Parameters

target_typestringflowcampaignrequiredargument
target_idinteger>= 1requiredargument
expected_brand_sidstringrequiredargument

Copy meta.current_brand.sid from the reviewed result.

operationstringapproverejectliveschedulepauseresumecancelarchiverestoredeleterequiredargument

approve preflights; schedule is campaign-only; delete requires confirm and a never-sent draft.

scheduled_atstring<date-time>argument

Required for schedule.

revision_idinteger>= 1argument

Exact flow revision for approve, reject, or live.

confirm_send_to_allbooleanargument

Explicit all_contacts confirmation for live/schedule.

confirmbooleanargument

Required for delete.

idempotency_keystringargument

Campaign-live retry key; reuse only for the same send.

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,
        "expected_brand_sid": "string",
        "operation": "approve",
        "scheduled_at": "2024-01-15T09:30:00Z",
        "revision_id": 1,
        "confirm_send_to_all": true,
        "confirm": true,
        "idempotency_key": "string"
      }
  }
}
const result = await client.callTool("nitro_control_delivery", {
  "target_type": "flow",
  "target_id": 1,
  "expected_brand_sid": "string",
  "operation": "approve",
  "scheduled_at": "2024-01-15T09:30:00Z",
  "revision_id": 1,
  "confirm_send_to_all": true,
  "confirm": true,
  "idempotency_key": "string"
});
result = await session.call_tool("nitro_control_delivery", arguments={
  "target_type": "flow",
  "target_id": 1,
  "expected_brand_sid": "string",
  "operation": "approve",
  "scheduled_at": "2024-01-15T09:30:00Z",
  "revision_id": 1,
  "confirm_send_to_all": true,
  "confirm": true,
  "idempotency_key": "string"
})
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_idinteger>= 1argument

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

providerstringmailgunsespostmarkresendsendgridargument

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

Provider region where required, or the Mailgun sending domain

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

Required for non-dry-run append. Reuse the same key only for an exact retry. Update and patch are set operations and may omit it.

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

Read billing/plans, create operator-approved subscription or add-funds checkout URLs, and poll status. This tool never pays; the operator opens the URL. Prepaid balance is separate from plans.

Body

application/json
operationstringstatuscheckoutcheckout_statusplansadd_fundsfunding_purchase_statusrequired

Billing operation to perform

paramsobject

Operation-specific parameters.

Show child attributes
plan_idinteger

Plan ID (required for checkout)

amount_centsinteger

Integer amount in minor currency units

currencystring

Three-letter funding currency

idempotency_keystring

Stable key for this Add funds request

purchase_idinteger

Local funding purchase ID

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,
          "amount_cents": 0,
          "currency": "string",
          "idempotency_key": "string",
          "purchase_id": 0
        }
      }
  }
}
const result = await client.callTool("nitro_manage_billing", {
  "operation": "status",
  "params": {
    "plan_id": 0,
    "amount_cents": 0,
    "currency": "string",
    "idempotency_key": "string",
    "purchase_id": 0
  }
});
result = await session.call_tool("nitro_manage_billing", arguments={
  "operation": "status",
  "params": {
    "plan_id": 0,
    "amount_cents": 0,
    "currency": "string",
    "idempotency_key": "string",
    "purchase_id": 0
  }
})
Request Body
{
  "operation": "status",
  "params": {
    "plan_id": 0,
    "amount_cents": 0,
    "currency": "string",
    "idempotency_key": "string",
    "purchase_id": 0
  }
}
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_send_message

destructiveidempotentopen-world
TOOLnitro_send_message

Send one transactional email/SMS now. Use nitro_compose_campaign for broadcasts and nitro_compose_flow for sequences. Reuse idempotency_key only for an exact retry.

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

Transactional merge variables. Use in email templates as {{ data.order_id }} or nested paths like {{ data.customer.name }}.

idempotency_keystringargument

Required for live sends. Reuse the same stable key on retry to prevent duplicate delivery.

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_inbox

read-onlyidempotent
TOOLnitro_inbox

Read the agent queue or mailbox. Follow exact next_calls for older or truncated thread content.

Parameters

commandstringlist_queueget_itemvalidate_replylist_mailboxget_threadget_thread_pageget_message_bodyrequiredargument
action_item_idintegerargument
conversation_idintegerargument
before_occurred_atstringargument

Exact ISO 8601 thread cursor returned by get_thread or get_thread_page

before_message_idintegerargument

Exact thread cursor message id returned with before_occurred_at

message_idintegerargument
offsetinteger>= 0argument

Exact sanitized-body character offset returned by get_thread or get_message_body

statestringquarantineneeds_humanagent_readyhandledneeds_attentionallargument

Optional queue state filter; default needs_attention

statusstringopenclosedarchivedargument
querystringargument
inbox_idintegerargument
pageintegerargument
perintegerargument
brand_context_refstringargument

Current context ref for get_item/get_thread.

reply_context_digeststringargument

Current reply_context.context_digest required by validate_reply.

subjectstringargument
bodystringargument
htmlstringargument

Returns

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

nitro_inbox
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_inbox",
    "arguments": {
        "command": "list_queue",
        "action_item_id": 0,
        "conversation_id": 0,
        "before_occurred_at": "string",
        "before_message_id": 0,
        "message_id": 0,
        "offset": 0,
        "state": "quarantine",
        "status": "open",
        "query": "string",
        "inbox_id": 0,
        "page": 0,
        "per": 0,
        "brand_context_ref": "string",
        "reply_context_digest": "string",
        "subject": "string",
        "body": "string",
        "html": "string"
      }
  }
}
const result = await client.callTool("nitro_inbox", {
  "command": "list_queue",
  "action_item_id": 0,
  "conversation_id": 0,
  "before_occurred_at": "string",
  "before_message_id": 0,
  "message_id": 0,
  "offset": 0,
  "state": "quarantine",
  "status": "open",
  "query": "string",
  "inbox_id": 0,
  "page": 0,
  "per": 0,
  "brand_context_ref": "string",
  "reply_context_digest": "string",
  "subject": "string",
  "body": "string",
  "html": "string"
});
result = await session.call_tool("nitro_inbox", arguments={
  "command": "list_queue",
  "action_item_id": 0,
  "conversation_id": 0,
  "before_occurred_at": "string",
  "before_message_id": 0,
  "message_id": 0,
  "offset": 0,
  "state": "quarantine",
  "status": "open",
  "query": "string",
  "inbox_id": 0,
  "page": 0,
  "per": 0,
  "brand_context_ref": "string",
  "reply_context_digest": "string",
  "subject": "string",
  "body": "string",
  "html": "string"
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_inbox_action

destructiveopen-world
TOOLnitro_inbox_action

Mutate an agent inbox item or mailbox thread. Commands: send_reply, send_reply_test, mark_handled, request_human, release_to_agent, mark_quarantine.

Parameters

commandstringsend_replysend_reply_testmark_handledrequest_humanrelease_to_agentmark_quarantinerequiredargument

Inbox action command

action_item_idintegerargument

Queue item id for queue-gated commands

conversation_idintegerargument

Mailbox conversation id for reply commands

subjectstringargument

Optional reply subject for send_reply or send_reply_test

bodystringargument

Plain text reply body for send_reply or send_reply_test

htmlstringargument

Optional HTML reply body for send_reply or send_reply_test

reply_context_digeststringargument

Current reply_context.context_digest from nitro_inbox get_item/get_thread. Required for reply commands.

toArray<string>argument

Explicit test recipients for send_reply_test

idempotency_keystringargument

Required for all action commands

dry_runbooleanfalseargument

Validate send_reply or send_reply_test without creating or sending

Returns

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

nitro_inbox_action
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_inbox_action",
    "arguments": {
        "command": "send_reply",
        "action_item_id": 0,
        "conversation_id": 0,
        "subject": "string",
        "body": "string",
        "html": "string",
        "reply_context_digest": "string",
        "to": [
          "string"
        ],
        "idempotency_key": "string",
        "dry_run": false
      }
  }
}
const result = await client.callTool("nitro_inbox_action", {
  "command": "send_reply",
  "action_item_id": 0,
  "conversation_id": 0,
  "subject": "string",
  "body": "string",
  "html": "string",
  "reply_context_digest": "string",
  "to": [
    "string"
  ],
  "idempotency_key": "string",
  "dry_run": false
});
result = await session.call_tool("nitro_inbox_action", arguments={
  "command": "send_reply",
  "action_item_id": 0,
  "conversation_id": 0,
  "subject": "string",
  "body": "string",
  "html": "string",
  "reply_context_digest": "string",
  "to": [
    "string"
  ],
  "idempotency_key": "string",
  "dry_run": false
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

nitro_request_support

TOOLnitro_request_support

Submit support only when asked or tools cannot resolve the issue; never promote it. Send a complete message within 1500 characters; there is no truncation.

Parameters

subjectstringrequiredargument

Brief summary of the issue

messagestringrequiredargument

Complete, self-contained summary of the issue. Must fit within 1500 characters; do not rely on truncation.

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": "..."
    }
  ]
}

nitro_search_docs

read-onlyidempotent
TOOLnitro_search_docs

Search Nitrosend guides and API/MCP/CLI/integration references. Ground unestablished product claims in returned excerpts; search again or state what remains unverified.

Parameters

querystringrequiredargument

What to look up, e.g. 'verify sending domain', 'rest api authentication', 'cli install', 'connect cursor'

limitinteger6argument

Maximum results to return (default 6, max 10)

Returns

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

nitro_search_docs
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nitro_search_docs",
    "arguments": {
        "query": "string",
        "limit": 6
      }
  }
}
const result = await client.callTool("nitro_search_docs", {
  "query": "string",
  "limit": 6
});
result = await session.call_tool("nitro_search_docs", arguments={
  "query": "string",
  "limit": 6
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

Resources

guide

RESOURCEnitro://guide

Reference guide for unfamiliar Nitrosend vocabulary and workflows. Covers Nitrosend entities (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.

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 context: account, brand, sender identity, dashboard links, tier (free / paid / trusted), email and SMS volume used vs caps, onboarding checklist progress, 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-kit

RESOURCEnitro://brand-kit

The selected brand's Brand Kit identity. Returns brand_color, text_color, bg_color, font_heading, font_body, logo_url, company_name, company_description, physical_address, screenshot_url when a website screenshot exists, and the brand voice document. For local logo files, use nitro_ingest with image_data or upload reservation before setting logo_url. Creative intent contracts already include the canonical authoring context; read this resource for manual edits or deeper inspection.

Returns

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

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

providers

RESOURCEnitro://providers

Current email transport configuration and health. Shows whether delivery uses Nitrosend SES or a connected provider (Mailgun, SES, Postmark, Resend, SendGrid), domain verification status for each sending domain, and the explicitly selected sending identity.

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": "..."
    }
  ]
}

email-design

RESOURCEnitro://email-design

Deep email design reference for campaign, template, or flow email sections. Composition contracts already include selected design capsules; read this only when deeper archetype, color, imagery, whitespace, footer, or section-translation context is needed.

Returns

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

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

email-marketing

RESOURCEnitro://email-marketing

Deep email marketing reference for campaign, template, or flow email content. Composition contracts already include selected marketing capsules; read this only when deeper strategy, audience, lifecycle, copy, deliverability, compliance, or intent context is needed.

Returns

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

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

lifecycle

RESOURCEnitro://lifecycle

Canonical machine-readable lifecycle flow catalog. Includes priority order, goal aliases, real trigger events, trigger gating requirements, revenue rationale, and structured cadence for welcome, abandoned cart, browse abandonment, post-purchase, win-back, re-engagement, and newsletter flows.

Returns

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

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

docs

RESOURCEnitro://docs

The Nitrosend product documentation map: every guide, integration, CLI, concept, authentication, and REST API / MCP reference page with its path and summary. Use the nitro_search_docs tool to search the full documentation content for how-to and reference answers.

Returns

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

docs
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://docs"
  }
}
const result = await client.readResource("nitro://docs");
result = await session.read_resource("nitro://docs")
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. Creative intent contracts already include the authoritative memory projection; read this resource for explicit inspection or memory management. 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": "..."
    }
  ]
}

history

RESOURCEnitro://history

Unified account history combining notification events and MCP tool audit entries. Includes deliverability warnings, auto-pauses, suppressions, and tool-call audit records with timestamps, correlation IDs, payload summaries, and rollback eligibility.

Returns

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

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

fields

RESOURCEnitro://fields

Per-account contact field catalog grouped by category (contact, custom, enrichment, engagement, tag). Each entry includes key, category, field_type, label, promoted flag, and fill_rate (percentage of contacts with a value, null when not yet computed). Read this for field and segment-filter inspection. The authoring intent's merge grammar is authoritative for recipient-copy bindings; field-catalog membership alone does not make an entry safe or portable email content.

Returns

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

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

authoring-context

RESOURCEnitro://authoring-context/{ref}{?cursor}

Lossless paged read of the exact canonical brand authoring packet named by a composition contract. Start at its supplied ref URI, follow each exact next_uri, concatenate chunk.text in offset order, and verify packet_digest before filling that contract's draft call. A stale ref never returns current content under the old address.

Parameters

refstringrequiredpath
?cursorstringrequiredpath

Returns

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

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

outreach-campaign

RESOURCEnitro://outreach/campaigns/{campaign_id}

Bounded discovery-campaign detail: target profile, criterion coverage, spend budgets, funnel counters, source progress, degradation, and activation-ready inventory. Use nitro_manage_outreach for intent, estimate, start, pause, resume, cancel, and summary status.

Parameters

campaign_idstringrequiredpath

Returns

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

outreach-campaign
{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "nitro://outreach/campaigns/{campaign_id}"
  }
}
const result = await client.readResource("nitro://outreach/campaigns/{campaign_id}");
result = await session.read_resource("nitro://outreach/campaigns/{campaign_id}")
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": "..."
    }
  ]
}

lifecycle-setup

PROMPTlifecycle-setup

Review a brand site and draft the key lifecycle automation flows

Parameters

website_urlstringargument

Brand website to review and scrape, e.g. https://example.com

test_recipientstringargument

Email address that should receive flow test messages

Returns

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

lifecycle-setup
{
  "jsonrpc": "2.0",
  "method": "prompts/get",
  "params": {
    "name": "lifecycle-setup",
    "arguments": {
        "website_url": "<website_url>",
        "test_recipient": "<test_recipient>"
      }
  }
}
const result = await client.getPrompt("lifecycle-setup", {
  website_url: "<website_url>",
  test_recipient: "<test_recipient>",
});
result = await session.get_prompt("lifecycle-setup", arguments={
    "website_url": "<website_url>",
    "test_recipient": "<test_recipient>",
})
Response
{
  "content": [
    {
      "type": "text",
      "text": "..."
    }
  ]
}

onboard-brand-kit

PROMPTonboard-brand-kit

Set up Brand Kit identity for a new brand

Returns

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

onboard-brand-kit
{
  "jsonrpc": "2.0",
  "method": "prompts/get",
  "params": {
    "name": "onboard-brand-kit",
    "arguments": {}
  }
}
const result = await client.getPrompt("onboard-brand-kit");
result = await session.get_prompt("onboard-brand-kit")
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": "..."
    }
  ]
}