Skip to main content
Glama

Server Details

Schedule and post to Instagram, TikTok, YouTube, X, Facebook, LinkedIn, Pinterest, Threads, Bluesky.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.7/5.0

Scored across 18 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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 tools
bulk_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
postsYes1 to 100 posts to schedule; each is created independently
pageIdsNoFacebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array
timezoneNoIANA timezone stored with every post for display; does not shift scheduledAtUTC
platformsYesTarget platforms shared by every item. Each needs its connection-id array (pageIds for FACEBOOK)
tiktokConfigsNoTikTok per-connection config. Each entry needs connectionId + privacyLevel at minimum
youtubeConfigsNoYouTube per-connection config with video title, tags, privacy, etc.
facebookConfigsNoFacebook per-page config with post type and video title. pageId must match an entry in pageIds
instagramConfigsNoInstagram per-connection config to set post type (FEED, REEL, STORY)
pinterestConfigsNoPinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id
tiktokConnectionIdsNoTikTok account connection IDs to post from
blueskyConnectionIdsNoBluesky account connection IDs to post from
threadsConnectionIdsNoThreads account connection IDs to post from
twitterConnectionIdsNoX (Twitter) account connection IDs to post from
youtubeConnectionIdsNoYouTube channel connection IDs to post from
linkedinConnectionIdsNoLinkedIn account connection IDs to post from
instagramConnectionIdsNoInstagram account connection IDs to post from
pinterestConnectionIdsNoPinterest account connection IDs to post from

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with totalScheduled, totalFailed, and results: one { postId, success, isScheduled, scheduledAt, errorMessage } per input item, in input order.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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

The description opens with a specific verb and resource: '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoDefault post text shared across platforms
pageIdsNoFacebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array
timezoneNoIANA timezone stored with the post for display (e.g. "America/New_York"); it does not shift scheduledAtUTC
mediaUrlsNoMedia URLs to attach. Use publicUrl values from upload_media or get_upload_urls
platformsYesTarget platforms (e.g. ["LINKEDIN", "TWITTER"]). Each one needs its matching connection-id array (pageIds for FACEBOOK) filled with ids from list_accounts
contentTypeYesContent type: TEXT, IMAGE, VIDEO, or CAROUSEL. Must match mediaUrls (CAROUSEL needs several)
saveAsDraftNoSave as DRAFT instead of publishing or scheduling; publish later with publish_draft
scheduledAtNoAbsolute ISO 8601 instant to schedule (e.g. "2026-03-15T10:00:00Z"). Omit to post immediately; a past time also posts immediately
thumbnailUrlNoCustom thumbnail image URL for video posts
mediaAltTextsNoAlt 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
platformTextsNoPer-platform caption overrides
tiktokConfigsNoTikTok per-connection config. Each entry needs connectionId + privacyLevel at minimum
youtubeConfigsNoYouTube per-connection config with video title, tags, privacy, etc.
facebookConfigsNoFacebook per-page config with post type and video title. pageId must match an entry in pageIds
instagramConfigsNoInstagram per-connection config to set post type (FEED, REEL, STORY)
pinterestConfigsNoPinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id
tiktokConnectionIdsNoTikTok account connection IDs to post from
blueskyConnectionIdsNoBluesky account connection IDs to post from
threadsConnectionIdsNoThreads account connection IDs to post from
thumbnailTimestampMsNoGenerate thumbnail from video at this timestamp (milliseconds)
twitterConnectionIdsNoX (Twitter) account connection IDs to post from
youtubeConnectionIdsNoYouTube channel connection IDs to post from
linkedinConnectionIdsNoLinkedIn account connection IDs to post from
instagramConnectionIdsNoInstagram account connection IDs to post from
pinterestConnectionIdsNoPinterest account connection IDs to post from

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn 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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 PostA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPost ID to delete, from list_posts or create_post

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with deleted: true once the post record is removed from AdaptlyPost.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 OverviewA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd of the reporting window (ISO 8601). Must not be earlier than from
fromYesStart 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
platformsNoRestrict 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

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with views, likes, comments, shares, followers, postsCount, avgViewsPerPost and engagementRate (each { value, previousValue, deltaPercent }), partialMetrics, and lastSyncedAt.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 StatusA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with accountGroupId, syncInProgress, lastSyncedAt, historyHorizonAt, and platforms: one { platform, connectionId, accountName, status, lastSyncedAt, lastErrorMessage, historyHorizonAt, lastDiscoveryAt, needsAnalyticsReconnect } per connected account.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 TimeseriesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd of the reporting window (ISO 8601). Must not be earlier than from
fromYesStart 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
platformsNoRestrict 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
granularityNoDAILY (default), WEEKLY, or MONTHLY buckets

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with points: one { date, views, likes, comments, shares, followers, postsCount, engagementRate } per bucket, in date order.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

