automate-socials
Registry code: 76a731e2108f72bd
AutomateSocials writes, schedules and publishes social media posts to Facebook, Instagram, X, LinkedIn and TikTok for one project.
Every tool needs an API key. Make one in the app under Project setup -> API keys & MCP and send it as the x-api-key header, as Authorization: Bearer <key>, or in the address as /mcp/<key>. The key decides which project the tools act on.
- endpoint
- https://automatesocials.net/mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is automate-socials live?
- Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
- Is automate-socials free to use?
- Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
- What tools does automate-socials have?
- 76 tools: get_post_status, list_posts, write_campaign_posts, delete_campaign, disconnect_account, delete_knowledge, list_schedules, list_scrapers, ….
- Is automate-socials safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 100%· all time 100%
last good check
of 76 tools
- unknown → live
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
check_projects auth-required 1h ago
Counts what each of your projects holds and checks that nothing crosses between them: posts, accounts, pages, campaigns, workflows, knowledge and media. Run it after adding a project, or whenever something looks like it belongs somewhere else.
{ "type": "object", "properties": {} }arguments 4 linesget_post_status unknown never probed
Returns where a post stands on each platform, including the public link once it is live. Instagram and TikTok process uploads in the background, so a post can be accepted and not yet visible.
{ "type": "object", "required": [ "postId" ], "properties": { "postId": { "type": "string", "description": "The post, by id or by the number shown to the user (#2), or a submission id returned by create_post." } } }arguments 12 lineslist_posts unknown never probed
Lists posts in this workspace, newest first, with the first line of each. Use it before writing to check what has already been said. The text here is shortened: to work on a post, read it with get_post first.
{ "type": "object", "properties": { "limit": { "type": "number", "description": "How many to return, at most 50." }, "offset": { "type": "number", "description": "How many of the newest to skip, to read further back." }, "status": { "type": "string", "description": "draft, scheduled, publishing, partially_published, published or failed. Several, comma separated, list them together." } } }arguments 17 lineswrite_campaign_posts unknown never probed
Writes the next few posts of a campaign immediately instead of waiting for their lead time, and schedules them at their planned dates. Use it to show the user what the plan actually produces.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." }, "count": { "type": "number", "description": "How many to write now. Default 2." } } }arguments 16 linesdelete_campaign unknown never probed
Removes a campaign and its plan. Posts it already produced are kept - they are posts like any other, and some may be published.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." } } }arguments 12 linesdisconnect_account unknown never probed
Removes a connected account and cancels anything still scheduled to it. Say how many posts that is before asking the user to confirm.
{ "type": "object", "required": [ "accountId" ], "properties": { "accountId": { "type": "string", "description": "Account id from list_accounts." } } }arguments 12 linesdelete_knowledge unknown never probed
Removes a stored item and everything derived from it. Name what you are about to delete first.
{ "type": "object", "required": [ "itemId" ], "properties": { "itemId": { "type": "string", "description": "Item id from list_knowledge or search_knowledge." } } }arguments 12 lineslist_schedules unknown never probed
Lists posts waiting to go out, soonest first.
{ "type": "object", "properties": { "limit": { "type": "number", "description": "How many to return, at most 50." } } }arguments 9 lineslist_scrapers unknown never probed
The networks this server can read posts from, and what each costs per result. Call it when the user asks whether you can look at a competitor.
{ "type": "object", "properties": {} }arguments 4 linesdelete_workflow unknown never probed
Removes a workflow and its run history. Posts it already published are untouched.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The workflow, by id or by its name as list_workflows shows it." } } }arguments 12 linesnoop unknown never probed
Verifies the connection end to end. Returns the caller identity, the channel it arrived on, and the server time. It is for someone checking that an API key or an MCP setup works, and it does nothing else: never call it as a step in doing what the user asked.
{ "type": "object", "properties": { "echo": { "type": "string", "description": "Text echoed back unchanged." } } }arguments 9 linesget_user unknown never probed
Returns the signed-in user, the active workspace, the plan and the credit balance. Call this first to confirm which workspace you are acting on.
{ "type": "object", "properties": {} }arguments 4 linesget_credits unknown never probed
Returns the credit balance for the workspace. Credits pay for generated images, video, transcription and scraping; writing, publishing and scheduling are free on paid plans.
{ "type": "object", "properties": {} }arguments 4 linesbuy_credits unknown never probed
Returns a Stripe checkout link for a credit pack. Nothing is charged until the user opens the link and pays; the credits are added to their account as soon as Stripe confirms the payment. Packs: starter (50 credits, $4.99), growth (200, $14.99), power (500, $29.99), power_plus (1000, $49.99). Credits never expire. Give the user the link; never claim the credits were added.
{ "type": "object", "required": [ "packageId" ], "properties": { "packageId": { "anyOf": [ { "type": "string", "const": "starter" }, { "type": "string", "const": "growth" }, { "type": "string", "const": "power" }, { "type": "string", "const": "power_plus" } ], "description": "starter, growth, power or power_plus." } } }arguments 29 linesdelete_project unknown never probed
Permanently deletes the current project and everything in it: posts, scheduled posts, connected accounts, knowledge, workflows, campaigns and its API keys. Credits are not affected. Only the owner can do it, it cannot be the only project, and confirmName must be the project name exactly as the user typed it. Before calling, tell the user what will be lost and have them type the name. It cannot be undone.
{ "type": "object", "required": [ "confirmName" ], "properties": { "confirmName": { "type": "string", "description": "The project name, typed by the user to confirm." } } }arguments 12 lineslist_accounts unknown never probed
Lists the social accounts connected to this workspace, with their platform, handle and whether they are currently usable. Call this before writing or scheduling, so you only offer platforms that are actually connected.
{ "type": "object", "properties": { "platform": { "type": "string", "description": "Limit to one platform: facebook, instagram, x, linkedin, tiktok or youtube." } } }arguments 9 lineslist_subaccounts unknown never probed
Lists the pages, organizations or boards an account can publish to. Facebook posts go to a page and LinkedIn can post as a company, so this is where the id for those comes from.
{ "type": "object", "required": [ "accountId" ], "properties": { "accountId": { "type": "string", "description": "The connected account to list destinations for." } } }arguments 12 lineschoose_facebook_page unknown never probed
Sets which Facebook page this project posts to, when its Facebook connection holds several. The other pages are removed from this project only. Ask the user which page belongs to this project; list_subaccounts gives the choices.
{ "type": "object", "required": [ "page" ], "properties": { "page": { "type": "string", "description": "The page: its subaccount id from list_subaccounts, or its name." } } }arguments 12 linesconnect_account unknown never probed
Produces a link the user opens to connect a social account. Authorization happens on the platform, so give them the link and wait; the account appears in list_accounts once they have finished. Use this when an account they want is missing, or when one is marked as needing a reconnect.
{ "type": "object", "required": [ "platform" ], "properties": { "platform": { "type": "string", "description": "facebook, instagram, x, linkedin, tiktok or youtube." } } }arguments 12 lineslist_instagram_accounts unknown never probed
Lists the Instagram business accounts linked to the connected Facebook pages, the ones this project can post to. Facebook must be connected first. Follow with connect_instagram.
{ "type": "object", "properties": {} }arguments 4 linesconnect_instagram unknown never probed
Connects an Instagram business account found by list_instagram_accounts. With only one available, instagramId can be left out. Replaces a different Instagram account already on this project, as every connection does.
{ "type": "object", "properties": { "instagramId": { "type": "string", "description": "instagramId or @username from list_instagram_accounts." } } }arguments 9 linesget_tiktok_settings unknown never probed
Reads, from TikTok, what the connected TikTok account may post: the account name, the privacy levels it offers, whether comments, Duet and Stitch are allowed, and the longest video. Call it before publishing to TikTok, show the user the account name, and ask them to choose the privacy level (there is no default), whether to allow comments (and Duet and Stitch for video), and whether the post promotes their own brand or is branded content. Pass their answers in create_post as platformTargets.tiktok.
{ "type": "object", "properties": {} }arguments 4 linesget_youtube_settings unknown never probed
Reads, from YouTube, the connected channel a Short would go to: its name and handle, who can be chosen to watch (public, unlisted, private) and the longest Short (3 minutes). Call it before publishing to YouTube, show the user the channel, and ask them for a title (at most 100 characters), who can watch it, and whether it is made for kids. Pass their answers in create_post as platformTargets.youtube: title, privacyStatus, isMadeForKids. The video must be vertical or square.
{ "type": "object", "properties": {} }arguments 4 linesget_brand_kit unknown never probed
The workspace's voice, audience, rules and example posts, which everything written for it follows. Your instructions already carry the voice and the rules (in the app and over MCP alike), so call this for the full kit: when the user asks what is set, when you are about to change something, or when you need the example posts.
{ "type": "object", "properties": {} }arguments 4 linesupdate_brand_kit unknown never probed
Records what the workspace sounds like. Pass only the fields you are changing; anything you leave out is kept. Example posts matter most: ask for two or three things they actually published, since those define the voice better than adjectives do. Use this whenever the user tells you something about their voice, audience or rules, rather than remembering it for one conversation.
{ "type": "object", "properties": { "ctas": { "type": "array", "items": { "type": "string" }, "description": "Calls to action they use." }, "name": { "type": "string", "description": "The brand or business name." }, "voice": { "type": "array", "items": { "type": "string" }, "description": "Adjectives for the voice, e.g. \"warm\", \"practical\"." }, "toneDo": { "type": "array", "items": { "type": "string" }, "description": "Things to do, e.g. \"name the plant\"." }, "website": { "type": "string" }, "audience": { "type": "array", "items": { "type": "string" }, "description": "Who the posts are for, e.g. \"office managers\"." }, "keywords": { "type": "array", "items": { "type": "string" }, "description": "What this project is about, in the words people would search for." }, "oneLiner": { "type": "string", "description": "What they do, in one sentence." }, "toneDont": { "type": "array", "items": { "type": "string" }, "description": "Things to avoid, e.g. \"use stock phrases\"." }, "bannedWords": { "type": "array", "items": { "type": "string" }, "description": "Words never to use." }, "description": { "type": "string", "description": "A paragraph of background." }, "hashtagSets": { "type": "object", "description": "Named sets of hashtags, e.g. {\"core\": [\"#plants\", \"#office\"]}.", "patternProperties": { "^(.*)$": { "type": "array", "items": { "type": "string" } } } }, "examplePosts": { "type": "array", "items": { "type": "object", "required": [ "platform", "text" ], "properties": { "text": { "type": "string" }, "platform": { "type": "string" } } }, "description": "Posts they wrote themselves. These define the voice; add rather than invent." }, "languagePrimary": { "type": "string", "description": "Two-letter code for the language posts are usually written in." }, "defaultImagePrompt": { "type": "string", "description": "A template wrapped around every image prompt, where {{DESCRIPTION}} is replaced by what the picture should show. This is how a project keeps one look. Pass an empty string to clear it." }, "defaultVideoPrompt": { "type": "string", "description": "The same, for video, where {{DESCRIPTION}} is what the clip should show. Left empty, videos use the image template, since a project usually has one look. Pass an empty string to clear it." }, "contentInstructions": { "type": "string", "description": "Standing rules for everything written for this project, e.g. \"always end with a question\". These are applied to every draft, so put a rule here rather than repeating it each time. Pass an empty string to clear them." }, "replaceExamplePosts": { "type": "boolean", "description": "Replace the stored examples instead of adding to them." } } }arguments 120 lineslearn_voice_from_published unknown never probed
Fills the brand kit's example posts from what this workspace has already published. Use it when the brand kit has no examples and there is a publishing history, instead of asking the user to paste posts they have already sent.
{ "type": "object", "properties": { "limit": { "type": "number", "description": "How many to take, up to 10. Defaults to 5." }, "platform": { "type": "string", "description": "Take examples from one platform only." } } }arguments 13 linesanalyze_website unknown never probed
Reads the project's website and fills in what it does, who it is for, its keywords and its voice. Use it when the brand kit is empty and you know the address, instead of interviewing the user about things their own site already says. It fills only empty fields unless you say otherwise.
{ "type": "object", "properties": { "url": { "type": "string", "description": "The website. Defaults to the one already on the profile." }, "overwrite": { "type": "boolean", "description": "Replace fields that are already filled in. Ask the user before doing this." } } }arguments 13 lineslist_image_models unknown never probed
The image models available, what each costs in credits, and which one this workspace uses by default. Call it when the user asks what you can make images with, or before generating if they might care about the price.
{ "type": "object", "properties": {} }arguments 4 linesestimate_image_cost unknown never probed
Says what generating would cost in credits, without generating. Use it when the user asks what something would cost. You do not need it before generating: the confirmation prompt already states the price.
{ "type": "object", "properties": { "count": { "type": "number", "description": "How many images. Defaults to 1." }, "model": { "type": "string", "description": "A model from list_image_models. Defaults to the workspace one." }, "resolution": { "type": "string", "description": "1K, 2K or 4K. Larger costs more at some models." } } }arguments 17 linesgenerate_image unknown never probed
Makes a picture from a description and stores it, ready to attach to a post. Call it as soon as you know what the picture should be: the user is asked to confirm the spend before it runs, with the price, so you do not need to ask them first. Describe the subject and the setting in the prompt; the model cannot see the brand kit, so put anything from it that matters into the words. If the project has set an image prompt, it is wrapped around what you write and sets the look, so you do not need to repeat the house style.
{ "type": "object", "required": [ "prompt" ], "properties": { "count": { "type": "number", "description": "How many to make, up to 4. Defaults to 1." }, "model": { "type": "string", "description": "A model from list_image_models. Defaults to the workspace one." }, "prompt": { "type": "string", "description": "What the picture should show, in detail." }, "imageUrl": { "type": "string", "description": "An existing picture to edit or work from, rather than starting blank." }, "resolution": { "type": "string", "description": "1K, 2K or 4K. Larger costs more at some models." }, "aspectRatio": { "type": "string", "description": "e.g. 1:1, 4:5 for Instagram, 16:9 for a link preview." }, "forPlatform": { "type": "string", "description": "Where this picture is going: facebook, instagram, x, linkedin or tiktok. Give it and the shape is chosen to suit that feed, which saves the user a cropped post." }, "ignoreProjectStyle": { "type": "boolean", "description": "Generate exactly this prompt, without the project's image template. Only when the user asks for something outside their usual look." } } }arguments 40 linesset_default_image_model unknown never probed
Sets which model this workspace generates with unless told otherwise. Use it when the user says they want a particular one from now on.
{ "type": "object", "required": [ "model" ], "properties": { "model": { "type": "string", "description": "A model from list_image_models." } } }arguments 12 lineslist_video_models unknown never probed
The video models available, what each costs per second at each resolution, and how long a clip can be. Call it when the user asks whether you can make video.
{ "type": "object", "properties": {} }arguments 4 linesestimate_video_cost unknown never probed
Says what a video of a given length and resolution would cost in credits, without making one. Use it whenever the user has not agreed to a price, since video is the most expensive thing here.
{ "type": "object", "properties": { "model": { "type": "string", "description": "A model from list_video_models." }, "seconds": { "type": "number", "description": "How long, in seconds." }, "resolution": { "type": "string", "description": "Defaults to 720p. What each model offers, and at what price, is in list_video_models." } } }arguments 17 linesgenerate_video unknown never probed
Makes a short video with its own audio and stores it, ready to attach to a post. It takes a few minutes: over MCP or the API it may answer with status "processing" and a jobId instead of a mediaId; then call get_video_status with that jobId until it gives the mediaId, and only then save the draft. Say what it will cost first; video is the most expensive thing here and is charged by the second. Pass imageId to animate a picture the project already has - a product photo or one you generated - and it becomes the first frame. Structure the prompt with [VISUAL], [SPEECH], [SOUNDS] and [TEXT] sections; English is the language the model is validated in.
{ "type": "object", "required": [ "prompt" ], "properties": { "model": { "type": "string", "description": "A model from list_video_models." }, "prompt": { "type": "string", "description": "What happens, what is said, what is heard. E.g. \"[VISUAL] a hand lifts the jar... [SPEECH] Three plants, one minute. [SOUNDS] quiet kitchen\"." }, "imageId": { "type": "string", "description": "A picture in this project to animate; it becomes the first frame." }, "seconds": { "type": "number", "description": "How long. Shorter is cheaper and usually better." }, "audioUrl": { "type": "string", "description": "Narration or music to build the visuals around." }, "imageUrl": { "type": "string", "description": "A public picture to animate, if it is not one of ours." }, "resolution": { "type": "string", "description": "Defaults to 720p, which is right for a phone screen. Higher costs several times more; list_video_models has the rates." }, "aspectRatio": { "type": "string", "description": "16:9, 9:16 for reels, TikTok and YouTube Shorts, 1:1, 4:3, 3:4, or auto to let the model choose." }, "negativePrompt": { "type": "string", "description": "What to keep out of it." }, "ignoreProjectStyle": { "type": "boolean", "description": "Make exactly this prompt, without the project's video template. Only when the user asks for something outside their usual look." } } }arguments 48 linesget_video_status unknown never probed
Whether a video generate_video started is ready. Pass the jobId it returned. When it is done this gives the mediaId to attach to a post with save_draft, edit_post or create_post. If it is still being made, wait about a minute and ask again; never generate it a second time and never make up a media id.
{ "type": "object", "required": [ "jobId" ], "properties": { "jobId": { "type": "string", "description": "The jobId generate_video returned." } } }arguments 12 linessearch_knowledge unknown never probed
Searches what this workspace has stored: notes, pages, documents, product details. Use it before writing anything factual about them, rather than guessing or asking. It searches by meaning, so ask in whatever words the user used. Returns nothing when the workspace has stored nothing, which is worth saying rather than working around.
{ "type": "object", "required": [ "query" ], "properties": { "limit": { "type": "number", "description": "How many passages to return, up to 20. Defaults to 5." }, "query": { "type": "string", "description": "What you need to know, in plain words." } } }arguments 16 linesadd_knowledge unknown never probed
Stores text the workspace will want again: product details, positioning, a policy, notes from a call. Use it when the user tells you something factual worth keeping, rather than only using it in this conversation. Give it a title so it can be recognised later.
{ "type": "object", "required": [ "content" ], "properties": { "title": { "type": "string", "description": "A short name, e.g. \"Pricing, 2026\"." }, "content": { "type": "string", "description": "The text to store." }, "sourceUrl": { "type": "string", "description": "Where it came from, if anywhere." } } }arguments 20 linesadd_knowledge_from_url unknown never probed
Fetches a web page or a PDF at a URL and stores its text so it can be searched later. Use it for the workspace's own site, a product page, a press release. It reads the page as it is served, so a page that needs a sign-in will not work.
{ "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "description": "The address to read." }, "title": { "type": "string", "description": "A name for it. Defaults to the page title." } } }arguments 16 linesadd_knowledge_from_file unknown never probed
Reads an already uploaded PDF, image or text file and stores what it says so it can be searched. Give it a media id from an upload.
{ "type": "object", "required": [ "mediaId" ], "properties": { "title": { "type": "string", "description": "A name for it. Defaults to the file name." }, "mediaId": { "type": "string", "description": "Media id from an upload tool." } } }arguments 16 lineslist_knowledge unknown never probed
Lists what this workspace has stored, with whether each item is searchable yet. Use it when the user asks what you know about them, or when a search came back empty and you want to say why.
{ "type": "object", "properties": {} }arguments 4 linescreate_presigned_upload_url unknown never probed
Returns a presigned URL for uploading a local file directly to storage. PUT the file bytes to uploadUrl with the same Content-Type, call complete_upload with the mediaId, then use mediaId or publicUrl when creating a post.
{ "type": "object", "required": [ "filename", "contentType" ], "properties": { "filename": { "type": "string", "description": "Original file name, used for the extension." }, "contentType": { "type": "string", "description": "MIME type, for example image/jpeg or video/mp4." } } }arguments 17 linescomplete_upload unknown never probed
Call after PUTting a file to the presigned uploadUrl: checks the file arrived and records its size and type. Says so if the file is not there yet.
{ "type": "object", "required": [ "mediaId" ], "properties": { "mediaId": { "type": "string", "description": "The mediaId create_presigned_upload_url returned." } } }arguments 12 linesupload_media_from_url unknown never probed
Downloads a publicly reachable file into storage and returns a stable URL to use in posts. Use this for images or video that already live on the web.
{ "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "description": "Publicly reachable URL of the file." }, "altText": { "type": "string", "description": "Accessibility description." } } }arguments 16 linesget_media unknown never probed
Returns the stored details of one media asset, including whether its bytes have arrived.
{ "type": "object", "required": [ "mediaId" ], "properties": { "mediaId": { "type": "string", "description": "Id returned when the media was created." } } }arguments 12 linescreate_post unknown never probed
Publishes a post, or schedules one to be published. This is not how a draft is saved: use save_draft for that, which needs no confirmation. Publishes immediately by default; pass scheduledTime for a specific moment, or useNextFreeSlot to take the next opening in the calendar. Use variants to word the same post differently per platform. To publish something you saved with save_draft, pass its postId and the draft becomes the post rather than a second copy of it. altText is not supported for Instagram Reels; ignored for Instagram video posts.
{ "type": "object", "properties": { "text": { "type": "string", "description": "The post body. Per-platform limits apply; see variants to differ by platform. Leave it out when publishing an existing draft by postId: the draft already has its words." }, "title": { "type": "string", "description": "Internal title, never published." }, "postId": { "type": "string", "description": "A draft to publish, by its id or by the number shown to the user (#1). Its text, pictures and per-platform wording are used unless you pass your own." }, "thread": { "type": "array", "items": { "type": "object", "required": [ "text" ], "properties": { "text": { "type": "string" }, "mediaIds": { "type": "array", "items": { "type": "string" } } } }, "description": "Continuations, posted as replies to the first one. X and Threads only; other platforms ignore them." }, "mediaIds": { "type": "array", "items": { "type": "string" }, "description": "Media ids from an upload tool." }, "variants": { "type": "object", "description": "Per-platform overrides, keyed by platform name.", "patternProperties": { "^(.*)$": { "type": "object", "properties": { "text": { "type": "string" }, "thread": { "type": "array", "items": { "type": "object", "required": [ "text" ], "properties": { "text": { "type": "string" }, "mediaIds": { "type": "array", "items": { "type": "string" } } } } }, "mediaIds": { "type": "array", "items": { "type": "string" } } } } } }, "destinations": { "type": "array", "items": { "type": "object", "required": [ "accountId" ], "properties": { "target": { "type": "object", "properties": { "link": { "type": "string", "description": "Link preview, Facebook only." }, "title": { "type": "string", "description": "Required by YouTube (at most 100 characters, no < or >); optional title for TikTok photos." }, "pageId": { "type": "string", "description": "Facebook page or LinkedIn organization to post as." }, "altText": { "type": "string", "description": "Accessibility description for the image. Not supported for Instagram Reels; ignored for Instagram video posts." }, "mediaType": { "type": "string", "description": "reel or story, for Instagram and Facebook video." }, "isYourBrand": { "type": "boolean", "description": "TikTok only: promoting your own brand." }, "shareToFeed": { "type": "boolean", "description": "Instagram reels: also show in the feed." }, "disabledDuet": { "type": "boolean", "description": "TikTok only." }, "firstComment": { "type": "string", "description": "Posted as a comment once the post is live." }, "privacyLevel": { "type": "string", "description": "TikTok only, and required: who can see it, one of the options get_tiktok_settings lists for the account. The user chooses it; ask them, never pick one yourself." }, "collaborators": { "type": "array", "items": { "type": "string" }, "description": "Instagram handles to invite, up to three." }, "isAiGenerated": { "type": "boolean", "description": "TikTok only: AI-generated content disclosure." }, "isMadeForKids": { "type": "boolean", "description": "YouTube only, and required by law: whether the video is made for kids. Ask the user; never assume." }, "privacyStatus": { "anyOf": [ { "type": "string", "const": "public" }, { "type": "string", "const": "unlisted" }, { "type": "string", "const": "private" } ], "description": "YouTube only, and required: who can watch it. The user chooses it; ask them, never pick one yourself." }, "disabledStitch": { "type": "boolean", "description": "TikTok only." }, "disabledComments": { "type": "boolean", "description": "TikTok only." }, "isBrandedContent": { "type": "boolean", "description": "TikTok only: paid partnership." }, "containsSyntheticMedia": { "type": "boolean", "description": "YouTube only: realistic AI-generated or altered content. Set from the media when left out." }, "shouldNotifySubscribers": { "type": "boolean", "description": "YouTube only: tell the channel's subscribers. Default yes." } } }, "accountId": { "type": "string", "description": "Connected account id from list_accounts." }, "subaccountId": { "type": "string", "description": "Page or organization id from list_subaccounts." } } }, "description": "Where to publish. Leave it out when publishing a draft by postId: it goes to the connected account for each platform the draft was written for." }, "scheduledTime": { "type": "string", "description": "ISO 8601 instant to publish at." }, "platformTargets": { "type": "object", "description": "Settings per platform, keyed by platform, applied to that platform's destination - also when publishing a draft by postId. TikTok needs privacyLevel chosen by the user (read the options with get_tiktok_settings, ask, never pick one yourself), and the interaction and commercial-content choices they made. YouTube needs a title, privacyStatus and isMadeForKids, all asked of the user (get_youtube_settings shows the channel); the video must be vertical or square and at most 3 minutes, which makes it a Short.", "patternProperties": { "^(.*)$": { "type": "object", "properties": { "link": { "type": "string", "description": "Link preview, Facebook only." }, "title": { "type": "string", "description": "Required by YouTube (at most 100 characters, no < or >); optional title for TikTok photos." }, "pageId": { "type": "string", "description": "Facebook page or LinkedIn organization to post as." }, "altText": { "type": "string", "description": "Accessibility description for the image. Not supported for Instagram Reels; ignored for Instagram video posts." }, "mediaType": { "type": "string", "description": "reel or story, for Instagram and Facebook video." }, "isYourBrand": { "type": "boolean", "description": "TikTok only: promoting your own brand." }, "shareToFeed": { "type": "boolean", "description": "Instagram reels: also show in the feed." }, "disabledDuet": { "type": "boolean", "description": "TikTok only." }, "firstComment": { "type": "string", "description": "Posted as a comment once the post is live." }, "privacyLevel": { "type": "string", "description": "TikTok only, and required: who can see it, one of the options get_tiktok_settings lists for the account. The user chooses it; ask them, never pick one yourself." }, "collaborators": { "type": "array", "items": { "type": "string" }, "description": "Instagram handles to invite, up to three." }, "isAiGenerated": { "type": "boolean", "description": "TikTok only: AI-generated content disclosure." }, "isMadeForKids": { "type": "boolean", "description": "YouTube only, and required by law: whether the video is made for kids. Ask the user; never assume." }, "privacyStatus": { "anyOf": [ { "type": "string", "const": "public" }, { "type": "string", "const": "unlisted" }, { "type": "string", "const": "private" } ], "description": "YouTube only, and required: who can watch it. The user chooses it; ask them, never pick one yourself." }, "disabledStitch": { "type": "boolean", "description": "TikTok only." }, "disabledComments": { "type": "boolean", "description": "TikTok only." }, "isBrandedContent": { "type": "boolean", "description": "TikTok only: paid partnership." }, "containsSyntheticMedia": { "type": "boolean", "description": "YouTube only: realistic AI-generated or altered content. Set from the media when left out." }, "shouldNotifySubscribers": { "type": "boolean", "description": "YouTube only: tell the channel's subscribers. Default yes." } } } } }, "useNextFreeSlot": { "type": "boolean", "description": "Take the next free opening in the calendar." } } }arguments 313 linessave_draft unknown never probed
Saves a post you have written so it appears under Drafts and can be published or scheduled later. Use it whenever you write a post the user has not asked you to publish yet, instead of leaving it in the conversation: a draft in the chat is lost, a saved one is not. Always name the platforms it is for, and attach any picture you made for it. To change something that already exists, use edit_post rather than saving a second copy. Nothing is published by this.
{ "type": "object", "required": [ "text", "platforms" ], "properties": { "text": { "type": "string", "description": "The post body." }, "title": { "type": "string", "description": "Internal title, never published." }, "postId": { "type": "string", "description": "Revise this draft instead of saving a new one." }, "thread": { "type": "array", "items": { "type": "object", "required": [ "text" ], "properties": { "text": { "type": "string" }, "mediaIds": { "type": "array", "items": { "type": "string" } } } }, "description": "Continuations for X or Threads." }, "mediaIds": { "type": "array", "items": { "type": "string" }, "description": "Media ids, e.g. from generate_image." }, "variants": { "type": "object", "description": "Per-platform wording, keyed by platform.", "patternProperties": { "^(.*)$": { "type": "object", "properties": { "text": { "type": "string" }, "mediaIds": { "type": "array", "items": { "type": "string" } } } } } }, "platforms": { "type": "array", "items": { "type": "string" }, "description": "Which platforms this draft is for, e.g. [\"x\", \"linkedin\"]. Required: a draft that does not say where it is going cannot be shown beside the account it belongs to, and nobody can tell what it was written for." } } }arguments 76 linesedit_post unknown never probed
Changes a post that already exists: its words, its pictures, the platforms it is for, or any combination. Pass only what changes; everything else stays. This is how you rewrite a draft or swap its image - do not write a second copy. Read it with get_post first when you are changing the words, since you cannot rewrite what you have not read. Works on drafts and on posts that are scheduled but have not gone out; a published post cannot be edited here.
{ "type": "object", "required": [ "postId" ], "properties": { "text": { "type": "string", "description": "New words. Leave out to keep what is there." }, "title": { "type": "string", "description": "Internal title, never published." }, "postId": { "type": "string", "description": "The post, by id or by the number shown to the user (#2)." }, "mediaIds": { "type": "array", "items": { "type": "string" }, "description": "Replaces the pictures or video. Pass an empty list to take the media off entirely." }, "variants": { "type": "object", "description": "Per-platform changes, keyed by platform (facebook, instagram, x, linkedin, tiktok, youtube). Only the platforms and fields named change; the rest stays.", "patternProperties": { "^(.*)$": { "type": "object", "properties": { "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Its own words on this platform, or null to use the shared text again." }, "mediaIds": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ], "description": "Its own pictures on this platform (an empty list for none), or null to use the shared ones again." } } } } }, "platforms": { "type": "array", "items": { "type": "string" }, "description": "Which platforms it is for, if that is changing." } } }arguments 70 linesdelete_post unknown never probed
Deletes a draft, or cancels one that has not gone out yet. A post that is already published cannot be deleted here: it exists on the platform, and removing our record would not remove it.
{ "type": "object", "required": [ "postId" ], "properties": { "postId": { "type": "string", "description": "The post, by id or by the number shown to the user." } } }arguments 12 linesget_post unknown never probed
The full text of one post, with its pictures, its per-platform wording and its state. Call it before changing or rewriting a post: list_posts only shows the first line of each, and working from that means working from a fragment.
{ "type": "object", "required": [ "postId" ], "properties": { "postId": { "type": "string", "description": "The post, by id or by the number shown to the user (#2)." } } }arguments 12 lineslist_top_posts unknown never probed
Ranks published posts by how they did: views, likes, comments, shares, reach, saves, or engagement (likes + comments + shares + saves). Each network a post went to is ranked on its own. Numbers are the ones already collected (an hour, a day and a week after publishing, then daily for a month); nothing is fetched from the networks. Use it for "which post worked", "what did best on LinkedIn this month", or before planning what to write next.
{ "type": "object", "properties": { "limit": { "type": "number", "description": "How many, 1 to 50. Defaults to 10." }, "since": { "type": "string", "description": "ISO date or time; posts published on or after it. Defaults to 30 days ago." }, "until": { "type": "string", "description": "ISO date or time; posts published on or before it." }, "sortBy": { "type": "string", "description": "One of views, likes, comments, shares, reach, saves, engagement. Defaults to views." }, "platform": { "type": "string", "description": "facebook, instagram, x, linkedin, tiktok or youtube. Leave out for all." } } }arguments 25 linesget_post_analytics unknown never probed
The numbers for one published post on every network it went to: the latest reading and every earlier one, so you can say whether it is still growing. Pass refresh: true to read the networks again now (at most every ten minutes); leave it off to use what was already collected.
{ "type": "object", "required": [ "postId" ], "properties": { "postId": { "type": "string", "description": "The post, by id or by the number the user sees (#7)." }, "refresh": { "type": "boolean", "description": "Read the networks again now. Defaults to false." } } }arguments 16 lineslist_slots unknown never probed
Lists the recurring weekly openings this workspace publishes in, and which of the coming ones are already taken. Read this before scheduling, so posts land in the rhythm the user already chose.
{ "type": "object", "properties": { "days": { "type": "number", "description": "How far ahead to show occupancy, default 14." } } }arguments 9 linescreate_slots unknown never probed
Adds recurring weekly openings to the calendar. Times are in the workspace timezone. Adding more slots than there is content for produces gaps, so ask how often the user actually wants to post.
{ "type": "object", "required": [ "slots" ], "properties": { "slots": { "type": "array", "items": { "type": "object", "required": [ "dayOfWeek", "hour" ], "properties": { "hour": { "type": "number", "description": "Hour in the workspace timezone, 0 to 23." }, "minute": { "type": "number", "description": "Minute, 0 to 59. Defaults to 0." }, "dayOfWeek": { "type": "number", "description": "0 is Sunday, 1 is Monday, through 6 for Saturday." }, "accountIds": { "type": "array", "items": { "type": "string" }, "description": "Limit this slot to certain accounts. Omit for any." } } } } } }arguments 39 linesdelete_slot unknown never probed
Removes one recurring opening. Posts already scheduled into it keep their time.
{ "type": "object", "required": [ "slotId" ], "properties": { "slotId": { "type": "string" } } }arguments 11 linesnext_available_slot unknown never probed
Returns the next free opening in the calendar, without taking it. Use it to tell the user when a post would go out before scheduling it.
{ "type": "object", "properties": { "accountId": { "type": "string", "description": "Only consider slots that publish to this account." } } }arguments 9 linesupdate_schedule unknown never probed
Changes when a post goes out, or takes it off the calendar and leaves it as a draft. Pass scheduledTime for a specific moment or useNextFreeSlot to take the next opening. A post that has already gone out cannot be moved.
{ "type": "object", "required": [ "submissionId" ], "properties": { "unschedule": { "type": "boolean", "description": "Take it off the calendar and leave it as a draft, without cancelling it." }, "submissionId": { "type": "string", "description": "The scheduled post: a submission id from list_schedules, a post id, or the number shown to the user (#4)." }, "scheduledTime": { "type": "string", "description": "ISO 8601 instant to publish at instead." }, "useNextFreeSlot": { "type": "boolean", "description": "Take the next free opening in the calendar." } } }arguments 24 linesdelete_schedule unknown never probed
Cancels a post that has not gone out yet. A post that is already published cannot be cancelled: the platform has it and we do not.
{ "type": "object", "required": [ "submissionId" ], "properties": { "submissionId": { "type": "string", "description": "The scheduled post: a submission id, a post id, or the number shown to the user (#4)." } } }arguments 12 linesestimate_scrape_cost unknown never probed
Says what reading someone’s posts would cost in credits, without reading anything.
{ "type": "object", "required": [ "platform" ], "properties": { "limit": { "type": "number", "description": "How many posts. Defaults to 10." }, "platform": { "type": "string", "description": "instagram, facebook, linkedin, tiktok or x." } } }arguments 16 linesscrape_posts unknown never probed
Reads recent posts from a public profile on Instagram, Facebook, LinkedIn, TikTok or X, and keeps them so patterns across weeks can be seen. Use it to look at a competitor before writing, or as the first step of a workflow. It costs credits per post read, so say what it will cost first.
{ "type": "object", "required": [ "platform", "target" ], "properties": { "limit": { "type": "number", "description": "How many posts to read, up to 100. Defaults to 10." }, "target": { "type": "string", "description": "A handle, a profile URL, or a search term where the network allows one." }, "platform": { "type": "string", "description": "instagram, facebook, linkedin, tiktok or x." } } }arguments 21 linesestimate_source_cost unknown never probed
Says what youtube, tiktok, audio or research would cost in credits, without reading anything. Article, PDF and plain text pages are free: use add_knowledge_from_url or add_knowledge for those instead.
{ "type": "object", "required": [ "sourceType" ], "properties": { "sourceType": { "type": "string", "description": "youtube, tiktok, audio or research." } } }arguments 12 linesread_source unknown never probed
Turns a YouTube video, a TikTok, an audio file, or a research question into text to write from. sourceType youtube or tiktok take a video url and read its spoken transcript (English captions for YouTube; TikTok's own captions when it has them, speech-to-text otherwise). sourceType audio takes a url to a recording and transcribes it. sourceType research takes a question and answers it from a live web search. Each costs credits; quote it first with estimate_source_cost. The text is stored in the knowledge base unless saveToKnowledge is false, and is also returned here so it can be used straight away.
{ "type": "object", "required": [ "sourceType", "value" ], "properties": { "title": { "type": "string", "description": "A name for it, if stored. Defaults to the source’s own title." }, "value": { "type": "string", "description": "A video or audio URL for youtube, tiktok and audio; the question itself for research." }, "sourceType": { "type": "string", "description": "youtube, tiktok, audio or research." }, "saveToKnowledge": { "type": "boolean", "description": "Store the result in the knowledge base. Defaults to true." } } }arguments 25 lineslist_workflows unknown never probed
The workflows in this project, what they do, when they next run, and how the last run went. Call it when the user asks what is running on its own.
{ "type": "object", "properties": {} }arguments 4 linesget_workflow unknown never probed
One workflow in full: every step with its settings, its schedule, and how the last runs went. Read it before changing anything, since update_workflow replaces the steps you pass and you cannot keep what you have not seen.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The workflow, by id or by its name." } } }arguments 12 linescreate_workflow unknown never probed
Sets up work that repeats on its own: read a source, write a post, make a picture, publish it. Steps run in the order given. It is created paused and does nothing until start_workflow turns it on, so making one is safe. Use it when the user asks for something to happen daily, weekly or at a set time.
{ "type": "object", "required": [ "name", "steps" ], "properties": { "name": { "type": "string", "description": "What it is for, in a few words." }, "runAt": { "type": "string", "description": "once: an ISO time." }, "steps": { "type": "array", "items": { "type": "object", "required": [ "kind" ], "properties": { "url": { "type": "string", "description": "source: a page to read." }, "kind": { "type": "string", "description": "One of: source, write, image, video, draft, publish." }, "brief": { "type": "string", "description": "write: what the post should be about." }, "limit": { "type": "number", "description": "source: how many posts to read. Defaults to 10." }, "model": { "type": "string", "description": "image or video: a model from list_image_models / list_video_models." }, "query": { "type": "string", "description": "source: search the knowledge base instead." }, "prompt": { "type": "string", "description": "image: what to draw. Defaults to what the writer suggested." }, "target": { "type": "string", "description": "source: whose feed - a handle or a profile URL." }, "seconds": { "type": "number", "description": "video: how long. Costs by the second." }, "platform": { "type": "string", "description": "source: read a feed instead - instagram, facebook, linkedin, tiktok or x. This costs credits per post read." }, "fromImage": { "type": "boolean", "description": "video: animate the picture from the step before. On by default when there is one." }, "platforms": { "type": "array", "items": { "type": "string" }, "description": "write: which platforms. Defaults to every connected account." }, "withImage": { "type": "boolean", "description": "write: a picture will be attached, so write for one." }, "resolution": { "type": "string", "description": "video: 720p, 1080p or 2k." }, "aspectRatio": { "type": "string", "description": "video: 9:16 for reels, 16:9, 1:1." }, "scheduledTime": { "type": "string", "description": "publish: an ISO time instead of publishing at once." } } }, "description": "The steps, in order." }, "context": { "type": "object", "description": "Shared settings every step can read.", "patternProperties": { "^(.*)$": {} } }, "trigger": { "type": "string", "description": "recurring (default), once, or manual for run-on-demand only." }, "timeOfDay": { "type": "string", "description": "recurring: HH:MM in the project timezone." }, "daysOfWeek": { "type": "array", "items": { "type": "number" }, "description": "recurring: 0 is Sunday. [1,2,3,4,5] is weekdays." } } }arguments 118 linesupdate_workflow unknown never probed
Changes a workflow that already exists: its steps, its name, or when it runs. Pass only what changes. Call get_workflow first when you are changing the steps, since the list you pass replaces the ones that are there. Its run history is kept.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The workflow, by id or by its name." }, "name": { "type": "string" }, "runAt": { "type": "string", "description": "For a one-off: an ISO time." }, "steps": { "type": "array", "items": { "type": "object", "required": [ "kind" ], "properties": { "url": { "type": "string", "description": "source: a page to read." }, "kind": { "type": "string", "description": "One of: source, write, image, video, draft, publish." }, "brief": { "type": "string", "description": "write: what the post should be about." }, "limit": { "type": "number", "description": "source: how many posts to read. Defaults to 10." }, "model": { "type": "string", "description": "image or video: a model from list_image_models / list_video_models." }, "query": { "type": "string", "description": "source: search the knowledge base instead." }, "prompt": { "type": "string", "description": "image: what to draw. Defaults to what the writer suggested." }, "target": { "type": "string", "description": "source: whose feed - a handle or a profile URL." }, "seconds": { "type": "number", "description": "video: how long. Costs by the second." }, "platform": { "type": "string", "description": "source: read a feed instead - instagram, facebook, linkedin, tiktok or x. This costs credits per post read." }, "fromImage": { "type": "boolean", "description": "video: animate the picture from the step before. On by default when there is one." }, "platforms": { "type": "array", "items": { "type": "string" }, "description": "write: which platforms. Defaults to every connected account." }, "withImage": { "type": "boolean", "description": "write: a picture will be attached, so write for one." }, "resolution": { "type": "string", "description": "video: 720p, 1080p or 2k." }, "aspectRatio": { "type": "string", "description": "video: 9:16 for reels, 16:9, 1:1." }, "scheduledTime": { "type": "string", "description": "publish: an ISO time instead of publishing at once." } } }, "description": "The complete new list of steps, in order." }, "context": { "type": "object", "patternProperties": { "^(.*)$": {} } }, "timeOfDay": { "type": "string", "description": "HH:MM in the project timezone." }, "daysOfWeek": { "type": "array", "items": { "type": "number" }, "description": "0 is Sunday." } } }arguments 115 linesstart_workflow unknown never probed
Turns a workflow on. From then on it runs to its schedule and publishes without asking again, so make sure the user has seen what it does. Use stop_workflow to pause it.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The workflow, by id or by its name as list_workflows shows it." } } }arguments 12 linesstop_workflow unknown never probed
Pauses a workflow so it stops running on its own. Nothing is deleted and it can be started again.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The workflow, by id or by its name as list_workflows shows it." } } }arguments 12 linesrun_workflow unknown never probed
Runs a workflow immediately, whatever its schedule says, and reports what each step did. Use it to show the user what their workflow actually produces before leaving it to run on its own.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The workflow, by id or by its name as list_workflows shows it." } } }arguments 12 lineslist_campaigns unknown never probed
The campaigns in this project, what each is for, and how far through it is.
{ "type": "object", "properties": {} }arguments 4 linesget_campaign unknown never probed
One campaign in full: every planned post with its date, kind (educational, promotional, engagement, proof, behind_the_scenes, news), theme and angle, and which of them have been written. Read it before changing anything about the campaign.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." } } }arguments 12 linesplan_campaign unknown never probed
Plans a run of posts around one goal: what each post is for, its theme and its angle, spread over the days the project posts on. It writes nothing and publishes nothing - the plan is one line per post, to be read and changed before anything is written. Use this when the user wants a month of content, a launch, or anything with more than a couple of posts behind one idea.
{ "type": "object", "required": [ "name", "goal", "posts" ], "properties": { "goal": { "type": "string", "description": "What the campaign is for, in the user's words." }, "name": { "type": "string", "description": "What to call it." }, "notes": { "type": "string", "description": "Anything else the planner should know." }, "offer": { "type": "string", "description": "What is being promoted, if anything." }, "posts": { "type": "number", "description": "How many posts, up to 60." }, "themes": { "type": "array", "items": { "type": "string" }, "description": "Subjects it should cover." }, "sources": { "type": "array", "items": { "type": "string" }, "description": "Pages the campaign is based on - articles, a product page, a blog. They are read here and kept in the knowledge base, and every post of the campaign is then written from what they say. Pass them whenever the user says the campaign is about their own content; you do not need to read anything first." }, "audience": { "type": "string", "description": "Who it is for, if not the usual audience." }, "leadDays": { "type": "number", "description": "How many days before a post goes out it is written. Default 2." }, "startsOn": { "type": "string", "description": "ISO date for the first post. Defaults to tomorrow." }, "useSlots": { "type": "boolean", "description": "Publish into the project's own calendar slots instead of at a fixed hour, taking the next free one on or after each planned day. Prefer this when the project has slots." }, "platforms": { "type": "array", "items": { "type": "string" }, "description": "Which platforms. Defaults to every connected account." }, "timeOfDay": { "type": "string", "description": "HH:MM in the project timezone. Defaults to 09:00." }, "daysOfWeek": { "type": "array", "items": { "type": "number" }, "description": "Days to post on, 0 is Sunday. Defaults to every day." }, "withImages": { "type": "boolean", "description": "Generate a picture for each post. This costs credits." } } }arguments 82 linesupdate_campaign unknown never probed
Changes how a campaign runs: whether its posts get a generated picture, whether it uses the calendar slots, how many days ahead it writes, or its name. Pass only what changes. Pictures apply to the posts not yet written and cost a credit each at the cheapest model - say the number before turning them on.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." }, "name": { "type": "string" }, "leadDays": { "type": "number", "description": "How many days before a post goes out it is written." }, "useSlots": { "type": "boolean", "description": "Publish into the project's calendar slots." }, "withImages": { "type": "boolean", "description": "Generate a picture for each post still to be written. This costs credits." } } }arguments 27 linesedit_campaign_plan unknown never probed
Adds posts to a campaign plan, removes planned ones, or rewrites their theme and angle. This is how you add "one more post about X" without planning the campaign again. Posts already written keep their words - use edit_post for those - and removing one that is already written is refused.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." }, "add": { "type": "array", "items": { "type": "object", "required": [ "theme", "angle" ], "properties": { "date": { "type": "string", "description": "ISO date. Leave out to add it after the last one." }, "kind": { "type": "string", "description": "One of: educational, promotional, engagement, proof, behind_the_scenes, news." }, "angle": { "type": "string", "description": "One sentence: what this post says and why somebody stops for it." }, "theme": { "type": "string", "description": "Three to five words." }, "imagePrompt": { "type": "string", "description": "What a picture for it should show." } } }, "description": "Posts to add to the plan." }, "remove": { "type": "array", "items": { "type": "number" }, "description": "Day numbers to drop, as get_campaign shows them." }, "update": { "type": "array", "items": { "type": "object", "required": [ "day" ], "properties": { "day": { "type": "number", "description": "Which planned post, by its day number." }, "date": { "type": "string", "description": "Move it to another day." }, "kind": { "type": "string" }, "angle": { "type": "string" }, "theme": { "type": "string" } } }, "description": "Changes to planned posts." } } }arguments 81 linesstart_campaign unknown never probed
Turns a campaign on. Its posts are written a couple of days before each one goes out and land in the calendar as scheduled, where they can still be read, edited or cancelled. Posts with pictures spend credits as they are written. Tell the user how many posts and roughly how many credits before calling this.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." } } }arguments 12 linespause_campaign unknown never probed
Stops a campaign writing any more posts. Posts already written keep their place in the calendar; cancel them individually if they should not go out.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." } } }arguments 12 linescancel_campaign_posts unknown never probed
Pauses a campaign and cancels every post of it that has not gone out yet. Posts already published are untouched: they exist on the platform.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The campaign, by id or by name." } } }arguments 12 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id76a731e2108f72bd.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/76a731e2108f72bd/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/76a731e2108f72bd?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.