MCP App Store
Productivity
Planable icon

Planable

by Planable

Overview

Planable is the social media management platform built for agency teams and multi-brand organizations. Connect ChatGPT to your Planable workspaces to draft posts directly into client accounts, pull pending approvals across all your clients at once, audit what's scheduled for the week, and generate client-ready performance reports from live analytics data. Everything stays in Planable — your drafts, your approvals, your content calendar. ChatGPT just makes the work faster.

Tools

approve_post

ChatGPT
Approve a Planable post. Runs the full approval pipeline including multi-level approval support, auto-scheduling (if configured in workspace settings), activity logging, and notifications. Returns the updated post. Idempotent — approving an already-approved post is a no-op. PREREQUISITE: The workspace must have an approval workflow configured (approvalWorkflow is not "none"). If approval is not configured, this tool will reject. WHEN TO CALL: Use after reviewing a post via get_post. The user must have APPROVE permission in the workspace. Use list_posts with approvalStatus=PENDING_MY_APPROVAL to find posts awaiting approval.

approve_post

ChatGPT
Approve a Planable post. Runs the full approval pipeline including multi-level approval support, auto-scheduling (if configured in workspace settings), activity logging, and notifications. Returns the updated post. Idempotent — approving an already-approved post is a no-op. PREREQUISITE: The workspace must have an approval workflow configured (approvalWorkflow is not "none"). If approval is not configured, this tool will reject. WHEN TO CALL: Use after reviewing a post via get_post. The user must have APPROVE permission in the workspace. Use list_posts with approvalStatus=PENDING_MY_APPROVAL to find posts awaiting approval.

approve_post

ChatGPT
Approve a Planable post. Runs the full approval pipeline including multi-level approval support, auto-scheduling (if configured in workspace settings), activity logging, and notifications. Returns the updated post. Idempotent — approving an already-approved post is a no-op. PREREQUISITE: The workspace must have an approval workflow configured (approvalWorkflow is not "none"). If approval is not configured, this tool will reject. WHEN TO CALL: Use after reviewing a post via get_post. The user must have APPROVE permission in the workspace. Use list_posts with approvalStatus=PENDING_MY_APPROVAL to find posts awaiting approval.

create_comment

ChatGPT
Add a comment or internal note to a Planable post. Set teamOnly to true for an internal note visible only to team members, or false (default) for a public comment. Returns the created comment with id, text, authorId, teamOnly, and createdAt. WHEN TO CALL: Use to leave feedback, ask questions, or add notes to a post. The postId comes from list_posts or get_post.

create_comment

ChatGPT
Add a comment or internal note to a Planable post. Set teamOnly to true for an internal note visible only to team members, or false (default) for a public comment. Returns the created comment with id, text, authorId, teamOnly, and createdAt. WHEN TO CALL: Use to leave feedback, ask questions, or add notes to a post. The postId comes from list_posts or get_post.

create_comment

ChatGPT
Add a comment or internal note to a Planable post. Set teamOnly to true for an internal note visible only to team members, or false (default) for a public comment. Returns the created comment with id, text, authorId, teamOnly, and createdAt. WHEN TO CALL: Use to leave feedback, ask questions, or add notes to a post. The postId comes from list_posts or get_post.

create_grouped_post

ChatGPT
Create synced unpublished posts across multiple Planable pages at once. All posts in the group share the same content and are kept in sync; if publishAtScheduledDate is true with scheduledAt, they are confirmed for future auto-publishing. Supports text content, multiple media URLs, labels, and an optional schedule time. Classification: post, story, reels. REQUIRED SETUP: Call list_workspaces then list_pages to get valid workspaceId and pageId values. Requires at least 2 pageIds. GROUPING BEHAVIOR — read carefully, the result is not always a single synced group: the pageIds are split into two sub-groups by page type (universal pages vs. non-universal pages). Each sub-group is processed independently. A sub-group with 2 or more pages becomes a synced grouped post (groupId, groupPageIds, groupSync=true on every member). A sub-group with exactly 1 page becomes a standalone post (no groupId). So you may get: one grouped post, two grouped posts, one grouped post and one standalone, or even two standalone posts if the request was 1 universal + 1 non-universal. Always inspect the groupId / groupPageIds fields on each returned post to see what actually happened, and explain the outcome to the user in those terms — don't claim 'one synced group' when the API returned two. MEDIA: mediaUrls is an optional array of public image/video URLs, max 20 items and ~100MB each. Media is uploaded once and reused across every post created by this call. If some uploads fail, posts are still created with successful ones and mediaError explains what went wrong. LABELS: Call list_labels first to discover available labels, then pass label UUIDs. labels must be UUIDs from the workspace label catalog; unknown UUIDs return a validation error. WHEN TO USE: Use this instead of multiple create_post calls when the user wants the same content on multiple platforms. For per-page content customization, use create_post once per page instead.

create_grouped_post

ChatGPT
Create synced unpublished posts across multiple Planable pages at once. All posts in the group share the same content and are kept in sync; if publishAtScheduledDate is true with scheduledAt, they are confirmed for future auto-publishing. Supports text content, multiple media URLs, labels, and an optional schedule time. Classification: post, story, reels. REQUIRED SETUP: Call list_workspaces then list_pages to get valid workspaceId and pageId values. Requires at least 2 pageIds. GROUPING BEHAVIOR — read carefully, the result is not always a single synced group: the pageIds are split into two sub-groups by page type (universal pages vs. non-universal pages). Each sub-group is processed independently. A sub-group with 2 or more pages becomes a synced grouped post (groupId, groupPageIds, groupSync=true on every member). A sub-group with exactly 1 page becomes a standalone post (no groupId). So you may get: one grouped post, two grouped posts, one grouped post and one standalone, or even two standalone posts if the request was 1 universal + 1 non-universal. Always inspect the groupId / groupPageIds fields on each returned post to see what actually happened, and explain the outcome to the user in those terms — don't claim 'one synced group' when the API returned two. MEDIA: mediaUrls is an optional array of public image/video URLs, max 20 items and ~100MB each. Media is uploaded once and reused across every post created by this call. If some uploads fail, posts are still created with successful ones and mediaError explains what went wrong. LABELS: Call list_labels first to discover available labels, then pass label UUIDs. labels must be UUIDs from the workspace label catalog; unknown UUIDs return a validation error. WHEN TO USE: Use this instead of multiple create_post calls when the user wants the same content on multiple platforms. For per-page content customization, use create_post once per page instead.