For a read-only analytics tool with 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 BreakdownA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd of the reporting window (ISO 8601). Must not be earlier than from
fromYesStart 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

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with platforms: one { platform, followers, views, likes, comments, shares, postsCount, avgViewsPerPost, engagementRate, supportedMetrics } per platform.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 PostA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPost ID from create_post, bulk_schedule_posts, or list_posts

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoThe 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

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesFiles to get upload URLs for

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with urls: one { uploadUrl, publicUrl, key } entry per requested file.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 AccountsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn 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

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 AnalyticsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd of the reporting window (ISO 8601). Must not be earlier than from
fromYesStart 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
pageNoPage number, from 1
limitNoPosts per page, 1 to 100
sortByNoMetric to sort by, descending. PUBLISHED_AT (default) lists newest first
platformsNoRestrict 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

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with posts (each { id, postId, postPlatformId, platform, publishedAt, title, thumbnailUrl, permalink, accountName, metrics }), total, page, limit, and hasMore.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ResultsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPost ID from create_post, publish_draft, bulk_schedule_posts, or list_posts

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with postId, the overall post status, and results: one { platformId, platform, accountName, status, platformPostId, errorMessage, publishedAt } per targeted platform.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 PostsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results, 1 to 100
offsetNoPosts to skip; increase by limit while hasMore is true
endDateNoUpper bound (ISO 8601, e.g. "2026-03-31") on scheduledAt, or createdAt for posts never scheduled
statusesNoFilter by status (e.g. ["SCHEDULED", "DRAFT"]); omit for all statuses
platformsNoFilter to posts targeting any of these platforms
sortOrderNoNEWEST (default) or OLDEST
startDateNoLower bound (ISO 8601, e.g. "2026-03-01") on scheduledAt, or createdAt for posts never scheduled

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn 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

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPost ID with status DRAFT (or SCHEDULED)
timezoneNoIANA timezone stored with the post for display (e.g. "America/New_York"); it does not shift scheduledAtUTC
scheduledAtNoAbsolute ISO 8601 instant (e.g. "2026-03-15T10:00:00Z"). Omit, or pass a past time, to publish now

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with postId, queuedPlatforms (platforms whose publishing job was queued; empty when scheduled for later), isScheduled, and scheduledAt.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPost ID whose platforms failed
platformIdsYesplatformId values of FAILED rows from list_post_results (not platform names). At least one

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with postId, queuedPlatforms (platforms re-queued for publishing), and isScheduled: false. Outcomes arrive asynchronously in list_post_results.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 SyncA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with queued (true when a sync was started), message, and cooldownSecondsRemaining (seconds until the next allowed sync, null when queued).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPost ID to update (must be DRAFT or SCHEDULED)
textNoUpdated text; omit to keep the current text
pageIdsNoFacebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array
timezoneNoIANA timezone stored for display; does not shift scheduledAt
mediaUrlsNoReplacement media URLs, applied only when platforms is also sent. Use publicUrl values from upload_media or get_upload_urls
platformsNoNew target platforms. Sending this replaces every target, so also resend the connection-id arrays and platform configs to keep; omit to leave targets unchanged
contentTypeNoNew content type; must match the media on the post
scheduledAtNoNew schedule time as an absolute ISO 8601 instant; omit to keep
thumbnailUrlNoCustom thumbnail image URL for video posts
mediaAltTextsNoAlt 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
platformTextsNoPer-platform caption overrides; applied to the targets sent in platforms
tiktokConfigsNoTikTok per-connection config. Each entry needs connectionId + privacyLevel at minimum
youtubeConfigsNoYouTube per-connection config with video title, tags, privacy, etc.
facebookConfigsNoFacebook per-page config with post type and video title. pageId must match an entry in pageIds
instagramConfigsNoInstagram per-connection config to set post type (FEED, REEL, STORY)
pinterestConfigsNoPinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id
tiktokConnectionIdsNoTikTok account connection IDs to post from
blueskyConnectionIdsNoBluesky account connection IDs to post from
threadsConnectionIdsNoThreads account connection IDs to post from
thumbnailTimestampMsNoGenerate thumbnail from video at this timestamp (milliseconds)
twitterConnectionIdsNoX (Twitter) account connection IDs to post from
youtubeConnectionIdsNoYouTube channel connection IDs to post from
linkedinConnectionIdsNoLinkedIn account connection IDs to post from
instagramConnectionIdsNoInstagram account connection IDs to post from
pinterestConnectionIdsNoPinterest account connection IDs to post from

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoThe updated post record: id, status (still DRAFT or SCHEDULED), text, contentType, scheduledAt, timezone, and platforms with per-target details.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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

