Content Posts
Create, schedule, and publish LinkedIn content through its full lifecycle.
Tools (15)
Section titled “Tools (15)”create_content_post
Section titled “create_content_post”Full name: campaignstack_create_content_post
Creates a draft content post for a connected LinkedIn account; nothing publishes yet. Call this when the user asks to draft, write, or queue up a LinkedIn post. Returns the new post ID; use campaignstack_get_content_post to read it back. postType is inferred from media when omitted. Optional tags (ai-generated, weekly-suggestion, on-demand, competitor-inspired, or freeform). It does not publish or schedule the post: use campaignstack_schedule_content_post or campaignstack_submit_content_for_approval for that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |
authorAccountId | string | Yes | — | (min length: 1) |
platform | linkedin | Yes | — | |
body | string | Yes | — | (min length: 1) |
mediaIds | string[] | No | [] | |
tags | string[] | No | — | |
postType | text | image | video | document | No | — | |
scheduledAt | integer | No | — | Schedule the post at this exact time after creating it. |
autoSchedule | boolean | No | — | Create the post and auto-place it into the next valid posting slot (respects the account’s daily LinkedIn limit). Use this to queue many posts without picking times. |
update_content_post
Section titled “update_content_post”Full name: campaignstack_update_content_post
Updates a draft or scheduled content post’s wording, media, or tags; pass only the fields to change (tags replaces the whole array). Call this when the user asks to edit a post that has not published yet. It does not move the post between statuses: use campaignstack_schedule_content_post, campaignstack_submit_content_for_approval, or campaignstack_unschedule_content_post for that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
body | string | No | — | (min length: 1) |
mediaIds | string[] | No | — | |
tags | string[] | No | — | |
postType | text | image | video | document | No | — |
list_content_posts
Section titled “list_content_posts”Full name: campaignstack_list_content_posts
Lists content posts, filterable by status, platform, and tags (OR logic), most recent first. Call this when the user asks what posts are drafted, scheduled, or published, or wants one to edit. Use campaignstack_get_content_post for full details including media URLs. It does not report engagement: use campaignstack_get_content_analytics for that. Results are one page. When pagination reports more, say so rather than presenting the page as the whole set, and page through before counting anything.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |
status | draft | pending_approval | scheduled | publishing | published | failed | archived | No | — | |
platform | linkedin | No | — | |
tags | string[] | No | — | |
limit | integer | No | 20 | (min: 1, max: 100) |
cursor | string | No | — | Opaque pagination cursor from a previous response’s nextCursor |
get_content_post
Section titled “get_content_post”Full name: campaignstack_get_content_post
Returns a single content post with its LinkedIn extension data and media URLs. Call this when the user asks about one specific post, or before editing one. Use campaignstack_list_content_posts to find post IDs. It does not return engagement: use campaignstack_get_content_analytics for that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
delete_content_post
Section titled “delete_content_post”Full name: campaignstack_delete_content_post
Deletes a draft or failed content post; this cannot be undone. Call this when the user asks to remove a post they no longer want. It does not touch a scheduled or published post: unschedule it first with campaignstack_unschedule_content_post.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
duplicate_content_post
Section titled “duplicate_content_post”Full name: campaignstack_duplicate_content_post
Duplicates a content post as a new draft, copying body, media, and tags with all lifecycle fields cleared. Call this when the user asks to reuse or repost something close to an earlier post. Returns the new post ID. It does not schedule the copy: use campaignstack_schedule_content_post once the wording is right.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
schedule_content_post
Section titled “schedule_content_post”Full name: campaignstack_schedule_content_post
Schedules a draft content post to publish, skipping approval. Call this when the user asks to schedule or queue a drafted post. Pass scheduledAt (Unix ms) for an exact time, or autoSchedule:true (the default) for the next slot within the account’s daily posting limit; the response returns the resolved time. It does not route through review: use campaignstack_submit_content_for_approval when the workspace expects a person to approve first.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
scheduledAt | integer | No | — | Exact publish time. Omit (or set autoSchedule) for the next valid slot. |
autoSchedule | boolean | No | — | Auto-place into the next valid posting slot instead of an exact time. Default when scheduledAt is omitted. |
submit_content_for_approval
Section titled “submit_content_for_approval”Full name: campaignstack_submit_content_for_approval
Submits a draft content post for approval so a person reviews it before it publishes. Call this when the workspace wants a review step instead of scheduling directly. Continue with campaignstack_approve_content_post or campaignstack_reject_content_post. It does not schedule the post: use campaignstack_schedule_content_post to skip review entirely.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
approve_content_post
Section titled “approve_content_post”Full name: campaignstack_approve_content_post
Approves a pending_approval content post and schedules it for publishing. Call this when the user asks to approve a submitted post, after reading its wording back to them. Pass scheduledAt for an exact time, or autoSchedule:true (default) for the next slot. Use campaignstack_reject_content_post to send it back to draft instead.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
scheduledAt | integer | No | — | Exact publish time. Omit (or set autoSchedule) for the next valid slot. |
autoSchedule | boolean | No | — | Auto-place into the next valid posting slot instead of an exact time. Default when scheduledAt is omitted. |
reject_content_post
Section titled “reject_content_post”Full name: campaignstack_reject_content_post
Rejects a pending_approval content post back to draft with a reason. Call this when the user asks to send a submitted post back for changes instead of approving it. Increments the revision count (max 10). Edit with campaignstack_update_content_post, then resubmit. It does not delete the post: use campaignstack_delete_content_post for that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
reason | string | Yes | — | (min length: 1) |
unschedule_content_post
Section titled “unschedule_content_post”Full name: campaignstack_unschedule_content_post
Moves a scheduled content post back to draft, clearing the scheduled time so it will not publish. Call this when the user asks to pull a queued post before it goes out. Reschedule it later with campaignstack_schedule_content_post. It does not touch a post that already published: there is no way to unpublish that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
retry_content_post
Section titled “retry_content_post”Full name: campaignstack_retry_content_post
Moves a failed content post back to draft, clearing the failure reason. Call this when the user asks to retry a post that failed to publish. Check campaignstack_get_content_post first for why it failed. After retrying, edit with campaignstack_update_content_post, then reschedule or resubmit for approval.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
contentPostId | string | Yes | — | (min length: 1) |
get_content_analytics
Section titled “get_content_analytics”Full name: campaignstack_get_content_analytics
Get analytics for a workspace’s own published LinkedIn content: engagement (reactions, comments, reposts), trend vs the previous period, and top-performing posts. Call this when the user asks how their content is performing. fromMs/toMs are Unix ms. It does not list the posts themselves: use campaignstack_list_content_posts for that.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |
fromMs | integer | Yes | — | |
toMs | integer | Yes | — |
list_content_calendar
Section titled “list_content_calendar”Full name: campaignstack_list_content_calendar
List content posts scheduled or published within a date range, for a calendar view. Call this when the user asks what is going out this week or over a range. Timestamps are Unix ms. It does not include unscheduled drafts: use campaignstack_list_content_posts with status draft for those.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |
startMs | integer | Yes | — | |
endMs | integer | Yes | — |
list_ai_suggestions
Section titled “list_ai_suggestions”Full name: campaignstack_list_ai_suggestions
List up to 3 recent AI-generated content post drafts (tagged ‘ai-generated’) for a workspace. Call this when the user asks what content ideas are waiting for them. Edit one with campaignstack_update_content_post, then schedule or submit it for approval. It does not generate a new suggestion: there is no MCP tool for that yet.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach. |