Skip to main content
Glama

Create a discovery campaign

create_campaign

Create a Communiply discovery campaign: it continuously finds relevant social posts (by keyword) and drafts replies for them. BEFORE calling: the keywords and search_context are YOURS to derive, and deriving them well is most of the campaign's quality — actually fetch and read the product's website (and any docs or pages the user pointed at), work out who the audience is and the phrases they use when they have the problem the product solves, and build keywords + search_context from that. Do it in this conversation, for free — it is not billed, and you can iterate with the user before anything is spent. If you cannot browse the web from this client, SAY SO to the user and build from what they tell you instead — never silently guess from the product's name alone. Credits pay only for what you cannot do here: scraping the platforms, real community members posting, and proof verification. Costs 10 credits to create; discovering posts is billed separately via generate_posts (12 credits/post). Needs a product_id (search_products / create_product). Two ways to run it, and the user picks: PRIVATE (the default here) keeps drafts in their workbench to review and post themselves — reversible, no further cost; PUBLIC puts the drafts in the ProductClank earn feed so community members post them from their own accounts — that is the reach the platform exists for, and each network-posted reply bills the user extra credits. Default to private when the user has not said, and relay the decision_offer in the result so they can choose. On X, also ask what the replies are for (reply_approach): awareness (the product and its site in the thread) or sales (flag each post to the brand/founder as a lead, tagging the accounts they choose in reply_tag_accounts). Pick the platform the product's audience actually talks on — X (default), LinkedIn, Reddit or YouTube — and for Reddit/YouTube narrow it with target_subreddits / target_youtube_channels. When the user works in a specific brand space (an agency running several brands, or a space setup_content_space just made), pass that space as space_id so the campaign shows under it in their dashboard — omitted, it lands in their oldest space. Topic research auto-runs in the background at create (~30s); read it with get_research before spending on generate_posts. Confirm the credit cost with the user before calling.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYesCampaign title, e.g. 'Grow Acme — AI devtools conversations'
keywordsYesSearch keywords/phrases to discover posts with (3–8 focused phrases work best). Derive these from the product's actual site and audience — the words people use when they HAVE the problem ('CI is so slow', 'alternatives to X'), not the product's own marketing vocabulary or its name.
platformNoWhich network to work: twitter (default), linkedin, reddit, youtube. This is WHERE discovery looks — distinct from `sources` in update_campaign, which is HOW it looks there. Pick from where the product's audience actually is; it is fixed once the campaign discovers its first post.
space_idNoThe brand space to file this campaign under (from list_content_spaces, or the space_id setup_content_space returned) — the space the user's dashboard shows it in. Not an audience: who sees the drafts is still `visibility`. The user must be able to create campaigns in that space, or the call is rejected. Omit and it lands in the user's oldest space.
product_idYesProduct UUID (from search_products or create_product)
visibilityNoWho posts the drafted replies. private (default) = they wait in the user's workbench for the user to post; public = the community earn feed distributes them and network members post them, billing the user per posted reply. Reversible either way — ask the user rather than assuming.
reply_lengthNo
reply_approachNoX campaigns only (the API rejects it elsewhere). What the replies are FOR — ask the user, it changes every reply: 'mention' (default) = AWARENESS: replies put the product and its site in the conversation so thread readers see it — right when the goal is visibility, traffic or brand presence. 'flag' = SALES: replies tag the brand and/or founder and point them at the post's author as a lead (e.g. '@brand @founder check out what Nick is struggling with, might be something you can help with'), so the founder can step in and convert — right when the goal is signups, demos or deals. Neither style pretends the replier has used the product. With 'flag', set reply_tag_accounts.
search_contextYesOne or two sentences on what conversations to find and why the product is relevant to them. Write it from having actually read the product's site and this conversation — who the audience is, what pain they voice, what makes the product a natural mention. This steers both discovery and the relevance gate, so a generic sentence produces generic (billed) posts.
post_visibilityNoVisibility of each discovered post, independent of the campaign. 'public' campaign + 'private' posts = HELD mode: drafts are found and written but nobody can claim them until publish_posts releases the ones the user approves. Use it whenever the user wants to review wording before real people post.
mention_accountsNoX handles to name-drop in 'mention'-approach replies (e.g. the product's account). Also a discovery input: posts that mention these accounts are surfaced too — so to choose who 'flag' replies tag, use reply_tag_accounts, not this.
reply_guidelinesNoCustom guidelines for reply drafting (defaults are built from the campaign context)
reply_style_tagsNoTone tags for drafted replies, e.g. ['helpful', 'builder-to-builder']
target_subredditsNoReddit only, and enforced server-side: sending this on a non-Reddit campaign is REJECTED with an error, never silently ignored. Subreddits to rotate through, with or without the 'r/' prefix. Omit to search all of Reddit. Note Reddit allows at most one posted reply per subreddit per day, so breadth beats depth here.
reply_tag_accountsNoX only, used with reply_approach 'flag': up to 2 handles to tag, brand first then the founder (e.g. ['acme', 'jane_founder']) — so the user can choose brand, personal or both. Omit to fall back to mention_accounts, then the product's X handle. Ignored with 'mention' (the result warns).
target_youtube_channelsNoYouTube only, and enforced server-side: sending this on a non-YouTube campaign is REJECTED with an error, never silently ignored. Channel handles, ids or URLs to pull recent videos from, alongside the keyword search. Omit for keyword search alone.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / space_id
      Added value: +{
      +  "description": "The brand space to file this campaign under (from list_content_spaces, or the space_id setup_content_space returned) — the space the user's dashboard shows it in. Not an audience: who sees the drafts is still `visibility`. The user must be able to create campaigns in that space, or the call is rejected. Omit and it lands in the user's oldest space.",
      +  "type": "string"
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / mention_accounts / description
      Previous value: -"X handles to mention naturally in replies (e.g. the product's account)"New value: +"X handles to name-drop in 'mention'-approach replies (e.g. the product's account). Also a discovery input: posts that mention these accounts are surfaced too — so to choose who 'flag' replies tag, use reply_tag_accounts, not this."
    • addedInput schema / properties / reply_approach
      Added value: +{
      +  "description": "X campaigns only (the API rejects it elsewhere). What the replies are FOR — ask the user, it changes every reply: 'mention' (default) = AWARENESS: replies put the product and its site in the conversation so thread readers see it — right when the goal is visibility, traffic or brand presence. 'flag' = SALES: replies tag the brand and/or founder and point them at the post's author as a lead (e.g. '@brand @founder check out what Nick is struggling with, might be something you can help with'), so the founder can step in and convert — right when the goal is signups, demos or deals. Neither style pretends the replier has used the product. With 'flag', set reply_tag_accounts.",
      +  "enum": [
      +    "mention",
      +    "flag"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / reply_tag_accounts
      Added value: +{
      +  "description": "X only, used with reply_approach 'flag': up to 2 handles to tag, brand first then the founder (e.g. ['acme', 'jane_founder']) — so the user can choose brand, personal or both. Omit to fall back to mention_accounts, then the product's X handle. Ignored with 'mention' (the result warns).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 2,
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / post_visibility
      Added value: +{
      +  "description": "Visibility of each discovered post, independent of the campaign. 'public' campaign + 'private' posts = HELD mode: drafts are found and written but nobody can claim them until publish_posts releases the ones the user approves. Use it whenever the user wants to review wording before real people post.",
      +  "enum": [
      +    "public",
      +    "private"
      +  ],
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / keywords / description
      Previous value: -"Search keywords/phrases to discover posts with (3–8 focused phrases work best)"New value: +"Search keywords/phrases to discover posts with (3–8 focused phrases work best). Derive these from the product's actual site and audience — the words people use when they HAVE the problem ('CI is so slow', 'alternatives to X'), not the product's own marketing vocabulary or its name."
    • changedInput schema / properties / search_context / description
      Previous value: -"One or two sentences on what conversations to find and why the product is relevant to them"New value: +"One or two sentences on what conversations to find and why the product is relevant to them. Write it from having actually read the product's site and this conversation — who the audience is, what pain they voice, what makes the product a natural mention. This steers both discovery and the relevance gate, so a generic sentence produces generic (billed) posts."
  5. Changed2 schema fields changed
    • changedInput schema / properties / target_subreddits / description
      Previous value: -"Reddit only. Subreddits to rotate through, with or without the 'r/' prefix. Omit to search all of Reddit. Note Reddit allows at most one posted reply per subreddit per day, so breadth beats depth here."New value: +"Reddit only, and enforced server-side: sending this on a non-Reddit campaign is REJECTED with an error, never silently ignored. Subreddits to rotate through, with or without the 'r/' prefix. Omit to search all of Reddit. Note Reddit allows at most one posted reply per subreddit per day, so breadth beats depth here."
    • changedInput schema / properties / target_youtube_channels / description
      Previous value: -"YouTube only. Channel handles, ids or URLs to pull recent videos from, alongside the keyword search. Omit for keyword search alone."New value: +"YouTube only, and enforced server-side: sending this on a non-YouTube campaign is REJECTED with an error, never silently ignored. Channel handles, ids or URLs to pull recent videos from, alongside the keyword search. Omit for keyword search alone."
  6. Changed3 schema fields changed
    • addedInput schema / properties / platform
      Added value: +{
      +  "description": "Which network to work: twitter (default), linkedin, reddit, youtube. This is WHERE discovery looks — distinct from `sources` in update_campaign, which is HOW it looks there. Pick from where the product's audience actually is; it is fixed once the campaign discovers its first post.",
      +  "enum": [
      +    "twitter",
      +    "linkedin",
      +    "reddit",
      +    "youtube"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / target_subreddits
      Added value: +{
      +  "description": "Reddit only. Subreddits to rotate through, with or without the 'r/' prefix. Omit to search all of Reddit. Note Reddit allows at most one posted reply per subreddit per day, so breadth beats depth here.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
    • addedInput schema / properties / target_youtube_channels
      Added value: +{
      +  "description": "YouTube only. Channel handles, ids or URLs to pull recent videos from, alongside the keyword search. Omit for keyword search alone.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 25,
      +  "type": "array"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / visibility / description
      Previous value: -"Default private (drafts stay in the user's workbench). public = the community earn feed distributes the drafts and network members post them, billing the user per posted reply — ask the user before choosing public."New value: +"Who posts the drafted replies. private (default) = they wait in the user's workbench for the user to post; public = the community earn feed distributes them and network members post them, billing the user per posted reply. Reversible either way — ask the user rather than assuming."
  8. Changed1 schema field changed
    • addedInput schema / properties / visibility
      Added value: +{
      +  "description": "Default private (drafts stay in the user's workbench). public = the community earn feed distributes the drafts and network members post them, billing the user per posted reply — ask the user before choosing public.",
      +  "enum": [
      +    "public",
      +    "private"
      +  ],
      +  "type": "string"
      +}
  9. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnly=false/openWorld=true/destructive=false, but the description adds rich behavior: 10-credit create cost, separate 12-credit/post billing, private is reversible and free while public bills per network-posted reply, server-side REJECTION of platform-mismatched params (target_subreddits/target_youtube_channels), Reddit's one-reply-per-subreddit-per-day limit, and the ~30s background research. This is well beyond what structured fields convey.

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?

Very long, but front-loaded (purpose first, then BEFORE-calling prep, costs, private/public modes) and every block carries distinct information with no obvious filler. Density is high enough to justify the length, though the run-on 'BEFORE calling' sentence 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 16-parameter mutation tool with no output schema, the description covers cost, defaults, prerequisites, the private/public decision, the decision_offer relay, and cross-tool dependencies (get_research, generate_posts, setup_content_space). Nothing an agent needs to invoke it 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?

Schema coverage is already 94% (baseline 3), but the description adds real semantics: keywords and search_context are the agent's to derive from the site, the mention_accounts vs reply_tag_accounts split, space_id's fallback to the oldest space, and platform being fixed after first discovery. Useful additions beyond the schema, though most field details still live 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?

Opens with a specific verb+resource+behavior: 'Create a Communiply discovery campaign: it continuously finds relevant social posts (by keyword) and drafts replies for them.' This clearly distinguishes it from the sibling create_content_campaign and from update_campaign/get_campaign, so an agent knows exactly what this tool produces.

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?

Explicit when-to-use and how-to-prepare guidance: derive keywords/search_context before calling, use search_products/create_product for product_id, default to private unless the user says otherwise, ask about reply_approach on X, pick the platform the audience is on, and confirm credit cost first. It also names alternatives (generate_posts for the paid discovery step, get_research before spending), leaving little to inference.

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