Skip to main content
Glama

Server Details

Validate, schedule, publish, and analyze social content across 18 platforms with posterly. Supports OAuth 2.1 and Bearer API-key authentication. Requires a paid posterly plan with API access; Starter + API is available from $10/month.

Ownership verified
Status
Healthy
Uptime
29.8% over 75 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A3.7/5.0

Scored across 71 tools

Disambiguation3/5

Most tools have descriptive names and the individual descriptions are unusually detailed, but several clusters overlap heavily: create_post/create_posts_batch/validate_post/update_post, multiple billing tools (get_subscription, manage_plan, upgrade/downgrade/cancel/pause/resume), and three distinct media-ingest paths. Multi-action tools like manage_* and many view-switching list tools increase the chance an agent selects the wrong tool even when the description explains the difference.

Naming Consistency4/5

The surface overwhelmingly uses snake_case verb_noun names such as list_accounts, create_post, delete_webhook, and manage_brand, which is predictable. Minor deviations include whoami and posterly_status, plus the singular/plural mix between list_* and manage_* tools, but these do not seriously undermine readability.

Tool Count1/5

71 tools is far beyond a practical MCP tool surface, even for a broad social-media management platform. Many operations are split into single-resource tools, multi-view list tools, and action-multiplexed manage tools that could be consolidated into far fewer endpoints.

Completeness5/5

The tool set covers an extremely wide lifecycle: post creation, validation, scheduling, updating, deletion, batch posting, media upload, accounts, analytics, comments, DMs, Google Business Profile operations, billing, team management, API keys, webhooks, OAuth clients, AI generation, and support. No obvious domain-level gap is left for the stated posterly platform.

Available Tools

71 tools
ask_supportAInspect

Ask posterly Support AI an authenticated question using posterly docs plus read-only account/post diagnostics for the caller workspace. Requires API auth and accounts:read + posts:read scopes. Human tickets are never opened on the first answer; ticket creation requires a follow-up in a continued conversation with an assistant answer plus request_human=true and confirm_escalation=true after explicit user confirmation.

NameRequiredDescriptionDefault
post_idNoOptional post ID to inspect directly.
page_urlNoOptional posterly page URL for context.
questionYes
workspace_idNoWorkspace to inspect. Omit to use the API-key scoped workspace or personal workspace.
request_humanNoAsk for human review. Does not create a ticket unless this is a follow-up in a conversation that already has an assistant answer and confirm_escalation is also true.
conversation_idNoContinue a previous support conversation.
confirm_escalationNoMust be true after explicit user confirmation that the previous assistant answer did not solve the issue.
referenced_post_idsNoOptional post IDs to include in read-only diagnostics.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the required auth and scopes (accounts:read + posts:read), that the first answer never opens a human ticket, and the exact gated path to escalation. This resolves the ambiguity of readOnlyHint=false and destructiveHint=false by explaining precisely when a side effect can occur.

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?

Three dense but front-loaded sentences: purpose first, then auth/scopes, then the escalation contract. No filler, though the escalation sentence is long and packs several conditions into one clause-heavy run.

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 an 8-parameter, multi-turn tool with no output schema, the description covers the important non-obvious behavior (auth, two-step escalation gating). It omits any hint of what the first answer returns or how diagnostics surface, but that gap is minor given the absence of an output schema.

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 88%, so the baseline is 3, but the description adds cross-parameter semantics: that request_human and confirm_escalation only take effect together with a continued conversation (conversation_id) and a prior assistant answer. That relational meaning is not captured by the per-field schema 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 specific verb ('Ask') and resource ('posterly Support AI'), plus the scope ('for the caller workspace') and the inputs it draws on (docs plus read-only account/post diagnostics). No sibling tool offers support-AI Q&A, so it is trivially distinguishable from list_conversations, manage_conversation, and submit_agent_feedback.

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?

Clearly explains the conditions that select ticket creation (continued conversation with a prior assistant answer, request_human=true, confirm_escalation=true, and explicit user confirmation). It stops short of naming alternative tools or stating when NOT to use this at all, so it is clear context without explicit alternatives.

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

audit_google_business_profileA
Read-onlyIdempotent
Inspect

Run a live local-profile audit for a connected Google Business Profile location. Returns the 0-100 completeness score, letter grade, a score for each section (profile basics, hours, categories, description, photos, attributes, review health, and service areas when the listing travels to customers), and recommendations. A service listing with no areas, or an area more than 80 miles from the business in a straight line, cannot keep a top score.

NameRequiredDescriptionDefault
account_idNoGoogle Business social account ID from list_accounts.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
workspace_idNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/openWorldHint/idempotentHint, so the safety profile is covered. The description adds real value beyond them: 'live' signals a remote call to Google rather than cached data, and the explicit scoring rule (no service areas, or an area >80 straight-line miles, caps the score) is behavioral context an agent cannot get from structured fields.

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?

Three sentences, front-loaded with the action, then the return contents, then the scoring caveat. No filler, though the long enumerated section list is dense and could be tightened.

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 audit with no output schema, the description adequately previews the return payload (overall score, grade, section scores, recommendations). Minor gap: all three parameters are optional, so it never clarifies how the tool resolves the target location when e.g. only workspace_id is supplied.

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 67% and the description mentions no parameters at all — it does not reinforce the important account_id-vs-location_id guidance (including the warning against the ChIJ Place ID) that the schema text carries. With the schema doing the heavy lifting, baseline 3 applies, but the description contributes nothing 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 verb and resource — 'run a live local-profile audit' for a 'connected Google Business Profile location' — and enumerates the exact outputs (0-100 score, letter grade, per-section scores, recommendations). This clearly separates it from the sibling list_/manage_google_business_* tools, which read or mutate resources rather than compute a scored audit.

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 phrase 'for a connected Google Business Profile location' implies the prerequisite (an already-connected account) but never states when to pick this over list_google_business_locations or manage_google_business_location, nor when not to run it. Usage must be inferred rather than read.

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

cancel_subscriptionA
DestructiveIdempotent
Inspect

Cancel the authenticated user's posterly subscription. DESTRUCTIVE; requires billing:write. ALWAYS ask the user why they are cancelling FIRST and pass their answer as reason (one of the allowed values). By default an active or trialing plan is set to cancel at the end of the current period. A past_due or unpaid plan always ends now, even when immediate is false: the unpaid renewal is dropped and payment retries stop. Pass immediate=true only when the user explicitly wants an active plan cancelled right now. Only call after the user explicitly confirms.

NameRequiredDescriptionDefault
reasonYesWhy the user is cancelling. Ask the user before calling; do not guess.
confirmYesMust be true after the user explicitly confirms the cancellation.
feedbackNoOptional free-text detail the user gave about why they are cancelling.
immediateNoCancel immediately instead of at period end. Defaults to false. Ignored for past_due and unpaid plans, which always end now.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: discloses the required billing:write scope, the default period-end semantics for active/trialing plans, and the important edge case that past_due/unpaid plans end immediately regardless of immediate=false (unpaid renewal dropped, retries stop). This is exactly the kind of consequence detail an agent cannot infer from destructiveHint alone.

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 action and the DESTRUCTIVE/scope warning, then the required workflow, then the edge-case semantics. It is fairly long but nearly every sentence carries distinct operational information; minor tightening is possible but nothing is 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?

For a destructive mutation with no output schema, the description covers permissions, prerequisites, default vs immediate behavior, and the anomalous past_due/unpaid path. An agent has everything needed to call it correctly and warn the user appropriately.

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: it explains that reason must be captured from the user, that immediate is ignored for past_due/unpaid, and that confirm gates the call. It exceeds the schema rather than restating it.

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: 'Cancel the authenticated user's posterly subscription.' An agent immediately understands the scope, and it is clearly differentiable from pause_subscription and downgrade_subscription by the plain 'cancel' semantics.

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?

Extensive when/when-not guidance: ask the reason FIRST, only pass immediate=true when the user explicitly wants an active plan cancelled now, only call after explicit confirmation. It does not name sibling alternatives (pause_subscription, downgrade_subscription) as substitutes, so it falls just short of a 5.

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

connect_accountA
Idempotent
Inspect

Connect a credential-based social account (telegram, bluesky, discord, wordpress, devto, hashnode, lemmy) directly, without a browser session. Call list_platforms with view=connect_link first to discover the exact credential fields the platform needs. Prefer scoped secrets: app passwords (Bluesky, WordPress), bot tokens (Telegram), webhook URLs (Discord), and API tokens (Dev.to, Hashnode) over primary passwords. Warn the user that any credential they share passes through this conversation. For OAuth platforms (Instagram, X, LinkedIn, ...) use create_connect_session instead.

NameRequiredDescriptionDefault
patNoHashnode: personal access token from Account Settings, Developer.
handleNoBluesky: handle, for example posterly.bsky.social.
api_keyNoDev.to: API key from Settings, Extensions, DEV Community API Keys.
chat_idNoTelegram: target channel or group chat ID.
instanceNoLemmy: instance domain, for example lemmy.world.
passwordNoLemmy: account password (TOTP-enabled accounts are not supported).
platformYesCredential-based connection target: telegram, bluesky, discord, wordpress, devto, hashnode, or lemmy.
site_urlNoWordPress: site URL, e.g. https://blog.example.com.
usernameNoWordPress: username the application password belongs to. Lemmy: username or email.
bot_tokenNoTelegram: bot token from BotFather.
webhook_urlNoDiscord: channel webhook URL from channel settings, Integrations, Webhooks.
app_passwordNoBluesky: app password from account settings. WordPress: application password from wp-admin Users, Profile, Application Passwords.
workspace_idNoWorkspace to connect the account into. Workspace-scoped API keys ignore this.
connect_session_idNoOptional connect session ID to mark connected or failed based on the outcome.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=true), and the description adds meaningful context beyond them: the credential-passthrough warning, the preference for scoped secrets over primary passwords, and the fact that connect_session_id lets the caller mark a session connected or failed. This is substantive behavioral disclosure.

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 action, then the prerequisite, then the credential guidance, then the security warning. Dense but nearly every clause carries actionable information; the two inline lists add length without much redundancy.

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 14-parameter mutation tool with no output schema, the description covers when to use it, prerequisites, credential selection, and the security implication. It does not say what a successful connect returns (e.g. the resulting account record), which is the only real gap.

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 per-field documentation is already carried by the schema and the baseline would be 3. The description goes one step further by ranking credential options (prefer app passwords, bot tokens, webhook URLs, API tokens over primary passwords), which is preference meaning the schema does not encode.

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 ('Connect a credential-based social account') plus the explicit scope qualifier 'directly, without a browser session', and enumerates the supported platforms. An agent can distinguish it from create_connect_session and disconnect_account 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 Guidelines5/5

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

Gives an explicit prerequisite ('Call list_platforms with view=connect_link first to discover the exact credential fields'), names the alternative tool for OAuth platforms (create_connect_session), and explains which credential type to prefer per platform. Both the when-to-use and when-not-to-use cases are covered.

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

create_api_keyAInspect

Create a new posterly API key for the authenticated user. SECRET-CREATING WRITE: only use after explicit user confirmation. The new key can only request scopes already present on the calling dashboard-created API key; OAuth and managed assistant tokens cannot mint keys. Team management (members:read, members:write) and client portal sign-in link permissions are never copied or granted here: a person turns them on in /dashboard/api. Optional workspace_client_id limits the new key to one brand in the workspace. Omit it for a workspace-wide key. A key that is already limited to one brand cannot create keys.

NameRequiredDescriptionDefault
nameNoHuman-readable key name.
scopesNoScopes for the new key. Omit to copy the calling key scopes. Cannot exceed the calling key scopes. billing:read and billing:write allow managing the posterly subscription (cancel/pause/resume/downgrade).
confirmYesMust be true after the user explicitly confirms that a new secret API key should be created.
workspace_idNoOptional workspace restriction. Workspace-scoped calling keys cannot create keys outside their workspace.
expires_in_daysNoOptional expiry from now, up to 365 days. Omit for no expiry.
workspace_client_idNoOptional brand (workspace client id) in that workspace. Omit for a key that can see every brand. A key limited to one brand cannot create keys.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=false, idempotent=false), which only flag this as a non-destructive write. The description adds that it is a SECRET-CREATING write requiring confirmation, that scopes can only be inherited from the calling dashboard key, that team-management and client-portal permissions are never copied, and that brand-limited keys cannot create keys — these are non-obvious authorization and inheritance rules an agent could not infer.

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-loads the action and the safety warning before the permission detail, and every sentence carries a real constraint. Some sentences (the scopes/team-management sentence) are dense enough that a reader has to parse carefully, which keeps it just under top marks.

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, and the description implies rather than states that the response contains the secret key material and whether it is shown only once. Otherwise the authorization model, scope inheritance, and confirmation requirement are covered thoroughly for a six-parameter mutation.

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 already has documented semantics including the scopes enum items and the confirm constant. The prose restates the workspace_client_id brand-limiting rule and the scope-inheritance rule rather than adding new 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?

States a specific verb and resource ("Create a new posterly API key for the authenticated user") and immediately scopes who can do it (OAuth and managed assistant tokens cannot mint keys), which separates it from sibling credential tools like delete_api_key or manage_oauth_client. It stops short of naming a sibling as an alternative, so it lands at 4 rather than 5.

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?

Explicit gate: "only use after explicit user confirmation," which the schema's confirm constant reinforces. It also tells the agent when to omit workspace_client_id (workspace-wide key) and states a precondition that a brand-limited key cannot create keys. No named alternative tool, but the when-to-use conditions are clear.

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

create_connect_sessionAInspect

Create a short-lived dashboard handoff session for connecting a social account. Open connect_session.connect_url for the user, then poll list_accounts with view=connect_session so you can narrate progress.

NameRequiredDescriptionDefault
platformYesConnection target such as instagram, meta, linkedin_page, twitter, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, or lemmy.
auto_startNoWhen true, the posterly dashboard starts the provider flow after the user opens the URL.
workspace_idNoWorkspace to connect the account into. Workspace-scoped API keys ignore this.

TDQS

A4/5.0
Behavior4/5

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

Annotations declare openWorldHint=true, non-idempotent, non-destructive, but reveal nothing about the interaction model. The description adds genuinely useful behavior: the session is short-lived, it is a user-facing dashboard handoff consumed via a URL, and progress must be observed by polling rather than by a direct result. It still omits session expiry timing and failure behavior.

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, both of which earn their place: the first states what is created, the second states the required follow-up flow. The handoff mechanism is front-loaded with no filler.

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 usefully compensates by naming the connect_url field the agent must surface to the user and the polling tool for progress. Annotations cover the safety profile and the schema covers all params, so the only unaddressed item is session lifetime/failure handling, a minor gap.

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 platform enum, auto_start default, and workspace_id scoping are all already documented in the schema. The description mentions connect_session.connect_url, which is a response field rather than an input, so it adds no parameter meaning beyond the structured data. Baseline 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 ("Create a short-lived dashboard handoff session") and scopes it to connecting a social account, which is distinct from the plain connect_account sibling. It never explicitly names connect_account or explains why an agent would pick this session handoff instead, 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 Guidelines4/5

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

It gives actionable workflow guidance: open connect_session.connect_url for the user, then poll list_accounts with view=connect_session. That tells the agent exactly what to do after the call, but it offers no explicit when-not condition (e.g. when to use connect_account directly instead).

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

create_media_dropAInspect

