Skip to main content
Glama

Enroll contacts in a campaign

enroll_contacts
Idempotent

Enroll contacts by ids, tag, source/list, status, text or custom fields. Suppressed, replied, unsubscribed, bounced, address-less and blocked-domain contacts are skipped with a reason, and a contact in another running campaign is skipped (or moved with on_conflict=move). dry_run=true returns who would be enrolled and who skipped. Requires the manage_campaigns scope.

Input Schema

NameRequiredDescriptionDefault
qNoText in name, email or title.
tagNoEvery contact with this tag.
listNoAlias of source.
fieldsNoExact-match filter on custom fields.
sourceNoEvery contact from this source or list.
statusNoEvery contact with this status.
dry_runNo
campaign_idYesCampaign id.
contact_idsNoContact ids (up to 1000).
on_conflictNoskip (default) or move.
idempotency_keyNoOptional. Repeating a call with the same key and the same arguments returns the first result instead of writing again, so retries are safe.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: the exact classes of contacts that get skipped (suppressed, replied, unsubscribed, bounced, address-less, blocked-domain), the fact that skip reasons are returned, the cross-campaign conflict behavior, and the required manage_campaigns scope. Annotations already flag a non-destructive idempotent write, and the description complements them with consequences and auth needs.

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 tight sentences with the targeting modes first, consequences second, and the dry_run preview plus auth requirement last. Every clause carries information; nothing is padding.

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?

No output schema exists, and the description compensates by stating what dry_run returns and that skips come back with reasons. For an 11-param mutation with auth requirements and conflict handling, an agent has enough to invoke it correctly.

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 91%, so the schema already documents nearly every parameter, and the description mostly restates them as a selector list rather than adding syntax or format detail. It does add value on two params — dry_run's return semantics and on_conflict's 'skip (default) or move' behavior — but the selector params get no extra meaning.

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 ('Enroll') plus resource ('contacts') and an enumeration of the selectors that define the target set. An agent can distinguish this from stop_enrollment or launch_campaign by the verb alone, though no sibling is named explicitly.

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?

'dry_run=true returns who would be enrolled and who skipped' tells the agent to preview before committing, and the on_conflict clause explains the skip-vs-move branch. It does not point at siblings like simulate_campaign or stop_enrollment, so the routing to alternatives 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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources