Skip to main content
Profile and company data — read 20 September 2026

linkedincli

Profile data, the feed, messaging, connections and engagement, on a session taken from your own browser. No rate limiting, no throttle, no dry run and no confirmation step, and the maintainer forbids running it on a server. A session from your own logged-in browser, replayed against LinkedIn's internal API. No OAuth, no API key, no developer app.

Session cookieHigh account riskActivev0.1.6
Last read
✓ Read from the repository, not from a directory listing✓ Write actions separated from read actions✓ Status derived from the last code change, not the maintainer's word✓ Every source URL published below
43 tools registered
17 write to LinkedIn
57 GitHub stars, 20 September 2026
5 clients documented
Where it fits

What it is built for, and the jobs it cannot do

The second card is the one a repository README never contains. Both are written from the project's own documentation and source, read on 20 September 2026.

Use it for

A developer or solo operator who wants their own agent to drive their own LinkedIn account from their own machine, and who is comfortable with session-based tooling against a private API. Because every tool is also a CLI subcommand, each one can be tested by hand before an agent is let near it, and the zero-infrastructure footprint makes it trivial to try. Genuinely useful for read-heavy work: your own profile data, your feed and messages, who viewed your profile, and people, company and job search.

Do not use it for

Teams, agencies or anything multi-seat — it is single-account, single-machine by design, and the maintainer explicitly forbids running it on a server or a cloud instance. Not for sales or recruiting workflows that need Sales Navigator or Recruiter: neither is supported in any form, and there is no InMail capability. Not for outreach at volume: there is no rate limiting, throttling or safety rail of any kind, and automated connection requests and messages under your own name are exactly what gets accounts restricted. Not for anyone who needs a stable production dependency — it is pre-1.0, the npm release is months stale, and the flagship open issues are that the session dies and that post search does not work.

Publisher
Brandon Charleson — independent developer, community project — not affiliated with LinkedIn or Microsoft.
Licence
MITopen source
Version
0.1.6
Runs
Self-hosted
Transport
stdio
Last read

Hosting and transport are as the project documents them: Local machine only, and the README says so at length. A section titled "Local harness only" forbids cloud deployment: a live LinkedIn session must run on the operator's own computer, and cloud agents or remote runners may only install the CLI or call a server already running on that local machine.

Authentication — the thing that decides everything else

A session from your own logged-in browser, replayed against LinkedIn's internal API. No OAuth, no API key, no developer app.

A session taken from your own signed-in browser, replayed against the internal API the LinkedIn website itself uses.

What this route cannot do, however well the server is written

The same reach as a browser session and the same clause against it, with two additions: the session is a credential equivalent to full account access wherever it is stored, and it is invalidated whenever LinkedIn decides the client does not look like a browser.

High account risk

The server writes to LinkedIn as you, over a route LinkedIn does not sanction. Automated messages and connection requests under a member’s own name are what the enforcement is built to catch, and the account is what it acts on.

What it does with the credential

You supply your own live LinkedIn session. The documented and supported route reads it out of a local Chrome profile with a login command, which needs a local SQLite binary and prompts for a keychain unlock on first run; it works on macOS and Linux but not on Windows, where Chrome 127 and later block it. The session can also come from environment variables or a stored config file written by the login command. Sessions expire after a few weeks and can be invalidated immediately if the client does not look enough like Chrome — see the risk note, which is the project's own flagship open issue.

Account risk is derived from the authentication class and from whether the server writes to LinkedIn — not judged per project. The 5 classes and the rule that maps them are on the LinkedIn MCP server directory; the ceilings LinkedIn enforces on any account, automated or not, are on LinkedIn limits. What this particular server exposes, and what it does with your credentials, is below.

Exposed tools

17 of its 17 write actions land on LinkedIn under your own account

