MCP server

A LinkedIn MCP serveron the official API

Some LinkedIn MCP servers work by driving your logged-in browser session. The LinkedIn User Agreement prohibits that kind of automated access, and it can get an account restricted. This server posts through the official LinkedIn API with OAuth, schedules as well as publishes, and the same tool call posts to X and Bluesky.

Hosted at https://mcp.opentweet.io/mcp. 43 tools.

7-day free trial. Cancel anytime.

Two ways an MCP server can reach LinkedIn

Check which one a server uses before you give it your account.

The first is the official API. An app signs you in with OAuth on linkedin.com, you approve it, and it posts through the LinkedIn posting API. For your own profile that takes only the self-serve Share on LinkedIn product, with no partner review.

The second is your browser. The server either controls a browser you are logged into or reuses the session cookie from one, and then works the LinkedIn website the way a person would. It can reach whatever the website shows, which is why some servers take this route. It is also automated access that the LinkedIn User Agreement prohibits, and the account on the other end of that session is the one that gets restricted.

If a server asked for your session cookie

Sign out of LinkedIn in that browser, which ends that session, and change your password if you pasted the cookie anywhere it could have been copied.

Browser session against the official API

The rows that decide whether your LinkedIn account is safe to hand to an agent.

Browser sessionOfficial API with OAuth
What you hand over
Your logged-in browser session or its cookie
Nothing. You approve on linkedin.com
How it posts
Automates the LinkedIn website
Calls the LinkedIn posting API
Standing with LinkedIn
Automated access the User Agreement prohibits
The self-serve Share on LinkedIn product
Risk to the account
Can get the account restricted
Access LinkedIn grants to apps on purpose
Where the secret lives
Your config or a local browser profile
A server-side grant. Your config holds an OpenTweet key
Scheduling
Posts only while the agent is running
Queued and published at scheduled_date

The API does less than a logged-in browser. It posts, and that is what this server does on LinkedIn.

Four steps

  1. Get your OpenTweet API key

    Sign in and copy the key from the dashboard. This is the only secret that goes near your MCP config, and it is an OpenTweet key, not a LinkedIn credential. Revoking it removes the agent, not your accounts.

  2. Connect LinkedIn in Settings > Accounts

    Click Connect LinkedIn, sign in on LinkedIn, and approve. Your password is typed on linkedin.com and never reaches OpenTweet or a config file. No developer app, no API key, no partner application.

  3. Add the server to your client

    One line for Claude Code, or the JSON block for Claude Desktop and Cursor. The hosted endpoint is Streamable HTTP, so there is no local process to keep running and no browser to keep logged in.

  4. Tell the agent where a post goes

    Pass platforms on the tool call to pin a post, or leave it out and let the account auto cross-post setting decide. Omitting it is not the same as pinning to X. Call opentweet_list_platforms to see what an unpinned post would do.

The config

One line for Claude Code, or the JSON block for Claude Desktop and Cursor.

claude code
claude mcp add --transport http opentweet \
  https://mcp.opentweet.io/mcp \
  --header "Authorization: Bearer ot_your_key"
claude_desktop_config.json
{
  "mcpServers": {
    "opentweet": {
      "type": "streamable-http",
      "url": "https://mcp.opentweet.io/mcp",
      "headers": { "Authorization": "Bearer ot_your_key" }
    }
  }
}

Notice what is not in there

No LinkedIn email, no LinkedIn password, no session cookie, no LinkedIn developer app credentials. The only secret is an OpenTweet key, and the LinkedIn grant lives server-side where your agent cannot read it.

What the agent can actually do

Every posting tool takes a platforms parameter, so LinkedIn is not a separate tool to learn. It is one more value on the tools you already use.

tool calls
// Schedule one post to LinkedIn only
opentweet_create_tweet({
  text: "We moved deploys to Tuesday mornings. Here is what broke first, and what we changed.",
  platforms: ["linkedin"],
  scheduled_date: "2026-09-22T14:00:00Z"
})

// One draft, all three networks, right now
opentweet_create_tweet({
  text: "Release 2.4 is out. Notes in the changelog.",
  platforms: ["x", "bluesky", "linkedin"],
  publish_now: true
})