create_grouped_post

ChatGPT
Create synced unpublished posts across multiple Planable pages at once. All posts in the group share the same content and are kept in sync; if publishAtScheduledDate is true with scheduledAt, they are confirmed for future auto-publishing. Supports text content, multiple media URLs, labels, and an optional schedule time. Classification: post, story, reels. REQUIRED SETUP: Call list_workspaces then list_pages to get valid workspaceId and pageId values. Requires at least 2 pageIds. GROUPING BEHAVIOR — read carefully, the result is not always a single synced group: the pageIds are split into two sub-groups by page type (universal pages vs. non-universal pages). Each sub-group is processed independently. A sub-group with 2 or more pages becomes a synced grouped post (groupId, groupPageIds, groupSync=true on every member). A sub-group with exactly 1 page becomes a standalone post (no groupId). So you may get: one grouped post, two grouped posts, one grouped post and one standalone, or even two standalone posts if the request was 1 universal + 1 non-universal. Always inspect the groupId / groupPageIds fields on each returned post to see what actually happened, and explain the outcome to the user in those terms — don't claim 'one synced group' when the API returned two. MEDIA: mediaUrls is an optional array of public image/video URLs, max 20 items and ~100MB each. Media is uploaded once and reused across every post created by this call. If some uploads fail, posts are still created with successful ones and mediaError explains what went wrong. LABELS: Call list_labels first to discover available labels, then pass label UUIDs. labels must be UUIDs from the workspace label catalog; unknown UUIDs return a validation error. WHEN TO USE: Use this instead of multiple create_post calls when the user wants the same content on multiple platforms. For per-page content customization, use create_post once per page instead.

create_label

ChatGPT
Create a new label in a Planable workspace. Labels are colored tags used to categorize posts. Available colors: pattens-blue, feta, pink-lace, pippin, peach-cream, fog, half-and-half, lime-flurish, snowy-mint, blue-chalk, mabel, silver-sand. Returns the created label with uuid, color, and text. WHEN TO CALL: Use when the user wants to create a new tag/category for organizing posts. Call list_labels first to check existing labels and avoid duplicates.

create_label

ChatGPT
Create a new label in a Planable workspace. Labels are colored tags used to categorize posts. Available colors: pattens-blue, feta, pink-lace, pippin, peach-cream, fog, half-and-half, lime-flurish, snowy-mint, blue-chalk, mabel, silver-sand. Returns the created label with uuid, color, and text. WHEN TO CALL: Use when the user wants to create a new tag/category for organizing posts. Call list_labels first to check existing labels and avoid duplicates.

create_label

ChatGPT
Create a new label in a Planable workspace. Labels are colored tags used to categorize posts. Available colors: pattens-blue, feta, pink-lace, pippin, peach-cream, fog, half-and-half, lime-flurish, snowy-mint, blue-chalk, mabel, silver-sand. Returns the created label with uuid, color, and text. WHEN TO CALL: Use when the user wants to create a new tag/category for organizing posts. Call list_labels first to check existing labels and avoid duplicates.

create_post

ChatGPT
Create an unpublished post on a single Planable page. By default the post remains a draft; if publishAtScheduledDate is true with scheduledAt, it is confirmed for future auto-publishing. Supports text content, multiple media URLs, labels, and an optional schedule time. Classification: post, story, reels. REQUIRED SETUP: Call list_workspaces then list_pages to get valid workspaceId and pageId values. MEDIA: mediaUrls is an optional array of public image/video URLs, max 20 items and ~100MB each. Multiple images create a carousel/multi-image post; a single video creates a video post. Stories only support one media item. If some uploads fail, the post is still created with successful ones and mediaError explains what went wrong. mediaCount in the response shows how many items were attached. LABELS: Call list_labels first to discover available labels, then pass label UUIDs. labels must be UUIDs from the workspace label catalog; unknown UUIDs return a validation error. MULTI-PLATFORM: This tool creates a post on one page at a time. For synced multi-platform posting, use create_grouped_post instead. VALIDATION: The response includes validationErrors listing platform rules not yet satisfied (e.g., Instagram requires media). These do not prevent draft creation but must be resolved before publishing.

create_post

ChatGPT
Create an unpublished post on a single Planable page. By default the post remains a draft; if publishAtScheduledDate is true with scheduledAt, it is confirmed for future auto-publishing. Supports text content, multiple media URLs, labels, and an optional schedule time. Classification: post, story, reels. REQUIRED SETUP: Call list_workspaces then list_pages to get valid workspaceId and pageId values. MEDIA: mediaUrls is an optional array of public image/video URLs, max 20 items and ~100MB each. Multiple images create a carousel/multi-image post; a single video creates a video post. Stories only support one media item. If some uploads fail, the post is still created with successful ones and mediaError explains what went wrong. mediaCount in the response shows how many items were attached. LABELS: Call list_labels first to discover available labels, then pass label UUIDs. labels must be UUIDs from the workspace label catalog; unknown UUIDs return a validation error. MULTI-PLATFORM: This tool creates a post on one page at a time. For synced multi-platform posting, use create_grouped_post instead. VALIDATION: The response includes validationErrors listing platform rules not yet satisfied (e.g., Instagram requires media). These do not prevent draft creation but must be resolved before publishing.

