Skip to main content
Glama

edit_campaign

Destructive

Update settings for an existing LinkedIn outreach campaign. Change name, booking link, messaging context, intent, or send limits without affecting already-sent messages.

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: 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: Auto-reply to prospect messages: "on" or "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.

Input Schema

TableJSON 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
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
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

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.10.429
    • addedInput schema / properties / invite_note
      Added value: +{
      +  "default": "",
      +  "title": "Invite Note",
      +  "type": "string"
      +}
  2. 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"
      +}
  3. Changed1 schema field changedv0.10.398
    • addedInput schema / properties / goal
      Added value: +{
      +  "default": "",
      +  "title": "Goal",
      +  "type": "string"
      +}
  4. First observedv0.10.375

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and openWorldHint=true, and the description adds genuinely new behavioral context beyond them: changes apply only to messages written from now on, editing any offer_* field unconfirms the Offer card, project_brief is required before launch/resume/auto-send, and exclude_connections/connections_only are mutually exclusive toggles. No contradiction with the annotation profile.

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?

Structure is well front-loaded (purpose, then patch semantics and alternatives, then Args), and for a 52-parameter tool with a bare schema the length is largely earned. There is some repetition ("Empty keeps the current value" / "0 to keep current" recurs many times) and the campaign_type paragraph could be tightened.

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?

An output schema exists so return values need no explanation, and the annotations carry the safety profile. The description still covers what an agent needs to call this correctly: partial-update semantics, defaults for empty values, prerequisite fields, and the exclusivity between exclude_connections and connections_only.

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 52 parameters, so the description carries the full burden and does so: it documents ~50 of 52 fields with meaning, accepted values ("on"/"off"/"observe", intent enums, ranges like 7-60), units, and cross-field interactions. Only voice_noise and voice_humanize are left undocumented.

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?

Opens with a specific verb+resource ("Change one running or drafted campaign's settings") and immediately distinguishes itself from create_campaign and campaign(action=...), which are named explicitly. An agent can select this tool over its siblings without opening any schema.

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?

States the patch semantics ("Pass only what you want to change; every field left empty keeps its current value") and names the alternatives with the condition that selects them: create_campaign for a new campaign, campaign(action=...) to launch/pause/stop. It also scopes the tool ("edits settings only: it sends nothing and adds no prospects").

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