MCP Tools
MCP Tools
The MCP server exposes nineteen tools. All operate on the account tied to your API key.
Removing a post is reversible — cancel_post and delete_post soft-delete, and
restore_post brings it back. Publishing is not: publish_now and retry_post send
immediately.
schedule_post
Create a post for one or more connected platforms.
when is required and has no default — omitting it is an error, not an instruction to
publish. Publishing is irreversible, so it is never what you get by leaving a field out.
| Parameter | Type | Required | Notes |
|---|---|---|---|
content |
string | yes | Post text, ≤ 10,000 characters. |
when |
string | yes | "draft" (saves only — publishes nothing, exempt from the monthly limit), "now" (immediate, irreversible), "next_slot", or a future ISO-8601 timestamp. |
platforms |
string[] | yes | One or more of x, linkedin, linkedin_page, facebook, instagram, pinterest, youtube, tiktok, bluesky, mastodon. |
media_ids |
integer[] | no | Media library ids to attach. |
scheduled_at |
string | no | Deprecated, accepted for one more release — same as passing the timestamp in when, and ignored when when is given. |
Returns the new post_id, status, platforms, and scheduled_at.
Targeting can also be done by account_ids or group_ids instead of platforms — the
three are mutually exclusive. Per-account caption overrides go in platform_content,
and platform-native fields in platform_options.
update_post
Change a draft or scheduled post: its content, schedule, target channels, attached media, per-account captions, or platform options. Only the fields you pass are changed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of the draft or scheduled post. |
content |
string | no | New shared text. |
scheduled_at |
string | no | New publish time, ISO 8601. |
account_ids |
integer[] | no | Retarget. Mutually exclusive with group_ids and platforms. |
media_ids |
integer[] | no | Replace the attached media. |
platform_content |
object[] | no | Per-account caption overrides. |
platform_options |
object[] | no | Per-account native settings, e.g. YouTube {title, privacy}. |
get_post
Fetch one post: its status, derived outcome, and per-channel publish result including
the error message for any channel that failed. Also finds cancelled and deleted posts,
which come back with a deleted_at and an outcome of deleted.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of the post. |
get_accounts
List all connected social accounts and their status. No parameters. Returns each account's id, platform, account_name, username, and is_active.
get_groups
List your channel groups and the account ids each contains. No parameters. Use a
group_id from here to target a whole group with schedule_post or update_post.
get_capabilities
The MCP twin of GET /api/capabilities, for agents that only have this server
configured. Returns which platforms are live for you, the exact platform_options
schema each accepts (key, type, allowed values, default), per-platform media rules, and
upload size limits.
| Parameter | Type | Required | Notes |
|---|---|---|---|
platform |
string | no | Limit to one platform. Omit for everything available. |
Call this before passing platform_options. An option key outside the schema is
dropped silently and the call still returns success — so a guessed key publishes the
default instead of what you asked for. A platform with no native options comes back as
an explicit {}, never a missing key.
get_queue_slots
The next open slots in the posting schedule, so you can offer a human real times
("Tue 9:00 AM or Wed 1:00 PM?") before writing anything. Read-only — it reserves nothing.
Pair it with when: "next_slot" on schedule_post.
| Parameter | Type | Required | Notes |
|---|---|---|---|
count |
integer | no | How many slots to return. |
list_posts
List posts, newest-scheduled first. Defaults to status="scheduled" — the upcoming queue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
status |
string | no | scheduled (default), draft, published, failed, or all. |
limit |
integer | no | Default 10, max 50. |
Use status="draft" to find posts created with schedule_post when="draft" — they do
not appear in the default queue view.
list_scheduled
List upcoming scheduled posts. list_posts supersedes this and can filter by status.
| Parameter | Type | Required | Notes |
|---|---|---|---|
limit |
integer | no | Default 10, max 50. |
publish_now
Publish an existing draft, scheduled or failed post immediately. Returns straight away —
publishing runs in the background, so call get_post afterwards for the per-channel
outcome.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of a draft, scheduled or failed post. |
retry_post
Retry only the channels that failed, leaving channels that already published untouched.
Works on a partial outcome too — a post can be published overall while one channel failed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of a post with one or more failures. |
duplicate_post
Copy a post's content, first comment, channels and media into a new draft. Nothing is
scheduled or sent. Channels disconnected since the original was written are dropped from
the copy and reported in dropped_account_ids.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of the source. |
cancel_post
Cancel a scheduled post before it publishes. Only posts in the scheduled state can be
cancelled — use delete_post for any other state. Soft delete: recoverable with
restore_post.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of the scheduled post. |
delete_post
Delete a post in any state. Soft delete, so restore_post undoes it, and a deleted post
never publishes. Deleting a post that already published does not remove it from the
social platform — only from Schedule & Chill.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of the post. |
restore_post
Restore a post removed by delete_post or cancel_post. A post whose scheduled time has
already passed is restored as a draft rather than re-armed, so restoring never
publishes anything by itself.
| Parameter | Type | Required | Notes |
|---|---|---|---|
post_id |
integer | yes | Id of the deleted post. |
get_stats
Return posting statistics: total, published, scheduled, draft, and failed post counts, plus media and connected-account totals. No parameters.
get_analytics
Engagement analytics for published posts over a date window: reach, impressions, likes/comments/shares, engagement rate, per-channel and per-platform breakdowns, a daily timeline, and top posts. Defaults to the last 7 days in your own timezone.
| Parameter | Type | Required | Notes |
|---|---|---|---|
from |
string | no | YYYY-MM-DD in your timezone. Default 7 days ago. |
to |
string | no | YYYY-MM-DD in your timezone. Default today. |
account_ids |
integer[] | no | Limit to these channels. Omit for all, including disconnected. |
group_id |
integer | no | Limit to a channel group. Ignored when account_ids is given. |
top_posts_limit |
integer | no | Default 5, max 20. |
Metrics are collected on a schedule after a post goes out, so a post published minutes
ago has none yet. When that happens the response carries a note saying so, rather than
letting a fresh post read as zero engagement.
browse_media
Search and browse the media library. Returns media items with ids you can attach to schedule_post.
| Parameter | Type | Required | Notes |
|---|---|---|---|
search |
string | no | Match filename. |
type |
string | no | image or video. |
folder |
string | no | Filter by folder. |
limit |
integer | no | Default 10, max 50. |
upload_media
Upload a media file by downloading it from a public URL. Returns a media_id to attach to posts.
| Parameter | Type | Required | Notes |
|---|---|---|---|
url |
string | yes | Public URL of the image or video. |
filename |
string | yes | Original filename with extension, e.g. launch.png. |
folder |
string | no | Folder to organize the media. |
tags |
string[] | no | Optional tags. |