Skip to main content
Glama

Set one contact's own messages

set_lead_messages
DestructiveIdempotent

Set or replace the connection note and follow-ups ONE contact in a campaign will get, instead of the campaign's own. Only steps that have not gone out yet can be set; steps you leave out are kept. Each text is filled in with the contact's name, title, company and location and checked like a CSV import: a connection note over the account's limit is refused (never shortened), a variable the contact has no value for is refused, and a {{calendar_link}} becomes the contact's tracked link. A follow-up step the campaign does not have is refused, because it would never go out. Once a contact has any text set here, ZenMode's AI no longer writes for that contact; steps not set use the campaign's. Nothing happens on LinkedIn at the moment you call this. ZenMode's campaign engine works through each campaign later, inside your daily and weekly limits, business hours and pacing.

Input Schema

NameRequiredDescriptionDefault
contact_idYesThe contact id, from search_contacts or get_campaign.
follow_up_1NoThis contact's first follow-up.
follow_up_2NoThis contact's second follow-up.
follow_up_3NoThis contact's third follow-up.
idempotency_keyNoOptional. A unique string you make up for this exact change (8 to 128 letters, digits, - _ . :). If the call is repeated with the same key and the same arguments within 24 hours, nothing happens twice and the first result is returned again. Use a fresh key for every new change.
connection_requestNoThe note sent with this contact's connection request.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say destructive/idempotent/openWorld=false; the description adds substantial non-redundant behavior: validation rules (oversized note refused, not shortened; missing variable refused; unknown follow-up step refused), {{calendar_link}} substitution, and that AI stops writing for that contact once text is set. It also discloses that nothing happens on LinkedIn at call time and that the campaign engine applies the text later within daily/weekly limits, business hours and pacing — exactly the timing semantics an agent needs.

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?

Single dense paragraph, front-loaded with the core action and followed by constraints in a sensible order (validation → AI behavior change → timing). No filler sentences, though the validation clause is a long run-on that packs three refusal rules into one sentence.

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 destructive, non-readonly mutation with no output schema, the description covers the critical unknowns: what gets replaced, what is preserved, what is refused, and when the effect materializes. It stops short of describing the returned result shape (e.g., what confirmation or validation errors come back), which is the only material gap.

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 100%, so the schema already documents all six parameters; the description nonetheless adds meaning beyond it — that follow_up_N must correspond to a step the campaign actually has, that variables are substituted with contact name/title/company/location, and that {{calendar_link}} becomes a tracked link. It does not clarify the interaction between the idempotency key and partial updates, which the schema covers only generically.

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 precise verb+resource and scope: 'Set or replace the connection note and follow-ups ONE contact in a campaign will get, instead of the campaign's own.' This immediately distinguishes it from the campaign-level sibling set_campaign_messages (message text per campaign) without the agent needing to open 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?

Clear usage context: use it to override the campaign's own text for a single contact, with the constraint that only steps not yet sent can be set and omitted steps are kept. It does not explicitly name set_campaign_messages or set_contact_outreach_state as alternatives, so routing to the correct sibling still requires inference from scope wording.

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.