create_post

ChatGPT
Create an unpublished post on a single Planable page. By default the post remains a draft; if publishAtScheduledDate is true with scheduledAt, it is confirmed for future auto-publishing. Supports text content, multiple media URLs, labels, and an optional schedule time. Classification: post, story, reels. REQUIRED SETUP: Call list_workspaces then list_pages to get valid workspaceId and pageId values. MEDIA: mediaUrls is an optional array of public image/video URLs, max 20 items and ~100MB each. Multiple images create a carousel/multi-image post; a single video creates a video post. Stories only support one media item. If some uploads fail, the post is still created with successful ones and mediaError explains what went wrong. mediaCount in the response shows how many items were attached. LABELS: Call list_labels first to discover available labels, then pass label UUIDs. labels must be UUIDs from the workspace label catalog; unknown UUIDs return a validation error. MULTI-PLATFORM: This tool creates a post on one page at a time. For synced multi-platform posting, use create_grouped_post instead. VALIDATION: The response includes validationErrors listing platform rules not yet satisfied (e.g., Instagram requires media). These do not prevent draft creation but must be resolved before publishing.

disapprove_post

ChatGPT
Disapprove (reject) a Planable post. Walks back approval status, clears auto-scheduled publishing if configured, logs activity, and notifies relevant users. Returns the updated post. PREREQUISITE: The workspace must have an approval workflow configured (approvalWorkflow is not "none"). If approval is not configured, this tool will reject. WHEN TO CALL: Use when a post needs changes before it can be published. The user must have APPROVE permission. Consider adding a comment via create_comment to explain the rejection reason.

disapprove_post

ChatGPT
Disapprove (reject) a Planable post. Walks back approval status, clears auto-scheduled publishing if configured, logs activity, and notifies relevant users. Returns the updated post. PREREQUISITE: The workspace must have an approval workflow configured (approvalWorkflow is not "none"). If approval is not configured, this tool will reject. WHEN TO CALL: Use when a post needs changes before it can be published. The user must have APPROVE permission. Consider adding a comment via create_comment to explain the rejection reason.

disapprove_post

ChatGPT
Disapprove (reject) a Planable post. Walks back approval status, clears auto-scheduled publishing if configured, logs activity, and notifies relevant users. Returns the updated post. PREREQUISITE: The workspace must have an approval workflow configured (approvalWorkflow is not "none"). If approval is not configured, this tool will reject. WHEN TO CALL: Use when a post needs changes before it can be published. The user must have APPROVE permission. Consider adding a comment via create_comment to explain the rejection reason.

get_media

ChatGPT
Get detail for a single media item from the workspace media library. Returns the same fields as list_media for one item. Use to check the processing status of a recently uploaded media item. The mediaId comes from list_media, upload_media, or a create_post response.

get_media

ChatGPT
Get detail for a single media item from the workspace media library. Returns the same fields as list_media for one item. Use to check the processing status of a recently uploaded media item. The mediaId comes from list_media, upload_media, or a create_post response.

get_media

ChatGPT
Get detail for a single media item from the workspace media library. Returns the same fields as list_media for one item. Use to check the processing status of a recently uploaded media item. The mediaId comes from list_media, upload_media, or a create_post response.

get_page_metrics

ChatGPT
Get per-page/profile performance metrics for the requested pages over a date range. Returns one row per page with: (1) normalized cross-platform metrics (audience, posts, impressions, engagement, engagementRate) for comparison across platforms, (2) platform-specific metrics matching what the app shows for each platform (e.g. Instagram reach, TikTok profile views, YouTube watch time), and (3) metricsFetchedAt (earliest/latest snapshot timestamps). Audience is the latest follower/subscriber count; activity metrics are summed over the range. Reads existing stored metrics. Unsupported platforms (Google My Business, Threads) and pageIds outside the workspace are reported in unsupportedPages.

get_page_metrics

ChatGPT
Get per-page/profile performance metrics for the requested pages over a date range. Returns one row per page with: (1) normalized cross-platform metrics (audience, posts, impressions, engagement, engagementRate) for comparison across platforms, (2) platform-specific metrics matching what the app shows for each platform (e.g. Instagram reach, TikTok profile views, YouTube watch time), and (3) metricsFetchedAt (earliest/latest snapshot timestamps). Audience is the latest follower/subscriber count; activity metrics are summed over the range. Reads existing stored metrics. Unsupported platforms (Google My Business, Threads) and pageIds outside the workspace are reported in unsupportedPages.

get_page_metrics

ChatGPT
Get per-page/profile performance metrics for the requested pages over a date range. Returns one row per page with: (1) normalized cross-platform metrics (audience, posts, impressions, engagement, engagementRate) for comparison across platforms, (2) platform-specific metrics matching what the app shows for each platform (e.g. Instagram reach, TikTok profile views, YouTube watch time), and (3) metricsFetchedAt (earliest/latest snapshot timestamps). Audience is the latest follower/subscriber count; activity metrics are summed over the range. Reads existing stored metrics. Unsupported platforms (Google My Business, Threads) and pageIds outside the workspace are reported in unsupportedPages.

get_page_metrics_summary

ChatGPT
Get aggregated page/profile metrics totals across all requested pages. Returns summed normalized metrics (audience, posts, impressions, engagement, engagementRate), the number of pages that contributed, and metricsFetchedAt (earliest/latest snapshot timestamps). Audience is the sum of latest follower/subscriber counts across pages. Reads existing stored metrics. Unsupported platforms (Google My Business, Threads) and pageIds outside the workspace are reported in unsupportedPages.

get_page_metrics_summary

ChatGPT
Get aggregated page/profile metrics totals across all requested pages. Returns summed normalized metrics (audience, posts, impressions, engagement, engagementRate), the number of pages that contributed, and metricsFetchedAt (earliest/latest snapshot timestamps). Audience is the sum of latest follower/subscriber counts across pages. Reads existing stored metrics. Unsupported platforms (Google My Business, Threads) and pageIds outside the workspace are reported in unsupportedPages.