Create a human drop page so ChatGPT or Claude users can upload laptop files (up to 20 per link) without dashboard login. Returns drop_url (https://www.poster.ly/drop/). Send that URL to the user, wait, then call list_media. Accepts JPEG, PNG, GIF, WebP, MP4, MOV, WebM, and PDF up to 50MB (a PDF is for LinkedIn document posts); HEIC is not accepted. This is not the chat paperclip and not create_signed_upload.

NameRequiredDescriptionDefault
filenameNoOptional filename hint, e.g. launch-video.mp4
max_filesNo
workspace_idNoOptional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare it is a non-readonly, non-idempotent, open-world write. The description adds substantial context beyond that: the return format (drop_url with token template), the no-login auth model, file/count/size limits, accepted and rejected formats, and the required follow-up call. It does not contradict any annotation.

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, then return value, workflow, constraints, and exclusions in a tight sequence; every sentence carries information. It is dense, but nothing is padding, so it sits just below the ideal for readability.

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 correctly explains the return value (drop_url format) and the full end-to-end flow including the subsequent list_media call. An agent has everything needed to invoke and follow through.

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 67%, with filename and workspace_id already documented. The description compensates for the undocumented max_files by stating the 'up to 20 per link' limit, aligning with the schema's 1-20 bounds, but adds no further syntax or per-param detail.

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 ('Create a human drop page') and immediately clarifies the audience and mechanism ('so ChatGPT or Claude users can upload laptop files ... without dashboard login'). It distinguishes itself from siblings by name ('not create_signed_upload', 'not the chat paperclip'), so the agent can route correctly without opening other schemas.

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

Usage Guidelines5/5

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

Explicitly prescribes the workflow: create the drop, send the URL to the user, wait, then call list_media. It also names the alternatives it is not (chat paperclip, create_signed_upload), giving clear when/when-not guidance.

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

create_postAInspect

Schedule or immediately publish one social media post. DESTRUCTIVE WRITE that creates content on the user's connected social account. Always confirm caption + scheduled_at + account_id/workspace with the user before calling. For Instagram, distinguish caption @mentions from native instagram_settings.user_tags and co-author instagram_settings.collaborators; call list_platforms with view=schema and account_id before either native feature. Native media tags work with eligible direct or Meta-linked accounts; collaborators require an eligible Meta-linked account. Instagram caption add-ons (caption_addon poll or comment prompt) need a Facebook Login account, a caption, and a feed photo, Reel, or carousel. Stories are rejected, and a poll cannot be combined with a comment prompt. Third-party media URLs are copied into posterly storage before the post is saved; short-lived signed URLs must still be live when this tool runs. For multiple posts, prefer create_posts_batch after confirming every item. On an error or lost reply, retry with the same idempotency_key; a repeat within 10 minutes returns the original post (deduplicated: true). TikTok: with no privacy_level it posts directly using the saved default or public (tiktok_audience_defaulted); post_mode inbox sends it to the app.

NameRequiredDescriptionDefault
captionNoPost caption/text. On Instagram, @username is a caption mention, not a native tag or collaborator invite. Optional on Instagram Stories (first slide only in a series). Ignored when thread_posts is provided.
confirmYesMust be true after the user explicitly confirms the post/account/workspace/schedule.
metadataNo
platformNoPlatform name when using username. Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Aliases x, gmb, and instagram-standalone are also accepted by the API.
settingsNoDeprecated alias of platform_settings (or instagram_settings for Instagram). Prefer those instead.
usernameNoAccount username; requires platform.
media_urlNoMedia URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first. Short-lived signed URLs must still be live when this tool runs.
post_typeNoOptional post type. Omit for auto-detection from media. Supported semantic values include text, image, video, carousel, reel, story, story_series, document, x_thread, threads_thread, photo, and cover_photo.
account_idNoSocial account ID from list_accounts.
media_urlsNoMedia URLs, handled like media_url.
scheduled_atNoISO 8601 UTC datetime. Omit to publish immediately.
thread_postsNoFor X or Threads: 2+ entries, one per post in the reply chain.
workspace_idNoWorkspace ID from whoami.
idempotency_keyNoOptional retry key. Reuse the same value if this create errors or the response is lost.
platform_settingsNoPlatform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples.
instagram_settingsNoInstagram-specific settings: native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations only say readOnly=false and destructive=false; the description adds substantial behavioral context: third-party media URLs are copied into posterly storage and short-lived signed URLs must still be live at run time, a repeat idempotency_key within 10 minutes returns the original post with deduplicated: true, and TikTok defaults to public/auto when privacy_level is omitted. Minor tension: calling it a 'DESTRUCTIVE WRITE' reads harsher than destructiveHint=false, though it is consistent with a non-read-only mutation, and it usefully warns the agent to confirm first.

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?

Purpose and the confirmation requirement are front-loaded, and nearly every sentence encodes a genuine constraint (media URL liveness, Instagram native tags, retry dedup, TikTok defaults). It is a dense single block though, and the Instagram-specific rules could be segmented for faster scanning.

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 an 18-platform tool with 16 parameters, deeply nested settings objects, no output schema, and per-platform quirks, the description covers the dangerous-operation warning, confirmation precondition, platform-specific gotchas, error/retry behavior, and where to get further schema detail. An agent has enough to call this 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 coverage is 94%, so baseline is 3, but the description adds real meaning beyond the schema: it distinguishes Instagram caption @mentions from native user_tags and collaborators, explains when caption_addon features are allowed (Facebook Login account, caption, feed photo/Reel/carousel, not Stories), and clarifies that confirm must follow explicit user confirmation. These are cross-parameter constraints the schema cannot express.

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

Purpose5/5

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

Opens with a specific verb+resource+scope: 'Schedule or immediately publish one social media post.' The 'one' explicitly separates it from the sibling create_posts_batch, which is also named later, so the agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use routing (single post here, create_posts_batch for multiple), a precondition ('Always confirm caption + scheduled_at + account_id/workspace with the user before calling'), a prerequisite lookup step (list_platforms with view=schema and account_id for Instagram native features), and retry guidance with idempotency_key. Exclusions for Stories and poll+comment-prompt combinations are stated outright.

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

create_posts_batchAInspect

Create 1-25 scheduled or immediate social posts in one API request. DESTRUCTIVE WRITE: show the user every post's account/platform, caption or thread text, scheduled time, media, settings, and workspace, then get explicit confirmation for the whole batch before calling. Third-party media URLs are copied into posterly storage before each post is saved. Partial success is possible; failed items return their array index. On an error or lost reply, retry with the same keys; a repeat within 10 minutes returns the original posts (deduplicated: true). TikTok items without privacy_level post directly using the saved default or public (tiktok_audience_defaulted); post_mode inbox sends to the app.

NameRequiredDescriptionDefault
postsYes
confirmYesMust be true after the user explicitly confirms every post in the batch.
idempotency_keyNoOptional batch retry key. Reuse it if the response is lost. A per-item idempotency_key wins.

TDQS

A3.6/5.0
Behavior1/5

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

The description contains useful behavioral detail: confirmation requirements, media copying, partial success with failed indices, and retry deduplication. But it directly contradicts the annotations by calling this a 'DESTRUCTIVE WRITE' while destructiveHint is false, and by describing idempotent retry behavior while idempotentHint is false. That is an annotation contradiction.

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 dense but front-loaded: scope first, then the destructive/confirmation warning, then operational edge cases. Given the complexity and risk of a 25-post batch, every sentence earns its place.

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 complex batch write with no output schema, it covers the critical behavior an agent needs: explicit confirmation, partial success, failed item indices, retry semantics, media copying, and TikTok defaults. The main gap is that it does not explicitly route the agent to single-post or validation alternatives.

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 67%, so the description should add meaning. It does so for confirm (explicit user confirmation for the whole batch) and idempotency_key (reuse on lost response, 10-minute dedupe), and it frames what must be shown per post before calling. It does not explain the full posts schema, but the schema itself carries substantial per-field detail.

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: 'Create 1-25 scheduled or immediate social posts in one API request.' The 1-25 batch scope clearly distinguishes it from the single-post sibling create_post, even without naming that sibling.

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?

It gives an important operational prerequisite—show every post's details and get explicit confirmation for the whole batch—and implies batch use. However, it never explicitly says when to use this tool versus create_post or validate_post, nor when a batch is inappropriate.

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

create_signed_uploadAInspect

Create signed upload URLs for larger images, videos or PDFs, 1 to 20 files per call. Accepts JPEG, PNG, GIF, WebP, MP4, MOV, WebM, and PDF up to 50MB (a PDF is for LinkedIn document posts); HEIC is not accepted. For one file pass filename, content_type and size. For several pass files: [{filename, content_type, size}] and get one slot per file, with any file that fails reported in place. PUT the raw bytes of each file to its upload_url (object storage) with the returned headers, then pass public_url to create_post / create_posts_batch. For a PDF, create the post with post_type document, media_url set to that public_url and a document_title in settings (LinkedIn only). pin_content_type: true locks each slot to the declared content_type. Always send the Content-Type header returned with the slot. Slots expire in 15 minutes.

NameRequiredDescriptionDefault
sizeNoSingle file: size in bytes. Omit when using files.
filesNoBatch: 1 to 20 {filename, content_type, size}. Use instead of the single-file fields.
filenameNoSingle file: filename with extension, e.g. launch-video.mp4. Omit when using files.
content_typeNoSingle file: MIME type, e.g. video/mp4. Omit when using files.
workspace_idNoOptional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces.
pin_content_typeNoOptional. true locks each slot to the declared content_type; a PUT with any other Content-Type fails with 403.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond annotations: accepted formats, 50MB limit, HEIC rejection, PDF/LinkedIn document post handling, per-file failure reporting, pin_content_type locking, mandatory Content-Type header, and 15-minute slot expiry. These are exactly the operational traits an agent needs for a non-idempotent, open-world creation 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?

Front-loaded with purpose and formats, then walks through single-file, batch, upload workflow, and PDF-specific handling in a logical order. It is dense and slightly run-on, but nearly every sentence carries actionable 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?

For a complex upload tool with no output schema, it covers formats, size, batch behavior, the PUT workflow, returned headers/upload_url/public_url, and expiry. Combined with full schema coverage, an agent has enough to call it correctly.

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%, so the schema already documents filename, content_type, size, files, workspace_id, and pin_content_type. The description mainly restates the single-file vs. files usage pattern and pin_content_type behavior that the schema descriptions already cover, adding little new parameter semantics.

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?

States a specific verb and resource: 'Create signed upload URLs' for images, videos, and PDFs, with batch size and media type limits. It implies a distinction from upload_media via 'larger' files, but never names the sibling alternatives, so an agent must infer the boundary.

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?

Clear usage context: use single-file fields for one file, `files` for 1–20, and then PUT bytes and pass public_url to create_post / create_posts_batch. It does not explicitly say when to choose this over upload_media or create_media_drop, leaving the 'larger files' implication implicit.

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

create_webhookAInspect

Create a webhook subscription for post/account/analytics events. WRITE WITH OUTBOUND SIDE EFFECTS: show the user the target URL, workspace, events, and active state, then get explicit confirmation before calling. The response includes the signing secret once.

NameRequiredDescriptionDefault
urlYes
eventsNo
confirmYesMust be true after the user explicitly confirms webhook creation.
is_activeNo
descriptionNo
workspace_idNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare a non-read-only, open-world, non-idempotent write; the description adds real value beyond them by flagging outbound side effects, the mandatory confirmation gate, and that the signing secret is returned only once. That is exactly the behavioral context an agent needs before invoking an externally visible write.

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 tight sentences with zero filler; the confirmation requirement is front-loaded right after the purpose statement.

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?

No output schema exists, and the description usefully discloses the one notable return value (the signing secret, delivered once). Combined with the confirmation protocol this is largely complete, though it omits error/failure behavior for an outbound-integration write.

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 only 17%, but the description compensates by naming the four fields the agent must surface for confirmation (URL, workspace, events, active state). It says nothing about the 'description' field, enum event values, or defaults, so meaning is only partly filled in.

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?

States a specific verb and resource ('Create a webhook subscription') and scopes it to post/account/analytics events, which is enough to separate it from list_webhooks. It does not explicitly say how it differs from the sibling manage_webhook, so the agent must infer that manage_webhook handles updates/deletes.

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 a concrete pre-call procedure: show target URL, workspace, events and active state, then obtain explicit confirmation. That is clear usage context, though it never names an alternative tool or states when not to create a webhook (e.g. when one already exists).

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

delete_api_keyA
DestructiveIdempotent
Inspect

Revoke a posterly API key owned by the authenticated user. DESTRUCTIVE: show the user the exact key ID/prefix/name if available and get explicit confirmation before calling. Cannot revoke the key currently authenticating this request, OAuth-issued keys, or managed assistant keys.

NameRequiredDescriptionDefault
key_idYesAPI key ID to revoke. This is the API key resource ID, not the secret pst_live_ value.
confirmYesMust be true after the user explicitly confirms API key revocation.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, and the description builds on that with real operational context: the ownership boundary, the three categories that cannot be revoked, and the confirmation gate. The 'DESTRUCTIVE' callout with the confirmation instruction is exactly the behavioral guidance a mutation tool needs.

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?

Three sentences, zero filler. The destructive warning and call to action are front-loaded, followed by eligibility limits, so the highest-risk information is read first.

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 two-parameter destructive tool with no output schema, the description covers purpose, ownership scope, confirmation workflow, and hard exclusions; idempotency and safety profile are carried by annotations. Nothing an agent needs to call it safely 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% and both parameters are already documented, including the important distinction that key_id is the resource UUID rather than the pst_live_ secret. The description reinforces the confirmation requirement but adds no new syntax, format, or constraint information beyond the schema, 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 ('Revoke') plus resource ('API key') and adds scope ('owned by the authenticated user'), which cleanly separates it from create_api_key and other key-management siblings. An agent knows immediately this is key revocation, not secret rotation or general deletion.

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

Usage Guidelines5/5

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

Gives explicit when-not conditions: cannot revoke the key authenticating the current request, OAuth-issued keys, or managed assistant keys. It also prescribes the pre-call workflow ('show the user the exact key ID/prefix/name... and get explicit confirmation'), leaving nothing to inference about eligibility or sequencing.

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

delete_postA
DestructiveIdempotent
Inspect

Delete posts. DESTRUCTIVE and IRREVERSIBLE. post_id: delete one post; fetch it with get_post first, confirm what will be deleted, then pass confirm=true. A post that is currently publishing is never deleted. A published post is taken down only when the user also explicitly confirms the live removal: delete_mode=platform with confirm_published=true takes the live post down too; delete_mode=posterly removes only the posterly record and leaves it up. Live deletion supports eligible connected platforms with saved post IDs and deletion permissions; refusals keep the record. Threads requires threads_delete. YouTube requires youtube.force-ssl or equivalent, upload alone is insufficient. A published post with no live URL and no platform id is removed from posterly only. group_id: delete every draft, scheduled, failed, or paused post matching a caller-defined group_id, post_group_id, api_group_id, or release_id. A group delete never removes published posts. Preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.

NameRequiredDescriptionDefault
confirmNopost_id: true after the user explicitly confirms the deletion. group_id: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
post_idNoDelete this one post.
group_idNoDelete every unpublished post in this group or release instead. Never deletes published posts.
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
delete_modeNoRemove the posterly record only, or also take down the live post.
confirm_publishedNoWith post_id only. True only after the user explicitly confirms taking a live post down. Required with delete_mode=platform.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: publishing posts are never deleted, published posts go down only with delete_mode=platform plus confirm_published=true, posterly-only leaves the live post up, live deletion requires eligible platforms and permissions (threads_delete, youtube.force-ssl), and refusals keep the record. This is exactly the operational context annotations cannot 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 the destructive warning and the two deletion modes, and nearly every sentence carries operational detail. It is dense but warranted for a conditional destructive tool, with only minor room for tightening.

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?

Covers prerequisites, permission requirements, the preview/confirm workflow, per-mode behavior, and refusal handling for a destructive mutation with no output schema. An agent has everything needed to invoke it safely.

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: delete_mode=platform pairs with confirm_published, confirm requires preview_id for previewing actions, and group_id matches caller-defined group_id/post_group_id/api_group_id/release_id. It explains parameter interdependencies beyond the schema's per-field text.

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?

Starts with a specific verb+resource ('Delete posts') immediately flagged DESTRUCTIVE and IRREVERSIBLE, then splits cleanly into the post_id and group_id modes. An agent can distinguish it from get_post/update_post 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 Guidelines5/5

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

Explicitly routes usage: single post via post_id requires fetching first with get_post and confirming, bulk via group_id matches drafts/scheduled/failed/paused only, and the preview-then-confirm flow is spelled out. The prerequisite (get_post) and the alternative (group_id) are both named.

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

disconnect_accountA
DestructiveIdempotent
Inspect

Disconnect a connected social account from posterly. DESTRUCTIVE and IRREVERSIBLE: this removes the account connection, emits account.disconnected webhooks, and may transfer Instagram scheduled posts to a replacement account. Always call list_accounts first, show the user the exact account/platform/workspace, and get explicit confirmation before calling.

NameRequiredDescriptionDefault
confirmYesMust be true after the user explicitly confirms the account disconnect.
account_idYesConnected social account ID from list_accounts.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description goes well beyond them by disclosing the concrete consequences: removal of the account connection, emission of account.disconnected webhooks, and possible transfer of Instagram scheduled posts to a replacement account. The 'IRREVERSIBLE' warning and the required confirmation gate add real behavioral context an agent cannot infer from the 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?

Two sentences, front-loaded with the destructive/irreversible warning before the procedural instruction, with zero filler. Every clause carries actionable information (side effects, webhooks, Instagram post transfer, confirmation gate).

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 destructive two-parameter mutation with no output schema, the description covers what the agent needs: preconditions (list_accounts, user confirmation), consequences (connection removal, webhook emission, possible post transfer), and reversibility (irreversible). Nothing material is left unspecified.

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 both parameters (account_id, confirm) are already documented in the input schema, including the requirement that confirm be true only after explicit user confirmation. The description reinforces the confirmation workflow but adds no new syntax or format detail beyond the schema, 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?

The description states a specific verb ('Disconnect') plus the exact resource ('a connected social account') and the system it lives in ('from posterly'). It is immediately distinguishable from the sibling 'connect_account' and from unrelated mutations like 'delete_post' or 'delete_api_key'.

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

Usage Guidelines5/5

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

It gives explicit prerequisites and an ordering: call list_accounts first, show the user the exact account/platform/workspace, and obtain explicit confirmation before invoking. This is a complete when/how-to-use protocol rather than a vague hint, and it names the sibling tool to consult first.

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

dismiss_suggestionA
DestructiveIdempotent
Inspect

Dismiss a proactive post suggestion so it stops appearing, or pass save_as_draft true to turn it into an unpublished draft instead. A draft is not scheduled and nothing is published. WRITE: confirm the exact suggestion with the user first. Never dismisses, and does not overwrite, a suggestion that was already turned into a post.

NameRequiredDescriptionDefault
save_as_draftNoTrue saves the suggestion as an unpublished draft and does not dismiss it. Omit to dismiss.
suggestion_idYesSuggestion ID from list_post_suggestions.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint/idempotentHint, but the description adds real value beyond them: the draft path is not scheduled and publishes nothing, a previously-converted suggestion is left untouched (no-op rather than overwrite), and a user-confirmation step is mandated. It does not describe the response payload, but that is a minor omission given the destructive/idempotent hints are already present.

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 primary action and its effect, then the alternate mode, then safety. Roughly three sentences with minimal redundancy, though 'A draft is not scheduled and nothing is published' partially restates the draft concept.

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 two-parameter mutation with no output schema, the description covers both modes, side effects, idempotent no-op behavior, and a confirmation requirement. The only gap is what 'dismiss' does to the underlying record versus merely hiding 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; the description goes further by explaining the consequence of save_as_draft=true (unpublished draft, unscheduled, nothing published) and implying the default dismiss behavior when omitted. It adds semantic weight beyond the boolean's own text.

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 (dismiss) and resource (proactive post suggestion) with the resulting effect ('stops appearing'), then immediately clarifies the alternate mode (save_as_draft true → unpublished draft). An agent can distinguish this from create_post or list_post_suggestions 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?

Gives explicit operational context — 'WRITE: confirm the exact suggestion with the user first' — and an exclusion: it will not dismiss a suggestion that was already turned into a post. It does not explicitly name which sibling to use to obtain the suggestion ID or to create a real post instead, so it stops short of full alternative routing.

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

downgrade_subscriptionA
DestructiveIdempotent
Inspect

Move the subscription down one tier (or to an explicit lower tier) now: the lower limits and credits apply right away, the lower price starts at the next renewal, and the rest of the current period is not refunded. Strictly downward only. Requires billing:write. Only call after the user explicitly confirms.

NameRequiredDescriptionDefault
tierNoOptional explicit target tier. Omit to drop one tier automatically.
confirmYesMust be true after the user explicitly confirms the downgrade.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, and the description adds substantial context beyond them: timing of the new limits/credits (immediate), timing of the price change (next renewal), the no-refund policy for the current period, and the required billing:write scope. This is exactly the behavioral detail an agent needs before a destructive mutation.

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?

Front-loads the action, then packs the billing consequences, direction constraint, permission requirement, and confirmation gate into tight clauses. No filler; every sentence carries information an agent must act on.

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 covers the preconditions, side effects, and billing timing an agent needs to call a destructive mutation safely. Nothing material 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 both parameters are already documented, and the description largely restates the tier semantics. It does add a meaningful constraint beyond the schema ('explicit lower tier' — the target must be downward), but it does not enrich the 'confirm' flag beyond what the schema already says.

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+resource (move the subscription down a tier) with immediate scoping of what 'down' means, clearly distinguishing it from upgrade_subscription, cancel_subscription, and pause_subscription in the sibling set. An agent knows exactly what the tool 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?

Provides clear when-to-use context ('strictly downward only', 'only call after the user explicitly confirms') and a prerequisite ('requires billing:write'). It does not explicitly name upgrade_subscription as the alternative for upward moves, relying on inference, so it falls just short of 5.

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

find_available_slotA
Read-onlyIdempotent
Inspect

Find available time slots for posting. Respects a 1-hour gap between posts and preferred hours. Always pass timezone explicitly (default is America/New_York). Each slot includes the UTC instant to pass as scheduled_at. strategy "best_engagement" (needs account_ids) ranks the next 7 days by when these accounts get the most engagement, with a 1-5 star rating and a reason per slot.

NameRequiredDescriptionDefault
countNoNumber of slots to return (max 10). Default 5 for next_free, 3 for best_engagement.
strategyNonext_free: earliest free slots. best_engagement: best times by engagement (requires account_ids).next_free
timezoneNoIANA timezone, e.g. Europe/London
account_idsNo
workspace_idNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare a safe read-only/idempotent profile, and the description layers on genuinely non-obvious behavior: the enforced 1-hour gap between posts, preferred-hours respect, the America/New_York timezone default, and the 7-day ranking window with 1-5 stars and a per-slot reason. This is exactly the context annotations cannot 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?

Four tight sentences, front-loaded with the purpose and constraints before the strategy detail. The inline quoting of strategy "best_engagement" is slightly awkward, but 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?

With no output schema, the description still tells the agent what a slot contains (UTC instant to pass as scheduled_at, star rating, reason), which is the key return-value detail. It leaves out the shape of non-ranked slots and the role of workspace_id, minor gaps for a 5-parameter read tool.

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 60%, and the description compensates for the uncovered gaps: it warns that timezone has a hidden America/New_York default and must be set explicitly, and that account_ids is mandatory for best_engagement. workspace_id remains unexplained in both schema and description, which keeps it from a 5.

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 + resource ('Find available time slots for posting') and immediately scopes it with the constraints that define the result (1-hour gap, preferred hours). Clearly distinguishable from creation siblings like create_post or listing siblings like list_posts.

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 operational guidance: always pass timezone explicitly (with the default named), and best_engagement requires account_ids. This selects between the two strategy modes. It does not, however, mention when to use this tool versus alternatives such as get_post or validate_post, or when scheduling is inappropriate.

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

generate_captionsAInspect

Generate or adapt AI caption suggestions for one or more social platforms. Uses AI Caption Assist quota and returns options only; it does not create, draft, schedule, or publish posts.

NameRequiredDescriptionDefault
modeNogenerate
toneNo
briefNo
countNo
platformsYes
allow_emojisNo
workspace_idNo
preserve_linksNo
source_captionNo
source_platformNo
hashtag_strategyNosmart
preserve_mentionsNo
social_account_idNo
manual_brand_voiceNo
preserve_call_to_actionNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only supply the safety profile (not read-only, not idempotent, non-destructive, open-world). The description adds genuinely new behavior: it consumes AI Caption Assist quota (a metered side effect consistent with readOnlyHint=false) and yields options rather than persisted artifacts. It does not disclose failure modes when quota is exhausted or whether results are cached across identical calls.

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, no filler, and the capability statement is front-loaded ahead of the boundary caveat. Every clause is load-bearing.

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

Completeness2/5

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

For a 15-parameter tool with a nested manual_brand_voice object, three enums, and no output schema, the description is far too thin. It never explains the generate-vs-adapt workflow that most parameters depend on, and gives no hint about what the returned caption options look like or how many are returned per platform.

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

Parameters2/5

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

Schema description coverage is 0% across 15 parameters, so the description carries the full burden and largely fails it. 'Generate or adapt' faintly gestures at the mode enum and 'one or more social platforms' at platforms, but the critical mode/source_caption/source_platform coupling, tone, hashtag_strategy, brand-voice object, and the preserve_* flags are entirely unexplained.

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 first sentence gives a specific verb pair and resource ('Generate or adapt AI caption suggestions') plus scope ('one or more social platforms'). The second sentence immediately demarcates it from the create_post family, so an agent can distinguish it 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?

The clause 'it does not create, draft, schedule, or publish posts' is an explicit when-not boundary that routes agents away from create_post/create_posts_batch, and 'returns options only' clarifies the output-only nature. It lacks a positive 'use this when you need copy suggestions before drafting' framing and never names the alternative tool, so it stops short of a full 5.

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

generate_imageAInspect

Queue an AI image job via posterly using Nano Banana (Gemini) or Grok Imagine Image 2.0 (xAI). Returns job_id. Poll list_jobs with type=image for urls. COSTS CREDITS - confirm subject + style + aspect_ratio + quality + provider with the user before calling.

NameRequiredDescriptionDefault
modelNoGoogle-only: lite (8 credits, 1K only), flash (Nano Banana 2.1, 15 at 1K), or pro (30 at 1K). Ignored for xAI.flash
styleNophotographic
promptYes
confirmYesMust be true after the user explicitly confirms subject, style, aspect ratio, quality, and credit use.
qualityNoGoogle: high turns on Gemini thinking. low/medium leave thinking minimal unless thinking_level is set. xAI: low or medium credit tiers.
providerNogoogle for Nano Banana or xai for Grok Imagine Image 2.0.google
resolutionNoxAI supports 1K/2K only. Google flash (Nano Banana 2.1) bills 15/23/35 for 1K/2K/4K. 512 is no longer available. Pro bills 30 at 1K-2K and 55 at 4K.1K
variationsNo
aspect_ratioNo1:1
workspace_idNoOptional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces.
thinking_levelNoGoogle flash/lite. Gemini image quality control. minimal is fastest; high is for infographics and harder layouts. Overrides quality when both are set. Thinking high does not change the credit price.
reference_image_urlsNoGoogle only. Up to 14 HTTPS image URLs used as references (logo, product, style lock).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, openWorld=true, idempotent=false), and the description adds real behavioral context beyond them: the operation costs credits, is asynchronous (returns job_id), and requires explicit user confirmation. It does not restate non-idempotency or describe failure/credit-refund behavior.

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?

Three dense sentences: what it does, how to retrieve results, and the cost/confirmation constraint. The credit warning is capitalized and front-loaded where it matters most.

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 12-parameter async mutation with no output schema, the description covers return shape (job_id), retrieval path, credit risk, and the confirmation gate. It leaves provider capability differences (e.g., xAI resolution limits) to the schema, which is reasonable but not fully self-contained.

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 67% and the schema itself carries rich enum and billing explanations (model, quality, resolution, thinking_level, reference URLs). The description only names the fields to confirm with the user, adding workflow meaning rather than new parameter semantics, 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 (queue an AI image job) plus the backing service and provider options (Nano Banana/Gemini, Grok Imagine/xAI), and notes the return value. An agent can immediately distinguish this from generate_video and other siblings.

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?

Explicitly prescribes the follow-up workflow (poll list_jobs with type=image to get URLs) and a hard precondition (confirm subject + style + aspect_ratio + quality + provider with the user before calling). It does not name when to prefer this over generate_video or when not to use it, so it stops short of 5.

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

generate_videoAInspect

Queue an AI video job with Google Veo 3.1 or xAI Grok Imagine Video 1.5. COSTS CREDITS - confirm provider, prompt, duration, resolution, aspect ratio, audio choice, and credit cost with the user before calling. Poll list_jobs with type=video for status and final video_url.

NameRequiredDescriptionDefault
modelNofast
promptYes
confirmYesMust be true after the user explicitly confirms prompt, model, duration, resolution, and credit cost.
providerNogoogle
image_urlNo
resolutionNo720p
aspect_ratioNo16:9
workspace_idNoOptional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces.
end_image_urlNo
generate_audioNoGoogle can disable generated audio. xAI Grok includes audio and requires this to remain true.
negative_promptNo
duration_secondsNo
reference_imagesNo
source_video_urlNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare the generic write profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false). The description adds information annotations cannot convey: the call consumes credits, requires explicit user confirmation of specific fields, and is asynchronous so results must be polled from list_jobs and read from final video_url.

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?

Three tight sentences: identity first, the high-stakes credit/confirmation warning second, the polling instruction last. Nothing is redundant and the most important operational constraint is front-loaded rather than buried.

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

Completeness3/5

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

For a 14-parameter mutation tool with no output schema and thin schema descriptions, the description covers the queue-then-poll lifecycle and the cost gate but not the input modes implied by image_url, end_image_url, source_video_url, and reference_images. An agent would not know from the text alone whether this is text-to-video, image-to-video, or video extension.

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 only 21% across 14 parameters, so the description must compensate and it only partly does: it enumerates provider, prompt, duration, resolution, aspect ratio, and audio. Model, image_url, end_image_url, source_video_url, reference_images, negative_prompt, and workspace_id remain undocumented anywhere beyond their names and enums.

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?

