Last updated: September 2026

How do I get Claude Code to post to LinkedIn?

Add the OpenTweet MCP server with one command, connect LinkedIn once in Settings, then have Claude pass platforms: ["linkedin"] on the posting tool. The post lands on your personal LinkedIn profile, and adding "x" and "bluesky" to the same array sends it to all three networks from one tool call.

Four steps below, then what LinkedIn does differently with threads and long posts, which is where most surprises come from.

The four steps

1

Add the server

One claude mcp add command with the hosted URL and your ot_ key as a header. Nothing runs locally.

2

Connect LinkedIn once

Settings > Accounts > Connect LinkedIn, sign in with LinkedIn and approve. No developer app and no API key.

3

Ask for LinkedIn

Tell Claude to pass platforms: ["linkedin"], or ["x","bluesky","linkedin"] for all three. Explicit values are honoured exactly and never expanded.

4

Make it stick

Add the rule to your project instructions so the next session does not have to be reminded.

Add the server

The endpoint is hosted, so this installs nothing on your machine. Your ot_ key goes in the header and can be rotated on its own from the dashboard.

terminal
claude mcp add --transport http opentweet \
  https://mcp.opentweet.io/mcp \
  --header "Authorization: Bearer ot_your_key"

For Claude Desktop, Cursor or any other MCP client, the same URL goes into the connectors config instead.

mcp config
{
  "mcpServers": {
    "opentweet": {
      "type": "streamable-http",
      "url": "https://mcp.opentweet.io/mcp",
      "headers": { "Authorization": "Bearer ot_your_key" }
    }
  }
}

Then connect LinkedIn once in the dashboard: Settings > Accounts > Connect LinkedIn, sign in with LinkedIn and approve. There is no LinkedIn developer app to create, because the OpenTweet app uses the self-serve Share on LinkedIn product, which needs no partner approval.

Ask for LinkedIn

In conversation this is just a sentence: post this to LinkedIn, or post this everywhere. What the agent does underneath is one tool call with an explicit platforms array.

tool calls
opentweet_create_tweet({
  text: "We moved our job queue to Postgres. Three things we learned.",
  platforms: ["linkedin"],
  publish_now: true
})

// All three networks, scheduled
opentweet_create_thread({
  tweets: ["Three things I got wrong about queues.", "One.", "Two.", "Three."],
  platforms: ["x", "bluesky", "linkedin"],
  scheduled_date: "2026-09-22T14:00:00Z"
})

// Not sure where an unspecified post would land? Ask first.
opentweet_list_platforms({})

Omitting platforms does not mean X

A post with no platforms value follows the account auto cross-post setting. When that setting is on, it goes to every connected, working network, LinkedIn included. Explicit values are always honoured exactly and never expanded, so an agent writing unattended should always pass one.

What LinkedIn does with threads and long posts

LinkedIn is a different shape from X and Bluesky. These are the rules the same tool call follows on the LinkedIn side.

What Claude sends
What happens on LinkedIn
A thread
One post, parts joined by a blank line, images from every part collected.
Over 3,000 characters
Skipped on LinkedIn with a stated reason. Still published on the other networks.
Emoji
Each counts as 2 toward the 3,000 limit.
Images
Up to 4. JPEG, PNG and GIF, other formats converted to JPEG. Two or more post as a multi-image post.
Video
Not supported on LinkedIn yet. Skipped there with a reason.
Hashtags and @mentions
Published as plain text, not links. URLs in the text work.

The one to watch is a long thread. Joined into one post, it can run past 3,000 characters, and then it is skipped on LinkedIn while still posting as a thread on X and Bluesky. The per-network result says so, with the reason attached.

Make it stick past this session

Reminding the agent every time is the part that fails. Put the rule in your project instructions instead, in CLAUDE.md or whatever your client reads at startup, and it applies to every future post without you thinking about it.

CLAUDE.md
## Posting

When posting through the opentweet MCP server, always pass an explicit
platforms array. Omitting it follows the account cross-post setting,
which is not what we want here.

Default: platforms: ["x", "bluesky", "linkedin"]
X-only announcements: platforms: ["x"]

LinkedIn: keep posts under 3,000 characters, no video, and remember
hashtags and @mentions publish there as plain text.

If unsure where a post will land, call opentweet_list_platforms first.

One thing to expect over time: LinkedIn sign-ins last 60 days, because LinkedIn gives self-serve apps no refresh token. When one expires, scheduled LinkedIn posts are held and OpenTweet emails you to reconnect, which is one click. The detail is in why the LinkedIn token expires after 60 days.

7-day free trial. Cancel anytime.

Frequently asked questions

How do I get Claude Code to post to LinkedIn?

Add the OpenTweet MCP server with claude mcp add --transport http opentweet https://mcp.opentweet.io/mcp and an Authorization header carrying your ot_ key, connect LinkedIn once in Settings > Accounts, then ask Claude to post with platforms set to ["linkedin"], or ["x","bluesky","linkedin"] for all three networks. The post lands on your personal LinkedIn profile feed.

Do I need a LinkedIn developer app or API key for this?

No. The OpenTweet LinkedIn app uses the self-serve Share on LinkedIn product. You click Connect LinkedIn, sign in with LinkedIn and approve. No developer app, no API key and no partner application. The only credential in your MCP config is your own ot_ key.

What happens when Claude posts a thread to LinkedIn?

LinkedIn has no threads, so a thread targeting LinkedIn goes out there as one post, with the parts joined by a blank line and the images from every part collected. On X and Bluesky the same call still posts a real reply chain.

What if the post is too long for LinkedIn?

LinkedIn allows 3,000 characters, and OpenTweet counts strictly, so an emoji counts as 2. A post over that is skipped on LinkedIn with a stated reason and still goes out on the other networks. Nothing is truncated and the tool call does not fail outright.

Can Claude post to my LinkedIn Company Page?

No. OpenTweet posts to the connected member personal profile only. Company Pages need the LinkedIn Community Management API, which requires LinkedIn review, and OpenTweet does not support them.

How often do I have to reconnect LinkedIn?

Every 60 days. LinkedIn gives self-serve apps no refresh token, so the sign-in cannot renew itself. When it expires, scheduled LinkedIn posts are held and OpenTweet emails you to reconnect, which is one click.

Does this work in Claude Desktop and other MCP clients?

Yes. The same URL, https://mcp.opentweet.io/mcp, works in any MCP client: Claude Desktop, Cursor, Windsurf, Cline and OpenClaw among them. The server exposes 43 tools, and the posting ones take the same platforms parameter everywhere.

Give Claude Code your LinkedIn profile

One command, 43 tools, no LinkedIn developer app and no X developer account. Flat $11.99 a month.

7-day free trial. Cancel anytime.