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. digest_enabled:true emails the owner and the campaign's delegates once a day with the new posts and their draft replies, so they can reply without opening the app; offer it when the user will post the replies themselves (a private campaign). 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

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
digest_enabledNotrue = once a day, email the owner and every delegate (add_delegate) the posts found since the last digest, each with its draft reply and a link to reply. Only sent on days with new posts; each recipient can unsubscribe from the email. false turns it off. Free.
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. Changed1 schema field changed
    • addedInput schema / properties / digest_enabled
      Added value: +{
      +  "description": "true = once a day, email the owner and every delegate (add_delegate) the posts found since the last digest, each with its draft reply and a link to reply. Only sent on days with new posts; each recipient can unsubscribe from the email. false turns it off. Free.",
      +  "type": "boolean"
      +}
  2. 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)."
      +}
  3. 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"
      +}
  4. 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."
  5. 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."
  6. 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"
      +}
  7. Added

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only tell the agent this is a non-destructive write; the description adds the cost profile ('free — nothing here spends credits'), the merge-not-replace semantics of keywords, the confirm requirement for visibility:public, the platform_locked precondition, and the crucial timing fact that changes apply to the NEXT generate_posts run without re-scoring existing posts. That is exactly the kind of behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single dense paragraph is front-loaded with the key constraint and wastes little content, but it is a long backtick-heavy run-on with no grouping or separators, which hurts scannability for a 16-parameter tool. The information is valuable; the structure is not.

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 16-parameter mutation tool with no output schema, the description covers cost, side effects, confirmations, server-side rejections, timing of effects, and the platform lock. Nothing an agent needs to call this correctly is missing.

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 94% schema coverage the schema already documents most parameters, so much of the description is reinforcing that. It still adds real meaning the schema lacks — that sources stay dormant until enabled, that relevance gate behavior differs between new and existing campaigns, and why platform cannot be changed later. Not fully additive, but well above the baseline.

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?

'Adjust a live campaign without recreating it' gives a specific verb and resource plus the scope constraint that distinguishes it from create_campaign and get_campaign. An agent immediately knows this mutates an existing campaign rather than creating or reading one.

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 routes the agent conditionally throughout: 'offer it when the user will post the replies themselves', 'only do it when the user has said yes' for visibility, and it explicitly names the alternative for platform changes ('a second campaign is the answer') and for reading current lists (get_campaign). When-to-use, when-not-to, and sibling alternatives are all present.

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.