States a specific verb and resource ('Queue an AI video job') and names the concrete backends (Google Veo 3.1, xAI Grok Imagine Video 1.5), so the agent knows this is asynchronous video generation. It also routes status checks to list_jobs, though it does not distinguish itself from nearby siblings like generate_image, get_video_options, or run_video_function.

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 an explicit precondition workflow: confirm provider, prompt, duration, resolution, aspect ratio, audio, and credit cost with the user before calling, and it names the follow-up tool (list_jobs with type=video). It does not state any when-not-to-use conditions or explain when a different generation tool would be preferred.

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

get_creditsA
Read-onlyIdempotent
Inspect

Get the posterly AI credit balance: available to spend now, monthly included allowance left, purchased pack balance, plan tier, and the next reset. Credits are a shared WORKSPACE wallet, so this is the balance the caller can actually spend. Read-only. Requires the billing:read scope.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, yet the description still adds real value: it discloses the required billing:read scope, which is the most common failure mode when calling, and explains the workspace-shared wallet semantics so the agent knows the balance is not per-user. It omits any note on staleness or caching of the balance.

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?

A single dense sentence that front-loads the verb and resource, then the returned fields, then the workspace-wallet caveat, then the scope requirement. Every clause carries distinct information with no restatement of the name.

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 correctly compensates by listing the five values returned. For a zero-parameter read tool this is close to complete; only the unit/expiry semantics of the different balances and any staleness behavior are left implicit.

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 the description needs to disambiguate; a baseline of 4 applies. The schema is empty with additionalProperties false, matching the parameterless description.

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?

States a specific verb and resource ('Get the posterly AI credit balance') and enumerates exactly what the payload contains: available balance, monthly allowance left, purchased packs, plan tier, next reset. It does not explicitly distinguish itself from near siblings like get_subscription or manage_plan, so an agent must infer the boundary.

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?

No when-to-use guidance is given, no prerequisites for calling, and no naming of alternatives such as get_subscription for billing details or manage_plan for changing tiers. The clause 'this is the balance the caller can actually spend' clarifies interpretation, not invocation timing.

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

get_postA
Read-onlyIdempotent
Inspect

One post by ID. view=post (default): caption, status, platform, account, scheduled time, when it was created and by whom (account and channel, such as dashboard, API, or MCP), media, a link back to the post in posterly, and the failure reason when a publish failed. view=missing: each missing field (content, media, account, platform settings, or metadata) and how to fix it before the post can publish.

NameRequiredDescriptionDefault
viewNopost (default) or missing.post
post_idYesThe post ID to look up

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world access, so the safety profile is covered. The description adds real operational context beyond that: exactly which fields come back per view and that failure reasons are surfaced when a publish failed. It omits behavior for a nonexistent post_id (error vs empty), which keeps it from a 5.

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?

It is front-loaded with the one-line purpose, then two clearly parallel clauses for the two views. The field enumerations are long but each item is informative; a slightly tighter structure (e.g., bullets or comma-grouping) would read better than the trailing 'and ... and ... and' chain.

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 burden of describing return values, and it does so thoroughly for both views — listing returned fields for view=post and the diagnostic categories for view=missing. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description materially enriches the 'view' enum by spelling out the contents of each mode rather than restating 'post or missing.' post_id itself gets no extra explanation, but the schema is adequate there.

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 first sentence names a specific verb and resource with scope: 'One post by ID.' It then splits the tool's two modes by name (view=post, view=missing), which cleanly separates it from list_posts and from mutation siblings like update_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?

It states the default mode and explains what view=missing is for ('how to fix it before the post can publish'), giving clear context for choosing between them. It does not, however, point to validate_post or list_posts as alternatives for adjacent tasks, so the routing guidance is incomplete.

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

get_subscriptionA
Read-onlyIdempotent
Inspect

Get the posterly subscription: status, tier, cancel-at-period-end, period end, trial end, pause state, connected accounts in use and the account limit for this workspace (tier plus extra slots). Call FIRST for "upgrade", "change plan", "add accounts" or "how many accounts": it returns the plans above this one with prices, limits and credits, the Agency extra-accounts state (owners) and next steps. On a trial, limits stay until the paid plan starts: see manage_plan. Read-only. Requires the billing:read scope.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already carry readOnlyHint, idempotentHint and destructiveHint=false, so the description doesn't need to restate safety. It does add context the annotations can't supply: the required billing:read scope, the fact that upgrade targets, prices, limits and credits are included, and the caveat that limits stay frozen on a trial until the paid plan starts.

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 most important detail, what the tool returns, comes first, followed by when to call it, and then the trial caveat and the auth requirement. It is dense and most sentences are useful, but the long run of quoted trigger phrases makes it heavier than it strictly needs to be.

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

Completeness5/5

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

No output schema exists, so the description must describe what comes back; it does so field by field, including the plan-ladder and Agency extra-accounts data. It also covers the auth prerequisite and the trial edge case, leaving nothing an agent needs in order to call this zero-parameter read 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?

The tool takes no parameters at all, so there is nothing for the description to disambiguate and the baseline is the maximum. The schema is closed (additionalProperties: false), and nothing in the description conflicts with that.

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 and enumerates exactly what the response contains: status, tier, cancel-at-period-end, period end, trial end, pause state, seats in use and the account limit. That field list separates it cleanly from near siblings such as get_credits or manage_plan, which an agent might otherwise confuse with it.

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

Usage Guidelines5/5

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

It names the concrete user intents that select this tool ("upgrade", "change plan", "add accounts", "how many accounts") and tells the agent to call it FIRST. It also defers the trial-limit follow-up to manage_plan, so the boundary between the two tools is explicit.

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

get_updatesA
Read-onlyIdempotent
Inspect

Get the latest posterly product updates and news from the updates feed: new features, improvements, and fixes, newest first. The output says whether more updates exist; page with offset or narrow with since. Requires an active posterly subscription.

NameRequiredDescriptionDefault
limitNoNumber of updates to return. Default 10, max 50.
sinceNoISO date. Return updates published on or after this date.
offsetNoHow many updates to skip. Use the offset the previous page gives to get the next page.
include_contentNoInclude the full markdown body of each update. Defaults to false.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety bar is covered. The description adds non-obvious behavior beyond them: newest-first ordering, that the output signals whether more updates exist, and that a subscription is required.

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?

Three tight sentences: what it returns first, then how to page/narrow, then the precondition. Zero filler and the key scoping information is front-loaded.

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 usefully discloses ordering, the existence of a more-results signal, and the subscription gate. It doesn't describe the fields of an individual update, but nothing needed to invoke the tool correctly 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%, so all four parameters are already documented (limit bounds, since ISO date, offset paging, include_content markdown body). The description restates the offset/since pagination strategy but adds no syntax or format detail beyond the schema, so 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 and resource ('Get the latest posterly product updates and news from the updates feed') and enumerates the content types (features, improvements, fixes). No sibling tool overlaps this feed, so the agent can identify it immediately.

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 usage direction ('page with offset or narrow with since') and a prerequisite ('Requires an active posterly subscription'). It stops short of naming when-not-to-use or a competing tool, but no sibling competes for this job.

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

get_video_optionsA
Read-onlyIdempotent
Inspect

List read-only Google Veo and xAI Grok video generation options, input modes, durations, resolutions, aspect ratios, and credit-cost estimates. Does not generate video or spend credits.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower. The description adds genuinely new behavioral context: it discloses that credit costs are merely estimated in the listing and that invoking it spends no credits, which is exactly the concern an agent would have before a paid generation flow. It does not describe pagination or response shape beyond the field list.

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 tight sentences with no filler: the first enumerates what is listed, the second removes the main misreading (that this generates or charges). Front-loaded with the verb and resource.

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?

No output schema exists, but the description compensates by naming the returned categories (input modes, durations, resolutions, aspect ratios, credit-cost estimates). With zero params and annotations covering the safety profile, an agent has everything needed to call it 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?

The tool takes zero parameters, so per the rubric the baseline is 4. Nothing in the description is needed to explain inputs, and it correctly implies no arguments are required.

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?

Specific verb ("List") plus concrete resource (Google Veo / xAI Grok video generation options) and an enumeration of the option categories returned. The closing sentence explicitly separates it from the sibling generate_video, so an agent can route 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?

The negative clause "Does not generate video or spend credits" implicitly routes the agent to generate_video/run_video_function for actual generation and signals this is the discovery step. There is no explicit "call this before generating" instruction, but the context is clear and no alternatives are named outright.

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

get_x_posting_quotaA
Read-onlyIdempotent
Inspect

Get managed X posting quota, usage, remaining posts, URL-blocking status, and add-on plan info for a workspace.

NameRequiredDescriptionDefault
workspace_idNo

TDQS

A3.5/5.0
Behavior3/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 useful content-level disclosure by listing what is returned (usage, remaining posts, URL-blocking status, add-on plan), but says nothing about auth requirements, rate limits, or whether the workspace_id is optional/defaulted.

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?

One front-loaded sentence with no filler; the verb and resource lead and the returned facets follow. The list of facets is slightly run-on but each item earns its place by signaling return content absent from an output schema.

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 correctly compensates by enumerating the returned fields, and the read-only annotations carry the safety profile. Given a single-parameter read tool this is nearly complete; only the optional/default nature of workspace_id and any permission requirements are unaddressed.

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 0% for the single workspace_id parameter. The phrase 'for a workspace' hints at the scope but adds no format, default, or behavior detail. With only one self-explanatory parameter the gap is minor, but the description does not compensate for the missing schema documentation.

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 states a specific verb (Get) and a specific resource (managed X posting quota) and enumerates the facets returned: usage, remaining posts, URL-blocking status, and add-on plan info. It is distinguishable from generic siblings like get_credits or get_subscription by being X-posting-specific, though it does not explicitly name the nearest alternative.

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?

There is no explicit when-to-use or when-not-to-use guidance, and no reference to alternatives such as get_credits or get_subscription that an agent might confuse with quota. Usage is implied by the resource name (check posting quota for a workspace) but left to inference.

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

list_accountsA
Read-onlyIdempotent
Inspect

Connected social accounts and what posterly has learned about them. view=accounts (default): connected accounts, optionally one workspace_id or one account_id. Each row has connection_status ok or needs_reconnect (reason and date, never a token). Pass connection=needs_reconnect to list only accounts that need a reconnect. Instagram rows show direct-login vs Meta-linked and whether native media tags/collaborators are available, so check this before Instagram user_tags or collaborators. view=learned_voice (account_id): the voice learned from the account's real published captions (summary, traits, style guidelines, habits); read-only, never overwrites the brand profile. view=performance_profile (account_id): 90-day coaching stats, engagement-rate trend, and summary, or null with a reason (Pro plan or higher). view=connect_session (session_id): poll a session from create_connect_session and narrate status_message; stop at connected, failed, cancelled, or expired.

