Skip to main content
Glama

Tune a running campaign

update_campaign

Adjust a live campaign without recreating it. Free — nothing here spends credits, though the next generate_posts run bills as usual. Keywords MERGE (add_keywords never drops what is already there). sources is how research findings get applied: high-intent phrases, influencer accounts and lists that run_research found stay dormant until you enable their source. relevance_threshold moves the bar the relevance gate keeps posts above (new campaigns start lenient at 5; raise it when discovery is noisy). is_active:false pauses discovery so nothing more is found or billed. visibility decides who posts the drafts — flipping to 'public' also releases the already-discovered drafts to the community, so only do it when the user has said yes. target_subreddits / target_youtube_channels re-aim discovery within its platform (send an empty array to clear and search the whole platform). platform itself can only change while the campaign has discovered nothing — after that it is fixed, and a second campaign is the answer. On X, reply_approach switches what the replies do (awareness 'mention' vs sales 'flag', which tags reply_tag_accounts at the lead) — confirm with the user, it changes every future draft. Changes apply to the NEXT generate_posts run; existing posts are not re-scored.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
confirmNoRequired (true) when setting visibility to public — confirms the user agreed to community distribution and per-posted-reply billing. Without it the API returns confirmation_required.
sourcesNoWhich discovery sources run. 'keywords' is always included. Enable 'phrases'/'influencers'/'lists'/'competitors' to actually USE what run_research found — they do nothing until enabled.
platformNoWhich network discovery works. Only changeable while the campaign has discovered nothing — otherwise it returns platform_locked, because switching would mix two platforms' posts and proof rules in one campaign.
is_activeNofalse pauses discovery, true resumes it
visibilityNoWho posts the drafted replies. private = the user posts them from the workbench; public = the community earn feed distributes them and members post them, billing the user per posted reply. Flipping to public REQUIRES confirm: true — ask the user first, then pass it.
campaign_idYes
add_keywordsNoKeywords to add — merged with the existing list, duplicates ignored
reply_approachNoX campaigns only (REJECTED elsewhere). 'mention' = awareness: replies put the product and its site in the conversation. 'flag' = sales: replies tag the brand and/or founder at the post's author as a lead. Applies to drafts written from now on.
post_visibilityNoVisibility of posts discovered FROM NOW ON, without touching the campaign flag or existing posts. 'private' turns on held mode (release with publish_posts); 'public' makes new drafts claimable on arrival. No confirm needed.
remove_keywordsNoKeywords to drop (at least one must remain)
monitor_accountsNoSpecific handles the influencers source should watch; enables that source automatically
target_subredditsNoReddit only, enforced server-side — sending it on a non-Reddit campaign is REJECTED, not ignored. REPLACES the list rather than appending; [] clears it and searches all of Reddit. To add one, read the current list with get_campaign first and send the full merged list.
reply_tag_accountsNoX only, for 'flag': up to 2 handles to tag, brand first then founder (brand, personal or both). REPLACES the list; null or [] clears it (falls back to mention_accounts, then the product's X handle).
relevance_thresholdNoKeep only posts scoring at or above this on semantic relevance (new campaigns start at 5)
target_youtube_channelsNoYouTube only, enforced server-side — sending it on a non-YouTube campaign is REJECTED, not ignored. REPLACES the list rather than appending; [] clears it and runs keyword search alone. To add one, read the current list with get_campaign first and send the full merged list.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / reply_approach
      Added value: +{
      +  "description": "X campaigns only (REJECTED elsewhere). 'mention' = awareness: replies put the product and its site in the conversation. 'flag' = sales: replies tag the brand and/or founder at the post's author as a lead. Applies to drafts written from now on.",
      +  "enum": [
      +    "mention",
      +    "flag"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / reply_tag_accounts
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "X only, for 'flag': up to 2 handles to tag, brand first then founder (brand, personal or both). REPLACES the list; null or [] clears it (falls back to mention_accounts, then the product's X handle)."
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / post_visibility
      Added value: +{
      +  "description": "Visibility of posts discovered FROM NOW ON, without touching the campaign flag or existing posts. 'private' turns on held mode (release with publish_posts); 'public' makes new drafts claimable on arrival. No confirm needed.",
      +  "enum": [
      +    "public",
      +    "private"
      +  ],
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / confirm
      Added value: +{
      +  "description": "Required (true) when setting visibility to public — confirms the user agreed to community distribution and per-posted-reply billing. Without it the API returns confirmation_required.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / visibility / description
      Previous value: -"Who posts the drafted replies. private = the user posts them from the workbench; public = the community earn feed distributes them and members post them, billing the user per posted reply. Ask first."New value: +"Who posts the drafted replies. private = the user posts them from the workbench; public = the community earn feed distributes them and members post them, billing the user per posted reply. Flipping to public REQUIRES confirm: true — ask the user first, then pass it."
  4. Changed2 schema fields changed
    • changedInput schema / properties / target_subreddits / description
      Previous value: -"Reddit only. Replaces the list; [] clears it and searches all of Reddit."New value: +"Reddit only, enforced server-side — sending it on a non-Reddit campaign is REJECTED, not ignored. REPLACES the list rather than appending; [] clears it and searches all of Reddit. To add one, read the current list with get_campaign first and send the full merged list."
    • changedInput schema / properties / target_youtube_channels / description
      Previous value: -"YouTube only. Replaces the list; [] clears it and runs keyword search alone."New value: +"YouTube only, enforced server-side — sending it on a non-YouTube campaign is REJECTED, not ignored. REPLACES the list rather than appending; [] clears it and runs keyword search alone. To add one, read the current list with get_campaign first and send the full merged list."
  5. Changed3 schema fields changed
    • addedInput schema / properties / platform
      Added value: +{
      +  "description": "Which network discovery works. Only changeable while the campaign has discovered nothing — otherwise it returns platform_locked, because switching would mix two platforms' posts and proof rules in one campaign.",
      +  "enum": [
      +    "twitter",
      +    "linkedin",
      +    "reddit",
      +    "youtube"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / target_subreddits
      Added value: +{
      +  "description": "Reddit only. Replaces the list; [] clears it and searches all of Reddit.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
    • addedInput schema / properties / target_youtube_channels
      Added value: +{
      +  "description": "YouTube only. Replaces the list; [] clears it and runs keyword search alone.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
  6. Added

TDQS

A4.6/5.0
Behavior5/5

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

With only non-destructive mutation annotations provided, the description carries real behavioral weight: it discloses that the call is free and doesn't spend credits, that changes apply only to the NEXT generate_posts run (existing posts are not re-scored), that keywords merge rather than replace, and that visibility 'public' triggers community distribution and per-reply billing. These are exactly the non-obvious consequences an agent must know before calling and are not derivable from the annotations.

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?

One dense paragraph, but front-loaded with the most important facts (live-only adjustment, free of credit spend) and organized per-field with backticked parameter names for scannability. Given 15 parameters, the length is largely earned, though a few clauses 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?

For a 15-parameter mutation tool with no output schema, the description covers the critical gaps: billing implications, retro-activity scope, merge-vs-replace behavior, confirmation requirements, and the platform immutability rule. An agent has enough to invoke it correctly without guessing.

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 already 93%, so the baseline is 3, but the description adds cross-cutting semantics the schema states only per-field: which fields merge vs replace, the confirmation flow coupling visibility to confirm, and the platform-lock rule. It reinforces rather than merely repeats, though much of the detail also lives in the schema.

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 and resource ('Adjust a live campaign') and immediately scopes it against the sibling act of creation ('without recreating it'), so an agent can tell it apart from create_campaign. It further names the related tools it interacts with (generate_posts, run_research, publish_posts), giving strong orientation within the toolset.

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?

Provides clear context for nearly every parameter: when to raise relevance_threshold, when is_active:false should be used, when visibility 'public' is appropriate ('only do it when the user has said yes'), and when the platform lock means a second campaign is the answer. It lacks an explicit front-loaded 'use this instead of X' statement, but the per-field guidance effectively covers when/when-not.

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