ProductClank
What this MCP does
Creates and manages social promotion, discovery, content, and creator-participation campaigns across multiple social platforms.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id', 'user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'ProductClank User id to grant webapp access to'}, 'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': "The product's website"}, 'platform': {'enum': ['twitter', 'linkedin', 'reddit', 'youtube'], 'type': 'string', 'description': 'Platform the brief is written for â\x80\x94 the vocabulary adapts (videos on YouTube, threads on Reddit). Pass the same value you will pass to create_campaign. Defaults to twitter.'}, 'product_id': {'type': 'string', 'description': 'Existing product UUID (search_products / create_product) â\x80\x94 its name and tagline sharpen the brief.'}, 'product_name': {'type': 'string', 'description': "Overrides the listing's name"}, 'product_tagline': {'type': 'string', 'description': "Overrides the listing's tagline"}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['post_url'], 'properties': {'post_url': {'type': 'string', 'format': 'uri', 'description': 'Full URL of the post to boost (any supported platform)'}, 'product_id': {'type': 'string', 'description': 'Optional product UUID (from search_products or create_product). Omit for a tweet-first boost.'}, 'action_type': {'enum': ['replies', 'likes', 'repost', 'quote'], 'type': 'string', 'description': "How the community engages. Default: replies. Reposts are Twitter/Farcaster only; quote posts (repost with the member's own drafted text) are X only."}, 'reply_guidelines': {'type': 'string', 'description': 'Optional guidance for the tone and content of community replies or quote posts'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['product_id', 'title', 'keywords', 'search_context'], 'properties': {'title': {'type': 'string', 'description': "Campaign title, e.g. 'Grow Acme â\x80\x94 AI devtools conversations'"}, 'keywords': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 20, 'minItems': 1, 'description': "Search keywords/phrases to discover posts with (3â\x80\x938 focused phrases work best). Derive these from the product's actual site and audience â\x80\x94 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."}, 'platform': {'enum': ['twitter', 'linkedin', 'reddit', 'youtube'], 'type': 'string', 'description': "Which network to work: twitter (default), linkedin, reddit, youtube. This is WHERE discovery looks â\x80\x94 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."}, 'product_id': {'type': 'string', 'description': 'Product UUID (from search_products or create_product)'}, 'visibility': {'enum': ['public', 'private'], 'type': 'string', 'description': "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 â\x80\x94 ask the user rather than assuming."}, 'reply_length': {'enum': ['very-short', 'short', 'medium', 'long', 'mixed'], 'type': 'string'}, 'reply_approach': {'enum': ['mention', 'flag'], 'type': 'string', 'description': "X campaigns only (the API rejects it elsewhere). What the replies are FOR â\x80\x94 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 â\x80\x94 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 â\x80\x94 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_context': {'type': 'string', 'description': "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 â\x80\x94 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_visibility': {'enum': ['public', 'private'], 'type': 'string', '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."}, 'mention_accounts': {'type': 'array', 'items': {'type': 'string'}, 'description': "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 â\x80\x94 so to choose who 'flag' replies tag, use reply_tag_accounts, not this."}, 'reply_guidelines': {'type': 'string', 'description': 'Custom guidelines for reply drafting (defaults are built from the campaign context)'}, 'reply_style_tags': {'type': 'array', 'items': {'type': 'string'}, 'description': "Tone tags for drafted replies, e.g. ['helpful', 'builder-to-builder']"}, 'target_subreddits': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'description': "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."}, 'reply_tag_accounts': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 2, 'description': "X only, used with reply_approach 'flag': up to 2 handles to tag, brand first then the founder (e.g. ['acme', 'jane_founder']) â\x80\x94 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_channels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['product_id', 'campaign_message'], 'properties': {'product_id': {'type': 'string', 'description': 'Product UUID from search_products'}, 'references': {'type': 'string', 'description': 'Links or references to include in the campaign'}, 'campaign_goals': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Campaign goals, e.g. ["awareness", "signups"]'}, 'target_audience': {'type': 'string', 'description': 'Who the campaign should reach'}, 'campaign_message': {'type': 'string', 'description': "The core brief: what you want the community to create (e.g. 'Share how you use <product> in your daily workflow')."}, 'preferred_platform': {'type': 'string', 'description': 'Preferred platform, e.g. "x" or "farcaster"'}, 'additional_guidelines': {'type': 'string', 'description': "Extra do's/don'ts for creators"}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Product website URL â\x80\x94 auto-fills the listing. Provide this or `name`.'}, 'logo': {'type': 'string', 'format': 'uri', 'description': 'Logo image URL (optional; otherwise auto-resolved from the site).'}, 'name': {'type': 'string', 'description': 'Product name. Optional if `url` is given (extracted from the site); required otherwise.'}, 'tagline': {'type': 'string', 'description': 'One-line value proposition (optional; overrides extracted).'}, 'twitter': {'type': 'string', 'description': 'X/Twitter handle or profile URL (optional).'}, 'website': {'type': 'string', 'format': 'uri', 'description': 'Canonical website, if different from `url` (optional).'}, 'category': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Category tags (optional).'}, 'description': {'type': 'string', 'description': 'Short description of what the product does (optional).'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Default 20'}, 'offset': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id', 'reply_id', 'reply_text'], 'properties': {'reply_id': {'type': 'string', 'description': 'Reply id from get_posts'}, 'reply_text': {'type': 'string', 'minLength': 1, 'description': 'The full replacement text'}, 'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'kind': {'enum': ['content', 'take_action'], 'type': 'string', 'description': 'Filter by campaign kind'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Default 25'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Default 25'}, 'offset': {'type': 'integer', 'minimum': 0}, 'campaign_id': {'type': 'string', 'description': 'Restrict to one campaign'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string', 'description': 'Campaign UUID (from list_campaigns or create_campaign)'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Items per list, default 20'}, 'since': {'type': 'string', 'description': 'ISO 8601 timestamp â\x80\x94 the `checked_at` returned by the previous call. Default: 24 hours ago.'}, 'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string', 'description': 'Campaign id from find_open_campaigns'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Submissions per page (default 50)'}, 'offset': {'type': 'integer', 'minimum': 0, 'description': 'Pagination offset'}, 'status': {'enum': ['pending', 'approved', 'rejected'], 'type': 'string', 'description': 'Only return submissions in this review state'}, 'campaign_id': {'type': 'string', 'description': 'Campaign UUID or public campaign number from create_content_campaign'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'status': {'enum': ['active', 'pending', 'reviewed', 'staged', 'discarded'], 'type': 'string'}, 'space_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space_id'], 'properties': {'space_id': {'type': 'string', 'description': 'The space (from list_content_spaces, or any Amplify space the user owns).'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Default 50'}, 'offset': {'type': 'integer', 'minimum': 0}, 'status': {'enum': ['filtered', 'discovered', 'rejected'], 'type': 'string'}, 'campaign_id': {'type': 'string'}, 'include_replies': {'type': 'boolean', 'description': 'Default true'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Default 20 (list mode).'}, 'ticket_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Default 20'}, 'offset': {'type': 'integer', 'minimum': 0}, 'status': {'enum': ['active', 'paused', 'completed'], 'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space_id', 'action'], 'properties': {'label': {'type': 'string', 'description': 'update: new label.'}, 'action': {'enum': ['list', 'add', 'update', 'remove', 'suggest'], 'type': 'string'}, 'topics': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'label': {'type': 'string', 'description': "The theme, e.g. 'Why distribution beats building'."}, 'keywords': {'type': 'array', 'items': {'type': 'string'}, 'description': '2â\x80\x934 broad, short search terms. Omit and the engine proposes them.'}, 'search_context': {'type': 'string', 'description': 'The angle or audience for this theme.'}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'add: the topics to append.'}, 'keywords': {'type': 'array', 'items': {'type': 'string'}, 'description': 'update: replacement keywords.'}, 'space_id': {'type': 'string'}, 'topic_id': {'type': 'string', 'description': 'update / remove: which topic.'}, 'is_active': {'type': 'boolean', 'description': 'update: false pauses the topic.'}, 'search_context': {'type': 'string', 'description': 'update: new angle.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'all': {'type': 'boolean', 'description': 'Release every held post in the campaign'}, 'confirm': {'type': 'boolean', 'description': 'Required only when the campaign itself is still private â\x80\x94 confirms the user agreed to community distribution and per-reply billing'}, 'post_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Post ids from get_posts to release. Omit with all:true to release every held post.'}, 'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id', 'post_ids', 'edit_request'], 'properties': {'post_ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1, 'description': 'Post UUIDs whose replies to redraft'}, 'campaign_id': {'type': 'string'}, 'edit_request': {'type': 'string', 'description': 'How the replies should change'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message'], 'properties': {'tool': {'type': 'string', 'description': 'The ProductClank tool that failed, e.g. generate_posts.'}, 'context': {'type': 'object', 'description': 'Arguments you passed, the error text, what you already tried. Never include secrets.', 'additionalProperties': {}}, 'message': {'type': 'string', 'maxLength': 5000, 'minLength': 10, 'description': 'What you were trying to do, what happened, and what you expected.'}, 'category': {'enum': ['bug', 'stuck', 'unexpected_result', 'docs', 'billing', 'feature_request', 'other'], 'type': 'string', 'description': "Default 'other'."}, 'severity': {'enum': ['low', 'normal', 'high', 'blocking'], 'type': 'string', 'description': "'blocking' = you cannot continue the user's task. Default 'normal'."}, 'ticket_id': {'type': 'string', 'description': 'Follow up on a ticket you opened earlier.'}, 'error_code': {'type': 'string', 'description': 'The machine error code from the failed call, if shown.'}, 'http_status': {'type': 'integer', 'description': 'Status from the failed call, if shown.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'dry_run': {'type': 'boolean', 'description': 'Preview verdicts without deleting (default false; still billed)'}, 'threshold': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Delete posts scoring below this (default 5)'}, 'campaign_id': {'type': 'string'}, 'review_rules': {'type': 'string', 'description': "Relevancy rules, e.g. 'Keep only posts where the author has a real problem our product solves'. Falls back to rules saved on the campaign."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space_id', 'draft_id', 'action'], 'properties': {'text': {'type': 'string', 'description': 'edit: the replacement text.'}, 'action': {'enum': ['stage', 'discard', 'revise', 'fix', 'humanize', 'review', 'edit'], 'type': 'string'}, 'preset': {'enum': ['shorter', 'longer', 'punchier', 'deeper', 'simpler', 'more_specific', 'less_salesy', 'more_casual', 'more_formal'], 'type': 'string', 'description': 'revise: the calibration chip the user clicked.'}, 'draft_id': {'type': 'string', 'description': 'From get_content_queue or a write_content_candidates result.'}, 'space_id': {'type': 'string'}, 'instruction': {'type': 'string', 'description': "revise / fix / humanize: the user's note in their words."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'force': {'type': 'boolean', 'description': 'Force a fresh analysis even if a cached one exists'}, 'campaign_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Max results (default 5)'}, 'query': {'type': 'string', 'description': 'Product name or keyword to search for'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id', 'enabled'], 'properties': {'enabled': {'type': 'boolean', 'description': 'true starts standing discovery, false stops it'}, 'confirmed': {'type': 'boolean', 'description': 'Set true ONLY after the user has seen the projected cost from a previous call and explicitly agreed to it. Omit on the first call â\x80\x94 that is what produces the projection.'}, 'campaign_id': {'type': 'string'}, 'posts_per_run': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': "Target posts per run (1-20). Defaults to the campaign's current setting, else 5. Each post found bills 12 credits."}, 'frequency_per_day': {'type': 'integer', 'maximum': 4, 'minimum': 1, 'description': "Discovery runs per day (1-4). Defaults to the campaign's current setting, else 1."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'voice': {'type': 'string', 'description': "Voice & style as a tight paragraph: tone in 3â\x80\x935 words, do's and don'ts, typical length, emoji / hashtag / link policy, words to use and avoid, and the feel of any example posts the user shared."}, 'topics': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'label': {'type': 'string', 'description': "The theme, e.g. 'Why distribution beats building'."}, 'keywords': {'type': 'array', 'items': {'type': 'string'}, 'description': '2â\x80\x934 broad, short search terms. Omit and the engine proposes them.'}, 'search_context': {'type': 'string', 'description': 'The angle or audience for this theme.'}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'The inventory of themes to post about (3â\x80\x938 to start).'}, 'space_id': {'type': 'string', 'description': 'Existing space to enable/update (one of space_id / new_space is required).'}, 'brand_doc': {'type': 'string', 'description': 'A filled brand template the user pasted â\x80\x94 costs 5 credits to structure.'}, 'new_space': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Brand or product name â\x80\x94 becomes the space name.'}, 'description': {'type': 'string'}}, 'description': 'Create a solo Amplify space for this brand (idempotent on name).', 'additionalProperties': False}, 'platforms': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Where the brand posts, e.g. ["X", "LinkedIn"]. One draft per platform is written per topic.'}, 'brand_name': {'type': 'string', 'description': 'Defaults to the space name.'}, 'post_types': {'type': 'string', 'description': 'The kinds of posts they want (how-tos, build-in-public notes, hot takes, customer wins, thesis dropsâ\x80¦).'}, 'review_threshold': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'Reviewer pass bar (default 75).'}, 'platform_playbook': {'type': 'string', 'description': 'Per-platform notes, e.g. "X: short and punchy. LinkedIn: longer, more reflective."'}, 'trending_source_handles': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 20, 'description': "X accounts to pin for 'Trending on X' (news outlets, analysts, competitors)."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'media_url': {'type': 'string', 'format': 'uri', 'description': 'Public URL of an image or video produced for the task. Must already be hosted (upload it wherever the user keeps files first) â\x80\x94 direct image links render inline for the reviewer; videos and Loom-style links show as a link.'}, 'proof_url': {'type': 'string', 'format': 'uri', 'description': 'URL of the published content or action proof (X post, video, voting page, â\x80¦)'}, 'campaign_id': {'type': 'string'}, 'description': {'type': 'string', 'maxLength': 500, 'description': 'What was done, or context for the reviewer'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['reply_id', 'reply_url'], 'properties': {'reply_id': {'type': 'string', 'description': "The reply draft's id from find_opportunities"}, 'reply_url': {'type': 'string', 'format': 'uri', 'description': 'URL of the reply (or, for a quote opportunity, the quote post) the user posted'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['product_id', 'campaign_message'], 'properties': {'product_id': {'type': 'string', 'description': 'Product UUID from search_products'}, 'references': {'type': 'string', 'description': 'Links or references to include in the campaign'}, 'campaign_goals': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Campaign goals, e.g. ["awareness", "signups"]'}, 'target_audience': {'type': 'string', 'description': 'Who the campaign should reach'}, 'campaign_message': {'type': 'string', 'description': "The core brief: what you want the community to create (e.g. 'Share how you use <product> in your daily workflow')."}, 'preferred_platform': {'type': 'string', 'description': 'Preferred platform, e.g. "x" or "farcaster"'}, 'additional_guidelines': {'type': 'string', 'description': "Extra do's/don'ts for creators"}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space_id', 'feedback'], 'properties': {'apply': {'type': 'boolean', 'description': 'Default true. false â\x86\x92 leave pending for the user to approve in Settings.'}, 'draft_id': {'type': 'string', 'description': 'The draft it was about, if any.'}, 'feedback': {'type': 'string', 'description': "The user's reaction, in their words."}, 'space_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['campaign_id'], 'properties': {'confirm': {'type': 'boolean', 'description': 'Required (true) when setting visibility to public â\x80\x94 confirms the user agreed to community distribution and per-posted-reply billing. Without it the API returns confirmation_required.'}, 'sources': {'type': 'array', 'items': {'enum': ['keywords', 'phrases', 'influencers', 'lists', 'competitors'], 'type': 'string'}, 'description': "Which discovery sources run. 'keywords' is always included. Enable 'phrases'/'influencers'/'lists'/'competitors' to actually USE what run_research found â\x80\x94 they do nothing until enabled."}, 'platform': {'enum': ['twitter', 'linkedin', 'reddit', 'youtube'], 'type': 'string', 'description': "Which network discovery works. Only changeable while the campaign has discovered nothing â\x80\x94 otherwise it returns platform_locked, because switching would mix two platforms' posts and proof rules in one campaign."}, 'is_active': {'type': 'boolean', 'description': 'false pauses discovery, true resumes it'}, 'visibility': {'enum': ['public', 'private'], 'type': 'string', 'description': '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 â\x80\x94 ask the user first, then pass it.'}, 'campaign_id': {'type': 'string'}, 'add_keywords': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Keywords to add â\x80\x94 merged with the existing list, duplicates ignored'}, 'reply_approach': {'enum': ['mention', 'flag'], 'type': 'string', '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."}, 'post_visibility': {'enum': ['public', 'private'], 'type': 'string', '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."}, 'remove_keywords': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Keywords to drop (at least one must remain)'}, 'monitor_accounts': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Specific handles the influencers source should watch; enables that source automatically'}, 'target_subreddits': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'description': 'Reddit only, enforced server-side â\x80\x94 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_accounts': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}, 'maxItems': 2}, {'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)."}, 'relevance_threshold': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Keep only posts scoring at or above this on semantic relevance (new campaigns start at 5)'}, 'target_youtube_channels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'description': 'YouTube only, enforced server-side â\x80\x94 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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['space_id', 'candidates'], 'properties': {'space_id': {'type': 'string', 'description': 'Target content space UUID from list_content_spaces.'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The post body / draft text (required).'}, 'title': {'type': 'string', 'description': 'Short internal label / topic for the draft.'}, 'platform': {'type': 'string', 'description': 'Target platform label, e.g. "ProductClank X", "LinkedIn", "Farcaster".'}, 'template': {'type': 'string', 'description': 'Content template, e.g. "Build-in-Public" or "Proof Point". Defaults to Build-in-Public.'}}, 'additionalProperties': False}, 'maxItems': 25, 'minItems': 1, 'description': '1â\x80\x9325 draft candidates to write.'}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
ChiefLab
Runs approval-gated product launch workflows with channel-specific marketing drafts, social publishing, email actions, measuremen…
AdButler
Manages AdButler advertisers, campaigns, ad items, audiences, zones, creatives, catalogs, and advertising reports.
独行录 / opcmenu
Supports founder and company discovery, collaboration goals and tasks, events and signups, networking, messaging, profiles, produ…
Meta Council
Provides governed workflows for consulting, outreach, sales deals, invoices, marketing campaigns, content approvals, accounting a…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Intelligence
Provides vendor, market, SaaS, workforce, government contract, public company, regulatory, competitive, and AI-brand intelligence…
captapi
Retrieves social media profiles, posts, engagement metrics, comments, marketplace listings, events, and Meta advertising data acr…