get_page_metrics_summary

ChatGPT
Get aggregated page/profile metrics totals across all requested pages. Returns summed normalized metrics (audience, posts, impressions, engagement, engagementRate), the number of pages that contributed, and metricsFetchedAt (earliest/latest snapshot timestamps). Audience is the sum of latest follower/subscriber counts across pages. Reads existing stored metrics. Unsupported platforms (Google My Business, Threads) and pageIds outside the workspace are reported in unsupportedPages.

get_post

ChatGPT
Get full detail for a single Planable post by id within a workspace. Returns the complete post including full text content (plainText, not truncated), media URLs, approval status (approved, approvedBy), labels with colors, schedule info, group info (groupId, groupPageIds, groupSync), and comment/note counts. Requires workspaceId and postId — get both from list_posts results. WHEN TO CALL: Use after list_posts when you need the full content of a specific post — list_posts only returns textPreview (up to 500 chars). Also use to check media attachments or detailed approval info.

get_post

ChatGPT
Get full detail for a single Planable post by id within a workspace. Returns the complete post including full text content (plainText, not truncated), media URLs, approval status (approved, approvedBy), labels with colors, schedule info, group info (groupId, groupPageIds, groupSync), and comment/note counts. Requires workspaceId and postId — get both from list_posts results. WHEN TO CALL: Use after list_posts when you need the full content of a specific post — list_posts only returns textPreview (up to 500 chars). Also use to check media attachments or detailed approval info.

get_post

ChatGPT
Get full detail for a single Planable post by id within a workspace. Returns the complete post including full text content (plainText, not truncated), media URLs, approval status (approved, approvedBy), labels with colors, schedule info, group info (groupId, groupPageIds, groupSync), and comment/note counts. Requires workspaceId and postId — get both from list_posts results. WHEN TO CALL: Use after list_posts when you need the full content of a specific post — list_posts only returns textPreview (up to 500 chars). Also use to check media attachments or detailed approval info.

get_post_metrics

ChatGPT
Get per-post performance metrics for published posts in a workspace. Returns each post with normalized cross-platform metrics (impressions, views, engagement, likes, comments, shares) plus lightweight post context (pageType, scheduledAt, textPreview). Reads existing stored metrics and supports pagination via limit/offset; newest posts first. pageIds that do not belong to the workspace are reported in unsupportedPages — surface them to the user instead of silently returning zero items.

get_post_metrics

ChatGPT
Get per-post performance metrics for published posts in a workspace. Returns each post with normalized cross-platform metrics (impressions, views, engagement, likes, comments, shares) plus lightweight post context (pageType, scheduledAt, textPreview). Reads existing stored metrics and supports pagination via limit/offset; newest posts first. pageIds that do not belong to the workspace are reported in unsupportedPages — surface them to the user instead of silently returning zero items.

get_post_metrics

ChatGPT
Get per-post performance metrics for published posts in a workspace. Returns each post with normalized cross-platform metrics (impressions, views, engagement, likes, comments, shares) plus lightweight post context (pageType, scheduledAt, textPreview). Reads existing stored metrics and supports pagination via limit/offset; newest posts first. pageIds that do not belong to the workspace are reported in unsupportedPages — surface them to the user instead of silently returning zero items.

get_post_metrics_summary

ChatGPT
Get aggregated post metrics totals for the requested pages. Returns summed normalized metrics (impressions, views, engagement, likes, comments, shares), the number of posts that contributed, and metricsFetchedAt (earliest/latest snapshot timestamps). Reads existing stored metrics. pageIds that do not belong to the workspace are reported in unsupportedPages — surface them to the user instead of silently returning zero totals.

get_post_metrics_summary

ChatGPT
Get aggregated post metrics totals for the requested pages. Returns summed normalized metrics (impressions, views, engagement, likes, comments, shares), the number of posts that contributed, and metricsFetchedAt (earliest/latest snapshot timestamps). Reads existing stored metrics. pageIds that do not belong to the workspace are reported in unsupportedPages — surface them to the user instead of silently returning zero totals.

get_post_metrics_summary

ChatGPT
Get aggregated post metrics totals for the requested pages. Returns summed normalized metrics (impressions, views, engagement, likes, comments, shares), the number of posts that contributed, and metricsFetchedAt (earliest/latest snapshot timestamps). Reads existing stored metrics. pageIds that do not belong to the workspace are reported in unsupportedPages — surface them to the user instead of silently returning zero totals.

get_posts_count

ChatGPT
Get total posts count across all workspaces in a company, with a per-workspace breakdown. Requires a companyId — call list_companies first to get it. Returns total count and an array of { workspaceId, count } entries. WHEN TO CALL: Use for quick overview or reporting without fetching all posts. Faster than paginating through list_posts when only counts are needed.

get_posts_count

ChatGPT
Get total posts count across all workspaces in a company, with a per-workspace breakdown. Requires a companyId — call list_companies first to get it. Returns total count and an array of { workspaceId, count } entries. WHEN TO CALL: Use for quick overview or reporting without fetching all posts. Faster than paginating through list_posts when only counts are needed.

get_posts_count

ChatGPT
Get total posts count across all workspaces in a company, with a per-workspace breakdown. Requires a companyId — call list_companies first to get it. Returns total count and an array of { workspaceId, count } entries. WHEN TO CALL: Use for quick overview or reporting without fetching all posts. Faster than paginating through list_posts when only counts are needed.

get_workspace_details