// A thread: a reply chain on X, one combined post on LinkedIn
opentweet_create_thread({
  tweets: ["Two things I got wrong about queues.", "One: I retried every error.", "Two: I never capped it."],
  platforms: ["x", "linkedin"],
  scheduled_date: "2026-09-23T15:00:00Z"
})

// Check where an unpinned post would actually land
opentweet_list_platforms({})

Omitting platforms is not the same as pinning to X

A call that leaves the parameter out follows your auto cross-post setting at publish time, which may send it to every connected network, LinkedIn included. If an agent is writing posts unattended, pin them explicitly. opentweet_list_platforms reports where an unpinned post would go and which of those targets will actually land.

What lands on LinkedIn, exactly

The same rules the composer enforces. A post that breaks one is skipped on LinkedIn with a stated reason and still goes out on the other networks you named.

Per post

  • 3,000 characters, counted strictly, so an emoji counts as 2
  • Up to 4 images, JPEG, PNG or GIF. Others are converted to JPEG
  • Two or more images post as a multi-image post
  • Links work. Hashtags and @mentions publish as plain text
  • A post with a video is skipped on LinkedIn

What comes back

  • One result per network: published, failed, or skipped with a reason
  • A LinkedIn post_id is a URN like urn:li:share:7300000000000000000
  • Its url opens the post at linkedin.com/feed/update/
  • A thread comes back as one LinkedIn post, parts joined by a blank line

What this is, and what it is not

Worth being blunt, because it decides whether this is the right server for you.

Use this if

  • You want an agent to post or schedule to your personal LinkedIn profile
  • You also post to X or Bluesky and want one tool call for all of them
  • You would rather not hand an agent your LinkedIn password or session
  • You want a per-network result on every post

Use something else if

  • You need to post as a Company Page
  • You want the agent to read your feed, messages, or comments
  • You want LinkedIn engagement numbers, which are not read back
  • You are posting video or document carousels
  • You need LinkedIn Articles or newsletters, which have no API for anyone

LinkedIn sign-ins last 60 days with no refresh token, so you reconnect every 60 days in one click. The full walkthrough is here.

Frequently asked questions

How does this MCP server post to LinkedIn?

Through the LinkedIn posting API, on an OAuth sign-in you approve on linkedin.com. It never uses your password, a browser session cookie, or scraping. OpenTweet holds the LinkedIn grant server-side, and your MCP config holds only an OpenTweet API key.

Why not use an MCP server that reuses my logged-in LinkedIn session?

Because of what LinkedIn says about it. The LinkedIn User Agreement prohibits using bots or other unauthorized automated methods to access LinkedIn, and an account caught doing it can be restricted. A server that drives your browser or replays your session cookie is automating the website, and the risk sits on your account, not on the server.

Do I need a LinkedIn developer app or API key?

No. You click Connect LinkedIn in Settings > Accounts, sign in on LinkedIn, and approve. OpenTweet runs on the self-serve Share on LinkedIn product, so there is no developer app, no API key, and no partner application.

Can the agent schedule LinkedIn posts, or only post now?

Both. Pass scheduled_date for a time in the future, or publish_now: true to post immediately. LinkedIn has no scheduling API of its own, so OpenTweet keeps the post in its queue and publishes it at that time.

Can it post to a LinkedIn Company Page?

No. Posts go to the personal profile feed of the member who connected. Company Page posting through the LinkedIn API needs the Community Management API, which requires LinkedIn review, and OpenTweet does not support Company Pages.

Can the agent read my LinkedIn feed, comments, or analytics?

No. On LinkedIn this server publishes and schedules, and nothing is read back: no feed, no comments, no analytics. The analytics tools cover X only.

What happens when the LinkedIn sign-in expires?

LinkedIn sign-ins for self-serve apps last 60 days with no refresh token, so you reconnect every 60 days, in one click. If a sign-in has expired, scheduled LinkedIn posts are held and OpenTweet emails you to reconnect. opentweet_list_platforms also reports which targets will actually land.

Which MCP clients does it work with?

Anything that speaks MCP. Claude Desktop, Claude Code, and Cursor over the hosted Streamable HTTP endpoint at https://mcp.opentweet.io/mcp with an Authorization header, or over the npm package if you prefer a local process.

Give your agent LinkedIn without your session

Hosted MCP server, 43 tools, the official LinkedIn API with OAuth on the LinkedIn side. From $11.99 a month with the MCP server on every plan.