Skip to main content
Glama

Update draft campaign

update_campaign
Idempotent

Update a draft campaign: name, subject, preview text, sender info, HTML content, and/or recipients. Retarget with exactly ONE of audienceIds / segmentId / contactIds / tagIds / sendToAll, then verify with preview_campaign_recipients before sending. Only drafts can be edited.

Input Schema

NameRequiredDescriptionDefault
htmlNo
nameNoCampaign name (internal label)
apiKeyNoSend16 API key (overrides SEND16_API_KEY env var)
tagIdsNoRetarget to contacts with these tag IDs
replyToNo
subjectNo
fromNameNo
fromEmailNo
segmentIdNoRetarget to this segment (see list_segments)
sendToAllNoRetarget to all subscribed contacts in the workspace
campaignIdYesCampaign ID
contactIdsNoRetarget to these specific contact IDs
audienceIdsNoRetarget to these audience IDs (see list_audiences). Sets recipient type 'lists'.
previewTextNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / fromEmail / pattern
      Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • changedInput schema / properties / replyTo / pattern
      Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
  2. Changed7 schema fields changed
    • addedInput schema / properties / audienceIds
      Added value: +{
      +  "description": "Retarget to these audience IDs (see list_audiences). Sets recipient type 'lists'.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / contactIds
      Added value: +{
      +  "description": "Retarget to these specific contact IDs",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "Campaign name (internal label)",
      +  "maxLength": 100,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / segmentId
      Added value: +{
      +  "description": "Retarget to this segment (see list_segments)",
      +  "type": "string"
      +}
    • addedInput schema / properties / sendToAll
      Added value: +{
      +  "description": "Retarget to all subscribed contacts in the workspace",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / tagIds
      Added value: +{
      +  "description": "Retarget to contacts with these tag IDs",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • removedInput schema / properties / templateSlug
      Removed value: -{
      -  "type": "string"
      -}
  3. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly=false, idempotent=true, destructive=false), so the description adds the key non-obvious constraint that only drafts are editable and that retargeting options are mutually exclusive. It does not describe partial-update semantics or auth requirements beyond the apiKey parameter.

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, front-loaded with the editable-field list followed by the retarget rule and the draft-only constraint. No filler.

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 14-parameter mutation with no output schema and 57% coverage, the description covers the highest-risk decision (recipient targeting exclusivity) and the draft-only precondition. It stops short of clarifying partial-update behavior, which would fully round it out.

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 57% schema coverage, the description carries weight by documenting the retarget parameter group and the 'exactly ONE' mutual-exclusion rule, which the schema cannot express (all five are optional with no enum). It still leaves several fields like fromName/fromEmail/replyTo without added meaning.

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 (update) and resource (draft campaign) and enumerates the editable fields. The 'Only drafts can be edited' scope immediately separates it from create_campaign, schedule_campaign, and pause/resume siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit operating constraint ('exactly ONE of audienceIds / segmentId / contactIds / tagIds / sendToAll'), a verification step, and names the sibling to use it with ('verify with preview_campaign_recipients before sending'). This is when/when-not guidance with a named alternative.

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.