schedule-campaign
Skill1 starsChanged 41 days agoMITView on GitHub
Schedule a post (text, photo, video, or thread) across multiple platforms at once. Pick the right MCP upload tool per platform, validate media, set the publish time, and confirm everything is queued. Use when the user wants to schedule, queue, publish, or cross-post content.
In this repository7 other files it gives its agents.
- analyze-performanceSkill
- autodm-setupSkill
- manage-commentsSkill
- posting-queueSkill
- repurpose-videoSkill
- setupSkill
- whitelabel-connectSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
Ask only for what you do not have.
- Distinctive: line 34
Call the right upload tool by content type:
- Very specific: line 51
If the user wants identical content on every platform, one call with the full platforms array is enough.
- Very specific: line 55
Read back: platform → handle → scheduled time → request_id.
- Very specific: line 59
If the user asks "what do I have scheduled", call list_scheduled.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Schedule a cross-platform campaign
The Upload-Post MCP exposes per-platform upload tools. Your job is to orchestrate them into one campaign.
1. Gather inputs
Ask only for what you do not have. Required:
- Content type: text, photo, video, document, or thread.
- Platforms: list of target accounts. Default to all connected accounts unless the user narrows it.
- Media: file path, URL, or already-uploaded media id.
- Caption / text body: usually one message, but the user may want per-platform variants.
- Schedule time: ISO 8601, or
nowfor immediate publish.
2. Validate per platform
Each platform has constraints. Catch the obvious ones before calling the API:
- TikTok / Reels / Shorts: vertical 9:16 video, ≤ 60s for Reels/Shorts, ≤ 3min for TikTok.
- X: text ≤ 280 chars unless premium; video ≤ 2:20.
- LinkedIn: needs a page id if posting as a company — call
get_linkedin_pagesfirst. - Reddit: publishing is currently unavailable (
reddit_unavailable) until the Reddit app is restored. Do not include it as a target; if the user asks for Reddit, say so and offer the other platforms. - Facebook: needs a page id — call
get_facebook_pages. - Pinterest: needs a board id — call
get_pinterest_boards. - Google Business: needs a location id — call
get_google_business_locations, then pass the id asgoogleBusinessLocationIdinsideplatformOptions. There is no separate "select location" tool.
3. Schedule
Call the right upload tool by content type:
- Video →
upload_video(videoPathOrUrl) - Photo / carousel →
upload_photos - Text-only →
upload_text - Document →
upload_document
Every call takes:
user— profile username fromlist_users.platforms— array of platform names.titleand/ordescription— caption.scheduledDate— ISO 8601 (e.g.2026-12-25T10:00:00Z) +timezone(IANA, e.g.Europe/Madrid).addToQueue: true— alternative to a fixed time; appends to the profile's queue instead of pinning an exact timestamp. Usepreview_queuefirst if the user wants to see which slot it will land in (see/upload-post:posting-queue).platformOptions— per-platform overrides as a flat object with camelCase keys (tiktokPrivacyLevel,youtubeMadeForKids,facebookPageId, etc.).asyncUpload: true(default) — returns arequest_id; pollget_statusfor completion.
If the user wants identical content on every platform, one call with the full platforms array is enough. If they want per-platform copy or media, make one call per platform in parallel.
4. Confirm
Read back: platform → handle → scheduled time → request_id. If a platform failed, surface the error and ask whether to retry that platform alone or abort the whole campaign.
Listing and editing
If the user asks "what do I have scheduled", call list_scheduled. To change a scheduled post, use edit_scheduled or cancel_scheduled rather than creating a new one. For everything already published, get_history gives the paginated log across all profiles.
After the fact
- A platform failed →
retry_postwith therequestId(async upload) orjobId(scheduled/queued). It re-runs the same payload; do not rebuild the campaign by hand. - The user wants a published post taken down →
unpublish_postwithuser,platformandpostId. It is destructive and irreversible, so confirm first. Only facebook, youtube, x, linkedin and threads are supported — Instagram and TikTok deletions must be done in the native app. - The user wants to see what is already live on an account →
get_mediapulls recent posts straight from the connected platform, useful to avoid reposting the same thing.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

