Postly MCP
Server Details
AI agents can create, schedule, publish, and analyze social content through Postly.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 21 tools
Most tools target a distinct resource/action pair, and getters, listers, mutations, and validation are clearly separated. A few adjacent tools such as list_social_accounts vs list_analytics_sources and get_post_status vs get_publishing_activity could be confused, but their descriptions resolve the boundary.
All 21 tools share the postly_ prefix and follow a verb_noun snake_case pattern such as list_posts, create_post, get_post_analytics, and upload_media_batch. The naming is highly predictable and makes the toolset feel cohesive.
At 21 tools, the server sits in the 16-25 borderline range and feels slightly heavy, with seven list_* and six get_* operations. The scope of a publishing and analytics platform justifies much of the surface, but some listing and analytics target functions could plausibly be consolidated.
The set covers the full post lifecycle—create, validate, schedule, retrieve, update, delete, and status—along with media upload, publishing targets, workspaces, and analytics. Minor gaps exist such as no dedicated get-media-by-id or explicit cancel-scheduled-post action, but these can be worked around with existing tools.
Available Tools
21 toolspostly_craft_queryCraft a Postly QueryARead-onlyIdempotentInspect
Turns a user-written Postly question into a safe, explicit plan of existing MCP tools and identifies any missing context. Use this first for free-form requests; then call the planned tools. It never runs raw database or SQL queries.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The user's own natural-language question or requested outcome. | |
| post_id | No | Optional known Postly post ID. | |
| platform | No | Optional analytics platform. | |
| channel_id | No | Optional analytics channel/source ID. | |
| workspace_id | No | Optional known Postly workspace ID. | |
| relative_range | No | Optional date phrase such as today, this_week, or last_30_days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| intent | No | |
| tool_plan | No | |
| missing_context | No | |
| safety_boundary | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the agent knows this is a safe, non-mutating operation. The description adds that it 'never runs raw database or SQL queries' and that it produces a 'safe' plan—useful context reinforcing the read-only nature and output type. However, it doesn't describe what happens on missing context (does it return a list of required fields? does it fail?). Annotations cover the safety profile well, so the description adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences: the first states purpose and usage, the second states a key limitation. It is front-loaded with the main purpose and immediately instructs the agent on next steps. No wasted words; every phrase carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a planner used before other calls; its behavior is inherently simple (take a question, output a plan). With an output schema present (not shown in this prompt but implied by 'Has output schema: true'), the agent likely sees the plan structure elsewhere. The description covers safety, purpose, usage, and key limitations. It might benefit from stating what 'missing context' looks like in the output, but given the output schema and annotations, what's here is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; every parameter, including all five optional ones, has a brief description. The description of the 'query' parameter ('The user's own natural-language question or requested outcome') adds meaning beyond just a generic 'text' field, clarifying that it's the raw user input. The optional parameters are clearly contextual hints. Given high schema coverage, the description's parameter handling is adequate and not redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Craft'), a resource ('Postly query'), and an outcome: converting a free-form user question into a plan of existing MCP tools, while identifying missing context. It clearly distinguishes itself from the sibling tools (which are all direct operations), and states what it does NOT do—run raw database or SQL queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this first for free-form requests; then call the planned tools.' This gives clear when-to-use guidance. It doesn't explicitly say when NOT to use it (e.g., when a direct tool call is already obvious), but the instruction to use it first for free-form requests, plus its role as a planner, provides strong context for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_create_postCreate PostADestructiveInspect
Creates, queues, or schedules a Postly post for social or email/newsletter targets. Accepts content, target selections, schedules, platform settings, and client-provided media references for import in the same action. Returns the mutation result, platform readiness, blockers, and any required follow-up data.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| media | No | Already-hosted media objects for the post. Use the media_file fields instead for attached, generated, selected, local, base64, or temporary media that Postly must import during the create or update action. | |
| labels | No | ||
| media_file | No | Client-provided file reference or temporary URL for the first attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| campaign_id | No | Optional campaign ID in the same workspace. Campaign content approval and workspace post approval still apply. Omit to preserve the association on update. | |
| media_file_2 | No | Client-provided file reference or temporary URL for the number 2 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_3 | No | Client-provided file reference or temporary URL for the number 3 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_4 | No | Client-provided file reference or temporary URL for the number 4 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_5 | No | Client-provided file reference or temporary URL for the number 5 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_6 | No | Client-provided file reference or temporary URL for the number 6 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_7 | No | Client-provided file reference or temporary URL for the number 7 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_8 | No | Client-provided file reference or temporary URL for the number 8 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_9 | No | Client-provided file reference or temporary URL for the number 9 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| workspace_id | Yes | Postly workspace ID. | |
| email_subject | No | Subject line required when targeting email/newsletter channels. | |
| first_comment | No | ||
| media_file_10 | No | Client-provided file reference or temporary URL for the number 10 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_uploads | No | Optional inline upload specs for agents that can supply public URLs, temporary URLs, base64, or data URLs. Postly imports these assets and appends them to media before creating or updating the post. | |
| workspace_ids | No | Optional list of Postly workspace IDs. Use instead of workspace_id when creating the same post in multiple workspaces. | |
| audience_group | No | Audience group ID or IDs. Do not combine with target_platforms. You may also pass a single string on clients that support that shorthand. | |
| platform_posts | No | Platform-specific overrides. Each item should include identifier and settings. Call postly_get_channel_schema for each selected platform to see required settings and simple capture guidance. | |
| email_targeting | No | Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts. Property values may use multiple equivalent input shapes; the server normalizes them. | |
| media_alt_texts | No | Optional alt text values aligned with media_file, media_file_2, and later media_file fields. | |
| one_off_schedule | No | ||
| target_platforms | No | Social platform names, email/newsletter, provider names, or channel IDs. Use "all" to target all connected publishing targets in the workspace. Email targets require email_subject and text. You may also pass a single string on clients that support that shorthand. | |
| publishing_preset | No | Optional workspace publishing preset name. Use instead of publishing_preset_id. | |
| email_preview_text | No | Optional short preview text for email/newsletter delivery. | |
| recurring_schedule | No | ||
| publishing_preset_id | No | Optional workspace publishing preset ID. When omitted, Postly uses the preset named Default or the oldest saved preset. | |
| use_publishing_presets | No | Apply the workspace publishing preset. Defaults to true. Set false only when the user explicitly wants platform defaults instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| data | No | |
| prompt | No | |
| status | No | |
| message | No | |
| next_steps | No | |
| agent_guidance | No | |
| ready_platforms | No | |
| blocked_platforms | No | |
| requires_user_input | No | |
| missing_requirements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=true, and idempotentHint=false. The description does not contradict these and adds useful behavioral context: it can queue or schedule (time-based behavior), import client-provided media references, and returns platform readiness and blockers. This enriches the safety and outcome expectations beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the primary purpose and followed by a summary of inputs and outputs. Every clause adds value, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 30 parameters, nested objects, and an output schema, the description gives a solid high-level overview of capabilities (create/queue/schedule, media import, returns blockers). It does not list every constraint (e.g., required workspace_id, email_subject for email targets) but those are covered by the schema and the presence of an output schema reduces the need to describe return values. It could mention the recommendation to consult postly_get_channel_schema for platform-specific guidance, but that is already noted in the schema descriptions of platform_posts and is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 83% description coverage, so most parameters are already well-documented. The description provides a high-level summary of parameter categories (content, target selections, schedules, platform settings, media references) but does not add specific semantics beyond what the schema already offers. Baseline 3 is appropriate given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (creates, queues, or schedules) and a specific resource (Postly post for social or email/newsletter targets), and mentions it returns mutation results, platform readiness, blockers, and follow-up data. This distinguishes it from siblings like postly_update_post (update) and postly_delete_post (delete) without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates it is for creating, queuing, or scheduling new posts, which is the main use case. It does not explicitly mention alternatives or when-not-to-use (e.g., for modifications use postly_update_post, for validation use postly_validate_post), but the context is clear and no conflicting guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_delete_postDelete PostADestructiveInspect
Deletes a specific existing Postly post and returns the mutation status.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Postly post ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| data | No | |
| prompt | No | |
| status | No | |
| message | No | |
| next_steps | No | |
| agent_guidance | No | |
| ready_platforms | No | |
| blocked_platforms | No | |
| requires_user_input | No | |
| missing_requirements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description doesn't need to restate destructiveness. It adds 'specific existing' to clarify the post must exist, and 'returns the mutation status' to describe the outcome. This is consistent with annotations and adds a small amount of context beyond them, but lacks details on error handling or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and result without unnecessary elaboration. Every word adds value, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one required parameter, destructive annotations, and an output schema, the description is largely complete. It tells the agent what the tool does and what it returns. It doesn't mention edge cases like non-existent posts, but given the low complexity and the presence of an output schema to describe results, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage for the single parameter post_id (100% schema description coverage). The description adds only that the post must be 'existing', which is context about the operation rather than the parameter itself. The schema and description together are sufficient, but no additional parameter semantics are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Deletes' and identifies the resource as 'a specific existing Postly post', clearly distinguishing it from sibling tools like postly_update_post or postly_create_post. It also mentions the return value ('mutation status'), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: the tool is for deleting posts, given the name and description. However, there is no explicit guidance on when to prefer this over alternatives, nor any mention of prerequisites or situations to avoid. The distinction from update operations is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_get_account_analyticsGet Account AnalyticsARead-onlyIdempotentInspect
Fetches analytics for a connected Postly source such as a social account, page, profile, location, or channel. Returns metrics for the requested source and date range.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Optional ISO-8601 start date/time for platforms that support ranges. | |
| until | No | Optional ISO-8601 end date/time for platforms that support ranges. | |
| platform | Yes | Analytics platform identifier returned by postly_list_analytics_sources, such as instagram, facebook, linkedin, pinterest, youtube, googleMyBusiness, google_my_business, or x. | |
| channel_id | Yes | Analytics source channel_id returned by postly_list_analytics_sources. | |
| workspace_id | Yes | Postly workspace ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| data | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, and non-destructive behavior. The description adds context that it supports date ranges and returns metrics for various source types, but does not disclose additional behaviors like pagination, rate limits, or platform-specific nuances. This is consistent with annotations and adds some value, but not significantly beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with 'Fetches analytics', and every word earns its place. It is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that annotations cover safety and an output schema exists to document return values, the description is adequately complete. It covers the core purpose, source types, and date range support. It does not mention optional parameters or platform variations, but these are handled in the schema, so no significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description provides examples of source types ('social account, page, profile, location, or channel') that loosely map to platform and channel_id, but these are already elaborated in the schema's parameter descriptions. The description does not add substantive meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Fetches') and resource ('analytics for a connected Postly source'), and it distinguishes from sibling tools like postly_get_post_analytics by specifying 'social account, page, profile, location, or channel' rather than a post. It also implies a contrast with postly_list_analytics_sources by returning metrics rather than listing sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about the intended input (a connected Postly source) and mentions date range filtering, which helps an agent understand when to use it. However, it does not explicitly state exclusions or alternatives (e.g., 'for post-level analytics, use postly_get_post_analytics'), so it stops short of fully explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_get_channel_schemaGet Channel SchemaARead-onlyIdempotentInspect
Returns platform rules, character and media limits, required settings, safe defaults, and capture requirements for a supported Postly publishing channel. Use it before creating or scheduling content when the channel requirements are not already known.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform identifier such as x, linkedin, instagram, telegram, facebook, threads, bluesky, pinterest, youtube, tiktok, or google_my_business. |
Output Schema
| Name | Required | Description |
|---|---|---|
| schema | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds substantive behavioral context by enumerating the categories of information returned (platform rules, limits, settings, defaults, capture requirements), which goes beyond the abstract 'Get Channel Schema' title and the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and resource, and every clause adds value. The first sentence states functionality, the second sentence provides usage guidance. There is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter), has a rich output schema, and annotations cover safety. The description fully covers the return content categories and the appropriate use case. There is no missing information that would prevent an agent from using it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'platform' is fully documented in the input schema, including a list of allowed identifier values (x, linkedin, etc.). The description does not add any additional meaning or context about the parameter beyond what the schema already provides, so the schema carries the full burden. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb ('Returns') and clearly identifies the resource (platform rules, character and media limits, required settings, safe defaults, capture requirements) as well as the target ('supported Postly publishing channel'). This distinguishes it from sibling tools like create/delete/update/validate, which perform different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use it before creating or scheduling content when the channel requirements are not already known.' It provides clear context but does not mention when not to use it or name alternative tools (e.g., postly_validate_post), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_get_postGet PostARead-onlyIdempotentInspect
Retrieves sanitized details for a specific Postly post.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Postly post ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| post | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds 'sanitized' which indicates the returned details are filtered, providing additional behavioral context beyond the annotations. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence, front-loaded with the action and object, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema, so the description need not explain return values. It adequately states the purpose and the key qualifier 'sanitized,' but it doesn't mention error conditions or permission requirements; however, these are less critical given the read-only annotations. Overall it is sufficient for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the single parameter post_id, and the description does not add syntax or format details beyond that. Since schema coverage is 100%, the baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Retrieves' and the resource 'sanitized details for a specific Postly post.' It distinguishes from sibling tools like postly_get_post_analytics and postly_get_post_status by focusing on post details rather than analytics or status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool instead of alternatives like get_post_analytics or get_post_status. The intent is implied through the word 'details,' but no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_get_post_analyticsGet Post AnalyticsARead-onlyIdempotentInspect
Fetches analytics for a published Postly post on a supported platform. Returns metrics for the requested post and analytics source.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Postly post ID. | |
| platform | Yes | Analytics platform identifier returned by postly_list_analytics_sources, such as instagram, facebook, linkedin, pinterest, youtube, googleMyBusiness, google_my_business, or x. | |
| channel_id | Yes | Analytics source channel_id returned by postly_list_analytics_sources. | |
| workspace_id | Yes | Postly workspace ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| data | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context: it specifies the post must be published and the platform must be supported. It does not discuss rate limits, auth, or error conditions, but given annotations, the bar is lower and this mild addition is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundant information. It front-loads the core action and result, making it easy to scan. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analytics tool with a full output schema and complete parameter documentation, the description is sufficiently complete. It identifies the post-level scope and supported platforms, which helps selection. It could add a note about needing prior setup via list_analytics_sources, but the schema parameter descriptions already cover that linkage, so the overall context is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add additional parameter-level meaning beyond what the schema already provides; it only mentions 'analytics source' which loosely references channel_id and platform. Since the schema already documents parameters thoroughly, the description adds little extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches analytics for a published Postly post, using a specific verb ('Fetches') and resource ('analytics for a published Postly post'). It also mentions returning metrics, and the title 'Get Post Analytics' aligns with this. This distinguishes it from sibling tools like account analytics or publishing activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for post-level analytics but does not explicitly contrast with alternatives like postly_get_account_analytics. It states 'for a published Postly post on a supported platform,' giving context, but lacks explicit when-to-use or when-not-to-use guidance. Sibling names help, but the description itself offers only implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_get_post_statusGet Post StatusARead-onlyIdempotentInspect
Retrieves the current publishing status and delivery counts for a specific Postly post.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Postly post ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| post_id | No | |
| delivery_results | No | |
| effective_status | No | |
| draft_delivery_count | No | |
| failed_delivery_count | No | |
| published_delivery_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the 'delivery counts' detail, but it does not disclose any additional behavioral traits such as response shape, latency, or relationship to analytics data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence states exactly what is retrieved and for which resource. No filler or redundant restating of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one well-documented parameter, strong annotations, and an output schema present, the description is sufficient for an agent to invoke the tool. Nothing essential to the call itself is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the post_id parameter is already documented as 'Postly post ID.' The description adds no extra meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Retrieves') with a specific resource ('current publishing status and delivery counts for a specific Postly post'). It conveys what the tool does, but it does not explicitly distinguish it from siblings like postly_get_post or postly_get_post_analytics, leaving some potential ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention scenarios like checking after publishing, polling for delivery, or why one would choose this over postly_get_post_analytics or postly_get_publishing_activity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_get_publishing_activityGet Publishing ActivityARead-onlyIdempotentInspect
Returns publishing activity for a requested date or time range, with actual published delivery counts separated from queued and processing posts.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Optional exact local date in YYYY-MM-DD format. The timezone argument determines the local day. | |
| skip | No | ||
| limit | No | ||
| timezone | No | Optional IANA timezone for relative_range or date, for example Africa/Lagos or America/New_York. Defaults to the account timezone or UTC. | |
| workspace_id | No | Optional workspace ID. Omit to search accessible workspaces. | |
| activity_from | No | Optional inclusive ISO-8601 activity start boundary. Must be used with activity_until. | |
| activity_until | No | Optional exclusive ISO-8601 activity end boundary. Must be used with activity_from. | |
| published_from | No | Alias for activity_from when the user asks about published posts. | |
| relative_range | No | Natural date window. Use "today" or "yesterday" when a user asks how many posts were published on a local day. Defaults to next_7_days when no date or range is provided. | |
| scheduled_from | No | Optional inclusive ISO-8601 start boundary. Must be used with scheduled_until. | |
| organization_id | No | Optional organization ID. Use this to limit the search before choosing a workspace. | |
| published_until | No | Alias for activity_until when the user asks about published posts. | |
| scheduled_until | No | Optional exclusive ISO-8601 end boundary. Must be used with scheduled_from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No | |
| window | No | |
| summary | No | |
| total_count | No | |
| returned_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a safe, read-only, idempotent operation. The description adds a useful behavioral detail about separating published counts from queued/processing posts, but it does not disclose pagination behavior, default time range, or timezone handling, so it only partially adds value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the purpose and adds a key detail about output composition. It is concise, with no unnecessary words, and is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 13 optional parameters, a more detailed description could clarify the various filtering dimensions. However, the rich input schema (with detailed property descriptions) and the presence of an output schema largely compensate, and the description captures the core purpose adequately for an agent to formulate a request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 85% parameter description coverage, with detailed descriptions for options like relative_range and timezone. The tool description itself adds no parameter-specific meaning, so it earns the baseline 3 for relying on the schema to document parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and clearly identifies the resource ('publishing activity'), further specifying that it separates published delivery counts from queued/processing posts. This distinguishes it from sibling tools like postly_get_post_status or postly_list_posts, which focus on individual post states rather than aggregate activity counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving activity summaries over a date/time range, but it does not explicitly state when to prefer this tool over alternatives or mention exclusions. It lacks direct guidance on choosing between this and related tools such as postly_get_account_analytics or postly_list_scheduled_posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_list_analytics_sourcesList Analytics SourcesARead-onlyIdempotentInspect
Lists connected accounts, pages, profiles, locations, and channels that support analytics for one workspace or every accessible workspace. Returns sources grouped by workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | Optional Postly workspace ID. Omit to scan all accessible workspaces. | |
| organization_id | No | Optional organization ID to limit the workspace scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| workspaces | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context about the scope (one workspace vs all) and grouping, but these are largely reflected in the schema and output schema. It does not disclose additional behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences, front-loaded with 'Lists', and every sentence adds value without unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two optional parameters and has a full output schema and comprehensive annotations. The description, together with the schema and annotations, provides a complete understanding of the tool's purpose, scope, and safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the input schema (100% coverage). The description aligns with the schema's parameter meanings but does not add extra semantic detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists connected accounts, pages, profiles, locations, and channels that support analytics, for one or all accessible workspaces. It distinguishes from siblings like list_social_accounts by explicitly focusing on analytics sources and mentions grouping by workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage: it lists analytics sources and supports workspace filtering or scanning all workspaces. However, it does not explicitly mention when not to use this tool or name alternative tools, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_list_mediaList MediaARead-onlyIdempotentInspect
Lists durable stored media, or recovers one upload by idempotency_key. Recovery reports completed only when storage confirms the file; unknown uploads may still complete. Requires media.read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of files to return. | |
| offset | No | Number of stored files to skip. | |
| idempotency_key | No | Recover a specific upload using its returned key instead of listing files. An unknown result may still be in progress; retry uploads only with this same key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| files | No | |
| status | No | |
| message | No | |
| pagination | No | |
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, non-destructive), the description adds two high-value disclosures: the auth prerequisite ('Requires media.read') and the consistency behavior ('Recovery reports completed only when storage confirms the file; unknown uploads may still complete'). These are genuine behavioral traits an agent needs and are not present in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler: the first front-loads the core dual purpose, the second adds the critical consistency caveat and auth note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description fills the remaining gaps — auth, consistency, and mode semantics — leaving nothing essential missing for correct invocation. Minor omissions like list ordering are immaterial for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents limit, offset, and idempotency_key. The description mentions idempotency_key functionally but adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Lists durable stored media, or recovers one upload by idempotency_key'), and it clearly distinguishes this from sibling list tools (media vs posts/accounts/workspaces) and from the upload tools (recovery is not uploading). The dual-mode scope is stated unambiguously in the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear mode-selection context: use listing when you want stored files, use recovery when you hold an idempotency_key. It also warns about the in-progress semantics of recovery ('unknown uploads may still complete'). However, it never names sibling alternatives or states when-not-to-use (e.g., pointing to postly_upload_media for uploading), leaving the alternative routing implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_list_organizationsList OrganizationsARead-onlyIdempotentInspect
Lists Postly organizations available to the authenticated connection. Returns organization identifiers and metadata for workspace selection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| organizations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint. The description adds useful context about the return value ('organization identifiers and metadata') and the scope ('authenticated connection'), but does not go into details like pagination or data volume. Since annotations cover the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary action ('Lists Postly organizations') and no filler. Every word contributes to understanding the tool's function and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list operation with an output schema and comprehensive annotations, the description fully covers what the tool does, what it returns, and why it is useful. There are no gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%, so the description need not explain any inputs. Baseline for 0 params is 4; the description adds value by stating what the list contains and its purpose, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists') and resource ('Postly organizations available to the authenticated connection'), and adds the purpose 'for workspace selection'. This clearly distinguishes it from siblings like list_workspaces by the level of the resource (organizations vs. workspaces).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the context 'available to the authenticated connection' and implies usage for workspace selection, but does not explicitly name alternatives or exclusions. However, the purpose is clear enough that an agent can infer when to use this over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_list_postsList PostsARead-onlyIdempotentInspect
Lists recent Postly posts, optionally filtered by workspace and status. Returns sanitized post summaries for the authenticated connection.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| limit | No | ||
| status | No | Optional status such as draft, scheduled, queued, processing, pending_approval, or unknown. | |
| workspace_id | No | Optional Postly workspace ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and idempotent. Description adds that results are sanitized and scoped to the authenticated connection, providing useful behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the action, then states optional filters and return type. No unnecessary words, perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and strong annotations, the description covers purpose, filters, and the scope of results. It's complete for a list operation, and the mention of sanitized summaries adds useful context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers status and workspace_id with descriptions. Description reinforces these as filters but does not clarify skip/limit semantics; however, their names and defaults are self-explanatory. With 50% schema coverage, the description partially compensates but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent Postly posts with optional filters, using a specific verb and resource. It distinguishes from siblings like postly_get_post and postly_list_scheduled_posts by emphasizing 'recent' and 'sanitized summaries'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: use for listing posts with optional workspace/status filters. However, it doesn't explicitly mention alternatives or when not to use it, such as for retrieving a single post or scheduled posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_list_scheduled_postsList Scheduled PostsARead-onlyIdempotentInspect
Lists scheduled posts for a requested workspace, date, relative date window, or explicit time range. Returns the resolved window, counts, and matching post summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Optional exact local date in YYYY-MM-DD format. The timezone argument determines the local day. | |
| skip | No | ||
| limit | No | ||
| timezone | No | Optional IANA timezone for relative_range or date, for example Africa/Lagos or America/New_York. Defaults to the account timezone or UTC. | |
| workspace_id | No | Optional workspace ID. Omit to search accessible workspaces. | |
| relative_range | No | Natural date window. Use "tomorrow" for requests like "How many posts do I have lined up for tomorrow?" Defaults to next_7_days when no date or range is provided. | |
| scheduled_from | No | Optional inclusive ISO-8601 start boundary. Must be used with scheduled_until. | |
| organization_id | No | Optional organization ID. Use this to limit the search before choosing a workspace. | |
| scheduled_until | No | Optional exclusive ISO-8601 end boundary. Must be used with scheduled_from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No | |
| window | No | |
| total_count | No | |
| returned_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint false, establishing a safe read operation. The description adds value by stating the return includes the resolved window, counts, and matching post summaries, clarifying what the agent will receive. This goes beyond the annotations, though it doesn't discuss pagination or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action, lists the key filtering options, and summarizes the output. There is no redundant or filler content, and it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 optional parameters and an output schema, the description covers the core behavior and return concept adequately. It doesn't explain filter exclusivity or default behavior, but these are inferable from the schema and the output schema handles return details. A compact but sufficient description for a read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 78%, with detailed descriptions for most parameters (date, timezone, relative_range, scheduled_from, scheduled_until, workspace_id, organization_id). The description offers a concise high-level synthesis of the filter modes but doesn't add extra meaning for skip/limit or parameter interactions. Since the schema carries the bulk of parameter semantics, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists scheduled posts and specifies multiple filtering dimensions: workspace, date, relative date window, or explicit time range. It distinguishes itself from sibling tools like postly_list_posts by targeting scheduled posts and from postly_get_post_status by indicating it returns summaries and counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it apparent when to use this tool: whenever you need to list scheduled posts with flexible time windows. It doesn't explicitly mention alternatives like postly_list_posts or provide exclusions, but the scope is clear enough to guide selection. Missing explicit when-not-to-use guidance prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_list_social_accountsList Publishing TargetsARead-onlyIdempotentInspect
Lists connected social channels and email/newsletter targets for a Postly workspace. Returns publishing target identifiers and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes | Postly workspace ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| social_accounts | No | Connected publishing targets, including social channels and email/newsletter targets. Email targets use platform=email and can be passed by channel_id to target_platforms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint, so the safety profile is covered. The description adds that only 'connected' targets are listed and that output includes 'identifiers and metadata,' but it does not disclose potential caveats such as pagination, ordering, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the primary purpose, and contains no redundant or filler content. Every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema and the presence of an output schema, the description adequately covers the tool's behavior. It states what is listed and what is returned, so no critical information is missing for this straightforward list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter workspace_id with a description. The tool description does not add further meaning or context about the parameter beyond what the schema already gives, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Lists connected social channels and email/newsletter targets for a Postly workspace' and specifies the return type. This distinguishes it from sibling tools like postly_list_posts and postly_list_workspaces by identifying the exact resource (publishing targets).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any exclusion scenarios or prerequisites. It simply states what the tool does, so usage context is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_list_workspacesList WorkspacesARead-onlyIdempotentInspect
Lists Postly workspaces available to the authenticated connection, optionally filtered by organization. Returns workspace identifiers and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Optional Postly organization ID to filter by. |
Output Schema
| Name | Required | Description |
|---|---|---|
| workspaces | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful context about the authenticated connection and states that it returns workspace identifiers and metadata, which clarifies the scope. It does not mention pagination or rate limits, but for a simple list tool this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loads the action, and contains no redundant information. Every clause adds value: the authenticated connection, the optional filter, and the return type.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, full schema coverage, and an output schema), the description adequately covers purpose, scope, and filtering. It does not need to explain return values because the output schema exists. There are no obvious gaps for an agent to correctly invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the only parameter (organization_id) with a clear description, and schema coverage is 100%. The tool description merely echoes 'optionally filtered by organization' without adding new details about format, behavior, or relationships. Therefore, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Lists Postly workspaces') and the resource ('workspaces available to the authenticated connection'). It also mentions the optional organization filter, which adds specificity and distinguishes it from sibling tools like list_organizations and list_social_accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about the authenticated connection and optional filtering, but it does not explicitly state when to use this tool over alternatives such as postly_list_organizations or postly_list_social_accounts. No exclusions or alternative tool names are mentioned, leaving the agent to infer the appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_resolve_publishing_targetsResolve Publishing TargetsARead-onlyIdempotentInspect
Resolves publishing targets by platform, organization, workspace, or name before a post is created or scheduled. Returns matching channels and workspace context.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Optional channel/workspace/organization name fragment to match. | |
| platform | No | Optional platform identifier such as telegram, x, linkedin, instagram, facebook, threads, or bluesky. | |
| workspace_id | No | Optional workspace ID to search within. | |
| organization_id | No | Optional organization ID to search within. |
Output Schema
| Name | Required | Description |
|---|---|---|
| targets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide strong safety signals: readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds minimal context about behavior beyond that, such as 'Returns matching channels and workspace context' and the pre-creation use case. It does not add details like pagination or result limits, but with annotation coverage and an output schema, the description is adequate though not particularly rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the primary action and purpose. No redundant words, and it earns its place with specific detail on resolution dimensions and output. Excellent structure and length for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 optional parameters, no required args, comprehensive annotations, and an output schema (not shown but present). The description provides a high-level summary of the output ('matching channels and workspace context') and the usage context. It does not explain default behavior with no filters (e.g., does it return all targets?), but given the output schema and annotations, the description is sufficiently complete for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (80%) since 4 of 5 parameters have descriptions. The description reinforces the parameter purposes by mentioning 'by platform, organization, workspace, or name', aligning with the query, platform, workspace_id, and organization_id fields. The 'limit' parameter lacks a description in the schema and the description does not compensate, but the name is self-explanatory. Overall, the description adds modest value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Resolves publishing targets by platform, organization, workspace, or name' with a specific verb and resource. It also positions the tool relative to the post lifecycle ('before a post is created or scheduled') and distinguishes it from sibling tools like create_post or list_social_accounts by focusing on resolution of targets rather than creation or general listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'before a post is created or scheduled' and what it does (resolves targets). It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to understand this is the pre-publication target resolver, distinct from general list or creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_update_postUpdate PostADestructiveInspect
Updates editable content, media, labels, social or email/newsletter targets, and schedules for an existing Postly post. Accepts client-provided media references for import in the same action and returns the mutation result, platform readiness, blockers, and any required follow-up data.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| media | No | Already-hosted media objects for the post. Use the media_file fields instead for attached, generated, selected, local, base64, or temporary media that Postly must import during the create or update action. | |
| labels | No | ||
| post_id | Yes | Postly post ID. | |
| media_file | No | Client-provided file reference or temporary URL for the first attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| campaign_id | No | Optional campaign ID in the same workspace. Campaign content approval and workspace post approval still apply. Omit to preserve the association on update. | |
| media_file_2 | No | Client-provided file reference or temporary URL for the number 2 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_3 | No | Client-provided file reference or temporary URL for the number 3 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_4 | No | Client-provided file reference or temporary URL for the number 4 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_5 | No | Client-provided file reference or temporary URL for the number 5 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_6 | No | Client-provided file reference or temporary URL for the number 6 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_7 | No | Client-provided file reference or temporary URL for the number 7 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_8 | No | Client-provided file reference or temporary URL for the number 8 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_file_9 | No | Client-provided file reference or temporary URL for the number 9 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| email_subject | No | Subject line required when targeting email/newsletter channels. | |
| first_comment | No | ||
| media_file_10 | No | Client-provided file reference or temporary URL for the number 10 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object. | |
| media_uploads | No | Optional inline upload specs for agents that can supply public URLs, temporary URLs, base64, or data URLs. Postly imports these assets and appends them to media before creating or updating the post. | |
| audience_group | No | Audience group ID or IDs. Do not combine with target_platforms. You may also pass a single string on clients that support that shorthand. | |
| platform_posts | No | Platform-specific overrides. Each item should include identifier and settings. Call postly_get_channel_schema for each selected platform to see required settings and simple capture guidance. | |
| email_targeting | No | Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts. Property values may use multiple equivalent input shapes; the server normalizes them. | |
| media_alt_texts | No | Optional alt text values aligned with media_file, media_file_2, and later media_file fields. | |
| one_off_schedule | No | ||
| target_platforms | No | Social platform names, email/newsletter, provider names, or channel IDs. Use "all" to target all connected publishing targets in the workspace. Email targets require email_subject and text. You may also pass a single string on clients that support that shorthand. | |
| publishing_preset | No | Optional workspace publishing preset name. Use instead of publishing_preset_id. | |
| email_preview_text | No | Optional short preview text for email/newsletter delivery. | |
| recurring_schedule | No | ||
| publishing_preset_id | No | Optional workspace publishing preset ID. When omitted, Postly uses the preset named Default or the oldest saved preset. | |
| use_publishing_presets | No | Apply the workspace publishing preset. Defaults to true. Set false only when the user explicitly wants platform defaults instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| data | No | |
| prompt | No | |
| status | No | |
| message | No | |
| next_steps | No | |
| agent_guidance | No | |
| ready_platforms | No | |
| blocked_platforms | No | |
| requires_user_input | No | |
| missing_requirements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds genuinely useful context beyond that: it accepts client-provided media references for import in the same action, and it returns mutation result, platform readiness, blockers, and required follow-up data. This clarifies the nature of the mutation and the response shape without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the core action and scope, the second adds two critical behaviors (media import and return payload). Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 29-parameter tool with nested objects and an output schema, the description covers the essential orientation: what gets updated, the special import capability, and what the response contains. It doesn't enumerate mutual exclusions (e.g., audience_group vs target_platforms), but those are already in schema descriptions. The description is sufficiently complete for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the vast majority of parameters already have meaningful descriptions. The description's brief mention of 'client-provided media references for import' aligns with media_file/media_uploads fields that are already documented in the schema engagementenuine added semantic value. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Updates') and resource ('existing Postly post'), and enumerates the editable aspects (content, media, labels, targets, schedules). It distinguishes from sibling create/delete tools by explicitly noting 'existing' and from read tools by describing a mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for an existing Postly post' implies it is for modifying an already-created post, which sets it apart from create/delete. However, there is no explicit when-to-use guidance, no mention of alternatives like postly_validate_post, and no exclusions for combinations like audience_group vs target_platforms—though some of that is in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_upload_mediaUpload MediaAInspect
Imports media into Postly storage independently of a post mutation. Accepts a client-provided file reference, URL, data URL, or base64 payload and returns a durable Postly media object and upload usage details.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public or temporary URL to import into Postly storage when no file reference is available. | |
| data | No | Base64 content or a data URL for agents that can provide bytes instead of a URL. | |
| file | No | Client-provided file reference for an attached, selected, or generated file. | |
| type | No | Optional MIME type such as image/png, video/mp4, or application/pdf. | |
| alt_text | No | Optional alt text to carry forward into the returned Postly media object. | |
| file_name | No | Optional file name. Required when using data/base64 without a file reference. | |
| idempotency_key | No | Optional stable key for safely retrying the same upload. Postly derives one automatically for file references and URLs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| media | No | |
| usage | No | |
| message | No | |
| raw_upload | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, covering the mutation and non-idempotency traits. The description adds that the operation returns a durable media object and usage details, but it does not disclose additional behavioral aspects such as rate limits, storage persistence, or failure handling. With annotations covering the core safety profile, the description provides only modest extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the primary purpose and input types. There is no redundancy or extraneous detail, and every clause contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven parameters, a nested file object, and an output schema, the description adequately covers the core functionality and input types. It omits explicit guidance on when to use the batch sibling, but given the schema and output schema richness, the description is largely complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so every parameter is already documented. The description summarizes the three main input modes (file reference, URL, data URL/base64) but does not add nuance beyond what the schema provides, such as dependencies or constraints. It meets the baseline for high schema coverage without enriching parameter understanding further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (imports) and resource (media into Postly storage), and specifies that it operates independently of post mutation, which distinguishes it from post-related tools. It enumerates the accepted input types (file reference, URL, data URL, base64) and the return value, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating the tool works 'independently of a post mutation,' implying it should be used when media must be uploaded without creating or updating a post. However, it does not explicitly reference alternatives like postly_upload_media_batch or state when to choose one over the other, so the guidance is contextually clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_upload_media_batchUpload Media BatchAIdempotentInspect
Uploads up to 50 files with bounded concurrency and a 30-second overall deadline. Returns completed, failed, not_started, or unknown for every item with its stable idempotency key. Unknown uploads may still complete; reconcile stored media or retry with the same key.
| Name | Required | Description | Default |
|---|---|---|---|
| media_uploads | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| failed | No | |
| message | No | |
| results | No | |
| unknown | No | |
| completed | No | |
| elapsed_ms | No | |
| not_started | No | |
| all_succeeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing bounded concurrency, a 30-second overall deadline, four possible per-item outcomes, and the open-world nuance that unknown uploads may still complete with reconciliation/retry guidance. This is exactly the behavioral context an agent needs, and it is consistent with the openWorldHint and idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: the action/constraint, the result vocabulary, and the failure-handling caveat. Front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch upload tool with an output schema, this covers the important operational details: batch limit, deadline, concurrency, outcome states, and retry behavior. It falls slightly short of fully complete because it leaves the choice of single vs batch upload and the url/data/file parameter trade-offs to inference or the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Context reports 0% schema description coverage, so the description carries the burden of explaining the media_uploads payload; it does not mention the url/data/file source alternatives or the file_name requirement for base64 input. It does add retry semantics for the idempotency_key, which is partial but insufficient compensation for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: uploading media, bounded to 50 files, with per-item status reporting. The batch scope is evident from the name/title and 'up to 50 files', which separates it from the single-file sibling postly_upload_media without needing to inspect either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The batching constraint ('up to 50 files') and deadline imply that this tool is for bulk media uploads, but the description never explicitly says when to prefer it over postly_upload_media or gives a when-not-to-use condition. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postly_validate_postValidate PostARead-onlyIdempotentInspect
Checks proposed post text, media, platform settings, schedules, and targets against Postly and platform-specific requirements. Returns validation status, errors, warnings, platform readiness, and applicable limits.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Post text or caption to validate. | |
| media | No | Optional media objects that will be attached to the post. | |
| workspace_id | Yes | Postly workspace ID. | |
| email_subject | No | Required when validating a post for email/newsletter targets. | |
| platform_posts | No | Optional platform-specific overrides. Use postly_get_channel_schema for the selected platform before supplying settings. | |
| one_off_schedule | No | ||
| target_platforms | No | Optional platform names, email/newsletter, provider names, or channel IDs. Use "all" or omit to validate against all connected workspace publishing targets. You may also pass a single string on clients that support that shorthand. | |
| recurring_schedule | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| No | ||
| valid | No | |
| errors | No | |
| limits | No | |
| warnings | No | |
| platforms | No | |
| schedules | No | |
| agent_guidance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by specifying what it checks and the composition of the response (status, errors, warnings, readiness, limits). It does not contradict annotations and provides behavioral context beyond the safety flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense sentence that front-loads the action and outcome. No filler words, and it conveys the essential purpose and return value efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (per signal), so the description need not explain return format in detail. It covers the main inputs and outputs, but lacks explicit guidance on when to use it relative to create/update flows. Given the complexity and the presence of annotations and output schema, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so most parameters are documented in the schema itself. The description summarizes parameter categories (text, media, platform settings, schedules, targets) but does not add detail beyond the schema's per-parameter descriptions. It adds marginal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it validates post text, media, settings, schedules, and targets, and returns validation status, errors, warnings, readiness, and limits. It distinguishes itself from sibling tools like create/update/delete by being a non-mutating validation operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use before publishing (validating proposed posts) but does not explicitly state when to use it versus postly_create_post or postly_update_post, nor does it mention exclusions or prerequisites like calling postly_get_channel_schema first (which is referenced only in schema descriptions, not the main description).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
postly_create_post1 field changed- added
Input schema / properties / campaign_idAdded value: +{ + "description": "Optional campaign ID in the same workspace. Campaign content approval and workspace post approval still apply. Omit to preserve the association on update.", + "type": "string" +}
- Changed
postly_update_post1 field changed- added
Input schema / properties / campaign_idAdded value: +{ + "description": "Optional campaign ID in the same workspace. Campaign content approval and workspace post approval still apply. Omit to preserve the association on update.", + "type": "string" +}
5 tool updates
- Changed
postly_create_post4 fields changed- changed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / expression / descriptionPrevious value: -"Cron or rate expression describing the recurring schedule."New value: +"AWS six-field cron or rate expression. rate(4 weeks) and every 4 weeks normalize to rate(28 days): elapsed duration, so local clock time may shift across daylight saving changes. Use cron for named-timezone wall-clock recurrence. recurring=true is inferred." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / timezone / descriptionPrevious value: -"IANA timezone used to interpret the recurring schedule."New value: +"IANA timezone for cron wall-clock times and local start/end dates. Rate intervals remain elapsed duration across daylight saving changes." - changed
Input schema / properties / recurring_schedule / properties / expression / descriptionPrevious value: -"Cron or rate expression describing the recurring schedule."New value: +"AWS six-field cron or rate expression. rate(4 weeks) and every 4 weeks normalize to rate(28 days): elapsed duration, so local clock time may shift across daylight saving changes. Use cron for named-timezone wall-clock recurrence. recurring=true is inferred." - changed
Input schema / properties / recurring_schedule / properties / timezone / descriptionPrevious value: -"IANA timezone used to interpret the recurring schedule."New value: +"IANA timezone for cron wall-clock times and local start/end dates. Rate intervals remain elapsed duration across daylight saving changes."
- Changed
postly_list_media3 fields changed- added
Input schema / properties / idempotency_keyAdded value: +{ + "description": "Recover a specific upload using its returned key instead of listing files. An unknown result may still be in progress; retry uploads only with this same key.", + "type": "string" +} - added
Output schema / properties / idempotency_keyAdded value: +{ + "type": "string" +} - added
Output schema / properties / statusAdded value: +{ + "type": "string" +}
- Changed
postly_update_post4 fields changed- changed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / expression / descriptionPrevious value: -"Cron or rate expression describing the recurring schedule."New value: +"AWS six-field cron or rate expression. rate(4 weeks) and every 4 weeks normalize to rate(28 days): elapsed duration, so local clock time may shift across daylight saving changes. Use cron for named-timezone wall-clock recurrence. recurring=true is inferred." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / timezone / descriptionPrevious value: -"IANA timezone used to interpret the recurring schedule."New value: +"IANA timezone for cron wall-clock times and local start/end dates. Rate intervals remain elapsed duration across daylight saving changes." - changed
Input schema / properties / recurring_schedule / properties / expression / descriptionPrevious value: -"Cron or rate expression describing the recurring schedule."New value: +"AWS six-field cron or rate expression. rate(4 weeks) and every 4 weeks normalize to rate(28 days): elapsed duration, so local clock time may shift across daylight saving changes. Use cron for named-timezone wall-clock recurrence. recurring=true is inferred." - changed
Input schema / properties / recurring_schedule / properties / timezone / descriptionPrevious value: -"IANA timezone used to interpret the recurring schedule."New value: +"IANA timezone for cron wall-clock times and local start/end dates. Rate intervals remain elapsed duration across daylight saving changes."
- Changed
postly_upload_media_batch4 fields changed- added
Output schema / properties / elapsed_msAdded value: +{ + "type": "integer" +} - added
Output schema / properties / not_startedAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / resultsAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / unknownAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +}
- Changed
postly_validate_post5 fields changed- added
Input schema / properties / one_off_scheduleAdded value: +{ + "additionalProperties": true, + "properties": { + "one_off_date": { + "description": "Local calendar date for the one-time post, normally YYYY-MM-DD.", + "type": "string" + }, + "time": { + "description": "Local time of day in 24-hour format, for example 09:00 or 18:30:00.", + "type": "string" + }, + "timezone": { + "description": "IANA timezone used to interpret the local date and time, for example Africa/Lagos or America/New_York.", + "type": "string" + } + }, + "required": [ + "one_off_date", + "time", + "timezone" + ], + "type": "object" +} - changed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / expression / descriptionPrevious value: -"Cron or rate expression describing the recurring schedule."New value: +"AWS six-field cron or rate expression. rate(4 weeks) and every 4 weeks normalize to rate(28 days): elapsed duration, so local clock time may shift across daylight saving changes. Use cron for named-timezone wall-clock recurrence. recurring=true is inferred." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / timezone / descriptionPrevious value: -"IANA timezone used to interpret the recurring schedule."New value: +"IANA timezone for cron wall-clock times and local start/end dates. Rate intervals remain elapsed duration across daylight saving changes." - added
Input schema / properties / recurring_scheduleAdded value: +{ + "additionalProperties": true, + "properties": { + "day_of_month": { + "maximum": 31, + "minimum": 1, + "type": "integer" + }, + "end_date": { + "type": "string" + }, + "expression": { + "description": "AWS six-field cron or rate expression. rate(4 weeks) and every 4 weeks normalize to rate(28 days): elapsed duration, so local clock time may shift across daylight saving changes. Use cron for named-timezone wall-clock recurrence. recurring=true is inferred.", + "type": "string" + }, + "rate_unit": { + "enum": [ + "minute", + "minutes", + "hour", + "hours", + "day", + "days", + "week", + "weeks" + ], + "type": "string" + }, + "rate_value": { + "minimum": 1, + "type": "integer" + }, + "start_date": { + "type": "string" + }, + "time": { + "type": "string" + }, + "timezone": { + "description": "IANA timezone for cron wall-clock times and local start/end dates. Rate intervals remain elapsed duration across daylight saving changes.", + "type": "string" + } + }, + "required": [ + "expression", + "timezone" + ], + "type": "object" +} - added
Output schema / properties / schedulesAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +}
6 tool updates
- Changed
postly_create_post1 field changed- changed
Input schema / properties / platform_posts / items / properties / settings / descriptionPrevious value: -"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for exact platform guidance."New value: +"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Blog connectors support posts only: Page/page_type/post_type requests are rejected. Call postly_get_channel_schema for exact platform guidance."
- Added
postly_list_media - Changed
postly_update_post1 field changed- changed
Input schema / properties / platform_posts / items / properties / settings / descriptionPrevious value: -"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for exact platform guidance."New value: +"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Blog connectors support posts only: Page/page_type/post_type requests are rejected. Call postly_get_channel_schema for exact platform guidance."
- Changed
postly_upload_media1 field changed- added
Input schema / properties / idempotency_keyAdded value: +{ + "description": "Optional stable key for safely retrying the same upload. Postly derives one automatically for file references and URLs.", + "type": "string" +}
- Added
postly_upload_media_batch - Changed
postly_validate_post1 field changed- changed
Input schema / properties / platform_posts / items / properties / settings / descriptionPrevious value: -"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for exact platform guidance."New value: +"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Blog connectors support posts only: Page/page_type/post_type requests are rejected. Call postly_get_channel_schema for exact platform guidance."
1 tool update
- Changed
postly_get_post_status2 fields changed- added
Output schema / properties / delivery_resultsAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / draft_delivery_countAdded value: +{ + "type": "integer" +}
2 tool updates
- Changed
postly_create_post3 fields changed- added
Input schema / properties / publishing_presetAdded value: +{ + "description": "Optional workspace publishing preset name. Use instead of publishing_preset_id.", + "type": "string" +} - added
Input schema / properties / publishing_preset_idAdded value: +{ + "description": "Optional workspace publishing preset ID. When omitted, Postly uses the preset named Default or the oldest saved preset.", + "type": "string" +} - added
Input schema / properties / use_publishing_presetsAdded value: +{ + "description": "Apply the workspace publishing preset. Defaults to true. Set false only when the user explicitly wants platform defaults instead.", + "type": "boolean" +}
- Changed
postly_update_post3 fields changed- added
Input schema / properties / publishing_presetAdded value: +{ + "description": "Optional workspace publishing preset name. Use instead of publishing_preset_id.", + "type": "string" +} - added
Input schema / properties / publishing_preset_idAdded value: +{ + "description": "Optional workspace publishing preset ID. When omitted, Postly uses the preset named Default or the oldest saved preset.", + "type": "string" +} - added
Input schema / properties / use_publishing_presetsAdded value: +{ + "description": "Apply the workspace publishing preset. Defaults to true. Set false only when the user explicitly wants platform defaults instead.", + "type": "boolean" +}
1 tool update
- Added
postly_craft_query
3 tool updates
- Changed
postly_create_post2 fields changed- changed
Input schema / properties / platform_posts / items / properties / identifier / enumPrevious value: -[ - "facebook", - "fb", - "fb_page", - "fbpage", - "facebook_page", - "facebookpage", - "meta_page", - "metapage", - "instagram", - "insta", - "ig", - "linkedin", - "linked_in", - "linked", - "lnkd", - "linkdin", - "linkedin_page", - "linkedinpage", - "x", - "twitter", - "x_twitter", - "xtwitter", - "googleMyBusiness", - "google_my_business", - "google_business", - "googlebusiness", - "google_business_profile", - "googlebusinessprofile", - "business_profile", - "businessprofile", - "google_maps", - "googlemaps", - "gmb", - "gbp", - "reddit", - "pinterest", - "pin", - "youtube", - "you_tube", - "yt", - "youtu", - "yt_channel", - "ytchannel", - "youtube_channel", - "youtubechannel", - "youtube_shorts", - "youtubeshorts", - "tiktok", - "tik_tok", - "tik", - "tok", - "wordpress", - "word_press", - "wp", - "blogger", - "blogspot", - "threads", - "thread", - "bluesky", - "blue_sky", - "bsky", - "telegram", - "tg", - "tme", - "whatsapp", - "whats_app", - "whats", - "wa" -]New value: +[ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "ghost", + "hashnode", + "hash_node", + "devto", + "dev_to", + "dev.to", + "forem", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" +] - changed
Input schema / properties / platform_posts / items / properties / settings / properties / identifier / enumPrevious value: -[ - "facebook", - "fb", - "fb_page", - "fbpage", - "facebook_page", - "facebookpage", - "meta_page", - "metapage", - "instagram", - "insta", - "ig", - "linkedin", - "linked_in", - "linked", - "lnkd", - "linkdin", - "linkedin_page", - "linkedinpage", - "x", - "twitter", - "x_twitter", - "xtwitter", - "googleMyBusiness", - "google_my_business", - "google_business", - "googlebusiness", - "google_business_profile", - "googlebusinessprofile", - "business_profile", - "businessprofile", - "google_maps", - "googlemaps", - "gmb", - "gbp", - "reddit", - "pinterest", - "pin", - "youtube", - "you_tube", - "yt", - "youtu", - "yt_channel", - "ytchannel", - "youtube_channel", - "youtubechannel", - "youtube_shorts", - "youtubeshorts", - "tiktok", - "tik_tok", - "tik", - "tok", - "wordpress", - "word_press", - "wp", - "blogger", - "blogspot", - "threads", - "thread", - "bluesky", - "blue_sky", - "bsky", - "telegram", - "tg", - "tme", - "whatsapp", - "whats_app", - "whats", - "wa" -]New value: +[ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "ghost", + "hashnode", + "hash_node", + "devto", + "dev_to", + "dev.to", + "forem", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" +]
- Changed
postly_update_post2 fields changed- changed
Input schema / properties / platform_posts / items / properties / identifier / enumPrevious value: -[ - "facebook", - "fb", - "fb_page", - "fbpage", - "facebook_page", - "facebookpage", - "meta_page", - "metapage", - "instagram", - "insta", - "ig", - "linkedin", - "linked_in", - "linked", - "lnkd", - "linkdin", - "linkedin_page", - "linkedinpage", - "x", - "twitter", - "x_twitter", - "xtwitter", - "googleMyBusiness", - "google_my_business", - "google_business", - "googlebusiness", - "google_business_profile", - "googlebusinessprofile", - "business_profile", - "businessprofile", - "google_maps", - "googlemaps", - "gmb", - "gbp", - "reddit", - "pinterest", - "pin", - "youtube", - "you_tube", - "yt", - "youtu", - "yt_channel", - "ytchannel", - "youtube_channel", - "youtubechannel", - "youtube_shorts", - "youtubeshorts", - "tiktok", - "tik_tok", - "tik", - "tok", - "wordpress", - "word_press", - "wp", - "blogger", - "blogspot", - "threads", - "thread", - "bluesky", - "blue_sky", - "bsky", - "telegram", - "tg", - "tme", - "whatsapp", - "whats_app", - "whats", - "wa" -]New value: +[ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "ghost", + "hashnode", + "hash_node", + "devto", + "dev_to", + "dev.to", + "forem", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" +] - changed
Input schema / properties / platform_posts / items / properties / settings / properties / identifier / enumPrevious value: -[ - "facebook", - "fb", - "fb_page", - "fbpage", - "facebook_page", - "facebookpage", - "meta_page", - "metapage", - "instagram", - "insta", - "ig", - "linkedin", - "linked_in", - "linked", - "lnkd", - "linkdin", - "linkedin_page", - "linkedinpage", - "x", - "twitter", - "x_twitter", - "xtwitter", - "googleMyBusiness", - "google_my_business", - "google_business", - "googlebusiness", - "google_business_profile", - "googlebusinessprofile", - "business_profile", - "businessprofile", - "google_maps", - "googlemaps", - "gmb", - "gbp", - "reddit", - "pinterest", - "pin", - "youtube", - "you_tube", - "yt", - "youtu", - "yt_channel", - "ytchannel", - "youtube_channel", - "youtubechannel", - "youtube_shorts", - "youtubeshorts", - "tiktok", - "tik_tok", - "tik", - "tok", - "wordpress", - "word_press", - "wp", - "blogger", - "blogspot", - "threads", - "thread", - "bluesky", - "blue_sky", - "bsky", - "telegram", - "tg", - "tme", - "whatsapp", - "whats_app", - "whats", - "wa" -]New value: +[ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "ghost", + "hashnode", + "hash_node", + "devto", + "dev_to", + "dev.to", + "forem", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" +]
- Changed
postly_validate_post2 fields changed- changed
Input schema / properties / platform_posts / items / properties / identifier / enumPrevious value: -[ - "facebook", - "fb", - "fb_page", - "fbpage", - "facebook_page", - "facebookpage", - "meta_page", - "metapage", - "instagram", - "insta", - "ig", - "linkedin", - "linked_in", - "linked", - "lnkd", - "linkdin", - "linkedin_page", - "linkedinpage", - "x", - "twitter", - "x_twitter", - "xtwitter", - "googleMyBusiness", - "google_my_business", - "google_business", - "googlebusiness", - "google_business_profile", - "googlebusinessprofile", - "business_profile", - "businessprofile", - "google_maps", - "googlemaps", - "gmb", - "gbp", - "reddit", - "pinterest", - "pin", - "youtube", - "you_tube", - "yt", - "youtu", - "yt_channel", - "ytchannel", - "youtube_channel", - "youtubechannel", - "youtube_shorts", - "youtubeshorts", - "tiktok", - "tik_tok", - "tik", - "tok", - "wordpress", - "word_press", - "wp", - "blogger", - "blogspot", - "threads", - "thread", - "bluesky", - "blue_sky", - "bsky", - "telegram", - "tg", - "tme", - "whatsapp", - "whats_app", - "whats", - "wa" -]New value: +[ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "ghost", + "hashnode", + "hash_node", + "devto", + "dev_to", + "dev.to", + "forem", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" +] - changed
Input schema / properties / platform_posts / items / properties / settings / properties / identifier / enumPrevious value: -[ - "facebook", - "fb", - "fb_page", - "fbpage", - "facebook_page", - "facebookpage", - "meta_page", - "metapage", - "instagram", - "insta", - "ig", - "linkedin", - "linked_in", - "linked", - "lnkd", - "linkdin", - "linkedin_page", - "linkedinpage", - "x", - "twitter", - "x_twitter", - "xtwitter", - "googleMyBusiness", - "google_my_business", - "google_business", - "googlebusiness", - "google_business_profile", - "googlebusinessprofile", - "business_profile", - "businessprofile", - "google_maps", - "googlemaps", - "gmb", - "gbp", - "reddit", - "pinterest", - "pin", - "youtube", - "you_tube", - "yt", - "youtu", - "yt_channel", - "ytchannel", - "youtube_channel", - "youtubechannel", - "youtube_shorts", - "youtubeshorts", - "tiktok", - "tik_tok", - "tik", - "tok", - "wordpress", - "word_press", - "wp", - "blogger", - "blogspot", - "threads", - "thread", - "bluesky", - "blue_sky", - "bsky", - "telegram", - "tg", - "tme", - "whatsapp", - "whats_app", - "whats", - "wa" -]New value: +[ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "ghost", + "hashnode", + "hash_node", + "devto", + "dev_to", + "dev.to", + "forem", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" +]
3 tool updates
- Changed
postly_create_post12 fields changed- changed
Input schema / properties / email_subject / descriptionPrevious value: -"Required when targeting email/newsletter channels. Generate a concise subject line if the user asks to publish to email and enough context is available."New value: +"Subject line required when targeting email/newsletter channels." - changed
Input schema / properties / media / descriptionPrevious value: -"Already-hosted media objects for the post. If the source is a ChatGPT-generated image, selected file, local file, base64 data, or temporary URL, prefer the media_file fields so Postly imports the asset inside this same create/update action."New value: +"Already-hosted media objects for the post. Use the media_file fields instead for attached, generated, selected, local, base64, or temporary media that Postly must import during the create or update action." - changed
Input schema / properties / media_file / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the first attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_10 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 10 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_2 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 2 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_3 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 3 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_4 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 4 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_5 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 5 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_6 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 6 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_7 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 7 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_8 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 8 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_9 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 9 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."
- Changed
postly_update_post12 fields changed- changed
Input schema / properties / email_subject / descriptionPrevious value: -"Required when targeting email/newsletter channels. Generate a concise subject line if the user asks to publish to email and enough context is available."New value: +"Subject line required when targeting email/newsletter channels." - changed
Input schema / properties / media / descriptionPrevious value: -"Already-hosted media objects for the post. If the source is a ChatGPT-generated image, selected file, local file, base64 data, or temporary URL, prefer the media_file fields so Postly imports the asset inside this same create/update action."New value: +"Already-hosted media objects for the post. Use the media_file fields instead for attached, generated, selected, local, base64, or temporary media that Postly must import during the create or update action." - changed
Input schema / properties / media_file / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the first attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_10 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 10 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_2 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 2 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_3 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 3 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_4 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 4 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_5 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 5 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_6 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 6 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_7 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 7 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_8 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 8 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - changed
Input schema / properties / media_file_9 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."New value: +"Client-provided file reference or temporary URL for the number 9 attached, selected, or generated media file. Postly imports it during the create or update action. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object."
- Changed
postly_upload_media1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"ChatGPT/OpenAI file reference for an attached, selected, or generated file. ChatGPT supplies this when the tool metadata marks file as an openai/fileParams field."New value: +"Client-provided file reference for an attached, selected, or generated file."
4 tool updates
- Changed
postly_create_post52 fields changed- changed
Input schema / properties / audience_group / descriptionPrevious value: -"Audience group ID or IDs. Do not combine with target_platforms."New value: +"Audience group ID or IDs. Do not combine with target_platforms. You may also pass a single string on clients that support that shorthand." - added
Input schema / properties / audience_group / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / audience_group / oneOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } -] - added
Input schema / properties / audience_group / typeAdded value: +"array" - changed
Input schema / properties / email_targeting / additionalPropertiesPrevious value: -{ - "oneOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "properties": { - "id": { - "description": "Email list, audience, publication, segment, or target ID.", - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - { - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "properties": { - "id": { - "description": "Email list, audience, publication, segment, or target ID.", - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - } - ] - }, - "type": "array" - } - ] -}New value: +true - changed
Input schema / properties / email_targeting / descriptionPrevious value: -"Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts."New value: +"Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts. Property values may use multiple equivalent input shapes; the server normalizes them." - removed
Input schema / properties / media / items / properties / url / formatRemoved value: -"uri" - changed
Input schema / properties / media_file / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file / typeAdded value: +"string" - changed
Input schema / properties / media_file_10 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_10 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_10 / typeAdded value: +"string" - changed
Input schema / properties / media_file_2 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_2 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_2 / typeAdded value: +"string" - changed
Input schema / properties / media_file_3 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_3 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_3 / typeAdded value: +"string" - changed
Input schema / properties / media_file_4 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_4 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_4 / typeAdded value: +"string" - changed
Input schema / properties / media_file_5 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_5 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_5 / typeAdded value: +"string" - changed
Input schema / properties / media_file_6 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_6 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_6 / typeAdded value: +"string" - changed
Input schema / properties / media_file_7 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_7 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_7 / typeAdded value: +"string" - changed
Input schema / properties / media_file_8 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_8 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_8 / typeAdded value: +"string" - changed
Input schema / properties / media_file_9 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_9 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_9 / typeAdded value: +"string" - removed
Input schema / properties / one_off_schedule / properties / one_off_date / formatRemoved value: -"date" - removed
Input schema / properties / one_off_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - removed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / url / formatRemoved value: -"uri" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / one_off_schedule / properties / one_off_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / one_off_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / end_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / start_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - removed
Input schema / properties / recurring_schedule / properties / end_date / formatRemoved value: -"date" - removed
Input schema / properties / recurring_schedule / properties / start_date / formatRemoved value: -"date" - removed
Input schema / properties / recurring_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - changed
Input schema / properties / target_platforms / descriptionPrevious value: -"Social platform names, email/newsletter, provider names, or channel IDs. Use \"all\" to target all connected publishing targets in the workspace. Email targets require email_subject and text."New value: +"Social platform names, email/newsletter, provider names, or channel IDs. Use \"all\" to target all connected publishing targets in the workspace. Email targets require email_subject and text. You may also pass a single string on clients that support that shorthand." - added
Input schema / properties / target_platforms / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / target_platforms / oneOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } -] - added
Input schema / properties / target_platforms / typeAdded value: +"array"
- Changed
postly_update_post52 fields changed- changed
Input schema / properties / audience_group / descriptionPrevious value: -"Audience group ID or IDs. Do not combine with target_platforms."New value: +"Audience group ID or IDs. Do not combine with target_platforms. You may also pass a single string on clients that support that shorthand." - added
Input schema / properties / audience_group / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / audience_group / oneOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } -] - added
Input schema / properties / audience_group / typeAdded value: +"array" - changed
Input schema / properties / email_targeting / additionalPropertiesPrevious value: -{ - "oneOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "properties": { - "id": { - "description": "Email list, audience, publication, segment, or target ID.", - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - { - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "properties": { - "id": { - "description": "Email list, audience, publication, segment, or target ID.", - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - } - ] - }, - "type": "array" - } - ] -}New value: +true - changed
Input schema / properties / email_targeting / descriptionPrevious value: -"Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts."New value: +"Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts. Property values may use multiple equivalent input shapes; the server normalizes them." - removed
Input schema / properties / media / items / properties / url / formatRemoved value: -"uri" - changed
Input schema / properties / media_file / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file / typeAdded value: +"string" - changed
Input schema / properties / media_file_10 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_10 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_10 / typeAdded value: +"string" - changed
Input schema / properties / media_file_2 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_2 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_2 / typeAdded value: +"string" - changed
Input schema / properties / media_file_3 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_3 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_3 / typeAdded value: +"string" - changed
Input schema / properties / media_file_4 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_4 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_4 / typeAdded value: +"string" - changed
Input schema / properties / media_file_5 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_5 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_5 / typeAdded value: +"string" - changed
Input schema / properties / media_file_6 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_6 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_6 / typeAdded value: +"string" - changed
Input schema / properties / media_file_7 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_7 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_7 / typeAdded value: +"string" - changed
Input schema / properties / media_file_8 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_8 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_8 / typeAdded value: +"string" - changed
Input schema / properties / media_file_9 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post. Pass an HTTP(S) or temporary URL here. Some clients may also send a file-reference object." - removed
Input schema / properties / media_file_9 / oneOfRemoved value: -[ - { - "additionalProperties": true, - "properties": { - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "format": "uri", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } - }, - "required": [ - "download_url", - "file_id" - ], - "type": "object" - }, - { - "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", - "format": "uri", - "pattern": "^https?://", - "type": "string" - } -] - added
Input schema / properties / media_file_9 / typeAdded value: +"string" - removed
Input schema / properties / one_off_schedule / properties / one_off_date / formatRemoved value: -"date" - removed
Input schema / properties / one_off_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - removed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / url / formatRemoved value: -"uri" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / one_off_schedule / properties / one_off_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / one_off_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / end_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / start_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - removed
Input schema / properties / recurring_schedule / properties / end_date / formatRemoved value: -"date" - removed
Input schema / properties / recurring_schedule / properties / start_date / formatRemoved value: -"date" - removed
Input schema / properties / recurring_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - changed
Input schema / properties / target_platforms / descriptionPrevious value: -"Social platform names, email/newsletter, provider names, or channel IDs. Use \"all\" to target all connected publishing targets in the workspace. Email targets require email_subject and text."New value: +"Social platform names, email/newsletter, provider names, or channel IDs. Use \"all\" to target all connected publishing targets in the workspace. Email targets require email_subject and text. You may also pass a single string on clients that support that shorthand." - added
Input schema / properties / target_platforms / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / target_platforms / oneOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } -] - added
Input schema / properties / target_platforms / typeAdded value: +"array"
- Changed
postly_upload_media1 field changed- removed
Input schema / properties / file / properties / download_url / formatRemoved value: -"uri"
- Changed
postly_validate_post11 fields changed- removed
Input schema / properties / media / items / properties / url / formatRemoved value: -"uri" - removed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / url / formatRemoved value: -"uri" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / one_off_schedule / properties / one_off_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / one_off_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / end_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / start_date / formatRemoved value: -"date" - removed
Input schema / properties / platform_posts / items / properties / settings / properties / recurring_schedule / properties / time / patternRemoved value: -"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - changed
Input schema / properties / target_platforms / descriptionPrevious value: -"Optional platform names, email/newsletter, provider names, or channel IDs. Use \"all\" or omit to validate against all connected workspace publishing targets."New value: +"Optional platform names, email/newsletter, provider names, or channel IDs. Use \"all\" or omit to validate against all connected workspace publishing targets. You may also pass a single string on clients that support that shorthand." - added
Input schema / properties / target_platforms / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / target_platforms / oneOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } -] - added
Input schema / properties / target_platforms / typeAdded value: +"array"
3 tool updates
- Changed
postly_create_post8 fields changed- added
Output schema / properties / agent_guidanceAdded value: +{ + "type": "string" +} - added
Output schema / properties / blocked_platformsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_requirementsAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / next_stepsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / promptAdded value: +{ + "type": "string" +} - added
Output schema / properties / ready_platformsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / requires_user_inputAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusAdded value: +{ + "type": "string" +}
- Changed
postly_delete_post8 fields changed- added
Output schema / properties / agent_guidanceAdded value: +{ + "type": "string" +} - added
Output schema / properties / blocked_platformsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_requirementsAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / next_stepsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / promptAdded value: +{ + "type": "string" +} - added
Output schema / properties / ready_platformsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / requires_user_inputAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusAdded value: +{ + "type": "string" +}
- Changed
postly_update_post8 fields changed- added
Output schema / properties / agent_guidanceAdded value: +{ + "type": "string" +} - added
Output schema / properties / blocked_platformsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / missing_requirementsAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / next_stepsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / promptAdded value: +{ + "type": "string" +} - added
Output schema / properties / ready_platformsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / requires_user_inputAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusAdded value: +{ + "type": "string" +}
3 tool updates
- Changed
postly_create_post14 fields changed- removed
Input schema / properties / media / items / anyOfRemoved value: -[ - { - "required": [ - "url" - ] - }, - { - "required": [ - "remote_url" - ] - } -] - added
Input schema / properties / media / items / descriptionAdded value: +"Media object for an already-hosted file. Use url for the media location." - removed
Input schema / properties / media / items / properties / remote_urlRemoved value: -{ - "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", - "format": "uri", - "type": "string" -} - changed
Input schema / properties / media / items / properties / url / descriptionPrevious value: -"Public or Postly-hosted media URL. Either url or remote_url is required."New value: +"Public or Postly-hosted media URL." - added
Input schema / properties / media / items / requiredAdded value: +[ + "url" +] - removed
Input schema / properties / platform_posts / items / properties / media_override / items / anyOfRemoved value: -[ - { - "required": [ - "url" - ] - }, - { - "required": [ - "remote_url" - ] - } -] - added
Input schema / properties / platform_posts / items / properties / media_override / items / descriptionAdded value: +"Media object for an already-hosted file. Use url for the media location." - removed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / remote_urlRemoved value: -{ - "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", - "format": "uri", - "type": "string" -} - changed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / url / descriptionPrevious value: -"Public or Postly-hosted media URL. Either url or remote_url is required."New value: +"Public or Postly-hosted media URL." - added
Input schema / properties / platform_posts / items / properties / media_override / items / requiredAdded value: +[ + "url" +] - changed
Input schema / properties / platform_posts / items / properties / settings / descriptionPrevious value: -"Platform-specific settings. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for the exact platform guidance."New value: +"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for exact platform guidance." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / recipient_phone_numbers / descriptionPrevious value: -"Required for WhatsApp template publishing."New value: +"WhatsApp recipient phone numbers. Provide them only when publishing a WhatsApp template message." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / template_name / descriptionPrevious value: -"Required for WhatsApp template publishing."New value: +"WhatsApp template name. Provide it only when publishing a WhatsApp template message." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / title / descriptionPrevious value: -"Required for YouTube, WordPress, Reddit, and Blogger posts."New value: +"Optional title metadata. Provide it for YouTube, WordPress, Reddit, or Blogger when those platforms are selected."
- Changed
postly_update_post14 fields changed- removed
Input schema / properties / media / items / anyOfRemoved value: -[ - { - "required": [ - "url" - ] - }, - { - "required": [ - "remote_url" - ] - } -] - added
Input schema / properties / media / items / descriptionAdded value: +"Media object for an already-hosted file. Use url for the media location." - removed
Input schema / properties / media / items / properties / remote_urlRemoved value: -{ - "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", - "format": "uri", - "type": "string" -} - changed
Input schema / properties / media / items / properties / url / descriptionPrevious value: -"Public or Postly-hosted media URL. Either url or remote_url is required."New value: +"Public or Postly-hosted media URL." - added
Input schema / properties / media / items / requiredAdded value: +[ + "url" +] - removed
Input schema / properties / platform_posts / items / properties / media_override / items / anyOfRemoved value: -[ - { - "required": [ - "url" - ] - }, - { - "required": [ - "remote_url" - ] - } -] - added
Input schema / properties / platform_posts / items / properties / media_override / items / descriptionAdded value: +"Media object for an already-hosted file. Use url for the media location." - removed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / remote_urlRemoved value: -{ - "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", - "format": "uri", - "type": "string" -} - changed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / url / descriptionPrevious value: -"Public or Postly-hosted media URL. Either url or remote_url is required."New value: +"Public or Postly-hosted media URL." - added
Input schema / properties / platform_posts / items / properties / media_override / items / requiredAdded value: +[ + "url" +] - changed
Input schema / properties / platform_posts / items / properties / settings / descriptionPrevious value: -"Platform-specific settings. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for the exact platform guidance."New value: +"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for exact platform guidance." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / recipient_phone_numbers / descriptionPrevious value: -"Required for WhatsApp template publishing."New value: +"WhatsApp recipient phone numbers. Provide them only when publishing a WhatsApp template message." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / template_name / descriptionPrevious value: -"Required for WhatsApp template publishing."New value: +"WhatsApp template name. Provide it only when publishing a WhatsApp template message." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / title / descriptionPrevious value: -"Required for YouTube, WordPress, Reddit, and Blogger posts."New value: +"Optional title metadata. Provide it for YouTube, WordPress, Reddit, or Blogger when those platforms are selected."
- Changed
postly_validate_post14 fields changed- removed
Input schema / properties / media / items / anyOfRemoved value: -[ - { - "required": [ - "url" - ] - }, - { - "required": [ - "remote_url" - ] - } -] - added
Input schema / properties / media / items / descriptionAdded value: +"Media object for an already-hosted file. Use url for the media location." - removed
Input schema / properties / media / items / properties / remote_urlRemoved value: -{ - "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", - "format": "uri", - "type": "string" -} - changed
Input schema / properties / media / items / properties / url / descriptionPrevious value: -"Public or Postly-hosted media URL. Either url or remote_url is required."New value: +"Public or Postly-hosted media URL." - added
Input schema / properties / media / items / requiredAdded value: +[ + "url" +] - removed
Input schema / properties / platform_posts / items / properties / media_override / items / anyOfRemoved value: -[ - { - "required": [ - "url" - ] - }, - { - "required": [ - "remote_url" - ] - } -] - added
Input schema / properties / platform_posts / items / properties / media_override / items / descriptionAdded value: +"Media object for an already-hosted file. Use url for the media location." - removed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / remote_urlRemoved value: -{ - "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", - "format": "uri", - "type": "string" -} - changed
Input schema / properties / platform_posts / items / properties / media_override / items / properties / url / descriptionPrevious value: -"Public or Postly-hosted media URL. Either url or remote_url is required."New value: +"Public or Postly-hosted media URL." - added
Input schema / properties / platform_posts / items / properties / media_override / items / requiredAdded value: +[ + "url" +] - changed
Input schema / properties / platform_posts / items / properties / settings / descriptionPrevious value: -"Platform-specific settings. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for the exact platform guidance."New value: +"Optional platform-specific settings. Set only fields relevant to the selected platform. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for exact platform guidance." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / recipient_phone_numbers / descriptionPrevious value: -"Required for WhatsApp template publishing."New value: +"WhatsApp recipient phone numbers. Provide them only when publishing a WhatsApp template message." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / template_name / descriptionPrevious value: -"Required for WhatsApp template publishing."New value: +"WhatsApp template name. Provide it only when publishing a WhatsApp template message." - changed
Input schema / properties / platform_posts / items / properties / settings / properties / title / descriptionPrevious value: -"Required for YouTube, WordPress, Reddit, and Blogger posts."New value: +"Optional title metadata. Provide it for YouTube, WordPress, Reddit, or Blogger when those platforms are selected."
6 tool updates
- Changed
postly_create_post88 fields changed- changed
Input schema / properties / email_targeting / additionalPropertiesPrevious value: -trueNew value: +{ + "oneOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "properties": { + "id": { + "description": "Email list, audience, publication, segment, or target ID.", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "properties": { + "id": { + "description": "Email list, audience, publication, segment, or target ID.", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] + }, + "type": "array" + } + ] +} - changed
Input schema / properties / email_targeting / descriptionPrevious value: -"Optional advanced email targeting map keyed by email integration ID. Usually not needed when using email channel_id values returned by postly.list_social_accounts."New value: +"Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts." - added
Input schema / properties / media / items / anyOfAdded value: +[ + { + "required": [ + "url" + ] + }, + { + "required": [ + "remote_url" + ] + } +] - added
Input schema / properties / media / items / properties / nameAdded value: +{ + "type": "string" +} - added
Input schema / properties / media / items / properties / remote_url / descriptionAdded value: +"Public or Postly-hosted media URL. Either remote_url or url is required." - added
Input schema / properties / media / items / properties / remote_url / formatAdded value: +"uri" - changed
Input schema / properties / media / items / properties / type / descriptionPrevious value: -"Media MIME family such as image/*, video/*, audio/*, or application/*."New value: +"Media type such as image, video, audio, image/png, video/mp4, or application/pdf." - added
Input schema / properties / media / items / properties / url / descriptionAdded value: +"Public or Postly-hosted media URL. Either url or remote_url is required." - added
Input schema / properties / media / items / properties / url / formatAdded value: +"uri" - removed
Input schema / properties / media_file / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file / typeRemoved value: -"object" - removed
Input schema / properties / media_file_10 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_10 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_10 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_10 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_10 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_10 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_2 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_2 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_2 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_2 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_2 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_2 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_3 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_3 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_3 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_3 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_3 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_3 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_4 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_4 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_4 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_4 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_4 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_4 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_5 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_5 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_5 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_5 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_5 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_5 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_6 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_6 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_6 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_6 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_6 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_6 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_7 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_7 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_7 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_7 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_7 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_7 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_8 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_8 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_8 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_8 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_8 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_8 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_9 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_9 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_9 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_9 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_9 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_9 / typeRemoved value: -"object" - added
Input schema / properties / one_off_schedule / properties / one_off_date / descriptionAdded value: +"Local calendar date for the one-time post, normally YYYY-MM-DD." - added
Input schema / properties / one_off_schedule / properties / one_off_date / formatAdded value: +"date" - added
Input schema / properties / one_off_schedule / properties / time / descriptionAdded value: +"Local time of day in 24-hour format, for example 09:00 or 18:30:00." - added
Input schema / properties / one_off_schedule / properties / time / patternAdded value: +"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - added
Input schema / properties / one_off_schedule / properties / timezone / descriptionAdded value: +"IANA timezone used to interpret the local date and time, for example Africa/Lagos or America/New_York." - added
Input schema / properties / one_off_schedule / requiredAdded value: +[ + "one_off_date", + "time", + "timezone" +] - changed
Input schema / properties / platform_posts / descriptionPrevious value: -"Platform-specific overrides. Each item should include identifier and settings. Call postly.get_channel_schema for each selected platform to see required settings and simple capture guidance."New value: +"Platform-specific overrides. Each item should include identifier and settings. Call postly_get_channel_schema for each selected platform to see required settings and simple capture guidance." - added
Input schema / properties / platform_posts / items / additionalPropertiesAdded value: +true - added
Input schema / properties / platform_posts / items / propertiesAdded value: +{ + "identifier": { + "description": "Target platform for this override. Common aliases such as linked_in, google_my_business, and twitter are accepted and normalized before publishing. Must match one of the platforms selected by target_platforms.", + "enum": [ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" + ], + "type": "string" + }, + "media_override": { + "description": "Optional media to use for this platform instead of the base media.", + "items": { + "additionalProperties": true, + "anyOf": [ + { + "required": [ + "url" + ] + }, + { + "required": [ + "remote_url" + ] + } + ], + "properties": { + "alt_text": { + "type": "string" + }, + "name": { + "type": "string" + }, + "remote_url": { + "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "Media type such as image, video, audio, image/png, video/mp4, or application/pdf.", + "type": "string" + }, + "url": { + "description": "Public or Postly-hosted media URL. Either url or remote_url is required.", + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "settings": { + "additionalProperties": true, + "description": "Platform-specific settings. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for the exact platform guidance.", + "properties": { + "description": { + "type": "string" + }, + "first_comment": { + "type": "string" + }, + "first_comments": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "identifier": { + "description": "Optional platform identifier. Aliases are accepted and normalized to the canonical platform.", + "enum": [ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" + ], + "type": "string" + }, + "one_off_schedule": { + "additionalProperties": true, + "properties": { + "one_off_date": { + "description": "Local calendar date for the one-time post, normally YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "time": { + "description": "Local time of day in 24-hour format, for example 09:00 or 18:30:00.", + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" + }, + "timezone": { + "description": "IANA timezone used to interpret the local date and time, for example Africa/Lagos or America/New_York.", + "type": "string" + } + }, + "required": [ + "one_off_date", + "time", + "timezone" + ], + "type": "object" + }, + "privacy": { + "enum": [ + "Public", + "Private", + "Unlisted" + ], + "type": "string" + }, + "privacy_level": { + "enum": [ + "PUBLIC_TO_EVERYONE", + "MUTUAL_FOLLOW_FRIENDS", + "FOLLOWER_OF_CREATOR", + "SELF_ONLY" + ], + "type": "string" + }, + "publishing_mode": { + "description": "X publishing mode. Use thread, numbered_thread, or long_form for X text over 280 characters.", + "enum": [ + "classic", + "thread", + "numbered_thread", + "long_form" + ], + "type": "string" + }, + "recipient_phone_numbers": { + "description": "Required for WhatsApp template publishing.", + "items": { + "type": "string" + }, + "type": "array" + }, + "recurring_schedule": { + "additionalProperties": true, + "properties": { + "day_of_month": { + "maximum": 31, + "minimum": 1, + "type": "integer" + }, + "end_date": { + "format": "date", + "type": "string" + }, + "expression": { + "description": "Cron or rate expression describing the recurring schedule.", + "type": "string" + }, + "rate_unit": { + "enum": [ + "minute", + "minutes", + "hour", + "hours", + "day", + "days", + "week", + "weeks" + ], + "type": "string" + }, + "rate_value": { + "minimum": 1, + "type": "integer" + }, + "start_date": { + "format": "date", + "type": "string" + }, + "time": { + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" + }, + "timezone": { + "description": "IANA timezone used to interpret the recurring schedule.", + "type": "string" + } + }, + "required": [ + "expression", + "timezone" + ], + "type": "object" + }, + "template_name": { + "description": "Required for WhatsApp template publishing.", + "type": "string" + }, + "title": { + "description": "Required for YouTube, WordPress, Reddit, and Blogger posts.", + "type": "string" + } + }, + "type": "object" + }, + "text_override": { + "description": "Optional text to use for this platform instead of the base text.", + "type": "string" + } +} - added
Input schema / properties / platform_posts / items / requiredAdded value: +[ + "identifier" +] - added
Input schema / properties / recurring_schedule / properties / day_of_monthAdded value: +{ + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / recurring_schedule / properties / end_dateAdded value: +{ + "format": "date", + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / expression / descriptionAdded value: +"Cron or rate expression describing the recurring schedule." - added
Input schema / properties / recurring_schedule / properties / rate_unitAdded value: +{ + "enum": [ + "minute", + "minutes", + "hour", + "hours", + "day", + "days", + "week", + "weeks" + ], + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / rate_valueAdded value: +{ + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / recurring_schedule / properties / start_dateAdded value: +{ + "format": "date", + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / timeAdded value: +{ + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / timezone / descriptionAdded value: +"IANA timezone used to interpret the recurring schedule." - added
Input schema / properties / recurring_schedule / requiredAdded value: +[ + "expression", + "timezone" +]
- Changed
postly_get_account_analytics2 fields changed- changed
Input schema / properties / channel_id / descriptionPrevious value: -"Analytics source channel_id returned by postly.list_analytics_sources."New value: +"Analytics source channel_id returned by postly_list_analytics_sources." - changed
Input schema / properties / platform / descriptionPrevious value: -"Analytics platform identifier returned by postly.list_analytics_sources, such as instagram, facebook, linkedin, pinterest, youtube, googleMyBusiness, google_my_business, or x."New value: +"Analytics platform identifier returned by postly_list_analytics_sources, such as instagram, facebook, linkedin, pinterest, youtube, googleMyBusiness, google_my_business, or x."
- Changed
postly_get_post_analytics2 fields changed- changed
Input schema / properties / channel_id / descriptionPrevious value: -"Analytics source channel_id returned by postly.list_analytics_sources."New value: +"Analytics source channel_id returned by postly_list_analytics_sources." - changed
Input schema / properties / platform / descriptionPrevious value: -"Analytics platform identifier returned by postly.list_analytics_sources, such as instagram, facebook, linkedin, pinterest, youtube, googleMyBusiness, google_my_business, or x."New value: +"Analytics platform identifier returned by postly_list_analytics_sources, such as instagram, facebook, linkedin, pinterest, youtube, googleMyBusiness, google_my_business, or x."
- Changed
postly_update_post88 fields changed- changed
Input schema / properties / email_targeting / additionalPropertiesPrevious value: -trueNew value: +{ + "oneOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "properties": { + "id": { + "description": "Email list, audience, publication, segment, or target ID.", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "properties": { + "id": { + "description": "Email list, audience, publication, segment, or target ID.", + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + ] + }, + "type": "array" + } + ] +} - changed
Input schema / properties / email_targeting / descriptionPrevious value: -"Optional advanced email targeting map keyed by email integration ID. Usually not needed when using email channel_id values returned by postly.list_social_accounts."New value: +"Optional advanced email targeting map keyed by email integration ID. Each value is a resource ID, a resource object with id, or an array of those. Usually not needed when using email channel_id values returned by postly_list_social_accounts." - added
Input schema / properties / media / items / anyOfAdded value: +[ + { + "required": [ + "url" + ] + }, + { + "required": [ + "remote_url" + ] + } +] - added
Input schema / properties / media / items / properties / nameAdded value: +{ + "type": "string" +} - added
Input schema / properties / media / items / properties / remote_url / descriptionAdded value: +"Public or Postly-hosted media URL. Either remote_url or url is required." - added
Input schema / properties / media / items / properties / remote_url / formatAdded value: +"uri" - changed
Input schema / properties / media / items / properties / type / descriptionPrevious value: -"Media MIME family such as image/*, video/*, audio/*, or application/*."New value: +"Media type such as image, video, audio, image/png, video/mp4, or application/pdf." - added
Input schema / properties / media / items / properties / url / descriptionAdded value: +"Public or Postly-hosted media URL. Either url or remote_url is required." - added
Input schema / properties / media / items / properties / url / formatAdded value: +"uri" - removed
Input schema / properties / media_file / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the first attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file / typeRemoved value: -"object" - removed
Input schema / properties / media_file_10 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_10 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 10 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_10 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_10 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_10 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_10 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_2 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_2 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 2 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_2 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_2 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_2 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_2 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_3 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_3 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 3 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_3 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_3 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_3 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_3 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_4 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_4 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 4 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_4 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_4 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_4 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_4 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_5 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_5 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 5 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_5 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_5 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_5 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_5 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_6 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_6 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 6 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_6 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_6 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_6 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_6 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_7 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_7 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 7 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_7 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_7 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_7 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_7 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_8 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_8 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 8 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_8 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_8 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_8 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_8 / typeRemoved value: -"object" - removed
Input schema / properties / media_file_9 / additionalPropertiesRemoved value: -true - changed
Input schema / properties / media_file_9 / descriptionPrevious value: -"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly.upload_media separately when creating or updating a post."New value: +"ChatGPT/OpenAI file reference for the number 9 attached, selected, or generated media file. Prefer this over calling postly_upload_media separately when creating or updating a post." - added
Input schema / properties / media_file_9 / oneOfAdded value: +[ + { + "additionalProperties": true, + "properties": { + "download_url": { + "description": "Temporary download URL supplied by the MCP client.", + "format": "uri", + "type": "string" + }, + "file_id": { + "type": "string" + }, + "file_name": { + "type": "string" + }, + "mime_type": { + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" + }, + { + "description": "Compatibility fallback for clients that can only provide an http(s) URL. ChatGPT file params should normally provide the object shape.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } +] - removed
Input schema / properties / media_file_9 / propertiesRemoved value: -{ - "download_url": { - "description": "Temporary download URL supplied by the MCP client.", - "type": "string" - }, - "file_id": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - } -} - removed
Input schema / properties / media_file_9 / requiredRemoved value: -[ - "download_url", - "file_id" -] - removed
Input schema / properties / media_file_9 / typeRemoved value: -"object" - added
Input schema / properties / one_off_schedule / properties / one_off_date / descriptionAdded value: +"Local calendar date for the one-time post, normally YYYY-MM-DD." - added
Input schema / properties / one_off_schedule / properties / one_off_date / formatAdded value: +"date" - added
Input schema / properties / one_off_schedule / properties / time / descriptionAdded value: +"Local time of day in 24-hour format, for example 09:00 or 18:30:00." - added
Input schema / properties / one_off_schedule / properties / time / patternAdded value: +"^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$" - added
Input schema / properties / one_off_schedule / properties / timezone / descriptionAdded value: +"IANA timezone used to interpret the local date and time, for example Africa/Lagos or America/New_York." - added
Input schema / properties / one_off_schedule / requiredAdded value: +[ + "one_off_date", + "time", + "timezone" +] - changed
Input schema / properties / platform_posts / descriptionPrevious value: -"Platform-specific overrides. Each item should include identifier and settings. Call postly.get_channel_schema for each selected platform to see required settings and simple capture guidance."New value: +"Platform-specific overrides. Each item should include identifier and settings. Call postly_get_channel_schema for each selected platform to see required settings and simple capture guidance." - added
Input schema / properties / platform_posts / items / additionalPropertiesAdded value: +true - added
Input schema / properties / platform_posts / items / propertiesAdded value: +{ + "identifier": { + "description": "Target platform for this override. Common aliases such as linked_in, google_my_business, and twitter are accepted and normalized before publishing. Must match one of the platforms selected by target_platforms.", + "enum": [ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" + ], + "type": "string" + }, + "media_override": { + "description": "Optional media to use for this platform instead of the base media.", + "items": { + "additionalProperties": true, + "anyOf": [ + { + "required": [ + "url" + ] + }, + { + "required": [ + "remote_url" + ] + } + ], + "properties": { + "alt_text": { + "type": "string" + }, + "name": { + "type": "string" + }, + "remote_url": { + "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "Media type such as image, video, audio, image/png, video/mp4, or application/pdf.", + "type": "string" + }, + "url": { + "description": "Public or Postly-hosted media URL. Either url or remote_url is required.", + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "settings": { + "additionalProperties": true, + "description": "Platform-specific settings. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for the exact platform guidance.", + "properties": { + "description": { + "type": "string" + }, + "first_comment": { + "type": "string" + }, + "first_comments": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "identifier": { + "description": "Optional platform identifier. Aliases are accepted and normalized to the canonical platform.", + "enum": [ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" + ], + "type": "string" + }, + "one_off_schedule": { + "additionalProperties": true, + "properties": { + "one_off_date": { + "description": "Local calendar date for the one-time post, normally YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "time": { + "description": "Local time of day in 24-hour format, for example 09:00 or 18:30:00.", + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" + }, + "timezone": { + "description": "IANA timezone used to interpret the local date and time, for example Africa/Lagos or America/New_York.", + "type": "string" + } + }, + "required": [ + "one_off_date", + "time", + "timezone" + ], + "type": "object" + }, + "privacy": { + "enum": [ + "Public", + "Private", + "Unlisted" + ], + "type": "string" + }, + "privacy_level": { + "enum": [ + "PUBLIC_TO_EVERYONE", + "MUTUAL_FOLLOW_FRIENDS", + "FOLLOWER_OF_CREATOR", + "SELF_ONLY" + ], + "type": "string" + }, + "publishing_mode": { + "description": "X publishing mode. Use thread, numbered_thread, or long_form for X text over 280 characters.", + "enum": [ + "classic", + "thread", + "numbered_thread", + "long_form" + ], + "type": "string" + }, + "recipient_phone_numbers": { + "description": "Required for WhatsApp template publishing.", + "items": { + "type": "string" + }, + "type": "array" + }, + "recurring_schedule": { + "additionalProperties": true, + "properties": { + "day_of_month": { + "maximum": 31, + "minimum": 1, + "type": "integer" + }, + "end_date": { + "format": "date", + "type": "string" + }, + "expression": { + "description": "Cron or rate expression describing the recurring schedule.", + "type": "string" + }, + "rate_unit": { + "enum": [ + "minute", + "minutes", + "hour", + "hours", + "day", + "days", + "week", + "weeks" + ], + "type": "string" + }, + "rate_value": { + "minimum": 1, + "type": "integer" + }, + "start_date": { + "format": "date", + "type": "string" + }, + "time": { + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" + }, + "timezone": { + "description": "IANA timezone used to interpret the recurring schedule.", + "type": "string" + } + }, + "required": [ + "expression", + "timezone" + ], + "type": "object" + }, + "template_name": { + "description": "Required for WhatsApp template publishing.", + "type": "string" + }, + "title": { + "description": "Required for YouTube, WordPress, Reddit, and Blogger posts.", + "type": "string" + } + }, + "type": "object" + }, + "text_override": { + "description": "Optional text to use for this platform instead of the base text.", + "type": "string" + } +} - added
Input schema / properties / platform_posts / items / requiredAdded value: +[ + "identifier" +] - added
Input schema / properties / recurring_schedule / properties / day_of_monthAdded value: +{ + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / recurring_schedule / properties / end_dateAdded value: +{ + "format": "date", + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / expression / descriptionAdded value: +"Cron or rate expression describing the recurring schedule." - added
Input schema / properties / recurring_schedule / properties / rate_unitAdded value: +{ + "enum": [ + "minute", + "minutes", + "hour", + "hours", + "day", + "days", + "week", + "weeks" + ], + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / rate_valueAdded value: +{ + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / recurring_schedule / properties / start_dateAdded value: +{ + "format": "date", + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / timeAdded value: +{ + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" +} - added
Input schema / properties / recurring_schedule / properties / timezone / descriptionAdded value: +"IANA timezone used to interpret the recurring schedule." - added
Input schema / properties / recurring_schedule / requiredAdded value: +[ + "expression", + "timezone" +]
- Changed
postly_upload_media1 field changed- added
Input schema / properties / file / properties / download_url / formatAdded value: +"uri"
- Changed
postly_validate_post7 fields changed- added
Input schema / properties / media / items / additionalPropertiesAdded value: +true - added
Input schema / properties / media / items / anyOfAdded value: +[ + { + "required": [ + "url" + ] + }, + { + "required": [ + "remote_url" + ] + } +] - added
Input schema / properties / media / items / propertiesAdded value: +{ + "alt_text": { + "type": "string" + }, + "name": { + "type": "string" + }, + "remote_url": { + "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "Media type such as image, video, audio, image/png, video/mp4, or application/pdf.", + "type": "string" + }, + "url": { + "description": "Public or Postly-hosted media URL. Either url or remote_url is required.", + "format": "uri", + "type": "string" + } +} - changed
Input schema / properties / platform_posts / descriptionPrevious value: -"Optional platform-specific overrides. Use postly.get_channel_schema for the selected platform before supplying settings."New value: +"Optional platform-specific overrides. Use postly_get_channel_schema for the selected platform before supplying settings." - added
Input schema / properties / platform_posts / items / additionalPropertiesAdded value: +true - added
Input schema / properties / platform_posts / items / propertiesAdded value: +{ + "identifier": { + "description": "Target platform for this override. Common aliases such as linked_in, google_my_business, and twitter are accepted and normalized before publishing. Must match one of the platforms selected by target_platforms.", + "enum": [ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" + ], + "type": "string" + }, + "media_override": { + "description": "Optional media to use for this platform instead of the base media.", + "items": { + "additionalProperties": true, + "anyOf": [ + { + "required": [ + "url" + ] + }, + { + "required": [ + "remote_url" + ] + } + ], + "properties": { + "alt_text": { + "type": "string" + }, + "name": { + "type": "string" + }, + "remote_url": { + "description": "Public or Postly-hosted media URL. Either remote_url or url is required.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "Media type such as image, video, audio, image/png, video/mp4, or application/pdf.", + "type": "string" + }, + "url": { + "description": "Public or Postly-hosted media URL. Either url or remote_url is required.", + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "settings": { + "additionalProperties": true, + "description": "Platform-specific settings. identifier is optional; when provided it must match platform_posts[].identifier. Call postly_get_channel_schema for the exact platform guidance.", + "properties": { + "description": { + "type": "string" + }, + "first_comment": { + "type": "string" + }, + "first_comments": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "identifier": { + "description": "Optional platform identifier. Aliases are accepted and normalized to the canonical platform.", + "enum": [ + "facebook", + "fb", + "fb_page", + "fbpage", + "facebook_page", + "facebookpage", + "meta_page", + "metapage", + "instagram", + "insta", + "ig", + "linkedin", + "linked_in", + "linked", + "lnkd", + "linkdin", + "linkedin_page", + "linkedinpage", + "x", + "twitter", + "x_twitter", + "xtwitter", + "googleMyBusiness", + "google_my_business", + "google_business", + "googlebusiness", + "google_business_profile", + "googlebusinessprofile", + "business_profile", + "businessprofile", + "google_maps", + "googlemaps", + "gmb", + "gbp", + "reddit", + "pinterest", + "pin", + "youtube", + "you_tube", + "yt", + "youtu", + "yt_channel", + "ytchannel", + "youtube_channel", + "youtubechannel", + "youtube_shorts", + "youtubeshorts", + "tiktok", + "tik_tok", + "tik", + "tok", + "wordpress", + "word_press", + "wp", + "blogger", + "blogspot", + "threads", + "thread", + "bluesky", + "blue_sky", + "bsky", + "telegram", + "tg", + "tme", + "whatsapp", + "whats_app", + "whats", + "wa" + ], + "type": "string" + }, + "one_off_schedule": { + "additionalProperties": true, + "properties": { + "one_off_date": { + "description": "Local calendar date for the one-time post, normally YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "time": { + "description": "Local time of day in 24-hour format, for example 09:00 or 18:30:00.", + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" + }, + "timezone": { + "description": "IANA timezone used to interpret the local date and time, for example Africa/Lagos or America/New_York.", + "type": "string" + } + }, + "required": [ + "one_off_date", + "time", + "timezone" + ], + "type": "object" + }, + "privacy": { + "enum": [ + "Public", + "Private", + "Unlisted" + ], + "type": "string" + }, + "privacy_level": { + "enum": [ + "PUBLIC_TO_EVERYONE", + "MUTUAL_FOLLOW_FRIENDS", + "FOLLOWER_OF_CREATOR", + "SELF_ONLY" + ], + "type": "string" + }, + "publishing_mode": { + "description": "X publishing mode. Use thread, numbered_thread, or long_form for X text over 280 characters.", + "enum": [ + "classic", + "thread", + "numbered_thread", + "long_form" + ], + "type": "string" + }, + "recipient_phone_numbers": { + "description": "Required for WhatsApp template publishing.", + "items": { + "type": "string" + }, + "type": "array" + }, + "recurring_schedule": { + "additionalProperties": true, + "properties": { + "day_of_month": { + "maximum": 31, + "minimum": 1, + "type": "integer" + }, + "end_date": { + "format": "date", + "type": "string" + }, + "expression": { + "description": "Cron or rate expression describing the recurring schedule.", + "type": "string" + }, + "rate_unit": { + "enum": [ + "minute", + "minutes", + "hour", + "hours", + "day", + "days", + "week", + "weeks" + ], + "type": "string" + }, + "rate_value": { + "minimum": 1, + "type": "integer" + }, + "start_date": { + "format": "date", + "type": "string" + }, + "time": { + "pattern": "^\\d{1,2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?$", + "type": "string" + }, + "timezone": { + "description": "IANA timezone used to interpret the recurring schedule.", + "type": "string" + } + }, + "required": [ + "expression", + "timezone" + ], + "type": "object" + }, + "template_name": { + "description": "Required for WhatsApp template publishing.", + "type": "string" + }, + "title": { + "description": "Required for YouTube, WordPress, Reddit, and Blogger posts.", + "type": "string" + } + }, + "type": "object" + }, + "text_override": { + "description": "Optional text to use for this platform instead of the base text.", + "type": "string" + } +} - added
Input schema / properties / platform_posts / items / requiredAdded value: +[ + "identifier" +]
18 tool updates
- First observed
postly_create_post - First observed
postly_delete_post - First observed
postly_get_account_analytics - First observed
postly_get_channel_schema - First observed
postly_get_post - First observed
postly_get_post_analytics - First observed
postly_get_post_status - First observed
postly_get_publishing_activity - First observed
postly_list_analytics_sources - First observed
postly_list_organizations - First observed
postly_list_posts - First observed
postly_list_scheduled_posts - First observed
postly_list_social_accounts - First observed
postly_list_workspaces - First observed
postly_resolve_publishing_targets - First observed
postly_update_post - First observed
postly_upload_media - First observed
postly_validate_post
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.169 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm49 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.