ChatGPT
Get detailed information about a specific Planable workspace. Returns id, name, companyId, companyName, hasAnalytics (whether the analytics add-on is active on the company), hasEngagement (whether the engagement add-on is active on the company), approvalWorkflow (the workspace approval configuration: "none", "optional", "required", or "multi-level"), and modifiedAt. WHEN TO CALL: Use this once you have a workspace id and want to check whether it has the analytics or engagement add-ons active, or whether it has an approval workflow configured before approving or rejecting posts. hasAnalytics / hasEngagement reflect add-on status only — they do NOT confirm that the current user has access. Analytics tools also require the "analyze" scope and the ANALYZE permission on the workspace; engagement tools require the "engage" scope and the SOCIAL-COMMENTS-MODERATOR permission. If hasAnalytics is false the analytics tools will reject; if it is true but the user lacks the scope or permission they will still reject. Treat these as a hint, not a guarantee — when in doubt, just call the analytics or engagement tool and surface the error to the user. approvalWorkflow: "none" means no approval is configured — approving or rejecting posts will fail. "optional", "required", or "multi-level" means approval is available.

get_workspace_details

ChatGPT
Get detailed information about a specific Planable workspace. Returns id, name, companyId, companyName, hasAnalytics (whether the analytics add-on is active on the company), hasEngagement (whether the engagement add-on is active on the company), approvalWorkflow (the workspace approval configuration: "none", "optional", "required", or "multi-level"), and modifiedAt. WHEN TO CALL: Use this once you have a workspace id and want to check whether it has the analytics or engagement add-ons active, or whether it has an approval workflow configured before approving or rejecting posts. hasAnalytics / hasEngagement reflect add-on status only — they do NOT confirm that the current user has access. Analytics tools also require the "analyze" scope and the ANALYZE permission on the workspace; engagement tools require the "engage" scope and the SOCIAL-COMMENTS-MODERATOR permission. If hasAnalytics is false the analytics tools will reject; if it is true but the user lacks the scope or permission they will still reject. Treat these as a hint, not a guarantee — when in doubt, just call the analytics or engagement tool and surface the error to the user. approvalWorkflow: "none" means no approval is configured — approving or rejecting posts will fail. "optional", "required", or "multi-level" means approval is available.

get_workspace_details

ChatGPT
Get detailed information about a specific Planable workspace. Returns id, name, companyId, companyName, hasAnalytics (whether the analytics add-on is active on the company), hasEngagement (whether the engagement add-on is active on the company), approvalWorkflow (the workspace approval configuration: "none", "optional", "required", or "multi-level"), and modifiedAt. WHEN TO CALL: Use this once you have a workspace id and want to check whether it has the analytics or engagement add-ons active, or whether it has an approval workflow configured before approving or rejecting posts. hasAnalytics / hasEngagement reflect add-on status only — they do NOT confirm that the current user has access. Analytics tools also require the "analyze" scope and the ANALYZE permission on the workspace; engagement tools require the "engage" scope and the SOCIAL-COMMENTS-MODERATOR permission. If hasAnalytics is false the analytics tools will reject; if it is true but the user lacks the scope or permission they will still reject. Treat these as a hint, not a guarantee — when in doubt, just call the analytics or engagement tool and surface the error to the user. approvalWorkflow: "none" means no approval is configured — approving or rejecting posts will fail. "optional", "required", or "multi-level" means approval is available.

list_comments

ChatGPT
List comments and internal notes on a Planable post, newest first. Returns id, postId, text, authorId, teamOnly flag, and createdAt for each comment. Use the teamOnly filter to show only internal notes (true) or only public comments (false). Omit to see all. Supports pagination via limit and offset. WHEN TO CALL: Use after list_posts or get_post to review the conversation and feedback on a post.

list_comments

ChatGPT
List comments and internal notes on a Planable post, newest first. Returns id, postId, text, authorId, teamOnly flag, and createdAt for each comment. Use the teamOnly filter to show only internal notes (true) or only public comments (false). Omit to see all. Supports pagination via limit and offset. WHEN TO CALL: Use after list_posts or get_post to review the conversation and feedback on a post.

list_comments

ChatGPT
List comments and internal notes on a Planable post, newest first. Returns id, postId, text, authorId, teamOnly flag, and createdAt for each comment. Use the teamOnly filter to show only internal notes (true) or only public comments (false). Omit to see all. Supports pagination via limit and offset. WHEN TO CALL: Use after list_posts or get_post to review the conversation and feedback on a post.

list_companies

ChatGPT
List all Planable companies the authenticated user is a member of. A company is the top-level container in Planable's hierarchy (company → workspace → page → post). Returns id, name, type ('brand' for single-brand accounts, 'agency' for multi-client accounts managing multiple brands), workspacesNumber, usersNumber, isOnFreePlan, and createdAt. Sorted alphabetically by name. Demo companies excluded. WHEN TO CALL: Call this when the user references a specific client or brand by name, or when the query spans multiple companies (e.g. "all clients", "every brand"). If context already implies a single company, skip to list_workspaces. MULTI-COMPANY QUERIES: If the user asks for data across all clients or all brands, iterate over every company returned here, call list_workspaces for each, then aggregate results. TERMINOLOGY GUARD: SMM users sometimes say 'client', 'brand', 'room', 'project', or 'space' loosely to mean a workspace inside one company — NOT a separate company. Only call list_companies when the user is clearly asking about top-level billing entities, multiple companies, or cross-company aggregates. When in doubt and the user's wording is workspace-shaped (rooms / client spaces / brand spaces / projects), prefer list_workspaces.

list_companies

