Skip to content

Guides

Connect an AI agent (MCP)

SkedCast runs a remote MCP (Model Context Protocol) server, so an AI agent can read across your workspace (posts, clients, accounts, analytics, reports, best-times, library, and webhooks) and act on it — compose and edit posts, reschedule / cancel / retry deliveries, import media, and manage webhooks — with your permission, over a single OAuth-protected endpoint.

Browse docs

6 min read

Connection#

PropertyValue
EndpointPOST https://api.skedcast.com/mcp
TransportStreamable HTTP
AuthOAuth 2.1 bearer token (audience-checked)
Discovery/.well-known/oauth-protected-resource

Add the server to your AI client#

Point your MCP-capable client (Claude Desktop, IDEs, agents) at the endpoint below. The client runs the OAuth flow for you — it discovers the authorization server from the protected-resource metadata, registers itself (DCR), and opens a browser for you to sign in and consent. No manual app setup.

json
{
  "mcpServers": {
    "skedcast": {
      "url": "https://api.skedcast.com/mcp"
    }
  }
}
Example MCP client config.

Available tools#

ToolScopeTypeDescription
list_scheduled_postsposts.readreadList the workspace's posts (queue, drafts, published) newest-first, with optional status / client / platform filters.
get_postposts.readreadGet one post with its per-platform variants and fan-out targets.
list_clientsclients.readreadList the workspace's client groups (brands / influencers).
list_accountsaccounts.readreadList connected social accounts, optionally filtered by client or platform.
get_analytics_overviewanalytics.readreadReach / impressions / engagement plus a per-platform rollup over a date window.
get_post_analyticsanalytics.readreadPer-post performance (complements get_analytics_overview): one post’s lifetime per-target breakdown by postId, or a keyset page of per-post rows with filters.
list_library_assetsmedia.readreadList content-library (DAM) assets with optional kind / folder / client / search filters.
get_agencyagency.readreadThe current workspace profile — name, plan, app mode, settings, and the caller’s role.
list_reportsreports.readreadList the workspace's saved analytics report definitions.
get_best_timesbesttimes.readreadWorker-derived best posting times (strongest-first), optionally by client / platform.
list_approvalsapprovals.readreadList the workspace's approval queue (pending and decided requests), newest-first, with optional status / post filters.
get_posting_limitsaccounts.readreadAnti-ban posting limits (cadence): one account by socialAccountId, or every active channel plus the tenant bypass flag when omitted.
get_quotaaccounts.readreadAdaptive quota pool: your scarce-bucket budget (guaranteed slice, used, burst headroom, tomorrow’s guarantee tonight, reset clock) — read before planning a batch.
list_campaignscampaigns.readreadList the workspace's campaigns (named post groupings), optionally filtered by client / status.
decide_approvalapprovals.decidewrite ⚠Approve, 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.
create_postposts.composewrite ⚠Compose a post and fan it out across the selected accounts (or save it as a draft). Retry-safe: retrying with identical arguments replays the original result instead of creating a duplicate. Note: two publish-now calls with byte-identical content and targets are treated as the same post and coalesced permanently — to intentionally publish the same content twice, vary the content or use distinct scheduled times. For platform-specific settings (e.g. YouTube privacy, TikTok privacy level, Pinterest board, Telegram chat), set variants[].overrides. A write action — confirm with the user before calling.
update_postposts.composewrite ⚠Replace a draft post in place — its content, media, targets, and schedule. Only draft posts can be updated. Platform-specific settings live in variants[].overrides, same as create_post. A write action — confirm with the user before calling.
import_mediamedia.managewrite ⚠Ingest an external image / video into the content library by URL. A write action — confirm with the user before calling.
reschedule_postposts.composewrite ⚠Move a pending post target to a new time (absolute scheduledAt or relative shiftMinutes). A write action — confirm with the user before calling.
cancel_postposts.composewrite ⚠Cancel a still-pending post target before it publishes. A write action — confirm with the user before calling.
retry_postposts.composewrite ⚠Re-queue a failed or rate-limited post target so it publishes again. A write action — confirm with the user before calling.
set_post_recycleposts.composewrite ⚠Set, update, or disable a post's evergreen recycle settings (interval / times / end date / max recycles). A write action — confirm with the user before calling.
shift_campaigncampaigns.managewrite ⚠Move a whole campaign's pending schedule by a relative number of minutes. A write action — confirm with the user before calling.
list_webhookswebhooks.readreadList the workspace's outbound webhook endpoints (url, subscribed events, active flag; secret masked).
create_webhookwebhooks.managewrite ⚠Register an outbound webhook endpoint for HMAC-signed event deliveries (post.scheduled, post.published, post.failed, target.rate_limited, account.disconnected, account.token_expiring, approval.requested, approval.decided, media.ready, report.completed). Returns the signing secret once. A write action — confirm with the user before calling.
delete_webhookwebhooks.deletewrite ⚠Delete an outbound webhook endpoint by id (deliveries cascade). A write action — confirm with the user before calling.
create_clientclients.managewrite ⚠Create a new client group (a brand or influencer whose accounts are managed together). A write action — confirm with the user before calling.
create_connect_inviteaccounts.connectwrite ⚠Mint 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.

Generated from the live MCP catalog — always current.

Discovery URLs#

URLPurpose
https://api.skedcast.com/mcpMCP endpoint (POST; GET returns 405)
/.well-known/oauth-protected-resourceResource metadata + scopes (RFC 9728)
/.well-known/oauth-authorization-serverAuthorization-server metadata (RFC 8414)
/.well-known/jwks.jsonPublic keys for token verification
mcpaiclaude

FAQ

Which AI clients can connect?
Any client that speaks the Model Context Protocol over Streamable HTTP with OAuth — including Claude and a growing list of agent frameworks and IDEs.
Can the agent post without my approval?
Read tools run freely within your granted scopes. The write tools (create_post, import_media) are flagged so your MCP host asks you to confirm before they run, and they still can't exceed your role.

Be first in line when SkedCast opens

Join the waitlist — agencies on it get early access and launch-day onboarding.