Post Bridge
Server Details
Schedule and publish social media posts to 10 platforms from your AI agent
- Status
- Healthy
- Uptime
- 64.0% over 48 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- post-bridge-hq/agent-mode
- GitHub Stars
- 14
TDQS
Scored across 16 tools
Each tool targets a fairly distinct resource+action, and descriptions do heavy lifting to separate them. The main potential confusion is upload_media vs request_upload_link (both media ingestion) and the analytics trio (list_analytics, get_analytics_daily, sync_analytics), but the descriptions clearly delineate each use case.
Every tool follows a clean verb_noun snake_case pattern (create_post, delete_media, list_analytics, get_post, upload_media, etc.). No mixed conventions or vague verbs anywhere in the set.
16 tools is slightly heavy but justified by the domain: multi-platform posting, media handling, accounts, analytics, and connect/upload link flows. Each tool maps to a real operation, though a few could theoretically be consolidated.
Strong lifecycle coverage: post create/update/delete, media upload/list/preview/delete, analytics listing/daily/sync, account listing, and connect/upload link flows. Minor gaps like no account disconnect and published posts not deletable (an API limitation) are workaroundable.
Available Tools
16 toolscreate_postCreate PostADestructiveInspect
Publish or schedule a social media post to Instagram, TikTok, YouTube, X (Twitter), LinkedIn, Facebook, Pinterest, Threads, Bluesky, and Google Business Profile. One call can cross-post the same text, image, or video to multiple accounts and platforms at once. Use list_social_accounts first to get account IDs. Omit scheduled_at to post immediately. Pass public media URLs via media_urls (the API downloads them). IMPORTANT for X/Twitter: links are automatically removed from the text before posting to X — this includes full URLs (http://, https://, www.) AND bare domains like foo.com or foo.io/path. X charges far more for posts that contain links. Other platforms keep their links. To share a link on X, post it in a reply or put it in the account bio. Note: is_draft saves the post in Post Bridge only — it does not create a draft on any platform. All platforms will publish immediately when the draft is later sent. TikTok's platform_configurations.tiktok.draft is a separate option that creates an actual draft on TikTok. TikTok photo carousels: pass several images (media or media_urls) to a TikTok account and it publishes as a photo carousel. Caption limits: Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500, Instagram 2,200, TikTok 2,200 for videos and 4,000 for photo posts, LinkedIn 3,000 characters. When the shared caption is longer than a platform allows, write a shorter platform-specific caption in platform_configurations..caption in the same call, without being asked. X allows 280 characters, or up to 25,000 when the account has X Premium: check has_x_premium on that account from list_social_accounts, keep the full caption if it is true, and write a shorter X caption if it is false.
| Name | Required | Description | Default |
|---|---|---|---|
| media | No | Array of media IDs from previously uploaded media (use list_media to find IDs). Media files are automatically deleted after all posts using them have published — IDs become invalid after that. Media shared across multiple scheduled/draft posts is safe until the last one publishes. MEDIA REQUIRED (the post fails on these platforms with no media): youtube (exactly 1 video), tiktok (1 video, or one+ images), instagram (1-10 images/videos; a story is exactly 1; PDFs are dropped), pinterest (1-5 images — 2+ publishes as a carousel pin and ALL images must share the same width/height ratio or Pinterest rejects the pin — or 1 video). MEDIA OPTIONAL (text-only allowed): twitter/X (up to 4 images, or 1 video), facebook, linkedin (up to 20 images, or 1 video, or 1 PDF document), threads (up to 20 images/videos), bluesky (up to 4 images, or 1 video), google_business (text or a single image; no video). A post may be created with no media and have media added later via update_post — but it will not publish to a media-required platform until media exists. | |
| caption | Yes | The post caption/text content | |
| is_draft | No | If true, saves as a draft in Post Bridge only — not a draft on any platform. All platforms will publish immediately when the draft is later sent. The response includes a warning confirming this. | |
| use_queue | No | Automatically schedule the post to the next available queue slot. Cannot be used with scheduled_at. Pass true to use your saved timezone, or { timezone: '...' } to override. | |
| media_urls | No | Array of publicly accessible media URLs (images/videos). The API will download them. | |
| scheduled_at | No | ISO 8601 datetime to schedule the post (e.g. 2025-12-31T09:00:00Z). Omit to post immediately. | |
| social_accounts | Yes | Array of social account IDs to post to (get these from list_social_accounts) | |
| account_configurations | No | Per-account overrides for caption and media | |
| platform_configurations | No | Optional per-platform overrides. Keyed by platform name (pinterest, instagram, tiktok, twitter, youtube, facebook, linkedin, bluesky, threads, google_business). Only include a key for a platform you are actually posting to, and only the fields you want to override — everything else falls back to the top-level caption/media. Each platform exposes different extra fields (e.g. tiktok.draft, instagram.placement, youtube.thumbnail, google_business.cta_action_type); see each field's description for accepted values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a mutating, destructive, open-world operation, and the description adds substantial context beyond them: X strips URLs (including bare domains) to avoid surcharges, is_draft is Post-Bridge-only vs TikTok's real draft, media is auto-deleted after publishing, and per-platform caption caps. This is exactly the behavioral detail annotations cannot carry.
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 long, but length is justified by ten platforms and several genuine gotchas. It is front-loaded with purpose, then routing, then critical caveats. Minor redundancy: caption limits are restated in both the description and the per-platform schema fields.
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 nested per-platform objects, no output schema, and 100% schema coverage, the description supplies the missing cross-platform judgment (link stripping, draft semantics, caption overflow handling). It does not describe the response shape, though no output schema exists to defer to.
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 adds cross-cutting meaning: media_urls are downloaded by the API from public URLs, is_draft semantics, and the platform caption-limit strategy that ties caption/platform_configurations together. It largely restates rather than extends a few fields, keeping it below 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 precise verb (publish/schedule) and resource (social media post) and enumerates the supported platforms plus cross-posting capability. An agent can immediately distinguish this from siblings like update_post or list_posts 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 explicit operational routing: call list_social_accounts first for IDs, omit scheduled_at to post immediately, write platform-specific captions without being asked, and check has_x_premium before writing an X caption. When-to-do-X conditions are spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mediaADestructiveInspect
Delete an uploaded media file. Only deletes media not currently used by any post.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The media ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the operation as destructive, so the description does not need to restate that. The added constraint that media in use by a post will not be deleted provides useful behavioral context beyond the annotations, though it does not specify whether an error is raised or the action is silently ignored.
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 only two short sentences, with the core action stated first and the important limitation stated second. Every word earns its place and there is no redundancy or fluff.
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 simple one-parameter, no-output-schema tool with a destructive annotation, the description covers the essential purpose and key constraint. A minor gap is that it does not clarify what happens when deletion is attempted on media still in use by a post.
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 schema fully documents the single required 'id' parameter with a clear description, so the parameter semantics are already well covered. The description adds only the 'media file' context and does not provide additional meaning 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 action ('Delete') and target resource ('uploaded media file'), clearly distinguishing it from deleting a post or managing other resources. The added condition about media not used by posts further clarifies scope.
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 gives clear context on when deletion is appropriate by specifying that only media not currently used by any post can be deleted. It does not explicitly name alternative sibling tools like delete_post or list_media, but the conditional guidance is enough to inform basic routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postADestructiveInspect
Delete a scheduled or draft post. Published posts cannot be deleted via the API.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The post ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive behavior, but the description adds a non-obvious API restriction: published posts cannot be deleted. It also narrows the behavioral scope to scheduled/draft posts. This exceeds the annotations, though it does not mention permanence or response 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?
Two short sentences with no filler. The action and target are front-loaded, and the key constraint about published posts is stated immediately after.
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 single-parameter destructive action, the description is complete: it clearly defines what can be deleted and the one major limitation. With annotations already covering the destructive nature and no output schema requiring explanation, nothing critical 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?
The schema covers the only parameter, id, with a clear description: 'The post ID to delete'. The tool description adds context that only scheduled/draft post IDs are valid, which slightly supplements the schema, but the parameter itself is already well-documented.
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 states the action (delete) and resource (post), and specifies the scope by saying 'scheduled or draft post' while explicitly excluding published posts. This makes it distinct from sibling tools like create_post, update_post, get_post, and list_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?
The description tells the agent when to use this tool: for deleting scheduled or draft posts. It also tells the agent when not to use it: published posts cannot be deleted via the API. It does not explicitly name an alternative for published posts, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analytics_dailyARead-onlyInspect
Get per-day analytics snapshots and deltas for a single post. Returns cumulative snapshots and per-day gains (views/likes/comments/shares). Use the analytics record ID from list_analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Analytics record ID (from list_analytics) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the base safety profile is known. The description adds meaningful behavioral detail: it returns cumulative snapshots and per-day gains for views/likes/comments/shares, and scopes to a single post. This goes beyond what annotations provide, though it stops short of discussing pagination or date-range limits.
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 with no filler: the primary action, the return shape, and the parameter source. The description is front-loaded and every sentence earns its place, with only minor, acceptable redundancy between 'snapshots and deltas' and 'cumulative snapshots and per-day gains'.
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 single-parameter read-only tool with no output schema, the description tells the agent what ID to pass, where to get it, and what kind of data to expect. It would be slightly more complete if it specified the response structure or ordering, but this is a minor gap for such a simple 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?
The schema already fully documents the only parameter as 'Analytics record ID (from list_analytics)' with 100% coverage. The description repeats this source but adds no new meaning beyond the schema, so the baseline score 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 clearly states the verb 'Get', the resource 'per-day analytics snapshots and deltas for a single post', and the return contents. It is unambiguous and naturally distinguishes itself from siblings like list_analytics and sync_analytics.
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 gives clear context: this tool is for per-day analytics of one post, and it tells the agent to source the ID from list_analytics. It does not explicitly name alternative tools or when-not-to-use conditions, but the workflow is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postARead-onlyInspect
Get details of a single post by ID, including its status, caption, media, and platform results.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The post ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description only needs to add context. It adds the returned fields, but it does not disclose edge-case behaviors such as not-found handling, permission requirements, or whether 'platform results' are always present. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the operation and resource, then lists the key returned details. Every part earns its place 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?
For a simple read-by-ID tool with one required parameter and no output schema, the description is largely complete: it states what is returned and the annotations cover safety. 'Platform results' could be slightly more specific given the list_post_results sibling, but the overall context is 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 only parameter, id, is already fully described in the schema as 'The post ID', with 100% schema description coverage. The description reinforces that the tool fetches by ID but adds no extra meaning 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 clearly identifies a specific verb ('Get'), a specific resource ('details of a single post by ID'), and enumerates the included fields (status, caption, media, platform results). This distinguishes it from list-oriented siblings like list_posts and list_post_results.
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 'single post by ID' implies that this tool is for retrieving a specific post rather than listing posts, but it does not explicitly name alternatives or state when not to use it. Usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_analyticsARead-onlyInspect
Get social media post performance analytics — views, likes, comments, and shares for posts published through Post Bridge (TikTok, YouTube, Instagram, Facebook). Can filter by platform, timeframe, or media type (video vs TikTok slideshow).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return | |
| offset | No | Offset for pagination | |
| platform | No | Filter by platform (e.g. instagram, tiktok, youtube) | |
| timeframe | No | Only posts published in this window. Default all. | |
| media_type | No | slideshow = TikTok photo posts, video = TikTok and YouTube videos. Instagram and Facebook posts are excluded when set (they don't report duration). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description usefully adds that results are scoped to posts published through Post Bridge and that media_type has platform-specific exclusion behavior, but it does not cover pagination, default limits, or return shape. Modest added value over 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?
Two front-loaded sentences with no filler: the first names the resource and metrics, the second lists the filters. 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?
Annotations cover the safety profile and the schema fully documents parameters, so the essential invocation info is present. However, for a list/analytics tool with no output schema, the description says nothing about return format, pagination behavior, or how results relate to get_analytics_daily or sync_analytics, leaving sibling disambiguation 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 description coverage is 100%, so every parameter already has a description. The description echoes the filterable dimensions (platform, timeframe, media type) but adds no syntax, defaults, or edge cases beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.
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 resource ('social media post performance analytics'), and enumerates the metrics returned (views, likes, comments, shares) plus the platforms involved. An agent can distinguish this from get_analytics_daily and sync_analytics 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 description implies usage by naming supported platforms and filter dimensions, but never states when to use this over the sibling get_analytics_daily or exactly what its scope is relative to sync_analytics. No alternative is named and no when-not condition is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mediaARead-onlyInspect
List your uploaded media files. Returns media IDs, URLs, and types. Use media IDs when creating posts with previously uploaded content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of media items to return | |
| offset | No | Offset for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful scope information ('your uploaded media files') and return content details, but it doesn't disclose behaviors like pagination defaults or ordering. With strong annotation coverage, this is adequate but not exceptional.
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 short sentences each earn their place: the first states the action, the second lists what is returned, and the third explains a practical downstream use. There is no redundancy or 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 simple, read-only list tool, the description is complete: it states scope, return fields, and a relevant use case. The schema covers parameters, annotations cover safety, and the description covers what the agent will receive. No essential information 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 description coverage is 100%, with both limit and offset already described as 'Number of media items to return' and 'Offset for pagination'. The description adds no parameter-specific detail beyond this, so the schema carries the burden and 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 clearly states the verb ('List') and resource ('your uploaded media files'), and the mention of returned media IDs, URLs, and types distinguishes it from sibling tools like upload_media or delete_media. An agent can immediately identify what action this tool performs.
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 provides clear context: it lists uploaded media and notes that media IDs are useful when creating posts with previously uploaded content. However, it doesn't explicitly state when not to use it or name alternative tools, though the usage context is sufficient for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_post_resultsARead-onlyInspect
Check posting results per platform. Shows whether each platform post succeeded or failed, with error details if applicable.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return | |
| offset | No | Offset for pagination | |
| post_id | No | Filter results by a specific post ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about per-platform success/failure and error details, but it does not disclose pagination behavior, ordering, or data freshness. This meets the lowered bar set by annotations but does not go beyond into richer behavioral context.
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 with no redundant wording. The core purpose is front-loaded, and every clause adds value: the action, the scope, and the outcome details. This is appropriately concise for the tool's simplicity.
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 list operation with no output schema, the description explains the main return content (success/failure per platform and error details), while the input schema covers pagination and filtering. It could be more explicit about the response shape or default ordering, but nothing critical is missing for an agent to invoke 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 description coverage is 100%, so limit, offset, and post_id are already fully documented in the input schema. The description adds no additional parameter meaning, so the baseline score 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 uses specific action verbs ('Check', 'Shows') with a clear object ('posting results per platform') and explicitly states what it reports: success/failure with error details. This clearly distinguishes it from sibling tools like list_posts or get_post, which focus on the posts themselves rather than platform-level delivery outcomes.
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 conveys the tool's purpose clearly, which implies when it should be used, but it does not explicitly mention alternatives or state conditions for choosing this tool over list_posts or get_analytics. There is no 'use when' or 'use instead' guidance, only an implied use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsARead-onlyInspect
List your posts with optional filters. Returns post ID, caption, status (scheduled, processing, posted), is_draft flag, scheduled time, and associated accounts. Drafts have status 'scheduled' with is_draft: true and scheduled_at: null.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of posts to return (default 50) | |
| offset | No | Offset for pagination | |
| status | No | Filter by status: scheduled, processing, or posted. Drafts have status 'scheduled' — use is_draft on results to distinguish. | |
| platform | No | Filter by platform (e.g. instagram, tiktok, youtube, twitter, facebook, linkedin, pinterest, bluesky, threads, google_business) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only and non-destructive. The description adds meaningful behavioral context beyond that: drafts use status 'scheduled' with is_draft: true and scheduled_at: null, which is essential for correctly interpreting filtered results. This prevents a likely misinterpretation when filtering by status.
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 deliver the purpose, return fields, and a subtle behavioral caveat with no wasted words. The core action is front-loaded and the additional draft clarification is directly relevant to interpreting results.
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 simple read-only list tool with no required parameters and full schema coverage, the description is complete. It specifies the return fields, covers the tricky draft/status edge case, and benefits from annotations that already establish safety. No critical information needed to call the tool 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 description coverage is 100%, so the parameters (limit, offset, status, platform) are already well documented. The description does not add parameter-specific details beyond what the schema provides, matching the baseline of 3.
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 states the tool's function: 'List your posts with optional filters' and enumerates the returned fields (post ID, caption, status, is_draft, scheduled time, accounts). This distinguishes it from the more specific get_post sibling, though it does not explicitly name any alternative tool.
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 gives no guidance about when to use this tool versus siblings like get_post or list_post_results. The phrase 'List your posts' implies the basic use case, but there are no explicit conditions, exclusions, or references to alternatives, leaving the agent to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_social_accountsARead-onlyInspect
List the user's connected social media accounts across Instagram, TikTok, YouTube, X (Twitter), LinkedIn, Facebook, Pinterest, Threads, Bluesky, and Google Business Profile. Returns account IDs, platforms, usernames, needs_reconnect, and has_x_premium (X accounts only: true means posts can be up to 25,000 characters instead of 280). When needs_reconnect is true, repeated dead-token failures have paused posting to that account: posts to it are skipped until the user reconnects it in the dashboard (reconnecting clears it automatically). Do not post or retry against accounts in that state; tell the user to reconnect instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, non-destructive, closed-world profile, but the description goes well beyond them: it details the returned fields, decodes has_x_premium (25,000 vs 280 character limit for X), and explains the operational consequence of needs_reconnect (posting paused, posts skipped, cleared automatically upon reconnect). That is the root-cause-plus-remediation context an agent needs and cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then progressively adds return fields and the needs_reconnect rule; every sentence carries information. The ten-platform enumeration in the first sentence is slightly bloated but defensible as scope-setting, so it falls just short of a 5.
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 full burden of explaining the return value, and it does so by enumerating the fields and interpreting the two non-obvious ones. Combined with complete safety annotations and zero parameters, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly adds no parameter guidance since there is none to give, and instead spends its words on the return shape.
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 (the user's connected social media accounts) and enumerates the exact platforms covered, which no sibling tool addresses. An agent can immediately distinguish this from list_posts, list_media, or list_analytics 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?
Clear context for when to reach for it (checking connected accounts and their health) and an explicit negative rule: do not post or retry against accounts flagged needs_reconnect, and tell the user to reconnect instead. It stops short of naming alternative sibling tools or explicitly framing this as a prerequisite step before create_post, so it is strong but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_mediaARead-onlyInspect
See an uploaded image: returns a small preview of the picture itself so you can tell photos apart (which one is the pink hat). Images only; videos and PDFs return a text note. Use list_media first to get ids.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The media ID (from list_media or upload_media) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context by explaining that images return a visual preview while videos and PDFs return only a text note. This goes beyond the annotations and helps set expectations.
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 two compact sentences with no filler. The core purpose is front-loaded, and the illustrative 'pink hat' example adds clarity without bloating the 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?
For a simple single-parameter read-only tool, the description covers the main behavior, the unsupported media types, and the prerequisite. It does not specify the exact preview format (e.g., image URL vs. inline data), but the lack of an output schema makes that a minor 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?
The schema already fully documents the single 'id' parameter with a description and provenance ('from list_media or upload_media'). The description reinforces using list_media first, which is helpful, but adds little beyond the schema's own documentation.
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: 'See an uploaded image' and 'returns a small preview of the picture itself.' It also clarifies scope by saying images only, and distinguishes the tool from other media operations clearly.
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 gives explicit guidance: 'Images only; videos and PDFs return a text note' and 'Use list_media first to get ids.' This tells the agent when the tool is useful and what prerequisite step is needed, though it does not name an alternative tool for non-image media.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_connect_linkRequest Connect LinkAInspect
Get a link that connects a new Instagram, Facebook or TikTok account to the user's Post Bridge account without them opening the dashboard. Give the link to the person who owns the social account (the user themselves, or a client of theirs): they approve on the platform's own consent screen and are sent back. In Claude and ChatGPT a connect button renders right in the chat and the new account is reported back to you once it is connected. Optional external_ref tags the connected accounts with the user's own reference (a client name or id) so list_social_accounts can be filtered by it later. Each connected account counts against the plan's account cap; when the cap is reached this returns an error pointing at the billing page. Instagram uses Instagram's own login (one professional account, no Facebook Page needed); Facebook connects every Page the login manages.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Which platform the link connects. One link connects one platform. | |
| expires_in | No | Seconds the link stays valid. Default 86400 (24 hours), maximum 7 days. | |
| return_url | No | Where to send the person afterwards. Defaults to the Post Bridge connections page. | |
| external_ref | No | The user's own reference for the person or client this link is for, stored on the connected accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say the operation is not read-only and not destructive; the description adds substantial behavior: the out-of-band consent flow, in-chat connect button and reporting, external_ref filtering, account cap failure pointing to billing, and platform-specific differences (Instagram's own login vs. Facebook's every-Page 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?
Several dense sentences, each carrying distinct information: purpose, recipient flow, in-chat behavior, external ref, account cap, and platform nuances. The most important purpose is front-loaded and there is 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 4-parameter tool with no output schema, the description is complete: it conveys the returned artifact informally ('Get a link'), the flow, the reporting behavior, the cap failure mode, and platform quirks. Nothing essential for an agent to choose or invoke this tool 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 covers all four parameters, so the baseline is 3. The description adds real value by explaining external_ref's purpose ('so list_social_accounts can be filtered by it later') and platform-specific behavior for the platform parameter. It does not add semantics for expires_in or return_url, but those are already fully described 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 description opens with a specific verb and resource: 'Get a link that connects a new Instagram, Facebook or TikTok account to the user's Post Bridge account.' It states the core action, the resource, and the key distinction ('without them opening the dashboard'), which separates it from the upload/link 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?
It gives clear context on who should receive the link and what happens after: the account owner approves on the platform's consent screen and is sent back. It does not explicitly say 'do not use for uploading or existing accounts' or name a when-not alternative, so it stops 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.
request_upload_linkRequest Upload LinkAInspect
Get an upload page for files that live on the user's device (a video or photos on their phone or laptop) and therefore have no public URL. Returns a link valid for 24 hours; give it to the user, they open it and drop one or many files in (a whole carousel at once is fine), and each file lands in their Post Bridge media library. In Claude and ChatGPT the upload box renders right in the chat and the media ids are reported back to you when the upload finishes; elsewhere, call list_media (newest first) after the user says they are done and take as many media_ids as files they uploaded, then pass them to create_post. Use this whenever the user wants to post a file that upload_media cannot reach: no URL, larger than 3MB, and you cannot run shell commands on the user's machine (if you can, use upload_media with size_bytes instead).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic non-readonly/non-destructive profile, but the description adds real behavioral detail: the link expires in 24 hours, one or many files can be dropped at once, and media_ids are auto-reported in Claude/ChatGPT while other clients require a list_media fallback. That is exactly the context annotations cannot carry.
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 core purpose and the 24-hour validity, then layers the workflow. It is on the long side with a dense final sentence, but nearly every clause carries operational information an agent needs rather than 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?
No output schema and no parameters, so the description must explain what comes back and what to do next, and it does both: the link's lifetime, how ids are surfaced per client, and the list_media/create_post handoff. 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. It does usefully describe the downstream artifacts (the link, the media_ids) the caller will consume.
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+resource (get an upload page for device-local files) and immediately scopes it against siblings: it is for files with no public URL, which upload_media cannot reach. An agent can distinguish it from upload_media and request_connect_link 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 explicit when-to-use conditions (no URL, larger than 3MB, no shell access on the user's machine) and names the alternative plus its selector: 'if you can run shell commands, use upload_media with size_bytes instead.' It also prescribes the post-upload workflow (list_media newest-first, then create_post).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_analyticsAInspect
Trigger a refresh of analytics data from all connected platforms. Use this if analytics seem stale.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Sync a specific platform only. Omit to sync all platforms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and has open-world effects, and the description adds that the refresh applies to all connected platforms unless a specific one is chosen. It does not describe potential asynchronous behavior or side effects, but the annotations lower the burden and this is sufficient for a simple trigger action.
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 consists of two short, front-loaded sentences. The first states the main purpose and the second gives a usage trigger, with no unnecessary words.
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 low-complexity tool with one optional parameter, no output schema, and annotations covering safety, the description is complete. The agent knows what the tool does, when to use it, and how the optional parameter behaves.
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 parameter is fully documented in the schema, including its enum and the behavior when omitted ('Omit to sync all platforms'). The description adds 'all connected platforms' context but does not need to go beyond the schema, so the baseline score 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 clearly states the action ('Trigger a refresh of analytics data') and the scope ('from all connected platforms'). It distinguishes this tool from siblings like list_analytics and get_analytics_daily, which read data, by emphasizing the refresh/update nature.
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 explicitly says when to use the tool: 'Use this if analytics seem stale.' This gives a clear condition for invocation. However, it does not mention when not to use it or name any alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_postADestructiveInspect
Update a scheduled or draft post. You can change the caption, schedule time, accounts, or media.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The post ID to update | |
| media | No | New array of media IDs | |
| caption | No | New caption text | |
| is_draft | No | Set draft status | |
| media_urls | No | New array of public media URLs | |
| scheduled_at | No | New scheduled datetime (ISO 8601) | |
| social_accounts | No | New array of social account IDs | |
| account_configurations | No | ||
| platform_configurations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the mutation risk is covered structurally. The description adds the useful scope constraint (scheduled/draft only), but omits the critical update semantics — whether unspecified fields are preserved or wiped — and says nothing about auth or platform-side side effects.
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 with the primary action first and the editable surface second. Zero filler; 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?
Nine parameters including nested platform override objects and no output schema, but the schema itself is exhaustively documented per field (overrides, character limits, failure behavior). The description only needs to frame the operation, which it does adequately.
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 78%, so the schema already explains almost every parameter, including the deep platform_configurations overrides. The description names four field categories but adds no syntax, defaults, or interaction rules (e.g. top-level vs per-platform override precedence) beyond what the schema states.
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+resource ('Update a ... post') and enumerates the mutable fields (caption, schedule time, accounts, media). It scopes the target to 'scheduled or draft' posts, which distinguishes it from create_post/delete_post without needing the schema. No explicit sibling routing, though the sibling set makes the intent unambiguous.
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?
Implies a precondition (the post must be a scheduled or draft post) but never states what happens for published posts or when to choose update_post over delete_post + create_post. Usage is inferable rather than spelled out; no exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_mediaAInspect
Upload media and get back a reusable media_id. Three modes: (1) pass url to upload from a publicly accessible URL, (2) pass data (base64-encoded file bytes) plus mime_type for small files (3MB cap), or (3) for a file on the user's machine when you can run shell commands (Claude Code, Cowork, Codex, Cursor), pass size_bytes plus mime_type and name with no url or data: you get a media_id and a presigned upload_url, then PUT the raw file to it yourself (curl command included in the result, valid 2 hours, up to 500MB, no 3MB cap). Use mode 3 for any local video. Supports images (PNG/JPEG), videos (MP4/MOV), and PDFs (application/pdf). A PDF returns a document-kind media_id — pass it to create_post on a LinkedIn account to publish a native LinkedIn document post (PDF carousel); set platform_configurations.linkedin.document_title to control the title. Use the returned media_id with the media param on create_post/update_post. HEIC/HEIF images are not supported — convert to JPEG or PNG first. Direct data uploads are capped at 3MB raw because of serverless request-body limits — for larger local files use mode 3 if you can run commands, otherwise request_upload_link.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Publicly accessible URL of the image or video to upload. Provide either `url` or `data`, not both. | |
| data | No | Base64-encoded file contents. Requires `mime_type`. Capped at 3MB raw (serverless request-body limit). For larger files, host the file at a public URL and pass it as `url` instead. Provide either `data` or `url`, not both. | |
| name | No | Optional filename to store (defaults to the URL's filename, or 'file' for direct uploads) | |
| mime_type | No | Required with `data` or `size_bytes`. One of: image/png, image/jpeg, video/mp4, video/quicktime, application/pdf. | |
| size_bytes | No | Mode 3: exact size of the local file in bytes (e.g. from `stat` or `wc -c`). With `mime_type` and `name`, and no `url`/`data`, returns a presigned upload_url to PUT the file to yourself. Max 500MB. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety hints (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds substantial behavior beyond that: 3MB serverless body cap, 500MB presigned limit, 2-hour URL validity, HEIC/HEIF rejection, PDF producing a document-kind media_id with LinkedIn carousel semantics, and the curl command returned in the result.
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 core purpose and the three modes come first, then format support, then downstream usage. Nearly every clause carries information, though the mode enumeration is long enough that a reader must parse carefully.
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, yet the description explains what is returned (media_id, presigned upload_url, included curl command) and how to use it downstream. Supported and unsupported formats, size limits, and the LinkedIn PDF path are all covered, leaving no operational 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 already 100%, so the baseline is 3. The description goes further by grouping parameters into named modes and spelling out cross-parameter rules (url XOR data; size_bytes requires mime_type and name and forbids url/data), which is genuine added meaning over the per-field 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+resource ('Upload media and get back a reusable media_id') and immediately distinguishes the three input modes. It also names the downstream consumer (create_post/update_post `media` param) and the relevant sibling request_upload_link, so an agent can place it precisely among 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?
Explicit routing rules: mode 1 for public URLs, mode 2 for small base64 files (3MB cap), mode 3 for local files when shell commands are available, plus 'Use mode 3 for any local video' and 'otherwise request_upload_link'. Both the when and the fallback alternative are named.
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.
2 tool updates
- Changed
create_post2 fields changed- changed
Input schema / properties / platform_configurations / properties / linkedin / descriptionPrevious value: -"LinkedIn overrides. Supports first_comment; document_title only matters for PDF (document) posts."New value: +"LinkedIn overrides. document_title only matters for PDF (document) posts." - removed
Input schema / properties / platform_configurations / properties / linkedin / properties / first_commentRemoved value: -{ - "description": "Optional comment posted on the LinkedIn post immediately after it publishes (a 'first comment'), as the same person or page. A good spot for a link. Trimmed to 1,250 characters. A failed comment won't fail the post.", - "type": "string" -}
- Changed
update_post2 fields changed- changed
Input schema / properties / platform_configurations / properties / linkedin / descriptionPrevious value: -"LinkedIn overrides. Supports first_comment; document_title only matters for PDF (document) posts."New value: +"LinkedIn overrides. document_title only matters for PDF (document) posts." - removed
Input schema / properties / platform_configurations / properties / linkedin / properties / first_commentRemoved value: -{ - "description": "Optional comment posted on the LinkedIn post immediately after it publishes (a 'first comment'), as the same person or page. A good spot for a link. Trimmed to 1,250 characters. A failed comment won't fail the post.", - "type": "string" -}
2 tool updates
- Changed
create_post2 fields changed- changed
Input schema / properties / platform_configurations / properties / linkedin / descriptionPrevious value: -"LinkedIn overrides. document_title only matters for PDF (document) posts."New value: +"LinkedIn overrides. Supports first_comment; document_title only matters for PDF (document) posts." - added
Input schema / properties / platform_configurations / properties / linkedin / properties / first_commentAdded value: +{ + "description": "Optional comment posted on the LinkedIn post immediately after it publishes (a 'first comment'), as the same person or page. A good spot for a link. Trimmed to 1,250 characters. A failed comment won't fail the post.", + "type": "string" +}
- Changed
update_post2 fields changed- changed
Input schema / properties / platform_configurations / properties / linkedin / descriptionPrevious value: -"LinkedIn overrides. document_title only matters for PDF (document) posts."New value: +"LinkedIn overrides. Supports first_comment; document_title only matters for PDF (document) posts." - added
Input schema / properties / platform_configurations / properties / linkedin / properties / first_commentAdded value: +{ + "description": "Optional comment posted on the LinkedIn post immediately after it publishes (a 'first comment'), as the same person or page. A good spot for a link. Trimmed to 1,250 characters. A failed comment won't fail the post.", + "type": "string" +}
1 tool update
- Changed
upload_media2 fields changed- changed
Input schema / properties / mime_type / descriptionPrevious value: -"Required when using `data`. One of: image/png, image/jpeg, video/mp4, video/quicktime, application/pdf."New value: +"Required with `data` or `size_bytes`. One of: image/png, image/jpeg, video/mp4, video/quicktime, application/pdf." - added
Input schema / properties / size_bytesAdded value: +{ + "description": "Mode 3: exact size of the local file in bytes (e.g. from `stat` or `wc -c`). With `mime_type` and `name`, and no `url`/`data`, returns a presigned upload_url to PUT the file to yourself. Max 500MB.", + "exclusiveMinimum": 0, + "type": "integer" +}
1 tool update
- Changed
list_analytics2 fields changed- added
Input schema / properties / media_typeAdded value: +{ + "description": "slideshow = TikTok photo posts, video = TikTok and YouTube videos. Instagram and Facebook posts are excluded when set (they don't report duration).", + "enum": [ + "video", + "slideshow" + ], + "type": "string" +} - added
Input schema / properties / timeframeAdded value: +{ + "description": "Only posts published in this window. Default all.", + "enum": [ + "7d", + "30d", + "90d", + "all" + ], + "type": "string" +}
2 tool updates
- Changed
create_post1 field changed- added
Input schema / properties / platform_configurations / properties / youtube / properties / has_paid_product_placementAdded value: +{ + "description": "Set true when the video includes paid product placement, a sponsorship or an endorsement. YouTube shows viewers an \"Includes paid promotion\" label. Maps to the YouTube Data API paidProductPlacementDetails.hasPaidProductPlacement field.", + "type": "boolean" +}
- Changed
update_post1 field changed- added
Input schema / properties / platform_configurations / properties / youtube / properties / has_paid_product_placementAdded value: +{ + "description": "Set true when the video includes paid product placement, a sponsorship or an endorsement. YouTube shows viewers an \"Includes paid promotion\" label. Maps to the YouTube Data API paidProductPlacementDetails.hasPaidProductPlacement field.", + "type": "boolean" +}
2 tool updates
- Changed
create_post10 fields changed- changed
Input schema / properties / platform_configurations / properties / bluesky / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / facebook / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / google_business / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / instagram / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / linkedin / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / pinterest / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / threads / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / tiktok / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / twitter / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / youtube / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
- Changed
update_post10 fields changed- changed
Input schema / properties / platform_configurations / properties / bluesky / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / facebook / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / google_business / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / instagram / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / linkedin / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / pinterest / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / threads / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / tiktok / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / twitter / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut." - changed
Input schema / properties / platform_configurations / properties / youtube / properties / caption / descriptionPrevious value: -"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption."New value: +"Platform-specific caption. Overrides the top-level caption for this platform only. Omit to use the shared caption. Write one whenever the shared caption is longer than this platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500 characters; X 280 unless has_x_premium is true on the account) so nothing gets cut."
1 tool update
- Added
preview_media
1 tool update
- Added
request_connect_link
14 tool updates
- First observed
create_post - First observed
delete_media - First observed
delete_post - First observed
get_analytics_daily - First observed
get_post - First observed
list_analytics - First observed
list_media - First observed
list_post_results - First observed
list_posts - First observed
list_social_accounts - First observed
request_upload_link - First observed
sync_analytics - First observed
update_post - First observed
upload_media
Related MCP Connectors
Draft, schedule and publish social posts to nine platforms from any AI agent.
Draft, schedule and publish social media posts from any AI agent.
Social post scheduling for AI agents: queue or draft posts to 12 connected networks.
Post, schedule, and track social posts on X, Bluesky, LinkedIn, Instagram and more from AI agents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceSocial media scheduling and publishing for AI agents. 17 validation-first tools to post to X, LinkedIn, Instagram, TikTok, YouTube, Reddit, Discord, Telegram, and more through one connected workspace.142 npm93MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to create, schedule, and manage social media posts across 10 platforms via a unified API.-
- AlicenseAqualityBmaintenanceEnables AI assistants to schedule and publish social media posts to platforms like Instagram, TikTok, YouTube, LinkedIn, Facebook, X, Threads, and Pinterest using natural language.33586 npm4MIT

AdaptlyPostofficial
AlicenseAqualityAmaintenanceGives AI agents the ability to schedule and publish social media posts to Instagram, TikTok, YouTube, X, LinkedIn, Facebook, Pinterest, Threads, and Bluesky. Create, schedule, and bulk-plan posts with per-platform captions, then check per-platform results and retry failures.12MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.