ChatGPT
List all Planable companies the authenticated user is a member of. A company is the top-level container in Planable's hierarchy (company → workspace → page → post). Returns id, name, type ('brand' for single-brand accounts, 'agency' for multi-client accounts managing multiple brands), workspacesNumber, usersNumber, isOnFreePlan, and createdAt. Sorted alphabetically by name. Demo companies excluded. WHEN TO CALL: Call this when the user references a specific client or brand by name, or when the query spans multiple companies (e.g. "all clients", "every brand"). If context already implies a single company, skip to list_workspaces. MULTI-COMPANY QUERIES: If the user asks for data across all clients or all brands, iterate over every company returned here, call list_workspaces for each, then aggregate results. TERMINOLOGY GUARD: SMM users sometimes say 'client', 'brand', 'room', 'project', or 'space' loosely to mean a workspace inside one company — NOT a separate company. Only call list_companies when the user is clearly asking about top-level billing entities, multiple companies, or cross-company aggregates. When in doubt and the user's wording is workspace-shaped (rooms / client spaces / brand spaces / projects), prefer list_workspaces.

list_companies

ChatGPT
List all Planable companies the authenticated user is a member of. A company is the top-level container in Planable's hierarchy (company → workspace → page → post). Returns id, name, type ('brand' for single-brand accounts, 'agency' for multi-client accounts managing multiple brands), workspacesNumber, usersNumber, isOnFreePlan, and createdAt. Sorted alphabetically by name. Demo companies excluded. WHEN TO CALL: Call this when the user references a specific client or brand by name, or when the query spans multiple companies (e.g. "all clients", "every brand"). If context already implies a single company, skip to list_workspaces. MULTI-COMPANY QUERIES: If the user asks for data across all clients or all brands, iterate over every company returned here, call list_workspaces for each, then aggregate results. TERMINOLOGY GUARD: SMM users sometimes say 'client', 'brand', 'room', 'project', or 'space' loosely to mean a workspace inside one company — NOT a separate company. Only call list_companies when the user is clearly asking about top-level billing entities, multiple companies, or cross-company aggregates. When in doubt and the user's wording is workspace-shaped (rooms / client spaces / brand spaces / projects), prefer list_workspaces.

list_labels

ChatGPT
List all labels available in a Planable workspace. Labels are colored tags used to categorize posts. Returns uuid, color, and text for each label. Call this before create_post or create_grouped_post if you want to tag the new post with labels — pass the label UUIDs in the labels parameter.

list_labels

ChatGPT
List all labels available in a Planable workspace. Labels are colored tags used to categorize posts. Returns uuid, color, and text for each label. Call this before create_post or create_grouped_post if you want to tag the new post with labels — pass the label UUIDs in the labels parameter.

list_labels

ChatGPT
List all labels available in a Planable workspace. Labels are colored tags used to categorize posts. Returns uuid, color, and text for each label. Call this before create_post or create_grouped_post if you want to tag the new post with labels — pass the label UUIDs in the labels parameter.

list_media

ChatGPT
List media uploads in a Planable workspace media library. Returns id, type (image/video/gif), name, url, thumbnailUrl, dimensions, size, mimeType, status (uploading/processing/error/success), and createdAt. Newest items first. Supports pagination via limit and offset. WHEN TO CALL: Use to browse available media assets before creating posts, or to find media for attachment.

list_media

ChatGPT
List media uploads in a Planable workspace media library. Returns id, type (image/video/gif), name, url, thumbnailUrl, dimensions, size, mimeType, status (uploading/processing/error/success), and createdAt. Newest items first. Supports pagination via limit and offset. WHEN TO CALL: Use to browse available media assets before creating posts, or to find media for attachment.

list_media

ChatGPT
List media uploads in a Planable workspace media library. Returns id, type (image/video/gif), name, url, thumbnailUrl, dimensions, size, mimeType, status (uploading/processing/error/success), and createdAt. Newest items first. Supports pagination via limit and offset. WHEN TO CALL: Use to browse available media assets before creating posts, or to find media for attachment.

list_pages

ChatGPT
List pages/profiles in a Planable workspace. A page is a connected social media profile (facebook, twitter, instagram, linkedin, googleMyBusiness, youtube, tiktok, pinterest, threads, universal), a mockup page (for drafting content without a live platform connection), or a universal content page. Returns id, name, platform type, connection status, display metadata, and isMockup (true for mockup/custom pages that are not connected to a live platform). isConnected indicates whether the page is linked to a social platform; isValidTokens indicates whether the page connection is still active (if false, the page cannot publish until reconnected). Call this after list_workspaces when you need page ids for post-related actions. Supports pagination via limit and offset. PLATFORM FILTERING: The search param matches page name and username only — it does NOT filter by platform type. To find all Instagram pages, fetch all pages and filter by the type field in the response. BRIDGE TO POSTS: After getting page IDs here, pass them as pageIds to list_posts to scope posts to those pages. If pageIds is omitted from list_posts, all pages in the workspace are returned.

list_pages

ChatGPT
List pages/profiles in a Planable workspace. A page is a connected social media profile (facebook, twitter, instagram, linkedin, googleMyBusiness, youtube, tiktok, pinterest, threads, universal), a mockup page (for drafting content without a live platform connection), or a universal content page. Returns id, name, platform type, connection status, display metadata, and isMockup (true for mockup/custom pages that are not connected to a live platform). isConnected indicates whether the page is linked to a social platform; isValidTokens indicates whether the page connection is still active (if false, the page cannot publish until reconnected). Call this after list_workspaces when you need page ids for post-related actions. Supports pagination via limit and offset. PLATFORM FILTERING: The search param matches page name and username only — it does NOT filter by platform type. To find all Instagram pages, fetch all pages and filter by the type field in the response. BRIDGE TO POSTS: After getting page IDs here, pass them as pageIds to list_posts to scope posts to those pages. If pageIds is omitted from list_posts, all pages in the workspace are returned.

list_pages

ChatGPT
List pages/profiles in a Planable workspace. A page is a connected social media profile (facebook, twitter, instagram, linkedin, googleMyBusiness, youtube, tiktok, pinterest, threads, universal), a mockup page (for drafting content without a live platform connection), or a universal content page. Returns id, name, platform type, connection status, display metadata, and isMockup (true for mockup/custom pages that are not connected to a live platform). isConnected indicates whether the page is linked to a social platform; isValidTokens indicates whether the page connection is still active (if false, the page cannot publish until reconnected). Call this after list_workspaces when you need page ids for post-related actions. Supports pagination via limit and offset. PLATFORM FILTERING: The search param matches page name and username only — it does NOT filter by platform type. To find all Instagram pages, fetch all pages and filter by the type field in the response. BRIDGE TO POSTS: After getting page IDs here, pass them as pageIds to list_posts to scope posts to those pages. If pageIds is omitted from list_posts, all pages in the workspace are returned.

list_posts

ChatGPT
List Planable posts in a workspace. Supports filtering by page/profile, post status, approval status, and scheduled date range. Returns post metadata including a computed status field (draft, scheduled, approved, issues, published) which differs from the postStatus filter values. Each post includes textPreview (up to 500 characters of content) and url (direct link to the post in Planable). Supports pagination via limit and offset. Call list_pages first if you need to filter by specific pages. SCOPE: This tool queries one workspace at a time. For cross-workspace queries, call this once per workspace and merge results (see server instructions). When pageIds is provided, any id that does not belong to the workspace is reported in unsupportedPages — surface it back to the user instead of silently returning an empty list.

list_posts

ChatGPT
List Planable posts in a workspace. Supports filtering by page/profile, post status, approval status, and scheduled date range. Returns post metadata including a computed status field (draft, scheduled, approved, issues, published) which differs from the postStatus filter values. Each post includes textPreview (up to 500 characters of content) and url (direct link to the post in Planable). Supports pagination via limit and offset. Call list_pages first if you need to filter by specific pages. SCOPE: This tool queries one workspace at a time. For cross-workspace queries, call this once per workspace and merge results (see server instructions). When pageIds is provided, any id that does not belong to the workspace is reported in unsupportedPages — surface it back to the user instead of silently returning an empty list.

list_posts

ChatGPT
List Planable posts in a workspace. Supports filtering by page/profile, post status, approval status, and scheduled date range. Returns post metadata including a computed status field (draft, scheduled, approved, issues, published) which differs from the postStatus filter values. Each post includes textPreview (up to 500 characters of content) and url (direct link to the post in Planable). Supports pagination via limit and offset. Call list_pages first if you need to filter by specific pages. SCOPE: This tool queries one workspace at a time. For cross-workspace queries, call this once per workspace and merge results (see server instructions). When pageIds is provided, any id that does not belong to the workspace is reported in unsupportedPages — surface it back to the user instead of silently returning an empty list.

list_workspace_members

ChatGPT
List all members of a Planable workspace. Returns each member with id, name, email, permissions, and membership type (team or client). WHEN TO CALL: Use to see who belongs to a workspace, find approvers (users with APPROVE permission), identify workspace owners or admins, or resolve user names from authorId/userId fields in posts and comments.

list_workspace_members

ChatGPT
List all members of a Planable workspace. Returns each member with id, name, email, permissions, and membership type (team or client). WHEN TO CALL: Use to see who belongs to a workspace, find approvers (users with APPROVE permission), identify workspace owners or admins, or resolve user names from authorId/userId fields in posts and comments.

list_workspace_members

ChatGPT
List all members of a Planable workspace. Returns each member with id, name, email, permissions, and membership type (team or client). WHEN TO CALL: Use to see who belongs to a workspace, find approvers (users with APPROVE permission), identify workspace owners or admins, or resolve user names from authorId/userId fields in posts and comments.

list_workspaces