NameRequiredDescriptionDefault
viewNoaccounts (default), learned_voice, performance_profile, or connect_session.accounts
account_idNoSocial account ID from list_accounts. Required for learned_voice and performance_profile; with view=accounts it returns just that account.
connectionNoview=accounts: ok, or needs_reconnect to list only accounts that need a reconnect.
session_idNoview=connect_session: the connect session ID returned by create_connect_session.
workspace_idNoview=accounts: filter to a specific workspace; omit for all the caller can access.

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, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds valuable behavioral details beyond annotations: it notes that learned_voice is read-only and never overwrites the brand profile, that performance_profile may return null with a reason for non-Pro plans, and that connect_session polling should stop at connected, failed, cancelled, or expired. It also mentions that connection status reasons/dates are returned but never tokens. These additions significantly enhance transparency, though rate limits or auth requirements are not covered.

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 information-dense and front-loads the overall purpose before detailing each view. Every sentence serves to explain a view's behavior or a specific constraint. It is somewhat lengthy but justified by the tool's complexity (four views, multiple parameters), though it could be structured with clearer separation (e.g., bullet points) for readability.

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 the tool's complexity (multiple views, five parameters, no output schema) and rich annotations, the description is mostly complete: it covers what each view returns (summaries, traits, stats, status polling) and includes critical usage details (read-only nature, plan requirement, polling stop conditions). It lacks minor details like pagination behavior or error handling, but these are not essential for an agent to invoke the tool correctly.

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 baseline is 3 even without additional parameter info in the description. The description does reiterate the purpose of each view and the connection filter, but it largely duplicates what the schema already provides (e.g., the schema already describes account_id's required views and workspace_id filtering). It adds marginal semantic clarity beyond the schema, such as the Instagram-specific check, but does not compensate for any schema gaps.

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 ('list' implied by name) and resource ('connected social accounts') and elaborates on the multiple views (accounts, learned_voice, performance_profile, connect_session) that this tool uniquely serves. It distinguishes itself from siblings like list_platforms (which likely lists available platforms, not connected accounts) through the detailed view breakdown.

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 usage context for each view and specific conditional guidance, such as 'check this before Instagram user_tags or collaborators' and 'Pass connection=needs_reconnect to list only accounts that need a reconnect.' However, it does not explicitly name alternative tools or state when to use this tool versus sibling listing tools, leaving some implicit.

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

list_activityA
Read-onlyIdempotent
Inspect

List recent activity and publish events for posts, including status changes, publish attempts, failures, and retries, newest first. Use this as the agent notifications feed. The output says whether more events exist; page with offset (offset + limit up to 1000) or narrow with since or post_id before concluding nothing else happened.

NameRequiredDescriptionDefault
typeNoall
limitNo
sinceNoISO datetime. Return events created at or after this time.
offsetNoHow many events to skip. Use the offset the previous page gives to get the next page.
post_idNo
workspace_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world reads, so the safety profile is covered. The description adds real behavioral detail beyond that: newest-first ordering, the existence of a 'more events' signal in the output, pagination mechanics, and a cap on offset+limit. It does not explain retention windows or what an empty result means, so not a 5.

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?

Three front-loaded sentences with no filler; the enumeration of event kinds and the pagination clause both earn their place. Slightly dense in the second sentence, but appropriately sized for a feed tool.

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?

No output schema exists, and the description correctly signals the pagination/end-of-results behavior an agent needs. It omits the meaning of the type enum and the workspace scoping filter, which for a 6-parameter tool is a modest but real gap.

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 only 33%, and the description compensates by explaining offset/limit paging behavior and naming 'since' and 'post_id' as narrowing filters. The 'type' enum (all/activity/publish) and workspace_id are left unexplained, which is the remaining gap.

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 (list activity/publish events) with concrete event categories (status changes, publish attempts, failures, retries) and ordering (newest first). The phrase 'agent notifications feed' distinguishes it from sibling listers such as list_posts, list_comments, and list_jobs.

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 when-to-use context ('use this as the agent notifications feed') and when NOT to conclude nothing else happened, plus two narrowing strategies. It never names an explicit alternative tool, so it falls short of a 5, but the intended usage scenario is unambiguous.

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

list_analyticsA
Read-onlyIdempotent
Inspect

Analytics for connected accounts (Instagram, X, Facebook Pages, LinkedIn, Google Business Profile, Pinterest, YouTube, and Threads). view=accounts (account_id): daily snapshots and a period summary with platform-native display_metrics labels. Google Business Profile adds Calls, Website clicks, and Directions to its profile, search, and maps views. view=posts (account_id): per-post likes, comments/replies, reach, impressions/views, saves, shares, reposts, quotes, and plays, most recent first, with limit/offset. Google Business has no per-post rows; its totals are on view=accounts. view=insights: per-post feedback insights with a performance tier, diagnosis, next action, and baseline, filtered by account_id, post_id, or checkpoint (1h, 6h, 24h, 72h, 7d); Pro plan or higher. presentation (accounts and posts): compact for Telegram/mobile, table for Markdown clients, json for chart renderers. include_extras reads saved extras only and never starts a sync.

NameRequiredDescriptionDefault
toNoaccounts and posts: ISO date, default today
fromNoaccounts and posts: ISO date, default 30 days ago
viewYesaccounts, posts, or insights.
limitNoposts: default 50, max 200. insights: default 20, max 100.
offsetNoposts only.
post_idNoinsights: filter to one post ID.
account_idNoSocial account ID (from list_accounts). Required for accounts and posts.
checkpointNoinsights: filter to one checkpoint after publish.
presentationNoaccounts and posts: compact, table, or json.compact
include_extrasNoaccounts: also return saved audience breakdowns, sync status, and entity snapshots when that read is switched on.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description still adds meaningful behavior: 'include_extras reads saved extras only and never starts a sync' (a key no-side-effect guarantee), a plan-gating requirement for insights, and 'most recent first' ordering with limit/offset. It does not discuss error behavior for missing account_id or rate limits, keeping it below the top mark.

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 platform list, then organized view-by-view so the reader can scan to the relevant section. It is dense and a bit long, but each clause carries substantive detail (metrics, filters, plan gating, no-sync note) rather than repetition.

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 still conveys what each view returns (metric names per platform, feedback tier/diagnosis/next action/baseline), pagination defaults, and presentation formats. A fuller account of the response envelope (e.g. summary vs snapshot shape) would be needed for a 5, but this is sufficient to call 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 coverage is 100%, so the baseline is 3, but the description adds cross-view applicability the schema only implies: which parameters apply to accounts, posts, and insights, that presentation is valid only for accounts/posts, and that include_extras is accounts-only. This conditional parameter routing is genuine value beyond 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?

The description names the resource (analytics for connected accounts), enumerates the platforms, and enumerates the three views with the specific metrics each returns. An agent can distinguish it from list_posts or list_comments because it explicitly frames output as snapshots, summaries, and per-post metric rollups tied to a view selector.

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 per-view routing guidance, including the non-obvious rule that Google Business per-post rows do not exist and its totals live on view=accounts, plus the Pro-plan-or-higher prerequisite for view=insights. It stops short of naming sibling tools (e.g. list_posts, list_comments) as alternatives for raw post/comment data, so exclusions are implicit rather than explicit.

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

list_brandsA
Read-onlyIdempotent
Inspect

Brands (clients) and their saved context. view=brands (default): brands the caller can access with brand ID, name, workspace ID, source, and account count (optional workspace_id). view=brand (brand_id): one brand with its workspace, source, and linked legacy brand group. view=accounts (brand_id): the social accounts assigned to the brand; use when the user names a brand, not a handle. view=profile (brand_id): voice and tone, audience, keywords, dos and don’ts, and other saved brand context, plus Visual identity (hex colours, fonts, logo URLs).

NameRequiredDescriptionDefault
viewNobrands (default), brand, accounts, or profile.brands
brand_idNoThe brand ID (from view=brands). Required for brand, accounts, and profile.
workspace_idNoview=brands: filter to a specific workspace; omit to list brands across every accessible workspace.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered; the description adds the access-scoping ('brands the caller can access'), the legacy-brand-group linkage, and per-view content. It does not mention pagination, result limits, or ordering for large brand lists, which is the remaining gap.

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 default view and its output fields are front-loaded, followed by one clause per remaining view — no filler sentences. It is a single dense paragraph, which is harder to scan than a bulleted listing but is appropriately sized for a four-mode dispatcher.

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 return-value explanation and does so for every view, including the profile's visual-identity fields. Missing only operational details an agent might want: pagination/limits and behavior when brand_id is invalid or inaccessible.

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 goes beyond the schema by mapping each enum value to the exact payload it returns and specifying which views require brand_id, and it clarifies that omitting workspace_id spans every accessible workspace. This is meaningfully more than the terse schema 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?

Opens with a specific verb+resource ('Brands (clients) and their saved context') and then enumerates all four view modes with what each returns (brand list with IDs/workspace/source/account count; single brand with legacy group; assigned social accounts; voice-and-tone profile with visual identity). It explicitly carves out the boundary against the sibling list_accounts by saying view=accounts is 'use when the user names a brand, not a handle'.

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

Usage Guidelines5/5

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

States the default (view=brands), the required parameter for each non-default view, and an explicit selection rule versus the handle-based alternative. An agent can choose the correct mode and parameters without opening the schema.

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

list_commentsA
Read-onlyIdempotent
Inspect

Social inbox comments and replies for Instagram, Facebook Pages, Threads, and LinkedIn Pages (Pro plan or higher plus posts:read). Without comment_id: list comments filtered by account, platform, unread/flagged, search, or since/until dates, with limit/offset paging. With comment_id: one comment and its replies; only workspace_id may be added. YouTube and TikTok are refused rather than returned as an empty list. They stay off until each platform is reviewed and an inbox provider exists.

NameRequiredDescriptionDefault
limitNoRows to return. Default 50.
sinceNoISO date/time, inclusive.
untilNoISO date/time, inclusive.
filterNoDefault all.
offsetNoRows to skip.
searchNoSearch comment content or author username.
platformNo
account_idNoFrom list_accounts.
comment_idNoOne comment and its replies.
workspace_idNoOmit to search all your workspaces, or pass an ID from whoami.

TDQS

A4.7/5.0
Behavior5/5

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

The description adds crucial behavioral constraints far beyond the schema and annotations. It details specific operational requirements, such as needing 'Pro plan or higher' and the 'posts:read' permission. It also manages user expectations by stating the current lack of support for certain platforms and its future development status.

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 description is highly dense, trying to cover platform scope, operational modes, and support limitations all in one paragraph. While the information is vital, it is not optimally structured or concise, leading to slight clutter.

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 definition is extremely comprehensive. It provides all necessary context for an agent to determine platform compatibility, necessary permissions, functional mode (search vs. fetch), and hard limitations (unsupported platforms), making it contextually complete for its complexity.

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?

Although schema coverage is high (90%), the description provides valuable context that the schema lacks. It clarifies that the tool's functionality changes drastically depending on whether comment_id is used, and it clarifies the scoping of workspace_id (i.e., omitting it searches all workspaces).

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 clearly defines the tool's purpose as listing 'Social inbox comments and replies' across specific platforms like Instagram, Facebook, Threads, and LinkedIn. It also distinguishes between two core behaviors: bulk filtering without a comment_id, and retrieving a specific comment and its replies when comment_id is provided.

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

Usage Guidelines5/5

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

It provides explicit usage guidelines by defining the operational modes based on the presence of the comment_id parameter. Furthermore, it provides strong negative usage constraints, specifically stating that YouTube and TikTok are refused by this tool rather than returning an empty list, helping the agent decide when the tool is inapplicable.

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

list_conversationsA
Read-onlyIdempotent
Inspect

Social inbox DM conversations for Instagram and Facebook Page inboxes (Threads has no DMs; Pro plan or higher plus posts:read). Without conversation_id: list conversations filtered by account, platform, unread/starred/archived, search, or since/until dates, with limit/offset paging. With conversation_id: one conversation and its messages; there limit is the number of messages (default 50, max 100) and only workspace_id may be added. When a sync has stored it, each conversation includes the Meta reply window (open until a UTC time, or closed). A reply does not extend that window, and it is not guessed from the messages loaded in the thread.

NameRequiredDescriptionDefault
limitNoRows (messages with conversation_id). Default 50.
sinceNoISO date/time, inclusive.
untilNoISO date/time, inclusive.
filterNoDefault all (excludes archived).
offsetNoRows to skip.
searchNoSearch participant username or last message preview.
platformNoInstagram or Facebook. Threads has comments, not DMs.
account_idNoFrom list_accounts.
workspace_idNoOmit to search all your workspaces, or pass an ID from whoami.
conversation_idNoOne conversation and its messages.

TDQS

A4.5/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 context on top: the required plan and posts:read scope, mode-dependent limit semantics with default 50 and max 100, and the Meta reply-window model including the caveats that a reply does not extend the window and the window is not inferred from loaded messages. Those domain constraints are exactly the kind of thing an agent cannot get from structured fields.

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?

Purpose is front-loaded in the first sentence, followed by the two-mode branch and then the reply-window nuance — a logical order. Four dense sentences with no filler, though the reply-window paragraph is long enough that it could be trimmed slightly.

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 10-parameter read tool with no output schema, the description covers the critical gaps: mode branching, pagination semantics per mode, auth/plan requirements, and one important returned field (reply window). It doesn't describe the shape of returned conversation objects beyond that, and pagination metadata (totals/has_more) is unmentioned, but the essentials for correct invocation are present.

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 per-parameter baseline is 3; the description earns above that by explaining that limit/offset mean rows in list mode but message count in single-conversation mode, and that filters only apply when conversation_id is absent. It also reinforces the Threads exclusion for platform. The remaining filter interplay (e.g., that 'all' excludes archived) is left 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?

The description names a specific verb and resource ('Social inbox DM conversations for Instagram and Facebook Page inboxes') and immediately splits the tool's two operating modes by presence of conversation_id. It also scopes out a false friend ('Threads has no DMs'), so an agent can distinguish it from comment-related siblings like list_comments.

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?

Clear conditional usage is spelled out: omit conversation_id to list with filters, include it to fetch one thread and its messages, and only workspace_id may be combined in that mode. It also states the plan and scope prerequisite ('Pro plan or higher plus posts:read'). It stops short of naming manage_conversation as the tool to use for replying or mutating a thread, though the reply-window sentence implies it.

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

list_google_business_locationsB
Read-onlyIdempotent
Inspect

Read regular opening hours and attributes for one Google Business location. Stays off until location edits are switched on, and does not call Google while it is off. Pass account_id or location_id. Does not return the business name, address, phone, or website.

NameRequiredDescriptionDefault
account_idNoGoogle Business account ID from list_accounts.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
workspace_idNoFilter to a workspace ID from whoami.

TDQS

B3.3/5.0
Behavior4/5

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

Beyond annotations, the description discloses that the tool is disabled until location edits are enabled, does not call Google while off, and omits business name/address/phone/website from results. These are meaningful behavioral and output-scope details not captured by readOnly/openWorld/idempotent hints.

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?

Four short sentences with the purpose front-loaded and no filler. There is minor redundancy between 'Stays off until location edits are switched on' and 'does not call Google while it is off,' but overall it is efficient.

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

Completeness3/5

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

It covers the prerequisite and excluded output fields, which helps for a read-only tool with no output schema. However, it does not explain what 'attributes' or opening-hours results look like, and it leaves the single-location vs list ambiguity unresolved.

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 parameter documentation is already complete. The description only repeats 'Pass account_id or location_id' and does not add format, precedence, or behavioral meaning beyond the schema.

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

Purpose3/5

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

The description states a specific action (read opening hours and attributes) and resource (Google Business location), but it says 'for one Google Business location' while the tool name/list semantics suggest listing locations. This mismatch leaves the core purpose somewhat ambiguous and does not distinguish it from siblings like list_accounts or manage_google_business_location.

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?

It gives a useful prerequisite ('Stays off until location edits are switched on') and suggests passing account_id or location_id, but it does not say when to use this tool instead of alternatives such as list_accounts or manage_google_business_location, nor what to do when the feature is off.

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

list_google_business_mediaA
Read-onlyIdempotent
Inspect

List the photos and videos on a Google Business Profile gallery (the media shown on Maps and Search) for one location/account or every accessible GBP location. This is separate from media attached to a post. Returns each item's resource name, category, format, image URL, and date. Pages the gallery already fetched from Google: limit defaults to 50 (max 200) and offset skips that many items.

NameRequiredDescriptionDefault
limitNoItems per page. Default 50, max 200. This pages the gallery already fetched; it does not ask Google for a smaller page.
offsetNoItems to skip. Use the offset the previous page gives.
account_idNoGoogle Business social account ID from list_accounts.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
workspace_idNoFilter to a workspace ID from whoami.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world behavior. The description adds useful context about return fields and pagination behavior over an already-fetched gallery, without contradicting 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?

Three dense sentences, front-loaded with purpose, then scope and pagination. Every sentence contributes useful information with no filler.

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?

No output schema exists, but the description lists the returned fields and explains pagination and scope. It is nearly complete for a read-only listing tool, though it could mention permission requirements or error behavior.

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. The description still adds meaning by clarifying that omitting location/account scope lists every accessible GBP location and by summarizing pagination defaults.

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?

States a specific verb and resource: listing photos and videos in a Google Business Profile gallery. It also distinguishes this gallery media from media attached to a post, though it does not explicitly differentiate itself from the manage_google_business_media sibling.

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?

Explains that it can target one location/account or every accessible GBP location, and notes that this is separate from post media. It lacks explicit when-not guidance or direct alternatives for the management sibling.

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

list_google_business_reviewsA
Read-onlyIdempotent
Inspect

Google Business Profile reviews. view=reviews (default): reviews for one location/account or every accessible location, paging through everything Google has (not just the first 50) with the full untruncated review text, its date, and each location's total review count; filter by rating or unanswered, page with limit/offset. Each review has review_name for manage_google_business_review reply/delete_reply. view=review_link (account_id or location_id): the direct public Google review link plus the Google Place ID (ChIJ...); that Place ID is output only and must NOT be passed back as location_id.

NameRequiredDescriptionDefault
viewNoreviews (default) or review_link.reviews
limitNoreviews: maximum reviews to return in this call. Every returned review is listed in full.
offsetNoreviews: skip this many reviews before returning results. Use with limit to page through a location with more reviews than one call returns.
ratingNoreviews only.
account_idNoGoogle Business social account ID from list_accounts.
unansweredNoreviews only.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
workspace_idNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world and non-destructive behavior, so the bar is lower. The description still adds real context: it pages through all reviews rather than the first 50, returns full untruncated text plus dates and per-location totals, and flags the Place ID as output-only. It stops short of describing permission requirements or rate 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?

Two dense sentences, front-loaded with the resource and the default view, then the alternate view and its output-only caveat. Every clause carries information an agent needs, with no 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?

Given eight parameters, two views, no output schema and read-only annotations, the description covers the return contents, paging strategy, filtering, the review_name handoff and the Place ID trap. An agent has what it needs to call this correctly without guessing.

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?

With 88% schema coverage the schema already documents most parameters, but the description adds useful semantics: rating and unanswered are filters on the reviews view, limit/offset page through large result sets, and review_name is the handle for the reply/delete tool. That goes beyond restating 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?

The description names a specific resource (Google Business Profile reviews) and clearly splits it into two behaviors, view=reviews and view=review_link, so an agent can tell them apart immediately. It also names the sibling manage_google_business_review as the mutation path.

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

Usage Guidelines5/5

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

It gives explicit routing rules: default view=reviews for listing with filtering and paging, view=review_link when an account_id or location_id is supplied to get the public review link and Place ID. It also states the exclusion that the ChIJ Place ID must NOT be fed back as location_id, and points reply/delete to manage_google_business_review.

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

list_google_business_service_areasA
Read-onlyIdempotent
Inspect

Read Google Business service areas (the towns and postcodes a location covers, up to 20). view=areas (default): the current business type, country, and place list for one location. view=places (q required): search for a town or postcode to add. Place IDs from view=places are regions, not the review-link Place ID. Town search needs a maps key on the server; if it is missing, add a place with its Place ID and name on the update instead.

NameRequiredDescriptionDefault
qNoplaces: town or postcode to search for.
viewNoareas (default) or places (search).
account_idNoGoogle Business social account ID from list_accounts. Required for view=areas.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
region_codeNoplaces: optional two-letter country code, for example GB.
workspace_idNoFilter to a workspace ID from whoami.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: the 20-item cap, the warning that place IDs from view=places are regions and not the review-link Place ID, and the server-side maps-key dependency that can disable town search. These are exactly the failure modes an agent would otherwise hit blind.

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 resource and the default view before any caveats, and every clause carries information. The final maps-key sentence is terse to the point of being cryptic, but nothing is padded or repeated.

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 still tells the agent what each view returns ('the current business type, country, and place list for one location') and covers the search dependency. Nothing needed to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: q is required for view=places (not stated in the schema), and it reinforces the account_id vs location_id preference and the Place ID confusion. Minor uplift only, since the schema descriptions carry most of the detail.

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

Purpose5/5

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

Opens with a specific verb+resource ('Read Google Business service areas') and immediately defines scope ('the towns and postcodes a location covers, up to 20'). The two-view structure (areas vs places) makes the read-only counterpart to manage_google_business_service_area unmistakable.

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?

Explicitly states the default view, that q is required for view=places, and gives a fallback path ('add a place with its Place ID and name on the update instead') when no maps key is configured. It never names the sibling manage_google_business_service_area directly, so the write-vs-read routing is implied rather than stated.

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

list_jobsA
Read-onlyIdempotent
Inspect

AI generation jobs. type=image: one image job by job_id, or recent image jobs when job_id is omitted (filter by status, limit); poll it after generate_image for the finished urls. type=video: one video job by job_id, or recent video jobs (status includes dismissed, limit); poll it after generate_video for the finished video_url.

NameRequiredDescriptionDefault
typeYesimage or video.
limitNo
job_idNoOne job. Leave out to list recent jobs.
statusNoFilter a job list. dismissed is video only.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds the useful detail that the tool returns finished urls/video_url after polling, but says nothing about pagination, ordering, or behavior of dismissed jobs beyond what the schema already states. Adequate but not rich.

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?

Two parallel sentences, one per type, with the job_id/omission behavior front-loaded in each. No filler, though the packing of parameters into the sentences makes it slightly dense to parse.

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 usefully hints at the return payload (urls, video_url) and covers both modes of a 4-parameter tool. The main gap is absence of any note on result ordering or paging, but for a read-only list tool this is close to complete.

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 75%, so most parameters are already documented. The description largely restates schema content (job_id omission lists recent, status/limit filters) and the video-only nature of dismissed is already in the schema. It adds some mode-framing but little genuine semantic detail beyond the structured fields.

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 resource (AI generation jobs) and a specific verb behavior (list one by job_id or list recent), and splits the domain cleanly into type=image vs type=video. An agent can tell what it does at a glance. It stops short of 5 because the resource is a dense compound sentence rather than a crisp standalone purpose statement.

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 explicitly says to poll this after generate_image and generate_video to retrieve the finished urls/video_url, which routes the agent from the sibling generation tools to this one. It gives no explicit 'when-not' or alternative for job retrieval, but the workflow context is concrete rather than implied.

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

list_mediaA
Read-onlyIdempotent
Inspect

List the newest media assets for the authenticated user. After create_media_drop, pass drop_session_id to see files uploaded on /drop/. Each file includes its filename and the time it was added. Use public_url with validate_post / create_post. A drop listing returns up to 20 files per page by default so a full drop fits one page. The output says whether every matching file is shown; page with offset (offset + limit up to 1000) when it is not.

NameRequiredDescriptionDefault
limitNo
offsetNoHow many assets to skip. Use the offset the previous page gives to get the next page.
drop_session_idNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, while the description adds useful context about ordering, returned fields, drop page defaults, output completeness, and pagination. There is minor ambiguity around page/limit values, but no annotation contradiction.

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 purpose and packed with relevant guidance, with no filler sentences. Some dense parenthetical pagination detail slightly reduces immediate clarity, but each sentence mostly earns its place.

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 still covers key return fields (filename and time added), pagination behavior, and the completeness indicator. It could be more complete about limit constraints and asset identifiers, but it is adequate for a three-parameter list tool.

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 only 33%, with offset alone documented in the schema; the description usefully explains drop_session_id and offset pagination, plus references public_url as an output field. Limit semantics remain vague and somewhat in tension with the schema: the schema has default 10 and maximum 50, while the description mentions up to 20 per drop page and 'offset + limit up to 1000' without reconciling these values.

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 states a specific verb and resource: list the newest media assets for the authenticated user, with drop-specific usage via drop_session_id. It does not explicitly contrast with similar siblings such as list_posts or list_google_business_media, so sibling differentiation is incomplete.

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 conditions: after create_media_drop, pass drop_session_id; use public_url with validate_post / create_post; page with offset when the output says not all matching files are shown. It lacks explicit when-not guidance or a direct named alternative listing tool.

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

list_oauth_clientsA
Read-onlyIdempotent
Inspect

List self-serve OAuth developer clients owned by the user. These are public PKCE clients for third-party app integrations.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description usefully adds that these are public PKCE clients for third-party integrations, but says nothing about pagination, ordering, or return shape.

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 tight sentences with the resource scope front-loaded and a clarifying clause about client type; no filler.

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 zero-parameter read-only list with no output schema, the description is nearly sufficient; it could mention the return contents or ordering, but nothing critical to invoking it 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?

There are zero parameters and schema coverage is 100%, so the baseline is 4; the description adds no parameter detail because none is needed.

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?

States a specific verb (List) and a well-scoped resource (self-serve OAuth developer clients owned by the user). It clarifies the resource over the bare name, but does not explicitly distinguish itself from the sibling manage_oauth_client.

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 by the scoping phrase 'owned by the user' and 'self-serve', but there is no explicit when-to-use statement, no exclusions, and no pointer to manage_oauth_client for mutations.

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

list_platformsA
Read-onlyIdempotent
Inspect

Platforms, settings schemas, and connection links. view=platforms (default): every posterly integration with posting capabilities, content and media limits, settings schemas, helper tools, and analytics support. view=schema: the settings schema for one connected account_id (preferred: returns account context and connection-specific capabilities, needed before Instagram native tags/collaborators) or one platform; account_id wins if both are given. view=connect_link: dashboard connection links and readiness for every target, or one target (instagram, meta, linkedin_page, twitter, telegram, reddit, wordpress, ...); credential platforms show the credential_fields that connect_account needs. For a guided flow with pollable status, use create_connect_session.

NameRequiredDescriptionDefault
viewNoplatforms (default), schema, or connect_link.platforms
targetNoview=connect_link: optional connection target such as instagram, meta, linkedin_page, twitter, telegram, reddit, or wordpress.
platformNoview=schema: platform ID. Aliases x, gmb, and instagram-standalone are also accepted by the API.
account_idNoview=schema: connected social account ID from list_accounts. Preferred because it returns account context.
workspace_idNoview=connect_link: filter connected account counts to a workspace.
include_plannedNoInclude planned integration possibilities such as reddit, medium, skool, whop.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly=true, idempotent=true, destructive=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: parameter precedence when account_id and platform are both supplied, that credential platforms return credential_fields consumed by connect_account, and which view returns account-specific capabilities. It does not discuss response size, pagination, or auth requirements.

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?

Dense but front-loaded by view, and each clause carries usage or return information rather than filler. The heavy use of semicolons and stacked parentheticals makes it slightly hard to scan, and the opening noun-phrase fragment is not a clean lead sentence.

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 describing returns, and it does so per view (platform capabilities and limits, settings schema for one account, connection links with readiness and credential_fields). It never states the general response shape or how large the platforms view is, leaving a minor gap for a 6-param, 0-required discovery tool.

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 cross-parameter meaning the schema cannot: which parameters apply to which view, the account_id-vs-platform precedence rule, and the reason account_id is preferred. The include_planned and target examples largely restate the schema enum, so not every addition is net-new.

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 enumerates the three distinct resources the tool surfaces (platforms, settings schemas, connection links) and ties each to a view value, so an agent understands this is a multi-view introspection tool rather than a simple list. The terse opener 'Platforms, settings schemas, and connection links.' is a fragment that doesn't name the verb, so the tool's scope has to be inferred from the view breakdown that follows.

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

Usage Guidelines5/5

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

Explicit when-to-use for each view, including the preference for account_id over platform ('account_id wins if both are given') and the prerequisite ('needed before Instagram native tags/collaborators'). It names the alternative sibling create_connect_session with the exact condition that selects it ('guided flow with pollable status'), which is exemplary routing guidance.

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

list_postsA
Read-onlyIdempotent
Inspect

Posts in your workspaces, teammates' too, per your role there (brand-locked seats only see their assigned brands). If workspace_id is omitted, this searches every workspace you belong to. view=list (default): posts filtered by status, platform, account_id, workspace_id, brand_id, group_id, release_id, approval_status, approval_waiting_on, and a scheduled date range: scheduled_from (inclusive) and scheduled_to (a plain date includes that whole day), read in timezone (IANA, default UTC; also the zone times are shown in). Returns limit posts (default 20, max 200) starting at offset; with a date range the order defaults to oldest first (order=asc|desc). The output always says whether every matching post was shown. If it says more are available, call again with the offset it gives and keep paging until all are shown before drawing any conclusion about totals, gaps, or how busy a client is. view=counts (scheduled_from and scheduled_to required, up to 366 days): exact totals per day, status, account, and brand for the same filters (limit, offset, and order are ignored); use it for "how many" or "is this month full" questions. Each post includes approval.pending_client_approval.

NameRequiredDescriptionDefault
viewNolist (default): the posts. counts: totals (needs scheduled_from and scheduled_to).list
limitNoPosts per page (default 20, max 200). Ignored by view=counts.
orderNoasc (oldest first) or desc (newest first). Default asc with a date range, otherwise desc. Ignored by view=counts.
offsetNoMatching posts to skip; use the offset the previous page gives. Ignored by view=counts.
statusNoStored post status, or missed. paused_due_to_token is a reconnect pause and paused_due_to_billing is a billing pause. missed: failed, still scheduled after the scheduled time, or held by a publishing pause past it.
brand_idNoFilter to posts assigned to a specific brand/client (the id from list_brands).
group_idNoCaller group id. Matches api_group_id, group_id, post_group_id.
platformNo
timezoneNoIANA time zone such as Europe/London for reading plain dates and showing times. Default UTC.
account_idNo
release_idNoCaller release id. Matches release_id only.
scheduled_toNoEnd of the scheduled range: a plain date (2026-10-31) includes that whole day; an ISO date-time is exclusive.
workspace_idNo
scheduled_fromNoStart of the scheduled range, inclusive: a date (2026-10-01) or an ISO date-time. Plain dates and times without an offset are read in timezone.
approval_statusNoFilter by client review approval status. pending_client means the post is waiting on the client.
approval_waiting_onNoclient: approval_status pending_client. team: changes_requested or rejected. Conflicts with a non-overlapping approval_status.

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses pagination semantics, that the response always reports whether the full result set was shown, timezone handling for reads and display, date-boundary inclusivity/exclusivity, the 366-day cap on counts, and that limit/offset/order are ignored in counts. That is exactly the kind of behavioral context 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.

Conciseness4/5

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

It is a single dense paragraph that front-loads scope and then the view decision, and nearly every clause carries operational meaning. Minor waste comes from restating schema facts verbatim (limit default 20 / max 200, order='asc|desc'), which makes it read as a run-on.

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 16-parameter read tool with no output schema, it covers pagination, completeness signals, timezone behavior, and even one return field (approval.pending_client_approval). The main residual gap is that the shape of each returned post is not described, which matters given the absent output schema.

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

Parameters4/5

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

Schema coverage is already 81%, so the baseline is 3; the description adds real meaning on top by explaining that counts requires scheduled_from/scheduled_to (with a 366-day ceiling) and how plain dates are read versus ISO date-times. Some parameters (platform, account_id, workspace_id) get no semantic treatment in either place.

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 the resource (posts), the scope (workspaces you belong to, teammates' posts, brand-locked seat visibility), and the two operating modes (list vs counts). It is specific enough that an agent can distinguish it from get_post or list_analytics without reading the schema, though it never explicitly names those siblings.

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 an explicit decision rule between the two views ('use it for "how many" or "is this month full" questions') and instructs the agent to keep paging until the output says everything was shown before drawing conclusions about totals. It stops short of stating when to prefer a different tool (get_post, list_analytics) for adjacent tasks.

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

list_post_suggestionsA
Read-onlyIdempotent
Inspect

List proactive post suggestions: evidence-based weekly drafts posterly writes in each account's learned voice, each with a rationale tying it back to what has performed well. The caption, rationale, and account id are returned in full. Filter by account_id and status (pending, scheduled, dismissed; default pending). The output says whether every matching suggestion is shown; page with offset until it does. Read-only; requires a Pro plan or higher. Use dismiss_suggestion to hide one, or pass save_as_draft true on that tool to keep it as an unpublished draft.

NameRequiredDescriptionDefault
limitNo
offsetNoHow many suggestions to skip. Use the offset the previous page gives to get the next page.
statusNopending
account_idNoFilter to one social account ID (from list_accounts).

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotent/destructive annotations, it discloses plan requirements (Pro or higher), returned fields (caption, rationale, account id), default status filtering, and pagination completeness behavior. This adds meaningful operational context an agent needs before calling it.

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 front-loaded with the core purpose and stays tightly focused on what suggestions are, how to filter/page them, plan requirements, and related actions. Every sentence contributes useful selection or invocation 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 still covers return fields and pagination completeness. It also covers filter defaults, plan requirements, and related sibling actions, making it complete enough for correct invocation.

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 description explains filtering by account_id and status and mentions paging with offset, but schema description coverage is only 50% and the limit parameter is not described in the schema or the tool description. It adds some meaning but does not fully compensate for the coverage gap.

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: list proactive post suggestions, defined as evidence-based weekly drafts written in each account's learned voice with rationales. It distinguishes suggestions from actual posts and from sibling actions like dismiss_suggestion.

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: default status is pending, filtering is by account_id and status, paging uses offset, and the tool requires a Pro plan or higher. It names dismiss_suggestion and save_as_draft as alternatives for handling a suggestion, but does not explicitly state when not to use this tool.

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

list_publishing_pausesA
Read-onlyIdempotent
Inspect

Is publishing paused? Shows whether the workspace is paused, which brands are paused (only brands you can see), and whether you may pause, resume, or publish missed posts. Read-only. Change it with manage_publishing_pause.

NameRequiredDescriptionDefault
workspace_idNoWorkspace ID from whoami. Defaults to your default workspace.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so 'Read-only' is largely redundant. However, the description adds real context beyond annotations: visibility scoping ('only brands you can see') and the fact that the response includes caller permissions ('whether you may pause, resume, or publish missed posts'). It does not mention pagination or empty-state behavior, keeping it short of a 5.

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?

Leads with the question the tool answers, then lists the payload, then the write alternative. Two short sentences plus a routing clause, no filler, every phrase 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 compensates by enumerating the returned information (pause status, visible brands, permitted actions), which is exactly what an agent needs to decide whether this call answers its question. Read-only annotations cover the safety profile, so nothing material 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?

Single optional parameter with 100% schema description coverage, so the schema already explains workspace_id and its default. The description adds nothing about the parameter (e.g., how to obtain the ID or scoping effects), which is exactly the baseline-3 case when structured fields carry the load.

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+resource ('list publishing pauses' framed as 'Is publishing paused?') and enumerates exactly what it returns: workspace pause state, per-brand pause state, and the caller's pause/resume/publish-missed-posts permissions. It explicitly distinguishes itself from the mutating sibling manage_publishing_pause, so an agent can pick correctly without opening either schema.

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

Usage Guidelines5/5

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

Names the alternative tool and the condition that selects it: 'Read-only. Change it with manage_publishing_pause.' This gives a clean read-vs-write routing rule, including the implicit when-not-to-use (don't call this to change state).

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

list_webhooksA
Read-onlyIdempotent
Inspect

List API webhook subscriptions, their event filters, active state, and most recent delivery status. view=deliveries (webhook_id) reads recent delivery attempts for one webhook. That history stays off until it is switched on, and it does not include the signing secret or the request body.

NameRequiredDescriptionDefault
viewNowebhooks (default) or deliveries.
limitNo
offsetNo
webhook_idNodeliveries: webhook ID from view=webhooks.
workspace_idNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description still adds meaningful disclosure: delivery history is opt-in and may be absent, and the payload deliberately omits the signing secret and request body. Pagination behavior is not described, keeping it from a 5.

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?

Three compact sentences, front-loaded with the primary list behavior before the secondary view. Every sentence contributes, though 'stays off until it is switched on' is slightly vague about who enables it and pronoun references to 'that history' and 'it' require mild inference.

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 list tool with no output schema, the description compensates by naming the returned fields and the deliberate data omissions. Remaining gaps are pagination semantics and workspace scoping, which the schema exposes only partially and the description does not address.

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 only 40%, so the description must carry weight. It explains the critical enum parameter view and the webhook_id dependency ('webhook ID from view=webhooks') well, but says nothing about limit, offset, or workspace_id, leaving three of five parameters undocumented in both schema and description.

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 opens with a specific verb and resource ('List API webhook subscriptions') and enumerates what is returned (event filters, active state, delivery status), then explains the secondary view=deliveries mode. It is clear what the tool does, but it never explicitly contrasts itself with the sibling manage_webhook or create_webhook, so sibling differentiation is only implied by the verb.

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?

It gives useful in-tool guidance: view=deliveries requires a webhook_id taken from view=webhooks, and delivery history is disabled by default so results may be empty. However, it offers no when-not-to-use guidance and does not route the agent to manage_webhook or create_webhook for related operations, leaving alternative selection to inference.

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

list_workspace_membersA
Read-onlyIdempotent
Inspect

List the people in a workspace: members (with role, status, brand access and API access) and pending invites, plus seats in use. API access says whether a teammate can use this workspace's API plan from their own keys and AI apps; owners and admins also see each member's key count, connected AI apps and last use. Works with an API key that has the Manage team permission (any workspace member can list; brand-limited teammates only see brand ids they can access), or from ChatGPT, Claude and other OAuth connections when the user is an owner or admin of the workspace.

NameRequiredDescriptionDefault
workspace_idYesWorkspace ID (from whoami).

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial operational context: what is returned, what API access means, who sees key counts and AI app connections, and the brand-limited visibility rule. This goes well beyond the structured safety hints.

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 front-loaded with the purpose and returned data, then moves to auth requirements. Every sentence carries distinct information: return contents, API access meaning, permission scoping, and OAuth conditions, with no redundant 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?

There is no output schema, so the description correctly explains the return shape (members, invites, seats, per-member details). Combined with annotations covering safety and idempotency, and the description covering auth and visibility rules, an agent has everything needed to call the tool correctly.

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% and there is only one parameter (workspace_id), which the schema already describes as coming from whoami. The description adds no additional parameter syntax or formatting detail, so the baseline 3 is appropriate.

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: 'List the people in a workspace', then enumerates the exact members and invites returned. It distinguishes itself from the sibling manage_workspace_member by being purely a read operation with no mutation language.

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 auth and context prerequisites: 'Works with an API key that has the Manage team permission' or OAuth when the user is an owner or admin. It does not explicitly name when to choose this over alternatives, but the read-only framing and sibling names make the use case implicit.

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

manage_brandA
Destructive
Inspect

Create, update, or archive a brand. action=create (admin only): name, and the workspace_id from whoami when the key is not already scoped to one workspace. Optional timezone and website_url. Pass confirm=true only after the user agrees. action=update (admin only): brand_id plus name, timezone, or website_url. Pass confirm=true only after the user agrees. action=archive (admin only): preview then confirm. Call without confirm to see the brand and what archiving does, show that to the user, then call again with confirm=true and the preview_id. Archiving removes the brand from the active list. Connected accounts stay connected, and its scheduled posts are not cancelled: they still publish. The preview counts both.

NameRequiredDescriptionDefault
nameNocreate: required. update: the new name.
actionYescreate, update, or archive.
confirmNocreate and update: true only after the user agrees. archive: true only with the preview_id from a preview call.
brand_idNoupdate and archive: the brand ID from list_brands.
timezoneNocreate or update: an IANA timezone such as Europe/London.
preview_idNoarchive: the preview_id from the preview call.
website_urlNocreate or update: an http or https website. Pass an empty string on update to clear it.
workspace_idNocreate: workspace ID from whoami, when the key is not already scoped.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations (destructiveHint=true) by disclosing the actual archive consequences: the brand leaves the active list, connected accounts stay connected, and scheduled posts still publish. It also explains the two-call preview/confirm handshake and what the preview counts, which is the kind of side-effect detail an agent cannot get from structured fields.

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?

Organized action-by-action and front-loaded with the verb set. The phrase "Pass confirm=true only after the user agrees" is repeated verbatim for create and update, and the archive paragraph could be tightened, but no sentence is 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?

For a three-action, eight-parameter mutation tool with no output schema, the description covers prerequisites, per-action field requirements, the confirm workflow, and the post-archive state. An agent has everything needed to call it correctly and to explain results to a user.

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 the description still maps parameters to the action that consumes them (create needs name and workspace_id; update needs brand_id plus the editable fields; archive needs preview_id). This mostly mirrors the schema's conditional notes rather than adding new syntax or format detail, so it is a slight enhancement rather than a full complement.

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 set and resource: "Create, update, or archive a brand." Each of the three actions is then expanded with its own required fields, so an agent can distinguish the mutation tool from list_brands 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 Guidelines5/5

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

Explicitly gates each action: "admin only" for all three, action=archive must be previewed then confirmed, and workspace_id should come from whoami "when the key is not already scoped." The confirm rule is stated per action, leaving no inference needed about sequencing.

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

manage_commentA
Destructive
Inspect

Act on an inbox comment (Pro plan or higher plus posts:write). action=reply (comment_id, content): reply to an Instagram, Facebook Page, Threads, or LinkedIn Page comment; type private is Instagram only, the others are public replies only. action=update (comment_id, is_hidden and/or is_read): hide or unhide it on the platform, or mark it read or unread; reversible, no confirm needed. action=delete (comment_id): delete an Instagram or Facebook Page comment, irreversible and admin only; Threads replies cannot be deleted, hide them instead. reply and delete use preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.

NameRequiredDescriptionDefault
typeNoreply: public (default) or private. Private is Instagram only.
actionYesreply, update, or delete.
confirmNoreply and delete: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
contentNoreply: reply text to post.
is_readNoupdate: mark the comment read or unread in posterly.
is_hiddenNoupdate: hide or unhide the comment on Instagram, Facebook, or Threads.
comment_idYesComment ID from list_comments.
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
workspace_idNoOmit to search all your workspaces, or pass an ID from whoami.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, idempotentHint=false): it distinguishes which actions are reversible ('update ... reversible, no confirm needed') from the irreversible one, flags delete as admin-only, and describes the preview_id handshake that gates reply and delete. This is exactly the behavioral context an agent needs for a mutating 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?

One dense paragraph, but it is front-loaded with the auth requirement and purpose before the three actions, and every clause carries meaning (platform limits, reversibility, preview flow). It reads as a run-on sentence, which costs it a point.

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 9-parameter, three-action tool with no output schema, the description covers permissions, platform exclusions, reversibility, and the preview/confirm return value (preview_id). It does not describe the success response for update or reply, leaving a minor gap.

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 already 100%, so the baseline is 3, but the description adds real value by grouping parameters by action (which fields apply to reply vs update vs delete) and by treating type=private as Instagram-only. It stops short of adding syntax or format detail beyond what the schema states.

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

Purpose5/5

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

Opens with a specific verb+resource ('Act on an inbox comment') and then enumerates the three actions with their platform scope. It clearly distinguishes itself from the sibling list_comments, which is the read counterpart referenced by comment_id.

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

Usage Guidelines5/5

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

States per-action when-to-use, plan/permission prerequisites (Pro plan or higher plus posts:write, admin only for delete), and an explicit alternative when an action is unavailable ('Threads replies cannot be deleted, hide them instead'). It also requires the preview-then-confirm sequence before irreversible operations.

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

manage_conversationAInspect

Act on the social inbox (Pro plan or higher plus posts:write). action=send (conversation_id, content): send a DM reply in an Instagram or Facebook Page conversation, honoring the 24-hour messaging window (Threads has no DMs); preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id. action=sync (account_id): pull the latest Instagram, Facebook Page, Threads, or LinkedIn inbox data for one account; 30-second cooldown (60 for LinkedIn); Threads and LinkedIn sync comments only.

NameRequiredDescriptionDefault
actionYessend or sync.
confirmNosend: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
contentNosend: message text to send.
sync_typeNosync: what to sync. Defaults to all. Threads and LinkedIn are comments-only.
account_idNosync: social account ID from list_accounts.
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
workspace_idNoOmit to search all your workspaces, or pass an ID from whoami.
conversation_idNosend: conversation ID from list_conversations.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true; the description goes well beyond that by disclosing the 24-hour messaging window, that Threads has no DMs, the two-step preview/confirm safety flow with preview_id, and the 30s/60s sync cooldown. These are material behavioral traits an agent needs before calling, and none of them contradict the annotations.

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?

Dense but well-organized: it front-loads the tool's purpose and access requirement, then groups details by action. Every clause carries information, though the single long block 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.

Completeness5/5

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

For a multi-action mutation tool with no output schema, the description covers everything needed: which actions exist, their required inputs, the preview/confirm return-handshake (preview_id), platform constraints, rate limits, and account prerequisites. Nothing essential is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description layers on meaning the schema does not: it ties confirm to the preview_id flow, explains the cooldown semantics of sync, notes sync_type defaults and the comments-only limitation of Threads/LinkedIn, and points to provenance tools for account_id and conversation_id. This meaningfully exceeds the schema's terse field hints.

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 specific verb+resource ("Act on the social inbox") and enumerates the two concrete actions with their targets (Instagram/Facebook Page DM replies, pull inbox data for four platforms). It distinguishes itself from siblings by naming the related tools (list_conversations, list_accounts) that supply its inputs, so an agent can place it correctly in the toolset.

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 strong conditional guidance: plan requirement (Pro or higher plus posts:write), the preview-then-confirm protocol for send, the 24-hour window, and per-platform cooldowns. It stops short of explicitly stating when NOT to use it versus alternatives such as list_conversations or manage_comment, so it is clear context without full exclusion guidance.

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

manage_extra_accountA
DestructiveIdempotent
Inspect

Buy, raise, lower, or remove Agency extra-account slots. MONEY: raising charges the saved card. Owner only; billing:write. action=set (extra_accounts = desired TOTAL, 0 removes all; add 20+ at a time). Call without confirm for the quote and preview_id; after the user agrees, call with confirm=true, that preview_id and the expected_ fields from the quote. 3D Secure or a decline returns a payment link; nothing is added.

NameRequiredDescriptionDefault
actionYes
confirmNo
preview_idNo
workspace_idNo
extra_accountsYes
expected_intervalNo
expected_current_extra_accountsNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructive/openWorld/non-readOnly, and the description adds substantial value beyond them: money is charged to the saved card on raises, batch minimum of 20, the confirm/preview_id handshake, and the 3D Secure/decline path that returns a payment link with nothing added. This is exactly the extra behavioral context the annotations cannot convey.

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?

Dense but front-loaded: the core action is stated first, then money implications, then permissions, then the confirmation workflow. Every clause carries distinct, actionable information with no 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?

With no output schema, the description steps in to explain what the quote returns (preview_id and expected_ fields) and what a decline/3DS attempt yields (a payment link, nothing added). For a money-moving mutation tool, everything an agent needs to call it correctly is present.

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 0%, so the description must carry parameter meaning, and it mostly does: action=set, extra_accounts as the desired TOTAL (0 removes all, add 20+ at a time), confirm, preview_id, and the expected_ fields from the quote. workspace_id and expected_interval are not explicitly explained, leaving a small gap.

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?

Names specific verbs (Buy, raise, lower, remove) and the exact resource (Agency extra-account slots), including the action=set semantics. No sibling tool operates on extra-account slots, so the agent can distinguish it immediately.

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

Usage Guidelines5/5

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

Gives explicit prerequisites (Owner only; billing:write scope) and a full two-step workflow: call without confirm for a quote/preview_id, then call again with confirm=true after user agreement. This is precise when-and-how guidance rather than implied context.

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

manage_google_business_locationA
DestructiveIdempotent
Inspect

Change regular opening hours or attributes on a Google Business location. action=update_hours sends regular_hours.periods with open_day, close_day, open_time, and close_time as HH:MM. action=update_attributes sends attributes with a name like attributes/has_wifi and value_type BOOL, URL, or ENUM. Both use preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id. Stays off until location edits are switched on. A confirm while it is off changes nothing and does not call Google. This uses the same business management connection as posting. It does not change the business name, address, phone, or website.

NameRequiredDescriptionDefault
actionYesupdate_hours or update_attributes.
confirmNoLeave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
account_idNoGoogle Business account ID from list_accounts.
attributesNoupdate_attributes: [{ name, value_type, values }]. value_type is BOOL, URL, or ENUM. URL values must be https.
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
workspace_idNoFilter to a workspace ID from whoami.
regular_hoursNoupdate_hours: { periods: [{ open_day, close_day, open_time, close_time }] }. Days are MONDAY-SUNDAY. Times are HH:MM.

TDQS

A4.4/5.0
Behavior5/5

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

Despite annotations already flagging destructive=true and openWorldHint=true, the description adds genuinely new behavior: the two-call preview/confirm protocol with preview_id, and critically that while location edits are off a confirm "changes nothing and does not call Google." It also discloses the shared business-management connection, which agents can't infer 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.

Conciseness4/5

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

Purpose and the two actions are front-loaded, then the safety-critical gating rule. It runs long at nine sentences and repeats schema detail (HH:MM, attributes/has_wifi, day names) that the schema already carries, but every sentence is informative rather than 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?

For a destructive, 8-parameter tool with nested objects and no output schema, the description covers the mutation protocol, the blocking prerequisite, the external API call behavior, and explicit scope exclusions. An agent has what it needs to avoid a silent no-op or an unapproved write.

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 per-parameter meanings (action enum, preview_id, regular_hours shape, HH:MM and attribute naming) are already fully documented in the schema, and the description largely restates them. It does usefully bind each parameter set to its action, but that cross-reference is already implied by the schema's own per-param 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?

Opens with a specific verb+resource ("Change regular opening hours or attributes on a Google Business location") and immediately enumerates the two action modes. It also carves out scope by stating it does not touch name, address, phone, or website, which separates it from the other manage_google_business_* siblings.

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?

Clearly states when each action applies (action=update_hours vs action=update_attributes) and that both must go through preview-then-confirm. It also gives the prerequisite that location edits must be switched on, though it never names the alternative tool to use for the name/address/phone/website changes it excludes.

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

manage_google_business_mediaA
Destructive
Inspect

Change a Google Business Profile gallery (the photos and videos shown on Maps and Search). action=add (source_url, category): add a photo or video from a public https URL (upload it with upload_media first); COVER and PROFILE are single-slot and replace the existing one. action=delete (media_name from list_google_business_media): permanently remove an item from the public profile. Both use preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.

NameRequiredDescriptionDefault
actionYesadd or delete.
confirmNoLeave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
categoryNoadd: which gallery category to add the media to.
account_idNoGoogle Business social account ID from list_accounts.
media_nameNodelete: full media resource name from list_google_business_media (accounts/.../locations/.../media/...).
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
source_urlNoadd: public https URL of the photo or video (from upload_media). Photos must be JPG or PNG, 10 KB to 5 MB.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
media_formatNoadd: defaults to PHOTO. Use VIDEO for videos (Google caps profile videos at 30s / 75MB).
workspace_idNoFilter to a workspace ID from whoami.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and non-idempotency, and the description adds value beyond them: delete is 'permanently remove' from the public profile, COVER/PROFILE are single-slot (implicitly overwriting the existing image), and the preview/confirm gate must be shown to the user before committing. That is exactly the destructive/mutation context an agent needs.

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 resource then action=add / action=delete / shared-flow segments, and every sentence carries actionable content. It is dense and slightly packed, but there is no filler to cut.

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 10-parameter destructive mutation with no output schema, the description covers prerequisites, per-action requirements, overwrite semantics, and the confirm workflow. An agent has everything needed to call it correctly without further discovery.

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; the description nonetheless adds decision-relevant meaning by binding parameters to actions (source_url/category for add, media_name for delete) and clarifying the COVER/PROFILE single-slot behavior and preview_id reuse. It stops short of explaining every field, but meaningfully exceeds 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?

Names a specific resource (Google Business Profile gallery of photos/videos on Maps and Search) and two explicit operations (add, delete). It also points at the relevant siblings (upload_media, list_google_business_media), so an agent can distinguish it from list_google_business_media or upload_media without opening a schema.

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

Usage Guidelines5/5

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

Gives concrete when-to-use routing per action (add requires source_url+category sourced from upload_media; delete requires media_name from list_google_business_media), plus the mandatory two-step preview-then-confirm flow with the exact condition to set confirm=true. Nothing is left to inference.

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

manage_google_business_reviewA
Destructive
Inspect

Act on Google Business Profile reviews. action=suggest_reply (star_rating, optional review_text): short, brand-aware AI reply suggestions; uses the AI Caption Assist allowance and never posts. action=reply (review_name, comment): post or update the owner reply. action=delete_reply (review_name): delete the owner reply. reply and delete_reply use preview then confirm: call without confirm to get a preview and preview_id (it repeats the review name, location, and exact reply text; show the reviewer, rating, and review text alongside it), then call again with confirm=true and that preview_id.

NameRequiredDescriptionDefault
toneNoprofessional
countNo
actionYessuggest_reply, reply, or delete_reply.
commentNoreply: the exact owner reply text.
confirmNoreply and delete_reply: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
account_idNoGoogle Business social account ID from list_accounts (optional brand voice context for suggest_reply).
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
review_nameNoreply and delete_reply: review_name from list_google_business_reviews.
review_textNosuggest_reply: the review text. Leave empty for rating-only reviews.
star_ratingNosuggest_reply: review rating from 1 to 5.
workspace_idNo
business_nameNo
reviewer_nameNo

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond annotations by disclosing the two-step preview/confirm safety gate, that the preview echoes the exact reply text, location and review name for verification, that suggest_reply consumes the AI Caption Assist allowance and does not post, and that action=reply may update an existing owner reply. These are the details an agent needs to avoid an unreviewed destructive write.

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 resource, then ordered action by action, with the cross-cutting preview rule last. Dense but every clause carries operational meaning; the nested parenthetical in the final sentence is slightly hard to parse but not wasteful.

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 and 14 parameters, the description supplies the return shape that matters most (preview_id plus echoed review metadata for the confirmation step). It is silent on what suggest_reply returns (presumably `count` suggestions in `tone`) and on the success response for reply/delete_reply, which leaves a modest gap.

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 64% and the description compensates by tying star_rating/review_text to suggest_reply, review_name/comment to reply, and confirm/preview_id to the two-phase flow. It does not mention tone or count (which govern suggestion output and lack schema descriptions), nor account_id/location_id/workspace_id scoping, leaving some of the 14 parameters unaddressed.

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+resource (act on Google Business Profile reviews) and immediately decomposes it into three named actions with what each does. An agent can distinguish this from the read-only sibling list_google_business_reviews 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?

Each action is scoped with the parameters it needs, and the preview-then-confirm protocol is spelled out as a hard procedural rule for reply and delete_reply. It also says suggest_reply never posts, implicitly directing posting intent to action=reply. Lacks an explicit statement that review_name must come from a prior list_google_business_reviews call, though the schema descriptions carry that.

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

manage_google_business_service_areaA
Idempotent
Inspect

Replace the service areas on a Google Business location. action=update sends the full list (1 to 20 places, each with place_id and place_name from list_google_business_service_areas view=places or a known region Place ID). business_type is CUSTOMER_AND_BUSINESS_LOCATION (customers can visit, and you also travel) or CUSTOMER_LOCATION_ONLY (you only travel to customers). CUSTOMER_LOCATION_ONLY needs region_code when Google has not set one, and clear_storefront_address=true when a street address is still on the listing. The country cannot be changed once set. Preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id. Saving the same list again is safe.

NameRequiredDescriptionDefault
actionYesupdate: replace the service area list.
placesNoThe full replacement list, 1 to 20 areas. Each item needs place_id and place_name.
confirmNoLeave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
account_idNoGoogle Business social account ID from list_accounts.
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
location_idNoGoogle Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from list_google_business_reviews view=review_link. Prefer account_id.
region_codeNoTwo-letter country code. Required for customer-only listings that do not already have one. Immutable once set.
workspace_idNo
business_typeNoCUSTOMER_LOCATION_ONLY travels to customers. CUSTOMER_AND_BUSINESS_LOCATION also has a storefront.
clear_storefront_addressNoSet true only when switching to customer-only. Google requires the street address to be removed from the listing in the same update; it is not kept, so adding it back means entering it again.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, but the description adds material behavior beyond them: the country is immutable once set, clearing the storefront address is not reversible without re-entry, and the two-call preview/confirm cycle is mandatory. It also explains the safety model ('saving the same list again is safe') in operational terms rather than just echoing the idempotency hint.

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 action is front-loaded in the first sentence, and the subsequent sentences each carry operational constraints (list size, business_type, region_code, storefront clearing, preview flow). It is dense and largely waste-free, though a couple of clauses restate schema-level details.

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 10-parameter mutation tool with no output schema, the description covers the mutation semantics, prerequisite data sources, immutability constraints, and the preview/confirm workflow, which is enough to call it correctly. It doesn't cover preview expiry or what the preview payload contains, a minor gap given no output schema exists.

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 90%, so the baseline is 3, but the description adds value the schema does not: the 1-to-20 places list must come from list_google_business_service_areas view=places or a known region Place ID, and it reinforces the consequences of region_code and clear_storefront_address. Much of the remaining text overlaps the schema, so it does not fully exceed the baseline.

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

Purpose5/5

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

The opening sentence states a precise verb and resource: replacing the service-area list on a Google Business location. It is immediately distinguishable from the sibling list_google_business_service_areas, which it explicitly names as the source of place IDs. An agent knows exactly what mutation this performs.

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 concrete conditions for parameters: business_type selection semantics, when region_code is required, and when clear_storefront_address must be set. It also spells out the preview-then-confirm protocol and points to list_google_business_service_areas for place IDs. It stops short of explicitly stating when not to use this tool versus manage_google_business_location, so it is clear context rather than full routing.

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

manage_oauth_clientA
Destructive
Inspect

Manage self-serve OAuth 2.1 + PKCE developer clients (public clients with no client secret; list them with list_oauth_clients). action=create: client_name, allowed_redirect_uris, and default_scopes; confirm=true only after the user confirms the name, redirect URIs, and scopes. action=update: client_id plus the changed fields; confirm=true after the user confirms the changes. action=delete: client_id; prevents new authorizations (existing access tokens stay revocable as API keys); preview then confirm: call without confirm to get a preview and preview_id, show it, then call again with confirm=true and that preview_id.

NameRequiredDescriptionDefault
actionYescreate, update, or delete.
confirmNocreate and update: true after explicit user confirmation. delete: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
homepageNo
client_idNoupdate and delete: the client_id from list_oauth_clients.
is_activeNo
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
client_nameNocreate (required) or update.
descriptionNo
default_scopesNocreate (required) or update.
allowed_redirect_urisNocreate (required) or update.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructive=true, non-idempotent, non-readOnly, but the description adds real context beyond them: delete blocks new authorizations while existing access tokens remain revocable as API keys, and the two-step preview_id confirmation sequence is spelled out. These are behaviors an agent could not derive from the annotations alone.

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 resource definition, then organized action-by-action, with the trickiest flow (delete preview) left for last. It is dense and runs long, but nearly every clause carries actionable constraint rather than restating the schema.

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 10-parameter mutation tool with no output schema and only hint-level annotations, the description covers the confirmation gating, the preview flow, and delete's downstream effect on authorizations. It leaves the role of incidental fields (homepage, is_active, description) and any expected return shape unaddressed, so a small gap remains.

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 70% and several params (homepage, is_active, description) have no schema descriptions, but the description compensates by binding the key params to their actions: client_name/allowed_redirect_uris/default_scopes for create, client_id plus changed fields for update, client_id for delete, and preview_id semantics for delete. It stops short of explaining homepage, is_active, or description, so it is not fully compensating.

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+resource ('Manage self-serve OAuth 2.1 + PKCE developer clients') and immediately scopes it (public clients, no client secret). It also names the sibling list_oauth_clients for the read path, so an agent can separate this mutating tool from the listing tool without opening either schema.

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

Usage Guidelines5/5

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

Gives per-action when-to-use rules: create requires client_name/allowed_redirect_uris/default_scopes with confirm only after user confirmation; update takes client_id plus changed fields; delete takes client_id and uses a preview-then-confirm flow. The user-confirmation prerequisites and the alternative (list_oauth_clients) are explicit rather than inferred.

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

manage_planBInspect

Plans and the paid-plan link. action=list: plans, prices and the charge today to start the paid plan. action=confirm_link: a single-use 30-minute link for the human to confirm the price; omit tier and interval to start the current plan. Never charges the card. A trial link needs billing:read. Changing a paid plan also needs billing:write.

NameRequiredDescriptionDefault
tierNo
actionYes
intervalNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations declare a non-readonly, non-destructive, non-idempotent, open-world operation, and the description adds genuinely useful context beyond that: "Never charges the card," the 30-minute single-use link lifetime, and the billing:read / billing:write permission requirements per action. That directly resolves the main fear an agent would have about a billing-adjacent tool, though it doesn't state what happens to a previously issued 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 text is dense and front-loaded, with each action clause carrying distinct information and the safety statement placed early. The opening noun fragment is slightly awkward, but 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 3-parameter mutation tool with no output schema, the description covers the action branches, safety guarantee, link lifetime, and per-action permissions, which is most of what an agent needs to invoke it safely. The remaining gap is parameter/action interaction, not core behavior.

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 0%, so the description must carry parameter meaning; it partially does by explaining that tier and interval are omitted to select the current plan for confirm_link. The enum values are self-describing, but the description says nothing about how tier/interval interact with action=list or whether supplying them with confirm_link changes the target plan, leaving a real gap.

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

Purpose3/5

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

The opening fragment "Plans and the paid-plan link" is a noun phrase, not a verb+resource statement, but the per-action clauses do specify outcomes: action=list returns plans, prices, and the charge today; action=confirm_link produces a single-use 30-minute link. What's missing is any differentiation from close siblings like get_subscription, upgrade_subscription, or downgrade_subscription, so an agent cannot tell from the text which tool owns plan changes.

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 action clauses imply when each branch applies, and "omit tier and interval to start the current plan" is a concrete usage rule for confirm_link. However, no guidance is given on when to prefer this over upgrade_subscription/downgrade_subscription, or whether list should be used before confirm_link, leaving the sibling-selection decision to inference.

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

manage_publishing_pauseA
Destructive
Inspect

Pause or resume publishing for a whole workspace or one brand (check it first with list_publishing_pauses). Only act when the user asks; never pause on your own initiative. action=pause (optional brand_id; leave it out for the whole workspace): holds every scheduled post in that scope and blocks Post now until an admin resumes. Call it first without confirm to get a preview (scope and how many scheduled posts it holds), show it to the user, and only after they agree call again with confirm=true. Publisher or higher; a seat limited to some brands can only pause those brands. action=resume (optional brand_id; admin or higher): future posts are scheduled again; posts whose time passed while paused stay paused and are listed as missed. Missed posts never publish on their own. action=publish_missed (post_ids from the resume, confirm=true after the user agrees; admin or higher): publishes those missed posts now.

NameRequiredDescriptionDefault
actionYespause, resume, or publish_missed.
confirmNopause: leave out to preview. pause and publish_missed: true only after the user agreed. resume: not needed.
brand_idNopause and resume: a brand ID from list_brands. Leave it out (never empty) for the whole workspace.
post_idsNopublish_missed: the missed post IDs a resume returned.
workspace_idNoWorkspace ID from whoami. Defaults to your default workspace.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true, idempotentHint=false, and openWorldHint=true; the description goes well beyond them by stating what is actually affected (holds every scheduled post in scope, blocks Post now), that a preview is returned before commitment, that resume requires admin while pause needs only Publisher, and that missed posts stay paused and never publish on their own.

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, front-loaded with purpose, then constraints, then per-action detail. Every sentence carries operational information, though the unbroken block is long enough that an agent must parse several sentences before reaching the action-specific rules.

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 destructive, non-idempotent, three-mode tool with no output schema, the description supplies the missing return information (preview shows scope and held-post count; resume returns missed post IDs) and the full permission and confirmation workflow, so nothing needed to call it safely is absent.

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 semantics the schema does not: confirm omitted yields a preview (pause) versus a required post-agreement confirmation (publish_missed) and is unneeded for resume, and post_ids must come from the resume output. Only minor gaps remain, such as the 500-item cap and workspace_id defaulting behavior, which the schema already carries.

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 pair and resource plus scope: 'Pause or resume publishing for a whole workspace or one brand'. It is immediately distinguishable from list_publishing_pauses (read-only inspection) and pause_subscription (billing), both of which appear in the sibling list.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not: 'check it first with list_publishing_pauses', 'Only act when the user asks; never pause on your own initiative', and a named alternative (list_publishing_pauses) for the inspection step. It also prescribes the exact two-call preview-then-confirm sequence and the permission tier required for each action.

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

manage_webhookA
Destructive
Inspect

Change a webhook subscription (list them first with list_webhooks). action=update (webhook_id): change URL, events, workspace, description, or active state; outbound side effects, so pass confirm=true only after explicit confirmation. action=delete (webhook_id): remove the subscription; preview then confirm: call without confirm to get a preview and preview_id, show the URL, events, and workspace, then call again with confirm=true and that preview_id. action=test (webhook_id): send a signed webhook.test delivery; confirm=true after explicit confirmation.

NameRequiredDescriptionDefault
urlNoupdate only.
actionYesupdate, delete, or test.
eventsNoupdate only.
confirmNoupdate and test: true after the user explicitly confirms. delete: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
is_activeNoupdate only.
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
webhook_idYesWebhook ID from list_webhooks.
descriptionNoupdate only.
workspace_idNoupdate only. null clears the workspace.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations flag destructiveHint/openWorldHint, but the description adds the context those hints cannot: update has outbound side effects, delete requires a two-step preview_id handshake, and test sends a signed delivery. It also discloses what the preview returns (URL, events, workspace) and that preview_id is required to confirm — value well beyond the annotation block.

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 prerequisite call, then segmented by action label so an agent can scan to the relevant branch. It is dense and semicolon-heavy in a single block, which costs a little readability, but no sentence is 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?

For a 9-parameter destructive multi-action tool with no output schema, the description covers every branch, the confirmation gate, the preview return fields, and the discovery prerequisite. An agent has everything needed to call each action correctly on the first attempt.

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 conditional semantics the schema cannot express: which parameters apply to which action, that confirm means different things for update/test vs delete, and the confirm + preview_id pairing. It stops short of explaining events payload shape or workspace_id null behavior beyond what the schema already states.

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+resource ('Change a webhook subscription') and then enumerates the three supported operations (update, delete, test) with their required identifier, each in a labeled clause. An agent can distinguish this from create_webhook and list_webhooks 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 Guidelines5/5

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

Explicitly routes the agent through list_webhooks first to obtain the webhook_id, names the three actions and what each one does, and gives a clear when-to-confirm rule ('pass confirm=true only after explicit confirmation'). For delete it prescribes an exact preview-then-confirm sequence, leaving nothing to inference.

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

manage_workspace_memberA
Destructive
Inspect

Invite, update, or remove a workspace colleague. This SENDS EMAILS and CHANGES WHO CAN ACCESS the workspace. Works with an API key that has the Manage team permission or an OAuth connection; the user must be a workspace owner or admin. ALWAYS preview first: call without confirm, show it, and call again with confirm: true and the preview_id only after the user explicitly approves. action=invite: email and role required (publisher, editor or viewer), optional brand_ids and resend; always sends a pending invite email, never adds anyone instantly. action=update: member_id or invite_id (from list_workspace_members) plus role and/or brand_ids; or member_id plus api_access (true or false, on its own) to turn API and AI app access on or off for that teammate, which lets them use the workspace API plan from their own keys and AI apps (off by default; you cannot change your own; only the owner can change it for an admin; turning it off stops their keys, AI app connections and webhooks for this workspace). action=remove: member_id (removes the teammate and revokes their API keys for this workspace) or invite_id (cancels a pending invite). Admin seats can only be granted in the posterly dashboard. The workspace owner is emailed about every change. For action=invite with confirm, reuse idempotency_key if the response is lost.

NameRequiredDescriptionDefault
roleNoaction=invite (required) or action=update: publisher, editor, or viewer.
emailNoaction=invite only: the colleague email address.
actionYesinvite, update, or remove.
resendNoaction=invite only: email an unchanged pending invite again.
confirmNoLeave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
brand_idsNoaction=invite or action=update: limit the seat to these brand IDs (from list_brands). Empty array means every brand. Omit on update to keep the current brands.
invite_idNoaction=update or action=remove: a pending invite ID from list_workspace_members.
member_idNoaction=update or action=remove: a member ID from list_workspace_members.
api_accessNoaction=update with member_id only, on its own: true turns API and AI app access on; false turns it off.
preview_idNoThe preview_id returned by the preview call. Required with confirm: true.
workspace_idYesWorkspace ID (from whoami).
idempotency_keyNoaction=invite with confirm: reuse this key if the response is lost. If omitted, an identical confirm within about 10 minutes replays the first result.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructive/openWorld/non-idempotent, but the description adds substantive consequences: emails are sent, access changes, invites never add instantly, removal revokes API keys, api_access=false kills keys, AI app connections and webhooks, owner is emailed on every change, and self/admin edits are restricted. It also discloses the ~10 minute replay window, which nuances rather than contradicts 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.

Conciseness4/5

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

Front-loading is excellent — the email/access warning and preview protocol come before any parameter detail. However it is a single dense block of semicolon-clause sentences running ~330 words, and significant portions duplicate schema descriptions verbatim (email/role required, member_id or invite_id sources), which bloat rather than add.

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 12-parameter destructive multi-action tool with no output schema, the description covers preconditions, side effects, the preview_id it returns, the confirm workflow, and the idempotency replay behavior. Nothing an agent needs to call it safely 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 baseline is 3; the description goes beyond it by encoding cross-field rules the schema does not state as rules — member_id plus api_access 'on its own', cannot change your own api_access, only the owner can change an admin's, and idempotency_key reuse advice for lost responses. It still largely restates the per-action applicability that the schema descriptions already carry, so it stops short of a 5.

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 triad and resource: 'Invite, update, or remove a workspace colleague.' It also implicitly separates itself from the read-only sibling by pointing agents to list_workspace_members as the source of member_id/invite_id, so the agent can pick correctly without reading schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use per action (invite/update/remove), the preconditions (Manage team permission or OAuth, must be workspace owner or admin), the mandatory preview-then-confirm loop, and the exclusion that admin seats can only be granted in the dashboard. Nothing about selection is left to inference.

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

manage_x_posting_addonA
Destructive
Inspect

Buy an X posting add-on. action=buy: plan_code is x_posts_100 ($8/month, 100 extra posts), x_posts_250 ($18/month, 250), or x_posts_500 ($35/month, 500). Call without confirm to see the price. Show that price to the user. Nothing is charged on the preview. Then call again with confirm=true, the preview_id, and expected_addon_status, expected_plan_code, and expected_price_usd from the preview. Confirming returns a Stripe Checkout link. The card is charged only after the user pays on that page. If an add-on is already active, confirming opens the billing page for the workspace owner and does not buy a second plan. Read the allowance with get_x_posting_quota. Owner or admin. billing:write.

NameRequiredDescriptionDefault
actionYesbuy: quote an X posting add-on, then open Checkout after the user agrees.
confirmNoTrue only after the user agrees, with the preview_id.
plan_codeNoWhich add-on to buy. Not used when one is already active.
preview_idNoThe preview_id from the preview call.
workspace_idNoWorkspace ID from whoami, when the key is not already scoped.
expected_plan_codeNoFrom the preview. The current plan code, or null when there is none.
expected_price_usdNoFrom the preview. The monthly price in dollars, or null.
expected_addon_statusNoFrom the preview. The add-on status the quote was based on.

TDQS

A4.8/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: no charge on preview, charge only after the user pays on Stripe, and that confirming with an active add-on redirects to billing rather than purchasing. This discloses the financial safety model that the destructiveHint=true annotation alone would leave ambiguous.

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 verb and the plan codes, then the confirm workflow. Dense but nearly every sentence carries necessary billing-flow detail; a touch long but hard to cut without losing safety context.

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 destructive, open-world billing mutation with no output schema, the description covers the full workflow, permissions, pricing, the money-movement timing, and the already-active edge case. An agent has everything needed to invoke it 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 coverage is 100% so the schema already documents each parameter, but the description adds real value: it enumerates plan codes with their prices/quantities and explains that expected_plan_code, expected_price_usd, and expected_addon_status all come from the preview call. Slightly short of 5 because expected_addon_status usage could be clearer.

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 ('Buy an X posting add-on') and is clearly distinguishable from siblings like get_x_posting_quota (read allowance) and upgrade_subscription. An agent can tell what this 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 Guidelines5/5

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

Explicit two-phase workflow: call without confirm for a preview, show the price, then call with confirm=true plus the expected_* fields. Names the active-add-on case (opens billing page instead of buying a second plan), and states authorization (owner or admin, billing:write scope). Also points to get_x_posting_quota for reading allowance.

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

pause_subscriptionA
DestructiveIdempotent
Inspect

Pause the authenticated user's posterly subscription for 30 days (one pause allowed per 90-day cooldown). Billing action; requires the billing:write scope. Only call after the user explicitly confirms.

NameRequiredDescriptionDefault
confirmYesMust be true after the user explicitly confirms pausing the subscription.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and idempotentHint=true, but the description adds the 30-day pause duration, the one-pause-per-90-day cooldown limit, and the required billing:write scope — none of which are in the structured fields. These are substantive operational constraints an agent needs before invoking; return format is not needed since there is no output schema.

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?

A single front-loaded sentence that delivers duration, cooldown, auth scope, and the confirmation gate with no filler. Every clause 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 one-parameter mutation with no output schema, the description covers the key preconditions (confirmation, scope, cooldown) and effect (30-day pause). Nothing an agent needs to call it correctly 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% with one boolean 'confirm' parameter, so the schema already carries the meaning. The description restates the confirmation requirement without adding format or edge-case detail beyond what the schema provides — baseline 3.

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 (pause) and resource (the authenticated user's subscription) plus the scope (30 days). It is clearly distinguishable from siblings like cancel_subscription, resume_subscription, and downgrade_subscription 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?

Gives an explicit call condition ('Only call after the user explicitly confirms'), which is strong guidance. However, it never routes the agent between this and adjacent choices such as cancel_subscription or downgrade_subscription, so alternative selection is left implicit.

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

posterly_statusA
Read-onlyIdempotent
Inspect

Check posterly's own publishing health: overall state from the last 4 hours of publishing success, any active incident (for example X being unavailable), and per-platform state with 7-day success rate and publish counts. Call it before scheduling a time-critical post, or when a user asks whether posterly or a platform is down or why posts are failing. Says so plainly when there is not enough recent activity to judge. Failures caused by content or account problems (expired connections, content limits) are excluded from the rates and reported separately as customer_side. Not the same as whoami view "status", which only reports the MCP server and npm package version. Read-only; aggregates only, no post or user data.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, not open-world), but the description adds real behavioral depth: the aggregation windows (4 hours for overall state, 7 days for per-platform rates), the exclusion of content/account failures into a separate customer_side bucket, the explicit degradation behavior ('says so plainly when there is not enough recent activity'), and the privacy guarantee that only aggregates are returned with no post or user data.

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, then usage triggers, then caveats. Every sentence carries information, but the single paragraph is dense and the closing whoami comparison plus the customer_side caveat could be split for faster scanning.

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 explaining return content, and it does: overall state, active incident with an example, per-platform state with success rate and counts, plus separate customer_side reporting and the insufficient-data case. Nothing an agent needs to call or interpret this tool 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?

The tool takes zero parameters, so there is nothing to document and the baseline is 4. The description correctly does not invent parameter detail, and the 'aggregates only, no post or user data' note usefully clarifies that no filtering inputs exist.

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 posterly's own publishing health) and enumerates what the result contains: overall state, active incident, per-platform state with 7-day success rate and publish counts. It explicitly distinguishes itself from the sibling whoami view 'status', so an agent can route correctly without opening either schema.

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

Usage Guidelines5/5

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

Gives concrete triggering conditions — before scheduling a time-critical post, or when a user asks whether posterly or a platform is down or why posts are failing. It also names the alternative (whoami) and the boundary between them, which is exactly the when/when-not guidance the dimension asks for.

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

resume_subscriptionA
Idempotent
Inspect

Resume the authenticated user's paused posterly subscription, restoring active billing. Requires the billing:write scope.

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 readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true. The description adds meaningful context beyond those: it restores active billing and requires the billing:write scope. It does not describe error behavior or limits, but the annotation coverage lowers the burden.

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 short sentences, front-loading the action and then the prerequisite. Every sentence carries useful information with no repetition or filler.

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 zero-parameter mutation tool with rich annotations, the description covers the action, the target subscription state, and the required scope. It does not address edge cases such as what happens if the subscription is already active, but the core information needed to invoke it is present.

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 schema provides no parameter semantics to supplement. Per the baseline for parameterless tools, a score of 4 is appropriate; the description adds no parameter detail because none exists.

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: 'Resume the authenticated user's paused posterly subscription'. It clearly differentiates from sibling operations like pause_subscription, cancel_subscription, and downgrade_subscription by specifying the resume action on an already-paused subscription.

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 a clear condition for use ('paused posterly subscription') and a prerequisite ('Requires the billing:write scope'). However, it does not explicitly name alternatives or state when not to use it, so it stops short of the top score.

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

run_video_functionA
Read-onlyIdempotent
Inspect

Run a read-only Google Veo or xAI Grok video helper function before generation. Does not generate video or spend credits.

NameRequiredDescriptionDefault
paramsNoFunction parameters. estimate_cost accepts model, duration_seconds, resolution, output, and xAI input_image_count. validate_request accepts a generate_video-style payload.
identifierYesVideo generator identifier from get_video_options.
functionNameYesHelper function name from get_video_options.tools.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint=false, so the description only needs incremental value. It supplies exactly that with 'Does not generate video or spend credits' — cost/billing information is not derivable from readOnlyHint (a read can still consume quota), and the up-front validation framing is useful. It does not, however, disclose that openWorldHint=true means external provider calls with their own latency/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.

Conciseness5/5

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

Two short sentences, zero filler, with the differentiating constraint (no video, no credits) front-loaded in the second sentence. Nothing wastes space or buries the lede.

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

Completeness3/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 explaining what comes back — yet it says nothing about the shape of list_input_modes, estimate_cost, or validate_request results, which is the primary reason an agent would call this. The input side is complete thanks to the 100%-covered schema, so this is adequate but has a clear return-value gap.

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%: identifier, functionName, and the nested params object are all documented with enums and per-function argument notes. The description adds nothing beyond the schema (no extra semantics for identifier/functionName/params), 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 and resource ('Run a read-only Google Veo or xAI Grok video helper function') and explicitly delineates itself from the sibling generate_video by noting it 'Does not generate video or spend credits.' An agent can immediately tell this apart from generate_video and trigger_platform_helper.

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?

'before generation' gives a clear temporal/contextual trigger for when to call this tool, and the negation of generation implicitly routes the agent to generate_video for actual rendering. However, it never states when NOT to use it, nor does it recommend which of the three helper functions to prefer in a given situation (that is left to the schema).

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

submit_agent_feedbackBInspect

Submit bounded private operational telemetry after a concrete posterly workflow outcome. This is non-destructive to product content but writes a private feedback event. Never include API keys, prompts, captions, media URLs, personal data, or fabricated outcomes. Requires an authenticated bearer API key and paid API add-on.

NameRequiredDescriptionDefault
toolYes
clientNo
sourceYes
commentNo
contextNo
outcomeYes
error_codeNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, and the description reinforces this by clarifying it is 'non-destructive to product content but writes a private feedback event'. It also adds genuinely new behavioral context the annotations lack: bearer-key auth, a paid add-on requirement, and explicit privacy prohibitions (API keys, prompts, captions, media URLs, personal data, fabricated outcomes).

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?

Four sentences, front-loaded with the purpose, and each carries a distinct piece of information (purpose, safety, privacy, auth). Slightly dense but no wasted filler and structure is scannable.

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

Completeness3/5

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

With no output schema and only narrow annotations, the description carries much of the burden, and it does cover safety, auth, and privacy well. But for a 7-parameter tool with a nested object and no schema descriptions, it omits any parameter-level guidance, leaving the agent to guess at field semantics.

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

Parameters2/5

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

Schema description coverage is 0% across 7 parameters, yet the description names none of them. It never explains source, tool, outcome enums, the nested context object (attempt, latency_ms, request_id, http_status), comment, client, or error_code, so it does not compensate for the complete absence of schema-level param documentation.

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?

States a specific verb and resource ('Submit ... operational telemetry') and scopes it to 'after a concrete posterly workflow outcome'. It implicitly separates itself from the sibling submit_product_feedback by framing this as operational rather than product feedback, but never names or contrasts that sibling explicitly.

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?

Gives triggering context ('after a concrete posterly workflow outcome') and constraints on what to include, which is implied usage guidance. However, it never says when to choose this over the very similar submit_product_feedback, nor when not to use it, leaving the key routing decision to inference.

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

submit_product_feedbackAInspect

File a product bug, idea, or general feedback on the public posterly feedback board (same board users see in the dashboard). Only call this when the human explicitly asks to report a bug, suggest a feature, or send feedback to posterly. Require confirm=true after they approve the title and category. Never use this for tool failures or retries - use submit_agent_feedback for private operational telemetry. Never include API keys, secrets, captions, media URLs, or personal data about third parties. Requires an authenticated bearer API key and paid API add-on.

NameRequiredDescriptionDefault
titleYes
clientNo
sourceNo
confirmYes
contextNo
categoryYes
descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only give the coarse profile (openWorldHint=true, non-idempotent, non-destructive). The description adds behavior annotations cannot express: content is posted to a public board users see, confirm=true is required after human approval, an authenticated bearer key plus a paid add-on is needed, and secrets/PII/third-party data must be excluded. These are exactly the payload-safety constraints an agent needs before writing.

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?

Purpose and destination are front-loaded, and every sentence carries actionable content (trigger, exclusions, confirm gate, data restrictions, auth requirements). It is dense and runs long into near-run-on territory, but there is essentially no filler to cut.

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 non-idempotent write with no output schema, the description covers the risky parts an agent must know: public visibility, the confirm gate, the human-approval precondition, auth requirements, and negative guidance on what must not be sent. The main remaining gap is the semantics of the optional context/source/client fields and what a successful submission returns.

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 0% across 7 parameters, so the description carries the burden but only partially compensates: it explains confirm (must be true, gated on approval) and references title and category. It says nothing about description, client, source, or the nested context object (request_id, related_tool), leaving four parameters with no semantic guidance anywhere.

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+resource ('File a product bug, idea, or general feedback') and names the exact destination ('the public posterly feedback board'), which an agent can map to a concrete action. It also explicitly distinguishes itself from the sibling submit_agent_feedback, so no schema inspection is needed to tell them apart.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Only call this when the human explicitly asks to report a bug, suggest a feature, or send feedback') plus an explicit exclusion ('Never use this for tool failures or retries') and names the alternative (submit_agent_feedback) with the condition that selects it. This is the full when/when-not/alternative pattern.

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

trigger_platform_helperB
Read-onlyIdempotent
Inspect

Run a platform helper for account-specific discovery, such as pinterest.boards, tiktok.creator_info, linkedin.recent_mentions, linkedin.company_lookup, youtube.playlists, or x.quota. Company lookup and YouTube playlists stay off until they are switched on.

NameRequiredDescriptionDefault
helperYes
paramsNoHelper inputs. linkedin.company_lookup needs { vanity: the company vanity name or company page URL }.
platformNoPlatform hint when no account_id is supplied.
account_idNoConnected social account ID when the helper needs account context.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds useful context that two helpers are gated behind an enablement switch, but says nothing about what happens on invocation of a disabled helper (error vs empty result) or about rate limits across helpers.

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?

Two tight sentences, front-loaded with purpose and followed by the enablement caveat. The helper name list is slightly redundant with the enum but stays short and readable.

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

Completeness3/5

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

For an openWorld dispatcher with a free-form nested params object, the description leaves the per-helper input contract mostly undocumented (only company_lookup is covered in the schema). Given no output schema, it also gives no hint of what discovery results look like, so the agent is under-informed for several helpers.

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 75%, so the schema already documents params, vanity (for company lookup), platform, and account_id. The description's enumeration of helper values restates the enum rather than adding semantics, and it does not explain the free-form params object beyond the single company_lookup case.

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?

States a specific verb ('Run a platform helper') and resource ('account-specific discovery'), then enumerates the concrete helper names. An agent can distinguish it from most siblings, though it does not clarify its relationship to overlapping tools like get_x_posting_quota or list_analytics.

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?

Implies this is the route for account-scoped platform data and notes that company lookup and YouTube playlists require being switched on first, which is a genuine prerequisite. However, it never says when NOT to use it or points to sibling alternatives that cover overlapping functionality.

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

update_postA
DestructiveIdempotent
Inspect

Change a scheduled or draft post. DESTRUCTIVE WRITE: show the user a side-by-side of CURRENT vs PROPOSED and pass confirm=true only after explicit confirmation. Edit (default): caption, media, schedule, post_type, settings, account_id, or thread_posts; cannot edit published or currently publishing posts. account_id moves it to another account in the same workspace and brand (the platform follows). thread_posts replaces an X or Threads reply chain (2+ non-empty parts; the first is the caption). If a client already approved the post, a caption edit reopens caption approval, a media or thumbnail edit reopens asset approval, and a reschedule, account change, thread edit, or settings change reopens both. status (scheduled, paused, or draft, with scheduled_at when scheduling a draft): pause, resume, or move back to draft; send it on its own. release_id (with optional group_id): set or repair external release/group IDs; send it on its own. approval_action (request, approve, request_changes, or reject): change client approval. Owner or admin only; the actor is the API key user, never a brand guest. request emails the brand reviewers; the others are team-side decisions. request_changes needs approval_note. Optional approval_axis is asset or caption; omit it for both. Send approval_action on its own. Pass the Version from get_post as expected_version and send only changed fields; a stale edit is refused.

NameRequiredDescriptionDefault
statusNoChange the post status instead of editing it. Send with post_id (and scheduled_at when scheduling a draft) only.
captionNo
confirmYesMust be true after the user explicitly confirms the proposed change.
post_idYes
group_idNoWith release_id only: an external group/campaign ID.
metadataNo
settingsNoPost settings. Instagram and X Article fields work here or in platform_settings: first_comment, user_tags, collaborators, is_trial_reel, caption_addon (poll or comment prompt; Facebook Login only, not Stories), article ({ title, cover }). Call list_platforms with view=schema and account_id for fields.
media_urlNoMedia URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first.
post_typeNoOptional post type. Omit for auto-detection from media.
account_idNoMove this unpublished post to another account you can use in the same workspace. The account must belong to the post brand. The platform follows the new account.
media_urlsNoMedia URLs, handled like media_url.
release_idNoSet an external release ID instead of editing the post. Send with post_id and optional group_id only.
scheduled_atNoISO 8601 UTC. With status, required when scheduling a draft.
thread_postsNoReplace an X or Threads reply chain. At least 2 non-empty parts. The first part becomes the caption.
approval_axisNoWith approval_action approve, request_changes, or reject: which axis to decide. Omit for both. Not allowed with request.
approval_noteNoNote stored with the approval change. Required for request_changes.
reel_cover_urlNo
approval_actionNoChange client approval instead of editing the post. Send on its own.
expected_versionNo
platform_settingsNoPlatform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples.
reel_cover_methodNo
reel_thumb_offsetNo

TDQS

A4.9/5.0
Behavior5/5

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

Despite annotations already marking the tool destructive, the description adds critical operational context: side-by-side confirmation workflow, published-post restriction, approval re-opening rules, owner/admin permission requirement, API-key actor identity, email behavior for request, and stale-edit refusal via expected_version.

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 most safety-critical information is front-loaded ('DESTRUCTIVE WRITE... confirm=true only after explicit confirmation'), followed by default edit behavior and then mode-specific rules. The density is appropriate for a destructive, multi-mode tool with 22 parameters, and every sentence carries operational value.

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 destructive mutation with nested objects and no output schema, the description covers the necessary invocation context: permissions, confirmation, allowed states, mode exclusivity, approval effects, and optimistic concurrency. An agent can call this correctly without needing return-value documentation.

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?

With 68% schema coverage, the description compensates well by explaining mode-exclusive parameters, account_id movement, thread_posts replacement semantics, status scheduling behavior, approval_action/approval_axis/approval_note rules, and expected_version. It still does not fully clarify the distinction between settings and platform_settings or all 22 params, but it adds substantial meaning beyond 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?

The description opens with a specific verb and resource: 'Change a scheduled or draft post.' It then distinguishes the default edit path from separate status, release_id, and approval_action modes, making the tool's scope clear without needing sibling comparison.

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

Usage Guidelines5/5

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

It states explicit usage rules: show CURRENT vs PROPOSED and pass confirm=true only after user confirmation, cannot edit published or currently publishing posts, and send status/release_id/approval_action on their own. It also names the alternative priming tool (get_post) for expected_version.

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

upgrade_subscriptionA
DestructiveIdempotent
Inspect

Upgrade to a strictly higher plan. MONEY: charges the saved card (prorated). Owner only. Call without confirm for the quote and preview_id; after the user agrees, call with confirm=true, that preview_id and the expected_ fields. 3D Secure or a decline returns a payment link; nothing changes.

NameRequiredDescriptionDefault
tierYes
confirmNo
intervalNo
preview_idNo
workspace_idNo
expected_intervalNo
expected_current_tierNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and idempotentHint=true, but the description adds material context those hints cannot express: it charges the saved card, prorated, owner-only authorization, and that a 3D Secure challenge or decline returns a payment link while leaving the account unchanged. That last point is the key behavioral guarantee for a money-moving tool.

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?

Roughly four dense sentences, front-loaded with the core action and the money warning, with the procedural flow following. The telegraphic style ('MONEY:', 'Owner only.') maximizes signal per token with no filler.

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 destructive, money-charging, multi-step tool with no output schema, the description covers the return artifacts (quote, preview_id, payment link), authorization, and the failure path well. It stops short of explaining workspace_id scoping or the interval/expected_interval distinction, so it is strong but not fully 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 description coverage is 0%, so the description carries the burden and does well on the critical params: confirm, preview_id, and the expected_ guard fields are all given usage semantics (quote-first, then confirm with matching preview). However, interval and workspace_id receive no mention at all, leaving two of seven parameters unexplained anywhere.

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+resource with a hard constraint: 'Upgrade to a strictly higher plan.' This immediately distinguishes it from the sibling downgrade_subscription, cancel_subscription, pause_subscription, and resume_subscription 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 Guidelines5/5

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

Gives an explicit two-phase protocol: call without confirm to get a quote and preview_id, then after user agreement call with confirm=true, that preview_id and the expected_ fields. The when-to-use and when-not-to-confirm conditions are spelled out, not inferred.

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

upload_mediaA
Destructive
Inspect

Upload an image or video to posterly storage and get a URL for create_post; nothing is published. base64_data with filename: small files (<=5MB decoded). url: copy a public HTTPS image or video. Larger files: create_signed_upload, then PUT the bytes. JPEG, PNG, GIF, WebP, MP4, MOV, WebM; counts against storage quota. No PDFs here: use create_signed_upload or create_media_drop. asset_id (from list_media) deletes that library file after a preview. A file a post still uses is kept.

NameRequiredDescriptionDefault
urlNoPublic HTTPS image or video URL to copy into posterly storage.
confirmNoDelete only: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.
asset_idNoFile id from list_media to delete, after a preview. Use alone.
filenameNoe.g. photo.jpg; required with base64_data.
chat_filesNoChatGPT chat files, in post order.
preview_idNoThe preview_id from the preview call. Required with confirm: true for actions that preview first.
base64_dataNoBase64 file data.
content_typeNoMIME type (default: from filename)
workspace_idNoOptional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark the tool as destructive and open-world, but the description adds substantial context beyond them: uploads are not published, storage quota is consumed, a specific size threshold applies to base64 data, deletion requires a preview, and files still used by a post are retained. Those are meaningful behavioral details for both upload and destructive branches.

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 main purpose is front-loaded in the first sentence, followed by mode-selection guidance, format limits, and the deletion caveat. The style is dense and telegraphic, but every fragment earns its place and no sentence is redundant.

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 9-parameter tool with no output schema and a destructive deletion mode, the description covers the important workflows: small uploads, URL copies, large uploads via another tool, supported formats, quota impact, PDF exclusions, and safe deletion behavior. It gives enough context to choose the right path without opening sibling tools.

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. The description still adds useful selection semantics by mapping base64_data to small files, url to public HTTPS assets, and asset_id to the preview-then-delete flow. It does not explain every parameter, but it adds more than the schema alone for the main mode-selection parameters.

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: upload an image or video to posterly storage and get a URL for create_post. It also clearly discloses the secondary deletion behavior via asset_id, which prevents the agent from mistaking this for an upload-only tool. It distinguishes the tool from create_signed_upload and create_media_drop.

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

Usage Guidelines5/5

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

It gives explicit routing rules: base64_data with filename for small files, url for public HTTPS copies, and create_signed_upload for larger files. It names the alternative for PDFs and explains the asset_id deletion flow after a preview. This is exactly the when-to-use guidance an agent needs.

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

validate_postA
Read-onlyIdempotent
Inspect

Validate and normalize one post without creating it. Non-destructive: no records, media copies, quota use, webhooks or publication. Third-party media may return remote_media_not_materialized (live create copies and validates it). Run this before the final preview and the create_post confirmation. Advisory brand name and competitor checks with brand_compliance=true; never blocks.

NameRequiredDescriptionDefault
captionNoPost caption/text. On Instagram, @username is a caption mention, not a native tag or collaborator invite. Optional on Instagram Stories (first slide only in a series). Ignored when thread_posts is provided.
metadataNo
platformNoPlatform name when using username. Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Aliases x, gmb, and instagram-standalone are also accepted by the API.
settingsNoDeprecated alias of platform_settings (or instagram_settings for Instagram). Prefer those instead.
usernameNoAccount username; requires platform.
media_urlNoMedia URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first. Short-lived signed URLs must still be live when this tool runs.
post_typeNoOptional post type. Omit for auto-detection from media. Supported semantic values include text, image, video, carousel, reel, story, story_series, document, x_thread, threads_thread, photo, and cover_photo.
account_idNoSocial account ID from list_accounts.
media_urlsNoMedia URLs, handled like media_url.
scheduled_atNoISO 8601 UTC datetime. Omit to publish immediately.
thread_postsNoFor X or Threads: 2+ entries, one per post in the reply chain.
workspace_idNoWorkspace ID from whoami.
idempotency_keyNoOptional retry key. Reuse the same value if this create errors or the response is lost.
brand_complianceNoAdvisory brand name and competitor checks; never blocks. Needs accounts:read.
platform_settingsNoPlatform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples.
instagram_settingsNoInstagram-specific settings: native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first.

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 description is not needed to establish safety — yet it goes further with a concrete enumeration of what is NOT consumed (records, media copies, quota, webhooks, publication) and a failure mode agents would otherwise be surprised by (remote_media_not_materialized for third-party media). It also clarifies that brand_compliance is advisory and never blocks, which prevents an agent from treating a failure as a hard stop. Minor gap: it does not say what a failed validation returns or whether partial results are reported.

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?

Four short sentences, front-loaded with the what and the non-destructive guarantee before the caveats and the sequencing advice. No filler or restated name/title; every sentence carries an actionable fact.

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

Completeness3/5

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

For a 16-parameter tool with deep nested objects and no output schema, the description covers intent and side effects well but says nothing about the shape of the validation result (errors list, normalized payload, per-platform diagnostics), which is the primary thing an agent consumes. The platform_settings block's required fields are documented in the schema, so that gap is acceptable, but the return-value gap is not fully offset.

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 94%, so the schema already carries nearly all parameter meaning and 3 is the baseline. The description adds only one genuinely non-duplicative signal — that third-party media can surface remote_media_not_materialized, clarifying media_url/media_urls behavior — and the brand_compliance line largely restates the schema's own wording.

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

Purpose5/5

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

Opens with a specific verb+resource ("Validate and normalize one post") plus the critical qualifier "without creating it", which immediately separates it from create_post and update_post in the sibling list. An agent can identify this tool from the name-plus-first-clause alone.

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?

"Run this before the final preview and the create_post confirmation" gives an explicit placement in the workflow and names the sibling it precedes. It stops short of stating when to skip validation (e.g., for trivial retries or already-validated payloads), so it is clear context without full exclusion rules.

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

whoamiA
Read-onlyIdempotent
Inspect

Who you are and how posterly is connected. view=identity (default): the authenticated user, API key scopes, workspaces, and onboarding next step. Pass include=api_keys to also list this account's API keys (name, prefix, scopes, created, last used). The secret is never included. Call this first; if onboarding.completed is false, walk About you, Connect, Brand voice, and First post IN THIS conversation and do not send the user to /onboarding-v2. view=status: hosted MCP server version, latest npm version for local app clients, endpoint and API auth health, and update guidance.

NameRequiredDescriptionDefault
viewNoidentity (default): user, scopes, workspaces, onboarding. status: MCP server and connection health.identity
includeNoidentity only. api_keys lists this account's API keys. The secret is never included. Omit it for the usual identity answer.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already carry the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond that: the API key secret is never returned, onboarding state drives a specific in-conversation flow, and view=status reports server/npm versions and auth health. This is real behavioral guidance an agent cannot infer from structured fields.

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 default behavior and the 'Call this first' directive are front-loaded, and every clause carries information. There is mild duplication with the schema's own view descriptions, but no 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?

With no output schema, the description takes on the burden of describing returns and does so for both views (user, scopes, workspaces, onboarding step; version, endpoint, auth health, update guidance). Nothing essential for a correct first call 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, and the description goes further by explaining what each view yields and constraining include=api_keys to identity only with the explicit note that the secret is omitted. It stops short of describing the fields returned within identity, so it is not a full 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?

The description names a concrete resource (the authenticated user, API key scopes, workspaces, onboarding state) and enumerates exactly what each view returns, so an agent knows precisely what it gets. The only gap is that it never clarifies how this differs from the sibling posterly_status, which plausibly overlaps with view=status.

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

Usage Guidelines5/5

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

It gives an explicit ordering rule ('Call this first') and a conditional workflow ('if onboarding.completed is false, walk About you, Connect, Brand voice, and First post IN THIS conversation and do not send the user to /onboarding-v2'). It also defines when to pick view=status over the default identity view.

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
    • Changedupdate_post1 field changed
      • addedInput schema / properties / expected_version
        Added value: +{
        +  "minimum": 1,
        +  "type": "integer"
        +}
  2. 1 tool update
    • Changedupload_media6 fields changed
      • changedInput schema / properties / asset_id / description
        Previous value: -"Library file id from list_media. Deletes that file after a preview. Do not combine with url or base64_data."New value: +"File id from list_media to delete, after a preview. Use alone."
      • changedInput schema / properties / base64_data / description
        Previous value: -"Base64-encoded file data. The HTTP MCP transport requires base64 (no filesystem access)."New value: +"Base64 file data."
      • addedInput schema / properties / chat_files
        Added value: +{
        +  "description": "ChatGPT chat files, in post order.",
        +  "items": {
        +    "properties": {
        +      "download_url": {
        +        "type": "string"
        +      },
        +      "file_id": {
        +        "type": "string"
        +      },
        +      "file_name": {
        +        "type": "string"
        +      },
        +      "mime_type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "download_url"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / content_type / description
        Previous value: -"MIME type (auto-detected from filename if omitted)"New value: +"MIME type (default: from filename)"
      • changedInput schema / properties / filename / description
        Previous value: -"Filename with extension, e.g. photo.jpg. Required with base64_data."New value: +"e.g. photo.jpg; required with base64_data."
      • changedInput schema / properties / url / description
        Previous value: -"Public HTTPS URL of an image or video to copy into posterly storage instead of base64_data."New value: +"Public HTTPS image or video URL to copy into posterly storage."
  3. 1 tool update
    • Changedvalidate_post1 field changed
      • addedInput schema / properties / brand_compliance
        Added value: +{
        +  "description": "Advisory brand name and competitor checks; never blocks. Needs accounts:read.",
        +  "type": "boolean"
        +}
  4. 4 tool updates
    • Changedcreate_post1 field changed
      • changedInput schema / properties / platform_settings / properties / post_mode / description
        Previous value: -"TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit."New value: +"TikTok delivery: auto (default, unless the account is set to Finish in TikTok app) or inbox. With no privacy_level, auto uses the saved default or public."
    • Changedcreate_posts_batch1 field changed
      • changedInput schema / properties / posts / items / properties / platform_settings / properties / post_mode / description
        Previous value: -"TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit."New value: +"TikTok delivery: auto (default, unless the account is set to Finish in TikTok app) or inbox. With no privacy_level, auto uses the saved default or public."
    • Changedupdate_post1 field changed
      • changedInput schema / properties / platform_settings / properties / post_mode / description
        Previous value: -"TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit."New value: +"TikTok delivery: auto (default, unless the account is set to Finish in TikTok app) or inbox. With no privacy_level, auto uses the saved default or public."
    • Changedvalidate_post1 field changed
      • changedInput schema / properties / platform_settings / properties / post_mode / description
        Previous value: -"TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit."New value: +"TikTok delivery: auto (default, unless the account is set to Finish in TikTok app) or inbox. With no privacy_level, auto uses the saved default or public."
  5. 2 tool updates
    • Changedgenerate_image1 field changed
      • changedInput schema / properties / thinking_level / description
        Previous value: -"Google flash/lite. Gemini image quality control. minimal is fastest; high is for infographics and harder layouts. Overrides quality when both are set."New value: +"Google flash/lite. Gemini image quality control. minimal is fastest; high is for infographics and harder layouts. Overrides quality when both are set. Thinking high does not change the credit price."
    • Addedmanage_plan
  6. 6 tool updates
    • Changedcreate_api_key1 field changed
      • addedInput schema / properties / workspace_client_id
        Added value: +{
        +  "description": "Optional brand (workspace client id) in that workspace. Omit for a key that can see every brand. A key limited to one brand cannot create keys.",
        +  "type": "string"
        +}
    • Changedcreate_post3 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional retry key. Reuse the same value if this create errors or the response is lost.",
        +  "maxLength": 255,
        +  "type": "string"
        +}
      • addedInput schema / properties / platform_settings / properties / post_mode
        Added value: +{
        +  "description": "TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit.",
        +  "enum": [
        +    "auto",
        +    "inbox"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / platform_settings / properties / privacy_level / description
        Previous value: -"TikTok privacy level."New value: +"TikTok audience for auto: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, or SELF_ONLY."
    • Changedcreate_posts_batch4 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional batch retry key. Reuse it if the response is lost. A per-item idempotency_key wins.",
        +  "maxLength": 255,
        +  "type": "string"
        +}
      • addedInput schema / properties / posts / items / properties / idempotency_key
        Added value: +{
        +  "description": "Optional retry key. Reuse the same value if this create errors or the response is lost.",
        +  "maxLength": 255,
        +  "type": "string"
        +}
      • addedInput schema / properties / posts / items / properties / platform_settings / properties / post_mode
        Added value: +{
        +  "description": "TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit.",
        +  "enum": [
        +    "auto",
        +    "inbox"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / posts / items / properties / platform_settings / properties / privacy_level / description
        Previous value: -"TikTok privacy level."New value: +"TikTok audience for auto: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, or SELF_ONLY."
    • Changedmanage_workspace_member1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "action=invite with confirm: reuse this key if the response is lost. If omitted, an identical confirm within about 10 minutes replays the first result.",
        +  "maxLength": 255,
        +  "type": "string"
        +}
    • Changedupdate_post2 fields changed
      • addedInput schema / properties / platform_settings / properties / post_mode
        Added value: +{
        +  "description": "TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit.",
        +  "enum": [
        +    "auto",
        +    "inbox"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / platform_settings / properties / privacy_level / description
        Previous value: -"TikTok privacy level."New value: +"TikTok audience for auto: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, or SELF_ONLY."
    • Changedvalidate_post3 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional retry key. Reuse the same value if this create errors or the response is lost.",
        +  "maxLength": 255,
        +  "type": "string"
        +}
      • addedInput schema / properties / platform_settings / properties / post_mode
        Added value: +{
        +  "description": "TikTok delivery: auto (needs privacy_level) or inbox. Omitting both fields means inbox, with tiktok_inbox_implicit.",
        +  "enum": [
        +    "auto",
        +    "inbox"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / platform_settings / properties / privacy_level / description
        Previous value: -"TikTok privacy level."New value: +"TikTok audience for auto: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, or SELF_ONLY."
  7. 1 tool update
    • Changedtrigger_platform_helper1 field changed
      • addedInput schema / properties / params / description
        Added value: +"Helper inputs. linkedin.company_lookup needs { vanity: the company vanity name or company page URL }."
  8. 19 tool updates
    • Changedcreate_webhook1 field changed
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "post.created",
        -  "post.updated",
        -  "post.deleted",
        -  "post.publishing",
        -  "post.published",
        -  "post.failed",
        -  "account.disconnected",
        -  "analytics.synced",
        -  "approval.requested",
        -  "approval.approved",
        -  "approval.changes_requested",
        -  "approval.rejected",
        -  "approval.commented"
        -]New value: +[
        +  "webhook.test",
        +  "post.created",
        +  "post.updated",
        +  "post.deleted",
        +  "post.publishing",
        +  "post.published",
        +  "post.failed",
        +  "account.disconnected",
        +  "account.needs_reconnect",
        +  "account.reconnected",
        +  "analytics.synced",
        +  "approval.requested",
        +  "approval.approved",
        +  "approval.changes_requested",
        +  "approval.rejected",
        +  "approval.commented"
        +]
    • Changeddismiss_suggestion1 field changed
      • addedInput schema / properties / save_as_draft
        Added value: +{
        +  "description": "True saves the suggestion as an unpublished draft and does not dismiss it. Omit to dismiss.",
        +  "type": "boolean"
        +}
    • Changedlist_accounts1 field changed
      • addedInput schema / properties / connection
        Added value: +{
        +  "description": "view=accounts: ok, or needs_reconnect to list only accounts that need a reconnect.",
        +  "enum": [
        +    "ok",
        +    "needs_reconnect"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_analytics1 field changed
      • addedInput schema / properties / include_extras
        Added value: +{
        +  "description": "accounts: also return saved audience breakdowns, sync status, and entity snapshots when that read is switched on.",
        +  "type": "boolean"
        +}
    • Changedlist_conversations2 fields changed
      • addedInput schema / properties / platform / description
        Added value: +"Instagram or Facebook. Threads has comments, not DMs."
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "instagram",
        -  "facebook",
        -  "threads"
        -]New value: +[
        +  "instagram",
        +  "facebook"
        +]
    • Addedlist_google_business_locations
    • Changedlist_google_business_media2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Items per page. Default 50, max 200. This pages the gallery already fetched; it does not ask Google for a smaller page.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Items to skip. Use the offset the previous page gives.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Addedlist_google_business_service_areas
    • Changedlist_posts4 fields changed
      • addedInput schema / properties / group_id
        Added value: +{
        +  "description": "Caller group id. Matches api_group_id, group_id, post_group_id.",
        +  "type": "string"
        +}
      • addedInput schema / properties / release_id
        Added value: +{
        +  "description": "Caller release id. Matches release_id only.",
        +  "type": "string"
        +}
      • addedInput schema / properties / status / description
        Added value: +"Stored post status, or missed. paused_due_to_token is a reconnect pause and paused_due_to_billing is a billing pause. missed: failed, still scheduled after the scheduled time, or held by a publishing pause past it."
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "scheduled",
        -  "published",
        -  "failed",
        -  "draft"
        -]New value: +[
        +  "draft",
        +  "scheduled",
        +  "publishing",
        +  "processing",
        +  "awaiting_tiktok_publish",
        +  "awaiting_manual",
        +  "published",
        +  "failed",
        +  "paused",
        +  "paused_due_to_token",
        +  "paused_due_to_billing",
        +  "missed"
        +]
    • Changedlist_webhooks4 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "webhooks (default) or deliveries.",
        +  "enum": [
        +    "webhooks",
        +    "deliveries"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / webhook_id
        Added value: +{
        +  "description": "deliveries: webhook ID from view=webhooks.",
        +  "type": "string"
        +}
    • Addedmanage_brand
    • Addedmanage_google_business_location
    • Addedmanage_google_business_service_area
    • Changedmanage_webhook1 field changed
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "post.created",
        -  "post.updated",
        -  "post.deleted",
        -  "post.publishing",
        -  "post.published",
        -  "post.failed",
        -  "account.disconnected",
        -  "analytics.synced",
        -  "approval.requested",
        -  "approval.approved",
        -  "approval.changes_requested",
        -  "approval.rejected",
        -  "approval.commented"
        -]New value: +[
        +  "webhook.test",
        +  "post.created",
        +  "post.updated",
        +  "post.deleted",
        +  "post.publishing",
        +  "post.published",
        +  "post.failed",
        +  "account.disconnected",
        +  "account.needs_reconnect",
        +  "account.reconnected",
        +  "analytics.synced",
        +  "approval.requested",
        +  "approval.approved",
        +  "approval.changes_requested",
        +  "approval.rejected",
        +  "approval.commented"
        +]
    • Addedmanage_x_posting_addon
    • Changedtrigger_platform_helper1 field changed
      • changedInput schema / properties / helper / enum
        Previous value: -[
        -  "linkedin.recent_mentions",
        -  "pinterest.boards",
        -  "tiktok.creator_info",
        -  "x.quota"
        -]New value: +[
        +  "linkedin.company_lookup",
        +  "linkedin.recent_mentions",
        +  "pinterest.boards",
        +  "tiktok.creator_info",
        +  "x.quota",
        +  "youtube.playlists"
        +]
    • Changedupdate_post2 fields changed
      • addedInput schema / properties / account_id
        Added value: +{
        +  "description": "Move this unpublished post to another account you can use in the same workspace. The account must belong to the post brand. The platform follows the new account.",
        +  "type": "string"
        +}
      • addedInput schema / properties / thread_posts
        Added value: +{
        +  "description": "Replace an X or Threads reply chain. At least 2 non-empty parts. The first part becomes the caption.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 2,
        +  "type": "array"
        +}
    • Changedupload_media3 fields changed
      • addedInput schema / properties / asset_id
        Added value: +{
        +  "description": "Library file id from list_media. Deletes that file after a preview. Do not combine with url or base64_data.",
        +  "type": "string"
        +}
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "Delete only: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / preview_id
        Added value: +{
        +  "description": "The preview_id from the preview call. Required with confirm: true for actions that preview first.",
        +  "type": "string"
        +}
    • Changedwhoami1 field changed
      • addedInput schema / properties / include
        Added value: +{
        +  "description": "identity only. api_keys lists this account's API keys. The secret is never included. Omit it for the usual identity answer.",
        +  "enum": [
        +    "api_keys"
        +  ],
        +  "type": "string"
        +}
  9. 1 tool update
    • Changedmanage_google_business_review1 field changed
      • changedInput schema / properties / review_name / description
        Previous value: -"reply and delete_reply: full Google review resource name."New value: +"reply and delete_reply: review_name from list_google_business_reviews."
  10. 4 tool updates
    • Changedlist_comments9 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Social account ID from list_accounts."New value: +"From list_accounts."
      • changedInput schema / properties / comment_id / description
        Previous value: -"One comment (from a list call) with its replies."New value: +"One comment and its replies."
      • changedInput schema / properties / filter / description
        Previous value: -"Comment filter. Defaults to all."New value: +"Default all."
      • changedInput schema / properties / limit / description
        Previous value: -"Number of comments to return. Default 50, max 100."New value: +"Rows to return. Default 50."
      • changedInput schema / properties / offset / description
        Previous value: -"Skip this many comments before returning results."New value: +"Rows to skip."
      • removedInput schema / properties / platform / description
        Removed value: -"instagram, facebook, threads, or linkedin."
      • addedInput schema / properties / since
        Added value: +{
        +  "description": "ISO date/time, inclusive.",
        +  "type": "string"
        +}
      • addedInput schema / properties / until
        Added value: +{
        +  "description": "ISO date/time, inclusive.",
        +  "type": "string"
        +}
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one."New value: +"Omit to search all your workspaces, or pass an ID from whoami."
    • Changedlist_conversations9 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Social account ID from list_accounts."New value: +"From list_accounts."
      • changedInput schema / properties / conversation_id / description
        Previous value: -"One conversation (from a list call) with its messages."New value: +"One conversation and its messages."
      • changedInput schema / properties / filter / description
        Previous value: -"Conversation filter. Defaults to all (excludes archived)."New value: +"Default all (excludes archived)."
      • changedInput schema / properties / limit / description
        Previous value: -"Conversations to return, or messages with conversation_id. Default 50, max 100."New value: +"Rows (messages with conversation_id). Default 50."
      • changedInput schema / properties / offset / description
        Previous value: -"Skip this many conversations before returning results."New value: +"Rows to skip."
      • removedInput schema / properties / platform / description
        Removed value: -"instagram or facebook. Threads has no DMs."
      • addedInput schema / properties / since
        Added value: +{
        +  "description": "ISO date/time, inclusive.",
        +  "type": "string"
        +}
      • addedInput schema / properties / until
        Added value: +{
        +  "description": "ISO date/time, inclusive.",
        +  "type": "string"
        +}
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one."New value: +"Omit to search all your workspaces, or pass an ID from whoami."
    • Changedmanage_comment1 field changed
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one."New value: +"Omit to search all your workspaces, or pass an ID from whoami."
    • Changedmanage_conversation1 field changed
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one."New value: +"Omit to search all your workspaces, or pass an ID from whoami."
  11. 3 tool updates
    • Changedcreate_post1 field changed
      • changedInput schema / properties / caption / description
        Previous value: -"Post caption/text. On Instagram, @username creates a caption mention only; it is not a native media tag or collaborator invitation. Ignored when thread_posts is provided."New value: +"Post caption/text. On Instagram, @username is a caption mention, not a native tag or collaborator invite. Optional on Instagram Stories (first slide only in a series). Ignored when thread_posts is provided."
    • Changedcreate_posts_batch1 field changed
      • changedInput schema / properties / posts / items / properties / caption / description
        Previous value: -"Post caption/text. On Instagram, @username creates a caption mention only; it is not a native media tag or collaborator invitation. Ignored when thread_posts is provided."New value: +"Post caption/text. On Instagram, @username is a caption mention, not a native tag or collaborator invite. Optional on Instagram Stories (first slide only in a series). Ignored when thread_posts is provided."
    • Changedvalidate_post1 field changed
      • changedInput schema / properties / caption / description
        Previous value: -"Post caption/text. On Instagram, @username creates a caption mention only; it is not a native media tag or collaborator invitation. Ignored when thread_posts is provided."New value: +"Post caption/text. On Instagram, @username is a caption mention, not a native tag or collaborator invite. Optional on Instagram Stories (first slide only in a series). Ignored when thread_posts is provided."
  12. 1 tool update
    • Addedposterly_status
  13. 18 tool updates
    • Changedcreate_post4 fields changed
      • changedInput schema / properties / instagram_settings / description
        Previous value: -"Instagram-specific settings. Distinguish caption @mentions (put @username in caption) from native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."New value: +"Instagram-specific settings: native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."
      • changedInput schema / properties / media_url / description
        Previous value: -"Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. Short-lived signed URLs must still be live when this tool runs."New value: +"Media URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first. Short-lived signed URLs must still be live when this tool runs."
      • changedInput schema / properties / media_urls / description
        Previous value: -"Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved."New value: +"Media URLs, handled like media_url."
      • changedInput schema / properties / platform_settings / description
        Previous value: -"Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples."New value: +"Platform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples."
    • Changedcreate_posts_batch4 fields changed
      • changedInput schema / properties / posts / items / properties / instagram_settings / description
        Previous value: -"Instagram-specific settings. Distinguish caption @mentions (put @username in caption) from native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."New value: +"Instagram-specific settings: native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."
      • changedInput schema / properties / posts / items / properties / media_url / description
        Previous value: -"Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. Short-lived signed URLs must still be live when this tool runs."New value: +"Media URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first. Short-lived signed URLs must still be live when this tool runs."
      • changedInput schema / properties / posts / items / properties / media_urls / description
        Previous value: -"Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved."New value: +"Media URLs, handled like media_url."
      • changedInput schema / properties / posts / items / properties / platform_settings / description
        Previous value: -"Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples."New value: +"Platform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples."
    • Changedcreate_signed_upload2 fields changed
      • changedInput schema / properties / files / description
        Previous value: -"Batch: 1 to 20 files, each with filename, content_type and size. Use instead of the single-file fields."New value: +"Batch: 1 to 20 {filename, content_type, size}. Use instead of the single-file fields."
      • changedInput schema / properties / pin_content_type / description
        Previous value: -"Optional. true locks each slot to the declared content_type so a PUT with any other Content-Type fails with 403. Send the returned Content-Type header exactly."New value: +"Optional. true locks each slot to the declared content_type; a PUT with any other Content-Type fails with 403."
    • Changeddelete_post2 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"post_id: true after the user explicitly confirms the deletion. group_id: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"post_id: true after the user explicitly confirms the deletion. group_id: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
      • changedInput schema / properties / confirm_published / description
        Previous value: -"With post_id only. True only after the user explicitly confirms taking a live post down. Required with delete_mode=platform. Use delete_mode=posterly to leave the live post up."New value: +"With post_id only. True only after the user explicitly confirms taking a live post down. Required with delete_mode=platform."
    • Changedlist_analytics1 field changed
      • changedInput schema / properties / presentation / description
        Previous value: -"accounts and posts: compact bullets, Markdown table, or raw JSON for client-side chart/card rendering."New value: +"accounts and posts: compact, table, or json."
    • Changedlist_posts2 fields changed
      • changedInput schema / properties / offset / description
        Previous value: -"How many matching posts to skip. Use the offset the previous page gives to get the next page. Ignored by view=counts."New value: +"Matching posts to skip; use the offset the previous page gives. Ignored by view=counts."
      • changedInput schema / properties / view / description
        Previous value: -"list (default): the posts themselves, one page at a time. counts: exact totals per day, status, account, and brand (needs scheduled_from and scheduled_to)."New value: +"list (default): the posts. counts: totals (needs scheduled_from and scheduled_to)."
    • Changedmanage_comment1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"reply and delete: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"reply and delete: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
    • Changedmanage_conversation1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"send: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"send: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
    • Addedmanage_extra_account
    • Changedmanage_google_business_media1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
    • Changedmanage_google_business_review1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"reply and delete_reply: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"reply and delete_reply: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
    • Changedmanage_oauth_client1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"create and update: true after explicit user confirmation. delete: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"create and update: true after explicit user confirmation. delete: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
    • Changedmanage_publishing_pause1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"pause: leave out to get a preview; true only after the user agreed. publish_missed: true after the user agreed. resume: not needed."New value: +"pause: leave out to preview. pause and publish_missed: true only after the user agreed. resume: not needed."
    • Changedmanage_webhook1 field changed
      • changedInput schema / properties / confirm / description
        Previous value: -"update and test: true after the user explicitly confirms. delete: Leave out to get a preview and preview_id. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"update and test: true after the user explicitly confirms. delete: Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
    • Changedmanage_workspace_member3 fields changed
      • changedInput schema / properties / api_access / description
        Previous value: -"action=update with member_id only, on its own: true lets the teammate use this workspace's API plan from their own keys and AI apps; false turns it off."New value: +"action=update with member_id only, on its own: true turns API and AI app access on; false turns it off."
      • changedInput schema / properties / confirm / description
        Previous value: -"Leave out to get a preview. Set true only after the user explicitly approved the preview, together with preview_id."New value: +"Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id."
      • changedInput schema / properties / role / description
        Previous value: -"action=invite (required) or action=update: publisher, editor, or viewer. Admin is dashboard-only."New value: +"action=invite (required) or action=update: publisher, editor, or viewer."
    • Changedupdate_post5 fields changed
      • changedInput schema / properties / approval_action / description
        Previous value: -"Change client approval instead of editing the post. Owner or admin only. The actor is the API key user, never a brand guest. Send on its own."New value: +"Change client approval instead of editing the post. Send on its own."
      • changedInput schema / properties / media_url / description
        Previous value: -"Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved."New value: +"Media URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first."
      • changedInput schema / properties / media_urls / description
        Previous value: -"Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved."New value: +"Media URLs, handled like media_url."
      • changedInput schema / properties / platform_settings / description
        Previous value: -"Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples."New value: +"Platform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples."
      • changedInput schema / properties / settings / description
        Previous value: -"Post settings (same fields as platform_settings). For Instagram put first_comment, user_tags, collaborators, is_trial_reel, or caption_addon (poll or comment prompt, Facebook Login only, not Stories) here or in platform_settings. For an X Article put article ({ title, cover }) here or in platform_settings. Call list_platforms with view=schema and account_id for the field list."New value: +"Post settings. Instagram and X Article fields work here or in platform_settings: first_comment, user_tags, collaborators, is_trial_reel, caption_addon (poll or comment prompt; Facebook Login only, not Stories), article ({ title, cover }). Call list_platforms with view=schema and account_id for fields."
    • Addedupgrade_subscription
    • Changedvalidate_post4 fields changed
      • changedInput schema / properties / instagram_settings / description
        Previous value: -"Instagram-specific settings. Distinguish caption @mentions (put @username in caption) from native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."New value: +"Instagram-specific settings: native media tags (user_tags) and co-author invitations (collaborators). Call list_platforms with view=schema and account_id first."
      • changedInput schema / properties / media_url / description
        Previous value: -"Media URL. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. Short-lived signed URLs must still be live when this tool runs."New value: +"Media URL. Posterly storage URLs are used as-is; third-party URLs are copied into posterly storage first. Short-lived signed URLs must still be live when this tool runs."
      • changedInput schema / properties / media_urls / description
        Previous value: -"Media URLs. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved."New value: +"Media URLs, handled like media_url."
      • changedInput schema / properties / platform_settings / description
        Previous value: -"Platform-specific composer controls, flattened across all platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for the full field list and examples."New value: +"Platform-specific composer controls, flattened across platforms (unrelated fields ignored). Required: YouTube title; Pinterest board_id (cover_image_url also required for video Pins); Lemmy community. Accepted via passthrough but not listed below: Lemmy community/title, Dev.to canonical_url, Hashnode publication_id, Telegram parse_mode/disable_web_page_preview, Google Business post_type (STANDARD/EVENT/OFFER, alias topic_type), TikTok auto_add_music/photo_cover_index/media_type, Facebook post_type (incl. cover_photo), Mastodon language. Call list_platforms with view=schema and account_id for fields and examples."
  14. 1 tool update
    • Changedcreate_signed_upload1 field changed
      • addedInput schema / properties / pin_content_type
        Added value: +{
        +  "description": "Optional. true locks each slot to the declared content_type so a PUT with any other Content-Type fails with 403. Send the returned Content-Type header exactly.",
        +  "type": "boolean"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Schedule and manage social media posts across 13 platforms (Bluesky, Threads, Instagram, LinkedIn, Mastodon, YouTube, Facebook, Pinterest, Telegram, Nostr, X/Twitter, Discord, Tumblr and more). OAuth 2.0 + PKCE, 10 tools, draft-first workflow for AI agents.
    10
    22
    AGPL 3.0
  • A
    license
    A
    quality
    B
    maintenance
    The best free social media publishing and scheduling API. Publish to 11 platforms from a single API call. Schedule posts, upload media, track analytics, and automate your social media workflow.
    51
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to write, schedule, publish, and measure social media posts across LinkedIn, Bluesky, Mastodon, and YouTube, plus manage media and queue slots, through one OAuth URL with no install or API key. It also covers retrying, cancelling, restoring posts and reading analytics, with reversibility safeguards around irreversible publishing.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to upload and schedule videos, images, carousels, and text posts across 17 social platforms, read analytics, and reply to comments through a hosted OAuth connection.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources