{"serverId":"mcp-registry/com.postlia/postlia","tools":[{"name":"cancel_post","fixed":{"name":"cancel_post","description":"Cancel a scheduled post by id.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":44,"tokensAfter":44},{"name":"create_draft","fixed":{"name":"create_draft","description":"Save a draft for later without spending posting quota.","inputSchema":{"type":"object","required":["content","platforms"],"properties":{"content":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"},"description":"e.g. linkedin, bluesky"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"create_post","fixed":{"name":"create_post","description":"Create a post. Provide scheduledAt (ISO datetime) to schedule, queue=true for the next open queue slot, or neither to post within ~5 minutes. Media platforms (instagram, tiktok, pinterest, youtube) need mediaUrl/mediaUrls from upload_media; tiktok/pinterest/youtube also need their options object.","inputSchema":{"type":"object","required":["content","platforms"],"properties":{"queue":{"type":"boolean"},"content":{"type":"string"},"mediaUrl":{"type":"string","description":"Postlia storage URL from upload_media"},"mediaAlts":{"type":"array","items":{"type":"string"},"description":"Alt text per carousel image"},"mediaType":{"enum":["image","video"],"type":"string","description":"Required with mediaUrl"},"mediaUrls":{"type":"array","items":{"type":"string"},"description":"Carousel images (1-4), Postlia storage URLs"},"platforms":{"type":"array","items":{"type":"string"},"description":"e.g. linkedin, bluesky, instagram"},"scheduledAt":{"type":"string"},"tiktokOptions":{"type":"object","description":"Required for tiktok: privacy/interaction settings"},"youtubeOptions":{"type":"object","description":"Required for youtube: title etc."},"platformContent":{"type":"object","description":"Optional per-platform caption overrides, e.g. {\"linkedin\": \"longer text\"}"},"pinterestOptions":{"type":"object","description":"Required for pinterest: board id etc."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":391,"tokensAfter":391},{"name":"delete_draft","fixed":{"name":"delete_draft","description":"Delete a draft by id.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":42,"tokensAfter":42},{"name":"get_analytics_summary","fixed":{"name":"get_analytics_summary","description":"Post-outcome summary over the last N days: totals, published/partial/failed counts, per-platform volume, and recent platform errors.","inputSchema":{"type":"object","properties":{"days":{"type":"number","description":"Window in days (1-90, default 30)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"get_post_receipt","fixed":{"name":"get_post_receipt","description":"Delivery receipt for a post: per-platform outcome (published/failed/retrying/pending), platform post ids, and the platform's real error text. Use this to VERIFY a post actually went live instead of assuming. Accepts the id from create_post or from list_published_posts.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Post id (scheduled or published)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"get_posting_quota","fixed":{"name":"get_posting_quota","description":"The posting quota that will actually be enforced: tier, posts used, limit and remaining. Check this before composing a batch instead of discovering the limit via errors.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"get_queue_info","fixed":{"name":"get_queue_info","description":"The posting schedule (timezone + weekly slots) and the next open queue slots, i.e. when a create_post with queue=true would actually publish.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"list_accounts","fixed":{"name":"list_accounts","description":"List the connected social accounts on this Postlia workspace.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":42,"tokensAfter":42},{"name":"list_drafts","fixed":{"name":"list_drafts","description":"List saved drafts (not scheduled, cost no quota).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":38,"tokensAfter":38},{"name":"list_published_posts","fixed":{"name":"list_published_posts","description":"Recent post history with per-post outcome status and any platform errors.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max posts to return (1-50, default 20)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"list_scheduled_posts","fixed":{"name":"list_scheduled_posts","description":"List upcoming scheduled posts.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":35,"tokensAfter":35},{"name":"reschedule_post","fixed":{"name":"reschedule_post","description":"Move a pending scheduled post to a new future time (ISO datetime).","inputSchema":{"type":"object","required":["id","scheduledAt"],"properties":{"id":{"type":"string"},"scheduledAt":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":68,"tokensAfter":68},{"name":"update_post_content","fixed":{"name":"update_post_content","description":"Rewrite a pending scheduled post's text. Platform character limits are enforced.","inputSchema":{"type":"object","required":["id","content"],"properties":{"id":{"type":"string"},"content":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":71,"tokensAfter":71},{"name":"upload_media","fixed":{"name":"upload_media","description":"Pull an image or video from a public https URL into Postlia storage. Returns the storage URL and media type, ready for create_post. PNG, JPEG, WebP, GIF, MP4, WebM, MOV, max 25 MB.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Public https URL of the file"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99}],"toolsChanged":15,"tokensSaved":0,"todo":[{"tool":"cancel_post","params":["id"]},{"tool":"create_draft","params":["content"]},{"tool":"create_post","params":["queue","content","scheduledAt"]},{"tool":"delete_draft","params":["id"]},{"tool":"reschedule_post","params":["id","scheduledAt"]},{"tool":"update_post_content","params":["id","content"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}