ChatGPT
List all Planable workspaces the authenticated user is a member of, across all companies. A workspace is a shared space where teams collaborate on social media content for connected pages. Returns id, name, companyId, companyName, and modifiedAt (timestamp of last post or comment activity) for each workspace. Supports pagination via limit and offset. PRESENTING RESULTS: When showing workspaces to the user, group them by company name. NAMED WORKSPACE: If the user names a workspace, pass it as the search param to avoid fetching all workspaces. Verify the match before proceeding. SORT BEHAVIOUR: "last-activity" (default) = most recently active first, based on last post or comment — do NOT use this as a proxy for "most recently created". Use sortType="created" when the user asks for the newest workspace. Use sortType="name" for alphabetical listing. FOR DETAILED INFO: Use get_workspace_details with the workspace id to check add-on status (analytics, engagement) before calling analytics or engagement tools. SYNONYMS: users refer to workspaces under many names depending on their tool background — 'rooms' (Planable's own metaphor — workspaces are rooms inside the company house), 'client spaces', 'brand spaces', 'projects', 'boards', 'hubs', 'plans', or 'content calendars'. When the user uses any of these and the context is a single company, prefer list_workspaces over list_companies.

list_workspaces

ChatGPT
List all Planable workspaces the authenticated user is a member of, across all companies. A workspace is a shared space where teams collaborate on social media content for connected pages. Returns id, name, companyId, companyName, and modifiedAt (timestamp of last post or comment activity) for each workspace. Supports pagination via limit and offset. PRESENTING RESULTS: When showing workspaces to the user, group them by company name. NAMED WORKSPACE: If the user names a workspace, pass it as the search param to avoid fetching all workspaces. Verify the match before proceeding. SORT BEHAVIOUR: "last-activity" (default) = most recently active first, based on last post or comment — do NOT use this as a proxy for "most recently created". Use sortType="created" when the user asks for the newest workspace. Use sortType="name" for alphabetical listing. FOR DETAILED INFO: Use get_workspace_details with the workspace id to check add-on status (analytics, engagement) before calling analytics or engagement tools. SYNONYMS: users refer to workspaces under many names depending on their tool background — 'rooms' (Planable's own metaphor — workspaces are rooms inside the company house), 'client spaces', 'brand spaces', 'projects', 'boards', 'hubs', 'plans', or 'content calendars'. When the user uses any of these and the context is a single company, prefer list_workspaces over list_companies.

list_workspaces

ChatGPT
List all Planable workspaces the authenticated user is a member of, across all companies. A workspace is a shared space where teams collaborate on social media content for connected pages. Returns id, name, companyId, companyName, and modifiedAt (timestamp of last post or comment activity) for each workspace. Supports pagination via limit and offset. PRESENTING RESULTS: When showing workspaces to the user, group them by company name. NAMED WORKSPACE: If the user names a workspace, pass it as the search param to avoid fetching all workspaces. Verify the match before proceeding. SORT BEHAVIOUR: "last-activity" (default) = most recently active first, based on last post or comment — do NOT use this as a proxy for "most recently created". Use sortType="created" when the user asks for the newest workspace. Use sortType="name" for alphabetical listing. FOR DETAILED INFO: Use get_workspace_details with the workspace id to check add-on status (analytics, engagement) before calling analytics or engagement tools. SYNONYMS: users refer to workspaces under many names depending on their tool background — 'rooms' (Planable's own metaphor — workspaces are rooms inside the company house), 'client spaces', 'brand spaces', 'projects', 'boards', 'hubs', 'plans', or 'content calendars'. When the user uses any of these and the context is a single company, prefer list_workspaces over list_companies.

refresh_page_metrics

ChatGPT
Refresh stored page/profile analytics metrics for the requested pageIds and date range. This tool runs Planable analytics synchronization for eligible connected pages and may write refreshed PageMetrics snapshots that affect later metrics reads. Unsupported, disconnected, or out-of-workspace pages are reported in unsupportedPages. It does not create, edit, publish, or delete posts.

refresh_page_metrics

ChatGPT
Refresh stored page/profile analytics metrics for the requested pageIds and date range. This tool runs Planable analytics synchronization for eligible connected pages and may write refreshed PageMetrics snapshots that affect later metrics reads. Unsupported, disconnected, or out-of-workspace pages are reported in unsupportedPages. It does not create, edit, publish, or delete posts.

refresh_page_metrics

ChatGPT
Refresh stored page/profile analytics metrics for the requested pageIds and date range. This tool runs Planable analytics synchronization for eligible connected pages and may write refreshed PageMetrics snapshots that affect later metrics reads. Unsupported, disconnected, or out-of-workspace pages are reported in unsupportedPages. It does not create, edit, publish, or delete posts.

refresh_post_metrics

ChatGPT
Refresh stored post-level analytics metrics for the requested pageIds and date range. This tool runs Planable analytics synchronization for published posts and may write refreshed PostMetrics snapshots that affect later metrics reads. It does not create, edit, publish, or delete posts.

refresh_post_metrics

ChatGPT
Refresh stored post-level analytics metrics for the requested pageIds and date range. This tool runs Planable analytics synchronization for published posts and may write refreshed PostMetrics snapshots that affect later metrics reads. It does not create, edit, publish, or delete posts.

refresh_post_metrics

ChatGPT
Refresh stored post-level analytics metrics for the requested pageIds and date range. This tool runs Planable analytics synchronization for published posts and may write refreshed PostMetrics snapshots that affect later metrics reads. It does not create, edit, publish, or delete posts.

update_post

ChatGPT
Update an unpublished post in Planable. Published posts cannot be modified. Supports updating: text, scheduledAt (pass null to clear), labels (pass label UUIDs, empty array to clear), mediaUrls (replaces all media, empty array to clear), teamOnly, and linkedinTitle (LinkedIn posts only). Returns the updated post detail. WHEN TO CALL: Use after get_post or list_posts to modify existing unpublished content — avoids recreating a post from scratch. Call list_labels first if you need label UUIDs. Cannot modify published posts.

update_post

ChatGPT
Update an unpublished post in Planable. Published posts cannot be modified. Supports updating: text, scheduledAt (pass null to clear), labels (pass label UUIDs, empty array to clear), mediaUrls (replaces all media, empty array to clear), teamOnly, and linkedinTitle (LinkedIn posts only). Returns the updated post detail. WHEN TO CALL: Use after get_post or list_posts to modify existing unpublished content — avoids recreating a post from scratch. Call list_labels first if you need label UUIDs. Cannot modify published posts.

update_post

ChatGPT
Update an unpublished post in Planable. Published posts cannot be modified. Supports updating: text, scheduledAt (pass null to clear), labels (pass label UUIDs, empty array to clear), mediaUrls (replaces all media, empty array to clear), teamOnly, and linkedinTitle (LinkedIn posts only). Returns the updated post detail. WHEN TO CALL: Use after get_post or list_posts to modify existing unpublished content — avoids recreating a post from scratch. Call list_labels first if you need label UUIDs. Cannot modify published posts.

upload_media

ChatGPT
Upload media from public URLs to a workspace media library. Accepts 1 to 20 URLs. Media is downloaded and processed asynchronously — each item starts in "processing" status. Use get_media to check when processing completes. Returns the uploaded item ids. WHEN TO CALL: Use to pre-upload media to the library before attaching to posts, or when the user wants to add assets to their media library without creating a post.

upload_media

ChatGPT
Upload media from public URLs to a workspace media library. Accepts 1 to 20 URLs. Media is downloaded and processed asynchronously — each item starts in "processing" status. Use get_media to check when processing completes. Returns the uploaded item ids. WHEN TO CALL: Use to pre-upload media to the library before attaching to posts, or when the user wants to add assets to their media library without creating a post.

upload_media

ChatGPT
Upload media from public URLs to a workspace media library. Accepts 1 to 20 URLs. Media is downloaded and processed asynchronously — each item starts in "processing" status. Use get_media to check when processing completes. Returns the uploaded item ids. WHEN TO CALL: Use to pre-upload media to the library before attaching to posts, or when the user wants to add assets to their media library without creating a post.

Capabilities

Writes

App Stats

78

Tools

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily