schedule_post
Schedule post
With post_id and remove: true, remove a finished or canceled post from Kuro's calendar and Needs attention only. Published social-media posts and analytics remain intact. Cancel scheduled posts first; sending posts cannot be removed until they finish. Removal cannot be combined with other edits.
Create, edit or withdraw a post to the reader's connected social accounts. Without post_id it creates one from a ready image, clip or image set in the account (generation_id) or a verified upload (upload_id) — exactly one — with a caption, one target per account and the reader's IANA timezone; title is required when a target is YouTube. With post_id it edits that post — send only what changes — and with post_id and cancel: true it withdraws a draft or a scheduled post.
Timing is one of three. scheduled_for (an ISO time, two minutes to ninety days ahead) schedules it. Neither scheduled_for nor post_now makes a DRAFT on create — nothing goes out, and the reader finds it in the calendar's drafts; on an edit it leaves the timing alone, and draft: true takes a scheduled post's time away. post_now: true sends it immediately and needs the social.publish_now permission, which a connection holds only when the reader granted it; use it only when the reader asked for the post to go out now. Draft and propose; schedule on the reader's go-ahead.
A post to three accounts is ONE post with three targets. Each target carries that platform's options (start from the account's last_options in list_social_accounts, the reader's previous answers) and may carry its own caption when the platforms want different words. An edit's targets replaces the whole list. Accounts are connected only in the app, at /settings/social.
Scope
social.write— Drafts, schedules, edits and withdraws posts.
Behaviour
- Writes
- Creates or changes items in the caller's own account.
- Can delete or overwrite
- Can delete, overwrite, cancel or withdraw something the caller already has, so a host should confirm it.
- Reaches outside
- Publishes to the caller's own connected TikTok, Instagram, YouTube or X account, where the post is public.
Inputs
post_idstring · optionalThe post to edit or withdraw. Omit to create one.
uuid
canceltrue · optionalWith post_id: withdraw the draft or scheduled post.
removetrue · optionalWith post_id only: remove a finished or canceled calendar entry, keeping published social-media posts.
generation_idstring · optionalCreate only: the ready image, clip or image set to post, from list_media.
uuid
upload_idstring · optionalCreate only, instead of generation_id: the verified uploaded image or clip to post, from list_media.
uuid
captionstring · optionalat most 5000 characters
titlestring · optionalat most 100 characters
targetsarray of object · optionalat least 1 item · at most 10 items
scheduled_forstring · optionaldate-time
post_nowtrue · optionaldrafttrue · optionaltimezonestring · optionalThe reader's IANA time zone, such as Europe/Paris — the calendar shows the post in it. Required on create.
at least 1 character · at most 100 characters
Example call
A tools/call request with the required arguments only, each a placeholder read off the schema. Replace them before sending.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "schedule_post",
"arguments": {}
}
}Input schema
As the server sends it in tools/list.
{
"type": "object",
"properties": {
"post_id": {
"type": "string",
"format": "uuid",
"description": "The post to edit or withdraw. Omit to create one."
},
"cancel": {
"type": "boolean",
"const": true,
"description": "With post_id: withdraw the draft or scheduled post."
},
"remove": {
"type": "boolean",
"const": true,
"description": "With post_id only: remove a finished or canceled calendar entry, keeping published social-media posts."
},
"generation_id": {
"type": "string",
"format": "uuid",
"description": "Create only: the ready image, clip or image set to post, from list_media."
},
"upload_id": {
"type": "string",
"format": "uuid",
"description": "Create only, instead of generation_id: the verified uploaded image or clip to post, from list_media."
},
"caption": {
"type": "string",
"maxLength": 5000
},
"title": {
"type": "string",
"maxLength": 100
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"social_account_id": {
"type": "string",
"format": "uuid",
"description": "An account id from list_social_accounts."
},
"options": {
"anyOf": [
{
"type": "object",
"properties": {
"platform": {
"type": "string",
"const": "tiktok"
},
"privacy_status": {
"type": "string",
"enum": [
"public",
"private"
]
},
"allow_comment": {
"type": "boolean",
"default": false
},
"allow_duet": {
"type": "boolean",
"default": false
},
"allow_stitch": {
"type": "boolean",
"default": false
},
"disclose_your_brand": {
"type": "boolean",
"default": false
},
"disclose_branded_content": {
"type": "boolean",
"default": false
},
"is_ai_generated": {
"type": "boolean",
"default": false
},
"is_draft": {
"type": "boolean",
"default": false
},
"auto_add_music": {
"type": "boolean",
"default": false
}
},
"required": [
"platform",
"privacy_status"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"platform": {
"type": "string",
"const": "instagram"
},
"placement": {
"type": "string",
"enum": [
"reels",
"timeline",
"stories"
]
},
"share_to_feed": {
"type": "boolean",
"default": true
}
},
"required": [
"platform",
"placement"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"platform": {
"type": "string",
"const": "youtube"
},
"privacy_status": {
"type": "string",
"enum": [
"public",
"unlisted",
"private"
],
"default": "public"
},
"made_for_kids": {
"type": "boolean"
},
"contains_synthetic_media": {
"type": "boolean",
"default": false
},
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"maxItems": 15,
"default": []
}
},
"required": [
"platform",
"made_for_kids"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"platform": {
"type": "string",
"const": "x"
}
},
"required": [
"platform"
],
"additionalProperties": false
}
],
"description": "This platform's own answers, keyed by `platform`. Start from the account's `last_options` in list_social_accounts — the reader's previous answers — and change only what the reader asked for."
},
"caption": {
"type": "string",
"maxLength": 5000,
"description": "This account's own caption, in place of the post's. Use it when the platforms want different words."
}
},
"required": [
"social_account_id",
"options"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 10
},
"scheduled_for": {
"type": "string",
"format": "date-time"
},
"post_now": {
"type": "boolean",
"const": true
},
"draft": {
"type": "boolean",
"const": true
},
"timezone": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "The reader's IANA time zone, such as Europe/Paris — the calendar shows the post in it. Required on create."
}
},
"additionalProperties": false
}Related tools
- list_social_accounts
The TikTok, Instagram, YouTube and X accounts this reader connected, each with its status (`needs_reconnect` means posts to it will fail until the reader…
- get_social_insights
How the reader's published posts are doing: each post's latest views, likes, comments and shares per account (results), and, with timezone (an IANA zone,…
- write_caption
Write a caption and hashtags for an image, clip or set already in the account (generation_id or upload_id), sized for the smallest of the platforms named,…