Skip to main content
Glama

Server Details

Writes a native post per network from one idea and publishes it: TikTok, Instagram, YouTube & more

Ownership verified
Status
Healthy
Uptime
100.0% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
Perufitlife/postwire-mcp
GitHub Stars
0
Server Listing
PostWire
ChatGPT
–
Claude
PostWire

TDQS

A3.8/5.0

Scored across 26 tools

Disambiguation4/5

Most tools have distinct resource/action targets, but several clusters require careful reading to separate: single vs bulk vs recurring vs AI-generated week scheduling, and the three link-creation tools. No two tools do exactly the same thing, but the broad posting surface creates some selection overhead.

Naming Consistency4/5

The set is largely consistent snake_case verb_noun naming, especially across create_*, get_*, list_*, and schedule/post operations. A few deviations like client_report, my_account, and bulk_schedule keep it from being perfectly uniform.

Tool Count2/5

At 26 tools, the surface lands in the heavy 25+ range and is larger than an agent can comfortably hold without extra selection effort. The platform's scope is broad, but several ancillary tools could likely be consolidated or scoped down.

Completeness3/5

Core publishing, scheduling, listing, cancellation, status checks, analytics, media handling, and brand/client setup are covered. However, there are notable gaps: no update/reschedule tool for existing scheduled posts, no management of recurring series beyond creations, no obvious approval-inbox tool, and no revoke operation for client or connect links.

Available Tools

26 tools
bulk_scheduleSchedule many posts at once (CSV or rows)AInspect

Checks, and on request schedules, many posts at once: a CSV file's text (csv) or a list of rows (rows), each row one post with the columns date ("2026-10-12 09:00" in the row's or the upload's timezone, an ISO time with offset, or "next_slot"), networks ("linkedin, x"), text, optional text_ (each network its own text), media_urls (https links; video: or document: prefix), alt_text, first_comment (LinkedIn, Bluesky, Mastodon), x_reply and x_thread (X), title, brand and label. dry_run defaults to true: nothing is scheduled and the result lists, for every row, the time it would go out, its networks, each network's length as that network counts it, the X credits it would use, whether it would wait for approval or be held by the plan, and its errors and warnings. With dry_run false the upload is scheduled whole or not at all: if any row has an error nothing is scheduled (code bulk_rows_invalid) and each row says what to fix. The plan limits rows per upload (Free 20, Starter 500, Pro 1,000, Agency 2,000); on Free, posts past the 3 scheduled at a time are saved as held. The same upload twice is refused (code bulk_already_scheduled) unless allow_duplicate is true. The result has batch_id; DELETE /api/bulk/{batch_id} undoes the whole upload. Write the rows for the user when they describe a content plan; show them the dry run before scheduling.

NameRequiredDescriptionDefault
csvNoThe CSV file's text, first line = column names. Comma, semicolon or tab separated.
rowsNoInstead of csv: the posts as objects with the same column names, e.g. [{"date":"2026-10-12 09:00","networks":"linkedin, bluesky","text":"…"}].
dry_runNotrue (default): only check. false: schedule every row, or none.
brand_idNoDefault brand for rows without a brand column.
timezoneNoIANA timezone for dates without one, e.g. "America/Lima". Default: each row's timezone column, else the brand's queue timezone.
date_formatNoHow to read dates like 12/10/2026. Default ymd (2026-10-12).
fit_long_textNoAccept a text over a network's limit and cut it at a sentence or word when published, instead of refusing the row.
allow_duplicateNoSchedule an upload identical to one already scheduled.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations provide only hints; the description adds rich behavior: dry_run defaults true and returns per-row projections (times, networks, lengths, X credits, approvals, errors), all-or-nothing scheduling when dry_run=false, plan row limits per tier, Free-tier 3-at-a-time holding, duplicate refusal, and batch_id undo. This goes well beyond what the annotations convey.

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

Conciseness4/5

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

Front-loaded with purpose and dense with useful detail, but it is delivered as one long paragraph rather than structured points, which makes the return-behavior and limits slightly harder to scan. Nearly every sentence earns its place.

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 complex bulk mutation tool with no output schema, the description covers return-value behavior (per-row dry-run report, batch_id), atomicity semantics, plan limits, and duplicate handling. An agent has what it needs to invoke it correctly and safely.

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

Parameters5/5

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

Schema coverage is 100% for top-level params, so baseline is 3, but the description adds substantial row/column semantics the loosely-typed rows/csv params do not encode (date formats, networks, text_<network>, media_urls prefixes, x_thread, first_comment per network). This genuinely compensates for the generic array/string parameter shapes.

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?

States a specific verb and resource (check/schedule many posts at once) with both input modes (csv text or rows list) named up front. It is clearly distinguishable from single-post siblings like schedule_post and create_recurring_post.

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?

Gives explicit workflow guidance ("Write the rows for the user when they describe a content plan; show them the dry run before scheduling") and describes the check-first default. It does not explicitly name when to prefer schedule_post or create_recurring_post instead, but the bulk scope and dry-run workflow set clear usage context.

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

cancel_scheduled_postCancel a scheduled postA
DestructiveIdempotent
Inspect