These are the tool names the server registers, as a client sees them. An assistant can call any tool the server exposes once it is connected, so the list below is the whole surface, not a feature summary.

  • profile_me
  • profile_view
  • profile_contact-info
  • profile_skills
  • profile_network
  • profile_badges
  • profile_privacy
  • profile_posts
  • profile_disconnect
  • posts_create
  • posts_edit
  • posts_delete
  • feed_view
  • feed_user
  • feed_company
  • engage_react
  • engage_reactions
  • engage_comment
  • engage_comments-list
  • engage_share
  • connections_send
  • connections_received
  • connections_sent
  • connections_accept
  • connections_reject
  • connections_withdraw
  • connections_remove
  • messaging_conversations
  • messaging_conversation-with
  • messaging_messages
  • messaging_send
  • messaging_send-new
  • messaging_mark-read
  • search_people
  • search_companies
  • search_jobs
  • search_posts
  • companies_view
  • companies_follow
  • companies_unfollow
  • jobs_view
  • jobs_skills
  • analytics_profile-views

All 43 tools it registers are named above. Post search is registered but always fails: the README names the exact broken query and refuses to invent a replacement — "A replacement content-search queryId has not been verified from public/in-repo sources, so this CLI does not invent one." Every tool is also a CLI subcommand, so each can be tested by hand before an agent is let near it.

What it can read

8 read actions, written as what they return rather than as the tool signature.

  • Your own profile; any profile by its URL slug; a profile's contact information, skills, network figures, badges, privacy settings and recent posts.
  • Your own chronological feed, another member's activity, and a company page's updates.
  • Who reacted to a post, and the comments on a post.
  • Invitations you received and invitations you sent.
  • Your conversations, the conversation with a given person, and the messages in one.
  • People search with keyword, title, company, geography and connection-degree filters; company search; job search with remote and experience filters.
  • A company profile by its URL slug; a job posting's details and its skill-match insights.
  • Who viewed your profile.

What it can write, and where the write lands

17 of the 17 write actions land on LinkedIn itself. Those are the rows that carry the account risk: an automated message, invitation, post or campaign change is activity under your own name, and Section 8.2 of the User Agreement bars sending it by automated means. Section 8.2 of the User Agreement ↗

ActionWhere it landsWhat it does
posts_createYour LinkedIn accountPublishes a text, image or article post to your feed.
posts_editYour LinkedIn accountRewrites the text of one of your existing posts.
posts_deleteYour LinkedIn accountRemoves one of your posts.
engage_reactYour LinkedIn accountReacts to someone else's post as you, in one of six reaction types.
engage_commentYour LinkedIn accountPosts a public comment under your name.
engage_shareYour LinkedIn accountReposts another post with your commentary.
connections_sendYour LinkedIn accountSends a connection request, optionally with a note.
connections_acceptYour LinkedIn accountAccepts a pending invitation.
connections_rejectYour LinkedIn accountRejects or ignores a pending invitation.
connections_withdrawYour LinkedIn accountWithdraws a request you sent.
connections_removeYour LinkedIn accountRemoves an existing connection.
profile_disconnectYour LinkedIn accountRemoves a connection by public identifier — a second path to the same thing.
messaging_sendYour LinkedIn accountSends a message in an existing conversation.
messaging_send-newYour LinkedIn accountOpens a new conversation with one or more recipients.
messaging_mark-readYour LinkedIn accountMarks a conversation read, which the other party sees as a read receipt.
companies_followYour LinkedIn accountFollows a company page as you.
companies_unfollowYour LinkedIn accountUnfollows a company or entity.

Read the middle column before the third. A write that lands off LinkedIn — a vendor workspace, a CRM, a local file — is undone by deleting a row. A write that lands on LinkedIn has already been seen by another member.

Setup — moderate

Installing it, in the project's own commands

Every command and every configuration block below is the project's own, copied unchanged on 20 September 2026. Where a project publishes no config block, this page says so rather than composing one — a snippet written here would be a snippet the maintainer never tested.

Global install

Shell
npm install -g @bcharleson/linkedincli

The package is @bcharleson/linkedincli, but the command it installs is linkedin.

Without installing

Shell
npx @bcharleson/linkedincli --help

Authenticate

Shell
linkedin login --from-chrome

Reads the session out of a local Chrome profile. macOS and Linux only: Chrome 127 and later block it on Windows, and an open issue reports the documented workaround still failing there.

The configuration block

Client config keys are not interchangeable, and a block pasted under the key a different client expects fails silently rather than erroring. That is why the blocks below are the project's own, in the clients it names, rather than one block normalised here.

Launch through npx

JSON
{
  "mcpServers": {
    "linkedin": {
      "command": "npx",
      "args": ["-y", "@bcharleson/linkedincli", "mcp"]
    }
  }
}
What it needs before it will start

Light and local. Node.js 18 or newer and npm — that is the whole mandatory stack. No Docker, no Python, no headless browser or Playwright, no paid API key, no hosted account, no database, no server. Optional, local-only, and needed in practice for sessions to survive: a SQLite binary for the Chrome import, and a browser-impersonating curl build for the transport workaround. Windows cannot use the Chrome import at all.

Clients the project documents

Claude Code; Cursor; Windsurf; OpenClaw; Any MCP client that can launch a local stdio server. Where the file goes in each Claude surface. The same block in Cursor.

How it talks to the client

stdio only. The client launches the installed command as a local process, which is the only arrangement the project supports — it forbids running on a server.

Where the process runs

Local machine only, and the README says so at length. A section titled "Local harness only" forbids cloud deployment: a live LinkedIn session must run on the operator's own computer, and cloud agents or remote runners may only install the CLI or call a server already running on that local machine.

What it costs to run

The vendor's own figures, quoted rather than computed

Free. MIT-licensed open source with no paid tier, no hosted plan and no vendor API key. The only cost is a LinkedIn account; no Premium, Sales Navigator or Recruiter subscription is required for the tools it exposes.

Sales Navigator — Not supported

No Sales Navigator tool, surface or lead-list capability exists anywhere in the source. People search hits the standard consumer search, not a Sales Navigator one.

Recruiter — Not supported

No Recruiter tools, no project or pipeline management, no candidate sourcing beyond ordinary people search.

None of the figures above are LinkedIn's. They are third-party prices in the currency and the tiering each project publishes, read on 20 September 2026 and quoted rather than converted.

Repository signals, read 20 September 2026

The code has moved recently

29 days between the last code change and the day these figures were read. Code changed within 90 days of the day this directory was checked.

How far the project has got

Early. Created March 2026, still pre-1.0, effectively a single-maintainer project. 57 stars is modest traction. The codebase is small but real: around 30 TypeScript source files, a clean abstraction where one definition serves both the CLI and the MCP tool, typed input schemas on every command, and six test files covering auth, the browser import, redirects, transport and the search gap.

How this status was decided

Active means code changed within 90 days of the observation date; stale means up to 365 days. It is measured from the last change to code, not to the README, and never from the maintainer's own adjective. Anything past a year is dropped from this directory rather than published as dormant.

Stars
57 — 18 forks, 0 watchers.
Last commit
— Preceding substantive commits are 20 August; before that there is a gap back to March.
Open issues
2 — Both are core-functionality defects: sessions dying on Windows, and post search returning no results. The API reports 3 because it counts an open pull request. A closed issue reads, in full, "yeah this instantly logs me out".
Status
Active
Observed

Every figure in this section was read from GitHub on , and star and issue counts move daily. The issue count is the Issues tab, not the API field of the same name — that one counts pull requests as issues and overstates every repository in this directory.

Credential handling and known problems

What to check before you point it at a real account

Both cards below are read from the repository and its own security documentation. A project saying what it does with a session is evidence of intent, not proof of behaviour.

What running it exposes

This drives a real personal LinkedIn account through LinkedIn's private, undocumented internal API, using a session taken from your own browser. It is not an official integration, and the repository's own disclaimer states it "is not affiliated with or endorsed by LinkedIn" and that "the authors are not responsible for any account restrictions that may result from automated usage". The write actions carry the account risk: posting, commenting, reacting, sharing, sending and accepting connection requests, and sending messages all happen under your own name and are indistinguishable from you acting personally. Automated connection requests and messaging are the classic triggers for restrictions, and the tool ships no rate limiting, no throttling, no dry-run mode and no confirmation step — an agent can loop a connection request or a new message as fast as the server answers. The read actions carry less risk but still collect LinkedIn data in a way the User Agreement prohibits. Separately, session stability is a documented, unresolved problem: the default HTTP client presents a network fingerprint that is not Chrome, and LinkedIn frequently detects it and invalidates the session on the first call. The maintainer's two mitigations are explicitly opt-in workarounds, and an open issue reports them still failing on Windows.

How it handles your credentials

The credential is a full LinkedIn session, which is equivalent to full account access: anyone holding it can act as the member without a password or a second factor. It is stored in plaintext in a config file in your home directory, and the README's own client config example puts it in the client's environment block, meaning it typically ends up in a plaintext editor or agent config file that may be synced or committed. There is no encryption at rest and no keychain storage for the tool's own config. To the maintainer's credit: the values are never printed to standard output or error, redirects are never followed so an expired session surfaces as a 3xx rather than leaking through a login redirect, a verify command classifies login and challenge redirects as an invalid session, and the project's central security stance is architectural — the README and its agent guide both insist the session must never leave the local machine and must not be placed in a cloud or remote-runner environment.

2 things that will waste an hour

Small, checkable and specific to this project — a stale package name, a broken link, a manifest that advertises something the code removed.

  • The published npm version is 0.1.5 from March 2026 while the repository is 0.1.6, and the published tarball does not contain the session-survival code the README documents. To get those features, build from source.
  • The README's other client config block puts the LinkedIn session into the agent config file as environment variables. It is not reproduced here: a live session pasted into an agent config is the exposure this page is describing.
If this is not the one

The servers that do a comparable job, and how they differ

Same rows, same sources, same observation date. The first column is this server.

linkedincli compared with its alternatives
 linkedincliv0.1.6stickerdaniel/linkedin-mcp-serverv4.24.4eliasbiondo/linkedin-mcp-serverv0.1.0
Authenticates withSession cookieBrowser sessionBrowser session
Account riskHighHighMedium
Writes to LinkedIn17 actions2 actionsNone
Tools registered43197
Sales Navigator toolsNoNoNo
Recruiter toolsNoNoNo
RunsSelf-hostedSelf-hostedSelf-hosted
Last code change22 August 2026 — active20 September 2026 — active8 March 2026 — stale
LicenceMIT, open sourceApache-2.0, open sourceMIT, open source
  • Profiles, companies, jobs, the feed, post search and your own inbox, read through a browser you sign into on your own account. Two tools write — a message and a connection request — and only the message tool takes a confirmation flag.

    High riskActive
    stdio and Streamable HTTP19 toolsRead 20 September 2026
  • Read-only LinkedIn scraping through a browser you sign into yourself: profiles section by section, company pages, job postings, people search. No write path at all, and no commits in six months.

    Medium riskStale
    stdio and Streamable HTTP7 toolsRead 20 September 2026
Provenance

Every page this profile was read from

7 pages — the repository, its documentation and, where one exists, the vendor's own pricing page. Nothing on this profile is summarised from another directory or from a blog post about the project.

All of them read on . A repository moves faster than a price does: if a tool list or a command here no longer matches the project, the project changed and this page has not been re-read yet.

Where to next

Read the write table before you connect it

17 of this server's actions land on LinkedIn under your own account, on a session cookie. That is high account risk, and the account is what enforcement acts on.