Skip to content
Reading with an AI assistant?View as MarkdownOpen in ClaudeOpen in ChatGPT

Developers

MCP tools

All 79 tools the SkedCast MCP server exposes: 44 that only read and 35 that change something, each with its scope and a description.

Read tools (44)

ToolDescriptionScope
list_scheduled_postsList the workspace's posts (queue, drafts, published) newest-first, with optional status / client / platform filters and free-text search (`q`) over captions, per-platform overrides, client names and account handles.posts.read
list_post_targetsList individual post DESTINATIONS (one row per platform account), filtered by status, client, account, platform, free text and a SCHEDULE-time window: the tool for "what publishes on this date". The page carries `total` and `totalPosts`, so you can tell a full page from a complete set. A published destination also carries `coverIssue`, `firstCommentIssue`, `captionIssue` and `playlistIssue` (a sentence or null each), and `firstCommentUrl` for a posted YouTube first comment.posts.read
get_postGet one post with its per-platform variants and its destinations. A published target carries `coverIssue`, `firstCommentIssue`, `captionIssue`, `playlistIssue` and `firstCommentUrl`, so a YouTube post whose subtitles, playlist add or first comment did not go through says so.posts.read
list_clientsList the workspace's client groups (brands / influencers).clients.read
list_accountsList connected social accounts, optionally filtered by client or platform.accounts.read
get_analytics_overviewReach / impressions / engagement plus a per-platform rollup over a date window.analytics.read
get_post_analyticsPer-post performance (complements get_analytics_overview): one post’s lifetime per-target breakdown by postId, or a cursor-paged list of per-post rows with filters.analytics.read
get_account_analyticsOne channel’s totals and daily series, plus profile-level activity (profile views, link taps, video plays) and follower demographics.analytics.read
get_top_postsThe window’s top posts by one figure (views, engagements, likes, comments, shares, saves, reach or engagement rate) — the ranking the console’s Insights, Home and client report show.analytics.read
list_account_analyticsEvery connected channel’s analytics in one paged call: what get_account_analytics returns, for each channel, with its name, handle and client.analytics.read
get_search_keywordsThe search terms people used to find a Google Business Profile location, month by month.analytics.read
get_pinterest_top_pinsA Pinterest account’s best Pins over the last 7, 30 or 90 days, ranked by Pinterest itself — including Pins made outside SkedCast — with impressions, saves, Pin clicks, outbound clicks and engagements.analytics.read
list_library_assetsList content-library assets with optional kind / folder / label / client / status / search filters. Filter `status: "transcoded"` for assets that are actually publishable; every row also carries `status`, `publishable` and `ready`.media.read
get_capabilitiesThe per-platform composing rulebook: caption and hashtag limits, media rules per kind, post types, native-scheduling window, default per-account pacing, first-comment support, and the `variants[].overrides` keys each platform requires or accepts. Read it before composing instead of discovering a limit by failing a publish.posts.read
get_agencyThe current workspace profile — name, plan, settings, and the caller’s role.agency.read
list_reportsList the workspace's saved analytics report definitions.reports.read
get_best_timesBest posting times, strongest first, optionally by client / platform.besttimes.read
list_approvalsList the workspace's approval queue (pending and decided requests), newest-first, with optional status / post filters.approvals.read
get_posting_limitsPer-account pacing limits: one account by socialAccountId, or every active channel when omitted.accounts.read
get_quotaYour workspace’s remaining posting capacity today on platforms that limit daily posting, and when it resets — read before planning a batch.accounts.read
list_campaignsList the workspace's campaigns (named post groupings), optionally filtered by client / status.campaigns.read
validate_postDry-run a compose request without writing anything. It takes the same arguments as create_post and returns `{ valid, platforms[] }` with the issues that would block each platform. `warnings` names an unknown, misplaced or deprecated YouTube override key, and a YouTube option create_post would refuse is refused here too, with the field path. It does not check per-account pacing, so `valid: true` means the shape is acceptable, not that a publish cannot later be deferred.posts.compose
list_webhooksList the workspace's outbound webhook endpoints (url, subscribed events, active flag; secret masked).webhooks.read
list_pinterest_boardsList the boards a connected Pinterest account can pin to (its own and the group boards it collaborates on), each as { id, name }, for a Pin’s boardId (send the numeric id; a board name is accepted only for a post to exactly one Pinterest account).accounts.read
list_pinterest_board_sectionsList the sections of one board on a connected Pinterest account, each as { id, name }, for a Pin’s optional boardSectionId.accounts.read
get_webhookRead one webhook endpoint — URL, subscribed events, active state, consecutive failures, and when/why it was auto-disabled. The signing secret is never returned here.webhooks.read
list_webhook_deliveriesThe delivery log for one endpoint — each attempt with its event type, response status, error and timing. How you find out WHY an endpoint stopped receiving.webhooks.read
get_campaignRead one campaign in full — name, description, status, colour, date range, owning client and post counts.campaigns.read
get_clientRead one client group in full — name, type, approval policy, posting rules, brand voice and default timezone.clients.read
get_post_targetRead a single destination in full — status, scheduled time, platform, account, published permalink and platform post id, its failure reason when it failed, and for a published one the outcome of the steps after the publish (`coverIssue`, `firstCommentIssue`, `captionIssue`, `playlistIssue`; each a sentence or null) and `firstCommentUrl`.posts.read
get_post_recycleRead one post’s evergreen re-posting configuration and its progress. Returns null when the post is not enrolled.posts.read
get_accountRead one connected social account in full — platform, handle, display name, avatar, status (including whether it needs re-authorization) and owning client.accounts.read
get_approvalRead one approval request with the gated post’s preview and roll-up, so a reviewer can see what they are deciding on before calling decide_approval.approvals.read
get_media_assetRead one content-library asset in full — filename, kind, size, dimensions, duration, folder, labels, alt text, processing status, and the publishable/ready flags plus the per-platform readiness map.media.read
get_client_analyticsOne client group’s analytics — totals, a per-platform breakdown and a time series. A different projection from get_analytics_overview filtered by client.analytics.read
get_reportRead one report definition with its run history — each run’s status, window, and whether an export is available.reports.read
download_report_exportGet a time-limited download URL for one completed report run’s export file. The URL expires — fetch it when you are ready to use it.reports.read
list_inbox_conversationsList comments, direct messages, mentions and reviews waiting in the inbox, newest activity first, with filters (status, kind, platform, client, account, assignee, unread, archived, includeArchived, search). Archived conversations are left out unless asked for (archived: only those; includeArchived: together with the rest).inbox.read
get_inbox_conversationRead one conversation with its messages, notes, contact and post context.inbox.read
get_inbox_reportReply times against target, conversations handled, sentiment, Google reviews, topics and the team for a date range, each against the previous period.inbox.read
get_reviews_summaryAverage rating, the 1–5 star distribution, the share replied, the median reply time and each location’s rating.inbox.read
get_inbox_countsThe numbers behind the inbox views: open, unread, assigned to you, unassigned, pending, held, negative, questions, requests, snoozed, archived and by kind, for the workspace, a client or one account.inbox.read
list_inbox_labelsEvery label of the workspace, with its id, name and colour: the ids `update_inbox_conversation` takes in `labelIds`.inbox.read
list_inbox_saved_repliesThe saved replies a teammate can send: the workspace’s own, and a client’s with `clientId`.inbox.read