Cancels a queued or held post, or withdraws one waiting for approval, so it is never published (a withdrawn post's approval links stop working). Only works before it starts publishing. Takes the id of the scheduled post.

NameRequiredDescriptionDefault
idYesScheduled post id.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds real value beyond that: it explains the withdrawal side effect (approval links stop working) and the pre-publishing timing limit, which annotations cannot express.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the action and states, then the critical timing constraint and side effect. No filler or repetition of the title.

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

Completeness4/5

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

For a one-parameter mutation with no output schema, the description covers what the tool does, when it is valid, and the user-visible side effect. It stops short of stating what a successful call returns or how an already-cancelled post is handled, though the idempotent annotation partly covers the latter.

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

Parameters3/5

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

Schema description coverage is 100% for the single id parameter, so the schema already carries the meaning. "Takes the id of the scheduled post" restates the schema without adding format, source, or lookup guidance, so the baseline 3 applies.

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?

States a specific verb (cancels/withdraws) and resource (queued, held, or approval-waiting scheduled post), and enumerates the post states it applies to. An agent can distinguish this from schedule_post, list_scheduled_posts, or get_post_status without opening any 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?

"Only works before it starts publishing" gives a clear applicability window, which is the decisive condition for choosing this tool. It does not name an alternative for the post-publish case, but the exclusion is stated clearly enough to route the agent.

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

check_video_qualityCheck how TikTok will treat a video before posting itA
Read-onlyIdempotent
Inspect

Reads the header of a video file at a public https URL (an upload's media_url works) and says what TikTok will do with it: codec and profile, width x height, fps, average bitrate (kbps), duration, HDR/10-bit, audio codec, and a verdict — keeps_quality (TikTok leaves it looking the same), recompressed (TikTok visibly re-encodes it: HEVC/AV1, HDR or 10-bit, above 1080x1920, above 30 fps, above 16 Mbps) or unknown (the header could not be read). advice lists what to change and message_for_user is one sentence with the export settings TikTok leaves almost untouched (1080x1920, H.264 High, 30 fps, 8-12 Mbps, AAC, SDR). Reads at most 768 KB of the file, nothing is published or changed. Up to 60 checks an hour per account.

NameRequiredDescriptionDefault
urlYesThe https link to the .mp4 or .mov file itself (not a share page).

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it names the 768 KB read cap, states that nothing is published or changed, discloses a rate limit of 60 checks per hour per account, and explains what each verdict means (including the specific triggers for 'recompressed': HEVC/AV1, HDR or 10-bit, above 1080x1920, above 30 fps, above 16 Mbps). These are exactly the operational constraints an agent needs before calling.

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

Conciseness4/5

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

The core purpose and verdict taxonomy are front-loaded, and the safety/rate-limit facts are packed into the tail. It is a single dense paragraph with a long parenthetical list, which is efficient but slightly run-on; splitting the verdict definitions would improve scannability without adding length.

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?

There is no output schema, but the description compensates by naming the returned fields (verdict, advice, message_for_user, plus codec/size/fps/bitrate details) and explaining what each contains. Combined with one fully-documented parameter and complete annotations, an agent has everything needed to call it correctly and interpret the result.

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% and already specifies https, .mp4/.mov, and length bounds, so the schema carries most of the burden. The description still adds value by clarifying that a share page will not work and that an upload's media_url is a valid source, and by explaining the 'unknown' outcome when the header cannot be read.

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 description opens with a concrete verb and resource (reads a video file's header, reports what TikTok will do with it) and enumerates exactly what it returns: codec/profile, dimensions, fps, bitrate, duration, HDR, audio codec, verdict. It is unmistakably distinct from the sibling posting/scheduling tools because it explicitly operates before posting and publishes nothing.

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?

The 'before posting it' framing plus 'an upload's media_url works' tells the agent this is a pre-flight diagnostic that pairs with an existing upload, and the verdict vocabulary (keeps_quality / recompressed / unknown) makes the use case concrete. It stops short of explicitly naming which sibling tool to call instead for posting or fetching the media_url, so it does not fully close the loop on alternatives.

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

client_reportGet a client's monthly reportA
Read-onlyIdempotent
Inspect

Returns one brand's report for last month (or the month given): what was published on each network, the numbers each network returned, clicks on tracked links and approvals, and client_link: the client's private page opened on its Last month tab, when the brand has an active client link. Pro and above brand it for the client; on Free and Starter it is a preview under PostWire's mark and its note names the plan that includes client reports.

NameRequiredDescriptionDefault
monthNoThe month, e.g. 2026-09. Default last month.
brand_idNoThe client's brand. Omit it and give brand_name instead.
brand_nameNoThe client's brand by name.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already establish that this is a read-only, idempotent, non-destructive, closed-world operation. The description adds meaningful behavioral context beyond those hints, especially the plan-dependent white-label vs preview behavior and the conditional inclusion of client_link.

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

Conciseness4/5

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

The description is front-loaded with the core return value and then adds the relevant conditional details. It is dense but mostly earns its length; the single long sentence is slightly harder to scan than a broken-out structure would be.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining what comes back, and it does so by naming the report categories and the client_link behavior. It is nearly complete for a simple read tool, though it does not clarify output structure or edge cases such as brand lookup failures.

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

Parameters3/5

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

Schema description coverage is 100%, so month, brand_id, and brand_name are already well documented in the schema. The description reinforces the single-brand scope and default month, but it does not add syntax, validation, or selection rules beyond what the schema provides.

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

Purpose4/5

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

The description clearly states that it returns one brand's monthly report and enumerates the report contents, which is much more specific than the title alone. It does not explicitly contrast itself with nearby siblings such as get_post_performance, so it stops short of full sibling differentiation.

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

Usage Guidelines2/5

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

It explains that the report is for last month or a supplied month, and notes the client_link condition, but it does not say when an agent should choose this over alternatives like get_post_performance or list_brands. There are no explicit when-to-use or when-not-to-use guidelines.

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

create_brandCreate a brandAInspect

Creates a new, empty brand (a separate business with its own connected social accounts) on the PostWire account and returns its id. The plan limits the number of brands; at the limit nothing is created and the response names the plan that includes more brands, its monthly price and a checkout link.

NameRequiredDescriptionDefault
nameYesBrand name, e.g. the client's business name.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses key behavioral traits: the brand is created empty, the id is returned, and at the plan limit nothing is created and the response redirects the user to an upgrade path with plan name, price, and checkout link. This is valuable side-effect and failure-mode context.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, and every clause earns its place—defining brand, noting the return value, and explaining the plan-limit behavior. No repetition or filler.

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?

The tool is simple (one required parameter), the schema documents the parameter fully, and the description covers the return value plus the important edge case at the plan limit. An agent has enough to call it correctly without an output schema.

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

Parameters3/5

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

The input schema already fully documents the single 'name' parameter with a clear example, so the description adds little parameter-specific meaning. Per the baseline, 3 is appropriate when schema coverage is 100%.

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 description states a specific verb ('Creates'), a precise resource ('a new, empty brand'), defines what a brand is, and notes the return value. It clearly differentiates this tool from sibling listing or connection tools like list_brands and create_connect_link.

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?

The description gives clear context for when this tool is appropriate: creating a new separate business entity on the PostWire account. It doesn't explicitly name alternatives or state when not to use it, but the purpose is specific enough that an agent can route to it correctly.

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

create_recurring_postSet up a recurring postAInspect

Sets up a post that repeats on a schedule: daily, weekly on some weekdays, or monthly on some days of the month (31 falls on the last day of shorter months; -1 = the last day), every N days, weeks or months, at 1-4 times a day in a timezone (daylight saving handled), from a start date until an end date or for a number of times. variants (a list of texts) are used in turn, so the same text does not repeat every time. The duplicate guard (guard_days, default 3, 0 = off) skips a network where the same text went out in the last guard_days when an occurrence is published: networks flag repeated posts. Occurrences are put in the queue up to 7 days ahead as ordinary scheduled posts (each can be edited or canceled alone), and go through the brand's approval rules and the plan's limits like any post. On every paid plan (Starter 25, Pro 100, Agency 500 at a time); not on Free. Returns the recurring post with its next occurrences and any warnings (for example: one text every day with a 3-day guard would be skipped).

NameRequiredDescriptionDefault
ruleYesWhen it repeats.
textNoThe post, when there is one text.
labelNoName shown in the queue, e.g. "Monday tip".
brand_idNoBrand whose accounts to use; omit for the default brand.
variantsNoTexts used in turn: the 1st occurrence uses the 1st, the 2nd the 2nd, and so on, starting again after the last.
photo_urlNoOptional image (public https link).
platformsYesConnected platforms to post to.
video_urlNoOptional video (public https link).
guard_daysNoSkip a network where the same text went out in the last N days. Default 3; 0 = off.

TDQS

A4.6/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: DST handling, duplicate-guard skipping, queueing up to 7 days ahead, per-occurrence editability, approval rules, plan limits, and returned warnings. These details are directly useful for an agent deciding whether and how to call the tool.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and the length is justified by a complex recurring-scheduling tool with nested rule parameters. It is dense and delivered as one long paragraph, which slightly reduces readability despite every part being relevant.

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?

Given no output schema, the description explicitly covers the return value: the recurring post with next occurrences and warnings. It also covers plan limits, approval behavior, queue timing, and duplicate-guard interactions, leaving little an agent needs to infer before calling it.

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 adds real meaning beyond the schema: monthly day 31 fallback behavior, -1 as last day, variants rotating in turn, guard_days skipping networks, and the duplicate-guard warning example. It does not explain every parameter, but it enriches the most semantically complex ones.

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 description states a specific verb and resource: it sets up a post that repeats on a schedule. It immediately distinguishes the tool from ordinary scheduling by explaining recurrence, variants, guard behavior, and queued occurrences.

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?

It gives clear usage context, including that occurrences become ordinary scheduled posts, go through approval rules and plan limits, and are available on paid plans but not Free. It does not explicitly name sibling alternatives such as schedule_post or bulk_schedule, so it falls short of full when-to-use/when-not guidance.

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

generate_postsWrite a native draft for each platformAInspect

Writes one draft per platform from a single idea, adapted to each network's rules (character limit, hashtags, title and tags for YouTube, hook-first caption for TikTok and Reels, link placement for LinkedIn, Slack formatting, plain text for Nostr). For the blogs (wordpress, devto, hashnode) the draft is a full article: title (<= 70 characters), summary (120-160 characters), a Markdown body with H2 sections, and 3-5 tags (Dev.to: 4). Nothing is published. Returns { drafts: { : { text, title?, tags?, summary?, thread?, first_comment? } } } and, if the writer skipped a platform, { missing: [...] }. thread (the posts after text) comes back when the user asks for a thread (X, Bluesky, Mastodon), or on Bluesky and Mastodon when the idea is too long for one post there; first_comment comes with it when the idea has a link (LinkedIn, X, Bluesky, Mastodon), so the link goes in the first comment. Counts toward the account's daily AI limit.

NameRequiredDescriptionDefault
promptYesThe idea or message to communicate. More detail gives better drafts.
media_urlNoOptional public https URL of the photo or video the post is about.
platformsYesPlatforms to write for, e.g. ["linkedin","x","bluesky"].
brand_voiceNoOptional tone or style notes, e.g. "friendly, no emojis, first person plural".

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows it's a non-destructive mutation. The description adds real value beyond that: it clarifies 'Nothing is published' (resolving the write-hint ambiguity), discloses that the call 'Counts toward the account's daily AI limit', and details the return shape including the missing-platform case. Strong disclosure, though it doesn't explain auth or failure modes.

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

Conciseness4/5

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

The core purpose is front-loaded in the first sentence, followed by per-platform rules and return shape. It is dense and long, but with no output schema the return-format detail is not wasted. Slightly packed, but every sentence carries information.

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?

With no output schema, the description fully carries the return-value burden: the exact { drafts: { <platform>: { text, title?, ... } } } shape, the { missing: [...] } case, and the conditional presence of thread and first_comment. Combined with the publication and daily-limit notes, an agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema and the baseline is 3. The description lists per-platform formatting behavior (character limits, hashtags, hooks) that relates to the 'platforms' argument but adds no per-parameter syntax or constraint detail beyond the schema. Baseline 3 is correct.

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?

States a specific verb and resource ('Writes one draft per platform from a single idea') and immediately scopes it as a drafting tool with 'Nothing is published', which cleanly separates it from publishing siblings like post_to_social and schedule_post. The verb+resource are fully clear and the agent can distinguish it from alternatives.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'Nothing is published' suggests using this when you want drafts, and the thread/first_comment passages describe output conditions. However, no sibling tool is named as an alternative and no explicit when-to-use-vs-when-not guidance is given. Adequate but leaves the agent to infer the routing.

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

get_post_performanceShow what works: best posts, times and patternsA
Read-onlyIdempotent
Inspect

Returns what the account's own numbers say works, over the last 90 days, computed from the numbers each network reports (no estimates): the published posts ranked against the median of the same social account on the same network, each with its network, brand, link, excerpt, metric (views where the network reports them, otherwise likes + reposts + replies), value, that median, n (posts in the median), a verdict (winner at 2x the median or more, under at half or less) and what the post had (format, first-line type, question, emoji, number up front, day and time, length, hashtags); best_times: the time of day and day of week whose posts did best, with the size of the effect and both sample sizes, or — below 8 measured posts or without a clear difference — two hours to post at to learn it; streak: weeks in a row with at least one post; headline_pattern: the strongest pattern, as a sentence with its numbers; next: three concrete suggestions for the next post, each with the numbers behind it; competitors: public accounts the user watches (YouTube, Bluesky, Mastodon; TikTok captions only), their posts against their own median and what their best posts share; measurable: what each network lets PostWire read, and why the rest is not measurable. Posts younger than 24 hours are not ranked; patterns need at least 10 measured posts and 3 per group. Depending on the account's plan it also returns every pattern, the per-network detail and which formats to double down on or rethink; on a plan without them, locked.patterns_preview says which further patterns are ready and how large each effect is, without the winning value. Read-only; nothing here uses AI.

NameRequiredDescriptionDefault
brand_idNoOnly this brand's posts. Omit for all brands.
platformNoOnly posts on this network.
timezoneNoIANA timezone for the day and time patterns, e.g. "America/Lima". Default UTC.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only assert readOnly/idempotent/non-destructive; the description goes far beyond them with the 90-day window, the 24-hour ranking floor, minimum sample thresholds, plan-gated output (locked.patterns_preview revealing effect sizes but withholding winning values), per-network measurability limits, and the 'no estimates, no AI' computation basis. That is exactly the behavioral context an agent needs before promising results to a user.

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 opening clause is well front-loaded and the field inventory is genuinely needed since there is no output schema, but the whole thing is delivered as one ~330-word semicolon-chained sentence with no visual hierarchy. Dense and information-earning, yet structurally unscannable for an agent skimming before a call.

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 read-only analytics tool with no output schema, three optional filter params and rich annotations, the description covers what is returned, the computation basis, the gating rules and the fallback behavior ('below 8 measured posts ... two hours to post at to learn it'). Nothing an agent needs to invoke it correctly or set expectations is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so brand_id, platform and timezone (with its IANA example) are already fully documented in the schema. The description only indirectly touches timezone via 'day and time patterns' and never adds filter syntax beyond what the schema provides — baseline 3 is correct here.

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?

States a specific return (ranked posts, best times, streaks, patterns, suggestions, competitor benchmarks) computed from the account's own reported numbers over a fixed 90-day window. An agent can distinguish it immediately from every sibling, none of which produce analytics — the nearest relatives (replicate_top_post, plan_week) consume this kind of data rather than produce it.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the description names qualifying conditions ('patterns need at least 10 measured posts and 3 per group', 'posts younger than 24 hours are not ranked') and closes with 'Read-only; nothing here uses AI.' However, it never says when to prefer this over list_scheduled_posts or get_post_status, nor that replicate_top_post is the natural follow-up.

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

get_post_statusCheck a post's publishing statusA
Read-onlyIdempotent
Inspect

Returns the status and link of a published post, by platform and the post id returned when it was published, plus verification: PostWire's own independent read-back of the post from the network (state live / processing / accepted / not_public / gone / failed / unverifiable, with what the network answered and when), separate from the API response the publish got. PostWire re-reads every post 10 min, 1 h, 6 h, 24 h and 72 h after publishing; this call reads it again now. For a post that is waiting for approval or scheduled, pass the id PostWire returned for it (platform can then be omitted): the status is pending_approval (with who was asked and the review link), rejected (with the reason), scheduled, or each network's result once it went out. For TikTok and YouTube it asks the platform for the processing status and returns the public link once there is one. For an Instagram video returned as "processing", pass the id it returned: the answer is processing, published (with its id and link) or failed (with the reason). For networks that publish immediately it returns status "published" and, where the id allows it, the post's link (Telegram channels, including private ones as t.me/c//; Bluesky; LinkedIn; Facebook).

NameRequiredDescriptionDefault
idYesThe post id returned when it was published on that platform, or the id PostWire returned for a post waiting for approval or scheduled.
brand_idNoBrand whose account published it; omit for the default brand.
platformNoPlatform of the post, e.g. "tiktok". Optional: without it PostWire finds the network from the post it recorded (or from the id itself for TikTok, Bluesky and LinkedIn); pass it for a post published outside PostWire.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: the independent `verification` read-back with its state vocabulary and timestamp, the automatic re-read cadence, and the live platform polling for TikTok/YouTube and Instagram 'processing' responses.

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 is front-loaded in the first clause, but the body is one sprawling sentence followed by a dense platform-by-platform enumeration whose detail (t.me/c/ URL shape, per-network immediate-publish list) is mostly implementation trivia. It is informative but bloated and hard to scan for the one or two facts an agent needs.

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 read tool with no output schema, the description fully documents what comes back: status/link, the verification block and its states, and the special-case returns for pending, rejected, scheduled, processing and failed posts. There is no meaningful gap an agent would need filled before calling it.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains `id`, `brand_id` and `platform`, including the optionality of platform and the fallback id inference. The description restates the pending/scheduled id case without adding format or syntax the schema lacks, so the baseline 3 applies.

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

Purpose5/5

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

Opens with a specific verb and resource ('Returns the status and link of ... a published post') and immediately narrows scope to status/link rather than metrics, which separates it from get_post_performance. It also expands the resource to cover pending-approval and scheduled posts, so an agent knows this is the status-lookup tool for any post lifecycle stage.

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?

Gives concrete when-to-use contexts: call it to read the post again now rather than waiting for the 10 min/1 h/6 h/24 h/72 h re-reads, and pass PostWire's id when the post is awaiting approval or scheduled. It does not name a sibling alternative or state when NOT to use it, so it stops short of a full routing instruction.

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

get_uploaded_fileCheck an uploaded fileA
Read-onlyIdempotent
Inspect

Returns the status of a file uploaded through a PostWire upload link, by upload_id: "waiting" until the file has arrived, then "done" with its media_url (an https URL valid for 6 hours, renewed when the post goes out, that works as video_url or photo_url), kind (photo or video), size and content type.

NameRequiredDescriptionDefault
upload_idYesThe upload_id returned with the upload link.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/non-destructive/closed-world, and the description adds substantial behavior beyond them: the two-state status machine, the 6-hour media_url validity window, its renewal when the post goes out, and that the URL serves as both video_url and photo_url. This is exactly the runtime context an agent cannot get from annotations.

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

Conciseness5/5

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

One front-loaded sentence with the status semantics first and the return payload second; the nested parenthetical is dense but every clause (validity window, renewal, dual URL use) carries real information.

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?

With no output schema, the description must carry the return contract and does: status values, media_url with lifetime, kind, size, and content type. Nothing needed to interpret the response is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is already documented as 'The upload_id returned with the upload link.' The description's 'by upload_id' adds no syntax, format, or sourcing detail beyond what the schema states, so the baseline 3 applies.

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?

States a specific verb (returns status) and resource (a file uploaded through a PostWire upload link) keyed by upload_id, which clearly distinguishes it from sibling create_upload_link. An agent can tell it apart without opening any 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?

Implies the polling workflow by describing the waiting→done transition and tying the tool to an upload link, so an agent knows to call it after creating a link. It does not explicitly name create_upload_link as the prerequisite or state when-not to use it, so it stops short of full routing guidance.

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

get_x_creditsShow my X (Twitter) creditsA
Read-onlyIdempotent
Inspect

Shows what posting to X (Twitter) costs this account and what it has left. X is a pay-per-use add-on of the paid plans (Starter, Pro, Agency, Scale; not Free, not during a trial): 1 X credit = 1 plain X post, a post with a link uses 10, each image or video adds 1. Returns mode (paid, free, trial or internal), the plan's monthly X credits, used and left, top-up credits, X posts today against the daily limit, the price table, the last movements, and links to buy top-up credits (80 credits for $5, 340 for $20; each opens a Stripe payment page, nothing is charged unless paid there). With text, it also returns how many credits that post would use (with thread or reply: the whole chain).

NameRequiredDescriptionDefault
textNoOptional: an X post to price before sending it.
replyNoOptional: a reply under the post (or the thread), priced with it.
videoNoOptional: a video attached to that post.
imagesNoOptional: images attached to that post.
threadNoOptional: the posts of a thread after text, to price the whole thread.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial non-obvious context: the credit conversion rules, the meaning of the returned mode values, the top-up price points, and the explicit reassurance that opening a Stripe page charges nothing. That is exactly the value-add expected above the annotation bar.

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

Conciseness4/5

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

Front-loaded with the core purpose and the cost model, then the return contents, then the top-up details. It is long for one description but nearly every clause carries distinct information; the plan-list parenthetical is the only slightly expendable part.

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?

With no output schema, the description carries the full burden and does so: it enumerates the return fields (mode, monthly credits, used/left, top-ups, daily usage, price table, movements, purchase links) and explains the pricing semantics. Nothing an agent needs to call or interpret it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description goes beyond it by explaining what the parameters are FOR (pricing a post before sending) and how the pricing aggregates across text, reply, images, video and thread ('with thread or reply: the whole chain'). It stops short of tying each individual parameter to a concrete example.

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?

States a specific verb and resource ('Shows what posting to X (Twitter) costs this account and what it has left') and immediately grounds it in the pricing model, which clearly separates it from siblings like get_upgrade_link or my_account. An agent can tell what it does 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?

Usage context is clear: it is the pre-flight cost/balance check, and the optional params exist to price a prospective post, thread, reply, image or video before sending. It does not explicitly name an alternative or a 'do not use when' condition, so it stops short of full routing guidance.

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

invite_teammateInvite a teammateAInspect

Invites a person by email to work in this PostWire workspace with a role: admin (Everything except billing and ownership: members, brands, connections, approval rules, keys); editor (Writes, schedules and publishes posts, within each brand's approval rules); contributor (Drafts and schedules posts; every one waits for approval before it goes out); approver (Only the approvals inbox: sees the previews, approves or rejects); viewer (Read-only: sees posts, the queue, accounts and activity). Editors, contributors, approvers and viewers can be limited to some brands (brand_ids). Seats are members plus open invitations; the plan sets how many. For safety only a person signed in to the PostWire dashboard can add people: from an AI assistant or an API key nothing is sent, and the result gives instead the seats free on the plan (or, when they are all in use, the plan with more seats, its price and a checkout link), the dashboard link and the steps (Settings, Team) with this email and role, for the person to send it there.

NameRequiredDescriptionDefault
roleNoTheir role. Default editor.
emailYesThe teammate's email address.
brand_idsNoOnly these brands (editor, contributor, approver, viewer). Omit for every brand.

TDQS

A4.2/5.0
Behavior5/5

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

Goes far beyond the annotations (readOnlyHint=false, destructiveHint=false): it discloses that from an API key or assistant nothing is sent, that seats = members plus open invitations and are plan-limited, and exactly what the response contains (free seats, or an upgrade plan with price and checkout link, plus the dashboard link and Settings > Team steps). That is exactly the non-obvious behavior an agent needs before calling.

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?

Front-loaded with the core action, which is good, but it is a single dense run-on paragraph with nested parentheses and semicolon-separated role definitions that is hard to scan. Most content earns its place, yet the role glossary and the fallback-response explanation would be far more usable as separate sentences or bullets.

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?

There is no output schema, and the description compensates by spelling out the return payload in both branches (seats available vs. upgrade plan with price and checkout link) plus the manual steps. For a three-parameter mutation-intent tool with full schema coverage, nothing an agent needs in order to call or interpret the result is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema lacks: it defines what each of the five enum roles can actually do and states the implicit constraint that admins cannot be brand-limited while the other four roles can. It restates brand_ids' omit-for-every-brand behavior already in the schema, keeping it just short of a 5.

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

Purpose4/5

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

Names a specific verb and resource ('Invites a person by email to work in this PostWire workspace') and enumerates the role model, so it is distinguishable from all siblings. The one wrinkle is that the headline verb overpromises: when called from an AI assistant nothing is actually sent, which the description later discloses, so the agent must reconcile the name with the real effect.

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?

Gives clear context for use: role selection, brand scoping rules ('Editors, contributors, approvers and viewers can be limited to some brands'), and the crucial constraint that only a signed-in dashboard user can actually add people. No sibling alternative exists to route against, and there is no explicit when-not guidance, but the practical usage envelope is unambiguous.

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

list_brandsList brands and their connected accountsA
Read-onlyIdempotent
Inspect

Lists the account's brands (one business each) with the social accounts connected to each: platform, the handle, display name, picture and profile link the network reports, when it was connected, and whether posts to it need only text, a video, or a photo or video. Also returns the plan's brand limit.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond those hints: the exact fields returned for each connected account, the 'one business each' cardinality, and the inclusion of the plan's brand limit. Minor gaps like pagination or error behavior are not material for a simple listing.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that immediately states the main purpose before enumerating details. It is dense but not wasteful, though the long field enumeration could have been formatted more cleanly.

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?

With no parameters and no output schema, the description carries the full burden of explaining what the agent will receive. It covers the core entities, the connected-account fields, content-type requirements, and the plan limit, making the tool callable without further inference.

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?

The input schema has zero parameters and 100% schema coverage, so there are no parameters for the description to clarify. The baseline of 4 applies because nothing additional is needed.

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 description uses a specific verb ('Lists') and a clear resource ('the account's brands') plus the connected social accounts and plan limit. It is immediately distinguishable from siblings like list_platforms or create_brand.

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?

The description clearly establishes that this is a read-only listing operation for brand and connected-account data, which makes the intended use obvious. It does not explicitly name alternatives or exclusion conditions, so it stops short of full routing guidance.

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

list_clientsList clients: brands, their client links and waiting postsA
Read-onlyIdempotent
Inspect

Lists the account's brands (one per client) with, for each: the social accounts connected to it, its active client links (url, expiry, how many times opened and when last), and how many of its posts wait for approval. Also says whether the plan includes client links and how many brands have no social account connected yet.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail about the response contents, including client-link metadata, post-approval counts, plan-level client-link availability, and brands lacking social accounts. It does not mention pagination or size limits.

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

Conciseness5/5

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

The description is two sentences and front-loads the main action and resource. The dense enumeration of returned fields is justified because there is no output schema, and no sentence is wasted.

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

Completeness4/5

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

For a read-only, zero-parameter listing tool with no output schema, the description is largely complete: it explains the main returned fields and plan-level information. It omits details such as ordering or pagination, and does not clarify its relationship to list_brands, but the core behavior is covered.

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?

The tool takes zero parameters, so the baseline is 4. There is no parameter behavior to clarify, and the description appropriately focuses on what the returned listing contains.

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

Purpose4/5

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

The description uses a specific verb ('Lists') and clearly identifies the resource: the account's brands, one per client, along with connected social accounts, client links, and waiting posts. It is clear what the tool does, but it does not explicitly distinguish this from sibling tools such as list_brands.

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

Usage Guidelines2/5

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

The description explains what data is returned but gives no explicit guidance on when to use this tool instead of alternatives like list_brands or client_report. There are no stated exclusions, prerequisites, or selection criteria for the agent.

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

list_platformsList supported platformsA
Read-onlyIdempotent
Inspect

Lists the social platforms and destinations PostWire can publish to and, for each, whether it connects with OAuth or with credentials (fields, plus optional_fields), and kind "article" for the blogs (WordPress, Dev.to, Hashnode), where a post is an article with a title. Does not need a PostWire account.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: no account/authentication is required, and the response is self-describing (OAuth vs credentials, field vs optional_field, article kind). It stops short of describing pagination or full response shape, but with annotations present this clears the bar.

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

Conciseness4/5

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

A single sentence but front-loaded with the core purpose, and every clause carries information. It is somewhat run-on, and the parenthetical blog examples and 'title' detail are lower-value embellishment, but nothing is truly wasted.

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

Completeness4/5

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

There is no output schema, so the description carries the burden of describing return values, and it does so at a conceptual level (per-platform auth type, credential field names, article kind). It is sufficient for an agent to know what it will get, though the exact field names and structure remain unspecified.

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?

The tool takes zero parameters, so per the rubric the baseline is 4. The description instead documents the shape of the returned data (fields, optional_fields, kind) which is useful orientation, though it does not enumerate concrete field names.

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?

States a specific verb (Lists) and resource (social platforms and destinations PostWire can publish to), and goes further by naming the per-platform attributes returned: auth mechanism, field names, and a 'kind' of article for blogs. This clearly separates it from action siblings like post_to_social or schedule_post.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer it is a discovery/reference call to run before configuring a destination. The note 'Does not need a PostWire account' is a useful precondition that helps the agent decide to call it early, but there is no explicit when-to-use or alternative named.

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

list_scheduled_postsList scheduled postsA
Read-onlyIdempotent
Inspect

Lists the account's scheduled posts (queued, held, pending_approval = waiting for a person to approve it, publishing, processing = sent and Instagram is still processing the video, done, failed, rejected = not approved, or canceled) with their id, time, platforms and status. Optional from/to limit the time range.

NameRequiredDescriptionDefault
toNoOnly posts scheduled before this time.
fromNoOnly posts scheduled at or after this time.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive. The description adds useful behavioral context beyond them: the full status taxonomy with definitions (e.g., pending_approval = waiting for approval, processing = Instagram still processing video). This is genuinely helpful for interpreting results.

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?

Front-loaded with the core purpose, but the long parenthetical enumerating status meanings is dense and slightly interrupts readability. Every element is relevant, but the structure could be cleaner.

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

Completeness4/5

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

Given no output schema and a simple read-only tool with two well-documented optional params, the description covers purpose, return fields (id, time, platforms, status), and status vocabulary. No output schema exists, so explaining status semantics is a reasonable inclusion that aids result interpretation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents from/to. The description restates them as 'Optional from/to limit the time range' without adding syntax or boundary semantics beyond the schema. Baseline 3 for high-coverage schema.

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

Purpose4/5

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

Specific verb+resource (lists scheduled posts) and enumerates the status values it returns, which helps distinguish it from get_post_status. It doesn't explicitly delineate itself from sibling get_post_status, but the plural 'posts' plus status enumeration makes the distinction reasonably clear.

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

Usage Guidelines3/5

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

The optional from/to parameters imply a time-range listing use case but there's no explicit guidance on when to use this over get_post_status or the filtering tools. Usage is implied by the description rather than stated.

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

make_video_from_textMake a short video from a post's wordsAInspect

Makes a short vertical video from the words of a post, for networks that take only video (YouTube) or video or photos (TikTok): an MP4 of 1080x1920, 8 to 12 seconds, H.264 with AAC sound. The first line appears as a large heading and up to two more sentences appear one after another over a softly moving plain background, with royalty-free background music or silence; an optional footer line (for example the brand's name) sits under the text. Emoji, links and trailing hashtags are left out and no PostWire mark is added. Draws Latin, Greek and Cyrillic text. No AI is used and nothing is published. The file stays in the account's PostWire media storage while a scheduled post needs it, is deleted the day after that post is published, and 7 days after upload if no post uses it (2 days on the Free plan; so post or schedule it soon). Returns media_url (an https URL valid for 6 hours, renewed when the post goes out, that works as video_url), duration_s, text_on_video (the lines shown) and message_for_user. Up to 10 videos an hour per account, and per day 10 on the Free plan and 60 on paid plans.

NameRequiredDescriptionDefault
textYesThe post's words. The first line or sentence becomes the heading.
musicNoBackground music: auto picks one of the three beds; none gives a silent track. Default auto.
styleNoLight (warm off-white, default) or dark background.
footerNoOptional short line under the text, such as the brand or shop name. Omit for none.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations provide readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false, but the description adds substantial behavioral context beyond annotations: it details file format, dimensions, duration, codec, text rendering, music options, privacy (no AI, no watermark), storage lifecycle including deletion timelines per plan, return values, and rate limits. This is rich, non-obvious information that goes far beyond what annotations convey.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and key constraints, then flows into behavioral details. It is somewhat long but every sentence adds value; no obvious repetition. Could be slightly more structured with paragraphs or bullets for readability, but acceptable as a dense block.

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?

Given no output schema and four parameters with full schema coverage, the description is highly complete: it covers what the tool does, output format details, return values (media_url, duration_s, text_on_video, message_for_user), lifecycle of the generated file, rate limits, and plan-specific differences. An agent has all needed information to invoke correctly.

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 description coverage is 100%, so baseline is 3, but the description adds meaningful context about how parameters affect output: text becomes heading and sentences, music can be royalty-free or silence, footer sits under the text, style options are light or dark. It enriches understanding beyond the schema descriptions alone.

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 description states a specific verb (makes) and resource (short vertical video) and names the target networks (YouTube, TikTok) where video content is required. It clearly distinguishes itself from sibling tools like post_to_social or schedule_post by focusing on video generation from text.

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?

The description implies when to use this tool: for networks that take only video or video/photos, and it mentions the need to post or schedule soon due to deletion. However, it does not explicitly name alternatives or state when not to use this tool compared to siblings like generate_posts or replicate_top_post.

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

my_accountShow my PostWire accountA
Read-onlyIdempotent
Inspect

Shows the signed-in PostWire account: plan, usage against each plan limit (posts this month, brands, AI drafts today, networks per post, scheduled posts waiting), brands, and which social accounts are connected, each with its brand and the handle, display name and picture the network reports for it. When a limit is at least 80 % used, the result includes the plan that raises it, its monthly price and a checkout link. On the free plan it also includes insights_teaser: how many What works patterns are ready and how strong they are. When no social account is connected, it includes a one-hour link to a page where several networks can be connected, and message_for_user: one plain sentence for the person. While the account has not published anything yet, next_step.say_this is one exact sentence the person can say to get the first post out (for example: connect a network and post, or post a first video). A free account that has not had a trial gets trial_offer: Pro now with the first month 50% off ("Get Pro today: first month $14.50 (50% off), then $29/month. Cancel anytime."), its terms in one sentence and its link; a trial that is running is described in trial.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover the read-only/idempotent safety profile; the description goes well beyond them by disclosing conditional behaviors: what appears at >=80% limit usage, the free-plan insights_teaser, the one-hour connect link plus message_for_user when nothing is connected, next_step guidance for unpublished accounts, and trial_offer details with exact pricing text.

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

Conciseness4/5

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

The purpose and core content are front-loaded, and each following sentence covers a distinct conditional branch of the response. It is long and the sentences are dense, but with no output schema the detail earns its place rather than repeating structured data.

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?

With no output schema, no parameters, and only safety annotations, the description is the sole carrier of return-value semantics and it covers the base payload and every conditional extension (limit warnings, teaser, connect link, next step, trial offer) an agent needs to interpret the result.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies and no parameter-level information is missing.

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?

States a specific verb ('Shows') and resource ('the signed-in PostWire account') and enumerates the returned content (plan, usage limits, brands, connected accounts), which is enough to distinguish it from siblings like list_brands, get_upgrade_link and get_x_credits.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this is the account-overview/status tool, and the mention of checkout link and trial_offer overlaps with get_upgrade_link, but the description never says when to call this versus those alternatives or what prerequisites apply beyond being signed in.

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

plan_weekPlan and schedule a week of postsAInspect

Writes one post per day for 1 to 7 days from a single topic, each day from a different angle and each platform in its own native format, and queues them to be published publicly at the given hour on each day starting tomorrow, through the connected accounts. Text only: platforms that require a video or photo (TikTok, YouTube, Instagram) are refused. Every platform must already be connected. The whole week counts as one AI draft toward the daily AI limit. Every day is written; days that do not fit in the plan's monthly post limit or in its scheduled-posts limit (Free: 3 waiting at a time) are saved as held (never published on the current plan; each says held_for) and are scheduled automatically when the plan is upgraded; the result then also gives that plan, its price and a checkout link. On a plan with a networks-per-post limit (Free: 2) each day goes out to the first platforms only, named in held_networks. Returns the queued and held items with their id, time and a preview of each platform's text; any of them can be canceled before it runs. If the brand's approval rules or a limit on this API key or connected app hold the post, nothing is published: the result has status "pending_approval", the post's id and approval_id, who was notified and a review link, and the post goes out once a person approves it from the emailed link or the PostWire dashboard — an AI assistant or an API key cannot approve it. A limit on this key or app can also refuse a post with code key_network_not_allowed, key_brand_not_allowed or key_monthly_cap_reached.

NameRequiredDescriptionDefault
daysNoHow many days, starting tomorrow. Default 5.
hourNoHour of the day to publish, on the timezone's clock. Default 10.
topicYesWhat the week is about, e.g. "our new autumn menu and the farmers behind it".
brand_idNoBrand whose accounts to use; omit for the default brand.
timezoneNoIANA timezone of that hour, e.g. "America/Lima". Default UTC.
platformsYesText-capable platforms to post to each day, e.g. ["linkedin","bluesky"].
brand_voiceNoOptional tone or style notes.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only say it is a non-idempotent, open-world write; the description adds the real behavior an agent needs: week counts as one AI draft against the daily limit, over-limit days are saved as held_for and auto-scheduled on upgrade, networks-per-post limit truncates to held_networks, and approval rules force a pending_approval outcome with approval_id and a human-only review link. It even enumerates refusal codes (key_network_not_allowed, key_brand_not_allowed, key_monthly_cap_reached), which is far beyond what the annotations supply.

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 core action is front-loaded in the first sentence, which is good, but the remainder is a dense single paragraph mixing limits, held behavior, approval flow, and error codes with internal redundancies (held restated with held_for and never published). It is informative but hard to scan and could be split into tighter sections.

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?

With no output schema, the description carries the full burden of return-value disclosure and does so: it describes queued and held items with id, time, and per-platform preview, cancellability before run, and the pending_approval payload including status, id, approval_id, notified parties, and review link. Nothing an agent needs to call or interpret the result is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (days, hour, topic, brand_id, timezone, platforms, brand_voice) is already documented in the schema, and the description mostly restates the day range and hour semantics rather than adding format or syntax detail. The one added nuance is that platform eligibility is constrained to text-capable networks, but that is already implied by the enum and platform descriptions.

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?

States a precise verb+resource and scope: writes one post per day for 1-7 days from a single topic, each day a different angle, each platform in native format, queued for public publication. That combination of per-day generation with multi-platform native formatting is specific enough to separate it from schedule_post, bulk_schedule, and generate_posts without opening their schemas.

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?

Gives clear preconditions and exclusions: text-only, platforms requiring video/photo (TikTok, YouTube, Instagram) are refused, and every platform must already be connected. It never names a sibling tool as the alternative for the non-text or single-post case, so it stops short of full when/when-not routing.

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

post_to_socialPublish a post nowA
Destructive
Inspect

Publishes a post immediately and publicly to the listed platforms through the social accounts connected to the user's PostWire account. A published post cannot be withdrawn from PostWire. Accepts one text for all platforms or a separate per_platform draft for each. YouTube requires video_url; TikTok requires video_url or photos (photo_url or media); Instagram requires a photo or video, and two or more media items make a carousel. Every platform must already be connected; otherwise nothing is published and the error names the missing ones. The same payload sent twice within 2 minutes is refused as a duplicate unless idempotency_key differs. When a platform is connected in more than one brand and brand_id is omitted, nothing is published and the error lists the brands. Returns { posted, published_to, results: [{ platform, ok, id?, url?, account?, error? }] }, where account and published_to name the handle and brand each post went to. After the account's first post through this connection, next_step proposes a week of posts on the same topic for the text networks it went to (its topic and platforms); nothing is queued until the person asks for it. The plan sets how many networks one post goes out to (Free: 2): only the first platforms in the list are published and each of the others comes back with ok: false, held: true and code networks_per_post (its version was written and not sent), listed in held_networks with a one-sentence held_message, and message_for_user says it in plain words for the person; every network can still be connected and written for. TikTok and Instagram videos may still be processing when this returns (status processing, no url yet). When the networks-per-post or the monthly post limit stops a platform, the result also names the plan that lifts it, its price and a checkout link, and, for a free account that has not had one, a link to Pro with the first month 50% off (trial_offer: paid today, then the regular monthly price, cancel anytime). Such an account also gets the trial link once after its first post from an assistant, with a one-sentence trial_message. X (Twitter) is a pay-per-use add-on on paid plans: each X post uses X credits (1 for a plain post, 10 for a post with a link, +1 per image or video) from the plan's monthly X credits, then from top-up credits; a post without enough credits is not sent to X and its result says how to get more. An X thread: per_platform.x.thread is the list of posts after per_platform.x.text (up to 25, each at most 280 characters as X counts them, a link counts 23); per_platform.x.reply is one more post under the last one, the usual place for a link. Each post of a thread or reply is an X post: it uses credits by the same rule and counts toward the daily X limit, and the whole chain is reserved before anything is sent. Write a thread only when the user asks for one. The X result then has thread.tweets (every post's id), thread_url, and thread.status: complete, or pending when X refused a later post (the first post stays published and PostWire retries the rest on its own). If the brand's approval rules or a limit on this API key or connected app hold the post, nothing is published: the result has status "pending_approval", the post's id and approval_id, who was notified and a review link, and the post goes out once a person approves it from the emailed link or the PostWire dashboard — an AI assistant or an API key cannot approve it. A limit on this key or app can also refuse a post with code key_network_not_allowed, key_brand_not_allowed or key_monthly_cap_reached.

NameRequiredDescriptionDefault
textNoPost text used for every platform that has no per_platform draft.
mediaNoSeveral images (or images and videos) in one post, in order: an Instagram carousel (up to 10), TikTok photo post (up to 35 images; PNG is converted to JPEG automatically for Instagram and TikTok), Bluesky (up to 4 images), Mastodon (up to 4), LinkedIn (up to 20 images, or one PDF document). Networks that take one item get the first. Each item: { url, type: image|video|document, alt? }.
titleNoTitle, used by YouTube.
privacyNoWho can see the TikTok and YouTube posts: public (everyone), unlisted (YouTube), friends (TikTok mutual followers) or private (only the account owner). TikTok asks that the account owner choose this for each TikTok post. Without it a TikTok post goes out private and YouTube uses the channel default.
brand_idNoWhich brand's accounts to use. Omit to use the default brand.
photo_urlNoPublic https URL of an image.
platformsYesPlatforms to publish to, all in one call, e.g. ["linkedin","bluesky"].
video_urlNoPublic https URL of a video. Required for YouTube; TikTok takes a video or photos.
per_platformNoPer-platform drafts: { "<platform>": { "text": "…", "title": "…", "tags": ["…"] } }. X, Bluesky and Mastodon also take "thread" (the posts after text, in order, each a reply to the one before; media stays on the first post). LinkedIn, X, Bluesky and Mastodon take "first_comment" (posted by the author right under the post, or under the last post of a thread: the place for the link). X also calls it "reply". Pass the thread and first_comment that generate_posts returned as they are.
upload_methodNoTikTok only, videos only: the "upload method" editors use so TikTok leaves the file as exported. PostWire rewrites the MP4 header on the way to TikTok (nothing is re-encoded, no size limit beyond the usual 1 GB). max is the usual choice; safe changes the header only. Off unless given.
idempotency_keyNoOptional unique key; a repeat with the same key within 24 h is refused instead of posted twice.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructive=true and idempotent=false, but the description adds extensive behavioral detail beyond them: posts cannot be withdrawn, duplicates within 2 minutes are refused, brand ambiguity blocks publishing, approvals must be manual, plan limits and X credits apply, and thread reservations happen before sending. These are exactly the operational traits an agent needs to avoid incorrect invocation.

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 opening is front-loaded and the content is relevant, but the description is a very dense block covering many edge cases, plan limits, trial offers, and platform quirks. It is informative but not concise; an agent must parse a wall of text to reach later operational details.

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?

Given 11 parameters, nested per_platform objects, many platforms, and no output schema, the description is remarkably complete. It explains the return shape, platform-specific media rules, approval behavior, credit and limit handling, and thread status semantics — enough for an agent to call and interpret the tool correctly.

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 description coverage is 100%, so the schema already carries most parameter meaning. The description still adds valuable cross-parameter constraints not fully captured in the schema, such as YouTube requiring video_url, TikTok requiring video_url or photos, multi-item carousel behavior, and X thread/reply credit rules.

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 description states a specific verb and resource — 'Publishes a post immediately and publicly' — and the word 'immediately' distinguishes it from the scheduling siblings such as schedule_post and bulk_schedule. It is clear what the tool does without needing to inspect 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?

The description gives strong usage context: immediate publishing, public visibility, per-platform media requirements, duplicate refusal, brand ambiguity, approval holds, and API-key limits. It stops short of explicitly naming the alternative tool for scheduling, but the immediate-publish framing makes the when-to-use boundary clear.

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

replicate_top_postDraft new posts modelled on a top postAInspect

Writes new drafts, one per platform, that reuse the structure, opening type, length, format and tone of one of the account's published posts, on a new topic or a new angle; the reference post's sentences are not reused. Nothing is published or scheduled. Takes the id of a published post of the account (the ids that the account's post performance results list). Counts toward the account's daily AI limit. Available depending on the account's plan. Returns { drafts: { : { text, title?, tags? } }, reference }.

NameRequiredDescriptionDefault
topicNoOptional new topic. Omit for a new angle on the same subject.
post_idYesThe id of the reference post: one of the account's published posts, as listed in its post performance results.
platformsNoPlatforms to write for. Default: the reference post's platform.
brand_voiceNoOptional tone or style notes.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only establish the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false, idempotentHint=false). The description goes well beyond them by disclosing that nothing is published or scheduled, that the call consumes the account's daily AI quota, and that availability is plan-gated – exactly the quota and side-effect context an agent needs before invoking.

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

Conciseness4/5

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

A single dense paragraph that is well front-loaded: what it writes and what it reuses comes first, constraints and return shape last. There is minor redundancy – the post_id provenance is stated in both the description and the schema, and the sentence chain is long – but no sentence is wasted.

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?

With no output schema, the description compensates by inlining the return shape ({ drafts: { <platform>: { text, title?, tags? } }, reference }). Combined with the quota, plan-gating and no-publish disclosures, an agent has everything needed to call this tool correctly and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100%, so post_id, topic, platforms and brand_voice are already documented, including the platform default. The description largely restates the schema (published-post ids from performance results, new topic vs new angle) without adding format or interaction detail, so the schema-baseline of 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource ('Writes new drafts, one per platform') and pins down the mechanism precisely: reuse of structure, opening type, length, format and tone from a reference post, with an explicit negative ('the reference post's sentences are not reused'). It is distinguishable from generate_posts in substance, but it never names that sibling, so the differentiation is left for the agent to infer.

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?

It states clear operating context: the required id must come from the account's post performance results, nothing is published or scheduled, it counts toward the daily AI limit, and availability depends on the plan. What is missing is explicit routing against alternatives such as generate_posts or plan_week, so the when-to-use-this-instead signal is absent.

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

schedule_postSchedule a postAInspect

Queues a post to be published at a future time (run_at, ISO 8601 with timezone, up to 365 days ahead), or in the brand's next free queue slot (run_at "next_slot": the earliest weekly slot all its platforms share that no other waiting post of the brand uses; the result gives the time chosen) through the connected accounts. Takes the same content fields as publishing now. Every platform must already be connected and media must suit each platform, or it is refused now instead of failing later. When a platform is connected in more than one brand and brand_id is omitted, nothing is queued and the error lists the brands. Returns the queued item with its id and, for each platform, the handle and brand it will publish to. The plan sets how many posts can wait in the queue at once (Free: 3): past that the post is not refused but saved as held (code queue_limit, status held) — kept, never published on the current plan, and scheduled automatically when the plan is upgraded; the result then also gives that plan, its price and a checkout link. On a plan with a networks-per-post limit (Free: 2) only the first platforms are published when it runs; the result names the others in held_networks. A queued or held post can be canceled before it runs. X (Twitter) is a pay-per-use add-on on paid plans: each X post uses X credits (1 for a plain post, 10 for a post with a link, +1 per image or video) from the plan's monthly X credits, then from top-up credits; a post without enough credits is not sent to X and its result says how to get more. An X thread: per_platform.x.thread is the list of posts after per_platform.x.text (up to 25, each at most 280 characters as X counts them, a link counts 23); per_platform.x.reply is one more post under the last one, the usual place for a link. Each post of a thread or reply is an X post: it uses credits by the same rule and counts toward the daily X limit, and the whole chain is reserved before anything is sent. Write a thread only when the user asks for one. The X result then has thread.tweets (every post's id), thread_url, and thread.status: complete, or pending when X refused a later post (the first post stays published and PostWire retries the rest on its own). If the brand's approval rules or a limit on this API key or connected app hold the post, nothing is published: the result has status "pending_approval", the post's id and approval_id, who was notified and a review link, and the post goes out once a person approves it from the emailed link or the PostWire dashboard — an AI assistant or an API key cannot approve it. A limit on this key or app can also refuse a post with code key_network_not_allowed, key_brand_not_allowed or key_monthly_cap_reached.

NameRequiredDescriptionDefault
textNoPost text for platforms without a per_platform draft.
labelNoOptional short label shown in the PostWire queue.
mediaNoSeveral images (or images and videos) in one post, in order: an Instagram carousel (up to 10), TikTok photo post (up to 35 images; PNG is converted to JPEG automatically for Instagram and TikTok), Bluesky (up to 4 images), Mastodon (up to 4), LinkedIn (up to 20 images, or one PDF document). Networks that take one item get the first. Each item: { url, type: image|video|document, alt? }.
titleNoTitle, used by YouTube.
run_atYesWhen to publish: ISO 8601 with offset, e.g. "2026-10-01T09:00:00-05:00", or "next_slot" for the brand's next free queue slot.
privacyNoWho can see the TikTok and YouTube posts: public (everyone), unlisted (YouTube), friends (TikTok mutual followers) or private (only the account owner). TikTok asks that the account owner choose this for each TikTok post. Without it a TikTok post goes out private and YouTube uses the channel default.
brand_idNoBrand whose accounts to use; omit for the default brand.
timezoneNoWith run_at next_slot: the IANA timezone to read the slots in when the brand has none saved, e.g. "America/Lima".
photo_urlNoPublic https URL of an image.
platformsYesPlatforms to publish to.
video_urlNoPublic https URL of a video (YouTube needs one; TikTok takes a video or photos).
per_platformNoPer-platform drafts: { "<platform>": { "text": "…" } }. X, Bluesky and Mastodon also take "thread": ["…"] (the posts after text; X max 25, Bluesky and Mastodon max 9 more, each within the network's limit). LinkedIn, X, Bluesky and Mastodon take "first_comment": "…" (posted by the author under the post, or under the last post of a thread: the place for the link; on X it is an X post and uses credits). X also calls it "reply".
upload_methodNoTikTok only, videos only: the "upload method" editors use so TikTok leaves the file as exported. PostWire rewrites the MP4 header on the way to TikTok (nothing is re-encoded, no size limit beyond the usual 1 GB). max is the usual choice; safe changes the header only. Off unless given.

TDQS

A4.5/5.0
Behavior5/5

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

Goes far beyond the annotations: queue limits and the held fallback with code queue_limit, held_networks truncation, the approval flow with pending_approval/approval_id and the note that AI assistants or API keys cannot approve, plus specific error codes (key_network_not_allowed, key_monthly_cap_reached). The X credit accounting rules and the 'reserved before anything is sent' atomicity note are exactly the kind of behavior an agent needs. Only minor gap: it doesn't warn that retrying creates duplicate posts (idempotentHint=false).

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 is front-loaded and sentences are dense with substance, but the description is a single sprawling block that mixes queue mechanics, X credits, thread semantics, approval flow and error codes. The X-credit and thread paragraphs in particular read like documentation that belongs in a reference page rather than a tool routing description.

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?

There is no output schema, and the description compensates by describing return payloads in detail: queued item id, per-platform handle and brand, held status plus plan/price/checkout link, held_networks, thread.tweets/thread_url/thread.status, and approval fields. For a 13-parameter nested mutation tool this is appropriately complete.

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 baseline is 3, but the description adds real meaning: run_at accepts the literal "next_slot" with a 365-day horizon and ISO-with-offset format, timezone only applies in next_slot mode, and the brand_id ambiguity behavior is spelled out. per_platform.x gets extra rules (max 25 posts, 280 chars as X counts them, link counts 23, reply alias). Some params (media, privacy, label, upload_method) are left entirely to the schema.

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

Purpose5/5

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

Opens with a precise verb+resource ('Queues a post to be published at a future time') and immediately contrasts it with 'publishing now', which cleanly separates it from post_to_social. The two run_at modes (fixed timestamp vs next_slot) are defined in the first sentence.

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?

Gives explicit conditions for the next_slot mode, explicit gating advice ('Write a thread only when the user asks for one'), and prerequisites (every platform must already be connected, media must suit each platform). It implies but never names the alternatives (post_to_social for immediate publishing, bulk_schedule, create_recurring_post).

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedget_post_status1 field changed
      • changedInput schema / properties / platform / description
        Previous value: -"Platform of the post, e.g. \"tiktok\". Can be omitted for a post waiting for approval or scheduled."New value: +"Platform of the post, e.g. \"tiktok\". Optional: without it PostWire finds the network from the post it recorded (or from the id itself for TikTok, Bluesky and LinkedIn); pass it for a post published outside PostWire."
  2. 4 tool updates
    • Addedclient_report
    • Addedcreate_client_link
    • Addedinvite_teammate
    • Addedlist_clients
  3. 1 tool update
    • Changedget_upgrade_link2 fields changed
      • changedInput schema / properties / plan / description
        Previous value: -"Plan to check out. Omit for the next plan up."New value: +"Plan to check out. Omit for the next plan up. Enterprise (more than 50 clients, custom limits, invoicing) is agreed by email: hello@postwire.io."
      • changedInput schema / properties / plan / enum
        Previous value: -[
        -  "starter",
        -  "pro",
        -  "agency",
        -  "scale"
        -]New value: +[
        +  "starter",
        +  "pro",
        +  "agency"
        +]
  4. 2 tool updates
    • Changedpost_to_social1 field changed
      • addedInput schema / properties / upload_method
        Added value: +{
        +  "description": "TikTok only, videos only: the \"upload method\" editors use so TikTok leaves the file as exported. PostWire rewrites the MP4 header on the way to TikTok (nothing is re-encoded, no size limit beyond the usual 1 GB). max is the usual choice; safe changes the header only. Off unless given.",
        +  "enum": [
        +    "max",
        +    "safe"
        +  ],
        +  "type": "string"
        +}
    • Changedschedule_post1 field changed
      • addedInput schema / properties / upload_method
        Added value: +{
        +  "description": "TikTok only, videos only: the \"upload method\" editors use so TikTok leaves the file as exported. PostWire rewrites the MP4 header on the way to TikTok (nothing is re-encoded, no size limit beyond the usual 1 GB). max is the usual choice; safe changes the header only. Off unless given.",
        +  "enum": [
        +    "max",
        +    "safe"
        +  ],
        +  "type": "string"
        +}
  5. 1 tool update
    • Addedcheck_video_quality
  6. 9 tool updates
    • Changedcreate_connect_link1 field changed
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedcreate_recurring_post1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedgenerate_posts1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedget_post_performance1 field changed
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedget_post_status1 field changed
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedplan_week1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedpost_to_social8 fields changed
      • addedInput schema / properties / per_platform / additionalProperties / properties / canonical_url
        Added value: +{
        +  "description": "Dev.to and Hashnode: where the article was first published.",
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedInput schema / properties / per_platform / additionalProperties / properties / first_comment
        Added value: +{
        +  "description": "LinkedIn, X, Bluesky, Mastodon: the author's first comment, posted right after the post (under the last post of a thread) — where the link goes. Bluesky <= 300 characters, Mastodon <= 500, X <= 280 (an X post: it uses X credits), LinkedIn <= 1250. Other networks report it as not posted.",
        +  "maxLength": 1500,
        +  "type": "string"
        +}
      • changedInput schema / properties / per_platform / additionalProperties / properties / reply / description
        Previous value: -"X only: one post under the last post of the chain, e.g. the link."New value: +"X only: the same as first_comment — one post under the last post of the chain, e.g. the link."
      • addedInput schema / properties / per_platform / additionalProperties / properties / status
        Added value: +{
        +  "description": "Blogs: publish now, or save a draft on the blog.",
        +  "enum": [
        +    "publish",
        +    "draft"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / per_platform / additionalProperties / properties / summary
        Added value: +{
        +  "description": "Blogs: the article's excerpt / meta description.",
        +  "maxLength": 400,
        +  "type": "string"
        +}
      • changedInput schema / properties / per_platform / additionalProperties / properties / thread / description
        Previous value: -"X only: the posts of a thread after text, each a reply to the one before (max 25, each <= 280 as X counts)."New value: +"X, Bluesky, Mastodon: the posts of a thread after text, each a reply to the one before. X: max 25, each <= 280 as X counts. Bluesky: max 9 (10 posts in all), each <= 300 characters. Mastodon: max 9, each <= 500 characters or the server's own limit. Each result lists every post's URL (thread.posts); if a later post is refused, the earlier ones stay published and thread.not_posted lists the rest."
      • changedInput schema / properties / per_platform / description
        Previous value: -"Per-platform drafts: { \"<platform>\": { \"text\": \"…\", \"title\": \"…\", \"tags\": [\"…\"] } }. X also takes \"thread\" (the posts after text, in order) and \"reply\" (one post under the last one, e.g. the link)."New value: +"Per-platform drafts: { \"<platform>\": { \"text\": \"…\", \"title\": \"…\", \"tags\": [\"…\"] } }. X, Bluesky and Mastodon also take \"thread\" (the posts after text, in order, each a reply to the one before; media stays on the first post). LinkedIn, X, Bluesky and Mastodon take \"first_comment\" (posted by the author right under the post, or under the last post of a thread: the place for the link). X also calls it \"reply\". Pass the thread and first_comment that generate_posts returned as they are."
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedreplicate_top_post1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedschedule_post2 fields changed
      • changedInput schema / properties / per_platform / description
        Previous value: -"Per-platform drafts: { \"<platform>\": { \"text\": \"…\" } }. X also takes \"thread\": [\"…\"] (the posts after text, max 25) and \"reply\": \"…\" (one post under the last one)."New value: +"Per-platform drafts: { \"<platform>\": { \"text\": \"…\" } }. X, Bluesky and Mastodon also take \"thread\": [\"…\"] (the posts after text; X max 25, Bluesky and Mastodon max 9 more, each within the network's limit). LinkedIn, X, Bluesky and Mastodon take \"first_comment\": \"…\" (posted by the author under the post, or under the last post of a thread: the place for the link; on X it is an X post and uses credits). X also calls it \"reply\"."
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram",
        -  "x"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "wordpress",
        +  "devto",
        +  "hashnode",
        +  "slack",
        +  "nostr",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
  7. 3 tool updates
    • Addedbulk_schedule
    • Addedcreate_recurring_post
    • Changedget_upgrade_link1 field changed
      • addedInput schema / properties / interval
        Added value: +{
        +  "description": "Billing period of the link: month (default) or year (20% off, billed once a year).",
        +  "enum": [
        +    "month",
        +    "year"
        +  ],
        +  "type": "string"
        +}
  8. 3 tool updates
    • Changedget_x_credits2 fields changed
      • addedInput schema / properties / reply
        Added value: +{
        +  "description": "Optional: a reply under the post (or the thread), priced with it.",
        +  "maxLength": 1000,
        +  "type": "string"
        +}
      • addedInput schema / properties / thread
        Added value: +{
        +  "description": "Optional: the posts of a thread after text, to price the whole thread.",
        +  "items": {
        +    "maxLength": 1000,
        +    "type": "string"
        +  },
        +  "maxItems": 25,
        +  "type": "array"
        +}
    • Changedpost_to_social3 fields changed
      • addedInput schema / properties / per_platform / additionalProperties / properties / reply
        Added value: +{
        +  "description": "X only: one post under the last post of the chain, e.g. the link.",
        +  "maxLength": 1000,
        +  "type": "string"
        +}
      • addedInput schema / properties / per_platform / additionalProperties / properties / thread
        Added value: +{
        +  "description": "X only: the posts of a thread after text, each a reply to the one before (max 25, each <= 280 as X counts).",
        +  "items": {
        +    "maxLength": 1000,
        +    "type": "string"
        +  },
        +  "maxItems": 25,
        +  "type": "array"
        +}
      • changedInput schema / properties / per_platform / description
        Previous value: -"Per-platform drafts: { \"<platform>\": { \"text\": \"…\", \"title\": \"…\", \"tags\": [\"…\"] } }."New value: +"Per-platform drafts: { \"<platform>\": { \"text\": \"…\", \"title\": \"…\", \"tags\": [\"…\"] } }. X also takes \"thread\" (the posts after text, in order) and \"reply\" (one post under the last one, e.g. the link)."
    • Changedschedule_post1 field changed
      • changedInput schema / properties / per_platform / description
        Previous value: -"Per-platform drafts: { \"<platform>\": { \"text\": \"…\" } }."New value: +"Per-platform drafts: { \"<platform>\": { \"text\": \"…\" } }. X also takes \"thread\": [\"…\"] (the posts after text, max 25) and \"reply\": \"…\" (one post under the last one)."
  9. 1 tool update
    • Changedget_post_status3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"The post id returned when it was published on that platform."New value: +"The post id returned when it was published on that platform, or the id PostWire returned for a post waiting for approval or scheduled."
      • changedInput schema / properties / platform / description
        Previous value: -"Platform of the post, e.g. \"tiktok\"."New value: +"Platform of the post, e.g. \"tiktok\". Can be omitted for a post waiting for approval or scheduled."
      • changedInput schema / required
        Previous value: -[
        -  "platform",
        -  "id"
        -]New value: +[
        +  "id"
        +]
  10. 9 tool updates
    • Changedcreate_connect_link1 field changed
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedgenerate_posts1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedget_post_performance1 field changed
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedget_post_status1 field changed
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Addedget_x_credits
    • Changedplan_week1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedpost_to_social1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedreplicate_top_post1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
    • Changedschedule_post1 field changed
      • changedInput schema / properties / platforms / items / enum
        Previous value: -[
        -  "telegram",
        -  "bluesky",
        -  "mastodon",
        -  "discord",
        -  "tiktok",
        -  "youtube",
        -  "reddit",
        -  "linkedin",
        -  "facebook",
        -  "instagram"
        -]New value: +[
        +  "telegram",
        +  "bluesky",
        +  "mastodon",
        +  "discord",
        +  "tiktok",
        +  "youtube",
        +  "reddit",
        +  "linkedin",
        +  "facebook",
        +  "instagram",
        +  "x"
        +]
  11. 1 tool update
    • Addedmake_video_from_text

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    AI-powered social media posting across 14 platforms. Post to Twitter, Instagram, TikTok, Facebook, LinkedIn, YouTube and more with one command. AI adapts content per platform, schedules posts, and generates 30-day content calendars.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Official MCP server for PostEverywhere (posteverywhere.ai/social-media-scheduler). Let Claude, ChatGPT, Cursor or any MCP client schedule and publish posts to 13 platforms: Instagram, TikTok, YouTube, LinkedIn, Facebook, X, Threads, Pinterest, Bluesky, Telegram, Discord, WordPress and Google Business Profile. 40 tools: best-time scheduling, threads, cross-posting, campaigns, analytics.
    33
    546 npm
    6
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.