schedule_post
What it does
Picks the workspace's connected OAuth credentials for the chosen platform, records the intent in scheduled_posts, and either publishes inline (when publish_at_unix is within 5 minutes) or defers to the cron poller.
Content must be in Approvato with a VF asset — the tool refuses earlier states with a clear error.
Input schema
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | required | — |
Content id. |
| platform | string | required | — |
instagram · facebook · tiktok · youtube · linkedin. |
| publish_at_unix | number | optional | now |
Unix seconds. Omit / set to a past timestamp for immediate publish. |
| caption | string | optional | content.title |
Falls back to the content's title. |
| hashtags | array<string> | optional | [] |
Appended to caption with leading # normalization. |
Example call
json{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "schedule_post", "arguments": { "id": "c_abc123", "platform": "instagram", "publish_at_unix": 1748880000, "caption": "Behind the scenes of today's shoot", "hashtags": ["bts", "production"] } } }
Response shape
json{ "ok": true, "post_id": "post_3f7a...", "content_id": "c_abc123", "platform": "instagram", "status": "published", "publish_at_unix": 1748879994, "published_url": "https://www.instagram.com/p/17889.../", "platform_post_id": "17889...", "warnings": [] }
Usage from Claude Desktop
prompt"Schedule c_abc123 on Instagram for tomorrow 10am Rome, with hashtags #bts #production."
Usage from Python
pythonimport requests LUMIQA = "https://lumiqa.io/mcp/your-slug" HEADERS = {"Authorization": "Bearer lk_live_xxxxxxxxxxxx"} r = requests.post(LUMIQA, headers=HEADERS, json={ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "schedule_post", "arguments": {"id": "c_abc123", "platform": "instagram", "publish_at_unix": 1748880000} }, }) print(r.json())
Usage from Node
javascriptconst r = await fetch("https://lumiqa.io/mcp/your-slug", { method: "POST", headers: { "Authorization": "Bearer lk_live_xxxxxxxxxxxx", "Content-Type": "application/json", }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: "schedule_post", arguments: { id: "c_abc123", platform: "instagram", publish_at_unix: 1748880000 }, }, }), }); const data = await r.json(); console.log(data);
Required env vars / integrations
- A row in
workspace_integrationsper platform (instagram,facebook,tiktok,youtube,linkedin) — connect from/settings/integrations. - R2 binding
UPLOADS+MCP_DELIVERY_SECRET(URL handed to Meta / TikTok / LinkedIn). - Cloudflare Cron Trigger (
*/2 * * * *) reads due rows and callspublishToPlatform.
Known limitations
- TikTok publishing is scaffolded but needs the v1.5 Content Posting API OAuth scopes — expect
publish init failederrors until you upgrade. - Instagram REELS is the only IG path supported (no carousels / stories yet).
- YouTube uses
privacyStatus: publicby default. Switching to private/unlisted is on the v1.1 roadmap. - Cron runs every 2 minutes — expect up to a 2-minute drift on scheduled posts.