Skip to main content
Glama

Check post

check_post
Read-onlyIdempotent

A dry run of create_post: saves nothing and returns every problem as { platform, field, message, fix }, plus each caption as it would go out (rendered_caption, with {link} filled in) and its length against the platform limit. ok: true means create_post will accept it. Captions may contain {link}, replaced by the brand site link with UTM tags. Facebook and LinkedIn captions must contain {link} unless the first_comment does; Instagram and TikTok must not contain links ("Link in bio" is the usual line). Threads takes one hashtag at most, Instagram 5 and 20 @ mentions. Google Business Profile takes 1,500 characters and no hashtags; put its link on the button (google.button) rather than in the text, and keep phone numbers and emails out of it (Google may remove the post). TikTok takes 2,200 characters on a video and 4,000 on a photo post. X counts 280 its own way (a link is 23, an emoji or a Chinese, Japanese or Korean character 2), and X posts with a link ({link}, a URL or a bare domain like example.com) are capped per calendar month (UTC) by plan: get_workspace gives x_link_posts used and left. The brand rules from get_brand apply too.

Input Schema

NameRequiredDescriptionDefault
slugNoUsed as utm_content; defaults to the title slugified. Unique per brand.
brandNoBrand id from get_workspace. Optional when the workspace has one brand.
briefYesWhat the post is and why, for the person approving it.
titleYesShort internal title, for the person reviewing.
targetsYesOne per platform.
ai_generatedNoTrue when the content is AI-made or AI-edited and looks realistic. Instagram gets its AI info label; YouTube gets its altered or synthetic content declaration; TikTok drafts must be labelled by hand in the app; Threads and Facebook have no label. Applies to every target unless one sets its own.
scheduled_atYesISO 8601 with an offset, e.g. 2026-10-06T09:00:00-07:00 for 9am in Los Angeles. A time without an offset is read as UTC. The workspace's time zone is in get_workspace. Or "next_slot": each platform takes the next of its posting times in the next 30 days that no other post of this brand takes on that platform (taken means the exact same time, so a post at 09:05 leaves 09:00 free). A platform's posting times are the brand's own for it (brands[].platform_posting_weeks in get_workspace), else the workspace's posting_week. Platforms on the same times go out together, at the first time free on all of them; one on other times gets its own time on its target. The answer gives the post's time (scheduled_at, local_time) and each target's. Refused when there are no posting times or all are taken.

Output Schema