The description opens with a specific verb and resource ('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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsNoPublic https URLs of images or videos to upload (e.g. ["https://example.com/photo.jpg"])
filesNoDirect 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

ParametersJSON Schema
NameRequiredDescription
resultNoAn object with uploaded (array of { publicUrl, key } per file) and mediaUrls (the public URLs ready to pass to create_post).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 3 tool updates
    • Changedbulk_schedule_posts1 field changed
      • addedInput schema / properties / posts / items / properties / mediaAltTexts
        Added 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"
        +}
    • Changedcreate_post1 field changed
      • addedInput schema / properties / mediaAltTexts
        Added 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"
        +}
    • Changedupdate_post1 field changed
      • addedInput schema / properties / mediaAltTexts
        Added 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"
        +}
  2. 1 tool update
    • Changedupload_media1 field changed
      • changedInput schema / properties / files / description
        Previous 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"
  3. 1 tool update
    • Changedupload_media1 field changed
      • changedInput schema / properties / urls / description
        Previous 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\"])"
  4. 16 tool updates
    • Changedbulk_schedule_posts11 fields changed
      • changedInput schema / properties / facebookConfigs / description
        Previous 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"
      • changedInput schema / properties / pageIds / description
        Previous 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"
      • changedInput schema / properties / pinterestConfigs / description
        Previous 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"
      • changedInput schema / properties / platforms / description
        Previous value: -"Target platforms"New value: +"Target platforms shared by every item. Each needs its connection-id array (pageIds for FACEBOOK)"
      • changedInput schema / properties / posts / description
        Previous value: -"Array of posts to schedule"New value: +"1 to 100 posts to schedule; each is created independently"
      • addedInput schema / properties / posts / items / properties / contentType / description
        Added value: +"TEXT, IMAGE, VIDEO, or CAROUSEL; must match mediaUrls"
      • changedInput schema / properties / posts / items / properties / mediaUrls / description
        Previous value: -"Image or video URLs to attach"New value: +"publicUrl values from upload_media; unstored URLs fail this item"
      • addedInput schema / properties / posts / items / properties / platformTexts / description
        Added value: +"Per-platform caption overrides for this item"
      • changedInput schema / properties / posts / items / properties / scheduledAt / description
        Previous value: -"ISO 8601 schedule time"New value: +"Absolute ISO 8601 instant; a past time publishes immediately"
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone"New value: +"IANA timezone stored with every post for display; does not shift scheduledAt"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedcreate_post9 fields changed
      • changedInput schema / properties / contentType / description
        Previous value: -"Content type: TEXT, IMAGE, VIDEO, or CAROUSEL"New value: +"Content type: TEXT, IMAGE, VIDEO, or CAROUSEL. Must match mediaUrls (CAROUSEL needs several)"
      • changedInput schema / properties / facebookConfigs / description
        Previous 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"
      • changedInput schema / properties / pageIds / description
        Previous 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"
      • changedInput schema / properties / pinterestConfigs / description
        Previous 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"
      • changedInput schema / properties / platforms / description
        Previous 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"
      • changedInput schema / properties / saveAsDraft / description
        Previous value: -"Save as draft instead of publishing"New value: +"Save as DRAFT instead of publishing or scheduling; publish later with publish_draft"
      • changedInput schema / properties / scheduledAt / description
        Previous 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"
      • changedInput schema / properties / timezone / description
        Previous 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"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changeddelete_post2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Post ID to delete"New value: +"Post ID to delete, from list_posts or create_post"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Addedget_analytics_overview
    • Addedget_analytics_sync_status
    • Addedget_analytics_timeseries
    • Addedget_platform_breakdown
    • Changedget_post2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Post ID"New value: +"Post ID from create_post, bulk_schedule_posts, or list_posts"
      • changedOutput schema / properties / result / description
        Previous 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)."
    • Changedlist_accounts1 field changed
      • changedOutput schema / properties / result / description
        Previous 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)."
    • Addedlist_post_analytics
    • Changedlist_post_results2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Post ID to check results for"New value: +"Post ID from create_post, publish_draft, bulk_schedule_posts, or list_posts"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedlist_posts8 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"End date (ISO 8601)"New value: +"Upper bound (ISO 8601, e.g. \"2026-03-31\") on scheduledAt, or createdAt for posts never scheduled"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max results, 1 to 100"
      • changedInput schema / properties / offset / description
        Previous value: -"Pagination offset"New value: +"Posts to skip; increase by limit while hasMore is true"
      • changedInput schema / properties / platforms / description
        Previous value: -"Filter by platform"New value: +"Filter to posts targeting any of these platforms"
      • changedInput schema / properties / sortOrder / description
        Previous value: -"NEWEST or OLDEST"New value: +"NEWEST (default) or OLDEST"
      • changedInput schema / properties / startDate / description
        Previous value: -"Start date (ISO 8601)"New value: +"Lower bound (ISO 8601, e.g. \"2026-03-01\") on scheduledAt, or createdAt for posts never scheduled"
      • changedInput schema / properties / statuses / description
        Previous value: -"Filter by status (e.g. [\"SCHEDULED\", \"DRAFT\"])"New value: +"Filter by status (e.g. [\"SCHEDULED\", \"DRAFT\"]); omit for all statuses"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedpublish_draft4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Draft post ID"New value: +"Post ID with status DRAFT (or SCHEDULED)"
      • changedInput schema / properties / scheduledAt / description
        Previous 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"
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone"New value: +"IANA timezone stored with the post for display (e.g. \"America/New_York\"); it does not shift scheduledAt"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedretry_failed_platforms3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Post ID"New value: +"Post ID whose platforms failed"
      • changedInput schema / properties / platformIds / description
        Previous value: -"Failed platform IDs to retry"New value: +"platformId values of FAILED rows from list_post_results (not platform names). At least one"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Addedtrigger_analytics_sync
    • Changedupdate_post12 fields changed
      • addedInput schema / properties / contentType / description
        Added value: +"New content type; must match the media on the post"
      • changedInput schema / properties / facebookConfigs / description
        Previous 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"
      • changedInput schema / properties / id / description
        Previous value: -"Post ID to update"New value: +"Post ID to update (must be DRAFT or SCHEDULED)"
      • changedInput schema / properties / mediaUrls / description
        Previous 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"
      • changedInput schema / properties / pageIds / description
        Previous 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"
      • changedInput schema / properties / pinterestConfigs / description
        Previous 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"
      • addedInput schema / properties / platformTexts / description
        Added value: +"Per-platform caption overrides; applied to the targets sent in platforms"
      • changedInput schema / properties / platforms / description
        Previous 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"
      • changedInput schema / properties / scheduledAt / description
        Previous value: -"Updated schedule time (ISO 8601)"New value: +"New schedule time as an absolute ISO 8601 instant; omit to keep"
      • changedInput schema / properties / text / description
        Previous value: -"Updated text"New value: +"Updated text; omit to keep the current text"
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone for the schedule time"New value: +"IANA timezone stored for display; does not shift scheduledAt"
      • changedOutput schema / properties / result / description
        Previous 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."
  5. 12 tool updates
    • First observedbulk_schedule_posts
    • First observedcreate_post
    • First observeddelete_post
    • First observedget_post
    • First observedget_upload_urls
    • First observedlist_accounts
    • First observedlist_post_results
    • First observedlist_posts
    • First observedpublish_draft
    • First observedretry_failed_platforms
    • First observedupdate_post
    • First observedupload_media

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Gives 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.
    12
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    AI-powered social media posting across 14 platforms. Post to Twitter, Instagram, TikTok, Facebook, LinkedIn, YouTube and more with one command. AI adapts content per platform, schedules posts, and generates 30-day content calendars.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to schedule and publish social media posts to platforms like Instagram, TikTok, YouTube, LinkedIn, Facebook, X, Threads, and Pinterest using natural language.
    33
    118 npm
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources