Nitrosend
Server Details
AI-native email marketing. Campaigns, automations, transactional, contacts, and analytics.
- Status
- Healthy
- Uptime
- 97.6% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- Nitrosend - AI Email Marketing
- Claude
- Nitrosend
TDQS
Scored across 28 tools
Broad tools such as nitro_manage_audience and nitro_query overlap with nitro_search_contacts, nitro_define_segment, and many entity-specific reads. Memory read/update is also split across nitro_get_memory and nitro_set_memory. Descriptions clarify intended use, but several boundary choices remain ambiguous.
All tools use the nitro_ prefix and snake_case, with a predominantly verb_noun pattern. A few names are verb-only or noun-only (nitro_query, nitro_ingest, nitro_inbox), but there is no chaotic mixing of conventions.
At 28 tools the surface is heavy, though the broad marketing platform scope justifies many of them. Some consolidation is still possible around memory, account/brand selection, and audience/search operations.
The set covers campaigns, flows, templates, transactional sends, contacts, segments, inbox, analytics, domains, providers, billing, brand assets, memory, docs, and support. Minor gaps exist around explicit delete/archive operations, but broad query/manage tools provide workarounds.
Available Tools
28 toolsnitro_compose_campaignADestructiveInspect
Draft email/SMS broadcasts; never sends. Creative email: composition_mode=intent, follow exact next_call. patch preserves omissions; replace needs campaign_id+confirm, clears omitted audience/schedule. Automation: nitro_compose_flow. Transactional: nitro_send_message.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| goal | No | ||
| mode | No | create | |
| name | No | Campaign name; required when creating. | |
| facts | No | Literal evidence: required values must appear; available values may be used. | |
| theme | No | Brand-theme overrides. logo_url must be public or a nitro_ingest media_url/image_url, never raw signed_id. | |
| channel | No | Immutable after creation. | |
| confirm | No | ||
| dry_run | No | ||
| subject | No | ||
| audience | No | Target audience; all_contacts must be explicit. | |
| category | No | Email job used to select a baseline. | |
| reply_to | No | ||
| sections | No | Email design sections; requires subject. Images accept public or nitro_ingest media_url/image_url, never raw signed_id. | |
| from_name | No | ||
| preheader | No | ||
| draft_meta | No | Optional authoring provenance; never blocks. | |
| from_email | No | ||
| if_version | No | Version token for conflict-safe writes. | |
| campaign_id | No | ||
| contract_id | No | ||
| renegotiate | No | ||
| source_text | No | Untrusted source evidence; put authoring directions in user_instruction. | |
| template_id | No | ||
| scheduled_at | No | ISO 8601 delivery time. | |
| validate_only | No | ||
| content_format | No | Match source. | |
| idempotency_key | No | Required for non-dry-run persistence; exact retry only. | |
| plain_text_mode | No | Text provenance. | |
| section_updates | No | Same entries as nitro_manage_template section_updates. | |
| composition_mode | No | intent plans; validate checks; draft persists; generate composes and persists. | |
| user_instruction | No | ||
| brand_context_ref | No | ||
| creative_route_id | No | Intent-only route id. | |
| design_mode_override | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real disclosure beyond the annotations: it tells the agent the tool never sends despite destructiveHint=true, and — critically — that replace clears omitted audience/schedule while patch preserves them. That is exactly the kind of irreversible-effect warning an agent needs before calling a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and free of filler; every clause carries routing or mutation information. The telegraphic style ('follow exact next_call', 'patch preserves omissions') is efficient but requires the agent to already know the surrounding mode model.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 35-parameter nested-object tool with no output schema and 49% schema coverage, the description is thin. It covers routing and the destructive replace semantics but omits the intent/next_call loop, idempotency and versioning expectations, and what a draft response looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 49% across 35 parameters, so the description does need to compensate. It clarifies composition_mode=intent, the patch/replace contract (campaign_id, confirm), and audience/schedule clearing, but says nothing about body, goal, sections, theme, idempotency_key, validate_only, or if_version beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Draft email/SMS broadcasts; never sends.' That single clause separates it from nitro_send_message and nitro_compose_flow, which are named explicitly. It stops short of stating what the create/patch/replace modes do as a whole, leaving the full purpose of a 35-param composer partly implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes three sibling cases: automation to nitro_compose_flow, transactional to nitro_send_message, creative email to composition_mode=intent with 'follow exact next_call'. It also states patch-vs-replace conditions (patch preserves omissions; replace needs campaign_id+confirm). It gives no guidance on the remaining composition_mode values or when to choose create over draft/validate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_compose_flowCDestructiveInspect
Live/paused flow saves publish. Creative email: composition_mode=intent, follow exact next_call. replace needs flow_id+confirm+draft revision; patch keeps other nodes. Go live: nitro_control_delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| mode | No | create: new; replace: whole graph; patch: name/email actions | create |
| name | No | Flow name; required on create. | |
| facts | No | Literal evidence: required values must appear; available values may be used. | |
| steps | No | ||
| confirm | No | ||
| dry_run | No | ||
| flow_id | No | ||
| trigger | No | ||
| draft_meta | No | Optional authoring provenance; never blocks. | |
| contract_id | No | ||
| renegotiate | No | ||
| source_text | No | Untrusted source evidence; put authoring directions in user_instruction. | |
| lifecycle_key | No | ||
| validate_only | No | ||
| idempotency_key | No | Required for non-dry-run persistence; exact retry only. | |
| composition_mode | No | intent: plan; validate: check; draft/generate: persist. | |
| user_instruction | No | ||
| brand_context_ref | No | ||
| creative_route_id | No | Intent-only sequence-wide route id. | |
| expected_updated_at | No | Prefer expected_draft_revision_id. | |
| design_mode_override | No | ||
| email_baseline_selections | No | Intent-only creative_routes[].id and image binding ids per email action_name. | |
| expected_draft_revision_id | No | Conflict-safe draft revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and openWorldHint, while the description adds that replace affects the whole graph and patch preserves other nodes. It does not explain confirmation effects, irreversibility, or the side effects of publishing a live/paused flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and mostly front-loaded, but telegraphic fragments like 'Live/paused flow saves publish' are ambiguous and reduce clarity. There is little wasted text, yet the structure is note-like rather than explanatory.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 24-parameter nested flow composer with no output schema, the description omits most invocation details and return/publish semantics. It provides critical mode hints but is not complete enough for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description maps composition_mode=intent, replace's flow_id/confirm/draft revision requirement, and patch behavior, which is useful. But with 24 parameters at 46% schema coverage, most inputs such as goal, facts, steps, trigger, source_text, and lifecycle_key remain unclarified, so the description does not compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The fragments imply flow saves/publish and creative email use, but never clearly state whether the tool creates, replaces, or patches a flow. Sibling differentiation exists through 'Go live: nitro_control_delivery', yet the overall purpose remains inferential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives conditional guidance for creative email, replace, and patch, and names nitro_control_delivery for go-live. However, it does not explain when to choose create vs replace vs patch, nor when to use this tool over siblings such as nitro_compose_campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_configure_accountAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reply_to | No | ||
| from_name | No | Sender display name (e.g. 'Acme Marketing') | |
| from_email | No | Exact visible From address to select. May use the apex when a ready aligned sending subdomain authorizes it. | |
| test_email_recipients | No | Saved test-send addresses; [] clears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutability, idempotency, and non-destructiveness, so the description adds the real value: from_email must be an authorized, ready, brand-owned identity, and test_email_recipients of [] clears the list. Still missing is what happens with omitted parameters (partial update vs reset) and what reading returns, which matters for a tool that claims to 'read' despite readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action and the sibling routing rule front-loaded; no filler. Slight cost is the 'Read or configure' hedge at the start, which could be sharpened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, all-optional mutation tool with no output schema, the description covers routing and identity constraints but omits update semantics (are unspecified fields preserved?), what a read invocation returns, and any error/validation behavior around unready identities. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description adds a genuine constraint on from_email beyond the schema text: it selects an authorized, ready, brand-owned sending identity. It reinforces the clearing semantics of test_email_recipients, though it says nothing about the undocumented reply_to parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource: reading/configuring sender defaults and test recipients, and points at nitro_get_status for readiness. It distinguishes itself from the status sibling but not from other configuration siblings like nitro_configure_providers or nitro_set_brand_kit, and 'Read or configure' leaves the tool's primary mode slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one useful routing rule ('Use nitro_get_status for readiness') and one selection rule for from_email. It does not say when to use this tool versus nitro_configure_providers, nitro_select_brand, or nitro_select_account, nor when calling it purely to read defaults is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_configure_providersBDestructiveIdempotentInspect
Configure API-key email providers or check connection status.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | Provider region where required, or the Mailgun sending domain | |
| api_key | No | Provider API key (required for configure, never returned in responses) | |
| provider | No | Email provider (required for configure) | |
| operation | Yes | configure sets BYO provider credentials; status checks current provider health | |
| api_secret | No | Optional provider secret (never returned in responses) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds essentially nothing beyond them: it does not warn that reconfiguring may overwrite existing BYO credentials, does not say the tool is credential-scoped, and does not reconcile the read-only 'status' mode with a tool flagged destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the primary action front-loaded, which is appropriate sizing for a 5-parameter tool. The trailing 'or check connection status' is slightly compressed but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description could have said what configure confirms or what a status check returns; it does neither. With full schema coverage and rich annotations the gap is survivable, but the description is thinner than the tool's mutation semantics warrant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including enums for operation and provider, so the schema already documents every parameter. The description contributes no syntax, format, or conditional-requirement detail (e.g. when region vs. api_secret is needed), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Configure API-key email providers') and names the two operating modes (configure vs. status). It is distinguishable from most siblings, but it never explicitly differentiates itself from the nearby nitro_configure_account or nitro_get_status, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'or check connection status' implies the two usage modes, and the operation enum mirrors that split, but there is no explicit guidance on when to choose this tool over nitro_configure_account, nitro_manage_domains, or nitro_get_status. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_control_deliveryBDestructiveInspect
Approve or control delivery after review. Restarting a paused flow may require a choice for contacts already in progress. revision_id can assert the current draft.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Required for delete. | |
| operation | Yes | approve preflights; schedule is campaign-only; delete requires confirm and a never-sent draft. | |
| target_id | Yes | ||
| resume_mode | No | For paused flows: stop current journeys, or restart waits and continue gradually. | |
| revision_id | No | Optional current-draft assertion for flow approve, reject, and live. | |
| target_type | Yes | ||
| scheduled_at | No | Required for schedule. | |
| idempotency_key | No | Campaign-live retry key; reuse only for the same send. | |
| expected_brand_sid | No | Optional reviewed-brand assertion. When available, copy meta.current_brand.sid from the reviewed result. | |
| confirm_send_to_all | No | Explicit all_contacts confirmation for live/schedule. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so the safety profile is covered. The description usefully adds that restarting a paused flow forces a choice about contacts already in progress and that revision_id asserts the current draft, but it stays silent on the irreversibility of delete/cancel and any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core approve/control action and followed by caveats. Nothing is padded, though the brevity comes at some cost to coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, multi-operation destructive tool with no output schema, the description is thin: it omits the operation set and the consequences of destructive branches (delete, cancel). Annotations cover the safety dimension and the schema covers parameters, so it is serviceable, but not fully adequate for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 80% and rich enum descriptions (operation, resume_mode, idempotency_key, confirm), the schema carries most of the load, so 3 is the baseline. The description adds marginal value by tying resume_mode to 'a choice for contacts already in progress' and revision_id to the draft assertion, but does not clarify the remaining parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a partial verb+resource ('Approve or control delivery') but only names the approve path, leaving the other nine operations (reject, live, schedule, pause, resume, cancel, archive, restore, delete) unstated. 'After review' loosely positions it relative to nitro_review_delivery, but 'control delivery' is broad enough that an agent cannot tell from the prose alone what the tool actually covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied sequencing is present ('after review', and the paused-flow restart caveat), which suggests when the tool is invoked in the delivery lifecycle. However, there is no explicit statement of when NOT to use it, nor a routing hint toward siblings like nitro_review_delivery or nitro_send_message, so selectability rests on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_define_segmentAIdempotentInspect
Preview or persist a filtered contact segment. preview_only defaults true; set false and provide name to save.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| filters | Yes | Flat AND filters or a boolean group tree of attribute/event filters. | |
| segment_id | No | ||
| preview_only | No | ||
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it non-read-only but idempotent and non-destructive; the description adds the crucial behavioural fact that the default is a dry-run preview and that persistence requires explicitly setting preview_only=false plus a name. That default-writes-nothing nuance is exactly the kind of context annotations cannot convey. It stops short of explaining idempotency_key or how segment_id alters behaviour.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, and the primary behavioural fact (preview by default) is front-loaded. Nothing is restated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool takes a recursive filter tree, an optional segment_id, and an idempotency_key, yet the description never says whether segment_id updates an existing segment, how idempotency_key is used, or what the preview returns. With no output schema and 20% parameter coverage, a two-sentence description leaves material gaps for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 20% schema description coverage, the description compensates by explaining preview_only's default and the conditional requirement that name is needed to persist — a constraint the schema does not encode (name is not listed as required). However the required, complex 'filters' tree and segment_id/idempotency_key receive no additional meaning beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (define/preview/persist) and resource (filtered contact segment), and the preview-vs-persist split is clear. It does not, however, differentiate itself from near-neighbours like nitro_search_contacts or nitro_manage_audience, which an agent may consider for overlapping contact-filtering work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete rule for the two modes ('preview_only defaults true; set false and provide name to save'), which is real when-to-use guidance for the persist path. But it never names an alternative tool or says when this tool is preferable to searching or managing audiences, so tool selection is still left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_get_insightsCRead-onlyIdempotentInspect
Get email analytics with trends, benchmarks, and recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | Yes | ||
| period | No | 30d | |
| entity_id | No | Required for flow/campaign/message scope |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world scope, so the safety profile is fully covered. The description adds that the response includes trends, benchmarks and recommendations, which is genuinely beyond the annotations, but it says nothing about auth scope requirements or how scope/entity_id affect the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with zero waste, but its brevity is achieved by omitting needed detail rather than by disciplined editing. It is appropriately front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, a scope enum that changes what entity_id means, and no output schema, the description should explain the scope/entity relationship and the shape of returned insights. It instead gives a generic one-liner, leaving the agent to reverse-engineer invocation from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only entity_id carries a schema description; scope and period rely on bare enums, giving 33% coverage. The description mentions no parameters at all, so the critical dependency that entity_id is required for flow/campaign/message scopes and only valid there is left entirely to the schema's single note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get email analytics') and names the payload (trends, benchmarks, recommendations), which tells an agent what class of tool this is. It does not differentiate from siblings such as nitro_review_delivery or nitro_get_status, which also read performance data, so the agent gets no routing signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusions. The agent must infer from the name alone that this is the analytics-reporting path rather than delivery review or status checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_get_memoryCRead-onlyIdempotentInspect
Read brand memory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile needs no repetition. The description adds nothing beyond that — no indication of what the memory contains, its scope ('brand' vs account), size, or whether retrieval is cheap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words, front-loaded and waste-free, so it passes the conciseness test. The terseness crosses into under-specification: every sentence earns its place because there is only one, and it carries too little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description is the only channel for explaining the return value, and it does not. An agent cannot tell whether it receives free-text brand facts, structured attributes, or an empty string, nor whether a prior nitro_select_brand call is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It does not, however, note that the brand must already be selected via nitro_select_brand.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Read' plus resource 'brand memory' names a specific resource, and the sibling nitro_set_memory hints at the write counterpart. However, 'memory' is never defined — what is stored, whether it is per-brand or per-account, and what comes back are all left opaque.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no acknowledgment of the nitro_set_memory sibling it obviously pairs with. The agent must infer that this is the retrieval half of a read/write pair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_get_statusBRead-onlyIdempotentInspect
Get current account context, sender identity, dashboard links, readiness, onboarding status, and recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds value by enumerating the data categories returned, but does not say whether the response is aggregated, whether it reflects cached vs live state, or what 'readiness' and 'recommendations' actually mean.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every item in the list is a distinct data category. The dense enumeration borders on a laundry list, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values, and it does enumerate the categories of data the agent will receive. It stops short of describing the shape or relative importance of those fields, but for a zero-arg read tool it is close to sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case — there is nothing for the description to disambiguate at the input layer, and the empty schema is self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and enumerates the concrete payload: account context, sender identity, dashboard links, readiness, onboarding status, recommendations. That is far more informative than the name alone. It does not, however, distinguish itself from the only other read-oriented sibling, nitro_get_insights, or from nitro_select_account / nitro_select_brand, which touch adjacent account state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives, no prerequisite (e.g. must an account be selected first?), and no exclusion. The presence of nitro_get_insights, nitro_select_account, and nitro_select_brand in the sibling list makes the omission meaningful — an agent cannot infer from the description which read tool to reach for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_import_contactsBInspect
Inline max 100 contacts returns contact_ids. CSV upload/finalize; contact list read-back requires options.list_ids. Limits: status guardrail or GET /v1/my/imports/spec. New contacts with email subscribe both channels; phone-only do not. Existing subscriptions stay unchanged; added email subscribes, added phone does not. CSV resource=leads creates inventory without verification or consent; read with nitro_query(entity:leads,filters.import_id).
| Name | Required | Description | Default |
|---|---|---|---|
| parser | No | default | |
| upload | No | Reserve upload; PUT CSV; finalize signed_id. | |
| columns | No | ||
| dry_run | No | ||
| options | No | Import options. | |
| records | No | ||
| resource | No | Inline contacts or CSV contacts/leads. | contacts |
| import_id | No | ||
| signed_id | No | Uploaded CSV signed ID. | |
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses real side effects: new contacts with email subscribe both channels while phone-only do not, existing subscriptions stay unchanged, and CSV resource=leads creates unverified inventory. That is valuable context the annotations don't provide. It stops short of explaining dry_run semantics or idempotency behavior, keeping it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is compact but written as telegraphic fragments ('CSV upload/finalize', 'Limits: status guardrail or GET /v1/my/imports/spec') with no clear lead sentence, opening instead on a second-order detail (inline max 100). Density comes at the cost of readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, nested, no-output-schema import tool, it covers the two main workflows and side effects but omits dry-run behavior, idempotency, and what CSV finalize returns. Adequate but with clear holes an agent would want filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 40% schema coverage across 10 parameters, the description partially compensates by explaining options.list_ids, the resource enum, the upload flow and the 100-record inline cap. It leaves dry_run, idempotency_key, parser, columns, and import_id unexplained, so meaningful gaps remain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the operation and its two modes (inline records vs CSV upload/finalize) and the lead-vs-contact resource distinction, which an agent can map onto the tool name. It lacks a clean front-loaded 'Import contacts' statement, but the specific mechanics still distinguish it from siblings like nitro_search_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives some conditional guidance ('contact list read-back requires options.list_ids', 'read with nitro_query(entity:leads,filters.import_id)') and points at GET /v1/my/imports/spec for limits. However, it never says when to pick this over nitro_ingest or nitro_manage_audience, so sibling routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_inboxCRead-onlyIdempotentInspect
Read the agent queue or mailbox. Follow next_calls for older or truncated thread content.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| bcc | No | ||
| per | No | Max 100 compact | |
| body | No | ||
| html | No | ||
| page | No | ||
| sort | No | ||
| view | No | Default compact | |
| query | No | Subject, preview, or sender | |
| since | No | ISO 8601 | |
| state | No | Default needs_attention | |
| offset | No | Body offset from get_thread/get_message_body | |
| sender | No | Sender fragment | |
| status | No | ||
| command | Yes | ||
| purpose | No | get_thread only | |
| subject | No | ||
| inbox_id | No | ||
| reply_all | No | ||
| message_id | No | ||
| reason_code | No | ||
| attachment_id | No | ||
| action_item_id | No | ||
| include_counts | No | ||
| attachment_refs | No | Signed upload references | |
| conversation_id | No | ||
| before_message_id | No | Cursor message id paired with before_occurred_at | |
| brand_context_ref | No | Ref from a prior read | |
| before_occurred_at | No | Thread cursor from get_thread/get_thread_page | |
| reply_context_digest | No | From get_item/get_thread; required by validate_reply | |
| acknowledge_unscanned | No | Operator accepted the unscanned-download risk |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive operation, so the description does not need to repeat that. It adds useful pagination/truncation context via next_calls, but omits command-specific behavior, defaults, prerequisites such as reply_context_digest, and return expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and contains no filler. The second sentence earns its place by adding a pagination behavior hint, though the overall brevity is under-specified for a 31-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-command tool with 31 parameters, no output schema, and low schema description coverage, the description is far too thin. It gives only a basic read framing and one pagination hint, leaving command semantics, parameter roles, defaults, and result shape largely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 31 parameters with only 45% schema description coverage, and the required command enum is central to invocation. The description explains neither command selection nor the meaning of any input parameter, and next_calls appears to be output guidance rather than schema semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a read verb with a queue/mailbox resource, making the broad purpose clear and distinguishing it from mutating inbox siblings. However, it does not cover the eight command modes such as thread retrieval, message-body retrieval, attachments, and validate_reply, so the full purpose remains underspecified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is to follow next_calls for older or truncated thread content. There is no explanation of when to use this tool versus sibling tools, and no guidance on choosing among its commands, such as list_queue, list_mailbox, get_thread, or validate_reply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_inbox_actionCDestructiveInspect
Compose from an inbox, reply, reserve attachments, triage, or set sender policy, read state and contact linkage. Compose requires inbox_id, to, subject and body; reuses an open thread with that recipient.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Overrides reply-all Cc | |
| to | No | Compose recipients, or test recipients for send_reply_test (first 5) | |
| bcc | No | ||
| body | No | Plain text compose or reply body | |
| html | No | HTML reply body | |
| read | No | ||
| filter | No | Triage: list_queue filters; needs expected_count | |
| upload | No | File metadata for reserve_attachment_upload | |
| command | Yes | ||
| dry_run | No | Validate compose or reply without sending | |
| subject | No | Compose or reply subject | |
| decision | No | ||
| inbox_id | No | For compose or set_sender_policy | |
| last_name | No | ||
| reply_all | No | Copy visible thread participants, excluding self | |
| contact_id | No | For set_contact | |
| first_name | No | ||
| matcher_type | No | ||
| matcher_value | No | ||
| action_item_id | No | Queue item id | |
| classification | No | ||
| create_contact | No | ||
| expected_count | No | ||
| action_item_ids | No | Triage: many items | |
| attachment_refs | No | Signed upload references | |
| conversation_id | No | Mailbox thread id for reply commands | |
| idempotency_key | No | Required | |
| last_read_message_id | No | ||
| reply_context_digest | No | From nitro_inbox get_item/get_thread; required for reply commands |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructive=true and openWorld=true. The description adds that compose reuses an open thread with the recipient, but it does not explain what destructive commands affect, whether actions are reversible, or how idempotency and dry_run behave. For a tool containing quarantine, spam classification, and sender-policy mutations, this is a significant behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the capability list and then compose constraints. There is no wasted wording, though the brevity is arguably too extreme for a 29-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-command, 29-parameter destructive tool with no output schema, the description is far too thin. It does not explain return values, command-specific prerequisites, idempotency, dry_run semantics, or the behavior of most mutating commands.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 59% across 29 parameters. The description states compose requires inbox_id, to, subject, and body and broadly maps action categories to command families, which adds some meaning beyond the schema. But command-specific parameter requirements remain largely undocumented for most of the 12 commands.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource and several verbs (compose, reply, reserve attachments, triage, set sender policy, read state, contact linkage), so the agent knows it is an inbox action surface. However, it omits several enum commands such as mark_handled, request_human, release_to_agent, mark_quarantine, classify_spam, and send_reply_test, and it does not clearly distinguish this tool from siblings like nitro_send_message or nitro_inbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The only conditional instruction is that compose requires inbox_id, to, subject, and body; the agent must infer how to choose among the 12 commands and against sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_ingestAInspect
Store a brand image (PNG, JPEG, GIF, WebP; max 10 MB) from image_file (ChatGPT attachment), image_data, image_url or upload then signed_id. Returns a durable email URL, up to 1200px wide.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| upload | No | Reserve a local-image upload; PUT bytes, then ingest its signed_id. | |
| filename | No | ||
| image_url | No | ||
| signed_id | No | ||
| image_data | No | ||
| image_file | No | ||
| description | No | Truthful visible content (alt text). | |
| content_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic write/open-world/non-destructive profile; the description goes further by naming the accepted MIME types, the 10 MB ceiling, the two-step upload handshake, and the return contract of a durable email URL capped at 1200px wide. It does not cover failure modes or what happens to existing assets on re-ingest, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads the action, formats, size cap, and accepted sources; the second states the return value. Nothing is repeated from the schema and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, zero-required tool with nested objects and no output schema, the description should say more about how to choose among the source paths (mutual exclusivity is only implied by 'or') and about the purpose of the unscoped kind/filename/content_type fields. The return value is described sufficiently for an agent to use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 22% schema coverage across 9 parameters, the description carries real weight and does the most important job: clarifying that the four image sources are alternative entry points and that image_file is a ChatGPT attachment object. However, it leaves kind, filename, content_type, and the description/alt-text parameter entirely unaddressed, so substantial gaps remain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Store a brand image') and immediately constrains it with supported formats and a 10 MB size limit. It also enumerates the four mutually exclusive input paths (image_file, image_data, image_url, upload then signed_id), so an agent knows exactly what the tool consumes and produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames the usage context — ingesting a brand image for email delivery, with the 'upload then signed_id' pattern spelled out as a two-step flow and image_file labeled as the ChatGPT attachment path. There are no explicit exclusions or named alternatives, but no sibling tool competes for this job, so the routing signal is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_manage_audienceCDestructiveInspect
Contacts, subscriptions, lists, events, segments, tags and prepaid email validation. Custom fields: attributes.data. Bulk adds and unsubscribes: nitro_import_contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes | manage_list action: create (name[, contact_ids|emails]), rename (list_id, name), delete (list_id), add_contacts|remove_contacts (list_id, contact_ids|emails). bulk_tag tag_action: add|remove|set (default add). set_subscription opt_out: true unsubscribes; suppress: true stops all email incl. transactional, false lifts it. | |
| confirm | No | Required for every delete. | |
| dry_run | No | ||
| operation | Yes | delete_contacts: one of list_id, segment_id, contact_ids. validate: exactly one of lead_ids, contact_channel_ids, contact_ids, list_id, segment_id, all_contacts: true. Its dry run quotes; pass quote_digest on execution to refuse audience or price drift. Execution needs idempotency_key, prepaid funds. | |
| idempotency_key | No | Same key returns the first result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is partly covered. The description adds essentially no behavioral context about deletion confirmation, dry-run behavior, idempotency, or prepaid validation requirements beyond what the schema already says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is only two sentences with no filler, and the bulk-operation alternative is easy to spot. The first sentence is a bare noun list rather than a front-loaded purpose statement, but the description is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-operation tool with a nested params object, the description is quite thin and does not orient the agent to the nine operations. The detailed schema and destructive annotations fill much of the gap, but the description itself does not complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameter meaning, including the nested params object. The description adds only a small hint about custom fields living under attributes.data and routes bulk operations elsewhere, which is marginal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates audience-related resource domains — contacts, subscriptions, lists, events, segments, tags — but does not state a specific verb or explain the multi-operation nature of the tool. It is enough to infer the broad domain, but it does not clearly distinguish the tool from siblings like nitro_define_segment or nitro_search_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes bulk adds and unsubscribes to nitro_import_contacts, which is useful. But there is no guidance on when to use this tool versus the other audience-related siblings, nor on choosing among its nine operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_manage_billingADestructiveIdempotentInspect
Read enabled account features and supported plans. payment_methods reads current cards. Checkout/add_funds require operator approval; poll afterward. Prepaid funds are separate; no live presented-credential rail is enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Parameters for the selected operation. | |
| operation | Yes | Start with status or features. | |
| idempotency_key | No | Required stable key for checkout and add_funds. Reuse it only for an unchanged request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, idempotentHint, openWorldHint), the description discloses that write operations need operator confirmation, must be polled, that prepaid funds are a separate track, and that no live presented-credential rail exists. This is meaningful behavioral context a caller cannot get from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded sentences with no wasted text; the primary read operations come first and the write caveats follow. The telegraphic style is dense but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-operation, nested-parameter, destructive tool with no output schema, the description is incomplete: it never explains status, plans, checkout_status, or funding_purchase_status, nor what polling returns. The safety and approval guidance is present, but the operation catalog is only partially covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters like confirm, idempotency_key, and instrument are already well documented in the schema. The description only lightly reinforces this ('payment_methods reads current cards') and adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (billing) and the primary operations: reading features/plans, reading payment methods, and checkout/add_funds. It is clearly distinct from the campaign/segment/contact siblings. It stops short of covering the status/checkout_status/funding_purchase_status operations, so an agent must open the enum to see the full surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It offers some operational guidance: checkout and add_funds require operator approval and polling afterward, and prepaid funds are separate. However, it does not tell the agent when to choose each of the eight operations over the others; the 'Start with status or features' routing hint lives only in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_manage_domainsBDestructiveInspect
Manage the brand’s Nitrosend sender and custom sending domains. Receiving MX requires forward-all.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Operation-specific parameters. | |
| confirm | No | Required for removal, renaming and subdomain-sharing changes. | |
| operation | Yes | Prepare/select a hosted sender or manage customer domains. Rename keeps old addresses receiving. Show a paired removal's effect before unpair. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the risk profile is covered structurally. The description adds the forward-all MX prerequisite, which is real behavioral context, but says nothing about which of the ten operations are destructive, whether removal is reversible, or that confirm gates removals/renames — that appears only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the resource scope front-loaded ahead of the prerequisite note. It is efficient, though the brevity is partly under-specification rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a ten-operation, destructive, nested-parameter tool with no output schema, the description is too thin: it never explains the prepare→select→verify lifecycle, which operations mutate vs read, or what a caller gets back. The schema fills much of the gap, but an agent cannot infer sequencing or consequences from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the operation enum is documented at the field level. The description adds no parameter meaning beyond that, which is the expected baseline when the schema carries the full load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (Nitrosend sender and custom sending domains) and a management verb, and no sibling tool overlaps this space. However, 'Manage' spans ten quite different operations (prepare/select/rename/add/verify/list/remove/share/revoke), so the agent only learns the broad domain of the tool, not the concrete actions, from the prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The one operational rule given — that receiving MX requires forward-all — is genuinely useful framing for choosing this tool. But there is no explicit when-to-use/when-not guidance and no routing to alternatives or prerequisites for the mutating operations; most such guidance lives in the operation enum description inside the schema rather than the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_manage_templateBDestructiveInspect
Create/edit reusable email templates; based_on clones. Creative work: composition_mode=intent, follow exact next_call. Exact edits: template_id, section_updates, if_version. Broadcasts: nitro_compose_campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Author text (plain) or custom text alternative (designed). | |
| goal | No | ||
| name | No | ||
| facts | No | Literal evidence: required values must appear; available values may be used. | |
| theme | No | Brand-theme overrides; logo_url uses public or nitro_ingest media_url/image_url, never signed_id. | |
| dry_run | No | ||
| subject | No | ||
| based_on | No | ||
| reply_to | No | ||
| sections | No | Email sections; use nitro://schema only for full authoring. Images use public or nitro_ingest media_url/image_url, never signed_id. | |
| from_name | No | ||
| preheader | No | ||
| draft_meta | No | Optional authoring provenance; never blocks. | |
| from_email | No | ||
| if_version | No | Version token for conflict-safe writes. | |
| contract_id | No | ||
| renegotiate | No | ||
| source_text | No | Untrusted source evidence; put authoring directions in user_instruction. | |
| template_id | No | ||
| validate_only | No | ||
| content_format | No | Match source. | |
| idempotency_key | No | Required for non-dry-run persistence; exact retry only. | |
| plain_text_mode | No | Text provenance. | |
| section_updates | No | Targeted section edits; never changes order or type. | |
| composition_mode | No | intent plans; validate checks; draft persists; generate composes and persists. | |
| user_instruction | No | ||
| brand_context_ref | No | ||
| creative_route_id | No | Intent-only route id. | |
| design_mode_override | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, readOnly=false, and openWorld=false, so safety is covered. The description adds workflow behavior such as based_on cloning and following next_call for intent mode, but does not explain persistence, validation, or what destructive edits affect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, starting with the core create/edit action before usage routing. It is efficient but somewhat telegraphic, especially the instruction to follow exact next_call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 29-parameter, deeply nested mutation tool with no output schema and only 45% schema description coverage, the description is too sparse. It provides useful mode routing but does not adequately explain the full parameter surface or operational behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 29 parameters and only 45% schema description coverage, the description should compensate substantially. It clarifies a few key parameters like template_id, section_updates, if_version, based_on, and composition_mode, but leaves most parameters undocumented in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create/edit reusable email templates, with based_on cloning. It also distinguishes the broadcast sibling via nitro_compose_campaign, though it does not fully clarify whether management includes delete/list operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing: creative work should use composition_mode=intent and follow the next call, while exact edits use template_id, section_updates, and if_version. It names nitro_compose_campaign for broadcasts, but lacks broader when-not guidance against other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_queryCRead-onlyIdempotentInspect
Query any Nitrosend entity. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| per | No | Max 50, default 25. | |
| page | No | Default 1. | |
| entity | Yes | Contact full text: nitro_search_contacts. | |
| filters | No | Filters: flows status/campaign_id/trigger_event/search; campaigns status/search; templates subject; segments/lists name; contacts query/subscribed_email/subscribed_phone/list_id; leads query/bucket/flow_id/import_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 id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description's only addition is 'Returns paginated results', which restates what the per/page params already imply; it does not explain ordering, truncation, or what the paginated envelope looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, and the resource scope is front-loaded ahead of the return note. It is efficient, though the brevity edges into under-specification for a tool spanning 13 entity types rather than being genuinely economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a broad, complex query tool with a nested filters object, 13 entity variants, and no output schema. The description never explains how filters combine, what the response envelope contains, or how it relates to sibling query/search tools, so it is not complete enough for an agent to call it confidently in ambiguous cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a detailed per-entity breakdown of valid filters and the enum list, so the schema carries the parameter burden completely. The description adds nothing beyond 'paginated results', which does not compensate for or enrich any parameter meaning – baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (query) and resource (Nitrosend entity) plus the return shape ('paginated results'), so the basic action is clear. But 'any entity' is so broad across 13 enum values that an agent cannot tell from the description how this differs from nitro_search_contacts or nitro_get_insights; that differentiation only appears buried in the entity parameter's schema text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description itself gives no when-to-use guidance, no prerequisites, and no named alternatives. The only routing hint ('Contact full text: nitro_search_contacts') lives in the schema's entity description, not the tool description, so the guidance is present but not where an agent reading the definition would naturally find it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_request_supportADestructiveInspect
Submit support only when asked or tools cannot resolve the issue; never promote it.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Complete, self-contained summary of the issue. Must fit within 1500 characters; do not rely on truncation. | |
| subject | Yes | Brief summary of the issue |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=false, so the agent knows this is a mutating, closed-world operation. The description adds important gating guidance about when not to submit support, but it does not explain the actual side effects or what "destructive" means for this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted text. The usage constraint and exclusion are stated compactly and clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully covers the two required inputs, and annotations cover safety characteristics. However, for a destructive support-submission tool, the description does not explain what submitting support actually does or what the destructive side effect is, leaving a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully documented in the schema, including the 1500-character limit for message. The description adds no parameter-specific information beyond what the schema already provides, which is acceptable given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Submit support." It clearly identifies the action as creating/support submission, though it relies on the title to clarify the full notion of a support request. No sibling tool is a support-request tool, so distinctness is adequate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage conditions: only when asked or when other tools cannot resolve the issue. It also adds an exclusion: never promote it. It does not name specific alternative tools, but the when/when-not guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_review_deliveryARead-onlyIdempotentInspect
Read-only content and readiness review with validation, spam/SMS analysis, preflight, and previews. Review either one account entity or bounded inline email content; this never approves or sends.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | Inline email review HTML. | |
| subject | No | Inline email review subject. | |
| target_id | No | ||
| contact_id | No | Merge-tag personalization contact. | |
| revision_id | No | Optional for flows. Omit to review the current draft, or supply its ID as a current-draft assertion. | |
| target_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered; the description adds value by enumerating the analyses performed (validation, spam/SMS analysis, preflight, previews) and explicitly confirming no approval or send side effect. It omits anything about permissions, latency, or how results are shaped, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, and the read-only framing is front-loaded before the scope and effect boundaries. Slightly list-like in the middle clause, but every item earns its place as a capability signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters, 67% schema coverage, and no output schema, the description should at least signal what a review returns or how a caller should combine target_id/target_type with html/subject. It covers the 'what it checks' side well but leaves the invocation-shape and result-interpretation side thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so several parameters (target_id, target_type enum, html/subject limits) are already documented. The description's 'either ... or' hints at the entity-vs-inline mode split, but it does not state that these two parameter groups are mutually exclusive or which must be pair-supplied, which is the single most important semantic for this zero-required-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — read-only content and readiness review with validation, spam/SMS analysis, preflight, and previews — and names the exact scope (one account entity or bounded inline email content). The closing 'never approves or sends' cleanly separates it from nitro_send_message and nitro_control_delivery without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'either one account entity or bounded inline email content' phrase implies the two invocation modes, which is useful routing guidance. However, it never states when an agent should call this versus nitro_send_test_message, nitro_control_delivery, or nitro_get_status, and there is no explicit prerequisite or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_search_contactsARead-onlyIdempotentInspect
Search contacts by email, name, or phone. Returns summary list or full profile.
| Name | Required | Description | Default |
|---|---|---|---|
| per | No | Max 50, default 25. | |
| mode | No | summary = list, profile = single contact detail (default: summary) | |
| page | No | Default 1. | |
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that results can be a summary list or full profile, but it omits matching behavior, pagination semantics, and output details beyond the mode names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The search capability is front-loaded and the return-shape note follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter search tool with no output schema, the description covers the core purpose and the two return modes but leaves important gaps around query matching semantics and pagination behavior. It is minimally adequate but not fully complete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with the required query parameter having no schema description. The description partially compensates by saying search covers email, name, or phone, but it does not explain query syntax, matching rules, or how per/page interact beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource, 'Search contacts,' and specifies the searchable fields: email, name, or phone. It also states the two possible return shapes, making the tool's purpose immediately clear without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies appropriate use as a contact lookup tool but gives no explicit guidance on when to use it versus alternatives such as nitro_query, nitro_import_contacts, or nitro_manage_audience. No exclusions, prerequisites, or alternative-routing advice are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_search_docsARead-onlyIdempotentInspect
Search Nitrosend guides and API/MCP/CLI/integration references. Ground unestablished product claims in returned excerpts; search again or state what remains unverified.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max 10. | |
| query | Yes | e.g. 'verify sending domain' or 'cli install' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral guidance beyond that — that results come back as excerpts meant to justify claims, and that the agent should re-search or flag unresolved gaps — but says nothing about result volume or ranking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the search scope is front-loaded and the grounding instruction follows immediately. Every clause carries usable direction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only search with full schema coverage and annotations carrying the safety profile, the description is largely sufficient, and 'returned excerpts' hints at output shape despite no output schema. Only minor gaps around result volume or ranking remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both query and limit already documented (including the 'Max 10' constraint and query examples). The description adds no additional parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Search) and a specific resource set (Nitrosend guides and API/MCP/CLI/integration references), which is clearly distinct from sibling lookups like nitro_search_contacts or nitro_query. It does not explicitly name an alternative, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use this to ground unestablished product claims in returned excerpts, and either search again or state what remains unverified. There is no explicit when-not or naming of alternative tools, keeping it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_select_accountAIdempotentInspect
Switch this OAuth MCP connection to an account listed by nitro_get_status; the next call uses it.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | From nitro_get_status available_accounts.items[*].id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds important behavioral context beyond those annotations: selecting an account changes the connection scope and affects the next call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no redundant information. It states the action, the source of the ID, and the immediate effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter selection tool with rich annotations and full schema coverage, the description covers what the tool does, where the parameter value comes from, and how the selection impacts subsequent calls. No output schema exists, so return-value explanation is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage and already specifies that account_id comes from nitro_get_status available_accounts.items[*].id. The description reinforces the source but does not add syntax, format, or validation details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: switching the OAuth MCP connection to an account. It also names the sibling tool that supplies valid account IDs, making the purpose immediately clear to an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the prerequisite source of account IDs via nitro_get_status and explains that the next call uses the selected account. It does not explicitly distinguish when to use this instead of nitro_configure_account, but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_select_brandAIdempotentInspect
Select the current brand for this OAuth MCP connection. Use this instead of passing brand_sid to other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Brand name to select when the SID is unknown. Provide either name or brand_sid. Ambiguous names return candidates without changing context. | |
| brand_sid | No | Exact brand SID to select. Provide either brand_sid or name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation is idempotent and non-destructive; the description adds the key extra fact that the effect is scoped to the connection, which is genuinely useful. It doesn't say what happens to a previously selected brand, whether selection persists across calls, or how the ambiguous-name candidate path leaves state untouched beyond what the schema already says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the action stated first and the routing rule second. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter, no-output-schema tool with full schema coverage, this is nearly complete: action, scope, and preferred usage are all covered. The gap is the relationship to nitro_select_account and whether a brand can be cleared or inspected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the name-vs-brand_sid either/or and the ambiguous-name behavior. The description only echoes brand_sid as the thing you'd otherwise pass elsewhere, adding no new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Select the current brand") scoped to "this OAuth MCP connection", so the agent knows it sets connection-level state rather than editing a brand record. It does not reference the obvious sibling nitro_select_account, so the differentiation from that tool is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: use this instead of passing brand_sid to other tools. It stops short of stating when not to use it (e.g. after a brand is already selected, or how it interacts with nitro_select_account).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_send_messageADestructiveIdempotentInspect
Send one transactional email/SMS. For bulk use campaigns/flows. Retry unchanged payload/key.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | Email or E.164 phone | |
| bcc | No | ||
| body | No | Plain text; required for SMS | |
| data | No | Merge variables, e.g. {{ data.order_id }} | |
| from | No | Email sender: Name <address> | |
| tags | No | Email tags | |
| channel | Yes | ||
| dry_run | No | Preview without sending | |
| headers | No | Email headers; reserved names rejected | |
| subject | No | ||
| reply_to | No | Reply address | |
| from_name | No | Sender name | |
| from_email | No | Verified brand sender address | |
| template_id | No | Email template ID | |
| idempotency_key | Yes | Reuse only for an exact retry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true and readOnlyHint=false, so the safety profile is known without the prose. The description adds genuine value by converting idempotentHint into an actionable retry rule (same payload AND same key), but it omits rate limits, verified-sender requirements, and what happens to a duplicate submission with a changed payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, zero filler, with the core action front-loaded before the bulk alternative and the retry rule. Every sentence earns its place and nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, nested-object, destructive send tool with no output schema, the definition covers the essentials: what it does, when not to use it, and how to retry safely. The remaining gap is channel-conditional requirements (SMS needs body, email needs a verified sender) and the test-message sibling, which the schema only partially compensates for.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% across 16 parameters, so the schema already documents most fields including to, body, from, data, dry_run, and headers. The description's only parameter-level contribution is constraining idempotency_key usage to exact retries, which the schema's 'Reuse only for an exact retry' already largely conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (send one transactional email/SMS) and scopes it to single-message use, which separates it from the bulk composing siblings. It says 'campaigns/flows' rather than naming nitro_compose_campaign and nitro_compose_flow directly, so the routing cue is inferable rather than explicit, and it never mentions nitro_send_test_message as the test-path alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-not ('For bulk use campaigns/flows') and an explicit retry rule ('Retry unchanged payload/key'), which tells the agent exactly when this tool is the right call versus a campaign/flow tool. It stops short of covering prerequisites such as sender verification or the test-vs-live distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_send_test_messageADestructiveIdempotentInspect
Send one real email/SMS test. Never approves or sends to an audience. Flows require an exact revision. Success confirms the mail provider accepted the send. Confirm receipt before approving; it does not prove inbox placement.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Email addresses or SMS E.164 numbers. | |
| data | No | Sample email data.* values. | |
| channel | No | Prefer auto. | auto |
| dry_run | No | Validate without sending. | |
| action_id | No | Select a flow message step. | |
| target_id | No | ||
| contact_id | No | Recipient and personalization. | |
| event_data | No | Sample email event.* data; no Event/Order writes. | |
| revision_id | No | Exact revision; required for flows. | |
| target_type | No | With target_id, or use template_id/latest_campaign. | |
| template_id | No | Template id; may select a flow/campaign email. | |
| idempotency_key | No | Required to send; exact retries only. | |
| latest_campaign | No | Latest campaign in this brand. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true; the description goes further by defining what a success response actually means ('the mail provider accepted the send') and its limits ('does not prove inbox placement'). That is exactly the kind of caveat an agent needs before treating a test send as proof of deliverability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the scope constraint and free of filler. It is telegraphic to the point that 'Confirm receipt before approving' depends on the reader already knowing the approval workflow context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, mutation-capable tool with no output schema, the description covers what success means and what it does not prove, which substitutes well for a missing return-value spec. It leaves ambiguous how to combine the multiple alternative recipient/target selectors, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 92%, so nearly every parameter is already documented, and the description's only parameter-adjacent statement ('Flows require an exact revision') restates the revision_id description. With the schema doing the heavy lifting across 13 parameters, the description adds no additional selection logic for the overlapping target_type/target_id/template_id/latest_campaign selectors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send one real email/SMS test') and immediately bounds the scope ('Never approves or sends to an audience'), which separates it cleanly from nitro_send_message. An agent can pick between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Never approves or sends to an audience' plus 'Confirm receipt before approving' gives clear context that this is a pre-approval verification step, and 'Flows require an exact revision' states a prerequisite. It stops short of naming nitro_send_message as the alternative for real audience sends, so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_set_brand_kitBIdempotentInspect
Set Brand Kit from a website, fields, document, or logo URL. Fields override scraping; async is URL-only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| mode | No | sync | |
| fields | No | ||
| dry_run | No | ||
| scan_id | No | ||
| document | No | ||
| logo_url | No | Public/Nitro image URL; ingest local logos first. | |
| new_brand | No | ||
| idempotency_key | No | Required for URL scraping or remote logo fetch; reuse only for an exact retry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, idempotentHint=true, readOnlyHint=false, and destructiveHint=false. The description adds the useful behavioral constraints that async is URL-only and that fields override scraping, but it does not explain side effects, permission requirements, or what happens to existing brand data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly packed sentences with the primary action first and the key constraints immediately after. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex mutation tool with 9 parameters, nested objects, no output schema, and very low schema description coverage. The description is too brief to cover the missing parameter semantics or the operational behavior of dry_run, scan_id, new_brand, and document.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 22% across 9 parameters, so the description must compensate and does not. It mentions the source parameters generally and the fields-override rule, but it leaves dry_run, scan_id, new_brand, document, url, and mode behavior largely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Set Brand Kit') and enumerates the four supported input sources: website, fields, document, and logo URL. It does not explicitly distinguish this tool from the sibling nitro_select_brand, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful conditional guidance: 'Fields override scraping' and 'async is URL-only.' However, it does not say when to use this tool versus nitro_select_brand or other brand-related siblings, and it provides no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nitro_set_memoryADestructiveIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | New content for the section (patch) or text to append (append). | |
| dry_run | No | ||
| heading | No | Section heading to patch (e.g. 'Brand Goals'). Required for patch operation. Matches ## headings. | |
| document | No | Full markdown document (required for update). | |
| operation | Yes | read: get current document. update: replace entirely. patch: replace a ## section by heading. append: add text to end. | |
| idempotency_key | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds destruction granularity ('replace entirely' vs 'replace a section' vs 'add to end'), but that same text is duplicated in the operation enum in the schema, and it omits dry_run and the idempotency_key requirement for append.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the purpose front-loaded before the operation list; nothing is padded. It loses a point only because the operation recap partially duplicates the schema enum descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter multi-operation write tool with no output schema, the description covers all four modes and their effects on the document. It is slightly thin on dry_run behavior and the retry/idempotency contract, which are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents content, heading, document, operation and idempotency_key. The description adds no parameter-level detail beyond that and says nothing about dry_run, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb set and resource ('Read or update the AI memory document') and enumerates the four operations with their effects, so an agent knows exactly what the tool does. It cannot differentiate against a sibling because no sibling memory tool exists, keeping it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Operation semantics ('read (get current)', 'update (replace entirely)', 'patch (replace a ## section)', 'append') imply which mode fits which need, but there is no explicit when-to-use/when-not guidance, no guidance on choosing patch over update, and no mention of the dry_run preview path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
nitro_compose_flow19 fields changed- removed
Input schema / $defs / flowStep / properties / branches / additionalPropertiesRemoved value: -{ - "items": { - "$ref": "#/$defs/flowStep" - }, - "type": "array" -} - removed
Input schema / $defs / flowStep / properties / categories / items / additionalPropertiesRemoved value: -false - removed
Input schema / $defs / flowStep / properties / categories / items / propertiesRemoved value: -{ - "description": { - "maxLength": 500, - "type": "string" - }, - "key": { - "pattern": "^[a-z][a-z0-9_]{0,39}$", - "type": "string" - }, - "label": { - "maxLength": 60, - "type": "string" - } -} - removed
Input schema / $defs / flowStep / properties / categories / items / requiredRemoved value: -[ - "key", - "label", - "description" -] - removed
Input schema / $defs / flowStep / properties / categories / maxItemsRemoved value: -6 - removed
Input schema / $defs / flowStep / properties / categories / minItemsRemoved value: -2 - removed
Input schema / $defs / flowStep / properties / design / descriptionRemoved value: -"Email {sections, theme} design." - removed
Input schema / $defs / flowStep / properties / duration / descriptionRemoved value: -"Wait seconds." - removed
Input schema / $defs / flowStep / properties / endpoint_configured / descriptionRemoved value: -"Frozen; copy next_call." - removed
Input schema / $defs / flowStep / properties / event_data / descriptionRemoved value: -"Static emitted-event data." - removed
Input schema / $defs / flowStep / properties / event_data_keys / descriptionRemoved value: -"Frozen non-secret keys; copy next_call." - removed
Input schema / $defs / flowStep / properties / event_name / descriptionRemoved value: -"Lowercase underscore event name." - removed
Input schema / $defs / flowStep / properties / forward_event_data / descriptionRemoved value: -"Forward triggering event data." - removed
Input schema / $defs / flowStep / properties / key / descriptionRemoved value: -"Retained new-node identity." - removed
Input schema / $defs / flowStep / properties / send_at / descriptionRemoved value: -"Local HH:MM after delay; allows duration 0." - removed
Input schema / $defs / flowStep / properties / time_zone / descriptionRemoved value: -"IANA; defaults to account, pinned on approval." - removed
Input schema / $defs / flowStep / properties / url / descriptionRemoved value: -"Webhook URL; supports merge tags." - changed
Input schema / properties / trigger / properties / reply_source / descriptionPrevious value: -"Email reply received preset. any has no id; other sources require an owned resource id."New value: +"Match replies to an owned source." - changed
Input schema / properties / trigger / properties / stop_on_reply / descriptionPrevious value: -"Stop only the answered enrollment. Requires monitored receiving."New value: +"Requires monitored receiving."
- Changed
nitro_control_delivery1 field changed- changed
Input schema / properties / resume_mode / descriptionPrevious value: -"For paused flows or resumable blocked journeys: stop existing journeys, or continue on their retained schedule."New value: +"For paused flows: stop current journeys, or restart waits and continue gradually."
2 tool updates
- Changed
nitro_compose_flow10 fields changed- removed
Input schema / $defs / flowStep / properties / bcc / descriptionRemoved value: -"BCC for a new-flow email only." - added
Input schema / $defs / flowStep / properties / bcc / itemsAdded value: +{ + "type": "string" +} - changed
Input schema / $defs / flowStep / properties / bcc / typePrevious value: -"string"New value: +[ + "string", + "array" +] - added
Input schema / $defs / flowStep / properties / branchesAdded value: +{ + "additionalProperties": { + "items": { + "$ref": "#/$defs/flowStep" + }, + "type": "array" + }, + "type": "object" +} - added
Input schema / $defs / flowStep / properties / categoriesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "description": { + "maxLength": 500, + "type": "string" + }, + "key": { + "pattern": "^[a-z][a-z0-9_]{0,39}$", + "type": "string" + }, + "label": { + "maxLength": 60, + "type": "string" + } + }, + "required": [ + "key", + "label", + "description" + ], + "type": "object" + }, + "maxItems": 6, + "minItems": 2, + "type": "array" +} - added
Input schema / $defs / flowStep / properties / ccAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / $defs / flowStep / properties / reply_allAdded value: +{ + "default": false, + "type": "boolean" +} - changed
Input schema / $defs / flowStep / properties / type / enumPrevious value: -[ - "email", - "sms", - "wait", - "split", - "emit_event", - "webhook", - "subscribe", - "unsubscribe" -]New value: +[ + "email", + "sms", + "wait", + "split", + "classify_reply", + "reply", + "emit_event", + "webhook", + "subscribe", + "unsubscribe" +] - added
Input schema / properties / trigger / properties / reply_sourceAdded value: +{ + "additionalProperties": false, + "description": "Email reply received preset. any has no id; other sources require an owned resource id.", + "properties": { + "id": { + "minimum": 1, + "type": "integer" + }, + "type": { + "enum": [ + "any", + "flow", + "campaign", + "message" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" +} - added
Input schema / properties / trigger / properties / stop_on_replyAdded value: +{ + "default": false, + "description": "Stop only the answered enrollment. Requires monitored receiving.", + "type": "boolean" +}
- Changed
nitro_control_delivery1 field changed- changed
Input schema / properties / resume_mode / descriptionPrevious value: -"For paused flows: stop current journeys, or restart waits and continue gradually."New value: +"For paused flows or resumable blocked journeys: stop existing journeys, or continue on their retained schedule."
2 tool updates
- Added
nitro_inbox - Added
nitro_inbox_action
1 tool update
- Changed
nitro_send_message2 fields changed- added
Input schema / properties / bccAdded value: +{ + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" +} - added
Input schema / properties / ccAdded value: +{ + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" +}
1 tool update
- Changed
nitro_manage_domains2 fields changed- changed
Input schema / properties / operation / enumPrevious value: -[ - "prepare_brand_subdomain", - "select_brand_subdomain", - "rename_brand_subdomain", - "add", - "verify", - "check_dns", - "list", - "remove", - "list_shared_subdomains", - "share_subdomain", - "revoke_shared_subdomain" -]New value: +[ + "prepare_brand_subdomain", + "select_brand_subdomain", + "rename_brand_subdomain", + "add", + "verify", + "list", + "remove", + "list_shared_subdomains", + "share_subdomain", + "revoke_shared_subdomain" +] - changed
Input schema / properties / params / properties / domain_name / descriptionPrevious value: -"Customer sending domain for add, verify, check_dns, or remove."New value: +"Customer sending domain for add, verify, or remove."
2 tool updates
- Changed
nitro_compose_flow15 fields changed- removed
Input schema / $defs / flowStep / properties / content_format / descriptionRemoved value: -"Match source." - changed
Input schema / $defs / flowStep / properties / endpoint_configured / descriptionPrevious value: -"Frozen endpoint marker; copy from next_call."New value: +"Frozen; copy next_call." - changed
Input schema / $defs / flowStep / properties / event_data_keys / descriptionPrevious value: -"Frozen non-secret keys; copy from next_call."New value: +"Frozen non-secret keys; copy next_call." - changed
Input schema / $defs / flowStep / properties / if_version / descriptionPrevious value: -"Version required for an existing email patch."New value: +"Required for existing email edits." - changed
Input schema / $defs / flowStep / properties / key / descriptionPrevious value: -"Scaffold identity for a retained new node."New value: +"Retained new-node identity." - removed
Input schema / $defs / flowStep / properties / plain_text_mode / descriptionRemoved value: -"Text provenance." - added
Input schema / $defs / flowStep / properties / send_atAdded value: +{ + "description": "Local HH:MM after delay; allows duration 0.", + "pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$", + "type": "string" +} - added
Input schema / $defs / flowStep / properties / time_zoneAdded value: +{ + "description": "IANA; defaults to account, pinned on approval.", + "type": "string" +} - changed
Input schema / properties / composition_mode / descriptionPrevious value: -"intent plans; validate checks; draft persists; generate composes and persists."New value: +"intent: plan; validate: check; draft/generate: persist." - changed
Input schema / properties / expected_draft_revision_id / descriptionPrevious value: -"Latest draft revision id for conflict-safe writes."New value: +"Conflict-safe draft revision." - changed
Input schema / properties / expected_updated_at / descriptionPrevious value: -"Legacy compatibility token; prefer draft revision id."New value: +"Prefer expected_draft_revision_id." - changed
Input schema / properties / mode / descriptionPrevious value: -"create: new graph; replace: whole draft graph; patch: name or selected email actions"New value: +"create: new; replace: whole graph; patch: name/email actions" - removed
Input schema / properties / steps / descriptionRemoved value: -"Ordered graph steps." - changed
Input schema / properties / trigger / properties / action_name / descriptionPrevious value: -"Persisted trigger identity; preserve it."New value: +"Preserve trigger identity." - added
Input schema / properties / trigger / properties / exit_eventsAdded value: +{ + "description": "Stop future steps on new matching events; pinned.", + "items": { + "pattern": "^[a-z][a-z0-9_]{0,63}$", + "type": "string" + }, + "maxItems": 20, + "type": "array" +}
- Changed
nitro_send_test_message12 fields changed- changed
Input schema / properties / action_id / descriptionPrevious value: -"For a flow with multiple message steps."New value: +"Select a flow message step." - changed
Input schema / properties / channel / descriptionPrevious value: -"Use auto unless a standalone template is ambiguous."New value: +"Prefer auto." - changed
Input schema / properties / contact_id / descriptionPrevious value: -"Supplies the recipient and merge-tag personalization."New value: +"Recipient and personalization." - changed
Input schema / properties / data / descriptionPrevious value: -"Sample values for required data.* merge fields in an email test."New value: +"Sample email data.* values." - changed
Input schema / properties / dry_run / descriptionPrevious value: -"Validate target and recipients without sending."New value: +"Validate without sending." - added
Input schema / properties / event_dataAdded value: +{ + "description": "Sample email event.* data; no Event/Order writes.", + "type": "object" +} - changed
Input schema / properties / idempotency_key / descriptionPrevious value: -"Required for live test sends; reuse only for an exact retry."New value: +"Required to send; exact retries only." - changed
Input schema / properties / latest_campaign / descriptionPrevious value: -"Most recently created campaign in this brand."New value: +"Latest campaign in this brand." - changed
Input schema / properties / revision_id / descriptionPrevious value: -"Required for flow targets: the exact flow revision."New value: +"Exact revision; required for flows." - changed
Input schema / properties / target_type / descriptionPrevious value: -"Use with target_id unless latest_campaign or template_id is used."New value: +"With target_id, or use template_id/latest_campaign." - changed
Input schema / properties / template_id / descriptionPrevious value: -"Template to test directly, or the specific flow/campaign template to choose."New value: +"Template id; may select a flow/campaign email." - changed
Input schema / properties / to / descriptionPrevious value: -"Email addresses, or E.164 phone numbers for SMS."New value: +"Email addresses or SMS E.164 numbers."
1 tool update
- Changed
nitro_manage_audience2 fields changed- changed
Input schema / properties / confirm / descriptionPrevious value: -"Required for delete_segment, delete_contacts, manage_list delete"New value: +"Required for every delete." - changed
Input schema / properties / params / descriptionPrevious value: -"manage_list action: create (name[, contact_ids|emails]), rename (list_id, name), delete (list_id), add_contacts|remove_contacts (list_id, contact_ids|emails). bulk_tag tag_action: add|remove|set (default add). set_subscription suppress: true stops all email incl. transactional; false lifts it."New value: +"manage_list action: create (name[, contact_ids|emails]), rename (list_id, name), delete (list_id), add_contacts|remove_contacts (list_id, contact_ids|emails). bulk_tag tag_action: add|remove|set (default add). set_subscription opt_out: true unsubscribes; suppress: true stops all email incl. transactional, false lifts it."
1 tool update
- Changed
nitro_manage_billing1 field changed- changed
Input schema / properties / params / properties / quantity / descriptionPrevious value: -"Additional inbox units to purchase. Only quantity-based offers accept more than one."New value: +"Number of units for a quantity-based offer, as returned by features. Other offers require one."
1 tool update
- Changed
nitro_control_delivery1 field changed- added
Input schema / properties / confirm / descriptionAdded value: +"Required for delete."
1 tool update
- Changed
nitro_set_brand_kit2 fields changed- changed
Input schema / properties / idempotency_key / descriptionPrevious value: -"Required for live URL scraping or remote logo fetch; reuse only for an exact retry."New value: +"Required for URL scraping or remote logo fetch; reuse only for an exact retry." - added
Input schema / properties / new_brandAdded value: +{ + "type": "string" +}
13 tool updates
- Changed
nitro_compose_campaign6 fields changed- removed
Input schema / properties / audience / properties / audience_type / descriptionRemoved value: -"lists, segment, or all_contacts." - changed
Input schema / properties / channel / descriptionPrevious value: -"email or sms; immutable after creation."New value: +"Immutable after creation." - changed
Input schema / properties / creative_route_id / descriptionPrevious value: -"Intent-only route id; unavailable or invalid routes fail explicitly."New value: +"Intent-only route id." - changed
Input schema / properties / draft_meta / descriptionPrevious value: -"Optional authoring provenance; never blocks validation or persistence."New value: +"Optional authoring provenance; never blocks." - removed
Input schema / properties / mode / descriptionRemoved value: -"create a draft; patch supplied fields; replace all draft state and requires confirm." - removed
Input schema / properties / validate_only / descriptionRemoved value: -"Alias for validate; never persists."
- Changed
nitro_compose_flow4 fields changed- changed
Input schema / properties / creative_route_id / descriptionPrevious value: -"Intent-only sequence-wide route id; invalid choices fail."New value: +"Intent-only sequence-wide route id." - changed
Input schema / properties / draft_meta / descriptionPrevious value: -"Optional authoring provenance; never blocks validation or persistence."New value: +"Optional authoring provenance; never blocks." - changed
Input schema / properties / steps / descriptionPrevious value: -"Ordered graph steps; exact typed fields are in $defs.flowStep."New value: +"Ordered graph steps." - removed
Input schema / properties / validate_only / descriptionRemoved value: -"Alias for validate; never persists."
- Changed
nitro_configure_account2 fields changed- removed
Input schema / properties / reply_to / descriptionRemoved value: -"Reply-to email address" - changed
Input schema / properties / test_email_recipients / descriptionPrevious value: -"Saved email addresses for test sends (max 5). Pass empty array to clear."New value: +"Saved test-send addresses; [] clears."
- Changed
nitro_control_delivery1 field changed- removed
Input schema / properties / confirm / descriptionRemoved value: -"Required for delete."
- Changed
nitro_get_insights2 fields changed- removed
Input schema / properties / period / descriptionRemoved value: -"Time period for metrics (default 30d)" - removed
Input schema / properties / scope / descriptionRemoved value: -"Scope of insights: account-wide, per flow, per campaign, or per message"
- Changed
nitro_manage_template4 fields changed- changed
Input schema / properties / creative_route_id / descriptionPrevious value: -"Intent-only route id; unavailable or invalid routes fail explicitly."New value: +"Intent-only route id." - changed
Input schema / properties / draft_meta / descriptionPrevious value: -"Optional authoring provenance; never blocks validation or persistence."New value: +"Optional authoring provenance; never blocks." - changed
Input schema / properties / sections / descriptionPrevious value: -"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."New value: +"Email sections; use nitro://schema only for full authoring. Images use public or nitro_ingest media_url/image_url, never signed_id." - removed
Input schema / properties / validate_only / descriptionRemoved value: -"Alias for validate; never persists."
- Changed
nitro_query2 fields changed- changed
Input schema / properties / page / descriptionPrevious value: -"Page number (default 1)"New value: +"Default 1." - changed
Input schema / properties / per / descriptionPrevious value: -"Results per page (max 50, default 25)"New value: +"Max 50, default 25."
- Changed
nitro_review_delivery5 fields changed- changed
Input schema / properties / contact_id / descriptionPrevious value: -"Optional contact ID for merge-tag personalization during review"New value: +"Merge-tag personalization contact." - changed
Input schema / properties / html / descriptionPrevious value: -"Rendered HTML for a self-contained inline email review"New value: +"Inline email review HTML." - changed
Input schema / properties / subject / descriptionPrevious value: -"Subject for a self-contained inline email review"New value: +"Inline email review subject." - removed
Input schema / properties / target_id / descriptionRemoved value: -"Entity ID to review" - removed
Input schema / properties / target_type / descriptionRemoved value: -"Entity type to review"
- Changed
nitro_search_contacts3 fields changed- changed
Input schema / properties / page / descriptionPrevious value: -"Page number (default 1)"New value: +"Default 1." - changed
Input schema / properties / per / descriptionPrevious value: -"Results per page (max 50, default 25)"New value: +"Max 50, default 25." - removed
Input schema / properties / query / descriptionRemoved value: -"Email address, name, or phone number"
- Changed
nitro_search_docs2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum results to return (default 6, max 10)"New value: +"Max 10." - changed
Input schema / properties / query / descriptionPrevious value: -"What to look up, e.g. 'verify sending domain', 'rest api authentication', 'cli install', 'connect cursor'"New value: +"e.g. 'verify sending domain' or 'cli install'"
- Changed
nitro_select_account1 field changed- changed
Input schema / properties / account_id / descriptionPrevious value: -"ID of the account to switch to. Get IDs from nitro_get_status.available_accounts.items[*].id."New value: +"From nitro_get_status available_accounts.items[*].id."
- Changed
nitro_send_test_message9 fields changed- changed
Input schema / properties / action_id / descriptionPrevious value: -"Flow action ID to test when a flow has multiple message steps."New value: +"For a flow with multiple message steps." - changed
Input schema / properties / channel / descriptionPrevious value: -"Channel to test. Use auto unless a standalone template is ambiguous."New value: +"Use auto unless a standalone template is ambiguous." - changed
Input schema / properties / contact_id / descriptionPrevious value: -"Contact ID for recipient and merge-tag personalization. If present, this contact supplies the recipient address/phone."New value: +"Supplies the recipient and merge-tag personalization." - changed
Input schema / properties / idempotency_key / descriptionPrevious value: -"Required for live test sends. Reuse the same stable key on retry to prevent duplicate delivery."New value: +"Required for live test sends; reuse only for an exact retry." - changed
Input schema / properties / latest_campaign / descriptionPrevious value: -"Use the most recently created campaign in this brand."New value: +"Most recently created campaign in this brand." - changed
Input schema / properties / revision_id / descriptionPrevious value: -"Required for flow targets. Exact immutable flow revision to test."New value: +"Required for flow targets: the exact flow revision." - removed
Input schema / properties / target_id / descriptionRemoved value: -"Target entity ID. Use with target_type." - changed
Input schema / properties / target_type / descriptionPrevious value: -"Target entity type. Use with target_id unless latest_campaign or template_id is used."New value: +"Use with target_id unless latest_campaign or template_id is used." - changed
Input schema / properties / to / descriptionPrevious value: -"Explicit test recipients. Use email addresses for email targets and E.164 phone numbers for SMS targets."New value: +"Email addresses, or E.164 phone numbers for SMS."
- Changed
nitro_set_brand_kit2 fields changed- removed
Input schema / properties / fields / descriptionRemoved value: -"Typed Brand Kit fields." - added
Input schema / properties / scan_idAdded value: +{ + "type": "string" +}
2 tool updates
- Changed
nitro_compose_flow1 field changed- added
Input schema / $defs / flowStep / properties / transactionalAdded value: +{ + "default": false, + "description": "Email: true for requested receipts/alerts, never promotions. Set on initial intent; copy edits preserve it. Suppression and abuse checks apply.", + "type": "boolean" +}
- Changed
nitro_send_message14 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"Message body. Required for SMS. Optional plain text for email."New value: +"Plain text; required for SMS" - removed
Input schema / properties / channel / descriptionRemoved value: -"Delivery channel" - changed
Input schema / properties / data / descriptionPrevious value: -"Transactional merge variables. Use in email templates as {{ data.order_id }} or nested paths like {{ data.customer.name }}."New value: +"Merge variables, e.g. {{ data.order_id }}" - changed
Input schema / properties / dry_run / descriptionPrevious value: -"Validate and preview without sending"New value: +"Preview without sending" - added
Input schema / properties / fromAdded value: +{ + "description": "Email sender: Name <address>", + "type": "string" +} - added
Input schema / properties / from_emailAdded value: +{ + "description": "Verified brand sender address", + "type": "string" +} - added
Input schema / properties / from_nameAdded value: +{ + "description": "Sender name", + "type": "string" +} - added
Input schema / properties / headersAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "Email headers; reserved names rejected", + "maxProperties": 20, + "type": "object" +} - changed
Input schema / properties / idempotency_key / descriptionPrevious value: -"Required for live sends. Reuse the same stable key on retry to prevent duplicate delivery."New value: +"Reuse only for an exact retry" - added
Input schema / properties / reply_toAdded value: +{ + "description": "Reply address", + "type": "string" +} - removed
Input schema / properties / subject / descriptionRemoved value: -"Email subject line (required for email)" - added
Input schema / properties / tagsAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Email tags", + "maxProperties": 20, + "type": "object" +} - changed
Input schema / properties / template_id / descriptionPrevious value: -"Load email design from an existing template (email only)"New value: +"Email template ID" - changed
Input schema / properties / to / descriptionPrevious value: -"Recipient email address or E.164 phone number"New value: +"Email or E.164 phone"
2 tool updates
- Changed
nitro_compose_campaign1 field changed- added
Input schema / properties / section_updatesAdded value: +{ + "description": "Same entries as nitro_manage_template section_updates.", + "items": { + "type": "object" + }, + "type": "array" +}
- Changed
nitro_manage_domains6 fields changed- changed
Input schema / properties / confirm / descriptionPrevious value: -"Required for remove and rename_brand_subdomain."New value: +"Required for removal, renaming and subdomain-sharing changes." - changed
Input schema / properties / operation / enumPrevious value: -[ - "prepare_brand_subdomain", - "select_brand_subdomain", - "rename_brand_subdomain", - "add", - "verify", - "check_dns", - "list", - "remove" -]New value: +[ + "prepare_brand_subdomain", + "select_brand_subdomain", + "rename_brand_subdomain", + "add", + "verify", + "check_dns", + "list", + "remove", + "list_shared_subdomains", + "share_subdomain", + "revoke_shared_subdomain" +] - added
Input schema / properties / params / properties / domain_idAdded value: +{ + "description": "The current brand's domain that owns the subdomain.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / params / properties / pageAdded value: +{ + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / params / properties / shared_domain_idAdded value: +{ + "description": "Shared sending-domain claim to revoke.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / params / properties / target_brand_sidAdded value: +{ + "description": "Exact destination brand; must be in this account or an eligible managed client.", + "type": "string" +}
1 tool update
- Changed
nitro_manage_billing1 field changed- added
Input schema / properties / params / properties / quantityAdded value: +{ + "description": "Additional inbox units to purchase. Only quantity-based offers accept more than one.", + "maximum": 10000, + "minimum": 1, + "type": "integer" +}
2 tool updates
- Added
nitro_get_memory - Changed
nitro_manage_domains1 field changed- changed
Input schema / properties / operation / descriptionPrevious value: -"prepare_brand_subdomain reserves params.subdomain (or company name) and prepares sending; idempotent.\nselect_brand_subdomain selects it; local_part and apex are optional.\nrename_brand_subdomain needs subdomain, expected_fqdn and confirm; old addresses keep receiving.\nadd returns DNS records. verify checks readiness. check_dns diagnoses DNS/HTTPS. list returns setup and allowances.\nremove needs domain_name and confirm; paired removal needs unpair after showing its effect."New value: +"Prepare/select a hosted sender or manage customer domains.\nRename keeps old addresses receiving. Show a paired removal's effect before unpair."
Publisher details
- Operator
- Nitrosend Pty Ltd · Publisher source
- Operator website
- https://nitrosend.com
- Vendor relationship
- First-party
- Documentation
- https://docs.nitrosend.com/integrations/overview
- Trust center
- https://nitrosend.com/security
- Restrictions
- A Nitrosend account is required. MCP accepts OAuth or a brand-scoped API key; free and paid plans include MCP, with send-volume and AI-action limits by plan. · Publisher source
Related MCP Connectors
Email marketing y transaccional AI-native: campañas, correos 1-a-1, contactos, flujos y métricas.
AI-controlled email ops for campaigns, contacts, segments, analytics, and sending.
AI-powered email outreach platform — send campaigns with deliverability tracking.
Run email marketing from your AI assistant: contacts, newsletters, automations, behavior emails.
Related MCP Servers
- AlicenseAqualityBmaintenanceFull email marketing platform for AI assistants — 32 MCP tools for campaigns, contacts, automations, A/B testing, AI content, multi-channel messaging, deliverability monitoring, and analytics.58154 npm1MIT

RuSender MCPofficial
AlicenseNot gradedqualityBmaintenanceEnables AI assistants to manage email campaigns, contact lists, analytics, A/B tests, and transactional emails through natural language, using OAuth for secure connection.MIT
Sequenzy MCP Serverofficial
AlicenseBqualityCmaintenanceEnables management of AI-powered email marketing automation, including subscriber segments, campaigns, and templates. It allows users to generate email sequences with AI and track detailed analytics through natural language commands.1001,704 npm3MIT- AlicenseNot gradedqualityBmaintenanceAI-native email marketing platform built for agents. Control campaigns, automations, contacts, templates, and analytics via MCP with OAuth authentication.117 npm164MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.