NameRequiredDescriptionDefault
okYes
targetsYes
problemsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / targets / items / properties / first_comment / description
      Previous value: -"Posted as the first comment right after the post: Instagram feed posts and carousels (2,200 characters; not a single video, which is a Reel), Facebook (8,000), LinkedIn (1,250), Threads (500; a reply that counts toward Threads' 250 posts a day) and YouTube (10,000; regular videos and Shorts; posted but not pinned, pin it in YouTube Studio). Not TikTok, X, Bluesky or Pinterest. On LinkedIn and Facebook put the link here ({link}) rather than in the caption; on Instagram links in comments are not clickable either, so say \"Link in bio\". Hashtags: Threads one, Instagram 5 across caption and comment. {link} and the brand rules apply as in captions. A person approves it with the post."New value: +"Posted as the first comment right after the post: Instagram feed posts and carousels (2,200 characters; not a single video, which is a Reel), Facebook (8,000), LinkedIn (1,250), Threads (500; a reply that counts toward Threads' 250 posts a day) and YouTube (10,000; regular videos and Shorts; posted but not pinned, pin it in YouTube Studio). Not TikTok, X, Bluesky, Pinterest or Google Business Profile. On LinkedIn and Facebook put the link here ({link}) rather than in the caption; on Instagram links in comments are not clickable either, so say \"Link in bio\". Hashtags: Threads one, Instagram 5 across caption and comment. {link} and the brand rules apply as in captions. A person approves it with the post."
    • addedInput schema / properties / targets / items / properties / google
      Added value: +{
      +  "description": "Google Business Profile only: the post's type, event, offer and button. Left out, a plain update with no button. A person approves it with the post.",
      +  "properties": {
      +    "button": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "type": {
      +              "description": "learn_more, book, order (Order online), shop (Buy) or sign_up.",
      +              "enum": [
      +                "learn_more",
      +                "book",
      +                "order",
      +                "shop",
      +                "sign_up"
      +              ],
      +              "type": "string"
      +            },
      +            "url": {
      +              "description": "https link where the customer does it, or {link} for the brand link.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "type",
      +            "url"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The button under the post."
      +    },
      +    "event": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "end": {
      +              "description": "Same form as start; a time on both or neither.",
      +              "type": "string"
      +            },
      +            "start": {
      +              "description": "YYYY-MM-DD, or YYYY-MM-DDTHH:MM with a time, in the business’s own time.",
      +              "type": "string"
      +            },
      +            "title": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "title",
      +            "start",
      +            "end"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "An event, or the dates an offer runs. Google removes it once it has ended."
      +    },
      +    "offer": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "coupon_code": {
      +              "type": "string"
      +            },
      +            "redeem_url": {
      +              "description": "https link, or {link}.",
      +              "type": "string"
      +            },
      +            "terms": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "post_type": {
      +      "description": "update (the default): news about the business. event: needs event. offer: a sale or deal; needs event too (its title and the dates it runs), plus any of offer.",
      +      "enum": [
      +        "update",
      +        "event",
      +        "offer"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / targets / items / properties / media_id / description
      Previous value: -"The one image or video. Or give media_ids. Media is optional on Facebook, Threads, LinkedIn, X, Bluesky: leave media_id and media_ids out for a text post. Instagram, TikTok, YouTube, Pinterest need an image or video."New value: +"The one image or video. Or give media_ids. Media is optional on Facebook, Threads, LinkedIn, X, Bluesky, Google Business Profile: leave media_id and media_ids out for a text post. Instagram, TikTok, YouTube, Pinterest need an image or video."
    • changedInput schema / properties / targets / items / properties / media_ids / description
      Previous value: -"A carousel: 2 or more media ids in posting order, first is the cover. Give this or media_id, not both. Instagram up to 10 (images and videos), Threads 20, Facebook 10 images, TikTok photo posts 35 images, LinkedIn 20 images, YouTube none."New value: +"A carousel: 2 or more media ids in posting order, first is the cover. Give this or media_id, not both. Instagram up to 10 (images and videos), Threads 20, Facebook 10 images, TikTok photo posts 35 images, LinkedIn 20 images, YouTube, Pinterest and Google Business Profile none."
    • changedInput schema / properties / targets / items / properties / platform / enum
      Previous value: -[
      -  "instagram",
      -  "facebook",
      -  "threads",
      -  "tiktok",
      -  "linkedin",
      -  "youtube",
      -  "x",
      -  "bluesky",
      -  "pinterest"
      -]New value: +[
      +  "instagram",
      +  "facebook",
      +  "threads",
      +  "tiktok",
      +  "linkedin",
      +  "youtube",
      +  "x",
      +  "bluesky",
      +  "pinterest",
      +  "googlebusiness"
      +]
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered, yet the description adds substantial behavioral detail beyond them: nothing is saved, the exact error shape { platform, field, message, fix }, the rendered_caption output, and constraints such as X's monthly link cap and Google's removal of posts containing phone numbers.

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

Conciseness3/5

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

The purpose and return-shape are front-loaded, which is good, but the second half is a dense reference dump of per-platform character counts and link rules that largely duplicates material that lives in brand rules and platform docs. Much of it is useful, but the wall-of-text format makes it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a validation tool over a deeply nested target schema, the description covers what an agent needs: the dry-run semantics, the success signal (ok: true), the error contract, caption rendering, and the platform-specific constraints that determine pass/fail. An output schema exists, so return values need no further explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description meaningfully enriches the schema: it explains {link} substitution with UTM tags, which platforms may or must contain {link}, per-platform hashtag and mention limits, and that Google's link belongs on the button rather than in text. These are semantic rules the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource — 'a dry run of create_post' — and immediately distinguishes itself from the sibling create_post by declaring that it saves nothing. An agent knows exactly what this tool is for without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'A dry run of create_post' plus 'ok: true means create_post will accept it' makes the use context clear: validate before creating. It does not, however, explicitly say when not to use it or name a true alternative, so it stops short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources