Skip to main content
Glama

Server Details

AI-native email marketing. Campaigns, automations, transactional, contacts, and analytics.

Ownership verified
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

B3.1/5.0

Scored across 28 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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 tools
nitro_compose_campaignA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
bodyNo
goalNo
modeNocreate
nameNoCampaign name; required when creating.
factsNoLiteral evidence: required values must appear; available values may be used.
themeNoBrand-theme overrides. logo_url must be public or a nitro_ingest media_url/image_url, never raw signed_id.
channelNoImmutable after creation.email
confirmNo
dry_runNo
subjectNo
audienceNoTarget audience; all_contacts must be explicit.
categoryNoEmail job used to select a baseline.
reply_toNo
sectionsNoEmail design sections; requires subject. Images accept public or nitro_ingest media_url/image_url, never raw signed_id.
from_nameNo
preheaderNo
draft_metaNoOptional authoring provenance; never blocks.
from_emailNo
if_versionNoVersion token for conflict-safe writes.
campaign_idNo
contract_idNo
renegotiateNo
source_textNoUntrusted source evidence; put authoring directions in user_instruction.
template_idNo
scheduled_atNoISO 8601 delivery time.
validate_onlyNo
content_formatNoMatch source.
idempotency_keyNoRequired for non-dry-run persistence; exact retry only.
plain_text_modeNoText provenance.
section_updatesNoSame entries as nitro_manage_template section_updates.
composition_modeNointent plans; validate checks; draft persists; generate composes and persists.
user_instructionNo
brand_context_refNo
creative_route_idNoIntent-only route id.
design_mode_overrideNo

TDQS

A4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_flowC
Destructive
Inspect

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.

NameRequiredDescriptionDefault
goalNo
modeNocreate: new; replace: whole graph; patch: name/email actionscreate
nameNoFlow name; required on create.
factsNoLiteral evidence: required values must appear; available values may be used.
stepsNo
confirmNo
dry_runNo
flow_idNo
triggerNo
draft_metaNoOptional authoring provenance; never blocks.
contract_idNo
renegotiateNo
source_textNoUntrusted source evidence; put authoring directions in user_instruction.
lifecycle_keyNo
validate_onlyNo
idempotency_keyNoRequired for non-dry-run persistence; exact retry only.
composition_modeNointent: plan; validate: check; draft/generate: persist.
user_instructionNo
brand_context_refNo
creative_route_idNoIntent-only sequence-wide route id.
expected_updated_atNoPrefer expected_draft_revision_id.
design_mode_overrideNo
email_baseline_selectionsNoIntent-only creative_routes[].id and image binding ids per email action_name.
expected_draft_revision_idNoConflict-safe draft revision.

TDQS

C2.8/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines3/5

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_accountA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
reply_toNo
from_nameNoSender display name (e.g. 'Acme Marketing')
from_emailNoExact visible From address to select. May use the apex when a ready aligned sending subdomain authorizes it.
test_email_recipientsNoSaved test-send addresses; [] clears.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_providersB
DestructiveIdempotent
Inspect

Configure API-key email providers or check connection status.

NameRequiredDescriptionDefault
regionNoProvider region where required, or the Mailgun sending domain
api_keyNoProvider API key (required for configure, never returned in responses)
providerNoEmail provider (required for configure)
operationYesconfigure sets BYO provider credentials; status checks current provider health
api_secretNoOptional provider secret (never returned in responses)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_deliveryB
Destructive
Inspect

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.

NameRequiredDescriptionDefault
confirmNoRequired for delete.
operationYesapprove preflights; schedule is campaign-only; delete requires confirm and a never-sent draft.
target_idYes
resume_modeNoFor paused flows: stop current journeys, or restart waits and continue gradually.
revision_idNoOptional current-draft assertion for flow approve, reject, and live.
target_typeYes
scheduled_atNoRequired for schedule.
idempotency_keyNoCampaign-live retry key; reuse only for the same send.
expected_brand_sidNoOptional reviewed-brand assertion. When available, copy meta.current_brand.sid from the reviewed result.
confirm_send_to_allNoExplicit all_contacts confirmation for live/schedule.

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines3/5

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_segmentA
Idempotent
Inspect

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

