Skip to main content
Glama

edit_campaign

Destructive

Change settings for a running or drafted HeyLead campaign without sending messages or adding prospects; update only the fields you pass.

Instructions

Change one running or drafted campaign's settings.

Pass only what you want to change; every field left empty keeps its current
value. Use it to rename a campaign, give it a booking link, feed it context
that makes the messages more specific (offerings, case studies, project
brief), say who it is for (campaign_intent, campaign_type), or set the
limits it sends under (volume, caps, follow-ups, business hours).

It edits settings only: it sends nothing and adds no prospects. A change
applies to the messages written from now on, not to ones already sent. Use
create_campaign for a new campaign, and campaign(action=...) to launch,
pause or stop one.

Args:
    campaign_id: Which campaign to edit. Edits the first active campaign if empty.
    name: New campaign name. Leave empty to keep current name.
    mode: Only "autopilot" supported (copilot mode was removed). Whether
        messages wait for a person is the workspace's approval mode:
        scheduler(action="approval_mode").
    booking_link_page_ok: Explicitly keep a website page as the booking link.
    booking_link: Calendar/booking URL (e.g., "https://cal.com/you/15min").
        Used in reply_to_prospect() for positive replies to suggest meetings.
    offerings: What you offer (products, services, value props). Used in follow-up messages.
    case_studies: Brief case studies or success stories. Used for social proof in messages.
    social_proofs: Social proof (logos, metrics, testimonials). Used in follow-up messages.
    campaign_preferences: Custom messaging preferences (tone, topics to avoid, etc.).
    campaign_intent: Message stance: "sell", "buy", "partner", "recruit" or "research".
    campaign_type: Prompt family: "outbound" (default) or "job_search".
        job_search replaces the intent-specific invitation note and first
        DM with ones that may name the company and the role, use one
        credible proof point at most and never list a CV. InMail is not
        routed by this switch, and campaign_intent still selects the
        system prompt. Empty keeps the current value.
    goal: What the campaign is for: "sell", "job_search", "hire",
        "partner", "buy" or "research". Rewrites campaign_type and
        campaign_intent to match. Empty keeps the current value.
    project_brief: Full project paste the model sees. Required before launch,
        resume, or auto-send.
    offer_outcome: The Offer card's outcome: what changes for the reader,
        in their words. Editing it unconfirms the card.
    offer_how: The Offer card's how: what the sender does, said only in a
        reply. Editing it unconfirms the card.
    offer_proof: The Offer card's proof, used at most once per thread.
        Editing it unconfirms the card.
    offer_ask: The Offer card's one question. Editing it unconfirms the card.
    offer_confirm: "on" confirms the Offer card; first messages resume.
    product: Optional structured fact: product / what you buy or sell.
    go_live: Optional structured fact: go-live date.
    volume: Optional structured fact: volume model.
    must_confirm: Optional comma-separated questions a vendor must confirm.
    voice_mode: "text_only". Messages are text. Leave empty to keep current value.
    enable_profile_views: View prospect profiles before following: "on" or "off".
    enable_follows: Follow prospects before inviting: "on" or "off".
    enable_endorsements: Endorse skills before inviting: "on" or "off".
    enable_engagements: Comment/react on posts before inviting: "on" or "off".
    enable_followups: Send follow-up DMs after connection: "on" or "off".
    enable_auto_replies: "on" or "off". On: HeyLead answers replies itself,
        or holds each answer in Approvals when the workspace reviews every
        message. Off: HeyLead answers no reply and drafts none; every reply
        waits for you in Needs attention, and no booking link or calendar
        invite goes out. To read answers before they go, keep it on with
        review mode, not off.
    enable_invitations: Send connection invitations: "on" or "off".
        When off, campaign only DMs existing connections (no invitations sent).
    enable_discovery: Auto-find and enrol new prospects: "on" or "off".
    exclude_connections: "on" to never message anyone who was already a
        1st-degree connection before this campaign started — they are
        refused at enrolment and skipped at send time instead of being
        DMed. People who accept this campaign's own invitation still get
        the opener. Turning it on turns connections_only off.
    connections_only: "on" to target only your existing 1st-degree
        connections (DM-only, no invitations). Turning it on turns
        exclude_connections off.
        Turn off for curated campaigns with a fixed, hand-picked list.
    exclude_competitors: "on" to never first-touch people who work at
        competing companies. Default on. Empty list excludes nobody
        until research or competitor_companies names them.
    competitor_companies: Comma-separated employer names to skip.
    enable_reply_agent: Reply exception agent: "on" (act), "off", or
        "observe". Empty keeps the current value. Unset defaults to act.
    enable_strategist_replan_agent: Strategist replan: "on", "off", or
        "observe". Empty keeps the current value.
    enable_hot_lead_closer: Hot-lead closer: "on", "off", or "observe".
        Empty keeps the current value.
    enable_coordinator_agent: Coordinator digest/hold: "on", "off", or
        "observe". Empty keeps the current value.
    engagement_mode: Engagement style: "auto" (30% react / 70% comment),
        "comment_only", or "react_only".
    max_followups: Max follow-up messages (1-5). 0 to keep current.
    weekly_meeting_target: Meetings this campaign should book per week.
        The daily report reads it as the Key Result and says whether the
        campaign is on track. 0 means no goal this week; -1 keeps current.
    followup_delay_days: Custom day intervals as comma-separated list
        (e.g., "1,3,7,14"). Leave empty to keep current.
    invite_note: Invitations carry a note: "on" (default) or "off". Off sends
        the bare invitation; the first words are the DM a working day after
        they accept.
    withdraw_stale_invites: Auto-withdraw stale invites: "on" or "off".
    stale_invite_days: Days before withdrawing stale invites (7-60). 0 to keep current.
    inmail_fallback: Escalate quiet invitations with one InMail: "on" or "off".
        Free tier sends only to Open Profile members (zero credits).
    inmail_fallback_days: Quiet days before the InMail (1-60). 0 to keep current.
    inmail_first_touch: InMail as first touch: "on" or "off". Unset follows inmail_fallback.
    send_in_business_hours: Send only in business hours: "on" or "off". On by default
        (weekdays 08:00-22:00 in your own timezone, or London when it is unknown,
        unless the workspace set its own window).
    active_days: Active send days as comma-separated numbers (0=Mon, 6=Sun).
        E.g., "0,1,2,3,4" for weekdays. Leave empty to keep current.
    message_language: The language every message to a prospect is
        written in: "en", "prospect" (their latest message, else their
        LinkedIn profile's language, else English) or a code: uk, de, fr,
        es, pl, pt, it. Never set this without asking the user. Any
        explicit value, "en" included, answers launch's language question.
        Empty keeps the current value.

Input Schema

NameRequiredDescriptionDefault
goalNo
modeNo
nameNo
volumeNo
go_liveNo
productNo
offer_askNo
offer_howNo
offeringsNo
voice_modeNo
active_daysNo
campaign_idNo
invite_noteNo
offer_proofNo
voice_noiseNo
booking_linkNo
case_studiesNo
must_confirmNo
campaign_typeNo
max_followupsNo
offer_confirmNo
offer_outcomeNo
project_briefNo
social_proofsNo
enable_followsNo
voice_humanizeNo
campaign_intentNo
engagement_modeNo
inmail_fallbackNo
connections_onlyNo
enable_discoveryNo
enable_followupsNo
message_languageNo
stale_invite_daysNo
enable_engagementsNo
enable_invitationsNo
enable_reply_agentNo
inmail_first_touchNo
enable_auto_repliesNo
enable_endorsementsNo
exclude_competitorsNo
exclude_connectionsNo
followup_delay_daysNo
booking_link_page_okNo
campaign_preferencesNo
competitor_companiesNo
enable_profile_viewsNo
inmail_fallback_daysNo
weekly_meeting_targetNo
enable_hot_lead_closerNo
send_in_business_hoursNo
withdraw_stale_invitesNo
enable_coordinator_agentNo
enable_strategist_replan_agentNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.10.470
    • addedInput schema / properties / booking_link_page_ok
      Added value: +{
      +  "default": false,
      +  "title": "Booking Link Page Ok",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changedv0.10.454
    • addedInput schema / properties / message_language
      Added value: +{
      +  "default": "",
      +  "title": "Message Language",
      +  "type": "string"
      +}
  3. Changed1 schema field changedv0.10.429
    • addedInput schema / properties / invite_note
      Added value: +{
      +  "default": "",
      +  "title": "Invite Note",
      +  "type": "string"
      +}
  4. Changed5 schema fields changedv0.10.425
    • addedInput schema / properties / offer_ask
      Added value: +{
      +  "default": "",
      +  "title": "Offer Ask",
      +  "type": "string"
      +}
    • addedInput schema / properties / offer_confirm
      Added value: +{
      +  "default": "",
      +  "title": "Offer Confirm",
      +  "type": "string"
      +}
    • addedInput schema / properties / offer_how
      Added value: +{
      +  "default": "",
      +  "title": "Offer How",
      +  "type": "string"
      +}
    • addedInput schema / properties / offer_outcome
      Added value: +{
      +  "default": "",
      +  "title": "Offer Outcome",
      +  "type": "string"
      +}
    • addedInput schema / properties / offer_proof
      Added value: +{
      +  "default": "",
      +  "title": "Offer Proof",
      +  "type": "string"
      +}
  5. Changed1 schema field changedv0.10.398
    • addedInput schema / properties / goal
      Added value: +{
      +  "default": "",
      +  "title": "Goal",
      +  "type": "string"
      +}
  6. First observedv0.10.375

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the destructiveHint/openWorldHint annotations, it discloses non-obvious effects: changes apply only to messages written from now on, editing any offer_* field unconfirms the Offer card, exclude_connections and connections_only silently disable each other, and enable_auto_replies=off diverts all replies to Needs attention with no booking link sent. These are consequential state interactions an agent could not infer from 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?

The front matter is well ordered — purpose, partial-update rule, scope limits, then sibling routing — before the long args block, which is justified by 54 undocumented parameters. A few entries (enable_auto_replies, exclude_connections) sprawl across many lines, but each sentence carries real semantics rather than filler.

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 54-parameter mutation tool with an output schema and destructive annotations, the description supplies what structured fields do not: prerequisites (project_brief required before launch/resume/auto-send), option interactions, tiered behavior (InMail on free tier), and defaults. Nothing needed to invoke it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 54 parameters, so the description carries the full burden and does: it documents 52 of them with meaning, allowed values, defaults and sentinel conventions ("0 to keep current", "-1 keeps current", "on"/"off"/"observe", day-number encoding for active_days, "1,3,7,14" format for followup_delay_days). Only voice_noise and voice_humanize are left undocumented, a minor gap against the overall coverage.

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?

"Change one running or drafted campaign's settings" is a specific verb plus resource, and the description immediately bounds the scope ("edits settings only: it sends nothing and adds no prospects"). It explicitly hands off sibling cases: create_campaign for new campaigns and campaign(action=...) for launch/pause/stop.

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?

It names the alternatives and the condition selecting each (create_campaign vs campaign(action=...) vs this tool), and states the partial-update protocol up front: "Pass only what you want to change; every field left empty keeps its current value." It also gives a hard guardrail for a risky case ("Never set message_language without asking the user").

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.