> ## Documentation Index
> Fetch the complete documentation index at: https://docs.linkedcamp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Content

> LinkedIn posts: drafting, scheduling and the recurring publishing calendar.

<Info>Requires the **Publish** permission. Tools in this group are hidden from `tools/list` and refused on call when your plan does not grant it.</Info>

| Tool | Kind |
| - | - |
| [`post_generate`](#post_generate) | Read-only |
| [`post_list`](#post_list) | Read-only |
| [`post_schedule_get`](#post_schedule_get) | Read-only |
| [`post_schedule_set`](#post_schedule_set) | Write, Destructive |
| [`post_schedule_settings`](#post_schedule_settings) | Write |
| [`post_upsert`](#post_upsert) | Write, Destructive |

## post\_generate

<Badge color="blue">Read-only</Badge>

Generate LinkedIn post copy from a prompt using a connected AI provider. Returns text only and stores nothing — save it with `post_upsert`, or the copy is lost when the conversation moves on. Requires an AI provider connected in the web app under Settings - Integrations. Requires the "Publish" permission on the plan.

### Parameters

<ParamField path="provider" type="OPENAI | ANTHROPIC | GEMINI | GROK | DEEPSEEK" required>
  Which connected AI provider to use. Providers are connected in the web app.
</ParamField>

<ParamField path="prompt" type="string" required>
  What the post should be about, and in what voice.
</ParamField>

## post\_list

<Badge color="blue">Read-only</Badge>

Posts drafted, scheduled or published from a LinkedIn account, with their engagement numbers. Includes per-status counts. Posts published to the account's own feed — unrelated to campaign outreach, which is `campaign_list` and `analytics_campaign`. Read this before `post_upsert` to avoid creating a near-duplicate of something already queued. Requires the "Publish" permission on the plan.

### Parameters

<ParamField path="linkedAccountId" type="string" required>
  LinkedIn account id, from `linkedin_account_list`.
</ParamField>

<ParamField path="status" type="PENDING | DRAFTED | PUBLISHED | REQUIRE_APPROVAL | APPROVED | REJECTED">
  Filter by status.
</ParamField>

## post\_schedule\_get

<Badge color="blue">Read-only</Badge>

The recurring weekly slots at which queued posts are published for an account. The repeating timetable, not the queue: for the posts themselves use `post_list`. Change the slots with `post_schedule_set` and the timezone or approval rules with `post_schedule_settings`. Requires the "Publish" permission on the plan.

### Parameters

<ParamField path="linkedAccountId" type="string" required>
  LinkedIn account id, from `linkedin_account_list`.
</ParamField>

## post\_schedule\_set

<Badge color="orange">Write</Badge> <Badge color="red">Destructive</Badge>

<Warning>Marked destructive in the protocol — your MCP client asks for confirmation before running it.</Warning>

Define the publishing times for one weekday. Queued posts are released into these slots. One weekday per call, and it replaces that day's times rather than adding to them — read `post_schedule_get` first. It does not schedule any particular post; that is `post_upsert` with `scheduledAt`. Requires the "Publish" permission on the plan.

### Parameters

<ParamField path="scheduleId" type="string">
  Omit to create a new slot.
</ParamField>

<ParamField path="linkedAccountId" type="string" required>
  LinkedIn account id, from `linkedin_account_list`.
</ParamField>

<ParamField path="day" type="string" required>
  Weekday, e.g. "monday".
</ParamField>

<ParamField path="times" type="string[]" required>
  Publish times as 24-hour "HH:MM", e.g. \["09:00","17:30"].
</ParamField>

<ParamField path="timezone" type="string">
  IANA timezone for these times.
</ParamField>

<ParamField path="agentId" type="string">
  CONTENT agent that fills empty slots automatically.
</ParamField>

<ParamField path="approval" type="boolean">
  Require human approval before an auto-generated post publishes.
</ParamField>

<ParamField path="isActive" type="boolean">
  Whether this is live. Keep false while drafting.
</ParamField>

## post\_schedule\_settings

<Badge color="orange">Write</Badge>

Set the timezone, the auto-drafting CONTENT agent, and whether posts need approval before publishing. Account-wide publishing policy, not times — the times are `post_schedule_set`. Attaching a CONTENT agent here lets it draft posts on its own, so confirm with the user first; the agent is configured in `agent_upsert`. Requires the "Publish" permission on the plan.

### Parameters

<ParamField path="linkedAccountId" type="string" required>
  LinkedIn account id, from `linkedin_account_list`.
</ParamField>

<ParamField path="agentId" type="string">
  AI agent id, from `agent_list`.
</ParamField>

<ParamField path="timezone" type="string">
  IANA timezone, e.g. "America/New\_York".
</ParamField>

<ParamField path="approval" type="boolean">
  Require human approval before anything auto-generated goes out.
</ParamField>

## post\_upsert

<Badge color="orange">Write</Badge> <Badge color="red">Destructive</Badge>

<Warning>Marked destructive in the protocol — your MCP client asks for confirmation before running it.</Warning>

Draft or schedule a LinkedIn post. `status: "DRAFTED"` keeps it private; `"PENDING"` with a `scheduledAt` queues it for publishing; `"REQUIRE_APPROVAL"` routes it to a reviewer. A PENDING post with a past or imminent `scheduledAt` will go live publicly — confirm the copy with the user first. This is the only tool that saves a post. `post_generate` writes copy but stores nothing, and `post_schedule_set` defines the weekly slots a PENDING post is released into, not this post's own time. Requires the "Publish" permission on the plan.

### Parameters

<ParamField path="postId" type="string">
  Omit to create a new post.
</ParamField>

<ParamField path="linkedAccountId" type="string" required>
  Account that will publish it.
</ParamField>

<ParamField path="content" type="string" required>
  Post body.
</ParamField>

<ParamField path="pinnedComment" type="string">
  Comment auto-posted underneath, e.g. a link.
</ParamField>

<ParamField path="attachment" type="object">
  Image, video or document to attach.

  <Expandable title="properties">
    <ParamField path="url" type="string" required>
      Publicly reachable URL of the image, video or document.
    </ParamField>

    <ParamField path="name" type="string">
      File name, e.g. "launch-deck.pdf". Shown as the title of a document post.
    </ParamField>

    <ParamField path="type" type="string">
      MIME type, e.g. "image/png", "video/mp4", "application/pdf".
    </ParamField>
  </Expandable>
</ParamField>

<ParamField path="scheduledAt" type="string | number">
  When to publish, as epoch milliseconds or ISO 8601.
</ParamField>

<ParamField path="status" type="PENDING | DRAFTED | PUBLISHED | REQUIRE_APPROVAL | APPROVED | REJECTED">
  DRAFTED keeps it private; PENDING queues it for publishing.
</ParamField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.