AdaptlyPost
Server Details
Schedule and post to Instagram, TikTok, YouTube, X, Facebook, LinkedIn, Pinterest, Threads, Bluesky.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
Each tool targets a distinct resource and action: post lifecycle, publishing outcomes, media upload, account lookup, and analytics views are cleanly separated. The few close pairs like create_post vs bulk_schedule_posts and get_analytics_overview vs get_platform_breakdown are explicitly differentiated in their descriptions.
All 18 tools follow a consistent snake_case verb_noun pattern such as create_post, list_posts, get_analytics_timeseries, and trigger_analytics_sync. There are no mixed naming conventions or vague generic verbs.
18 tools is slightly above the typical 3-15 sweet spot, but each tool has a clear purpose and earns its place. The count is justified by the server's broad scope covering post lifecycle, bulk operations, retries, media upload, and a full analytics suite.
The tool surface covers the full post lifecycle: create, bulk schedule, update, publish draft, delete, list, get, per-platform results, and retry. Media upload, account discovery, analytics overview/trend/breakdown/post-level, and sync triggering are all present, so there are no obvious dead ends.
Available Tools
18 toolsbulk_schedule_postsBulk Schedule PostsAInspect
Schedule up to 100 posts in one call to the same platforms and accounts. Each item supplies its own text, contentType, scheduledAt, and optional media; platforms, connection-id arrays, timezone, and platform configs are shared by every item. Items are processed independently: each is validated and created like create_post, so one bad item fails alone while the rest are scheduled. Returns { totalScheduled, totalFailed, results[] } with a postId or errorMessage per item, in input order; read every row. An item with a past scheduledAt publishes immediately rather than being rejected. Call list_accounts first; TikTok needs tiktokConfigs with privacyLevel and Pinterest needs pinterestConfigs with boardId. Use create_post for a single post or a draft; this tool has no draft mode.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | 1 to 100 posts to schedule; each is created independently | |
| pageIds | No | Facebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array | |
| timezone | No | IANA timezone stored with every post for display; does not shift scheduledAt | UTC |
| platforms | Yes | Target platforms shared by every item. Each needs its connection-id array (pageIds for FACEBOOK) | |
| tiktokConfigs | No | TikTok per-connection config. Each entry needs connectionId + privacyLevel at minimum | |
| youtubeConfigs | No | YouTube per-connection config with video title, tags, privacy, etc. | |
| facebookConfigs | No | Facebook per-page config with post type and video title. pageId must match an entry in pageIds | |
| instagramConfigs | No | Instagram per-connection config to set post type (FEED, REEL, STORY) | |
| pinterestConfigs | No | Pinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id | |
| tiktokConnectionIds | No | TikTok account connection IDs to post from | |
| blueskyConnectionIds | No | Bluesky account connection IDs to post from | |
| threadsConnectionIds | No | Threads account connection IDs to post from | |
| twitterConnectionIds | No | X (Twitter) account connection IDs to post from | |
| youtubeConnectionIds | No | YouTube channel connection IDs to post from | |
| linkedinConnectionIds | No | LinkedIn account connection IDs to post from | |
| instagramConnectionIds | No | Instagram account connection IDs to post from | |
| pinterestConnectionIds | No | Pinterest account connection IDs to post from |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with totalScheduled, totalFailed, and results: one { postId, success, isScheduled, scheduledAt, errorMessage } per input item, in input order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses independent per-item processing ('one bad item fails alone while the rest are scheduled'), exact return shape, input-order results, the requirement to 'read every row,' and the surprising behavior that a past scheduledAt publishes immediately rather than being rejected. No contradiction with 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?
Seven dense sentences cover capacity, shared vs per-item parameters, failure semantics, return format, past-time behavior, prerequisites, and routing to create_post. No filler or repetition; core constraints are front-loaded.
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 tool with 17 parameters, an output schema, and complex cross-platform behavior, the description is complete: it covers capacity, partial failures, return semantics, immediate publish edge case, platform prerequisites, and when to use an alternative. Nothing needed to call it correctly is left out.
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 adds value by explaining the relationship between top-level shared parameters (platforms, connection-id arrays, timezone, configs) and per-item fields, plus which configs are required when a platform is selected. This exceeds simple schema restatement.
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: 'Schedule up to 100 posts in one call to the same platforms and accounts.' It clearly differentiates from the sibling create_post by stating when bulk scheduling is appropriate and that this tool has no draft mode.
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 directs users to 'Call list_accounts first,' names platform-specific prerequisites (TikTok and Pinterest configs), and states 'Use create_post for a single post or a draft; this tool has no draft mode.' This gives the agent clear routing logic versus the nearest alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_postCreate PostAInspect
Create one post for one or more platforms: publish now, schedule, or save a draft. Omit scheduledAt to publish immediately; a future scheduledAt sets status SCHEDULED; saveAsDraft stores it as DRAFT and defers validation to publish_draft. Publishing runs asynchronously per platform, so the response ({ postId, queuedPlatforms, isScheduled, scheduledAt }) is not the outcome; read list_post_results, where each platform succeeds or fails on its own. Call list_accounts first: each platform in platforms needs its connection-id array (linkedinConnectionIds, pageIds for Facebook, and so on), one account per platform. TikTok needs tiktokConfigs with privacyLevel; Pinterest needs pinterestConfigs with boardId. mediaUrls must come from upload_media, or the call fails with "Media file(s) not found in storage". Use bulk_schedule_posts for many posts on the same accounts, and update_post or publish_draft for an existing post.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Default post text shared across platforms | |
| pageIds | No | Facebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array | |
| timezone | No | IANA timezone stored with the post for display (e.g. "America/New_York"); it does not shift scheduledAt | UTC |
| mediaUrls | No | Media URLs to attach. Use publicUrl values from upload_media or get_upload_urls | |
| platforms | Yes | Target platforms (e.g. ["LINKEDIN", "TWITTER"]). Each one needs its matching connection-id array (pageIds for FACEBOOK) filled with ids from list_accounts | |
| contentType | Yes | Content type: TEXT, IMAGE, VIDEO, or CAROUSEL. Must match mediaUrls (CAROUSEL needs several) | |
| saveAsDraft | No | Save as DRAFT instead of publishing or scheduling; publish later with publish_draft | |
| scheduledAt | No | Absolute ISO 8601 instant to schedule (e.g. "2026-03-15T10:00:00Z"). Omit to post immediately; a past time also posts immediately | |
| thumbnailUrl | No | Custom thumbnail image URL for video posts | |
| mediaAltTexts | No | Alt text per image, in the same order as mediaUrls (max 1000 characters each; use "" to skip an image). Sent to X, Bluesky, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it | |
| platformTexts | No | Per-platform caption overrides | |
| tiktokConfigs | No | TikTok per-connection config. Each entry needs connectionId + privacyLevel at minimum | |
| youtubeConfigs | No | YouTube per-connection config with video title, tags, privacy, etc. | |
| facebookConfigs | No | Facebook per-page config with post type and video title. pageId must match an entry in pageIds | |
| instagramConfigs | No | Instagram per-connection config to set post type (FEED, REEL, STORY) | |
| pinterestConfigs | No | Pinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id | |
| tiktokConnectionIds | No | TikTok account connection IDs to post from | |
| blueskyConnectionIds | No | Bluesky account connection IDs to post from | |
| threadsConnectionIds | No | Threads account connection IDs to post from | |
| thumbnailTimestampMs | No | Generate thumbnail from video at this timestamp (milliseconds) | |
| twitterConnectionIds | No | X (Twitter) account connection IDs to post from | |
| youtubeConnectionIds | No | YouTube channel connection IDs to post from | |
| linkedinConnectionIds | No | LinkedIn account connection IDs to post from | |
| instagramConnectionIds | No | Instagram account connection IDs to post from | |
| pinterestConnectionIds | No | Pinterest account connection IDs to post from |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with postId, queuedPlatforms (platforms whose publishing job was queued; empty for scheduled posts and drafts), skippedPlatforms, isScheduled, and scheduledAt. Publishing is asynchronous: check list_post_results for outcomes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that publishing is asynchronous per platform, the response is not the final outcome, and list_post_results must be read for per-platform success or failure. It also clarifies scheduledAt semantics, draft behavior deferring validation to publish_draft, and the mediaUrls failure condition, none of which are visible from 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?
Dense but well-organized: each sentence carries a distinct requirement or behavioral caveat, and the most important semantics are front-loaded. The description covers a very complex 25-parameter tool without 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?
Given the tool's complexity, the description covers all major failure modes and prerequisites: account ID sourcing, per-platform config requirements, async response handling, media URL provenance, and sibling routing. The output schema already exists, so the description correctly focuses on behavior not apparent from structured fields.
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?
Though schema coverage is 100%, the description adds critical semantic meaning beyond the schema: omitting scheduledAt publishes immediately, future scheduledAt sets status SCHEDULED, saveAsDraft defers validation, mediaUrls must originate from upload_media or the call fails, and each platform needs exactly one account. These relationships are not inferable from the property 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?
States a specific verb, resource, and scope: 'Create one post for one or more platforms' with immediate publish, schedule, or draft modes. Earlier in the description it distinguishes itself from update_post, publish_draft, and bulk_schedule_posts, so an agent can select it correctly without opening sibling 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?
Provides explicit guidance: call list_accounts first to get connection IDs, use bulk_schedule_posts for many posts on the same accounts, and use update_post or publish_draft for existing posts. It also gives platform-specific requirements like TikTok privacyLevel and Pinterest boardId, making the correct usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postDelete PostADestructiveInspect
Delete a post record from AdaptlyPost by id. Use it to cancel a DRAFT or SCHEDULED post before it goes out; a deleted scheduled post will not publish. Deleting never removes content already on a network: for a COMPLETED or PARTIAL_FAILURE post this only drops AdaptlyPost's record, and the live posts stay up until removed on each platform. Prefer update_post to change a post instead of deleting and recreating it. Only posts in the token's workspace can be deleted; others return "Post not found or access denied". Returns { deleted: true }. Irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post ID to delete, from list_posts or create_post |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with deleted: true once the post record is removed from AdaptlyPost. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description reveals that deletion only removes the record, not the actual platform content for already-published posts. It also discloses irreversibility, workspace access restriction, and the exact error message for unauthorized or missing posts.
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 concise yet comprehensive, organized logically from action to usage guidance to caveats to error handling. It packs necessary details without redundancy, making it easy to scan and understand.
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 destructive operation, the description covers all relevant context: what it does, when to use it, side effects on different post statuses, workspace restrictions, expected return value, and irreversibility. No important 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?
The only parameter (id) is fully described in the input schema ('Post ID to delete, from list_posts or create_post'), so coverage is 100%. The tool description does not add additional parameter semantics beyond what the schema already provides, keeping the score at the baseline for full coverage.
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 clear, specific action ('Delete a post record from AdaptlyPost by id') and distinguishes it from siblings by noting when to use update_post instead. It also clarifies the tool's scope (only DRAFT or SCHEDULED posts cancel publishing).
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 tells when to use this tool ('Use it to cancel a DRAFT or SCHEDULED post before it goes out') and when to prefer an alternative ('Prefer update_post to change a post instead of deleting and recreating it'). Also explains behavior for COMPLETED or PARTIAL_FAILURE posts, giving complete usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analytics_overviewGet Analytics OverviewARead-onlyInspect
Workspace-wide performance for a date window: views, likes, comments, shares, followers, posts published, average views per post and engagement rate, each as { value, previousValue, deltaPercent } against the window of the same length just before it. Use this for "how did we do this month" questions and for follower counts. Metrics are summed over the selected platforms; partialMetrics names metrics some selected platform cannot report, and a metric no platform reports is null. Analytics cover the last 180 days and refresh every few hours (lastSyncedAt says when); if the user just published, call trigger_analytics_sync first. Use get_analytics_timeseries for a trend, get_platform_breakdown to compare platforms, and list_post_analytics for individual posts.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End of the reporting window (ISO 8601). Must not be earlier than from | |
| from | Yes | Start of the reporting window as an ISO 8601 date or instant (e.g. "2026-08-01"). Metrics cover posts published between from and to; the comparison window is the same length immediately before from | |
| platforms | No | Restrict to these platforms; omit for every platform with analytics. X (TWITTER) has no analytics and is ignored; LinkedIn analytics are pending platform approval and return no data yet |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with views, likes, comments, shares, followers, postsCount, avgViewsPerPost and engagementRate (each { value, previousValue, deltaPercent }), partialMetrics, and lastSyncedAt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnly annotation by explaining data freshness (last 180 days, refresh every few hours), behavior for unsupported platforms, and the LinkedIn platform restriction. It also notes that metrics no platform reports are null, providing clear behavioral 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 detailed but every sentence carries useful information. It front-loads the core purpose, then covers output shape, usage guidance, platform behavior, freshness, and sibling tools without unnecessary 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?
Given the output schema is present and the input schema is fully described, the description provides complete context: what metrics are returned, how the comparison window works, platform restrictions, data freshness, and when to use alternative tools. No important caller-relevant behavior 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 descriptions already cover from, to, and platforms, but the tool description adds key semantics: metrics are based on posts published between from and to, the comparison window is the same length immediately before from, and omitting platforms means all platforms with analytics. This adds meaningful context 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 states the tool returns workspace-wide performance metrics for a date window, including specific metrics and comparison values. It distinguishes itself from related analytics tools by naming get_analytics_timeseries, get_platform_breakdown, and list_post_analytics as alternatives.
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 explicitly says to use this for 'how did we do this month' questions and follower counts. It also provides guidance on when to call trigger_analytics_sync first and names alternative tools for trends, platform breakdowns, and individual post analytics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analytics_sync_statusGet Analytics Sync StatusARead-onlyInspect
How fresh the analytics are, per connected account. Returns syncInProgress, lastSyncedAt, historyHorizonAt (the earliest date any account has data for; earlier dates have no data rather than zero activity) and platforms: one row per account with status (IDLE, QUEUED, SYNCING, FAILED), lastSyncedAt, lastErrorMessage, historyHorizonAt and needsAnalyticsReconnect. When needsAnalyticsReconnect is true the account was connected before analytics permissions existed and returns nothing until the user reconnects it (a connect link works); tell them, do not keep querying. Call this when numbers look stale or empty, and after trigger_analytics_sync to see the run finish. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with accountGroupId, syncInProgress, lastSyncedAt, historyHorizonAt, and platforms: one { platform, connectionId, accountName, status, lastSyncedAt, lastErrorMessage, historyHorizonAt, lastDiscoveryAt, needsAnalyticsReconnect } per connected account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, and the description adds meaningful context about sync states, the meaning of historyHorizonAt, and the reconnect behavior. It could have explicitly stated it makes no changes, but the annotation covers that.
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 slightly verbose and repeats some field names, but it packs essential usage guidance, status meanings, and a caveat about reconnects into a compact monologue. It is not bloated or redundant enough to hurt clarity.
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 description fully explains the return semantics, the statuses, the meaning of the history horizon, and the reconnect flow, along with actionable advice for the agent. It leaves no critical operational detail unexplained.
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 no parameters, and the description explicitly states 'Takes no arguments.' The schema coverage is complete, so there is no ambiguity.
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 reports analytics sync freshness per connected account, which distinguishes it from analytics overview, timeseries, and platform breakdown siblings. It explicitly enumerates the returned status fields and their meaning.
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 on when to call this tool: when numbers look stale or empty, and after trigger_analytics_sync to observe the run finish. It also tells the agent not to keep querying if needsAnalyticsReconnect is true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analytics_timeseriesGet Analytics TimeseriesARead-onlyInspect
Views, likes, comments, shares, followers, posts published and engagement rate bucketed by day (default), week or month across the window, for trend questions such as "how are views moving" or "when did followers jump". Returns { points } with one { date, ...metrics } per bucket; followers is the latest count at the end of the bucket, the other counters sum posts published inside it, and a metric no selected platform reports is null. Use get_analytics_overview for totals and list_post_analytics to see which posts drove a spike.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End of the reporting window (ISO 8601). Must not be earlier than from | |
| from | Yes | Start of the reporting window as an ISO 8601 date or instant (e.g. "2026-08-01"). Metrics cover posts published between from and to; the comparison window is the same length immediately before from | |
| platforms | No | Restrict to these platforms; omit for every platform with analytics. X (TWITTER) has no analytics and is ignored; LinkedIn analytics are pending platform approval and return no data yet | |
| granularity | No | DAILY (default), WEEKLY, or MONTHLY buckets |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with points: one { date, views, likes, comments, shares, followers, postsCount, engagementRate } per bucket, in date order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive nature, so the description correctly avoids redundancy. It adds valuable behavioral details beyond annotations: the aggregation semantics (followers as latest count, other metrics as sums over published posts, null for unsupported platforms) and the output shape with one point per bucket. This is meaningful context that helps an agent interpret results correctly.
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, well-structured paragraph that front-loads the core purpose (metrics and granularity), then explains the return format and aggregation rules, and concludes with sibling routing. Every sentence contributes essential information with no fluff or repetition. It is detailed yet efficiently organized.
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 analytics tool with an output schema and full parameter documentation, the description covers all critical operational details: what metrics are returned, how they are aggregated, the null behavior, and how it fits with sibling tools. An agent has everything needed to invoke it correctly and interpret the response.
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% with each parameter having a descriptive explanation. The description itself does not add significant parameter-level meaning beyond the schema; it only references granularity implicitly via 'bucketed by day (default), week or month' which is already in the schema. The baseline of 3 is appropriate given high schema coverage.
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 returns time-bucketed metrics (views, likes, comments, shares, followers, posts published, engagement rate) for trend analysis, with explicit granularity options. It distinguishes itself from siblings by naming get_analytics_overview for totals and list_post_analytics for post-level spikes, making its unique purpose 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?
It explicitly states the intended use case ('for trend questions such as...') and provides clear guidance on when to use alternatives ('Use get_analytics_overview for totals and list_post_analytics to see which posts drove a spike'). This gives an agent precise decision criteria for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_platform_breakdownGet Platform BreakdownARead-onlyInspect
The overview metrics split per platform for a date window, for "which platform performs best" comparisons. Returns { platforms }: one row per platform with analytics data, carrying followers, views, likes, comments, shares, postsCount, avgViewsPerPost and engagementRate (each { value, previousValue, deltaPercent }) plus supportedMetrics, the metrics that platform actually reports; compare only metrics both platforms list there. Takes no platform filter. Use get_analytics_overview for the combined total.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End of the reporting window (ISO 8601). Must not be earlier than from | |
| from | Yes | Start of the reporting window as an ISO 8601 date or instant (e.g. "2026-08-01"). Metrics cover posts published between from and to; the comparison window is the same length immediately before from |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with platforms: one { platform, followers, views, likes, comments, shares, postsCount, avgViewsPerPost, engagementRate, supportedMetrics } per platform. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals no side effects. The description adds meaningful behavioral detail by explaining that the response includes 'supportedMetrics' and the caveat about comparing only metrics both platforms report. This goes beyond the annotation to clarify data-availability 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?
The description is front-loaded with purpose and differentiation, and the technical note about supportedMetrics is necessary for correct usage. It is slightly dense but not verbose, with no redundant 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?
With an output schema present and the description outlining the return structure (per-platform rows, metric fields with previous/delta, supportedMetrics), the tool is fully specified for an agent to call and interpret results. No missing behavioral or data-format information.
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 JSON schema fully describes both parameters (from/to, ISO 8601, comparison window) with 100% coverage. The description adds no extra parameter semantics beyond repeating that there is no platform filter, so it stays at the baseline for high schema coverage.
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 purpose: 'The overview metrics split per platform for a date window' and explicitly contrasts with the sibling 'Use get_analytics_overview for the combined total.' The use case 'for which platform performs best comparisons' makes the tool's role 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?
Provides explicit guidance to use get_analytics_overview for combined totals, the primary alternative. It also instructs to 'compare only metrics both platforms list there,' clarifying how to handle platform-specific metric availability, which is actionable usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postGet PostARead-onlyInspect
Get one post's full record by id: text, contentType, status, scheduledAt, timezone, and a platforms array with each target's connection, status, errorMessage, and media. Visible only within the token's workspace; any other id returns "Post not found or access denied". Use this to inspect content before update_post or publish_draft. Use list_post_results instead when you only need per-platform publishing outcomes and the platformIds for retry_failed_platforms, and list_posts to find ids by status, platform, or date. Post ids come from create_post, bulk_schedule_posts, or list_posts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post ID from create_post, bulk_schedule_posts, or list_posts |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The full post record: id, status, contentType, text, scheduledAt, timezone, createdAt, updatedAt, and platforms (one entry per target with id, platform, connectionId or pageId, status, errorMessage, mediaUrls). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, openWorldHint=false. The description adds valuable context about workspace scope ('visible only within the token's workspace') and error behavior ('any other id returns "Post not found or access denied"'), enhancing transparency without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise but informative, using three sentences to convey the tool's purpose, returned content, and usage guidance. It avoids redundancy while providing necessary distinctions from sibling tools.
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 description covers the tool's primary function, output contents, error/access behavior, and relationship to other tools. Given the simple parameter and the provision of an output schema (not shown but indicated), it provides sufficient context for an agent to use the tool 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 parameter 'id' is fully described in the schema (coverage 100%) and the description reinforces its origin ('Post ID from create_post, bulk_schedule_posts, or list_posts'). This adds practical context beyond the schema's basic type 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?
The description clearly states the tool retrieves a single post's full record by ID and enumerates the included fields (text, contentType, status, scheduledAt, timezone, platforms with connection/status/errorMessage/media). It distinguishes itself from related tools 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?
Explicitly instructs when to use this tool ('inspect content before update_post or publish_draft') and when to use alternatives (list_post_results for per-platform outcomes, list_posts for finding IDs). This provides clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upload_urlsGet Media Upload URLsAInspect
Get presigned upload URLs for direct file uploads. Returns uploadUrl (PUT your file here) and publicUrl (use in create_post mediaUrls). This only mints a URL — you MUST PUT the file to uploadUrl and confirm a 2xx response before using publicUrl, otherwise create_post/bulk rejects it with "Media file(s) not found in storage". Prefer upload_media for public URLs and for inline files under 30 MB; use this for larger files you hold yourself. For each file, provide fileName and mimeType. Supported types: image/jpeg, image/png, image/webp, video/mp4, video/quicktime.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Files to get upload URLs for |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with urls: one { uploadUrl, publicUrl, key } entry per requested file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false / destructiveHint=false / openWorldHint=false, which is minimal. The description goes well beyond that: it explains the tool only mints a URL, that the caller must perform the PUT and verify a 2xx response, and that skipping this causes create_post/bulk to reject with 'Media file(s) not found in storage'.
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 and return contract, then the workflow requirement, then the sibling preference, then parameter guidance. Every sentence carries actionable information with 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?
Despite an output schema existing, the description still clarifies what uploadUrl and publicUrl are for and how they feed into create_post mediaUrls. Combined with the workflow and supported-type constraints, an agent has everything needed to invoke and complete the upload 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% and the mimeType enum is already defined in the schema, so the schema does the heavy lifting. The description repeats the per-file fields (fileName, mimeType) and lists supported types, adding only marginal value over the structured data, 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 (mints presigned upload URLs for direct file uploads) and explicitly differentiates itself from the sibling upload_media by describing the size/ownership conditions that select it. An agent can pick between get_upload_urls and upload_media 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?
Names the alternative (upload_media) and the exact condition to prefer it ('public URLs and for inline files under 30 MB'), and states when to use this tool instead ('larger files you hold yourself'). It also documents the mandatory follow-up workflow (PUT to uploadUrl, confirm 2xx before using publicUrl) and the failure mode if skipped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsList Connected AccountsARead-onlyInspect
List the social accounts connected to the token's workspace across all nine platforms. Returns { accounts } with id, platform, displayName, username, avatarUrl, and pageId for Facebook pages. Call this before create_post, update_post, or bulk_schedule_posts: they take these ids, never usernames. Put each id in the array for its platform (linkedinConnectionIds, tiktokConnectionIds, and so on); Facebook page accounts go in pageIds. Not for post history or publishing status: use list_posts or list_post_results for those. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with accounts: one { id, platform, displayName, username, avatarUrl } per connected account, plus pageId for Facebook pages. Use id as the connection id (or in pageIds for Facebook). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states it takes no arguments and returns a read-only list of accounts, aligning with the readOnlyHint annotation. It doesn't mention potential throttling or data pagination, but no destructive or side-effect behavior is hidden; annotation and description are consistent.
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 well-structured: it states the result, the key usage imperative, the alternative for other use cases, and the no-arguments fact. Every sentence adds necessary guidance 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?
Given the empty schema and no parameters, the description covers everything an agent needs: what it returns, when to call it, how to use the IDs, and which sibling tools handle related but different tasks. The output schema likely provides the return structure, so no further detail is needed here.
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 has zero parameters and the schema already reflects that with an empty properties object. The description reinforces 'Takes no arguments,' so there is no missing parameter guidance; a small deduction because no mention of output schema details, but that's not parameter 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?
Clearly states the tool lists social accounts connected to the workspace across all nine platforms, and enumerates the returned fields. It also contrasts with related tools for posting and analytics, making its purpose 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?
Explicitly instructs to call this before create_post, update_post, or bulk_schedule_posts to obtain IDs, and tells which ID arrays to use for each platform. It also directs users to list_posts or list_post_results for post history/publishing status, leaving no ambiguity about when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_post_analyticsList Post AnalyticsARead-onlyInspect
Per-post metrics for posts published inside the window, sorted by a metric or by publish date, paginated. Use it for "top posts", "which post got the most comments" and "how did post X do". Covers posts published through AdaptlyPost and posts discovered on the connected accounts; discovered posts have postId and postPlatformId set to null, while AdaptlyPost posts carry the postId used by get_post. Returns { posts, total, page, limit, hasMore }; each post has platform, publishedAt, title, thumbnailUrl, permalink, accountName and metrics { views, likes, comments, shares, saves, clicks, impressions, reach, engagementRate }, with null for metrics the platform does not report. Sort by VIEWS with a small limit for a top list; PUBLISHED_AT (default) for a chronological review. Not for publishing status: use list_post_results for that.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End of the reporting window (ISO 8601). Must not be earlier than from | |
| from | Yes | Start of the reporting window as an ISO 8601 date or instant (e.g. "2026-08-01"). Metrics cover posts published between from and to; the comparison window is the same length immediately before from | |
| page | No | Page number, from 1 | |
| limit | No | Posts per page, 1 to 100 | |
| sortBy | No | Metric to sort by, descending. PUBLISHED_AT (default) lists newest first | |
| platforms | No | Restrict to these platforms; omit for every platform with analytics. X (TWITTER) has no analytics and is ignored; LinkedIn analytics are pending platform approval and return no data yet |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with posts (each { id, postId, postPlatformId, platform, publishedAt, title, thumbnailUrl, permalink, accountName, metrics }), total, page, limit, and hasMore. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint: true, destructiveHint: false) are consistent with a read-only analytics tool. The description discloses behavioral details such as null postId for discovered posts, metric nulls for unsupported platforms, and sort behavior (newest first for PUBLISHED_AT), fully informing the agent of side effects and limitations.
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 efficient, using semicolons to separate related ideas. It packs essential information (scope, sorting, pagination, platform caveats) without redundancy or filler, making it easy to 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?
It fully describes the return shape (posts array, total, page, limit, hasMore) and per-post fields, including metrics and platform-specific null behavior. Edge cases like unsupported platforms and pending LinkedIn analytics are covered, so an agent knows exactly what to expect.
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?
All six parameters have explicit descriptions in the schema, covering meaning, defaults, and constraints. The overall description adds context, such as the comparison window for 'from' and platform restriction semantics, enriching the schema with operational details.
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 ('Per-post metrics for posts published inside the window'), highlights typical use cases ('top posts', 'which post got the most comments'), and clearly distinguishes it from list_post_results by stating 'Not for publishing status'. This makes the tool's purpose unmistakable.
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 explicitly names the alternative for publishing status ('use list_post_results for that') and explains when to use this tool (for per-post analytics). It also provides practical filtering guidance (platforms with no analytics are ignored, LinkedIn pending approval), leaving no ambiguity about when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_post_resultsList Post ResultsARead-onlyInspect
Get one post's per-platform publishing outcomes: { postId, status, results[] } where each result has platformId, platform, accountName, status (PENDING, PUBLISHING, PUBLISHED, or FAILED), platformPostId, errorMessage, and publishedAt. Each platform reports separately, so read every row instead of treating the post as one pass or fail. Call this after create_post, publish_draft, or retry_failed_platforms, since publishing is asynchronous and their responses only confirm queueing; poll until no row is PENDING or PUBLISHING. Take platformId from FAILED rows for retry_failed_platforms. Use get_post when you also need the content and schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post ID from create_post, publish_draft, bulk_schedule_posts, or list_posts |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with postId, the overall post status, and results: one { platformId, platform, accountName, status, platformPostId, errorMessage, publishedAt } per targeted platform. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only; description adds the critical behavior that each platform reports separately and that publishing is asynchronous, so responses only confirm queueing and you must poll until no PENDING/PUBLISHING. This goes beyond 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?
Four sentences, each earning its place: purpose, return shape, usage guidance, and alternative. Well structured but could be slightly more concise with bullets; still no 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?
Given an output schema exists, description covers the return shape and the polling logic, plus how to use FAILED rows for retry_failed_platforms. Complete for an agent to call 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 covers 100% of the single parameter (id) with sources (create_post, publish_draft, etc.). Description doesn't add extra semantics 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 (Get) and resource (one post's per-platform publishing outcomes), and distinguishes from get_post (which gets content and schedule) and list_posts. It clearly defines what it returns: { postId, status, 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?
Explicitly says when to call it (after create_post, publish_draft, or retry_failed_platforms), explains the asynchronous nature and polling requirement, and names get_post as the alternative when content and schedule are also needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsList PostsARead-onlyInspect
List posts in the token's workspace, any status, newest first by default. Returns { posts, total, hasMore }; each post carries its status and a platforms array with per-platform status. Filters: statuses, platforms (posts targeting any of them), and startDate/endDate, which bound scheduledAt, or createdAt for posts never scheduled. limit is 1 to 100 (default 20); page with offset while hasMore is true. Use this to find post ids or check what is already queued. Use get_post for one post's full record and list_post_results for one post's per-platform outcomes and retry ids.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, 1 to 100 | |
| offset | No | Posts to skip; increase by limit while hasMore is true | |
| endDate | No | Upper bound (ISO 8601, e.g. "2026-03-31") on scheduledAt, or createdAt for posts never scheduled | |
| statuses | No | Filter by status (e.g. ["SCHEDULED", "DRAFT"]); omit for all statuses | |
| platforms | No | Filter to posts targeting any of these platforms | |
| sortOrder | No | NEWEST (default) or OLDEST | |
| startDate | No | Lower bound (ISO 8601, e.g. "2026-03-01") on scheduledAt, or createdAt for posts never scheduled |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with posts (each with id, status, contentType, text, scheduledAt, timezone, and platforms with per-platform status), total (count of all matches), and hasMore. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and non-destructive behavior. The description adds useful context about return shape and pagination semantics but does not contradict annotations or introduce unexpected 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?
The description is a single paragraph with two sentences, but it repeats some schema details (e.g., date bounds, pagination). It is not overly verbose but could be slightly more concise by omitting redundant parameter explanations.
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 description fully specifies what is returned (posts array with status and platforms, total, hasMore) and how to paginate. It also mentions appropriate use cases and sibling tools, making it complete for an agent to decide when and how to call it.
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 descriptions cover 100% of parameters with clear explanations of filters and pagination. The description reinforces date and status semantics but does not add significant new meaning beyond the schema; still, it helps clarify usage.
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 lists posts in the workspace with filtering and pagination, and explicitly distinguishes it from get_post and list_post_results. The verb 'list' and resource 'posts' are specific.
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 provides explicit guidance: 'Use this to find post ids or check what is already queued.' It also mentions alternatives for single-post details and per-platform outcomes, and explains filtering/pagination usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_draftPublish DraftAInspect
Publish a DRAFT post now or schedule it; SCHEDULED posts are accepted too, to reschedule or push live. Other statuses fail with "Post is not a draft". Without scheduledAt (or with a past one) the post moves to PENDING and a publishing job is queued per platform: content reaches the networks within moments and cannot be recalled. A future scheduledAt sets SCHEDULED and queues nothing yet. Fails if an account was disconnected or a TikTok entry lacks privacyLevel; fix with update_post first. Not for new content, use create_post. Check list_post_results afterwards for per-platform outcomes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post ID with status DRAFT (or SCHEDULED) | |
| timezone | No | IANA timezone stored with the post for display (e.g. "America/New_York"); it does not shift scheduledAt | UTC |
| scheduledAt | No | Absolute ISO 8601 instant (e.g. "2026-03-15T10:00:00Z"). Omit, or pass a past time, to publish now |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with postId, queuedPlatforms (platforms whose publishing job was queued; empty when scheduled for later), isScheduled, and scheduledAt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Clearly discloses side effects: moves to PENDING, queues per-platform publishing, content reaches networks and cannot be recalled, and explains failure conditions (disconnected account, missing TikTok privacyLevel). This matches the readOnlyHint=false annotation and adds important behavioral context beyond the 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?
The description is dense but every sentence carries necessary information: accepted statuses, scheduling behavior, failure modes, and cross-references to sibling tools. No redundant filler or vague phrasing.
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 the output schema exists and the tool has moderate complexity, the description fully covers preconditions, post-conditions, failure modes, and follow-up actions. It leaves no critical ambiguity about what the tool does or when to use it.
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 covers all three parameters with descriptions, and the tool description adds crucial semantics: timezone does not shift scheduledAt, and omitting scheduledAt or passing a past time publishes immediately. This goes beyond simple field listings.
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 ('Publish a DRAFT post'), clarifies that SCHEDULED posts are also accepted, and explicitly distinguishes from create_post for new content. This makes the tool's purpose unmistakable and differentiates it from 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 explicit when-to-use guidance: publish now or schedule, accepts DRAFT/SCHEDULED, fails on other statuses, and directs users to update_post for fixes and create_post for new content. Also recommends checking list_post_results afterwards, which is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_failed_platformsRetry Failed PlatformsAInspect
Re-queue publishing for a post's FAILED platforms. Only rows with status FAILED whose id is in platformIds are reset to PENDING and retried with the same content; other ids are ignored, and with none matching the call fails with "No failed platforms to retry". The post moves to PUBLISHING and the retry is asynchronous, so check list_post_results for the outcome. Get platformIds (not platform names) and each errorMessage from list_post_results first; retry once the cause is fixed (reconnected account, replaced media), not for a platform-side restriction, which will just fail again. Content cannot change on retry.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post ID whose platforms failed | |
| platformIds | Yes | platformId values of FAILED rows from list_post_results (not platform names). At least one |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with postId, queuedPlatforms (platforms re-queued for publishing), and isScheduled: false. Outcomes arrive asynchronously in list_post_results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), the description reveals key behaviors: only FAILED rows are reset, other ids are ignored, failure condition if none match, post moves to PUBLISHING, retry is asynchronous, and content cannot change. These are critical behavioral details that annotations do not capture.
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 yet information-dense. It front-loads the core action, then adds conditions, async behavior, prerequisites, and retry criteria in a logical flow. No redundant sentences; 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?
Given the tool's complexity, the description covers all essential aspects: operation, conditions, error case, async behavior, dependency on list_post_results, retry criteria, and immutability of content. The output schema exists, so return value details are not required. The description is fully sufficient for an agent to use 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 schema already fully documents both parameters (id and platformIds) with clear descriptions, including the requirement that platformIds come from FAILED rows of list_post_results. The description reinforces this and adds context about the retry logic and source, but does not introduce new parameter meanings beyond what the schema provides. Since schema coverage is 100%, the baseline is 3; the description adds a small extra value by tying the parameters to the retry workflow.
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 on a specific resource: 'Re-queue publishing for a post's FAILED platforms.' It clearly distinguishes the tool's scope (only FAILED platforms) and mentions the sibling list_post_results for gathering prerequisites, making its purpose 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?
The description provides explicit when-to-use guidance: get platformIds and errorMessage from list_post_results first, retry only after fixing the cause (reconnected account, replaced media), and explicitly warns not to retry platform-side restrictions that will just fail again. It also notes the async nature and where to check outcome, giving clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_analytics_syncTrigger Analytics SyncAIdempotentInspect
Ask AdaptlyPost to refresh analytics now instead of waiting for the scheduled sync: every connected account is queued and the last 7 days are re-read. Use it when the user just published and wants numbers, or when get_analytics_overview shows an old lastSyncedAt. Allowed once per workspace every 10 minutes; inside the cooldown it returns queued: false with cooldownSecondsRemaining rather than an error, so do not retry in a loop. The sync runs in the background: poll get_analytics_sync_status until syncInProgress is false, then read the metrics again. Takes no arguments and changes no content.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with queued (true when a sync was started), message, and cooldownSecondsRemaining (seconds until the next allowed sync, null when queued). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses all relevant side effects: it queues accounts, runs in the background, returns a queued status with cooldown info, and explicitly states it changes no content. It also details the cooldown semantics and that repeated calls within the cooldown do not queue again, making the tool's behavior fully transparent. No contradiction with 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 with the primary purpose, then provides important usage and behavior details in a logical order. Though it is a single paragraph, every sentence contributes critical information without fluff or redundancy. Length is appropriate for the complexity.
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 tool with no input parameters and a likely simple output, the description gives sufficient context: it mentions the output fields (queued and cooldownSecondsRemaining), explains the background execution, and guides follow-up via get_analytics_sync_status. An agent can confidently invoke this tool based solely on this description.
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 parameters, so the description need not explain any. It explicitly states 'Takes no arguments,' which is clear and sufficient. Baseline for 0 params is 4, and the description adds no unnecessary detail, so it remains at that score.
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 purpose: to refresh analytics immediately rather than waiting for the scheduled sync. It explicitly describes what happens (every connected account is queued, last 7 days re-read) and contrasts it with the scheduled sync and get_analytics_overview, making its distinctive function obvious.
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 specific, actionable guidance: use it after publishing or when get_analytics_overview shows a stale lastSyncedAt. It also explains the cooldown behavior and instructs not to retry in a loop, and tells the agent to poll get_analytics_sync_status for completion. This is exemplary usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_postUpdate PostAInspect
Update a DRAFT or SCHEDULED post in place; any other status fails with "Cannot edit post in current state", so published posts cannot be changed. Updates are partial: text, contentType, scheduledAt, timezone, and thumbnail fields you omit keep their values. The exception is platforms: sending it rebuilds the post's target set from this request alone, so include every connection-id array and platform config you want to keep (TikTok with privacyLevel, Pinterest with boardId); omitting platforms leaves accounts, configs, and media untouched. mediaUrls only take effect together with platforms; use publicUrl values from upload_media. On SCHEDULED posts new media is verified in storage. Returns the updated post record. Use publish_draft to change a draft's status, delete_post to cancel, and create_post for a new post.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post ID to update (must be DRAFT or SCHEDULED) | |
| text | No | Updated text; omit to keep the current text | |
| pageIds | No | Facebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array | |
| timezone | No | IANA timezone stored for display; does not shift scheduledAt | |
| mediaUrls | No | Replacement media URLs, applied only when platforms is also sent. Use publicUrl values from upload_media or get_upload_urls | |
| platforms | No | New target platforms. Sending this replaces every target, so also resend the connection-id arrays and platform configs to keep; omit to leave targets unchanged | |
| contentType | No | New content type; must match the media on the post | |
| scheduledAt | No | New schedule time as an absolute ISO 8601 instant; omit to keep | |
| thumbnailUrl | No | Custom thumbnail image URL for video posts | |
| mediaAltTexts | No | Alt text per image, in the same order as mediaUrls (max 1000 characters each; use "" to skip an image). Sent to X, Bluesky, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it | |
| platformTexts | No | Per-platform caption overrides; applied to the targets sent in platforms | |
| tiktokConfigs | No | TikTok per-connection config. Each entry needs connectionId + privacyLevel at minimum | |
| youtubeConfigs | No | YouTube per-connection config with video title, tags, privacy, etc. | |
| facebookConfigs | No | Facebook per-page config with post type and video title. pageId must match an entry in pageIds | |
| instagramConfigs | No | Instagram per-connection config to set post type (FEED, REEL, STORY) | |
| pinterestConfigs | No | Pinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id | |
| tiktokConnectionIds | No | TikTok account connection IDs to post from | |
| blueskyConnectionIds | No | Bluesky account connection IDs to post from | |
| threadsConnectionIds | No | Threads account connection IDs to post from | |
| thumbnailTimestampMs | No | Generate thumbnail from video at this timestamp (milliseconds) | |
| twitterConnectionIds | No | X (Twitter) account connection IDs to post from | |
| youtubeConnectionIds | No | YouTube channel connection IDs to post from | |
| linkedinConnectionIds | No | LinkedIn account connection IDs to post from | |
| instagramConnectionIds | No | Instagram account connection IDs to post from | |
| pinterestConnectionIds | No | Pinterest account connection IDs to post from |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The updated post record: id, status (still DRAFT or SCHEDULED), text, contentType, scheduledAt, timezone, and platforms with per-target details. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the description carries the burden of behavioral disclosure. It does this thoroughly: partial-update semantics, the platforms-rebuilds-targets exception, mediaUrls only taking effect with platforms, storage verification for SCHEDULED posts, and the exact error message for invalid states. This goes well beyond what annotations provide.
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 every sentence earns its place: state constraints, partial-update semantics, the platforms exception, the mediaUrls dependency, and sibling routing. It is front-loaded with the most important constraint (DRAFT or SCHEDULED only). It loses one point because the density makes it a long paragraph that an agent must parse carefully, and some details (e.g., 'use publicUrl values from upload_media') could arguably live in 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 25-parameter mutation tool with no output schema, the description covers the critical behavioral traps: status restrictions, partial updates, the platforms rebuild semantics, mediaUrls dependency, and storage verification. The output schema exists, so return values need no explanation. Sibling routing is explicit. 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?
Schema coverage is 100%, so the baseline is 3. The description adds real value on top: it explains the partial-update semantics (omitted fields keep values), the critical exception that platforms rebuilds the target set, and the dependency that mediaUrls only works with platforms. It doesn't enumerate every parameter, but the schema already does that; the description clarifies the cross-parameter behavior that the 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?
The description opens with a specific verb and resource ('Update a DRAFT or SCHEDULED post in place') and immediately distinguishes itself from siblings by naming publish_draft, delete_post, and create_post. It also states the failure mode for published posts, so an agent can tell exactly what this tool does and does not do.
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 this tool (updating draft/scheduled posts) and when not to (published posts fail), and it names the alternatives: publish_draft to change status, delete_post to cancel, create_post for new posts. It also gives conditional guidance for platforms and mediaUrls, which is exactly the kind of routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_mediaUpload MediaAInspect
Upload images or videos to AdaptlyPost storage and return public URLs for the mediaUrls of create_post, update_post, or bulk_schedule_posts. Two sources, combinable in one call: urls (public https URLs the server streams straight into storage; private, internal and non-https addresses are refused, and the source must send a Content-Length) and files (base64 data, for media attached in the conversation; 30 MB decoded per call in total). Omitting both returns an error. Accepts JPEG, PNG, WebP, MP4 and QuickTime, checked by file content; 50 MB per image, 250 MB per URL download. Stored files are public immediately, post or no post, so only upload media the user supplied or asked for. For inline files over 30 MB use get_upload_urls and PUT the bytes yourself. Returns uploaded ({ publicUrl, key } per file) and mediaUrls; pass mediaUrls straight into the post.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | No | Public https URLs of images or videos to upload (e.g. ["https://example.com/photo.jpg"]) | |
| files | No | Direct file uploads as base64, 30 MB decoded per call in total. Use this when the user attaches/pastes an image or video in the conversation |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | An object with uploaded (array of { publicUrl, key } per file) and mediaUrls (the public URLs ready to pass to create_post). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/open-world, but the description goes far beyond that: stored files are public immediately regardless of posting, server refuses private/internal/non-https sources, Content-Length is required, Content-Length and size limits are stated, formats are content-checked, and the return shape is named. This is rich behavioral context an agent cannot get from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: it leads with the purpose and mediaUrls use, then sources, limits, and the overflow alternative. Every sentence carries operational information; 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 mutation tool with open-world annotations and an output schema, the description still supplies all the constraints an agent needs: source options, error condition, format/size limits, public-exposure warning, overflow path to get_upload_urls, and how to use the returned mediaUrls. It is complete for correct invocation and safe use.
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 meaningful semantics the schema does not: the two sources are combinable, the 30 MB decoded total is per call, the server streams URL sources and enforces Content-Length, and non-https/private URLs are refused. It does not, however, document the nested data/fileName/mimeType fields beyond what the schema already 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?
The description states a specific verb (Upload) for a specific resource (images or videos to AdaptlyPost storage) and names the exact field (mediaUrls) it feeds. It also explicitly differentiates itself from the sibling get_upload_urls by naming the threshold (over 30 MB) that routes the agent there.
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/when-not guidance: use for conversation-attached media (files) or public URLs, use get_upload_urls for inline files over 30 MB, and error when both are omitted. This leaves little inference for selecting the right tool or argument shape.
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.
3 tool updates
- Changed
bulk_schedule_posts1 field changed- added
Input schema / properties / posts / items / properties / mediaAltTextsAdded value: +{ + "description": "Alt text per image, in the same order as mediaUrls (max 1000 characters each; use \"\" to skip an image). Sent to X, Bluesky, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it", + "items": { + "maxLength": 1000, + "type": "string" + }, + "type": "array" +}
- Changed
create_post1 field changed- added
Input schema / properties / mediaAltTextsAdded value: +{ + "description": "Alt text per image, in the same order as mediaUrls (max 1000 characters each; use \"\" to skip an image). Sent to X, Bluesky, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it", + "items": { + "maxLength": 1000, + "type": "string" + }, + "type": "array" +}
- Changed
update_post1 field changed- added
Input schema / properties / mediaAltTextsAdded value: +{ + "description": "Alt text per image, in the same order as mediaUrls (max 1000 characters each; use \"\" to skip an image). Sent to X, Bluesky, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it", + "items": { + "maxLength": 1000, + "type": "string" + }, + "type": "array" +}
1 tool update
- Changed
upload_media1 field changed- changed
Input schema / properties / files / descriptionPrevious value: -"Direct file uploads as base64. Use this when the user attaches/pastes an image or video in the conversation"New value: +"Direct file uploads as base64, 30 MB decoded per call in total. Use this when the user attaches/pastes an image or video in the conversation"
1 tool update
- Changed
upload_media1 field changed- changed
Input schema / properties / urls / descriptionPrevious value: -"Public URLs of images or videos to upload (e.g. [\"https://example.com/photo.jpg\"])"New value: +"Public https URLs of images or videos to upload (e.g. [\"https://example.com/photo.jpg\"])"
16 tool updates
- Changed
bulk_schedule_posts11 fields changed- changed
Input schema / properties / facebookConfigs / descriptionPrevious value: -"Facebook per-page config with post type and video title"New value: +"Facebook per-page config with post type and video title. pageId must match an entry in pageIds" - changed
Input schema / properties / pageIds / descriptionPrevious value: -"Facebook page IDs"New value: +"Facebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array" - changed
Input schema / properties / pinterestConfigs / descriptionPrevious value: -"Pinterest per-connection config. boardId is required for Pinterest posts"New value: +"Pinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id" - changed
Input schema / properties / platforms / descriptionPrevious value: -"Target platforms"New value: +"Target platforms shared by every item. Each needs its connection-id array (pageIds for FACEBOOK)" - changed
Input schema / properties / posts / descriptionPrevious value: -"Array of posts to schedule"New value: +"1 to 100 posts to schedule; each is created independently" - added
Input schema / properties / posts / items / properties / contentType / descriptionAdded value: +"TEXT, IMAGE, VIDEO, or CAROUSEL; must match mediaUrls" - changed
Input schema / properties / posts / items / properties / mediaUrls / descriptionPrevious value: -"Image or video URLs to attach"New value: +"publicUrl values from upload_media; unstored URLs fail this item" - added
Input schema / properties / posts / items / properties / platformTexts / descriptionAdded value: +"Per-platform caption overrides for this item" - changed
Input schema / properties / posts / items / properties / scheduledAt / descriptionPrevious value: -"ISO 8601 schedule time"New value: +"Absolute ISO 8601 instant; a past time publishes immediately" - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone"New value: +"IANA timezone stored with every post for display; does not shift scheduledAt" - changed
Output schema / properties / result / descriptionPrevious value: -"The created scheduled post records with their ids, statuses, and schedule times as returned by the AdaptlyPost API."New value: +"An object with totalScheduled, totalFailed, and results: one { postId, success, isScheduled, scheduledAt, errorMessage } per input item, in input order."
- Changed
create_post9 fields changed- changed
Input schema / properties / contentType / descriptionPrevious value: -"Content type: TEXT, IMAGE, VIDEO, or CAROUSEL"New value: +"Content type: TEXT, IMAGE, VIDEO, or CAROUSEL. Must match mediaUrls (CAROUSEL needs several)" - changed
Input schema / properties / facebookConfigs / descriptionPrevious value: -"Facebook per-page config with post type and video title"New value: +"Facebook per-page config with post type and video title. pageId must match an entry in pageIds" - changed
Input schema / properties / pageIds / descriptionPrevious value: -"Facebook page IDs"New value: +"Facebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array" - changed
Input schema / properties / pinterestConfigs / descriptionPrevious value: -"Pinterest per-connection config. boardId is required for Pinterest posts"New value: +"Pinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id" - changed
Input schema / properties / platforms / descriptionPrevious value: -"Target platforms (e.g. [\"LINKEDIN\", \"TWITTER\"])"New value: +"Target platforms (e.g. [\"LINKEDIN\", \"TWITTER\"]). Each one needs its matching connection-id array (pageIds for FACEBOOK) filled with ids from list_accounts" - changed
Input schema / properties / saveAsDraft / descriptionPrevious value: -"Save as draft instead of publishing"New value: +"Save as DRAFT instead of publishing or scheduling; publish later with publish_draft" - changed
Input schema / properties / scheduledAt / descriptionPrevious value: -"ISO 8601 datetime to schedule (e.g. \"2026-03-15T10:00:00Z\"). Omit to post immediately"New value: +"Absolute ISO 8601 instant to schedule (e.g. \"2026-03-15T10:00:00Z\"). Omit to post immediately; a past time also posts immediately" - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. \"America/New_York\")"New value: +"IANA timezone stored with the post for display (e.g. \"America/New_York\"); it does not shift scheduledAt" - changed
Output schema / properties / result / descriptionPrevious value: -"The created post record including its id, status, and scheduled time as returned by the AdaptlyPost API."New value: +"An object with postId, queuedPlatforms (platforms whose publishing job was queued; empty for scheduled posts and drafts), skippedPlatforms, isScheduled, and scheduledAt. Publishing is asynchronous: check list_post_results for outcomes."
- Changed
delete_post2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Post ID to delete"New value: +"Post ID to delete, from list_posts or create_post" - changed
Output schema / properties / result / descriptionPrevious value: -"The deletion confirmation for the post as returned by the AdaptlyPost API."New value: +"An object with deleted: true once the post record is removed from AdaptlyPost."
- Added
get_analytics_overview - Added
get_analytics_sync_status - Added
get_analytics_timeseries - Added
get_platform_breakdown - Changed
get_post2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Post ID"New value: +"Post ID from create_post, bulk_schedule_posts, or list_posts" - changed
Output schema / properties / result / descriptionPrevious value: -"The full post record including its id, status, per-platform publishing status, and error messages as returned by the AdaptlyPost API."New value: +"The full post record: id, status, contentType, text, scheduledAt, timezone, createdAt, updatedAt, and platforms (one entry per target with id, platform, connectionId or pageId, status, errorMessage, mediaUrls)."
- Changed
list_accounts1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The connected social accounts with their platform, connection ID, username, and pageId for Facebook pages as returned by the AdaptlyPost API."New value: +"An object with accounts: one { id, platform, displayName, username, avatarUrl } per connected account, plus pageId for Facebook pages. Use id as the connection id (or in pageIds for Facebook)."
- Added
list_post_analytics - Changed
list_post_results2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Post ID to check results for"New value: +"Post ID from create_post, publish_draft, bulk_schedule_posts, or list_posts" - changed
Output schema / properties / result / descriptionPrevious value: -"The per-platform posting results with success/failure status and error details as returned by the AdaptlyPost API."New value: +"An object with postId, the overall post status, and results: one { platformId, platform, accountName, status, platformPostId, errorMessage, publishedAt } per targeted platform."
- Changed
list_posts8 fields changed- changed
Input schema / properties / endDate / descriptionPrevious value: -"End date (ISO 8601)"New value: +"Upper bound (ISO 8601, e.g. \"2026-03-31\") on scheduledAt, or createdAt for posts never scheduled" - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results"New value: +"Max results, 1 to 100" - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset"New value: +"Posts to skip; increase by limit while hasMore is true" - changed
Input schema / properties / platforms / descriptionPrevious value: -"Filter by platform"New value: +"Filter to posts targeting any of these platforms" - changed
Input schema / properties / sortOrder / descriptionPrevious value: -"NEWEST or OLDEST"New value: +"NEWEST (default) or OLDEST" - changed
Input schema / properties / startDate / descriptionPrevious value: -"Start date (ISO 8601)"New value: +"Lower bound (ISO 8601, e.g. \"2026-03-01\") on scheduledAt, or createdAt for posts never scheduled" - changed
Input schema / properties / statuses / descriptionPrevious value: -"Filter by status (e.g. [\"SCHEDULED\", \"DRAFT\"])"New value: +"Filter by status (e.g. [\"SCHEDULED\", \"DRAFT\"]); omit for all statuses" - changed
Output schema / properties / result / descriptionPrevious value: -"The matching posts with their ids, statuses, platforms, and schedule times as returned by the AdaptlyPost API."New value: +"An object with posts (each with id, status, contentType, text, scheduledAt, timezone, and platforms with per-platform status), total (count of all matches), and hasMore."
- Changed
publish_draft4 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Draft post ID"New value: +"Post ID with status DRAFT (or SCHEDULED)" - changed
Input schema / properties / scheduledAt / descriptionPrevious value: -"Schedule time (ISO 8601). Omit to publish now"New value: +"Absolute ISO 8601 instant (e.g. \"2026-03-15T10:00:00Z\"). Omit, or pass a past time, to publish now" - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone"New value: +"IANA timezone stored with the post for display (e.g. \"America/New_York\"); it does not shift scheduledAt" - changed
Output schema / properties / result / descriptionPrevious value: -"The published or scheduled post record with its updated status as returned by the AdaptlyPost API."New value: +"An object with postId, queuedPlatforms (platforms whose publishing job was queued; empty when scheduled for later), isScheduled, and scheduledAt."
- Changed
retry_failed_platforms3 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Post ID"New value: +"Post ID whose platforms failed" - changed
Input schema / properties / platformIds / descriptionPrevious value: -"Failed platform IDs to retry"New value: +"platformId values of FAILED rows from list_post_results (not platform names). At least one" - changed
Output schema / properties / result / descriptionPrevious value: -"The retry outcome for the requested platform IDs as returned by the AdaptlyPost API."New value: +"An object with postId, queuedPlatforms (platforms re-queued for publishing), and isScheduled: false. Outcomes arrive asynchronously in list_post_results."
- Added
trigger_analytics_sync - Changed
update_post12 fields changed- added
Input schema / properties / contentType / descriptionAdded value: +"New content type; must match the media on the post" - changed
Input schema / properties / facebookConfigs / descriptionPrevious value: -"Facebook per-page config with post type and video title"New value: +"Facebook per-page config with post type and video title. pageId must match an entry in pageIds" - changed
Input schema / properties / id / descriptionPrevious value: -"Post ID to update"New value: +"Post ID to update (must be DRAFT or SCHEDULED)" - changed
Input schema / properties / mediaUrls / descriptionPrevious value: -"Updated media URLs. Use publicUrl values from upload_media or get_upload_urls"New value: +"Replacement media URLs, applied only when platforms is also sent. Use publicUrl values from upload_media or get_upload_urls" - changed
Input schema / properties / pageIds / descriptionPrevious value: -"Facebook page IDs"New value: +"Facebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array" - changed
Input schema / properties / pinterestConfigs / descriptionPrevious value: -"Pinterest per-connection config. boardId is required for Pinterest posts"New value: +"Pinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id" - added
Input schema / properties / platformTexts / descriptionAdded value: +"Per-platform caption overrides; applied to the targets sent in platforms" - changed
Input schema / properties / platforms / descriptionPrevious value: -"Updated target platforms"New value: +"New target platforms. Sending this replaces every target, so also resend the connection-id arrays and platform configs to keep; omit to leave targets unchanged" - changed
Input schema / properties / scheduledAt / descriptionPrevious value: -"Updated schedule time (ISO 8601)"New value: +"New schedule time as an absolute ISO 8601 instant; omit to keep" - changed
Input schema / properties / text / descriptionPrevious value: -"Updated text"New value: +"Updated text; omit to keep the current text" - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone for the schedule time"New value: +"IANA timezone stored for display; does not shift scheduledAt" - changed
Output schema / properties / result / descriptionPrevious value: -"The updated post record including its id, status, and scheduled time as returned by the AdaptlyPost API."New value: +"The updated post record: id, status (still DRAFT or SCHEDULED), text, contentType, scheduledAt, timezone, and platforms with per-target details."
12 tool updates
- First observed
bulk_schedule_posts - First observed
create_post - First observed
delete_post - First observed
get_post - First observed
get_upload_urls - First observed
list_accounts - First observed
list_post_results - First observed
list_posts - First observed
publish_draft - First observed
retry_failed_platforms - First observed
update_post - First observed
upload_media
Related MCP Connectors
- RavenpostOAuthst.ravenpo
Schedule and publish posts to Instagram, TikTok, X, LinkedIn, YouTube, Pinterest, Facebook & more.
- postnextOAuthio.postnext
Schedule, publish and track posts on X, Instagram, LinkedIn, TikTok, YouTube, Threads and Bluesky.
Schedule social media posts to 10 platforms: Instagram, TikTok, X, YouTube, LinkedIn, and more
Schedule, publish, and analyze social posts on TikTok, Instagram, YouTube, X, Threads, LinkedIn.
Related MCP Servers
- FlicenseAqualityCmaintenanceSchedule and manage social media posts across Facebook, Instagram, Twitter/X, LinkedIn, YouTube, TikTok, and Pinterest directly from Claude.10-

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- AlicenseAqualityDmaintenanceAI-powered social media posting across 14 platforms. Post to Twitter, Instagram, TikTok, Facebook, LinkedIn, YouTube and more with one command. AI adapts content per platform, schedules posts, and generates 30-day content calendars.6MIT
- 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.33118 npm3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.