Write tools (35)

ToolDescriptionScope
decide_approvalApprove, reject, or request changes on a pending approval request (approve releases the gated post for publishing). A write action — confirm with the user before calling.approvals.decide
revise_postChange the content of an already-scheduled post (caption, media, cover, alt text, per-platform overrides) without touching its destinations. Send only what you are changing. It refuses, naming them, any destination that has already published or is about to. A live YouTube video, or the text of a post already on LinkedIn, Facebook, Pinterest, Telegram or Google Business Profile, is changed with edit_published_post. Editing an approved post returns it to review. The result carries `warnings` for the revised overrides. A write action: confirm with the user before calling.posts.compose
edit_published_postChange a post that is already published, without republishing it. YouTube: a live or scheduled video's title, description, tags, category, privacy, kids and embedding settings, languages and translations, thumbnail and subtitle tracks (the privacy of a natively scheduled video cannot change). Text: the post's `text` only, on LinkedIn (an account connected through LinkedIn's Community Management app), Facebook Pages (a live post, or one Facebook's own scheduler holds), Pinterest (a Pin's description; Pinterest offers Pin update to apps as a beta), Telegram (a message's text or caption) and Google Business Profile (a post's summary). Send only what you are changing. A YouTube edit can answer 429 youtube_units_exhausted with a Retry-After header: retry after that wait. A write action: confirm with the user before calling.posts.compose
create_postCompose a post and publish it to the selected accounts, or save it as a draft. Identical arguments replay the original result instead of creating a duplicate, and two publish-now calls with the same content and targets count as one post: vary the content or the times to post twice. Platform settings (YouTube privacy, subtitles and chapters, TikTok privacy level, Pinterest board) go in `variants[].overrides`. The same object carries `firstComment`, a reply posted once the destination is live, on X, LinkedIn, YouTube, Instagram, Facebook, Threads, Telegram and Bluesky (not TikTok, Pinterest or Google Business Profile). If it fails the post still publishes, and the target reports `firstCommentIssue`; `firstCommentUrl` links a posted YouTube comment. YouTube overrides are checked: an unknown, misplaced or deprecated key is accepted and named in `warnings` (`{ code, path, message }`), and a wrong `captions`, `chapters` or `localizations` value is refused with the field path. A write action: confirm with the user before calling.posts.compose
create_posts_bulkCreate up to 50 posts in one call. Each item takes exactly the arguments of create_post, including every override and its own `warnings`. Items are created one after another and independently: one failing never rolls back the others, and the result lists every item in order with its post id or its error. Identical arguments create nothing twice. Pass validateOnly:true to check every item without writing. Each item counts as one request toward your rate limit. This creates real outbound content: confirm with the user before calling. Requires the posts.compose scope.posts.compose
update_postReplace a draft post in place — its content, media, targets, and schedule. Only draft posts can be updated, and this never publishes (use publish_draft for that). Platform-specific settings live in `variants[].overrides`, same as create_post, including `firstComment`. A write action — confirm with the user before calling.posts.compose
publish_draftPublish or schedule an existing DRAFT post in place: same arguments as update_post plus the draft id; `schedule` decides now or later. It runs the same checks as create_post, and a client that requires approval gets the post submitted for review instead. The post keeps its id. This puts real content on connected accounts: confirm with the user before calling.posts.compose
import_mediaIngest an external image / video into the content library by URL — the file must already be reachable at a public URL. For bytes you already hold (an image you just rendered, or a local file) use `upload_media` instead. A write action — confirm with the user before calling.media.manage
upload_mediaUpload a LOCAL image / video into the content library and get back a media id for create_post. Sends the file inline (≤18 MiB) or returns a presigned URL for larger files. Refused with 403 rbac_scope_denied when the upload’s client is outside the caller’s clients. A write action — confirm with the user before calling.media.manage
reschedule_postMove a pending post target to a new time (absolute scheduledAt or relative shiftMinutes). A write action — confirm with the user before calling.posts.compose
bulk_post_target_actiondestructiveReschedule, retry, cancel or delete up to 5000 post targets in one call: the batch form of reschedule_post / retry_post / cancel_post. `cancel` keeps the row, listed as Canceled. `delete` removes only a target that was never attempted, and skips and reports the rest. Returns `{ jobId, accepted, skipped, skippedReasons? }`. A write action: confirm with the user before calling.posts.compose
cancel_postdestructiveCancel a still-pending post target before it publishes. A write action — confirm with the user before calling.posts.compose
retry_postRe-queue a failed post target, or one on hold whose wait can be cut short, so it publishes again. A write action — confirm with the user before calling.posts.compose
set_post_recycleSet, update, or disable a post's evergreen recycle settings (interval / times / end date / max recycles). A write action — confirm with the user before calling.posts.compose
shift_campaignMove a whole campaign's pending schedule by a relative number of minutes. A write action — confirm with the user before calling.campaigns.manage
create_webhookRegister an outbound webhook endpoint for HMAC-signed event deliveries. Subscribe to any subset of the full 44-event catalog (the list and payload fields are on /developers/webhooks). Returns the signing secret once. A write action — confirm with the user before calling.webhooks.manage
delete_webhookdestructiveDelete an outbound webhook endpoint by id; its delivery log is deleted with it. A write action — confirm with the user before calling.webhooks.delete
create_clientCreate a new client group (a brand or influencer whose accounts are managed together). A write action — confirm with the user before calling.clients.manage
create_pinterest_boardCreate a board (PUBLIC or SECRET) on a connected Pinterest account and return its { id, name }. A write action — confirm with the user before calling.posts.compose
create_pinterest_board_sectionCreate a section on one board of a connected Pinterest account and return its { id, name }. A write action — confirm with the user before calling.posts.compose
create_connect_inviteCreate a shareable self-connect link so a client can connect the requested platforms themselves; returns the link and its expiry. A write action — confirm with the user before calling.accounts.connect
update_webhookChange an endpoint’s URL, event list, or active state — including re-enabling one auto-disabled after repeated failures. The event list REPLACES the previous one. A write action — confirm with the user before calling.webhooks.manage
test_webhookSend a `webhook.test` delivery and report the outcome, proving an endpoint is reachable and verifying signatures without waiting for a real event. Performs a real outbound request — confirm with the user before calling.webhooks.manage
rotate_webhook_secretCreate a new signing secret and return it ONCE; it is not readable again. The previous secret keeps verifying for 24 hours so you can redeploy without dropping deliveries. A write action — confirm with the user before calling.webhooks.manage
create_campaignCreate a campaign — a named group of posts with an optional client, colour and date range. Posts are added with assign_to_campaign. A write action — confirm with the user before calling.campaigns.manage
update_campaignChange a campaign’s name, description, status, colour or date range. A write action — confirm with the user before calling.campaigns.manage
delete_campaigndestructiveDelete a campaign. The posts in it are NOT deleted — they lose the grouping and keep their own schedules. A write action — confirm with the user before calling.campaigns.manage
assign_to_campaignAdd up to 500 existing posts to a campaign. Grouping only — no post’s content or schedule changes. A write action — confirm with the user before calling.campaigns.manage
unassign_from_campaignRemove posts from a campaign. Grouping only — the posts and their schedules are untouched. A write action — confirm with the user before calling.campaigns.manage
update_clientChange a client’s name, type, approval policy, posting rules, brand voice or default timezone. A write action — confirm with the user before calling.clients.manage
delete_clientdestructiveArchive a client group. OWNER ONLY — a Manager holding the clients.manage scope cannot do this. A write action — confirm with the user before calling.clients.manage
clear_post_recycleTurn OFF evergreen re-posting for a post. Idempotent. Already-scheduled recycled copies are not retracted — cancel those separately. A write action — confirm with the user before calling.posts.compose
update_inbox_conversationChange a conversation’s status, assignee, labels, snooze or read state. An assignee must be a teammate who can reply and has the conversation’s client in scope (400 engagement_assignee_cannot_reply).inbox.reply
reply_to_inbox_conversationSend a reply on the platform (public or private, as the platform allows), or hold it for approval.inbox.reply
moderate_inbox_messagedestructiveHide, unhide, like, delete or block on the platform, where the platform allows it.inbox.moderate

Frequently asked questions

Does this page list every tool?
Yes. It lists all 79 tools that the remote MCP server exposes.
What does "write" mean for a tool?
A write tool changes something: it creates, updates, reschedules or cancels. An MCP client should ask you to confirm before it calls a write tool. A read tool runs within the scopes you granted.
What does "destructive" mean?
Delete and cancel tools, and the bulk action that can cancel or delete many targets in one call, are marked destructive. They have a lower rate limit than other write tools.
Can an agent call a tool outside my role’s permissions?
No. Every tool call is checked against the permissions of the member who connected the client. A tool on this list still cannot do more than that person can do in the console.
How do I connect a client?
Point an MCP client at https://api.skedcast.com/mcp and sign in with OAuth 2.1. The MCP config generator shows the exact steps for each client.

Ready to broadcast everywhere?

Sign up free — no credit card. You land on the Free plan, and you can start a one-time 7-day Studio trial from your workspace whenever you are ready. Connect your first accounts, import a batch, and watch one post fan out across every platform.