NameRequiredDescriptionDefault
nameNo
filtersYesFlat AND filters or a boolean group tree of attribute/event filters.
segment_idNo
preview_onlyNo
idempotency_keyNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_insightsC
Read-onlyIdempotent
Inspect

Get email analytics with trends, benchmarks, and recommendations.

NameRequiredDescriptionDefault
scopeYes
periodNo30d
entity_idNoRequired for flow/campaign/message scope

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_memoryC
Read-onlyIdempotent
Inspect

Read brand memory.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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_statusB
Read-onlyIdempotent
Inspect

Get current account context, sender identity, dashboard links, readiness, onboarding status, and recommendations.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

NameRequiredDescriptionDefault
parserNodefault
uploadNoReserve upload; PUT CSV; finalize signed_id.
columnsNo
dry_runNo
optionsNoImport options.
recordsNo
resourceNoInline contacts or CSV contacts/leads.contacts
import_idNo
signed_idNoUploaded CSV signed ID.
idempotency_keyNo

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness2/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_inboxC
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
ccNo
bccNo
perNoMax 100 compact
bodyNo
htmlNo
pageNo
sortNo
viewNoDefault compact
queryNoSubject, preview, or sender
sinceNoISO 8601
stateNoDefault needs_attention
offsetNoBody offset from get_thread/get_message_body
senderNoSender fragment
statusNo
commandYes
purposeNoget_thread only
subjectNo
inbox_idNo
reply_allNo
message_idNo
reason_codeNo
attachment_idNo
action_item_idNo
include_countsNo
attachment_refsNoSigned upload references
conversation_idNo
before_message_idNoCursor message id paired with before_occurred_at
brand_context_refNoRef from a prior read
before_occurred_atNoThread cursor from get_thread/get_thread_page
reply_context_digestNoFrom get_item/get_thread; required by validate_reply
acknowledge_unscannedNoOperator accepted the unscanned-download risk

TDQS

C2.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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_actionC
Destructive
Inspect

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.

NameRequiredDescriptionDefault
ccNoOverrides reply-all Cc
toNoCompose recipients, or test recipients for send_reply_test (first 5)
bccNo
bodyNoPlain text compose or reply body
htmlNoHTML reply body
readNo
filterNoTriage: list_queue filters; needs expected_count
uploadNoFile metadata for reserve_attachment_upload
commandYes
dry_runNoValidate compose or reply without sending
subjectNoCompose or reply subject
decisionNo
inbox_idNoFor compose or set_sender_policy
last_nameNo
reply_allNoCopy visible thread participants, excluding self
contact_idNoFor set_contact
first_nameNo
matcher_typeNo
matcher_valueNo
action_item_idNoQueue item id
classificationNo
create_contactNo
expected_countNo
action_item_idsNoTriage: many items
attachment_refsNoSigned upload references
conversation_idNoMailbox thread id for reply commands
idempotency_keyNoRequired
last_read_message_idNo
reply_context_digestNoFrom nitro_inbox get_item/get_thread; required for reply commands

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
kindNo
uploadNoReserve a local-image upload; PUT bytes, then ingest its signed_id.
filenameNo
image_urlNo
signed_idNo
image_dataNo
image_fileNo
descriptionNoTruthful visible content (alt text).
content_typeNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_audienceC
Destructive
Inspect

Contacts, subscriptions, lists, events, segments, tags and prepaid email validation. Custom fields: attributes.data. Bulk adds and unsubscribes: nitro_import_contacts.

NameRequiredDescriptionDefault
paramsYesmanage_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.
confirmNoRequired for every delete.
dry_runNo
operationYesdelete_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_keyNoSame key returns the first result.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines3/5

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_billingA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
paramsNoParameters for the selected operation.
operationYesStart with status or features.
idempotency_keyNoRequired stable key for checkout and add_funds. Reuse it only for an unchanged request.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_domainsB
Destructive
Inspect

Manage the brand’s Nitrosend sender and custom sending domains. Receiving MX requires forward-all.

NameRequiredDescriptionDefault
paramsNoOperation-specific parameters.
confirmNoRequired for removal, renaming and subdomain-sharing changes.
operationYesPrepare/select a hosted sender or manage customer domains. Rename keeps old addresses receiving. Show a paired removal's effect before unpair.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_templateB
Destructive
Inspect

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.

NameRequiredDescriptionDefault
bodyNoAuthor text (plain) or custom text alternative (designed).
goalNo
nameNo
factsNoLiteral evidence: required values must appear; available values may be used.
themeNoBrand-theme overrides; logo_url uses public or nitro_ingest media_url/image_url, never signed_id.
dry_runNo
subjectNo
based_onNo
reply_toNo
sectionsNoEmail sections; use nitro://schema only for full authoring. Images use public or nitro_ingest media_url/image_url, never signed_id.
from_nameNo
preheaderNo
draft_metaNoOptional authoring provenance; never blocks.
from_emailNo
if_versionNoVersion token for conflict-safe writes.
contract_idNo
renegotiateNo
source_textNoUntrusted source evidence; put authoring directions in user_instruction.
template_idNo
validate_onlyNo
content_formatNoMatch source.
idempotency_keyNoRequired for non-dry-run persistence; exact retry only.
plain_text_modeNoText provenance.
section_updatesNoTargeted section edits; never changes order or type.
composition_modeNointent plans; validate checks; draft persists; generate composes and persists.
user_instructionNo
brand_context_refNo
creative_route_idNoIntent-only route id.
design_mode_overrideNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_queryC
Read-onlyIdempotent
Inspect

Query any Nitrosend entity. Returns paginated results.

NameRequiredDescriptionDefault
perNoMax 50, default 25.
pageNoDefault 1.
entityYesContact full text: nitro_search_contacts.
filtersNoFilters: 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

C2.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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_supportA
Destructive
Inspect

Submit support only when asked or tools cannot resolve the issue; never promote it.

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

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_deliveryA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
htmlNoInline email review HTML.
subjectNoInline email review subject.
target_idNo
contact_idNoMerge-tag personalization contact.
revision_idNoOptional for flows. Omit to review the current draft, or supply its ID as a current-draft assertion.
target_typeNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_contactsA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
perNoMax 50, default 25.
modeNosummary = list, profile = single contact detail (default: summary)
pageNoDefault 1.
queryYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_docsA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
limitNoMax 10.
queryYese.g. 'verify sending domain' or 'cli install'

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_accountA
Idempotent
Inspect

Switch this OAuth MCP connection to an account listed by nitro_get_status; the next call uses it.

NameRequiredDescriptionDefault
account_idYesFrom nitro_get_status available_accounts.items[*].id.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_brandA
Idempotent
Inspect

Select the current brand for this OAuth MCP connection. Use this instead of passing brand_sid to other tools.

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

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_messageA
DestructiveIdempotent
Inspect

Send one transactional email/SMS. For bulk use campaigns/flows. Retry unchanged payload/key.

NameRequiredDescriptionDefault
ccNo
toYesEmail or E.164 phone
bccNo
bodyNoPlain text; required for SMS
dataNoMerge variables, e.g. {{ data.order_id }}
fromNoEmail sender: Name <address>
tagsNoEmail tags
channelYes
dry_runNoPreview without sending
headersNoEmail headers; reserved names rejected
subjectNo
reply_toNoReply address
from_nameNoSender name
from_emailNoVerified brand sender address
template_idNoEmail template ID
idempotency_keyYesReuse only for an exact retry

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_messageA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
toNoEmail addresses or SMS E.164 numbers.
dataNoSample email data.* values.
channelNoPrefer auto.auto
dry_runNoValidate without sending.
action_idNoSelect a flow message step.
target_idNo
contact_idNoRecipient and personalization.
event_dataNoSample email event.* data; no Event/Order writes.
revision_idNoExact revision; required for flows.
target_typeNoWith target_id, or use template_id/latest_campaign.
template_idNoTemplate id; may select a flow/campaign email.
idempotency_keyNoRequired to send; exact retries only.
latest_campaignNoLatest campaign in this brand.

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_kitB
Idempotent
Inspect

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

