posterly-mcp-server
Schedules and publishes Bluesky posts.
Schedules and publishes Dev.to posts.
Schedules and publishes Discord posts.
Schedules and publishes Facebook Page posts, and supports analytics and comment management.
Provides Google Business Profile integration for managing reviews, media, profile audits, and analytics.
Schedules and publishes Hashnode posts.
Schedules and publishes Instagram posts, with analytics and comment/DM management support.
Schedules and publishes Lemmy posts.
Schedules and publishes Mastodon posts.
Schedules and publishes Pinterest posts and provides analytics.
Schedules and publishes Slack posts.
Schedules and publishes Telegram posts.
Schedules and publishes Threads posts and provides analytics.
Schedules and publishes TikTok posts.
Schedules and publishes WordPress posts.
Schedules and publishes YouTube posts and provides analytics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@posterly-mcp-serverSchedule a post to Instagram and LinkedIn for tomorrow at 9am"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
posterly MCP server: Instagram, TikTok, LinkedIn and 15 more platforms
Schedule and publish social posts on 18 platforms from any MCP client.
posterly is a social media scheduler with a hosted MCP server. Connect Claude, ChatGPT, Cursor, Windsurf, Cline, or any MCP client and your assistant can list connected accounts, check a post with validate_post, schedule it with create_post, upload media, write captions, read analytics, reply to comments, and manage Google Business reviews. It covers Instagram, Facebook, TikTok, X, LinkedIn, YouTube, Pinterest, Threads, Google Business, Telegram, Bluesky, Discord, Slack, Mastodon, Dev.to, Hashnode, WordPress, and Lemmy. Use the hosted endpoint (https://www.poster.ly/api/mcp, OAuth sign-in) or run it locally with npx -y posterly-mcp-server@latest.
People looking for an Instagram MCP, a TikTok MCP, or a LinkedIn MCP can use this same server. It is one connection for all 18 platforms, not a separate server per network.
The installable package is posterly-mcp-server on npm. Source code: github.com/awpthorp/posterly-mcp-server. The official MCP Registry name is io.github.awpthorp/posterly. Smithery lists the same hosted endpoint: smithery.ai/servers/awpthorp/posterly.
What you need
Node.js 20 or newer, for the local
npxserver.A posterly plan with API and MCP access for authenticated tools.
New accounts that start from poster.ly/mcp get a plan and API and MCP in one Stripe subscription, with a 7-day free trial. A card is required and is charged on day 8 unless the paid plan starts sooner. An account that already had a trial is charged at checkout. Starter + API is $10/month.
The add-on on its own is $3/month on Starter, $4/month on new Pro (existing Pro customers stay at $3/month), $5/month on Power, and $29/month on Agency. Base plans start at $7/month. Combined monthly totals are $10, $19, $30, and $78.
After checkout, create a key at Dashboard, API and MCP if your client needs one. Hosted OAuth connectors sign in instead of pasting a key.
User-created API keys: Starter 1, Pro 2, Power 3, Agency 4.
Related MCP server: @fopost/mcp
Hosted endpoint
POST https://www.poster.ly/api/mcp
Use the www host. https://poster.ly/api/mcp redirects, and some connector clients do not follow that redirect.
Wire format: JSON-RPC 2.0 over one HTTPS POST. The response is a JSON body. This v1 endpoint does not open an SSE stream.
GET https://www.poster.ly/api/mcpreturns a short JSON capability hint and does not require auth.Auth: OAuth sign-in for Claude and ChatGPT custom connectors, or
Authorization: Bearer pst_live_...where the client accepts a header.Docs: poster.ly/mcp and MCP server docs.
Server card: /.well-known/mcp/server-card.json.
curl -s https://www.poster.ly/api/mcp \
-H "Authorization: Bearer pst_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Hosted tool calls are JSON only. Chat attachments never reach posterly. On ChatGPT web, Claude.ai, and Gemini web, ask for create_media_drop, open the returned https://www.poster.ly/drop/... link (up to 20 files per link), then call list_media. Clients that can upload bytes (Cursor, Claude Code, Codex) can use create_signed_upload (1 to 20 files per call) and PUT each file to its returned upload_url. Small images can use upload_media.
Create-post calls are limited to 100 requests per hour per key. create_posts_batch takes up to 25 posts in one confirmed request. Media writes and reads have separate limits.
create_post does not go out until you agree and the call includes confirmation (confirm: true). Comment replies, direct messages, Google review replies, and similar public or destructive actions return a preview first, then need the same fields again with that preview_id.
Source
This repository is a read-only mirror, published from the posterly monorepo. Issues are welcome. Pull requests are not merged here: an accepted change is reapplied in the posterly monorepo and arrives in the next sync.
git clone https://github.com/awpthorp/posterly-mcp-server.gitClients should use the npx block below, or the hosted URL. The clone is the public source, not a second install path.
Local server
{
"mcpServers": {
"posterly": {
"command": "npx",
"args": ["-y", "posterly-mcp-server@latest"],
"env": {
"POSTERLY_API_KEY": "pst_live_your_key_here"
}
}
}
}Leave out POSTERLY_API_KEY only when an assistant should start signup first. These public tools work before a key exists: whoami with view set to status, get_agent_signup_info, start_signup, and get_signup_session. They are on the local npm server, not on the hosted endpoint.
The local package exposes the full tool catalog. The hosted endpoint exposes the same catalog without the three signup tools. The current list is on poster.ly/mcp.
Claude
Custom connector (Claude chat, and the same connector in the Claude desktop app):
Open Settings, Connectors, Add custom connector. On claude.ai you can also start from the chat +, Connectors, Add connector, Add custom connector.
Name it posterly.
Paste
https://www.poster.ly/api/mcp.Choose Connect, sign in to posterly, and press Allow.
Leave the advanced OAuth client ID and secret empty.
Claude Desktop local config file: claude_desktop_config.json, using the npx block above.
Claude Code, hosted:
claude mcp add --transport http posterly https://www.poster.ly/api/mcpClaude Code, local stdio:
claude mcp add --scope user -e POSTERLY_API_KEY=pst_live_your_key_here posterly -- npx -y posterly-mcp-server@latestSetup pages: poster.ly/claude.
ChatGPT
ChatGPT web talks to the hosted endpoint only. Do not paste the npx config into ChatGPT.
On chatgpt.com open Settings, Security and login, and turn on Developer mode.
Open chatgpt.com/plugins, choose +, Create app, Create MCP App.
Set the server URL to
https://www.poster.ly/api/mcpand choose OAuth.Sign in to posterly.
Write actions (create_post and other writes) need ChatGPT Business, Enterprise, or Edu. Pro custom MCP is read and fetch only. Custom MCP is web only. There is no mobile MCP.
This is a custom app you add yourself. It is not a one-click directory listing.
Setup pages: poster.ly/chatgpt.
Cursor
Project file .cursor/mcp.json, or global file ~/.cursor/mcp.json. You can also add a server from Settings, MCP.
Local stdio (Cursor Desktop and the local CLI), the npx block above. That path can read a real file_path.
Hosted HTTP, for Cloud Agents, which cannot see a local npx process:
{
"mcpServers": {
"posterly": {
"url": "https://www.poster.ly/api/mcp",
"headers": {
"Authorization": "Bearer pst_live_your_key_here"
}
}
}
}OAuth is also supported on Cursor. SSE is not the posterly v1 transport.
Setup pages: poster.ly/cursor.
Windsurf, Cline, and Codex
Windsurf uses the same npx JSON in ~/.codeium/windsurf/mcp_config.json.
Cline, Continue, and Zed use that same JSON shape in their MCP settings.
Codex (the terminal, the IDE extension, and the Codex tab in the ChatGPT desktop app) shares ~/.codex/config.toml:
codex mcp add posterly --env POSTERLY_API_KEY=pst_live_your_key_here -- npx -y posterly-mcp-server@latest
codex mcp add posterly --url https://www.poster.ly/api/mcp
codex mcp listThe --url command is the hosted endpoint documented on the ChatGPT page. The posterly server answers with a single JSON-RPC body, not an SSE stream.
Tools
Tools sit in sets: core (accounts, posting, media, schedule, analytics, support), creative (AI image and video generation, post suggestions), inbox (comments and DMs), google_business (reviews, media, profile audit), admin (API keys, webhooks, workspace members, publishing pause), and billing (subscription changes). Signup tools are local only.
Real tool names include whoami, list_accounts, list_platforms, validate_post, create_post, create_posts_batch, list_posts, update_post, find_available_slot, upload_media, generate_captions, generate_image, list_analytics, list_comments, manage_comment, list_google_business_reviews, manage_google_business_review, and audit_google_business_profile.
The full list, with views and actions, is on poster.ly/mcp.
Analytics (list_analytics) currently supports Instagram, X, Facebook Pages, LinkedIn, Google Business Profile, Pinterest, YouTube, and Threads.
Links
Product and setup: https://www.poster.ly/mcp
Privacy: https://www.poster.ly/privacy
Terms: https://www.poster.ly/terms
Licence
MIT. See LICENSE.
Available Tools
73 toolsask_supportAInspect
Ask posterly Support AI an authenticated question using posterly docs plus read-only account/post diagnostics for the caller workspace. Requires POSTERLY_API_KEY with accounts:read and posts:read scopes. Human ticket creation requires request_human=true and confirm_escalation=true after explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | No | Optional post ID to inspect directly. | |
| page_url | No | Optional posterly page URL for context. | |
| question | Yes | ||
| workspace_id | No | Workspace to inspect. Omit to use the API-key scoped workspace or personal workspace. | |
| request_human | No | Ask for human review. Does not create a ticket unless confirm_escalation is also true. | |
| conversation_id | No | Continue a previous support conversation. | |
| confirm_escalation | No | Must be true after explicit user confirmation before a human support ticket can be created. | |
| referenced_post_ids | No | Optional post IDs to include in read-only diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations say readOnlyHint=false, destructiveHint=false, openWorldHint=true, and the description explains why a nominally diagnostic tool is not read-only: a human ticket can be created, but only with both request_human=true and confirm_escalation=true after explicit user confirmation. It also discloses the required auth scopes, which annotations cannot express. Missing only rate limits, cost, and whether the ticket creation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action before prerequisites and escalation rules, with no filler. Slight redundancy between 'for the caller workspace' and the workspace_id parameter description, but nothing wasteful enough to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers auth and the escalation safety gate well for an 8-parameter tool, but with no output schema the description never indicates what comes back (an answer plus diagnostics? a conversation handle?) or how conversation_id/workspace_id defaults interact. An agent knows the guardrails but not the shape of the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the schema already documents nearly every parameter, and the description adds mainly the two-flag escalation protocol that the schema fields also describe. It does not clarify the relationship between post_id and referenced_post_ids, or what conversation_id continuation changes about behavior, so it adds little beyond structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Ask posterly Support AI an authenticated question') and names the ingredients used ('posterly docs plus read-only account/post diagnostics for the caller workspace'). That is distinguishable from sibling feedback/status tools like submit_agent_feedback or posterly_status without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisite conditions (POSTERLY_API_KEY with accounts:read and posts:read) and the escalation gate (request_human + confirm_escalation after explicit user confirmation), which is genuine when-to guidance. It never says when to prefer this over submit_agent_feedback, submit_product_feedback, or posterly_status, so sibling routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_google_business_profileARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Google Business account ID from list_accounts. | |
| location_id | No | Google 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_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the safety profile is covered. The description adds meaningful context beyond that: it discloses the return structure and specific scoring rules (missing service areas or an area over 80 straight-line miles caps the score). It does not cover auth/permission needs or rate limits, so a 4 rather than 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and then the return payload; the section list is long but informative and the scoring caveat is placed last. Minor verbosity in the parenthetical section enumeration, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a good job explaining return values and scoring rules. However, the schema marks zero required parameters, and the description never clarifies that a location identifier (account_id or location_id) is needed to target the audit, leaving an ambiguity for a zero-required-arg tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions already distinguish account_id, location_id, and workspace_id in detail, including the warning not to use the ChIJ Place ID. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 what it returns (score, grade, section scores, recommendations). It is clearly distinct from list_/manage_ siblings by being an audit rather than a CRUD operation, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The audit framing implies when it is useful (checking profile completeness), but there is no explicit when-to-use/when-not guidance, no prerequisites, and no reference to the manage_google_business_location or list_google_business_locations alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_subscriptionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why the user is cancelling. Ask the user before calling; do not guess. | |
| confirm | Yes | Must be true after the user explicitly confirms the cancellation. | |
| feedback | No | Optional free-text detail the user gave about why they are cancelling. | |
| immediate | No | Cancel immediately instead of at period end. Defaults to false. Ignored for past_due and unpaid plans, which always end now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it declares the billing:write scope requirement, the default period-end scheduling for active and trialing plans, and the important exception that past_due and unpaid plans end immediately regardless of the immediate flag, dropping the unpaid renewal and stopping payment retries. The destructiveHint annotation is reinforced with a concrete confirmation gate rather than merely restated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the operation, then the destructive/permission warning, then the behavioral rules. Every sentence carries information, though the past_due paragraph is dense enough that it could be split for scanning; no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter destructive mutation with no output schema, the description covers safety gating, permission scope, timing behavior, and the plan-status exception. The only gap is what the call returns (e.g., effective cancellation date), which an agent would have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: reason must be sourced from the user, immediate=true is conditional on explicit user intent, and immediate is silently ignored for past_due/unpaid plans. It does not mention feedback, leaving that to the schema, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource scoped precisely to 'the authenticated user's posterly subscription', which separates it cleanly from pause_subscription, resume_subscription, and downgrade_subscription in the sibling list. An agent can identify the operation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions ('ALWAYS ask the user why they are cancelling FIRST', 'Only call after the user explicitly confirms') and a precise rule for the immediate flag ('only when the user explicitly wants an active plan cancelled right now'). It also implies the alternative paths (pause/downgrade) by constraining when cancellation is warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_accountAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pat | No | Hashnode: personal access token from Account Settings, Developer. | |
| handle | No | Bluesky: handle, for example posterly.bsky.social. | |
| api_key | No | Dev.to: API key from Settings, Extensions, DEV Community API Keys. | |
| chat_id | No | Telegram: target channel or group chat ID. | |
| instance | No | Lemmy: instance domain, for example lemmy.world. | |
| password | No | Lemmy: account password (TOTP-enabled accounts are not supported). | |
| platform | Yes | Credential-based connection target: telegram, bluesky, discord, wordpress, devto, hashnode, or lemmy. | |
| site_url | No | WordPress: site URL, e.g. https://blog.example.com. | |
| username | No | WordPress: username the application password belongs to. Lemmy: username or email. | |
| bot_token | No | Telegram: bot token from BotFather. | |
| webhook_url | No | Discord: channel webhook URL from channel settings, Integrations, Webhooks. | |
| app_password | No | Bluesky: app password from account settings. WordPress: application password from wp-admin Users, Profile, Application Passwords. | |
| workspace_id | No | Workspace to connect the account into. Workspace-scoped API keys ignore this. | |
| connect_session_id | No | Optional connect session ID to mark connected or failed based on the outcome. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true), yet the description adds real context beyond them: credentials transit the conversation and the user should be warned, scoped secrets are preferred, and connect_session_id optionally marks connected/failed based on outcome. It does not say what happens on partial success or how errors are surfaced, which keeps it just short of the top.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and scope lead, followed by prerequisite, credential preference, security warning, and the OAuth escape hatch. Every sentence carries decision-relevant information; nothing is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter credential tool with no output schema, the description covers what is needed: which platforms, how to determine required fields, which credential type to prefer, the user-facing security warning, and the sibling to use for OAuth. Return-value explanation is not required given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-parameter meaning is already documented, making 3 the baseline. The description adds value above that by telling the agent how to discover which credential fields a given platform needs (list_platforms with view=connect_link) and by signaling the per-platform credential taxonomy rather than a flat bag of 14 params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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) and immediately delimits the scope: credential-based platforms enumerated inline, and 'without a browser session' rules out the OAuth path. An agent can distinguish this from create_connect_session 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (credential platforms listed), an explicit when-not plus the alternative (OAuth platforms Instagram/X/LinkedIn -> create_connect_session), and a mandatory prerequisite step (call list_platforms with view=connect_link first). It even ranks credential types, preferring scoped secrets over primary passwords.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-readable key name. | |
| scopes | No | Scopes 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). | |
| confirm | Yes | Must be true after the user explicitly confirms that a new secret API key should be created. | |
| workspace_id | No | Optional workspace restriction. Workspace-scoped calling keys cannot create keys outside their workspace. | |
| expires_in_days | No | Optional expiry from now, up to 365 days. Omit for no expiry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish write/non-read-only, non-destructive, non-idempotent, closed-world, so the description is not obligated to restate them. It adds genuinely non-derivable behavior: the call mints a secret requiring confirmation, scopes are capped by the calling key's scopes, and team-management/portal permissions are deliberately never inherited and must be enabled in /dashboard/api. The one omission is what the response returns (i.e., that the secret itself is surfaced once).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose then the safety gate in caps, followed by tight constraint sentences. No filler, and the ordering mirrors the agent's decision path (what it does, whether to call it, what it will and won't grant).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five fully documented parameters and no output schema mean the definition need only cover intent, safety gating, and scope constraints, all of which are present. Nothing an agent needs to decide whether and how to invoke it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds real meaning beyond the schema: the inheritance rule for 'scopes' relative to the calling dashboard key and the explicit carve-out that members:read/members:write and client-portal sign-in-link permissions are never copied or granted through this tool. Those are semantic constraints an agent could not infer from the field descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Create a new posterly API key') plus the actor scope ('for the authenticated user'), which cleanly separates it from sibling delete_api_key and the dashboard/workspace tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gates usage ('only use after explicit user confirmation') and names when it cannot be used ('OAuth and managed assistant tokens cannot mint keys'), which covers the critical alternatives. It stops short of naming a sibling alternative for the excluded permission cases, instead pointing to the dashboard UI.
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 posterly dashboard handoff session for connecting a social account. Send the secure connection URL to the user, then poll list_accounts with view=connect_session to narrate progress. Do not ask for social media passwords or OAuth codes; posterly handles those browser steps.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | When true, include the raw connect session JSON for debugging. Keep false for normal user-facing agent flows. | |
| platform | Yes | Connection target such as instagram, meta, linkedin_page, twitter, google_business, telegram, bluesky, discord, mastodon, devto, hashnode, wordpress, or lemmy. | |
| auto_start | No | When true, the dashboard starts the provider flow after the user opens the URL. Defaults to true. | |
| workspace_id | No | Workspace to connect the account into. Workspace-scoped API keys ignore this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint, non-idempotent, non-destructive. The description adds real context beyond them: the session is short-lived, the URL is secure and meant to be handed to the user, and the browser/OAuth steps happen outside the agent. It does not state how long the session lives or that repeat calls mint new sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool produces, then the follow-up action, then the guardrail. No filler or repetition of schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 that a connection URL is the payload to relay and how to track progress afterwards — enough to call it correctly. Missing only edge-case detail such as what to do if the session expires or the user never opens the URL.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so platform/auto_start/workspace_id/debug are already documented; baseline 3 applies. The description adds only indirect meaning ('a social account' implies platform) and never touches auto_start, workspace_id, or debug.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Create a short-lived posterly dashboard handoff session for connecting a social account' — and the scope (per-account handoff, short-lived) separates it from siblings like connect_account and get_signup_session 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit follow-up workflow ('send the URL to the user, then poll list_accounts with view=connect_session to narrate progress') and a clear prohibition against asking for passwords/OAuth codes. It stops short of naming when a caller should prefer connect_account or get_signup_session 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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Optional filename hint for the user, e.g. launch-video.mp4 | |
| max_files | No | How many files the drop can accept. Default 10, max 20. | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, and non-idempotent, so the description need not re-state that this is a write. It adds real context instead: no dashboard login required for the uploader, a 20-file link cap, an explicit accepted-format whitelist with the HEIC exclusion, and a 50MB size ceiling. It stops short of saying whether drops expire or can be reused, which would complete the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the return value are front-loaded in the first sentence, and the workflow instruction follows immediately. The middle sentences are dense but each carries a real constraint; only the trailing sibling exclusions feel slightly tacked-on rather than integrated into the flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return value and does so concretely (drop_url with its URL shape), plus the follow-up call needed after the user uploads. For a mutation tool with three optional parameters, that covers everything an agent needs to call it and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, and the description adds no new meaning about filename, max_files, or workspace_id. The format and size limits it does supply are tool-level constraints rather than 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.
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 human drop page') and defines its scope precisely: an upload link for external users, up to 20 files, no dashboard login. It explicitly separates itself from two siblings by name ('not the chat paperclip and not create_signed_upload'), so an agent can pick it out 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the full operating sequence -- create the drop, send drop_url to the user, wait, then call list_media -- which is the when-to-use guidance an agent actually needs. It also states the negative case by naming the two alternatives it is not, so routing decisions are fully determined.
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 a social media post. This is a DESTRUCTIVE WRITE that creates content on the user's real social accounts - once scheduled_at passes, it will be posted publicly and cannot be un-posted.
REQUIRED BEFORE CALLING:
Call
whoamiat the start of any new session to confirm which workspace and user you are acting for.Show the user a preview containing ALL of: account(s) and platform(s), final caption text, scheduled time (in the user's timezone), media attached (if any), and workspace name.
Get explicit confirmation from the user (e.g. "post it", "yes schedule that", "looks good") BEFORE calling this tool. Do NOT infer consent from earlier instructions like "post about X every Monday" - confirm each individual post or the entire batch.
If scheduling multiple posts in one turn, list every post first and confirm the batch as a whole, then prefer
create_posts_batchso they are created in one API request.
AFTER CALLING: Tell the user the post was created, include the posterly dashboard link returned by the tool, and offer the next natural action. Do not narrate raw HTTP, curl, or API plumbing.
Provide either account_id OR username+platform to identify the account. If scheduled_at is omitted, the post publishes immediately. If workspace_id is omitted, the server resolves one from the social account, falling back to the caller's default (personal) workspace - pass workspace_id explicitly if the user has more than one workspace.
MEDIA URLS: Posterly storage URLs are used as-is. Third-party HTTP(S) media URLs are copied into posterly storage before the post is saved, so API-created posts do not later fail on expired signed URLs. Short-lived signed URLs must still be live when this tool runs. You can also call upload_media with url first if you want to upload once and reuse the returned posterly URL across posts.
THREADS: Pass thread_posts (an array of 2+ strings) to schedule a multi-post thread on X (Twitter) or Threads (Meta). The first entry is the lead post; the rest are published as replies in the same chain. X entries are capped at 280 characters each (4000 for verified, 25000 for organization accounts); Threads entries are capped at 500 characters each. When thread_posts is set, caption is ignored.
X ARTICLES: To publish on X as a long-form Article, pass platform_settings.article ({ title, cover?: "first_image" | "none" }) for an X account. The caption becomes the Article body and is written as Markdown (headings, bold, italic, lists, quotes, code blocks, tables, dividers). Reference attached images with . Needs an X Premium account; polls, threads, paid partnership, video, and GIFs are not allowed with an Article.
PLATFORM SETTINGS: Pass platform_settings for composer-equivalent controls: Facebook story/reel/backgrounds, YouTube title/privacy/thumbnail/brandPartner, LinkedIn document titles/mentions/polls/content_call_to_action_label (including BUY_NOW and SHOP_NOW), TikTok direct-post privacy/toggles/commercial disclosure, Pinterest board/title/link/product_tags, GBP event/offer/CTA/recurrence, X reply settings/polls/paid_partnership, Threads reply controls/text attachments/ghost posts/spoilers/reply approvals/GIPHY, Telegram polls/buttons/video cover/live photo, Slack markdown/blocks, Mastodon visibility/quote/poll (media+poll allowed), and Instagram feed/story/reel/carousel/native media tags/collaborators/first comments/trial Reels/is_ai_generated/audio_id/caption add-ons. Instagram caption add-ons (caption_addon, or poll_attachment / is_comment_prompt_used) need a Facebook Login account, a non-empty caption, and a feed photo, Reel, or carousel parent. Stories are rejected. A poll and a comment prompt cannot be combined. For Instagram, @username in caption is only a caption mention; user_tags creates native media tags and collaborators sends co-author invitations only when the selected Meta-linked account reports those capabilities. Call list_platforms with view: "schema" and the account ID first. instagram_settings remains as a backwards-compatible alias.
TIKTOK MEDIA: TikTok supports a single video or a photo slideshow of 1 to 35 images, never multiple videos. Image media auto-detects as a slideshow, so you usually do not set post_type or media_type for photos and every image is posted. Pass platform_settings.media_type: "PHOTO" to force a slideshow explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | The post caption/text content. 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. | |
| confirm | Yes | Must be true after explicit user confirmation of the post/account/workspace/schedule. | |
| platform | No | Platform name (required with username). Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Aliases such as x, gmb, and instagram-standalone are accepted. | |
| username | No | Account username (alternative to account_id) | |
| media_url | No | Media URL to attach. 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. For threads, attaches to the lead post only. | |
| post_type | No | Optional post type: text, image, video, carousel, reel, story, story_series, document, photo, cover_photo, x_thread, or threads_thread. Omit it for auto-detection from media. For TikTok photo posts, use photo/image/carousel or omit it; for Facebook cover photos, use cover_photo or platform_settings.post_type. | |
| account_id | No | Social account ID (from list_accounts) | |
| media_urls | No | Multiple media URLs for carousel or multi-image posts. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. For TikTok, 2 or more images auto-create a photo slideshow (up to 35 images) and every image is posted. | |
| scheduled_at | No | ISO 8601 datetime for scheduling (e.g. 2026-03-05T09:00:00Z). Omit for immediate publish. | |
| thread_posts | No | For X or Threads only: array of 2+ strings, one per post in the thread. The first entry leads, the rest reply in order. When set, the platform must be twitter or threads. | |
| workspace_id | No | Workspace ID to assign the post to (from whoami). If omitted, uses the account's workspace or the caller's default workspace. | |
| platform_settings | No | Platform-specific settings for the selected account. Use this for non-Instagram settings and prefer it over raw metadata. | |
| instagram_settings | No | Instagram-specific settings. If “tag” is ambiguous, distinguish caption @mentions (put @username in caption), native media tags (user_tags), and co-author invitations (collaborators). Native media tags work with eligible direct or Meta-linked accounts; collaborators require an eligible Meta-linked account. Call list_platforms with view=schema and account_id first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is unusually rich about consequences: public posting is irreversible after scheduled_at, third-party media URLs are copied into posterly storage, signed URLs must be live at call time, X thread character caps, and Article restrictions. However, it labels itself 'This is a DESTRUCTIVE WRITE' while annotations declare destructiveHint=false, a direct conflict in the safety signal an agent uses to decide how much caution to apply. The contradiction is the reason this dimension is scored low despite the otherwise strong disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly: the irreversible-write warning and the confirmation workflow come first, where an agent will actually read them. The PLATFORM SETTINGS paragraph is a long, comma-spliced enumeration of many platforms that is harder to scan than the rest, but each block is labeled and no sentence is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with deeply nested platform objects and no output schema, the description covers what is needed: identification of the account, scheduling semantics, media handling, threads, Articles, and even post-call behavior (report the dashboard link, do not narrate raw HTTP). Nothing essential to a correct first invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description still adds cross-parameter semantics the schema cannot express: account_id OR username+platform as alternative identification, workspace_id fallback order (account's workspace, then caller's default), scheduled_at omission meaning immediate publish, caption being ignored when thread_posts is set, and per-platform constraints on platform_settings and instagram_settings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb pair and resource: 'Schedule or immediately publish a social media post.' An agent immediately knows this is the single-post creation tool and can distinguish it from create_posts_batch (explicitly named later), validate_post, and update_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit pre-call sequence (whoami, preview, explicit confirmation, then batch preference) and names alternatives: use create_posts_batch for multiple posts in one turn, upload_media first to reuse a posterly URL, and list_platforms with view:'schema' before platform_settings. It also states a negative rule — do not infer consent from earlier standing instructions.
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. This is a DESTRUCTIVE WRITE that creates content on the user's real social accounts - once scheduled_at passes, posts may go public and cannot be un-posted.
REQUIRED BEFORE CALLING:
Call
whoamiat the start of any new session to confirm which workspace and user you are acting for.Show the user a preview of EVERY post: account/platform, final caption or thread text, scheduled time in their timezone, media, platform settings, and workspace.
Get explicit confirmation for the whole batch before calling. Do not infer consent from an earlier content plan.
AFTER CALLING: Summarize the batch result in natural language, include the posterly dashboard link returned by the tool, and avoid narrating raw HTTP, curl, or API plumbing.
Each item accepts the same fields as create_post, including thread_posts, platform_settings, instagram_settings, media URLs, and workspace_id. The endpoint may partially succeed; failed items are returned with their index.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | Posts to create. Each item uses the same schema as create_post. | |
| confirm | Yes | Must be true after explicit user confirmation of every post in the batch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The content itself is unusually rich beyond the annotations: irreversible public posting after scheduled_at passes, partial-batch success with failed items returned by index, and a required confirm flag. However, it labels itself a "DESTRUCTIVE WRITE" while the annotations declare destructiveHint=false, a direct inconsistency that forces the agent to choose between structured metadata and prose; the disclosure is the safer of the two, so this is not a full-severity contradiction, but it is a real mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the destructive warning, then organized under REQUIRED BEFORE CALLING and AFTER CALLING headers. Every sentence carries operational weight; nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-blast-radius batch mutation with no output schema, the description covers the safety preconditions, the irreversibility window, the partial-failure return shape, and what the agent should report back including the dashboard link. An agent has enough to call this correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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-reference meaning the schema cannot express: each array item accepts the same fields as create_post, including thread_posts, platform_settings, instagram_settings, media URLs, and workspace_id. It does not explain the confirm semantics beyond the schema's own const/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.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb, resource, and scope: "Create 1-25 scheduled or immediate social posts in one API request." That immediately separates it from the single-post sibling create_post and from validate_post, and the batching limit is stated up front.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use sequencing: call whoami first, preview every post with named fields (account/platform, caption, timezone, media, settings, workspace), then obtain explicit confirmation and never infer consent from an earlier plan. It also names the post-call behavior and points at create_post as the per-item field reference.
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). Pinning is available per request with pin_content_type: true, which locks each slot to the content_type you declare (a PUT with any other Content-Type then fails with 403). posterly may turn it on by default in the future, so always send the Content-Type header returned with the slot. Slots expire in 15 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Single file: size in bytes. Omit when using files. | |
| files | No | Batch: 1 to 20 {filename, content_type, size}. Use instead of the single-file fields. | |
| filename | No | Single file: filename with extension, e.g. launch-video.mp4. Omit when using files. | |
| content_type | No | Single file: MIME type, e.g. video/mp4. Omit when using files. | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. | |
| pin_content_type | No | Optional. true locks each slot to the declared content_type; a PUT with any other Content-Type fails with 403. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false), the description discloses the real behavioral contract: PUT raw bytes to upload_url with the returned headers, 15-minute slot expiry, 403 on Content-Type mismatch under pinning, per-file in-place failure reporting, HEIC rejection, and the 50MB ceiling. These are exactly the operational facts an agent cannot derive 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, limits and formats are front-loaded, and the dense paragraph is almost entirely load-bearing operational detail. Minor waste exists — the pin_content_type 403 behavior appears both in the description and in the schema parameter text — and the block would scan better as short sentences or lines.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema, the description supplies the full round trip: accepted formats, size cap, slot semantics, the PUT step with headers, expiry window, and how the resulting public_url feeds create_post for both regular media and LinkedIn documents. Nothing essential to a correct first invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds meaning by framing filename/content_type/size and files as mutually exclusive modes ("omit when using files" / "use instead of") and by explaining that the files array yields one slot per entry with failures reported in place. It restates the pin_content_type 403 rule already in the schema, which caps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Create signed upload URLs") and immediately scopes it by asset class ("larger images, videos or PDFs") and batch size. It also names the downstream consumers (create_post / create_posts_batch), so an agent can place the tool in the workflow 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the two calling modes (single-file fields vs. files array) and the post-call next step, including the PDF-specific path (post_type document). It does not explicitly compare against sibling media tools like upload_media or create_media_drop, so the agent must infer why this exists beyond "larger" files — that keeps it 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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS webhook endpoint URL. Localhost HTTP is allowed by the API for development. | |
| events | No | Events to deliver. Defaults to core post lifecycle events. | |
| confirm | Yes | Must be true after the user explicitly confirms webhook creation. | |
| is_active | No | Defaults to true. | |
| description | No | ||
| workspace_id | No | Optional workspace filter. Omit for all workspaces owned by the API key user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds real context beyond them: outbound side effects to an external endpoint, a required user-confirmation gate, and the fact that the signing secret is returned only once in the response. It stops short of describing delivery retry behavior or whether an inactive webhook still counts as created.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing distinct work: purpose, safety protocol, and return-value caveat. The safety-critical confirmation instruction is placed prominently before any other detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation with no output schema, the description covers the essential risks and notes that the signing secret appears once in the response. Minor gaps remain around default event behavior and what the response contains besides the secret, but the agent has enough to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema already documents url, events defaults, is_active default, workspace_id scoping, and the confirm const. The description reinforces the significance of url/workspace/events/is_active and the confirmation meaning of confirm, but adds little syntax or constraint detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb+resource ('Create a webhook subscription') and scopes it to post/account/analytics events, so the agent knows exactly what is produced. It does not explicitly name siblings like manage_webhook or list_webhooks, so the create-vs-manage boundary must be inferred from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: display target URL, workspace, events, and active state, then obtain explicit confirmation before calling. That is strong guidance for the moment of invocation, though it never states when to prefer this over manage_webhook for edits or how it relates to list_webhooks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_api_keyADestructiveIdempotentInspect
Revoke a posterly API key owned by the authenticated user. DESTRUCTIVE: call whoami or use a known key ID, 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.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | API key ID to revoke. This is the API key resource ID, not the secret pst_live_ value. | |
| confirm | Yes | Must be true after the user explicitly confirms API key revocation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and idempotentHint=true, and the description adds value beyond that: it flags DESTRUCTIVE in-text and lists the three key classes that cannot be revoked (self-authenticating key, OAuth-issued keys, managed assistant keys), which is not derivable from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the verb and an uppercase DESTRUCTIVE warning, followed by the procedure and then the exclusion list. Every sentence carries distinct, actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 definition supplies everything needed: identity of the resource, safety procedure, failure/exclusion conditions, and confirmation gating. No material gap remains for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that key_id is a UUID resource ID rather than a pst_live_ secret and that confirm must be true after explicit consent. The description reinforces the confirmation flow but adds no parameter detail beyond what the schema provides, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Revoke a posterly API key') plus an ownership scope ('owned by the authenticated user'), which cleanly distinguishes it from create_api_key and other account tools. Nothing about the operation is ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit pre-call procedure (call whoami or use a known key ID, show the user the ID/prefix/name, get explicit confirmation), names an alternative tool (whoami), and enumerates exclusion cases. An agent knows both when to call it and when it will fail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postADestructiveIdempotentInspect
Delete posts. DESTRUCTIVE and IRREVERSIBLE: deleted posts and captions cannot be recovered. post_id: delete one post; fetch it with get_post first, show the user what will be deleted (caption, account, scheduled time), and pass confirm=true only after explicit confirmation ("yes delete it", "remove it"). 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. Never delete several posts one by one without listing each and confirming the full list.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | post_id: true after explicit user confirmation of the deletion. group_id: leave out to get a preview; true only with the preview_id after the user approved it. | |
| post_id | No | Delete this one post. | |
| group_id | No | Delete every unpublished post in this group or release instead. Never deletes published posts. | |
| preview_id | No | group_id: the preview_id from the preview call. Required with confirm: true. | |
| delete_mode | No | posterly removes only the record; platform also takes down live content and requires confirm_published=true. | |
| confirm_published | No | With post_id only. True only after the user explicitly confirms taking a live post down. Required with delete_mode=platform. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds material behavior beyond them: irreversibility of posts and captions, the rule that a currently-publishing post is never deleted, that live takedown needs delete_mode=platform plus confirm_published=true, and that refusals keep the record. It also discloses platform authorization requirements (Threads requires threads_delete, YouTube requires youtube.force-ssl, 'upload alone is insufficient'), which is the kind of prerequisite an agent cannot 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The destructive warning and the two modes are front-loaded, and nearly every sentence carries operational content. It is dense and runs long, with some duplication of the schema's confirm/preview_id wording, but there is no filler prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-mode tool with no output schema, the description covers the preview return value ('call without confirm to get a preview and preview_id'), the confirm loop, platform-specific authorization, and the edge cases (publishing post, published post with no live URL). An agent has everything needed to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 by explaining that group_id matches a caller-defined group_id, post_group_id, api_group_id, or release_id, and by spelling out the interaction between delete_mode and confirm_published. The only shortfall is that confirm/preview_id behavior is largely restated rather than extended.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Delete posts') and immediately splits the tool into its two operating modes (post_id single delete vs group_id bulk delete), which lets an agent distinguish it from get_post and update_post without opening any schema. Scope limits are stated explicitly, e.g. 'A group delete never removes published posts.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use procedure: fetch with `get_post` first, show caption/account/scheduled time, and pass confirm=true only after explicit confirmation with example phrases. It also names the preview-then-confirm flow for group deletes and an exclusion ('Never delete several posts one by one without listing each and confirming the full list').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_accountADestructiveIdempotentInspect
Disconnect a connected social account from posterly. DESTRUCTIVE and IRREVERSIBLE: removes the account connection, emits account.disconnected webhooks, and may transfer Instagram scheduled posts to a replacement account.
REQUIRED BEFORE CALLING: Call list_accounts first, show the user the exact platform, username, account ID, and workspace that will be disconnected, then get explicit confirmation. Pass confirm=true only after that confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true after explicit user confirmation. | |
| account_id | Yes | Connected social account ID from list_accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, but the description goes further by naming the concrete consequences: the connection is removed, account.disconnected webhooks fire, and Instagram scheduled posts may be transferred to a replacement account. That side-effect detail is unavailable anywhere in the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its destructiveness, then a clearly separated REQUIRED BEFORE CALLING block for the precondition. No filler sentences; each clause carries either a side effect or a gating rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation with no output schema, the description covers consequences, the confirmation gate, and the prerequisite discovery call. Nothing an agent needs in order to invoke this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are self-documenting, so the baseline is 3. The description adds a small amount by tying confirm to a specific gating workflow ('only after that confirmation') and anchoring account_id to list_accounts, though it largely restates the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Disconnect a connected social account from posterly') and is clearly the inverse of the sibling connect_account. An agent can distinguish it from account-adjacent tools like manage_extra_account or list_accounts 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition sequence: call list_accounts first, surface platform/username/account ID/workspace, obtain explicit user confirmation, then pass confirm=true. This is a when-and-how-to-use rule with no inference required, and the implicit alternative (connect_account) is obvious from the naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismiss_suggestionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| save_as_draft | No | True saves the suggestion as an unpublished draft and does not dismiss it. Omit to dismiss. | |
| suggestion_id | Yes | Suggestion ID from list_post_suggestions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint and idempotentHint, but the description adds real context beyond them: a draft is not scheduled and nothing is published, and already-converted suggestions are protected from dismissal or overwrite. It still says nothing about the effect on the originating suggestion record or whether a dismissal can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary action and its alternative, then the safety requirement. The final sentence ('Never dismisses, and does not overwrite, a suggestion that was already turned into a post') is slightly convoluted and could be tighter, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the confirmation requirement, and the protected-record case. Only the result of a successful call (what the agent sees back) is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the 3 baseline applies, and the description does earn more by explaining the consequence of save_as_draft (unpublished, not scheduled, nothing published) rather than just restating that it saves a draft. suggestion_id is left to the schema, which already points to list_post_suggestions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (dismiss) and resource (a proactive post suggestion) plus a second explicit mode (save_as_draft converts it to an unpublished draft). The dual behavior is unambiguous and clearly distinct from the listing sibling referenced via suggestion_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use condition for both modes and a hard prerequisite ('WRITE: confirm the exact suggestion with the user first'), plus an exclusion for suggestions already converted to a post. It does not name an alternative tool for handling suggestions (e.g. list_post_suggestions), so it falls 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.
downgrade_subscriptionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Optional explicit target tier. Omit to drop one tier automatically. | |
| confirm | Yes | Must be true after the user explicitly confirms the downgrade. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: lower limits and credits apply immediately, the lower price starts at the next renewal, and the current period is not refunded. This is exactly the kind of consequence an agent needs before invoking a destructive billing mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, with the core action first and timing, refund, permission, and confirmation constraints following. Every clause carries operational meaning for a destructive billing action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive subscription mutation with no output schema, the description covers timing effects, refund behavior, directionality, permission requirements, and confirmation requirements. Nothing essential for safe invocation appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the optional target tier and required confirmation are already documented in the schema. The description reinforces that the target must be lower and that confirmation is explicit, but adds no syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: downgrade the subscription one tier or to an explicit lower tier. It clearly distinguishes this from upward, cancellation, pause, and resume operations through 'strictly downward only.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong usage constraints: downward moves only, requires billing:write, and must be called only after explicit user confirmation. It does not explicitly name upgrade_subscription or cancel_subscription as alternatives, but the downward-only scope makes the boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_available_slotARead-onlyIdempotentInspect
Find available time slots for posting. Respects a 1-hour gap between posts and preferred hours (8am-10pm in the given timezone). Returns up to 10 slots. IMPORTANT: pass a timezone explicitly - default is America/New_York and slots will be off if the user is elsewhere. Each slot includes the UTC instant to pass as scheduled_at. Pass workspace_id to only avoid collisions with posts in that workspace. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of slots to return (max 10). Default 5 for next_free, 3 for best_engagement. | |
| strategy | No | next_free (default): earliest free slots. best_engagement: best times by engagement (requires account_ids). | |
| timezone | No | IANA timezone (e.g. Asia/Dubai, Europe/London). Defaults to America/New_York - pass the user's actual timezone or slots will be wrong. | |
| account_ids | No | Filter slots for specific account IDs | |
| workspace_id | No | Scope slot-finding to a single workspace (get IDs via whoami). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, idempotent, non-destructive operation. The description adds substantial behavior beyond that: a one-hour gap between posts, preferred posting hours of 8am–10pm, a cap of 10 slots, the default timezone pitfall, the UTC instant returned for scheduled_at, and the ranking behavior of best_engagement with star ratings and reasons.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and packs important constraints into a single dense paragraph. It is efficient, though the density makes it slightly harder to scan than an ideally structured definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five optional parameters, no output schema, and annotations covering safety, the description supplies the missing operational context: return format, timezone risk, strategy requirements, and scoping behavior. An agent has enough information to call the tool correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters, making 3 the baseline. The description still adds meaning by explaining cross-parameter dependencies (best_engagement requires account_ids) and the differing default counts between strategies, which the schema only partially conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: "Find available time slots for posting." It immediately distinguishes itself from post-creation siblings like create_post and scheduling tools by focusing on slot discovery, and it names the two strategies so an agent can tell what kind of result to expect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage conditions: pass timezone explicitly, use workspace_id to scope collision avoidance, and use best_engagement only with account_ids. It does not explicitly name alternative tools or state when not to use this tool, but the context is otherwise clear.
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 or schedule posts. After the user chooses final copy, pass it to create_post or create_posts_batch.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | generate | |
| tone | No | ||
| brief | No | What the post is about. Recommended for generate mode. | |
| count | No | ||
| platforms | Yes | Target platforms such as instagram, linkedin, twitter, tiktok, youtube, pinterest, or google_business. | |
| allow_emojis | No | ||
| workspace_id | No | ||
| preserve_links | No | ||
| source_caption | No | Required when mode=adapt. The master caption to adapt. | |
| source_platform | No | ||
| hashtag_strategy | No | smart | |
| preserve_mentions | No | ||
| social_account_id | No | Optional connected account ID for brand voice and workspace billing context. | |
| manual_brand_voice | No | Use when posterly asks for brand voice input. | |
| preserve_call_to_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false and openWorldHint=true, and the description adds the critical non-obvious context that calls consume AI Caption Assist quota and produce suggestions only. It does not say whether quota is charged per call or per platform, nor whether repeated calls re-consume quota (relevant given idempotentHint=false), which keeps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences with zero filler. The capability statement comes first, followed by cost/output behavior and then the handoff instruction, which is the right order of priority.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 brand-voice object and no output schema, the description covers purpose, cost, and handoff well but leaves the caller without any sense of the returned suggestion shape or how mode=adapt differs operationally. It is adequate for routing, not for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 15 parameters and only 33% schema description coverage, the description needs to carry most of the semantic load, but it only weakly implies multi-platform input ("one or more social platforms"). It explains nothing about mode, tone, hashtag_strategy, brand voice, or the preservation flags, so the majority of undocumented parameters remain unguided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: "Generate or adapt AI caption suggestions for one or more social platforms." It distinguishes the two modes (generate/adapt) and explicitly separates itself from post creation, so an agent can tell it apart from create_post or generate_image 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states both the when-not ("returns options only; it does not create or schedule posts") and the follow-up alternative ("pass it to create_post or create_posts_batch"). This gives an agent a complete workflow boundary rather than leaving sequencing to inference.
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 until status is completed, then pass urls to create_post as media_url / media_urls. Gemini thinking high does not change the credit price.
COSTS CREDITS. Every call consumes part of the user's monthly AI image quota (or purchased credits once the quota is exhausted). Do NOT call speculatively - always describe the image you're about to generate (subject, style, aspect ratio, quality/thinking, resolution) to the user and get confirmation before calling.
If the user is over their plan limit and has no credits, this tool returns a 402 with upgrade info. Surface that message verbatim - do not retry.
Common aspect ratios by platform: • Instagram feed / LinkedIn: 1:1 (square) or 4:5 (portrait) • Instagram Story/Reel, TikTok, YouTube Shorts: 9:16 • YouTube thumbnail, Twitter cards, landscape feed: 16:9 • Pinterest: 2:3
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Google-only. lite (8 credits, 1K only) suits drafts; flash (default, Nano Banana 2.1, 15 at 1K) balances quality and cost; pro (30 at 1K) is highest quality. Ignored for xAI. | |
| style | No | Preset style. Default photographic. Use youtube_thumbnail / reel_cover for platform-optimized covers; review_background for testimonial backgrounds. | |
| prompt | Yes | Detailed image description. 5-4000 characters. Describe subject, scene, lighting, mood, and style. | |
| confirm | Yes | Must be true after explicit user confirmation of subject, style, aspect ratio, quality, and credit use. | |
| quality | No | Google: high turns on Gemini thinking (dashboard thinkingLevel=high). low/medium leave thinking minimal unless thinking_level is set. xAI: low or medium credit tiers; high is invalid. | |
| provider | No | Image provider. Default google. Use xai for Grok Imagine Image 2.0. | |
| resolution | No | Output resolution. Default 1K. xAI supports 1K/2K only. Google flash (Nano Banana 2.1): 15/23/35 credits at 1K/2K/4K. 512 is no longer available. Pro: 30 at 1K-2K, 55 at 4K. | |
| variations | No | How many variations to generate. Default 1. Each variation costs credits separately - prefer 1 unless the user explicitly wants options. | |
| aspect_ratio | No | Aspect ratio. Default 1:1. Pick based on target platform (see tool description). | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. | |
| thinking_level | No | Google flash/lite only. Gemini image quality control. minimal is fastest; high is for infographics, grounded scenes, and harder layouts. Pro reasons automatically. Overrides quality when both are set. | |
| reference_image_urls | No | Google only. Up to 14 HTTPS image URLs used as references (logo, product, style lock). Same as dashboard reference images. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag non-readonly, open-world, non-idempotent. The description adds the critical behavior annotations don't cover: every call consumes quota/credits, variations cost separately, a 402 means over-limit with no retry, and the message should be surfaced verbatim. That is exactly the context an agent needs before a paid, non-idempotent call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, job flow, and cost warning before the bulleted aspect-ratio reference, so the important parts are not buried. The platform bullet list is somewhat long but each line maps a real decision to a concrete ratio, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, asynchronous, credit-consuming generation tool with no output schema, the description covers the full lifecycle (queue, poll, hand off), the cost/confirmation gate, and the over-limit failure mode. Nothing an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the field descriptions are already detailed (credit tiers per model/resolution, thinking_level precedence over quality, xAI constraints). The description still adds value by supplying the platform-to-aspect-ratio mapping that the aspect_ratio field explicitly defers to ('see tool description').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 image job') plus the underlying providers (Nano Banana/Gemini, Grok Imagine/xAI), and immediately declares the return value (job_id). This clearly separates it from the nearby generate_video and upload_media siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit end-to-end workflow: call this, poll list_jobs with type=image, then feed urls into create_post as media_url/media_urls. It also names a when-not-to-call rule ('Do NOT call speculatively') and the confirmation prerequisite.
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 generation 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. Grok supports 1 to 15 seconds and 480p to 1080p; reference-to-video is capped at 720p. Poll list_jobs with type=video for status and final video_url.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | fast | |
| prompt | Yes | ||
| confirm | Yes | Must be true after explicit user confirmation of prompt, model, duration, resolution, and credit cost. | |
| provider | No | ||
| image_url | No | ||
| resolution | No | 720p | |
| aspect_ratio | No | 16:9 | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. | |
| end_image_url | No | ||
| generate_audio | No | Google can disable generated audio. xAI Grok includes audio and requires this to remain true. | |
| negative_prompt | No | ||
| duration_seconds | No | ||
| reference_images | No | ||
| source_video_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses the credit cost, the mandatory user-confirmation gate, provider-specific constraints (Grok 1-15s and 480p-1080p, reference-to-video capped at 720p), and that the call is asynchronous and must be polled via list_jobs for the final video_url. That is a lot of behavior an agent could not infer from readOnlyHint=false / openWorldHint=true alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose, the credit/confirmation warning in caps, then provider constraints and the polling instruction. Front-loaded with the highest-risk information (it costs money) and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, non-idempotent, open-world mutation with no output schema, it covers the decision-critical pieces: cost, confirmation, provider limits, and how to retrieve results. Gaps remain around the model tier enum and the image/end-image/source-video input modes, which an agent would have to guess from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 carries a heavy burden. It adds meaning for provider, duration, resolution, audio, and reference-image limits, but says nothing about model (lite/fast/standard), workspace_id, negative_prompt, image_url, end_image_url, or source_video_url, leaving roughly half the surface undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Queue an AI video generation job with Google Veo 3.1 or xAI Grok Imagine Video 1.5" names a specific verb, resource, and the two backing models, which separates it cleanly from generate_image and get_video_options 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition (confirm provider, prompt, duration, resolution, aspect ratio, audio, and credit cost with the user before calling) and names list_jobs with type=video as the follow-up step. It does not contrast itself with siblings like run_video_function or get_video_options, so routing between video tools is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_signup_infoARead-onlyIdempotentInspect
Explain how to use posterly MCP for agent-led signup before an API key exists, including the safe human-in-the-browser boundaries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered structurally. The description adds genuinely new context: this is an instructional tool and it covers 'safe human-in-the-browser boundaries', which tells the agent a human must act in a browser at some steps. It does not say what form the explanation comes back in (text vs. structured steps), a minor gap for a no-output-schema tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and purpose, with the only additional clause ('including the safe human-in-the-browser boundaries') earning its place by flagging the human-interaction constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only informational tool with no output schema, the description says enough to call it correctly and to know why. What remains missing is the expected return shape and the handoff to the actual signup/API-key tools, which would help an agent chain the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is no parameter meaning for the description to supply. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Explain') and resource (agent-led signup workflow via posterly MCP before an API key exists), which clearly separates it from action siblings like start_signup, get_signup_session or create_api_key. It stops short of naming those siblings, so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before an API key exists' gives a concrete precondition that tells the agent when this tool applies rather than the signup/API-key tools. It does not name the follow-up tools (start_signup, create_api_key) an agent should call afterwards, so the routing guidance is incomplete but still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditsARead-onlyIdempotentInspect
Get the authenticated user's posterly AI credit balance: what is available to spend now, how much of the monthly included allowance is left, purchased pack balance, plan tier, and when the included pool next resets. Credits are a shared WORKSPACE wallet, so this reports the balance the caller can actually spend, not a personal figure. Read-only, spends nothing. Requires the billing:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered structurally. The description adds genuinely new context: the required billing:read scope and the fact that credits are a shared workspace wallet, which changes how the returned figure should be interpreted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the core answer front-loaded and no filler. Every clause carries information the agent needs: balance components, wallet semantics, cost, and auth scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and annotations covering safety, the description is close to complete—it even enumerates the balance fields an agent will receive. It stops short of describing the response shape or formatting, which is the one gap 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document and the schema coverage question is moot. Baseline 4 applies; no meaning is added or needed beyond the empty object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the authenticated user's posterly AI credit balance') and then enumerates exactly what the balance comprises: available spend, remaining monthly allowance, purchased pack balance, plan tier, and reset timing. An agent can distinguish this from subscription-management siblings like get_subscription purely from the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when this is the right call (read-only, spends nothing, requires billing:read scope) and clarifies the shared-workspace semantics so callers don't mistake it for a personal balance. It stops short of naming an alternative sibling or explicitly stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | post (default) or missing. | |
| post_id | Yes | The post ID to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior, so the description adds the return-shape detail: fields for the post view, failure reason on failed publishes, and per-field remediation for the missing view. It does not address how a nonexistent post ID is handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core statement is front-loaded in the first four words, and the remaining field lists are informative rather than filler. The two sentences are long but each clause carries concrete content about the returned data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 takes on the burden of describing return values across both views, which it does thoroughly. Minor gaps remain: no mention of error behavior for invalid IDs and no note on whether the response nests objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the schema only says "post (default) or missing" while the description explains in detail what each view returns and what the missing view is for. That adds real semantic meaning beyond the enum definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"One post by ID" gives a specific verb (retrieve) and resource (post), and the two view modes are enumerated precisely. It does not explicitly name siblings like list_posts or update_post, so differentiation is implied by "one" rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for view=missing ("how to fix it before the post can publish") which tells an agent when troubleshooting is relevant. However, there is no explicit guidance on when to choose get_post over list_posts or update_post, and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signup_sessionARead-onlyIdempotentInspect
Poll a public posterly signup session created by start_signup. Use this to narrate the free trial (card saved, nothing charged today), password setup, and agent access status before a posterly API key is installed. An account that already had a trial is charged at checkout instead. Keep updates user-facing; do not narrate raw HTTP, curl, or API plumbing.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | When true, include the raw signup session JSON for debugging. Keep false for normal user-facing agent flows. | |
| session_id | Yes | Signup session ID returned by start_signup, usually the Stripe checkout session ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, open-world semantics, but the description adds real behavior: this is a polling call on a public session, it exposes billing nuance (card saved, nothing charged today, prior-trial accounts charged at checkout), and it constrains how results should be surfaced to users. Return shape is still not described, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the core action and followed by usage and narration constraints. The final sentence about not narrating curl/HTTP plumbing is slightly tangential to invocation but earns its place as a behavioral constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only polling tool with no output schema and fully covered parameters, the description supplies enough: what it polls, the states it surfaces (trial, password setup, agent access), and the billing edge case. Nothing needed to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so session_id's origin (returned by start_signup, usually the Stripe checkout session ID) and the debug flag are already documented in the schema. The description only loosely reinforces the session_id provenance and adds no format or usage detail beyond it, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Poll a public posterly signup session') and ties it to the originating sibling ('created by start_signup'), so the agent can distinguish it from start_signup or get_agent_signup_info 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context — narrating trial, password setup, and agent access status before an API key exists — plus the edge case that an account with a prior trial is charged at checkout. It does not explicitly rule out or name alternatives such as get_agent_signup_info, so it falls short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriptionARead-onlyIdempotentInspect
Get the authenticated user's posterly subscription: status, tier, cancel-at-period-end, period end, trial end and pause state. Also reports connected accounts in use and the account limit for the workspace this caller is acting in (plan tier plus any extra slots). Call this FIRST for "upgrade", "change plan", "add accounts" or "how many accounts": it returns the plans above this user's with prices, limits and credits, the Agency extra-accounts state (owners), and the exact next steps. Read-only. Requires the billing:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered structurally; the description adds value by stating the 'billing:read' scope requirement and by disclosing that the response includes upgrade paths, Agency extra-account state and next steps. It stops short of noting any rate limits or failure modes, so it earns a 4 rather than 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: what it returns comes first, then when to call it, then constraints. The middle sentence is dense and slightly overloaded with parentheticals ('plan tier plus any extra slots'), but every clause carries real information rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing the payload contents and even hints at actionable next steps. Only the shape of 'the exact next steps' and the ordering of the plans list remain unspecified, which is a minor gap for an otherwise thorough definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero input parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description instead spends its words on output semantics, which the schema cannot carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (get the caller's subscription) and then enumerates the exact fields returned: status, tier, cancel-at-period-end, period end, trial end, pause state, connected accounts and account limit. It also separates itself from upgrade_subscription / cancel_subscription by being explicitly the read-only status entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use triggers in the user's own words ('upgrade', 'change plan', 'add accounts', 'how many accounts') and an ordering directive: 'Call this FIRST'. That is precisely the routing information an agent needs when several subscription siblings exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_updatesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of updates to return. Default 10, max 50. | |
| since | No | ISO date. Return updates published on or after this date. | |
| offset | No | How many updates to skip. Use the offset the previous page gives to get the next page. | |
| include_content | No | Include the full markdown body of each update. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent and non-destructive, so the safety profile is settled. The description adds two genuinely useful behaviors: that the response indicates whether more updates exist (a pagination signal with no output schema to reveal it) and that an active posterly subscription is a prerequisite. Return shape beyond that continuation flag is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose then pagination strategy, with zero filler. The subscription prerequisite is placed last where it reads as a constraint rather than a preamble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-optional-parameter read tool with no output schema, the description covers purpose, ordering, pagination mechanics and a prerequisite. The one real gap is that entry-level fields (e.g. what an update looks like, title/date/category) are not characterized, though 'include_content' in the schema implies a body field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns a modest bump by explaining how 'offset' and 'since' are functionally used (page vs. narrow) rather than just naming them, which the schema text only partially duplicates. It says nothing extra about 'limit' or 'include_content', which the schema already documents fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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'), enumerates what is returned (new features, improvements, fixes), and specifies ordering ('newest first'). No sibling tool covers product updates, so no disambiguation is needed and an agent can identify the tool immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives conditional guidance for the two discovery strategies: page with 'offset' for the next page, or narrow with 'since' for a date cut. It stops short of explicit when-not-to-use guidance or naming alternatives, but for a feed-reading tool the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_optionsARead-onlyIdempotentInspect
List read-only Veo video generation options, input modes, durations, resolutions, aspect ratios, and credit-cost estimates. This does not generate video or spend credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so safety is covered structurally. The description still adds non-redundant information: that no credits are spent, which is a cost behavior the annotations cannot express and which matters in a credit-metered product. It does not describe whether the returned options are account- or plan-specific, which would have been the final piece.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler: the first front-loads what is returned, the second front-loads the negative guarantee (no generation, no credit spend). Every clause earns its place and the most decision-relevant fact for an agent is stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and rich annotations, the description carries exactly the remaining burden: it enumerates what the response will contain so the agent can judge relevance without a return schema. For a simple read-only discovery tool, nothing an agent needs before calling it is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty object schema already shows; the baseline for a parameterless tool applies. No parameter meaning is missing or misleading.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ("List") plus a precise resource ("read-only Veo video generation options") and enumerates the exact contents: input modes, durations, resolutions, aspect ratios, credit-cost estimates. It also explicitly negates the closest sibling behavior ("does not generate video"), so an agent can distinguish it from generate_video and run_video_function 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence clearly signals this is a discovery/metadata call rather than a generation call, implicitly routing video creation to generate_video. It stops short of stating the explicit trigger (e.g. "call this before generate_video to pick a valid mode/duration/resolution"), so the when-to-use is clear but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_x_posting_quotaBRead-onlyIdempotentInspect
Get managed X posting quota for a workspace, including total monthly allowance, used posts, remaining posts, and URL-blocking status.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | Workspace ID from whoami. Defaults to the caller personal workspace context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds value by enumerating the returned fields in the absence of an output schema, but says nothing about quota reset timing, units, or whether 'managed' quota derives from the addon.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no wasted words; the resource is stated before the field enumeration. Slightly dense as a single list, but every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-param read tool this is largely sufficient, and the return-field enumeration compensates for the missing output schema. However, undefined terms ('managed', 'URL-blocking status') and the absence of reset cadence leave an agent guessing about what the values mean.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional workspace_id is fully documented, including its default to the caller's personal workspace. The description's 'for a workspace' adds no syntax or behavior 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and a well-scoped resource ('managed X posting quota for a workspace'), then enumerates the returned components (monthly allowance, used, remaining, URL-blocking status). An agent can distinguish it from get_credits or get_subscription by the X-posting-specific scope, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus checking plan limits via get_subscription or adjusting quota via manage_x_posting_addon. The description also omits any precondition such as resolving workspace_id from whoami first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsARead-onlyIdempotentInspect
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 identify direct-login versus Meta-linked connections 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 saved brand profile. view=performance_profile (account_id): 90-day coaching stats, engagement-rate trend, and summary (Pro plan or higher; platforms without per-post analytics never get one). view=connect_session (session_id): poll a session from create_connect_session and keep the user updated in plain language; stop when status is connected, failed, cancelled, or expired.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | accounts (default), learned_voice, performance_profile, or connect_session. | |
| debug | No | view=connect_session: when true, include the raw connect session JSON for debugging. Keep false for normal user-facing agent flows. | |
| account_id | No | Social account ID from list_accounts. Required for learned_voice and performance_profile; with view=accounts it returns just that account. | |
| connection | No | view=accounts: ok, or needs_reconnect to list only accounts that need a reconnect. | |
| session_id | No | view=connect_session: connect session ID returned by create_connect_session. | |
| workspace_id | No | view=accounts: filter to accounts in a specific workspace (get IDs via whoami). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent, but the description adds non-obvious behavior: tokens are never returned, learned_voice never overwrites the saved brand profile, performance_profile requires Pro or higher and is absent for platforms without per-post analytics, and connect sessions must be polled with a plain-language update. Those are exactly the traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource definition, then ordered by view, with no filler sentences. It is dense and semicolon-heavy, and the long first sentence compresses two ideas, but every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, four-mode dispatcher with no output schema, the description covers mode selection, return contents at a high level, plan gating, and polling termination. It stops short of describing pagination or the full row shape beyond connection_status, which is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 a constraint the schema does not state: view=accounts accepts one workspace_id or one account_id, implying mutual exclusivity. It also ties each parameter to its view, though per-parameter detail largely duplicates the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states the resource and its scope (connected social accounts plus learned data), and the four views are each given a distinct verb-like definition. An agent can distinguish this from connect_account, disconnect_account, and create_connect_session 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing is given per view, including that view=accounts is the default, that connection=needs_reconnect is the way to narrow to broken accounts, and that connect_session should be polled until status is connected, failed, cancelled, or expired. It also names a prerequisite check (inspect Instagram rows before using user_tags or collaborators), which is exactly the when-to-use guidance a sibling-heavy tool needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Event source filter. Defaults to all. | |
| limit | No | Number of items to return. Default 50, max 100. | |
| since | No | ISO datetime. Return events created at or after this time. | |
| offset | No | How many events to skip. Use the offset the previous page gives to get the next page. | |
| post_id | No | Filter to one post ID. | |
| workspace_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe, idempotent read in a closed world, so the description adds value with ordering ('newest first'), the paging window ceiling (offset + limit up to 1000), and the fact that the response signals whether more events exist. That last point is real behavioral disclosure beyond the annotations, though it stops short of describing result shape or defaults in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose then usage then paging caveat. No filler, and the most important operational warning (don't conclude nothing happened) lands last where it is memorable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 stating that the response indicates whether more events exist. All six parameters are documented in the schema and the description covers the pagination model, so 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.
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 genuine meaning: it explains the combined offset+limit ceiling of 1000 (a constraint not expressed in the schema, which only caps limit at 100), and frames offset/since/post_id as paging and narrowing levers for this feed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 recent activity and publish events for posts') and enumerates the event kinds covered (status changes, publish attempts, failures, retries). This clearly separates it from siblings like list_posts or list_jobs, which deal with content rather than event streams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage context ('Use this as the agent notifications feed') and prescriptive guidance on pagination and narrowing before concluding there is no more data. It does not name a sibling alternative or state when NOT to use it, which keeps it 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.
list_analyticsARead-onlyIdempotentInspect
Analytics for connected social accounts (Instagram, X, Facebook, 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 account analytics includes Calls, Website clicks, and Directions along with Profile Views, Search Views, Maps Views, Customer Actions, and Posts. view=posts (account_id): per-post likes, comments/replies, reach, impressions/views, saves, shares, reposts, quotes, plays, clicks, and watch time, 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 (great/good/mixed/poor), diagnosis, next action, and baseline, filtered by account_id, post_id, or checkpoint (1h, 6h, 24h, 72h, 7d); read-only, Pro plan or higher. presentation (accounts and posts): compact for Telegram/mobile, table for Markdown clients, json for custom chart/card renderers. include_extras on accounts asks for saved audience breakdowns, the last analytics sync, and entity snapshots. Those stay off until snapshot extras are switched on, and this does not start a new sync.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | accounts and posts: end date (ISO date). Defaults to today. | |
| from | No | accounts and posts: start date (ISO date, e.g. 2026-03-19). Defaults to 30 days ago. | |
| view | Yes | accounts, posts, or insights. | |
| limit | No | posts: number of posts (default 50, max 200). insights: max insights (default 20, max 100). | |
| offset | No | posts: pagination offset | |
| post_id | No | insights: filter to one post ID. | |
| account_id | No | The social account ID (from list_accounts). Required for accounts and posts; optional filter for insights. | |
| checkpoint | No | insights: filter to one checkpoint after publish. | |
| presentation | No | accounts and posts: compact, table, or json. | |
| include_extras | No | accounts: also return saved audience breakdowns, sync status, and entity snapshots when that read is switched on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds real behavior beyond them: posts are returned 'most recent first', insights are read-only and plan-gated, and include_extras data 'stays off until snapshot extras are switched on, and this does not start a new sync'. Those last points are the kind of side-effect clarity annotations cannot express. It omits failure behavior for invalid accounts or empty date ranges.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense paragraph where nearly every clause carries information (view semantics, platform exception, plan gate, presentation mapping). It would scan faster with the three view modes split into distinct sentences or lines, and the long platform enumeration adds little an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, three-mode, no-output-schema tool, the description covers the mode split, platform caveat, pagination ordering, plan gating, presentation formats, and the include_extras sync caveat. The main remaining gap is that date-range defaults and their interaction with view=insights are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 100%, baseline is 3; the description earns more by giving presentation values actual meaning ('compact for Telegram/mobile, table for Markdown clients, json for custom chart/card renderers') and by explaining what include_extras surfaces and that it is inert until extras are enabled. Checkpoint values and account-scoping rules are also restated with context, though from/to and limit/offset add nothing beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (analytics for connected social accounts) and enumerates exactly what each of the three views returns, so an agent can tell this apart from list_posts or list_comments. It never states an explicit action verb such as 'retrieve' or 'list', relying on the surface-noun phrase 'Analytics for...' plus the per-view return lists to imply read retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes between the three view modes with concrete conditions: per-post data goes to view=posts, while 'Google Business has no per-post rows; its totals are on view=accounts' is an explicit when-not rule. It also gates view=insights behind 'Pro plan or higher'. It does not point to sibling tools for adjacent needs (post content, comments, account discovery beyond the parenthetical 'from list_accounts').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brandsARead-onlyIdempotentInspect
Brands (clients) and their saved context. view=brands (default): brands the caller can access with brand ID, name, workspace ID, source, and how many social accounts are assigned (optional workspace_id). view=brand (brand_id): one brand with its workspace, source, and linked legacy brand group. view=accounts (brand_id): the connected social accounts assigned to the brand; use it when a user refers to a brand name rather than an account handle. view=profile (brand_id): voice and tone, audience, keywords, dos and don’ts, visual notes, and other saved brand context.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | brands (default), brand, accounts, or profile. | |
| brand_id | No | The brand ID (from view=brands). Required for brand, accounts, and profile. | |
| workspace_id | No | view=brands: filter to brands in a specific workspace (get IDs via whoami). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds genuinely useful behavioral detail beyond that by spelling out the payload of each view, which matters because there is no output schema. Pagination, ordering, and error behavior for an invalid brand_id are not disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence states the resource, followed by a parallel view-by-view enumeration that is easy to scan and free of filler. It is dense, with four view clauses packed into a single paragraph, but every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 describing the returned fields for each view, which is the main thing an agent needs to pick a view. Remaining gaps are minor for a read-only listing tool: no note on ordering, volume, or what happens when brand_id is omitted or invalid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 further by mapping each parameter to a view (workspace_id only for view=brands, brand_id required for the other three) and by describing what the view parameter actually selects. This gives an agent a working model of the parameter interactions rather than just field-level text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 framing ("Brands (clients) and their saved context") and then enumerates exactly what each of the four views returns. It also implicitly separates itself from list_accounts by noting the accounts view is for when a user names a brand rather than an account handle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each view is tied to a clear selection condition (default brands, single brand by brand_id, social accounts by brand_id, saved profile context by brand_id), and the accounts view includes an explicit disambiguation rule versus account handles. It stops short of naming sibling tools like manage_brand or list_accounts as alternatives, so routing to non-listing operations 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.
list_commentsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return. Default 50. | |
| since | No | ISO date/time, inclusive. | |
| until | No | ISO date/time, inclusive. | |
| filter | No | Default all. | |
| offset | No | Rows to skip. | |
| search | No | Search comment content or author username. | |
| platform | No | ||
| account_id | No | From list_accounts. | |
| comment_id | No | One comment and its replies. | |
| workspace_id | No | Omit to search all your workspaces, or pass an ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations by disclosing the permission requirement ('Pro plan or higher plus posts:read') and, importantly, that YouTube and TikTok are hard-refused rather than returning an empty list — an error mode an agent would otherwise misread as 'no data'. It also explains why those platforms are off, so the refusal is understood as intentional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with scope and platform list, then the two modes, then the refusal behavior — a logical order with no filler sentences. The closing line about platforms staying off until reviewed is mildly editorial but still conveys why refusals occur.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, zero-required, read-only tool with no output schema, the description covers mode selection, gating, paging approach, and failure behavior. A brief note on the shape of the paged response (e.g. whether replies are nested) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 real meaning on top: it clarifies that filter covers 'unread/flagged', that search/account/platform/since-until are list-mode-only, and that comment_id inverts the call into a single-record-plus-replies lookup where only workspace_id is honored. That interaction between parameters is not expressible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('list comments') along with the exact platform scope (Instagram, Facebook Pages, Threads, LinkedIn Pages) and splits behavior into two clearly labeled modes keyed on comment_id. An agent knows precisely what this returns versus what it refuses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the two calling modes ('Without comment_id: list comments filtered by...' / 'With comment_id: one comment and its replies') and the constraint that only workspace_id may be combined with comment_id, which is real when-to-use guidance. It does not name a sibling alternative (e.g. manage_comment for writes), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows (messages with conversation_id). Default 50. | |
| since | No | ISO date/time, inclusive. | |
| until | No | ISO date/time, inclusive. | |
| filter | No | Default all (excludes archived). | |
| offset | No | Rows to skip. | |
| search | No | Search participant username or last message preview. | |
| platform | No | Instagram or Facebook. Threads has comments, not DMs. | |
| account_id | No | From list_accounts. | |
| workspace_id | No | Omit to search all your workspaces, or pass an ID from whoami. | |
| conversation_id | No | One conversation and its messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/idempotent/non-destructive, so the description is free to add genuinely new behaviour: the plan and scope requirement, mode-dependent meaning of limit, default 50/max 100, and the Meta reply-window caveat that a reply does not extend the window and it is not inferred from loaded messages. That last point is real domain behaviour an agent could otherwise get wrong; only return shape is left uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and organised around the two modes, with the plan requirement parenthesised rather than buried. Sentences are long and dense, and the trailing reply-window note takes three clauses, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 definition covers modes, defaults, mutually exclusive filters, access gating and the reply-window caveat. An agent could invoke it correctly; only the returned conversation/message field structure is unspecified, which is a modest 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.
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 meaning the schema cannot express: limit counts conversations normally and messages when conversation_id is set, and other filters are invalid in single-conversation mode ('only workspace_id may be added'). That cross-parameter constraint is the most useful thing it contributes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource and scope: 'Social inbox DM conversations for Instagram and Facebook Page inboxes', and immediately kills the obvious confusion by noting Threads has no DMs. The dual-mode behaviour (list vs single-conversation retrieval) is stated up front, so an agent can distinguish this from list_comments or manage_conversation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly partitions usage by argument: without conversation_id you list with filters and paging, with conversation_id you fetch one thread and its messages with only workspace_id addable. It also states the access prerequisite (Pro plan or higher plus posts:read). It stops short of naming competing siblings such as manage_conversation or list_comments to route away from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_google_business_locationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | Google Business account ID from list_accounts. | |
| location_id | No | Google 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_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered; the description adds non-obvious behavior by disclosing the feature-flag gate and that no upstream Google call occurs while disabled, which prevents an agent from misreading an empty result as 'no data'. The remaining gap is that it doesn't say what an empty/disabled response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the purpose, then gating, then parameters, then negative scope — no filler. The only cost is a slightly choppy telegraphic style, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only three-parameter tool with full schema coverage and no output schema, the description covers purpose, availability gating, parameter choice, and what is excluded from the response. The one unresolved ambiguity is whether the 'one location' framing is triggered by account_id vs location_id and what happens when account_id selects multiple locations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already carries detailed guidance (including the ChIJ Place ID warning and 'Prefer account_id'), so the schema does the heavy lifting. The description's 'Pass account_id or location_id' only restates the either/or without adding format or precedence detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: 'Read regular opening hours and attributes for one Google Business location,' plus negative scope ('does not return the business name, address, phone, or website'), which meaningfully bounds what an agent gets back. However, the stated single-location scope sits awkwardly against the tool name 'list_google_business_locations' and the sibling 'manage_google_business_location', so an agent must reconcile a list-style name with a read-one-location behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a real precondition (only active once 'location edits are switched on,' no Google calls while off) and the 'Pass account_id or location_id' hint, which helps an agent decide whether the call will do anything. It never names alternatives — e.g. when to use list_accounts or manage_google_business_location instead — so the when-not guidance 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_google_business_mediaARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Items per page. Default 50, max 200. This pages the gallery already fetched; it does not ask Google for a smaller page. | |
| offset | No | Items to skip. Use the offset the previous page gives. | |
| account_id | No | Google Business account ID from list_accounts. | |
| location_id | No | Google 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_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavior: pagination operates over a gallery already fetched from Google rather than requesting a smaller page upstream, and it enumerates the returned fields (resource name, category, format, image URL, date).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose and the disambiguation before pagination details. The final sentence largely duplicates what the limit/offset schema descriptions already say, which is the only wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five optional parameters and no output schema, the description compensates by listing the return fields and explaining the paging model. It omits how an agent knows it has reached the last page or what happens when no media exists, which are minor gaps for a read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, including the limit default/max and the offset semantics. The description restates limit 50/200 and offset skipping without adding syntax or guidance 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the photos and videos on a Google Business Profile gallery') and scopes it to Maps/Search. It explicitly separates itself from post-attached media, which is the key ambiguity against the sibling list_media and manage_google_business_media tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear about the two supported scopes: a single location/account or every accessible GBP location, and it excludes the post-media case. It does not name the sibling tools (list_media, manage_google_business_media) or state when to prefer those, so routing still needs a small inference step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_google_business_reviewsARead-onlyIdempotentInspect
Google Business Profile reviews. view=reviews (default): reviews for one location/account or every accessible GBP location, paging through all reviews 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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | reviews (default) or review_link. | |
| limit | No | reviews: maximum reviews to return in this call (default 200, max 1000). Every returned review is listed in full. | |
| offset | No | reviews: skip this many reviews before returning results. Use with limit to page through a location with more reviews than one call returns. | |
| rating | No | reviews: filter to a 1-5 star rating. | |
| account_id | No | Google Business account ID from list_accounts. | |
| unanswered | No | reviews: only return reviews without owner replies. | |
| location_id | No | Google Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID from view=review_link. Prefer account_id. | |
| workspace_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the description is free to spend its words elsewhere - and it does: it discloses that paging retrieves all reviews rather than the first 50, that review text is untruncated, and that each location's total review count is returned. That is genuinely useful context beyond the annotations, though it does not discuss rate limits or per-call cost of deep paging.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the primary mode and no sentence is filler, but the 'reviews' portion is a single very long clause chain that is harder to parse than it needs to be. Slight tightening would make the paging/filtering facts scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return-shape burden and does it: it names the fields an agent will get back (full review text, date, review_name, per-location total count, public link, Place ID). Together with the mode split and the Place ID caveat, an agent has everything needed to call this correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 value by explaining the limit/offset pairing as a paging mechanism and by clarifying the account_id vs location_id relationship (prefer account_id; location_id is numeric, not the ChIJ Place ID). It does not describe the workspace_id filter, which is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (Google Business Profile reviews) and the two explicit modes (view=reviews vs view=review_link), each with a precise scope. It is clearly distinguishable from the sibling manage_google_business_review, which it references only as the follow-up action for replies/deletes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states which view to pick and for what: reviews for listing/filtering/paging, review_link when the public review URL or Place ID is needed. It also gives a concrete routing rule ('Each review has review_name for manage_google_business_review reply/delete_reply') and an explicit prohibition ('that Place ID is output only and must NOT be passed back as location_id'), which prevents a likely misuse.
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_areasARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | places: town or postcode to search for. | |
| view | No | areas (default) or places (search). | |
| account_id | No | Google Business account ID from list_accounts. Required for view=areas. | |
| location_id | No | Google 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_code | No | places: optional two-letter country code, for example GB. | |
| workspace_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description correctly does not spend words on safety. It adds real behavioral context instead: the 20-area cap, the server-side dependency on a maps key, and the warning that Place IDs from view=places are regions rather than the review-link Place ID. It does not describe the shape of the returned area list, which leaves a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then a clear view-by-view breakdown, with no redundant restatement of parameter names. The closing sentence about the maps key and the update fallback is dense and packs two ideas together, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only, six-parameter tool with no output schema, and the description covers both modes, the required-parameter condition, the maps-key prerequisite, and the Place ID pitfall. What remains unstated is the return payload for each view, which is acceptable given the tool's read-only nature but leaves the picture slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies and the description must earn more. It does so by stating the cross-parameter conditional (q required for view=places) and by adding the operational constraint that town search needs a maps key on the server, neither of which is derivable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Read Google Business service areas") and clarifies the domain object as "the towns and postcodes a location covers, up to 20." This is enough to distinguish it from the sibling mutation tool manage_google_business_service_area 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Splits usage cleanly by view: areas (default, one location) versus places (requires q, searches for a town or postcode to add). It also routes the agent away from town search when no maps key is configured, telling it to add a place via the update instead. It stops short of naming the manage_google_business_service_area sibling explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsARead-onlyIdempotentInspect
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 Veo or Grok video job by job_id, or recent video jobs (status includes dismissed, limit); poll it after generate_video for the finished video_url.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | image or video. | |
| limit | No | ||
| job_id | No | One job. Leave out to list recent jobs. | |
| status | No | Filter a job list. dismissed is video only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so the safety profile is covered; the description adds material context beyond that, such as the video status set including 'dismissed' and the returned fields (urls, video_url). It doesn't cover ordering or pagination of the list results, which would matter for polling loops.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense and front-loaded, with the type=image branch stated before type=video and the polling purpose repeated per branch. The repetition of 'poll it after generate_*' is mildly redundant but earns its place by tying each type to its generator.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 names the key return values (finished urls for image, video_url for video), which is what an agent needs after a generate call. It leaves the ordering of 'recent jobs' and whether limit caps the list undefined, a minor gap for a four-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the schema already documents type, job_id, and status. The description adds per-type semantics the schema doesn't: that job_id selects a single job of the given type, that omitting it triggers a list, and that status/limit apply to the list form for each type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the resource ('AI generation jobs') and then spells out the two distinct retrieval modes per type: a single job by job_id versus a recent-jobs list when job_id is omitted. It explicitly names the sibling tools (generate_image, generate_video) it pairs with, so an agent can distinguish it from anything else in the catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance — poll after generate_image for finished urls, poll after generate_video for video_url — and explains the job_id-omitted case as listing recent jobs. It stops short of stating when NOT to use it or naming an alternative tool, so it falls just under a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mediaARead-onlyIdempotentInspect
List the newest media assets for the authenticated user. After create_media_drop, pass drop_session_id to see files the human 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of assets to return (default 10, or 20 when drop_session_id is set; max 50) | |
| offset | No | How many assets to skip. Use the offset the previous page gives to get the next page. | |
| drop_session_id | No | Filter to files uploaded through one create_media_drop session |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavior beyond them: default page sizes, the 20-file drop page, the offset+limit ceiling of 1000, and the fact that the response signals whether all matching files were returned. It stops short of describing error or empty-result behavior, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences with the core purpose front-loaded and no filler. The paging and output-shape details are packed densely but earn their place; the last sentence is slightly overloaded with two ideas (completeness flag plus paging math).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 covers return contents (filename, added time, completeness indicator) and paging. It leaves implicit whether non-drop media reachable by this tool beyond uploads, and no sort-order detail, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning the schema lacks: the offset+limit <= 1000 constraint and the drop-session context for drop_session_id. It doesn't explain limit/offset interaction with sorting exactly, so just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List the newest media assets for the authenticated user" gives a specific verb, resource and ordering scope, and the second sentence carves out the drop-listing mode so an agent can tell it apart from upload_media / create_media_drop / create_signed_upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the chained workflow explicitly ("After create_media_drop, pass drop_session_id to see files the human uploaded on /drop/<token>") and names the downstream consumers ("Use public_url with validate_post / create_post"). It also gives a paging rule of when to page vs not, which removes the main ambiguity an agent would have.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_oauth_clientsARead-onlyIdempotentInspect
List self-serve OAuth developer clients owned by the user. These are public PKCE clients for third-party app integrations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered by structured data. The description adds real value beyond that by clarifying these are PUBLIC PKCE clients, i.e. no client secrets are exposed, and that results are filtered to the calling user's ownership. It says nothing about pagination, empty results, or whether disabled/deleted clients appear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the core identity of the resource is front-loaded before the qualifying detail about PKCE clients. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with no output schema, the description says what is listed but not what a returned record looks like (fields such as client ID, name, creation date, status). That is the main remaining gap for an agent that must decide whether the response contains what it needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline this scores 4. There is no parameter meaning the description needs to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ("List") and a precisely scoped resource ("self-serve OAuth developer clients owned by the user"), then defines them further as public PKCE clients for third-party integrations. The scope qualifier "owned by the user" plus "self-serve" implicitly separates this from the manage_oauth_client sibling, though it never names that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-only listing nature of the tool implies when it is appropriate, and the "owned by the user" scoping tells the agent this is a personal-scope enumeration. There is no explicit statement about when to use this versus manage_oauth_client, nor any mention of auth or account prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_platformsARead-onlyIdempotentInspect
Platforms, settings schemas, and connection links. view=platforms (default): posterly platform integrations, posting capabilities, content/media limits, settings schemas, helper tools, and analytics support (include_planned shows future integration possibilities). view=schema: the settings schema for one connected account_id (preferred: returns connection-specific capabilities, needed before Instagram native tags/collaborators) or one platform; account_id wins if both are given. view=connect_link: dashboard handoff links and readiness for every target, or one target (instagram, meta, linkedin_page, twitter, telegram, reddit, wordpress, ...); use connection_url in a logged-in browser (direct OAuth URLs are intentionally not exposed); credential platforms show the credential_fields that connect_account needs.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | platforms (default), schema, or connect_link. | |
| debug | No | view=connect_link: when true, include the raw connect option JSON for debugging. Keep false for normal user-facing agent flows. | |
| target | No | view=connect_link: connection target such as instagram, meta, linkedin_page, twitter, x, google_business, telegram, reddit, or wordpress. Omit to list live connection targets. | |
| platform | No | view=schema: platform ID such as instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Set include_planned to inspect planned providers. | |
| account_id | No | view=schema: connected account ID from list_accounts. Preferred because it returns account context. | |
| workspace_id | No | view=connect_link: filter connected account counts to a workspace. | |
| include_planned | No | Include planned integrations such as reddit, medium, skool, whop. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With read-only and idempotent annotations already present, the description adds meaningful behavior: direct OAuth URLs are intentionally not exposed, account_id wins over platform when both are given, include_planned reveals future integrations, and credential platforms show credential_fields needed by connect_account. It does not cover rate limits or response size, but it goes well beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and information-dense, but it is a single run-on paragraph with semicolons and repeated platform examples that duplicate the schema enums. It is not bloated, but it could be structured more clearly for an agent to scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex seven-parameter, three-view tool without an output schema, the description explains what each view returns and the key constraints an agent needs to call it correctly. Minor gaps remain, such as not describing workspace_id behavior beyond the schema, but overall it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 precedence rules (account_id wins over platform), default behavior (view=platforms), intended use of connection_url, and guidance to omit target to list live connection targets. Workspace_id and debug receive less description-level explanation, but the added semantics are useful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly establishes that this tool retrieves platform metadata, settings schemas, and connection links, and breaks this down by view mode. It distinguishes the tool from siblings like list_accounts and connect_account by describing what each view returns, though the opening phrase is telegraphic rather than a full verb-led purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context for each view: platforms is the default, schema is preferred with account_id and is needed before Instagram native tags/collaborators, and connect_link should use connection_url in a logged-in browser. It does not explicitly state when not to use the tool, but the view-specific guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsARead-onlyIdempotentInspect
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 (draft, scheduled, publishing, processing, awaiting_tiktok_publish, awaiting_manual, published, failed, paused, paused_due_to_token, paused_due_to_billing, or missed), 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). status=missed is posts that failed, scheduled posts whose scheduled time is already past, and posts a publishing pause held past their time. group_id matches the caller group (including post_group_id). release_id matches that release only. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | list (default): the posts. counts: totals (needs scheduled_from and scheduled_to). | |
| limit | No | Posts per page (default 20, max 200). Ignored by view=counts. | |
| order | No | asc (oldest first) or desc (newest first). Default asc with a date range, otherwise desc. Ignored by view=counts. | |
| offset | No | Matching posts to skip; use the offset the previous page gives. Ignored by view=counts. | |
| status | No | Stored post status (draft, scheduled, publishing, processing, awaiting_tiktok_publish, awaiting_manual, published, failed, paused, paused_due_to_token, paused_due_to_billing, 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_id | No | Filter to posts assigned to a specific brand/client (the id from list_brands). | |
| group_id | No | Caller group id. Matches api_group_id, group_id, and post_group_id. | |
| platform | No | Filter by platform: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. | |
| timezone | No | IANA time zone such as Europe/London for reading plain dates and showing times. Default UTC. | |
| account_id | No | Filter to a specific social account ID (from list_accounts). | |
| release_id | No | Caller release id. Matches release_id only. | |
| scheduled_to | No | End of the scheduled range: a plain date (2026-10-31) includes that whole day; an ISO date-time is exclusive. | |
| workspace_id | No | Filter to posts in a specific workspace (get IDs via whoami). | |
| scheduled_from | No | Start 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_status | No | Filter by client review approval status. pending_client means the post is waiting on the client. | |
| approval_waiting_on | No | client: approval_status pending_client. team: changes_requested or rejected. Conflicts with a non-overlapping approval_status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations: it explains role-based visibility, that omitting workspace_id searches every workspace, the semantics of status=missed, the multi-field group_id match, the date-range-dependent default ordering, and the 366-day cap on counts. It also states that the output always reports whether all matching posts were shown, which is essential for correct paging behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is dense and mostly earns its place, but it is delivered as one long unbroken paragraph mixing filtering, paging, and the counts mode. Sectioning or front-loading the two-view distinction would make it far easier to scan for a 16-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 everything an agent needs: filter semantics, defaults, paging loop, timezone handling, the dual-mode contract, and the one field worth surfacing (approval.pending_client_approval). Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the description largely restates the same facts (group_id matching, timezone behavior, scheduled_to inclusivity). It does add modest value by tying ordering to the presence of a date range and by clarifying that limit/offset/order are ignored under view=counts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource+scope: posts across your workspaces and teammates', constrained by role and brand-locked seats. It also separates the two modes (view=list vs view=counts) inline, so an agent can distinguish this from get_post or list_analytics 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance for the counts view ("use it for 'how many' or 'is this month full' questions") and a mandatory paging directive (keep calling until everything is shown before drawing conclusions). It never names sibling alternatives like get_post or list_analytics, so routing between tools is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_post_suggestionsARead-onlyIdempotentInspect
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 for that account. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max suggestions to return (default 20). | |
| offset | No | How many suggestions to skip. Use the offset the previous page gives to get the next page. | |
| status | No | Suggestion status to list (default pending). | |
| account_id | No | Filter to one social account ID (from list_accounts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, non-destructive), the description provides critical behavioral constraints, such as requiring a 'Pro plan or higher,' which is a major operational constraint for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While comprehensive, the description is slightly dense. However, every sentence contributes vital information regarding the suggestions' quality, operational constraints, or workflow integration, making it structurally sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given its complexity as an AI-driven, evidence-based workflow tool, the definition is exceptionally complete. It covers content quality, usage requirements, workflow integration, and result handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema coverage is 100%, the description primarily serves to elaborate on defaults (status 'pending') and define the high-level filtering goals of the parameters rather than defining their internal data structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is highly specific, defining the tool as a source for 'proactive post suggestions' that are evidence-based and written in an 'account's learned voice,' clearly distinguishing it from general post listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool provides explicit usage guidance, detailing filtering options (account_id and status), how to handle large results (pagination via offset), and the required integration with other tools (using dismiss_suggestion).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_publishing_pausesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | Workspace ID from whoami. Defaults to your default workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered; the description still adds meaningful behavior beyond them: result scoping ('only brands you can see') and the fact that the response includes capability flags for pausing, resuming, and publishing missed posts. It does not describe error or empty-state behavior, so it stops short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the question the agent is likely asking, then the returned information, then the read-only constraint and the mutation alternative. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating what comes back: workspace pause state, per-brand pause state, and permission flags. Combined with the schema's parameter documentation and the annotations' 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single workspace_id parameter has 100% schema description coverage, including the 'from whoami' and default-workspace semantics, so the schema carries the load. The description adds nothing about the parameter, which is acceptable at this coverage level but is baseline only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the exact question it answers: 'Is publishing paused? Shows whether the workspace is paused, which brands are paused... and whether you may pause, resume, or publish missed posts.' It also explicitly separates itself from the mutation sibling manage_publishing_pause, so an agent can choose between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear routing: this is the read path, and 'Change it with manage_publishing_pause' names the alternative and the condition that selects it. What's missing is any precondition guidance about when the pause state matters (e.g., checking before create_post or before resuming publishing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | webhooks (default) or deliveries. | |
| limit | No | ||
| offset | No | ||
| webhook_id | No | deliveries: webhook ID from view=webhooks. | |
| workspace_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds real behavior beyond them: delivery history remains unavailable until switched on, and it never exposes the signing secret or request body — meaningful data-scope limits not derivable from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the primary list behavior, then the alternate view, then the caveats — three tight sentences with no filler. The phrase 'stays off until it is switched on' is slightly oblique about what must be enabled, a minor clarity cost but not wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers both modes and the notable data exclusions for a read-only, no-required-param tool with five optional params and no output schema. Missing only pagination guidance for limit/offset, which the schema partially addresses; nothing essential to invoking it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description only explains the view enum and the view=deliveries/webhook_id pairing, both partly echoed in the schema. It adds no semantics for limit, offset, or workspace_id, so it does not compensate for the remaining coverage gap. Baseline 3 is appropriate given the schema carries most parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (API webhook subscriptions) plus what the payload surfaces: event filters, active state, and most recent delivery status. It also delineates the two view modes, so an agent can distinguish this from create_webhook and manage_webhook 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the deliveries case: use view=deliveries with webhook_id to read recent attempts for a single webhook. It gives clear context for when each view applies, but does not name sibling alternatives (create_webhook, manage_webhook) or state exclusions such as 'use manage_webhook to change active state'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspace_membersARead-onlyIdempotentInspect
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. Needs an API key with the Manage team permission. Any workspace member can list; brand-limited teammates only see brand ids they can access.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes | Workspace ID (from whoami). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description isn't needed for the safety profile — yet it adds real value: permission requirements, per-role output variation (owners and admins also see key counts, connected AI apps and last use), and brand-scoped visibility. It does not disclose pagination or result-size limits, which is the main remaining behavioral gap for a listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then payload, then permissions, then visibility caveats — a sensible order. It is a dense single paragraph with some stacked clauses ("from their own keys and AI apps"), but nearly every clause carries information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 carry the return-value burden, and it does: it names the member fields, invite info, seat counts, and admin-only extra fields. Combined with the auth requirements, an agent could call this correctly; only pagination/result limits are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage on a single required parameter, the schema already explains workspace_id (sourced from whoami). The description only implies the workspace scoping and adds no format or acquisition 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("List the people in a workspace") and immediately enumerates what is covered — members with role/status/brand access/API access, pending invites, and seats in use. An agent can distinguish this read-only roster tool from the sibling manage_workspace_member 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions: an API key with the Manage team permission, and the note that any workspace member can list while brand-limited teammates only see accessible brand ids. What's missing is an explicit routing statement (e.g., "use manage_workspace_member to change a role"), so when-not-to-use is only implied by the verb contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_brandADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | create: required. update: the new name. | |
| action | Yes | create, update, or archive. | |
| confirm | No | create and update: true only after the user agrees. archive: true only with the preview_id from a preview call. | |
| brand_id | No | update and archive: the brand ID from list_brands. | |
| timezone | No | create or update: an IANA timezone such as Europe/London. | |
| preview_id | No | archive: the preview_id from the preview call. | |
| website_url | No | create or update: an http or https website. Pass an empty string on update to clear it. | |
| workspace_id | No | create: workspace ID from whoami, when the key is not already scoped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes well beyond them by disclosing what archiving actually destroys and what it does not: the brand leaves the active list, connected accounts stay connected, and scheduled posts still publish. It also surfaces the admin-only authorization requirement and the exact preview/confirm_id protocol.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action-by-action structure is front-loaded and each sentence carries real information about prerequisites or consequences. The only waste is the repeated 'Pass confirm=true only after the user agrees' clause in both the create and update sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers all three action paths, required inputs, authorization, and the user-facing confirm gate, plus the non-obvious side effects of archiving. An agent has everything needed to invoke it correctly and explain the outcome to the user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including confirm, preview_id, and workspace_id is already documented in structured form; the description largely restates those constraints. It does reinforce the sequencing between the preview call and preview_id, but that is also present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb set and resource: 'Create, update, or archive a brand.' Each of the three actions is then enumerated with its own required inputs, so an agent can distinguish this management tool from the sibling list_brands (which is explicitly named as the source of brand_id).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Guidance is explicit per action: create/update/archive are all 'admin only', create needs workspace_id 'from whoami when the key is not already scoped', and archive follows a preview-then-confirm sequence. The description does not name conditions for when-not to use this tool, but no sibling overlaps these mutations, so the routing gap is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_commentADestructiveInspect
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 take 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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | reply: public (default) or private. Private is Instagram only. | |
| action | Yes | reply, update, or delete. | |
| confirm | No | reply and delete: leave out to get a preview; true only with the preview_id after the user approved it. | |
| content | No | reply: reply text to post. | |
| is_read | No | update: mark the comment read or unread in posterly. | |
| is_hidden | No | update: hide or unhide the comment on Instagram, Facebook, or Threads. | |
| comment_id | Yes | Comment ID from list_comments. | |
| preview_id | No | reply and delete: the preview_id from the preview call. Required with confirm: true. | |
| workspace_id | No | Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the safety bar is lower, but the description still adds substantive behavior: update is reversible with no confirmation, delete is irreversible and admin-only, and reply/delete require a two-call preview then confirm flow with a preview_id. It does not describe the contents of the preview object or what happens if a preview_id expires, which keeps it just 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single dense paragraph is front-loaded and organized action-by-action, and nearly every clause carries a constraint an agent needs. It is slightly run-on, packing platform restrictions, reversibility, and the confirm flow into long sentences that would read faster as a short bulleted action list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description explains the only non-obvious return value an agent must handle, the preview plus preview_id from the preview call. For a 9-parameter multi-action mutation tool, the plan requirement, platform matrix, permission limits, and irreversibility are all disclosed, leaving no blocking gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 beyond it by tying parameters to actions and to each other, notably that confirm=true is only valid paired with the preview_id from the prior call and that type=private is Instagram-only while other platforms accept public replies only. It adds real conditional semantics the flat schema cannot express, though a few parameters (workspace_id, is_read scope) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (an inbox comment) and enumerates the three concrete operations with their own parameter sets: action=reply (comment_id, content), action=update (is_hidden/is_read), action=delete (comment_id). It is clearly separable from list_comments and manage_conversation because it disclaims listing/reading behavior and focuses purely on acting on an existing comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance per action and names alternatives for blocked cases: 'Threads replies cannot be deleted, hide them instead' routes the agent from delete to update. It also specifies prerequisites (Pro plan or higher plus posts:write) and the required preview-then-confirm sequence for reply and delete, with update explicitly noted as needing no confirm.
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 seconds for LinkedIn); Threads and LinkedIn sync comments only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | send or sync. | |
| confirm | No | send: leave out to get a preview; true only with the preview_id after the user approved it. | |
| content | No | send: message text to send. | |
| sync_type | No | sync: what to sync. Defaults to all. Threads and LinkedIn are comments-only. | |
| account_id | No | sync: social account ID from list_accounts. | |
| preview_id | No | send: the preview_id from the preview call. Required with confirm: true. | |
| workspace_id | No | Optional. Omit to search every workspace you belong to; pass a workspace ID from whoami to limit to one. | |
| conversation_id | No | send: conversation ID from list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the Pro-plan-plus-posts:write permission requirement, the 24-hour messaging window that governs whether a send succeeds, per-platform cooldowns (30s, 60s for LinkedIn), and that the send is a two-step preview/confirm flow rather than an immediate side effect. These are exactly the operational facts an agent needs and none of them are recoverable from readOnlyHint/destructiveHint/openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the scope and permission gate come first, then each action is introduced with an 'action=' token that mirrors the enum. It is a single semicolon-chained paragraph that would read better as bullets, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, two-mode tool with no output schema, it covers permissions, platform limits, rate limits, and the send workflow well. It does not say what the preview actually contains or what happens when the 24-hour window has lapsed, which are the remaining questions an agent would have before its first call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning the schema does not: it pairs conversation_id and content with the 24-hour window constraint, frames confirm/preview_id as a workflow rather than a lone boolean, and ties account_id to per-platform cooldown and comments-only behavior for Threads and LinkedIn.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Each action is given a specific verb and resource: 'send a DM reply in an Instagram or Facebook Page conversation' and 'pull the latest Instagram, Facebook Page, Threads, or LinkedIn inbox data for one account.' Platform scope and exclusions ('Threads has no DMs') let an agent distinguish it from siblings like list_conversations, list_comments, and manage_comment 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly separates the two invocation modes and lays out the exact preview-then-confirm sequence for send, including showing the preview to the user before confirming. It also names list_conversations and list_accounts as ID sources. It stops short of explicitly contrasting this tool with manage_comment or list_comments for comment handling, leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_extra_accountADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| confirm | No | ||
| preview_id | No | ||
| workspace_id | No | ||
| extra_accounts | Yes | ||
| expected_interval | No | ||
| expected_current_extra_accounts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that raising slots charges the saved card, that extra_accounts is a desired TOTAL with 0 removing everything, that 3D Secure or a decline returns a payment link and adds nothing, and that the operation is Owner-scoped with billing:write. The annotations already flag destructiveHint and idempotentHint, and the description reinforces rather than repeats them; only the exact consequence for existing slots when lowering (proration/refund behavior) is unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is front-loaded with the operation, then the financial warning, then permissions, then the workflow, then the failure mode — a sensible ordering. The telegraphic style ('MONEY:', 'billing:write', 'add 20+ at a time') packs a lot in but reads as compressed shorthand in places, slightly taxing on first parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, money-moving mutation with no output schema and no schema descriptions, the description covers cost, permissions, the quote-confirm handshake, the preview_id and expected_ anti-staleness fields, and the 3DS/decline outcome. An agent has everything needed to call it correctly and to warn the user before spending money.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the burden, and it does: it defines extra_accounts as a desired TOTAL rather than a delta, explains the confirm/preview_id pairing as a two-phase protocol, and identifies the expected_ fields as values copied from the quote (a guard against stale state). Only workspace_id is left undefined, which is a minor omission against seven parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb set (buy, raise, lower, remove) applied to a precise resource (Agency extra-account slots), and the action=set/TOTAL semantics make the operation unambiguous. It never names the adjacent sibling tools (upgrade_subscription, downgrade_subscription, manage_workspace_member) that an agent might confuse it with, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes the exact call sequence: call without confirm to obtain a quote and preview_id, then after user agreement call with confirm=true plus the preview_id and expected_ fields. It also states prerequisites (Owner only, billing:write) and a batch constraint (add 20+ at a time), leaving nothing to inference about when to use which mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_google_business_locationADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | update_hours or update_attributes. | |
| confirm | No | Leave out to get a preview; true only with the preview_id after the user approved it. | |
| account_id | No | Google Business account ID from list_accounts. | |
| attributes | No | update_attributes: attributes to set. URL values must be https. Names look like attributes/has_wifi. | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true. | |
| location_id | No | Google 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_id | No | Filter to a workspace ID from whoami. | |
| regular_hours | No | update_hours: opening periods. Days are MONDAY-SUNDAY. Times are HH:MM. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive, non-read-only, idempotent and open-world, but the description carries far more: a mandatory preview-then-confirm gate, the fact that confirming while the feature is off is a silent no-op that never calls Google, and that the same business management connection used for posting is reused. That is exactly the behavior an agent cannot infer from the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then per-action payload formats, then the preview/confirm workflow, then the gating condition and scope exclusions. Every sentence carries operational information; none restates the tool name or the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, nested-object, destructive mutation with no output schema, the description covers the workflow, preconditions, side effects, and the boundaries of what is mutated. An agent has enough to call both actions correctly and to know when a call will be inert.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 semantic detail: HH:MM time format, MONDAY-SUNDAY day names, and attribute naming/value_type conventions (attributes/has_wifi, BOOL/URL/ENUM). It does not clarify account_id versus location_id precedence or the workspace_id filter, leaving those to the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Change regular opening hours or attributes on a Google Business location") and enumerates the two supported actions by name. It also closes the scope explicitly ("does not change the business name, address, phone, or website"), which separates it from broader location-management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives per-action routing (update_hours sends regular_hours.periods, update_attributes sends attributes), an explicit two-step procedure (call without confirm for a preview_id, show it, then confirm), and a hard precondition ("Stays off until location edits are switched on"). It also states what happens when the precondition is unmet, so an agent knows the failure mode in advance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_google_business_mediaADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | add or delete. | |
| confirm | No | Leave out to get a preview; true only with the preview_id after the user approved it. | |
| category | No | add: which gallery category to add the media to. | |
| account_id | No | Google Business account ID from list_accounts. | |
| media_name | No | delete: full media resource name from list_google_business_media (accounts/.../locations/.../media/...). | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true. | |
| source_url | No | add: public https URL of the photo or video (from upload_media). Photos must be JPG or PNG, 10 KB to 5 MB. | |
| location_id | No | Google 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_format | No | add: defaults to PHOTO. Use VIDEO for videos (Google caps profile videos at 30s / 75MB). | |
| workspace_id | No | Filter to a workspace ID from whoami. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, but the description adds behavior those hints cannot convey: deletion is permanent and public-facing, single-slot categories replace rather than append, and every mutation follows a mandatory preview-then-confirm handshake with a preview_id. That preview/confirm protocol is the critical safety behavior and is absent from all 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then organized per action, with zero filler sentences. The telegraphic 'action=add (source_url, category):' style is dense but scannable; the only structural weakness is that the preview/confirm protocol — arguably the most important rule — is placed last rather than stated up front.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter destructive tool with no output schema, the definition covers prerequisites, action-scoped parameters, side effects, and the confirmation protocol, plus the fact that a preview returns a preview_id. It leaves the account_id/workspace_id scoping and the media_format semantics to the schema, which is reasonable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuine cross-parameter meaning: source_url and category are add-only, media_name is delete-only and must come from list_google_business_media, and preview_id must accompany confirm=true. It does not explain media_format's role beyond the schema, nor account_id vs location_id selection, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb plus resource ('Change a Google Business Profile gallery') and immediately disambiguates with the parenthetical '(the photos and videos shown on Maps and Search)'. The two supported actions (add/delete) are enumerated, and it clearly separates this tool from list_google_business_media and upload_media by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the alternative for each operation: use upload_media first for add, and pull media_name from list_google_business_media for delete. It also states the when-not/when-careful conditions: COVER and PROFILE are single-slot and replace the existing item, and delete permanently removes from the public profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_google_business_reviewADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | ||
| count | No | ||
| action | Yes | suggest_reply, reply, or delete_reply. | |
| comment | No | reply: exact owner reply text to post. | |
| confirm | No | reply and delete_reply: leave out to get a preview; true only with the preview_id after the user approved it. | |
| account_id | No | Google Business account ID from list_accounts (optional brand voice context for suggest_reply). | |
| preview_id | No | reply and delete_reply: the preview_id from the preview call. Required with confirm: true. | |
| location_id | No | Google 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_name | No | reply and delete_reply: review_name from list_google_business_reviews. | |
| review_text | No | suggest_reply: review text. Leave empty for rating-only reviews. | |
| star_rating | No | suggest_reply: review rating from 1 to 5. | |
| workspace_id | No | Filter to a workspace ID from whoami. | |
| business_name | No | ||
| reviewer_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructive=true, openWorldHint=true, idempotent=false) by disclosing that suggest_reply consumes the AI Caption Assist allowance and never posts, and by specifying the preview/confirm safety gate with preview_id and what the preview echoes. It does not state auth/permission needs or what happens on replying to an already-replied review or deleting a nonexistent reply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then organized action-by-action with the workflow constraint last; virtually no filler. The final sentence is long and stacks parentheticals, which makes it harder to parse than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, no-output-schema mutating tool this covers the essentials: what each action does, which parameters each action consumes, the destructive consequences, quota consumption, and the preview/confirm return shape. An agent can drive the full two-call flow from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 71% schema coverage the description still adds real routing value by mapping parameters to actions (star_rating/review_text for suggest_reply, review_name/comment for reply, review_name for delete_reply) and explaining the confirm/preview_id pairing. It leaves tone and count entirely to the schema, so those params have no explanation of effect anywhere in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Act on Google Business Profile reviews") and immediately enumerates the three concrete operations: suggest_reply, reply, delete_reply. The read counterpart (list_google_business_reviews) is named as the source of review_name, so the agent can tell this mutating tool apart from the listing sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action is given a clear condition: suggest_reply for AI draft help (never posts), reply to post/update an owner reply, delete_reply to remove one, plus an explicit two-step preview→confirm protocol for the mutating actions. What is missing is an explicit "don't use this when..." case or guidance on which action to prefer when a reply already exists.
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_areaAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | update: replace the service area list. | |
| places | No | The full replacement list, 1 to 20 areas. Each item needs place_id and place_name. | |
| confirm | No | Leave out to get a preview; true only with the preview_id after the user approved it. | |
| account_id | No | Google Business account ID from list_accounts. | |
| preview_id | No | The preview_id from the preview call. Required with confirm: true. | |
| location_id | No | Google 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_code | No | Two-letter country code. Required for customer-only listings that do not already have one. Immutable once set. | |
| workspace_id | No | ||
| business_type | No | CUSTOMER_LOCATION_ONLY travels to customers. CUSTOMER_AND_BUSINESS_LOCATION also has a storefront. | |
| clear_storefront_address | No | Set 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only flag non-read-only, idempotent, non-destructive, open-world) by disclosing full-replacement semantics, the 1-20 item cap, that the country is immutable once set, that clear_storefront_address deletes the street address so it must be re-entered, and the two-step preview/confirm safety flow. It even restates why repeated saves are safe, which contextualizes the idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope, then conditions, then the safety flow; nearly every clause carries operational information. It is dense and slightly long, but no sentence is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation with no output schema, it covers the risky parts well: replacement semantics, immutable country, required region_code, address clearing, and the preview/confirm loop. Minor gaps remain, such as what the preview actually shows and how conflicts with existing areas are resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 90%, so the baseline is 3; the description adds real meaning on top by translating business_type into plain business consequences (travel-only vs. also having a storefront) and explaining when region_code and clear_storefront_address are mandatory. It does not add anything for account_id/workspace_id/location_id, but the schema already disambiguates those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Replace the service areas on a Google Business location.' It also implicitly distinguishes itself from the sibling list_google_business_service_areas, which it names as the source of place_id/place_name values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use path: action=update, preview first without confirm, then re-call with confirm=true and the preview_id. It also states the conditions that require region_code and clear_storefront_address. It stops short of explicitly naming the neighboring manage_google_business_location tool or stating when this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_oauth_clientADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | create, update, or delete. | |
| confirm | No | create and update: true after explicit user confirmation. delete: leave out to get a preview; true only with the preview_id after the user approved it. | |
| homepage | No | ||
| client_id | No | update and delete: the client_id from list_oauth_clients. | |
| is_active | No | ||
| preview_id | No | delete: the preview_id from the preview call. Required with confirm: true. | |
| client_name | No | create (required) or update. | |
| description | No | ||
| default_scopes | No | create (required) or update. | |
| allowed_redirect_uris | No | create (required) or update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds genuinely non-obvious behavior: deleting prevents new authorizations while existing access tokens remain revocable as API keys, and the delete path is a two-phase preview/confirm. The only omission is what a create returns (no client secret surfaced in the description, though the 'no client secret' framing implies it), so a small gap remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is front-loaded with the resource definition and then organized per action, so scanning by action works well. It is dense and semicolon-heavy, and the parenthetical about access tokens is slightly buried mid-sentence, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter destructive mutation tool with no output schema, the description supplies the confirm/preview workflow and the per-action required fields, which is the information an agent most needs to avoid a bad call. The gap is the three optional fields (homepage, description, is_active) that neither schema nor description documents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 70% schema coverage the schema does much of the work, but the description adds real meaning for action, confirm, client_id, and the create-required trio (client_name, allowed_redirect_uris, default_scopes), plus the constraint that confirm=true is gated on user approval. It does not explain homepage, description, or is_active, which are undocumented in the schema as well, so it stops short of full compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource class (self-serve OAuth 2.1 + PKCE developer clients) with a defining characteristic (public clients, no client secret) and immediately distinguishes it from the sibling list_oauth_clients. The verb 'manage' is then decomposed into create/update/delete semantics, so an agent knows exactly what surface this tool covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action is given an explicit required-field set, plus an explicit confirmation protocol (create/update require confirm=true only after user approval; delete requires preview-then-confirm with preview_id). It also routes listing behavior to list_oauth_clients and tells the agent where client_id comes from, so there is essentially no ambiguity about when and how to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_publishing_pauseADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | pause, resume, or publish_missed. | |
| confirm | No | pause: leave out to preview. pause and publish_missed: true only after the user agreed. resume: not needed. | |
| brand_id | No | pause and resume: a brand ID from list_brands. Leave it out (never empty) for the whole workspace. | |
| post_ids | No | publish_missed: the missed post IDs a resume returned. | |
| workspace_id | No | Workspace ID from whoami. Defaults to your default workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructive/not-idempotent/non-readOnly; the description adds what actually gets destroyed or blocked (scheduled posts held, Post now blocked until an admin resumes), the required permission tier per action (Publisher vs admin), and the seat-limited-brand constraint. It also discloses the non-obvious post-pause semantics: posts whose time passed stay paused, are listed as missed, and never publish on their own. That is substantive context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the do-not-act-unprompted rule, then organized by action. It is dense and long with heavy parenthetical nesting ("(optional brand_id; leave it out for the whole workspace)"), which costs some scannability, but almost every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-action, permission-gated tool with no output schema, the description covers permissions per action, the preview/confirm handshake, scope defaults (workspace vs brand), and the missed-post lifecycle. An agent has everything needed to call it safely and correctly without inferring.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents confirm, brand_id, and post_ids per action, so the description's per-parameter notes largely restate it. It does add cross-parameter meaning the schema cannot: confirm belongs to a preview-then-agree workflow, and post_ids must come from a resume's output. Marginal but real value over a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb pair and resource: "Pause or resume publishing for a whole workspace or one brand," and immediately names the sibling to check first (list_publishing_pauses). The three actions (pause, resume, publish_missed) and their scopes are stated explicitly, so an agent can distinguish this from list_publishing_pauses 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not-to-use guidance: "Only act when the user asks; never pause on your own initiative," plus "check it first with list_publishing_pauses." It also prescribes the exact two-call protocol (preview without confirm, show the user, then confirm=true), leaving no ambiguity about sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_webhookADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | update only. | |
| action | Yes | update, delete, or test. | |
| events | No | update only. | |
| confirm | No | update and test: true after the user explicitly confirms. delete: leave out to get a preview; true only with the preview_id after the user approved it. | |
| is_active | No | update only. | |
| preview_id | No | delete: the preview_id from the preview call. Required with confirm: true. | |
| webhook_id | Yes | Webhook ID from list_webhooks. | |
| description | No | update only. | |
| workspace_id | No | update only. null clears the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/openWorld/non-idempotent, but the description adds what those hints cannot: that updates have outbound side effects, that delete is a two-phase preview/confirm flow requiring the returned preview_id, and that test dispatches a signed webhook.test delivery. This is precisely the human-in-the-loop safety protocol an agent needs and could not infer from the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficiently segmented by action (update / delete / test) with the parenthetical webhook_id acting as a signature per branch, and the most important constraint (list first, confirm last) is front-loaded. Some clauses are dense run-ons, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, three-mode destructive mutation with no output schema, the description covers every decision an agent must make: mode selection, which params apply per mode, the confirmation precondition, and the destructive preview flow. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already labels url/events/is_active/description/workspace_id as "update only" and documents confirm and preview_id. The description still adds cross-parameter meaning the schema fragments cannot — namely that preview_id only exists as the output of a prior no-confirm delete call, and that it must be paired with confirm=true. Slight redundancy with the confirm field text keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Change a webhook subscription") and immediately scopes itself against the sibling list_webhooks. Each of the three action modes is then named with its required identifier, so an agent can tell this apart from create_webhook and list_webhooks 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: "list them first with list_webhooks" before acting. Per-action conditions are spelled out — update for field changes, delete requires preview-then-confirm with a preview_id, test is for sending a signed sample delivery — and each says when confirm=true is permitted ("only after explicit confirmation").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_workspace_memberADestructiveInspect
Invite, update, or remove a workspace colleague. This SENDS EMAILS and CHANGES WHO CAN ACCESS the workspace. Needs an API key with the Manage team permission, and the caller must be a workspace owner or admin. ALWAYS preview first: call without confirm, show the preview to the user, and only call again with confirm: true plus the returned preview_id 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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | action=invite (required) or action=update: publisher, editor, or viewer. | |
| No | action=invite only: the colleague email address. | ||
| action | Yes | invite, update, or remove. | |
| resend | No | action=invite only: email an unchanged pending invite again. | |
| confirm | No | Leave out to get a preview. Set true only after the user explicitly approved it, with the preview_id. | |
| brand_ids | No | action=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_id | No | action=update or action=remove: a pending invite ID from list_workspace_members. | |
| member_id | No | action=update or action=remove: a member ID from list_workspace_members. | |
| api_access | No | action=update with member_id only, on its own: true turns API and AI app access on; false turns it off. | |
| preview_id | No | The preview_id returned by the preview call. Required with confirm: true. | |
| workspace_id | Yes | Workspace ID (from whoami). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructive, non-read-only, open-world, non-idempotent; the description goes far beyond by disclosing that emails are sent, that access rights change, that API keys, AI app connections and webhooks stop when api_access is turned off, and that the owner is emailed on every change. Permission prerequisites (Manage team key, owner/admin caller), self-modification limits, and the owner-only rule for admin api_access are all stated, which 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-stakes facts (sends email, changes access, preview first) before the per-action detail, and every clause carries operational information. The single dense paragraph makes the action branches harder to scan than a short list would, which is the only real cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter destructive mutation with no output schema, the definition covers the full call lifecycle: prerequisites, the preview/confirm handshake with preview_id, per-action parameter requirements, and side effects. Nothing an agent needs in order to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline would be 3, but the description adds cross-parameter logic not present in the schema: which parameters pair with which action, that api_access works only with member_id on its own, and that omitting brand_ids on update keeps current brands. This is exactly the conditional composition an agent needs and the flat schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb set and resource: 'Invite, update, or remove a workspace colleague,' then immediately distinguishes the three action modes. The namesake sibling list_workspace_members is referenced as the source of IDs, so the agent can separate listing from mutating 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit branching guidance per action: invite requires email and role, update takes member_id or invite_id, remove accepts either. It also states hard exclusions the agent cannot infer: admin seats can only be granted in the posterly dashboard, and the mandatory preview-then-confirm workflow with a user approval gate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_x_posting_addonADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | buy: quote an X posting add-on, then open Checkout after the user agrees. | |
| confirm | No | True only after the user agrees, with the preview_id. | |
| plan_code | No | Which add-on to buy. Not used when one is already active. | |
| preview_id | No | The preview_id from the preview call. | |
| workspace_id | No | Workspace ID from whoami, when the key is not already scoped. | |
| expected_plan_code | No | From the preview. The current plan code, or null when there is none. | |
| expected_price_usd | No | From the preview. The monthly price in dollars, or null. | |
| expected_addon_status | No | From the preview. The add-on status the quote was based on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing that the preview charges nothing, that confirming returns a Stripe Checkout link, and that the card is only charged after the user pays on that page, plus the already-active-add-on fallback and the required scope (billing:write, owner/admin). What is missing is any statement about the non-idempotent retry surface — e.g. what happens if confirm is called twice with the same preview_id — which matters given idempotentHint=false and destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the plan menu, then walks the preview→confirm→checkout sequence in order; every sentence carries either a price, a state transition, or a permission requirement. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, two-step payment flow with no output schema, the description covers the quote payload, the confirm payload, the returned Checkout link, the no-charge guarantee, the active-add-on branch, and the auth scope. The only real gap is retry/idempotency behavior for confirm and whether the preview expires.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns above that by adding the per-plan pricing table (which the enum lacks in the schema) and by attributing expected_plan_code, expected_price_usd, expected_addon_status and preview_id to the prior preview call, clarifying their provenance and ordering. It still doesn't explain when workspace_id is needed beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 immediately enumerates the purchasable plan codes with prices, so the agent knows exactly which capability this is versus upgrade_subscription or manage_extra_account. The trailing cross-reference to get_x_posting_quota further separates allowance-reading from purchasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 price, show it to the user, then call again with confirm=true and the preview fields. It also names the alternative path when an add-on is already active (billing page for the owner, no second plan), removing the main branch ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_subscriptionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true after the user explicitly confirms pausing the subscription. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: the pause lasts 30 days, only one pause is allowed per 90-day cooldown, and the action requires the billing:write scope. These details help an agent understand the billing and rate-limit implications even though destructiveHint, idempotentHint, and openWorldHint are already supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, leading with the action and duration before adding the cooldown, billing scope, and confirmation requirements. Every clause adds operational information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a billing mutation with one required parameter and no output schema, the description covers the core constraints an agent needs: duration, cooldown, required scope, and explicit confirmation. It could additionally clarify post-pause behavior such as whether billing or access automatically resumes, but it is otherwise sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single confirm parameter is already well documented in the schema. The description reinforces the confirmation requirement but does not add syntax or meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: pause the authenticated user's subscription, with a 30-day duration and cooldown constraint. This clearly distinguishes it from sibling subscription tools such as cancel_subscription, resume_subscription, and upgrade_subscription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: this is a billing action requiring billing:write and should only be called after explicit user confirmation. It does not explicitly name alternative subscription tools or state when not to use this one, but the confirmation prerequisite is a strong usage constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
posterly_statusARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that customer-caused failures (expired connections, content limits) are excluded from the rates and surfaced separately as customer_side, that it admits when there is insufficient recent activity, and that it aggregates only with no post or user data. The readOnly/idempotent hints are already in annotations, so this added semantics is the real value. Minor gap: it does not describe cadence/latency of the health data beyond the 4-hour and 7-day windows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then usage, then a disambiguation clause; every sentence carries information. It is fairly dense at roughly five sentences for a zero-parameter tool, but no clause is filler, so it stops short of being padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input parameters and no output schema, the description carries the full burden of explaining return shape, and it does: overall state, active incident, per-platform breakdown, and the separate customer_side bucket. An agent knows what it will get and what it will not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly signals it is a no-argument call by describing call conditions rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 the three things returned: overall 4-hour state, active incident, per-platform 7-day success rate and publish counts. It also explicitly differentiates itself from the whoami 'status' sibling, so an agent can pick the right tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use triggers ('before scheduling a time-critical post', 'when a user asks whether posterly or a platform is down or why posts are failing') and names the alternative it is not (whoami view 'status', which only reports server/package version). That is an explicit use/do-not-confuse pairing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_subscriptionAIdempotentInspect
Resume the authenticated user's paused posterly subscription, restoring active billing. Requires the billing:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the description's contribution is the billing-state effect and the auth scope requirement, both of which are genuinely additive. It stops short of describing what happens on a non-paused subscription or what the response contains, but the key behavioral consequence is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly-packed sentence: the action, the scope of the target, the effect, and the auth requirement, with the action front-loaded. No filler and nothing that could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter state-transition tool with no output schema, the description covers the essentials: what changes, whose subscription, and the required permission. A brief note on failure modes (not paused, no active subscription) would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter meaning for the description to carry; the baseline for a no-param tool applies. The description correctly implies the target subscription is derived from the authenticated user rather than passed in.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resume') and a specific resource ('the authenticated user's paused posterly subscription'), plus the immediate consequence ('restoring active billing'). It is clearly distinguishable from siblings such as pause_subscription, cancel_subscription, and upgrade_subscription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The precondition is explicit: the subscription must be 'paused', and the required 'billing:write' scope is named, which tells an agent when this call is applicable and what it needs. What's missing is guidance for the edge cases — what to do if the subscription is not paused, canceled, or nonexistent — with no explicit pointer to get_subscription to verify state first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_video_functionARead-onlyIdempotentInspect
Run a read-only Google Veo or xAI Grok video helper function before generation: list_input_modes, estimate_cost, or validate_request. This does not generate video or spend credits.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Function parameters. estimate_cost accepts model, duration_seconds, resolution, output, and xAI input_image_count. validate_request accepts a generate_video-style payload. | |
| identifier | Yes | Video generator identifier from get_video_options. | |
| functionName | Yes | Helper function name from get_video_options.tools. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered structurally. The description adds genuinely new context by asserting no credits are spent, which is a cost-safety fact absent from the annotations. It does not describe error behavior (e.g., what happens with an invalid payload to validate_request), keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and the function enum, followed by a single negation that prevents the most likely misuse. No wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter dispatcher with a nested params object and no output schema, the description covers purpose, sequencing, and cost safety adequately. The main omission is that it never characterizes what each helper returns, which matters somewhat since there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents all three parameters, including which keys each helper's params object accepts and where identifier/functionName values come from. The description adds no parameter-level detail beyond the function name list, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific verb (run), the resource (video helper function), and enumerates the three allowed functions (list_input_modes, estimate_cost, validate_request). It also explicitly distinguishes itself from generate_video by stating it does not generate video or spend credits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"before generation" gives clear temporal context for when to reach for this tool versus generate_video. It stops short of saying which of the three helpers to pick for a given situation, leaving that inference to the function names and the schema's parameter descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_signupAInspect
Start the public posterly signup for a user before posterly API access exists. A new account starts a 7-day free trial: Stripe Checkout collects a card, nothing is charged today, and the card is charged on day 8 unless the paid plan starts sooner. API and MCP stay limited during the trial. The API add-on is still required. Returns a signup poll URL, a browser Checkout handoff URL, and a payment object for that Checkout session (trial length, whether anything is charged today, merchant, and agent-wallet instructions). An account that already had a trial is charged at checkout instead. The user still sets a password and approves social OAuth in the browser. Never ask for card numbers, a posterly password, or social passwords in chat.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional user or workspace name to pass into posterly signup. | |
| tier | No | posterly plan to start. Use starter unless the user explicitly chooses another plan. | starter |
| debug | No | When true, include the raw signup response JSON for debugging. Keep false for normal user-facing agent flows. | |
| Yes | User email address to sign up. Confirm this with the user before calling. | ||
| source | No | Source label for analytics and support diagnostics. | posterly_mcp_pre_auth_signup |
| interval | No | Billing interval. Public agent signup currently supports monthly billing. | month |
| api_addon | No | Always true for AI agent setup because MCP/API access requires the API add-on. | |
| return_path | No | Where posterly should continue after checkout and password setup. | /dashboard/api?api_signup=success |
| tos_accepted | No | Set true only after the user has explicitly confirmed, in this conversation, that they accept the posterly terms at https://www.poster.ly/terms. Sending it here avoids a separate terms-confirmation step before client_secret is released. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond annotations: discloses the 7-day trial, day-8 charge, no charge today, repeat-trial accounts charged at checkout, limited API/MCP during trial, and the prohibition on collecting card/password/OAuth secrets in chat. That is rich operational and safety context not found in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then trial/charge behavior then return values, all substantive. Slightly dense with several clauses packed in, but nearly every sentence carries unique information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with open-world and no output schema, the description covers the billing flow, return shape, and follow-up browser steps. Minor gap: it doesn't say what to do if signup fails or how the poll URL should be used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3; the description adds value by explaining the return payload (poll URL, Checkout handoff URL, payment object) and the security rule around card/password data. It doesn't add per-parameter detail beyond schema, hence not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start the public posterly signup') and disambiguates from sibling upgrade_subscription by scoping it to a user before API access exists. It also names get_signup_session implicitly via 'signup poll URL'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: use when the user has no account yet and needs a trial plus Checkout. It notes pre-auth state and that the API add-on is required, though it doesn't explicitly name get_signup_session or get_agent_signup_info as the follow-up alternative.
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 does not alter product content but writes a private feedback event. Never include API keys, prompts, captions, media URLs, personal data, or fabricated outcomes.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | ||
| client | No | ||
| source | Yes | ||
| comment | No | ||
| context | No | ||
| outcome | Yes | ||
| error_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a write, non-destructive, non-idempotent, closed-world tool. The description adds meaningful behavior: it writes a private feedback event, does not alter product content, and explicitly forbids API keys, prompts, captions, media URLs, personal data, and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the purpose and followed by privacy constraints. The phrase 'bounded private operational telemetry' is slightly jargon-heavy, but every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter write tool with a nested object and no output schema, the description leaves parameter semantics entirely undocumented. Privacy behavior is well covered, but an agent lacks guidance on required fields and how to populate the context object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across seven parameters, including a nested context object. The description never explains source, tool, outcome, client, comment, context, or error_code, so it adds no parameter meaning beyond the schema names and enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (submit), resource (operational telemetry / private feedback event), and timing (after a concrete posterly workflow outcome). It clearly distinguishes itself from product-content changes, though it does not explicitly name the sibling submit_product_feedback as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a condition for use: after a concrete workflow outcome. It also states privacy exclusions, but does not explain when to choose this over submit_product_feedback or ask_support, nor does it state any when-not to use.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| client | No | ||
| source | No | ||
| confirm | Yes | ||
| context | No | ||
| category | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the feedback goes to the public board users see in the dashboard, requires human approval before confirm=true, and forbids secrets, captions, media URLs, and third-party personal data. These are important safety and visibility details not expressed by 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by usage gating, confirmation requirements, alternatives, and privacy constraints. Every sentence carries operational value and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is largely complete for a public feedback submission: it covers purpose, approval flow, visibility, privacy restrictions, and the sibling alternative. The remaining gaps are the undocumented optional parameters and the absence of any return-value description, though no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and seven parameters, the description adds useful meaning for title and category approval, confirm=true, and content restrictions. However, it leaves optional client, source, context.request_id, and context.related_tool undocumented, so it only partially compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: file a product bug, idea, or feedback on the public posterly feedback board. It explicitly distinguishes this from submit_agent_feedback, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: only when the human explicitly asks to report a bug, suggest a feature, or send feedback. It also states when not to use it and names the alternative for tool failures and retries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_platform_helperCRead-onlyIdempotentInspect
Run account-specific platform helper discovery. Available helpers: linkedin.company_lookup, linkedin.recent_mentions, pinterest.boards, tiktok.creator_info, x.quota, youtube.playlists.
| Name | Required | Description | Default |
|---|---|---|---|
| helper | Yes | ||
| params | No | Helper inputs. linkedin.company_lookup needs { vanity: the company vanity name or company page URL }. | |
| platform | No | Platform hint when no account_id is supplied. Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. | |
| account_id | No | Connected social account ID when the helper needs account context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds essentially nothing beyond duplicating the enum: it does not say whether helpers hit the live platform API, whether they can fail per-platform, or whether results are cached or rate-limited — relevant given openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded, with no filler. However, the second sentence is a pure restatement of the helper enum and would be better spent describing what the helpers return or how to choose one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a gateway tool that fans out to six different helpers with an untyped free-form params object and no output schema, so the description carries a heavy burden. It fails to describe any helper's inputs, outputs, or failure modes, leaving the agent unable to use most helpers correctly from the definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description merely re-lists helper names that already appear in the helper enum without explaining what any of them do or require. The one genuinely non-obvious parameter detail (linkedin.company_lookup needs {vanity}) comes from the schema's params description, not from the tool description, so no compensating meaning is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb phrase 'Run account-specific platform helper discovery' is vague on its own, but the enumerated helper names (linkedin.company_lookup, x.quota, youtube.playlists) give a concrete sense that this dispatches to platform-specific lookup operations. It is distinguishable from siblings, though many siblings also read platform data and the description never says what a helper actually returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to pick this tool over siblings such as get_x_posting_quota or list_google_business_locations, nor on when a given helper is appropriate. No prerequisites, no exclusions, no mention of how account_id vs platform selection should be decided beyond what the schema already states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_postADestructiveIdempotentInspect
Change a scheduled or draft post. DESTRUCTIVE WRITE. Edit (default): caption, media, schedule, post_type, settings, account_id, or thread_posts; overwrites the existing post; cannot edit published or currently publishing posts. account_id moves the post to another account you can use in the same workspace and on the same brand, and the platform follows that account. thread_posts replaces an X or Threads reply chain with at least two non-empty parts, and the first part becomes the caption. If a client has 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. Only a workspace owner or admin may do this. The actor is the API key user, never a brand guest. request emails the brand reviewers. approve, request_changes, and reject 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.
REQUIRED BEFORE CALLING: Show the user a side-by-side of the CURRENT post (caption, scheduled time, media, status) and the PROPOSED change, and get explicit confirmation ("yes update it", "apply those changes") before calling. Do not auto-edit posts based on a general instruction - each change needs its own confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Change the post status instead of editing it. Send with post_id (and scheduled_at when scheduling a draft) only. | |
| caption | No | New caption/text content | |
| confirm | Yes | Must be true after explicit user confirmation of the proposed change. | |
| post_id | Yes | The post ID to update | |
| group_id | No | With release_id only: an external group/campaign ID. | |
| media_url | No | New 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. | |
| post_type | No | New post type: text, image, video, carousel, reel, story, story_series, document, photo, or cover_photo | |
| account_id | No | 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. | |
| media_urls | No | New media URLs for carousel, handled like media_url. | |
| release_id | No | Set an external release ID instead of editing the post. Send with post_id and optional group_id only. | |
| scheduled_at | No | New scheduled time (ISO 8601, e.g. 2026-03-10T09:00:00Z) | |
| thread_posts | No | Replace an X or Threads reply chain. At least 2 non-empty parts. The first part becomes the caption. | |
| approval_axis | No | With approval_action approve, request_changes, or reject: which axis to decide. Omit for both. Not allowed with request. | |
| approval_note | No | Note stored with the approval change. Required for request_changes. | |
| reel_cover_url | No | Cover image URL for a reel. | |
| approval_action | No | Change client approval instead of editing the post. Send on its own. | |
| platform_settings | No | Platform-specific settings to merge into the post. Prefer this over raw metadata. | |
| reel_cover_method | No | How the reel cover is chosen, e.g. an uploaded image or a frame offset. | |
| reel_thumb_offset | No | Frame offset in milliseconds to use as the reel cover. | |
| instagram_settings | No | Instagram-specific updates. Distinguish caption @mentions, native media user_tags, and collaborators. Native media tags work with eligible direct or Meta-linked accounts; collaborators require an eligible Meta-linked account. Call list_platforms with view=schema and account_id first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the bar is lower, yet the description still adds substantial non-obvious behavior: which approval stages get reopened by caption vs media vs schedule/account/thread edits, that account_id must be same workspace and same brand, that the platform follows the new account, and that the actor is the API key user rather than a brand guest. This is context no annotation or schema could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and destructive warning are front-loaded and every sentence carries operational information, but the middle section is one dense run-on paragraph that restates several per-parameter rules already present in the schema descriptions, making it harder to scan than it needs to be. Mode grouping (edit / status / release_id / approval_action) is present but buried in prose rather than segmented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter, nested, multi-mode destructive mutation this description covers permissions, preconditions, mode exclusivity, side effects on approval state, and the mandatory confirmation workflow. It has no output schema and does not state the return shape, but the only thing an agent must know before invoking is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description goes further by explaining cross-parameter invariants: account_id relocates the post and changes the platform, thread_posts replaces a reply chain and its first element becomes the caption, approval_axis omitted means both axes, and approval_note is required only for request_changes. What it does not add is any detail on the large nested platform_settings/instagram_settings objects, which are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ("Change a scheduled or draft post") and immediately labels it a destructive write, and the following sentences enumerate the four distinct operating modes (edit, status, release_id, approval_action). An agent can distinguish update_post from create_post, delete_post, and validate_post 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit boundaries are given: cannot edit published or currently publishing posts, each of the four modes must be sent on its own, and only a workspace owner or admin may change approval. The "REQUIRED BEFORE CALLING" block spells out the confirmation protocol (side-by-side diff plus explicit user 'yes') and forbids auto-editing from a general instruction, which is exactly the when/when-not 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.
upgrade_subscriptionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | Yes | ||
| confirm | No | ||
| interval | No | ||
| preview_id | No | ||
| workspace_id | No | ||
| expected_interval | No | ||
| expected_current_tier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it discloses that a saved card is charged and prorated, that owner permission is required, and that 3DS or a decline returns a payment link with no state change. That is exactly the behavioral context an agent needs before a money-moving call, and it does not conflict with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded: the money warning and owner restriction come before the flow. Every sentence carries a distinct fact, with no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, monetarily destructive tool with no output schema, the definition covers authorization, cost, the preview/confirm handshake, and failure outcomes. It does not describe what the quote response contains or how workspace_id affects scope, which is a modest remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the load, and it does explain the roles of confirm, preview_id, and the expected_ guard fields, plus the implicit 'tier must be higher' constraint. It leaves interval and workspace_id unmentioned, so a small gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Upgrade to a strictly higher plan') and adds a qualifier ('strictly higher') that separates it from downgrade_subscription, cancel_subscription, and resume_subscription without the agent 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit two-step protocol: call without confirm to get a quote and preview_id, then call with confirm=true plus that preview_id and the expected_ fields after the user agrees. It also states the 'Owner only' precondition. Nothing about when to use this versus its siblings 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.
upload_mediaADestructiveInspect
Upload an image or video to posterly storage and get a URL for create_post. Supports JPEG, PNG, GIF, WebP, MP4, MOV, WebM (PDFs are not accepted here: use create_signed_upload or create_media_drop). Images up to 10MB, videos up to 50MB. Three ways in: file_path (an explicit local path the user gave you), base64_data with filename (PREFERRED for images shared in chat, which are not on the local filesystem), or url (a public HTTPS image or video; local/private network URLs are blocked).
This writes to the user's media storage (counts against quota) but does NOT publish the file anywhere. Uploading is safe - it's the subsequent create_post call that publishes content, and that tool has its own confirmation requirements. Never guess file paths. You can also pass public HTTP(S) media URLs directly to create_post/update_post; use url here when you want to upload once and reuse the returned posterly URL. Pass asset_id (from list_media) to delete that library file: the first request previews it and deletes nothing; send it again with confirm true and that preview_id only after the user agrees. A file a post still uses is kept.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public HTTPS URL for the image or video to copy into posterly storage. Local/private network URLs are blocked. | |
| confirm | No | Delete only. True only after the user explicitly approves the preview, together with preview_id. | |
| asset_id | No | Library file id from list_media. Deletes that file after a preview. Do not combine with url, file_path, or base64_data. | |
| filename | No | Filename with extension (e.g. photo.jpg, video.mp4). Required with file_path or base64_data; optional override with url. | |
| file_path | No | Absolute local filesystem path (e.g. /Users/name/photo.jpg). Only use when the user gives you an explicit path. Do NOT guess paths for images uploaded in chat. | |
| preview_id | No | The preview_id from the delete preview. Required with confirm: true. | |
| base64_data | No | Base64-encoded file data. PREFERRED for images shared directly in chat - extract the image data as base64 and pass it here. | |
| content_type | No | MIME type (auto-detected from filename if omitted) | |
| workspace_id | No | Optional. The workspace this acts in and whose plan pays (from whoami). Needed only when your connection can act in several workspaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, which is potentially confusing for an upload tool, and the description resolves it well: it explains the write counts against quota, does NOT publish anything, and that publishing happens in create_post. It also discloses the two-step delete path (first request previews and deletes nothing; second requires confirm plus that preview_id) and that in-use files are kept. Missing only finer traits such as idempotency/duplicate handling, though the annotation already states 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with capability, then formats/limits, then input modes, then behavioral caveats — a logical order with no filler sentences. It is on the long side for a single tool and the delete flow is dense, but each block carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description covers return value (a reusable posterly URL), size/format limits, quota cost, the non-publishing safety story, multi-workspace scoping, and the destructive delete protocol. 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.
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 decision-level meaning the schema only partially conveys: it groups the parameters into three mutually exclusive input modes, flags base64+filename as preferred for chat images, warns never to guess file_path, and frames asset_id/confirm/preview_id as a preview-then-confirm delete protocol.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Upload an image or video to posterly storage and get a URL') and immediately names the sibling it feeds ('for create_post'), plus the two upload alternatives (create_signed_upload, create_media_drop) for the excluded PDF case. An agent can distinguish it from every sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: three input modes with a stated preference ('base64_data ... PREFERRED for images shared in chat'), file_path only when the user gives an explicit path, and url when you want to upload once and reuse. It also carves out exclusions (PDFs are not accepted here) and names the alternatives, plus notes when passing a URL straight to create_post/update_post is enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_postARead-onlyIdempotentInspect
Validate and normalize one post without creating it. This does not create records, copy remote media, consume post-item/storage quota, reserve X quota, emit webhooks, or enqueue publication. Third-party media may return remote_media_not_materialized because live create performs storage copy and final byte validation. Use this before showing the final preview and asking for confirmation to call create_post.
| Name | Required | Description | Default |
|---|---|---|---|
| caption | No | The post caption/text content. 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. | |
| platform | No | Platform name (required with username). Supported: instagram, facebook, tiktok, twitter, linkedin, youtube, pinterest, threads, google_business, telegram, bluesky, discord, slack, mastodon, devto, hashnode, wordpress, lemmy. Aliases such as x, gmb, and instagram-standalone are accepted. | |
| username | No | Account username (alternative to account_id) | |
| media_url | No | Media URL to attach. 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. For threads, attaches to the lead post only. | |
| post_type | No | Optional post type: text, image, video, carousel, reel, story, story_series, document, photo, cover_photo, x_thread, or threads_thread. Omit it for auto-detection from media. For TikTok photo posts, use photo/image/carousel or omit it; for Facebook cover photos, use cover_photo or platform_settings.post_type. | |
| account_id | No | Social account ID (from list_accounts) | |
| media_urls | No | Multiple media URLs for carousel or multi-image posts. Posterly storage URLs are used as-is; third-party HTTP(S) URLs are copied into posterly storage before the post is saved. For TikTok, 2 or more images auto-create a photo slideshow (up to 35 images) and every image is posted. | |
| scheduled_at | No | ISO 8601 datetime for scheduling (e.g. 2026-03-05T09:00:00Z). Omit for immediate publish. | |
| thread_posts | No | For X or Threads only: array of 2+ strings, one per post in the thread. The first entry leads, the rest reply in order. When set, the platform must be twitter or threads. | |
| workspace_id | No | Workspace ID to assign the post to (from whoami). If omitted, uses the account's workspace or the caller's default workspace. | |
| platform_settings | No | Platform-specific settings for the selected account. Use this for non-Instagram settings and prefer it over raw metadata. | |
| instagram_settings | No | Instagram-specific settings. If “tag” is ambiguous, distinguish caption @mentions (put @username in caption), native media tags (user_tags), and co-author invitations (collaborators). Native media tags work with eligible direct or Meta-linked accounts; collaborators require an eligible Meta-linked account. Call list_platforms with view=schema and account_id first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, but the description goes further by enumerating the specific side effects that do NOT occur (no records, no media copy, no post-item or storage quota, no X quota reservation, no webhooks, no publication enqueue). It also discloses a real failure mode beyond annotations: third-party media may return remote_media_not_materialized because live create performs the storage copy and byte validation. Nothing contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by side-effect exclusions, then the media caveat, then the usage instruction. Every sentence carries information, but the six-item negation list is dense enough that it reads as a run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter validator with nested per-platform settings and no output schema, the description covers side effects and workflow well but says nothing about what validation returns — errors vs. warnings, whether a normalized payload comes back, or which field failures are blocking. An agent can decide to call it, but not interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 12 parameters (including deep nested platform_settings and instagram_settings), so the schema already carries parameter meaning and the baseline is 3. The description adds only indirect param context via the third-party media caveat, which explains why media_url/media_urls behave differently here than in create_post; it does not document caption, thread_posts, or scheduling semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Validate and normalize one post without creating it" gives a specific verb pair (validate/normalize), a specific resource (one post), and a scope boundary (no creation). This immediately separates it from create_post, create_posts_batch, and update_post without the agent needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this before showing the final preview and asking for confirmation to call create_post" names the alternative tool and the exact workflow condition that selects it. The ordering constraint (validate → preview → confirm → create) is 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.
whoamiARead-onlyIdempotentInspect
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. ALWAYS call this at the start of a session; if onboarding.completed is false, walk the remaining onboarding steps IN THIS conversation (about you, connect, brand voice, first post) and do not send the user to /onboarding-v2 or the dashboard composer wizard. view=status: MCP server version, latest npm version, endpoint and API key health, and update guidance; works before POSTERLY_API_KEY is configured.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | identity (default): user, scopes, workspaces, onboarding. status: MCP server and connection health. | |
| include | No | identity only. api_keys lists this account's API keys. The secret is never included. Omit it for the usual identity answer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses that the API secret is never returned and that view=status works before POSTERLY_API_KEY is configured — a genuinely useful behavioral trait an agent could not infer elsewhere. It also states what to do when onboarding.completed is false, which shapes agent behavior in a way annotations cannot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the identity answer, then the status view, then the session-level directive; every clause carries information. The onboarding walkthrough is a long parenthetical and borders on procedural bloat for what is still fundamentally an inspection tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only two optional enum parameters, the description fully carries the burden by enumerating returned fields for both views and flagging the secret-exclusion guarantee. Nothing material is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 spells out the fields returned per view and expands include=api_keys into name, prefix, scopes, created, last used. It stops short of adding syntax or format detail beyond the enum semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource concretely ('Who you are and how posterly is connected') and enumerates exactly what each view returns (authenticated user, API key scopes, workspaces, onboarding next step). It does not, however, distinguish itself from the sibling posterly_status tool, which appears to overlap heavily 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes 'ALWAYS call this at the start of a session' and explains when each view/include value applies, including that status works before the API key is configured. It gives no guidance on when to prefer the sibling posterly_status instead of view=status, leaving the main routing ambiguity unresolved.
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.
73 tool updates
v0.55.1- First observed
ask_support - First observed
audit_google_business_profile - First observed
cancel_subscription - First observed
connect_account - First observed
create_api_key - First observed
create_connect_session - First observed
create_media_drop - First observed
create_post - First observed
create_posts_batch - First observed
create_signed_upload - First observed
create_webhook - First observed
delete_api_key - First observed
delete_post - First observed
disconnect_account - First observed
dismiss_suggestion - First observed
downgrade_subscription - First observed
find_available_slot - First observed
generate_captions - First observed
generate_image - First observed
generate_video - First observed
get_agent_signup_info - First observed
get_credits - First observed
get_post - First observed
get_signup_session - First observed
get_subscription - First observed
get_updates - First observed
get_video_options - First observed
get_x_posting_quota - First observed
list_accounts - First observed
list_activity - First observed
list_analytics - First observed
list_brands - First observed
list_comments - First observed
list_conversations - First observed
list_google_business_locations - First observed
list_google_business_media - First observed
list_google_business_reviews - First observed
list_google_business_service_areas - First observed
list_jobs - First observed
list_media - First observed
list_oauth_clients - First observed
list_platforms - First observed
list_post_suggestions - First observed
list_posts - First observed
list_publishing_pauses - First observed
list_webhooks - First observed
list_workspace_members - First observed
manage_brand - First observed
manage_comment - First observed
manage_conversation - First observed
manage_extra_account - First observed
manage_google_business_location - First observed
manage_google_business_media - First observed
manage_google_business_review - First observed
manage_google_business_service_area - First observed
manage_oauth_client - First observed
manage_publishing_pause - First observed
manage_webhook - First observed
manage_workspace_member - First observed
manage_x_posting_addon - First observed
pause_subscription - First observed
posterly_status - First observed
resume_subscription - First observed
run_video_function - First observed
start_signup - First observed
submit_agent_feedback - First observed
submit_product_feedback - First observed
trigger_platform_helper - First observed
update_post - First observed
upgrade_subscription - First observed
upload_media - First observed
validate_post - First observed
whoami
TDQS
Scored across 73 tools
Most tools target distinct resources or actions, and the descriptions often explicitly distinguish similar tools. However, the huge surface includes many near-neighbors such as create_post/create_posts_batch/validate_post/update_post, upload_media/create_signed_upload/create_media_drop, get_video_options/run_video_function, and several list/manage pairs across billing, inbox, webhooks, and Google Business. These are mostly documented, but the boundaries are not always immediately obvious.
The set is overwhelmingly snake_case and follows a predictable verb_noun pattern such as list_posts, create_post, manage_brand, and get_subscription. Minor deviations like whoami, posterly_status, and broad manage_* multi-action tools keep it from being perfectly uniform, but the convention is still readable and stable.
At 73 tools, the server is far beyond a well-scoped surface and into extreme breadth for a single MCP endpoint. Even though many tools map to real subdomains, the count makes navigation, tool selection, and maintenance costly.
The surface covers an unusually broad lifecycle: posting and scheduling, media uploads, analytics, social inbox comments and DMs, Google Business Profile management, billing, workspaces, API keys, OAuth clients, webhooks, AI image/video generation, signup, support, and status checks. CRUD and preview/confirm flows are present across nearly every domain, with only minor actions intentionally delegated to dashboard flows.
Maintenance
Related MCP Connectors
Schedule, publish, and analyze social posts across 11 platforms from any MCP client.
Schedule, publish, and analyze social media posts across 11 platforms from any MCP client.
Create, schedule and publish social posts to 13 platforms for your brands.
Create, schedule, and publish social posts, manage accounts, and read analytics as MCP tools.
Related MCP Servers
- AlicenseAqualityBmaintenanceSchedule and manage social media posts across 10 platforms (Instagram, Facebook, TikTok, X, LinkedIn, YouTube, Threads, Pinterest, Bluesky, Telegram) from any MCP-compatible AI assistant. Supports batch posting, media uploads, analytics, and platform-specific features like Reels, Shorts, and carousels.11412 npm7MIT

@fopost/mcpofficial
AlicenseAqualityBmaintenanceEnables managing social media posts, accounts, and AI-powered content features from any MCP client, including scheduling, publishing, analysis, and AI caption generation.1443 npmMIT
@crmsolid/mcp-serverofficial
AlicenseNot gradedqualityBmaintenanceEnables AI assistants to manage social DM inboxes and posting calendars across 12 platforms, allowing users to triage messages, draft replies, schedule posts, and pull stats from MCP clients.58 npm6MIT- AlicenseNot gradedqualityBmaintenanceEnables AI agents to post, schedule, thread, delete, and analyze social media posts across platforms like X, Bluesky, LinkedIn, and Instagram through a single MCP interface.123 npmMIT