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
Add the server
One claude mcp add command with the hosted URL and your ot_ key as a header. Nothing runs locally.
Connect LinkedIn once
Settings > Accounts > Connect LinkedIn, sign in with LinkedIn and approve. No developer app and no API key.
Ask for LinkedIn
Tell Claude to pass platforms: ["linkedin"], or ["x","bluesky","linkedin"] for all three. Explicit values are honoured exactly and never expanded.
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.
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.
{
"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.
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.
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.
## 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.
Keep exploring
One server, one parameter, and three networks from the same tool call.
Do I need LinkedIn partner approval?
Not for your own profile. Where LinkedIn review does apply, and why.
Why LinkedIn sign-ins last 60 days
No refresh token on self-serve apps, and what OpenTweet does at expiry.
Claude Code posting to Bluesky
The same server and the same parameter, with "bluesky" in the array.
The MCP server in full
The tools, the config, and how it compares with the official X MCP server.
The REST version
One POST with a platforms array, if your agent talks HTTP rather than MCP.
Cross-posting API reference
The platforms parameter, the results array, and the auto cross-post setting.
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.