NameRequiredDescriptionDefault
urlNo
modeNosync
fieldsNo
dry_runNo
scan_idNo
documentNo
logo_urlNoPublic/Nitro image URL; ingest local logos first.
new_brandNo
idempotency_keyNoRequired for URL scraping or remote logo fetch; reuse only for an exact retry.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_memoryA
DestructiveIdempotent
Inspect

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

NameRequiredDescriptionDefault
contentNoNew content for the section (patch) or text to append (append).
dry_runNo
headingNoSection heading to patch (e.g. 'Brand Goals'). Required for patch operation. Matches ## headings.
documentNoFull markdown document (required for update).
operationYesread: get current document. update: replace entirely. patch: replace a ## section by heading. append: add text to end.
idempotency_keyNoRequired 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

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 2 tool updates
    • Changednitro_compose_flow19 fields changed
      • removedInput schema / $defs / flowStep / properties / branches / additionalProperties
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/flowStep"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / $defs / flowStep / properties / categories / items / additionalProperties
        Removed value: -false
      • removedInput schema / $defs / flowStep / properties / categories / items / properties
        Removed value: -{
        -  "description": {
        -    "maxLength": 500,
        -    "type": "string"
        -  },
        -  "key": {
        -    "pattern": "^[a-z][a-z0-9_]{0,39}$",
        -    "type": "string"
        -  },
        -  "label": {
        -    "maxLength": 60,
        -    "type": "string"
        -  }
        -}
      • removedInput schema / $defs / flowStep / properties / categories / items / required
        Removed value: -[
        -  "key",
        -  "label",
        -  "description"
        -]
      • removedInput schema / $defs / flowStep / properties / categories / maxItems
        Removed value: -6
      • removedInput schema / $defs / flowStep / properties / categories / minItems
        Removed value: -2
      • removedInput schema / $defs / flowStep / properties / design / description
        Removed value: -"Email {sections, theme} design."
      • removedInput schema / $defs / flowStep / properties / duration / description
        Removed value: -"Wait seconds."
      • removedInput schema / $defs / flowStep / properties / endpoint_configured / description
        Removed value: -"Frozen; copy next_call."
      • removedInput schema / $defs / flowStep / properties / event_data / description
        Removed value: -"Static emitted-event data."
      • removedInput schema / $defs / flowStep / properties / event_data_keys / description
        Removed value: -"Frozen non-secret keys; copy next_call."
      • removedInput schema / $defs / flowStep / properties / event_name / description
        Removed value: -"Lowercase underscore event name."
      • removedInput schema / $defs / flowStep / properties / forward_event_data / description
        Removed value: -"Forward triggering event data."
      • removedInput schema / $defs / flowStep / properties / key / description
        Removed value: -"Retained new-node identity."
      • removedInput schema / $defs / flowStep / properties / send_at / description
        Removed value: -"Local HH:MM after delay; allows duration 0."
      • removedInput schema / $defs / flowStep / properties / time_zone / description
        Removed value: -"IANA; defaults to account, pinned on approval."
      • removedInput schema / $defs / flowStep / properties / url / description
        Removed value: -"Webhook URL; supports merge tags."
      • changedInput schema / properties / trigger / properties / reply_source / description
        Previous value: -"Email reply received preset. any has no id; other sources require an owned resource id."New value: +"Match replies to an owned source."
      • changedInput schema / properties / trigger / properties / stop_on_reply / description
        Previous value: -"Stop only the answered enrollment. Requires monitored receiving."New value: +"Requires monitored receiving."
    • Changednitro_control_delivery1 field changed
      • changedInput schema / properties / resume_mode / description
        Previous 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. 2 tool updates
    • Changednitro_compose_flow10 fields changed
      • removedInput schema / $defs / flowStep / properties / bcc / description
        Removed value: -"BCC for a new-flow email only."
      • addedInput schema / $defs / flowStep / properties / bcc / items
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / $defs / flowStep / properties / bcc / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "array"
        +]
      • addedInput schema / $defs / flowStep / properties / branches
        Added value: +{
        +  "additionalProperties": {
        +    "items": {
        +      "$ref": "#/$defs/flowStep"
        +    },
        +    "type": "array"
        +  },
        +  "type": "object"
        +}
      • addedInput schema / $defs / flowStep / properties / categories
        Added 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"
        +}
      • addedInput schema / $defs / flowStep / properties / cc
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / $defs / flowStep / properties / reply_all
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • changedInput schema / $defs / flowStep / properties / type / enum
        Previous value: -[
        -  "email",
        -  "sms",
        -  "wait",
        -  "split",
        -  "emit_event",
        -  "webhook",
        -  "subscribe",
        -  "unsubscribe"
        -]New value: +[
        +  "email",
        +  "sms",
        +  "wait",
        +  "split",
        +  "classify_reply",
        +  "reply",
        +  "emit_event",
        +  "webhook",
        +  "subscribe",
        +  "unsubscribe"
        +]
      • addedInput schema / properties / trigger / properties / reply_source
        Added 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"
        +}
      • addedInput schema / properties / trigger / properties / stop_on_reply
        Added value: +{
        +  "default": false,
        +  "description": "Stop only the answered enrollment. Requires monitored receiving.",
        +  "type": "boolean"
        +}
    • Changednitro_control_delivery1 field changed
      • changedInput schema / properties / resume_mode / description
        Previous 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."
  3. 2 tool updates
    • Addednitro_inbox
    • Addednitro_inbox_action
  4. 1 tool update
    • Changednitro_send_message2 fields changed
      • addedInput schema / properties / bcc
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
      • addedInput schema / properties / cc
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
  5. 1 tool update
    • Changednitro_manage_domains2 fields changed
      • changedInput schema / properties / operation / enum
        Previous 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"
        +]
      • changedInput schema / properties / params / properties / domain_name / description
        Previous value: -"Customer sending domain for add, verify, check_dns, or remove."New value: +"Customer sending domain for add, verify, or remove."
  6. 2 tool updates
    • Changednitro_compose_flow15 fields changed
      • removedInput schema / $defs / flowStep / properties / content_format / description
        Removed value: -"Match source."
      • changedInput schema / $defs / flowStep / properties / endpoint_configured / description
        Previous value: -"Frozen endpoint marker; copy from next_call."New value: +"Frozen; copy next_call."
      • changedInput schema / $defs / flowStep / properties / event_data_keys / description
        Previous value: -"Frozen non-secret keys; copy from next_call."New value: +"Frozen non-secret keys; copy next_call."
      • changedInput schema / $defs / flowStep / properties / if_version / description
        Previous value: -"Version required for an existing email patch."New value: +"Required for existing email edits."
      • changedInput schema / $defs / flowStep / properties / key / description
        Previous value: -"Scaffold identity for a retained new node."New value: +"Retained new-node identity."
      • removedInput schema / $defs / flowStep / properties / plain_text_mode / description
        Removed value: -"Text provenance."
      • addedInput schema / $defs / flowStep / properties / send_at
        Added value: +{
        +  "description": "Local HH:MM after delay; allows duration 0.",
        +  "pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$",
        +  "type": "string"
        +}
      • addedInput schema / $defs / flowStep / properties / time_zone
        Added value: +{
        +  "description": "IANA; defaults to account, pinned on approval.",
        +  "type": "string"
        +}
      • changedInput schema / properties / composition_mode / description
        Previous value: -"intent plans; validate checks; draft persists; generate composes and persists."New value: +"intent: plan; validate: check; draft/generate: persist."
      • changedInput schema / properties / expected_draft_revision_id / description
        Previous value: -"Latest draft revision id for conflict-safe writes."New value: +"Conflict-safe draft revision."
      • changedInput schema / properties / expected_updated_at / description
        Previous value: -"Legacy compatibility token; prefer draft revision id."New value: +"Prefer expected_draft_revision_id."
      • changedInput schema / properties / mode / description
        Previous 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"
      • removedInput schema / properties / steps / description
        Removed value: -"Ordered graph steps."
      • changedInput schema / properties / trigger / properties / action_name / description
        Previous value: -"Persisted trigger identity; preserve it."New value: +"Preserve trigger identity."
      • addedInput schema / properties / trigger / properties / exit_events
        Added 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"
        +}
    • Changednitro_send_test_message12 fields changed
      • changedInput schema / properties / action_id / description
        Previous value: -"For a flow with multiple message steps."New value: +"Select a flow message step."
      • changedInput schema / properties / channel / description
        Previous value: -"Use auto unless a standalone template is ambiguous."New value: +"Prefer auto."
      • changedInput schema / properties / contact_id / description
        Previous value: -"Supplies the recipient and merge-tag personalization."New value: +"Recipient and personalization."
      • changedInput schema / properties / data / description
        Previous value: -"Sample values for required data.* merge fields in an email test."New value: +"Sample email data.* values."
      • changedInput schema / properties / dry_run / description
        Previous value: -"Validate target and recipients without sending."New value: +"Validate without sending."
      • addedInput schema / properties / event_data
        Added value: +{
        +  "description": "Sample email event.* data; no Event/Order writes.",
        +  "type": "object"
        +}
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Required for live test sends; reuse only for an exact retry."New value: +"Required to send; exact retries only."
      • changedInput schema / properties / latest_campaign / description
        Previous value: -"Most recently created campaign in this brand."New value: +"Latest campaign in this brand."
      • changedInput schema / properties / revision_id / description
        Previous value: -"Required for flow targets: the exact flow revision."New value: +"Exact revision; required for flows."
      • changedInput schema / properties / target_type / description
        Previous value: -"Use with target_id unless latest_campaign or template_id is used."New value: +"With target_id, or use template_id/latest_campaign."
      • changedInput schema / properties / template_id / description
        Previous value: -"Template to test directly, or the specific flow/campaign template to choose."New value: +"Template id; may select a flow/campaign email."
      • changedInput schema / properties / to / description
        Previous value: -"Email addresses, or E.164 phone numbers for SMS."New value: +"Email addresses or SMS E.164 numbers."
  7. 1 tool update
    • Changednitro_manage_audience2 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Required for delete_segment, delete_contacts, manage_list delete"New value: +"Required for every delete."
      • changedInput schema / properties / params / description
        Previous 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."
  8. 1 tool update
    • Changednitro_manage_billing1 field changed
      • changedInput schema / properties / params / properties / quantity / description
        Previous 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."
  9. 1 tool update
    • Changednitro_control_delivery1 field changed
      • addedInput schema / properties / confirm / description
        Added value: +"Required for delete."
  10. 1 tool update
    • Changednitro_set_brand_kit2 fields changed
      • changedInput schema / properties / idempotency_key / description
        Previous 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."
      • addedInput schema / properties / new_brand
        Added value: +{
        +  "type": "string"
        +}
  11. 13 tool updates
    • Changednitro_compose_campaign6 fields changed
      • removedInput schema / properties / audience / properties / audience_type / description
        Removed value: -"lists, segment, or all_contacts."
      • changedInput schema / properties / channel / description
        Previous value: -"email or sms; immutable after creation."New value: +"Immutable after creation."
      • changedInput schema / properties / creative_route_id / description
        Previous value: -"Intent-only route id; unavailable or invalid routes fail explicitly."New value: +"Intent-only route id."
      • changedInput schema / properties / draft_meta / description
        Previous value: -"Optional authoring provenance; never blocks validation or persistence."New value: +"Optional authoring provenance; never blocks."
      • removedInput schema / properties / mode / description
        Removed value: -"create a draft; patch supplied fields; replace all draft state and requires confirm."
      • removedInput schema / properties / validate_only / description
        Removed value: -"Alias for validate; never persists."
    • Changednitro_compose_flow4 fields changed
      • changedInput schema / properties / creative_route_id / description
        Previous value: -"Intent-only sequence-wide route id; invalid choices fail."New value: +"Intent-only sequence-wide route id."
      • changedInput schema / properties / draft_meta / description
        Previous value: -"Optional authoring provenance; never blocks validation or persistence."New value: +"Optional authoring provenance; never blocks."
      • changedInput schema / properties / steps / description
        Previous value: -"Ordered graph steps; exact typed fields are in $defs.flowStep."New value: +"Ordered graph steps."
      • removedInput schema / properties / validate_only / description
        Removed value: -"Alias for validate; never persists."
    • Changednitro_configure_account2 fields changed
      • removedInput schema / properties / reply_to / description
        Removed value: -"Reply-to email address"
      • changedInput schema / properties / test_email_recipients / description
        Previous value: -"Saved email addresses for test sends (max 5). Pass empty array to clear."New value: +"Saved test-send addresses; [] clears."
    • Changednitro_control_delivery1 field changed
      • removedInput schema / properties / confirm / description
        Removed value: -"Required for delete."
    • Changednitro_get_insights2 fields changed
      • removedInput schema / properties / period / description
        Removed value: -"Time period for metrics (default 30d)"
      • removedInput schema / properties / scope / description
        Removed value: -"Scope of insights: account-wide, per flow, per campaign, or per message"
    • Changednitro_manage_template4 fields changed
      • changedInput schema / properties / creative_route_id / description
        Previous value: -"Intent-only route id; unavailable or invalid routes fail explicitly."New value: +"Intent-only route id."
      • changedInput schema / properties / draft_meta / description
        Previous value: -"Optional authoring provenance; never blocks validation or persistence."New value: +"Optional authoring provenance; never blocks."
      • changedInput schema / properties / sections / description
        Previous 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."
      • removedInput schema / properties / validate_only / description
        Removed value: -"Alias for validate; never persists."
    • Changednitro_query2 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Page number (default 1)"New value: +"Default 1."
      • changedInput schema / properties / per / description
        Previous value: -"Results per page (max 50, default 25)"New value: +"Max 50, default 25."
    • Changednitro_review_delivery5 fields changed
      • changedInput schema / properties / contact_id / description
        Previous value: -"Optional contact ID for merge-tag personalization during review"New value: +"Merge-tag personalization contact."
      • changedInput schema / properties / html / description
        Previous value: -"Rendered HTML for a self-contained inline email review"New value: +"Inline email review HTML."
      • changedInput schema / properties / subject / description
        Previous value: -"Subject for a self-contained inline email review"New value: +"Inline email review subject."
      • removedInput schema / properties / target_id / description
        Removed value: -"Entity ID to review"
      • removedInput schema / properties / target_type / description
        Removed value: -"Entity type to review"
    • Changednitro_search_contacts3 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Page number (default 1)"New value: +"Default 1."
      • changedInput schema / properties / per / description
        Previous value: -"Results per page (max 50, default 25)"New value: +"Max 50, default 25."
      • removedInput schema / properties / query / description
        Removed value: -"Email address, name, or phone number"
    • Changednitro_search_docs2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum results to return (default 6, max 10)"New value: +"Max 10."
      • changedInput schema / properties / query / description
        Previous 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'"
    • Changednitro_select_account1 field changed
      • changedInput schema / properties / account_id / description
        Previous 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."
    • Changednitro_send_test_message9 fields changed
      • changedInput schema / properties / action_id / description
        Previous value: -"Flow action ID to test when a flow has multiple message steps."New value: +"For a flow with multiple message steps."
      • changedInput schema / properties / channel / description
        Previous value: -"Channel to test. Use auto unless a standalone template is ambiguous."New value: +"Use auto unless a standalone template is ambiguous."
      • changedInput schema / properties / contact_id / description
        Previous 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."
      • changedInput schema / properties / idempotency_key / description
        Previous 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."
      • changedInput schema / properties / latest_campaign / description
        Previous value: -"Use the most recently created campaign in this brand."New value: +"Most recently created campaign in this brand."
      • changedInput schema / properties / revision_id / description
        Previous value: -"Required for flow targets. Exact immutable flow revision to test."New value: +"Required for flow targets: the exact flow revision."
      • removedInput schema / properties / target_id / description
        Removed value: -"Target entity ID. Use with target_type."
      • changedInput schema / properties / target_type / description
        Previous 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."
      • changedInput schema / properties / to / description
        Previous 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."
    • Changednitro_set_brand_kit2 fields changed
      • removedInput schema / properties / fields / description
        Removed value: -"Typed Brand Kit fields."
      • addedInput schema / properties / scan_id
        Added value: +{
        +  "type": "string"
        +}
  12. 2 tool updates
    • Changednitro_compose_flow1 field changed
      • addedInput schema / $defs / flowStep / properties / transactional
        Added 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"
        +}
    • Changednitro_send_message14 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"Message body. Required for SMS. Optional plain text for email."New value: +"Plain text; required for SMS"
      • removedInput schema / properties / channel / description
        Removed value: -"Delivery channel"
      • changedInput schema / properties / data / description
        Previous 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 }}"
      • changedInput schema / properties / dry_run / description
        Previous value: -"Validate and preview without sending"New value: +"Preview without sending"
      • addedInput schema / properties / from
        Added value: +{
        +  "description": "Email sender: Name <address>",
        +  "type": "string"
        +}
      • addedInput schema / properties / from_email
        Added value: +{
        +  "description": "Verified brand sender address",
        +  "type": "string"
        +}
      • addedInput schema / properties / from_name
        Added value: +{
        +  "description": "Sender name",
        +  "type": "string"
        +}
      • addedInput schema / properties / headers
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Email headers; reserved names rejected",
        +  "maxProperties": 20,
        +  "type": "object"
        +}
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Required for live sends. Reuse the same stable key on retry to prevent duplicate delivery."New value: +"Reuse only for an exact retry"
      • addedInput schema / properties / reply_to
        Added value: +{
        +  "description": "Reply address",
        +  "type": "string"
        +}
      • removedInput schema / properties / subject / description
        Removed value: -"Email subject line (required for email)"
      • addedInput schema / properties / tags
        Added value: +{
        +  "additionalProperties": {
        +    "type": [
        +      "string",
        +      "number",
        +      "boolean"
        +    ]
        +  },
        +  "description": "Email tags",
        +  "maxProperties": 20,
        +  "type": "object"
        +}
      • changedInput schema / properties / template_id / description
        Previous value: -"Load email design from an existing template (email only)"New value: +"Email template ID"
      • changedInput schema / properties / to / description
        Previous value: -"Recipient email address or E.164 phone number"New value: +"Email or E.164 phone"
  13. 2 tool updates
    • Changednitro_compose_campaign1 field changed
      • addedInput schema / properties / section_updates
        Added value: +{
        +  "description": "Same entries as nitro_manage_template section_updates.",
        +  "items": {
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changednitro_manage_domains6 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Required for remove and rename_brand_subdomain."New value: +"Required for removal, renaming and subdomain-sharing changes."
      • changedInput schema / properties / operation / enum
        Previous 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"
        +]
      • addedInput schema / properties / params / properties / domain_id
        Added value: +{
        +  "description": "The current brand's domain that owns the subdomain.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / params / properties / page
        Added value: +{
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / params / properties / shared_domain_id
        Added value: +{
        +  "description": "Shared sending-domain claim to revoke.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / params / properties / target_brand_sid
        Added value: +{
        +  "description": "Exact destination brand; must be in this account or an eligible managed client.",
        +  "type": "string"
        +}
  14. 1 tool update
    • Changednitro_manage_billing1 field changed
      • addedInput schema / properties / params / properties / quantity
        Added value: +{
        +  "description": "Additional inbox units to purchase. Only quantity-based offers accept more than one.",
        +  "maximum": 10000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  15. 2 tool updates
    • Addednitro_get_memory
    • Changednitro_manage_domains1 field changed
      • changedInput schema / properties / operation / description
        Previous 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
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

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to manage email campaigns, contact lists, analytics, A/B tests, and transactional emails through natural language, using OAuth for secure connection.
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables 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.
    100
    1,704 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    AI-native email marketing platform built for agents. Control campaigns, automations, contacts, templates, and analytics via MCP with OAuth authentication.
    117 npm
    164
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources