LinkedIn MCP Server

Give MCP-compatible assistants access to LinkedIn through a locally authenticated browser session.

Stars
★ 3.9k
Last updated
3d ago
License
Apache-2.0
Primary language
Python

At a glance

How it runs
MCP serverCLISelf-hosted service
Works with
Universal · cross-platformClaude.ai (Partial support)
Cost
Free, no paid service needed
Setup effort
Medium · a few setup steps
You'll need
LinkedIn account and authenticated browser sessionuv and uvx, Docker, or Claude Desktop MCP BundlePython 3.12+ for local developmentPatchright ChromiumShell / CLINetwork accessLocal filesystemMCP Server
Typical use
A job seeker searches by keyword and location with search_jobs, then retrieves full listings through get_job_details.
Not a fit if
  • Teams needing account-safety guarantees or vendor authorization
  • Users unwilling to store browser sessions and cookies locally
  • Production systems that need a stable official API, not scraping
Source review
79/100 · Good

What does this agent do, and when should you use it?

LinkedIn MCP Server is an open-source MCP service built with Python, FastMCP, and Patchright that operates through the user's own LinkedIn browser session. It exposes tools for profiles, companies, jobs, feeds, posts, connections, and messages, including selected write operations such as sending messages and handling connection requests. The server uses stdio by default and also supports Streamable HTTP, with documented installation paths for uvx, a Claude Desktop MCP Bundle, Docker, and local development. Authentication and page access occur in Chromium, with the browser profile stored under ~/.linkedin-mcp/profile/ and managed browser downloads cached under ~/.linkedin-mcp/patchright-browsers/. It is an independent project rather than an official LinkedIn or Microsoft integration, and adopters must accept that automated access can violate LinkedIn's terms and put an account at risk.

An MCP client invokes a named tool, and the server uses Patchright Chromium with a saved or imported LinkedIn session to navigate the relevant pages. get_person_profile and get_my_profile retrieve explicitly selected sections such as experience, education, skills, projects, contact information, and posts; get_company_profile, get_company_posts, search_companies, and get_company_employees support company research. search_jobs, get_saved_jobs, and get_job_details cover job discovery, while get_feed and search_posts retrieve feed and post content. get_inbox, get_conversation, search_conversations, and send_message handle messaging, with confirmation required for send_message; connect_with_person can send or accept connection requests. Calls are serialized through a queue to protect the shared browser session, and close_session shuts the session down and releases resources.

  1. A job seeker searches by keyword and location with search_jobs, then retrieves full listings through get_job_details.
  2. A recruiter or business researcher uses search_people, get_person_profile, and get_company_employees to investigate candidates and company personnel.
  3. A salesperson gathers account context with search_companies, get_company_profile, and get_company_posts before outreach.
  4. A user reviewing LinkedIn correspondence lists recent threads with get_inbox and finds relevant messages with search_conversations.
  5. An individual asks an assistant to inspect the home feed, find recent posts, or send a confirmed message or connection request.

How do you install or deploy this agent?

The recommended path requires uv. Add this entry to an MCP client configuration:
{"mcpServers":{"mcp-server-linkedin":{"command":"uvx","args":["mcp-server-linkedin@latest"],"env":{"UV_HTTP_TIMEOUT":"300"}}}}
The first authentication-dependent call prepares Patchright Chromium and opens a LinkedIn login window. To establish the session beforehand, run uvx mcp-server-linkedin@latest --login. If a supported Chromium-based browser already has a live LinkedIn session, run uvx mcp-server-linkedin@latest --import-from-browser. Claude Desktop users can instead download and open the latest .mcpb release artifact. Docker installation requires a writable ~/.linkedin-mcp mount and a one-time container run with --login --login-viewer.

How do you use this agent?

After configuring the MCP client and authenticating, invoke the tool matching the task. For example, call search_jobs with keyword and location filters, then pass a returned posting to get_job_details; for profiles, call get_person_profile and explicitly request sections such as experience, education, skills, or posts. Confirm the intended content before invoking send_message. Retry if the first request reports that browser setup or authentication is still in progress. For slow pages use --timeout 10000, and for long complete calls use --tool-timeout 300. An HTTP client can start the service with uvx mcp-server-linkedin@latest --transport streamable-http --host 127.0.0.1 --port 8080 --path /mcp and connect to http://localhost:8080/mcp.

What are this agent's strengths and limitations?

Pros
  • Its tool set spans profiles, companies, employees, jobs, posts, the home feed, connections, and messages, enabling multi-step LinkedIn research workflows.
  • It offers uvx, Claude Desktop MCP Bundle, Docker, and source-based deployment, plus both stdio and Streamable HTTP transports.
  • It uses the user's local browser session rather than requiring credentials to be hosted by the project and can import sessions from several Chromium-based browsers.
  • Browser access is serialized across calls and processes, with configurable waiting, minimum-hold, and idle-shutdown behavior.
Limitations
  • LinkedIn's User Agreement prohibits automated access; the project explicitly warns that accounts may be restricted or banned and provides no account-safety guarantee.
  • Operation depends on LinkedIn's page structure and a real Chromium session, so layout changes, captchas, login confirmations, expired sessions, and slow networks can cause failures.
  • Several tools point to open GitHub issues rather than being labeled working, including profile retrieval, connection handling, people search, and message sending.
  • Concurrency is deliberately serialized, so multiple clients may encounter a browser-is-busy response and need to wait or retry.
  • The system persists browser profiles and cookie-related state locally and maintains a Chromium cache that can grow across releases.

How does this agent compare with similar options?

The README presents Unipile as the managed alternative. This project is free, open source, and runs locally with the user's browser session; Unipile provides a hosted API for LinkedIn Classic, Sales Navigator, and Recruiter while managing authentication, sessions, and infrastructure.

Key facts side by side with the most closely related agents.

Agent Source review Form / cost Stars Updated Language Full support on
LinkedIn MCP Server This agent 79 · Good MCP serverFree ★ 3.9k 3d ago Python —
Job Application Agent 83 · Good Agent plugin / skillFree ★ 160 today JavaScript Codex · Claude Code
Mnemoverse Memory 77 · Some gaps MCP serverFreemium ★ 27 today TypeScript ChatGPT · Claude Code
MagenticLite 68 · Some gaps CLIFree + model costs ★ 10k 2mo ago Python —

How does FollowAgents rate this agent?

FollowAgents source review · FARS-2.1
Good
79/ 100 5-point scale 4.0 / 5
This review covers the source as of Aug 14, 2026. The project has shipped 15 stable release(s) since, which have not been re-reviewed. The score and verdict describe the reviewed version only. Recent releases ↓
Trust 21/29
Reliability 11/14
Adaptability 15/18
Convention 16/18
Effectiveness 10/13
Verifiability 6/8
Why each dimension lost points
Trust21 / 29 · 3.6/5

The evidence clearly documents local execution, a default 127.0.0.1 HTTP bind, browser-profile and cookie locations, proxy routing scope, automatic import behavior, and a reduced Docker authentication-cookie subset. Proxy passwords can be supplied through environment variables, and CI actions are commit-pinned. Sending a message is marked as confirmation-gated, and terminal logout also requests confirmation. Deductions apply because browser-session import is enabled by default and reads LinkedIn cookies from an everyday browser, while connection requests and other write operations are not shown to share a comprehensive call-time confirmation policy. Python dependencies use lower bounds rather than a fully pinned set, and the recommended installation deliberately resolves @latest at every launch. Sent messages and connection requests have no practical rollback, while logout discards a session, so rollback is thin. The independent-project disclaimer, trademark statement, author identity, email, and license attribution justify full source-attribution credit.

Reliability11 / 14 · 3.9/5

The README, project metadata, CLI options, fixtures, and CI are broadly consistent about the local browser-session model, supported Python versions, and major operating modes. The supplied tests also show deliberate cross-process lease and multi-platform browser-behavior coverage. Self-consistency is reduced because feature status mixes an unexplained “working” label with issue references, and the README describes a broader feature set than the short package description. Dependencies, version floors, installer, and browser setup are identified, but availability still relies on runtime downloads, @latest resolution, LinkedIn page structure, and external login challenges. Failure guidance is unusually thorough and actionable, covering authentication, timeouts, browser contention, proxies, container misdetection, browser-version conflicts, and DLL problems, which justifies full marks for failure messages.

Adaptability15 / 18 · 4.2/5

The material explicitly serves developers, Claude Desktop users, generic MCP clients, Docker deployments, local development, and both stdio and HTTP operation, with scenario-specific configuration. The tool catalog and CLI reference establish useful boundaries, and several read tools require explicit section selection. Deductions apply because LinkedIn terms, rate or account restrictions, and a complete confirmation boundary for every state-changing tool are not documented. Tool names and filters support reasonably precise selection, but complete input schemas, ambiguity handling, and model invocation guidance are absent, limiting capability-boundary and trigger-precision scores.

Convention16 / 18 · 4.4/5

The README has clear organization, a tool catalog, several installation routes, a detailed CLI reference, examples, and extensive troubleshooting. Package, executable, and tool naming are coherent. Concurrent-use constraints, cookie-import limitations, proxy hazards, browser-cache growth, platform differences, and login challenges are documented thoroughly, justifying full known-limitations credit. Apache-2.0 metadata matches the complete LICENSE. A package version and Releases-based changelog route exist, but no actual changelog content or compatibility policy appears in the supplied files, so versioning is not thorough. The author, email, issue tracker, and repository provide a maintenance path, but there is no demonstrated team ownership, support commitment, or dedicated security contact; the publisher's registry status remains unknown rather than adverse.

Effectiveness10 / 13 · 3.8/5

The tools cover profiles, companies, jobs, feeds, and messages and expose logged-in LinkedIn browser data to general MCP clients, providing strong marginal value. Tool descriptions and explicit section selection improve usability, but no response schemas, representative outputs, pagination semantics, or field-stability commitments are supplied, so output usability is only adequate. The project is free and local, but users bear browser downloads, persistent-session management, login handling, frequent upgrades, scraping maintenance, verification challenges, and cache growth; the benefit appears favorable but is not comprehensively quantified.

Verifiability6 / 8 · 3.8/5

Project metadata, the README, CI, and test-support code cross-corroborate claims about versions, dependencies, testing workflow, local sessions, cross-process locking, and browser-identity checks. Several uncertain features are also tied to issue references. Claim traceability is reduced because the supplied evidence omits the primary server and tool implementations, response schemas, full test cases, and CI results; badges and “working” labels alone do not establish functional outcomes. The documentation often distinguishes constraints from recommendations, but some operational, safety, and feature-status statements remain assertions without consistently labeling their evidentiary basis or separating inference from demonstrated fact.

Risks and how to mitigate them
  • Automatic import reads LinkedIn cookies from a local browser and stores a valid session under ~/.linkedin-mcp; users should review host trust boundaries, filesystem permissions, and account risk before enabling it.
  • send_message and connect_with_person create external social effects. Only message sending is explicitly described as confirmation-gated, and the repository offers no rollback guarantee for a sent message or connection request.
  • The recommended @latest configuration resolves new code at launch, reducing reproducibility and widening the supply-chain update surface. High-assurance deployments should establish their own balance between prompt updates and reviewed version pinning.
  • The project depends on browser automation and authenticated sessions and may be affected by LinkedIn page changes, verification challenges, account policies, and service terms; the supplied material does not comprehensively assess those risks.
  • This assessment reviewed only the supplied static files. It did not run the server, tests, browser, or LinkedIn operations and did not independently validate README feature labels such as “working.”
Evidence confidence: Low Reviewed Aug 14, 2026 Reviewed revision 25f3a3bcd7c7 New commits since this review; the score may not cover them
See the full review method →

Recent releases

Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.

  1. v4.27.0
    Release notes excerpt
    Highlights - Multi-line messages. send_message sends line breaks and empty lines as one message. ([#1224](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1224)) - Apply links. get_job_apply_url returns the apply type and the employer's link. ([#1035](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1035) by @shbernal) - Sessions recover. A profile that lost its cookies gets them back before any page. ([#1251](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1251)) Features …
    View on GitHub ↗
  2. v4.26.2
    Release notes excerpt
    Breaking Changes - Python imports move from linkedin_mcp_server.scraping to linkedin_mcp_server.linkedin. ([#1189](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1189)) - Every Python name containing "scrap" is renamed, keywords too; error context: read_*. ([#1190](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1190)) <details> <summary><b>Bug Fixes (3)</b></summary> - --status now says another process holds the browser profile instead of failing. ([#1191](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1191)) …
    View on GitHub ↗
  3. v4.26.1
    Release notes excerpt
    Bug Fixes - send_message reports "Press Enter to Send" and explains how to switch that setting. ([#1109](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1109) by @Ymx1ZQ) - Keep an open chat overlay from blocking connect_with_person invitations. ([#1110](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1110) by @Ymx1ZQ) - Avoid needless browser setup when Patchright versions share the cache. ([#1162](https://github.com/stickerdaniel/linkedin-mcp-server/pull/1162)) …
    View on GitHub ↗

FAQ

Does it require an official LinkedIn API key?
No. It controls a real browser and uses an authenticated LinkedIn session, so a valid LinkedIn account and successful login are still required.
Can using it put my LinkedIn account at risk?
Yes. The project states that LinkedIn prohibits automated access and that accounts using automation may be restricted or banned. It offers no guarantee of account safety.
Can several MCP clients use the same session?
Several server processes can run on the same machine and runtime, but browser access is serialized. A client that exceeds the configured browser wait receives a busy response and must retry.
Why might the first tool call fail or return a pending state?
Patchright Chromium may still be downloading, or authentication may still be underway. Retry after setup or login completes, and increase page or tool timeouts on slower systems.
Can the MCP endpoint be exposed over a network?
Streamable HTTP is supported, but the endpoint has no built-in authentication. The documented examples bind or publish it on loopback; broader exposure requires an external access-control layer and appropriate allowed-host configuration.
View on GitHub ↗ Install ↓

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents