trackmcp
Back to directory
prakharagarwal-dev

linkedin-mcp-server

View on GitHub

A LinkedIn MCP server to find jobs, search people, research companies, manage your network, publish and engage with posts, and read or send messages.

2 stars PythonOthers Updated Aug 16, 2026
automationlinkedinmcpmodel-context-protocolplaywrightpythonai-agentsbrowser-automationcareer-toolsclaudecodexjob-searchjobslinkedin-automationmcp-servermessagingnetworkingopen-sourcerecruitingsocial-media-automation

Documentation

LinkedIn MCP Server

CI
CodeQL
PyPI
Python 3.12–3.14
License: Apache-2.0
MCP Registry
Glama
OpenSSF Scorecard
PyPI provenance
Container provenance and SBOM

> Disclaimer: LinkedIn is a registered trademark of LinkedIn Corporation

> and its affiliates. LinkedIn MCP Server is an independent, unofficial project

> and is not affiliated with, endorsed by, sponsored by, or associated with

> LinkedIn Corporation or its affiliates.

A LinkedIn MCP server to find jobs, search people, research companies, manage

your network, publish and engage with posts, and read or send messages.

⚡ Quickstart

1. Connect Claude Code

bash
claude mcp add --scope user --transport stdio linkedin-mcp -- \
  uvx --from linkedin-mcp-local linkedin-mcp serve --transport stdio

2. Sign in to LinkedIn

Restart Claude Code. A dedicated browser window opens automatically—sign in to

LinkedIn and complete any required verification.

> [!NOTE]

> Your session is saved locally and reused automatically.

Supported platforms

The server runs natively on Windows, macOS, and Linux. CI executes the complete

offline suite on Windows, macOS, Linux x86-64, and Linux ARM64. Browser and OS

version requirements follow the official

Playwright Python system requirements.

3. Try your first request

text
Find remote software engineering jobs in India posted on LinkedIn this week.

🛠️ Tools

> [!TIP]

> Verified means the tool passed an end-to-end live compatibility test against LinkedIn's visible web UI on the date shown.

AreaFunctionMCP toolLinkedIn UI compatibilityWhat it does
JobsSearch jobs`linkedin.jobs.search`![LinkedIn UI compatibility][status-linkedin-jobs-search]![Compatibility check date][status-checked-on]Search by keywords, location, distance, date, workplace, experience, employment type, company, industry, function, title, benefits, Easy Apply, verification, applicant count, network, and other visible filters.
Read job details`linkedin.jobs.get`![LinkedIn UI compatibility][status-linkedin-jobs-get]![Compatibility check date][status-checked-on]Read the complete job description, company, application method, and visible hiring team.
PeopleSearch people`linkedin.people.search`![LinkedIn UI compatibility][status-linkedin-people-search]![Compatibility check date][status-checked-on]Search by keywords, connection degree, hiring status, location, current or past company, title, school, industry, services, language, connections, and followers.
Read profiles`linkedin.people.get`![LinkedIn UI compatibility][status-linkedin-people-get]![Compatibility check date][status-checked-on]Read the complete visible profile or request selected sections such as About, experience, education, skills, projects, certifications, and recommendations.
CompaniesSearch companies`linkedin.companies.search`![LinkedIn UI compatibility][status-linkedin-companies-search]![Compatibility check date][status-checked-on]Search by keywords, headquarters, industry, size, available jobs, and first-degree connections.
Read company details`linkedin.companies.get`![LinkedIn UI compatibility][status-linkedin-companies-get]![Compatibility check date][status-checked-on]Read Overview and About information, including website, headquarters, size, type, founding year, and specialties.
PostsSearch posts`linkedin.posts.search`![LinkedIn UI compatibility][status-linkedin-posts-search]![Compatibility check date][status-checked-on]Search by keywords, date, content type, author, company, relationship, mentions, author industry, and other visible filters.
Read posts`linkedin.posts.get`![LinkedIn UI compatibility][status-linkedin-posts-get]![Compatibility check date][status-checked-on]Read complete content, media, links, mentions, hashtags, reactions, and engagement.
Read discussions`linkedin.posts.comments.list`![LinkedIn UI compatibility][status-linkedin-posts-comments-list]![Compatibility check date][status-checked-on]Read paginated comments, replies, attachments, and reactions.
Publish posts`linkedin.posts.create`![LinkedIn UI compatibility][status-linkedin-posts-create]![Compatibility check date][status-checked-on]Publish supported personal text, link, image, video, document, poll, celebration, event, hiring, and expert-request posts.
Comment`linkedin.posts.comment`![LinkedIn UI compatibility][status-linkedin-posts-comment]![Compatibility check date][status-checked-on]Add text, links, emoji, mentions, photos, or GIFs to posts.
React`linkedin.posts.react`![LinkedIn UI compatibility][status-linkedin-posts-react]![Compatibility check date][status-checked-on]Add, change, or remove reactions on posts.
NetworkList connections`linkedin.connections.list`![LinkedIn UI compatibility][status-linkedin-connections-list]![Compatibility check date][status-checked-on]Browse established first-degree connections with sorting and pagination.
Search connections`linkedin.connections.search`![LinkedIn UI compatibility][status-linkedin-connections-search]![Compatibility check date][status-checked-on]Search existing connections using applicable People filters.
List invitations`linkedin.invitations.list`![LinkedIn UI compatibility][status-linkedin-invitations-list]![Compatibility check date][status-checked-on]Browse received and sent invitations using LinkedIn's visible filters.
Send invitations`linkedin.invitations.send`![Not checked][status-not-checked]Send connection requests with optional notes.
Accept invitations`linkedin.invitations.accept`![Not checked][status-not-checked]Accept incoming connection requests.
Ignore invitations`linkedin.invitations.ignore`![Not checked][status-not-checked]Ignore incoming connection requests.
MessagingSearch messages`linkedin.messaging.search`![LinkedIn UI compatibility][status-linkedin-messaging-search]![Compatibility check date][status-checked-on]Search by recipient or message text using inbox categories and filters.
Read conversations`linkedin.messaging.conversation.get`![LinkedIn UI compatibility][status-linkedin-messaging-conversation-get]![Compatibility check date][status-checked-on]Read message history, replies, edits, reactions, and attachments.
Send messages`linkedin.messaging.send`![LinkedIn UI compatibility][status-linkedin-messaging-send]![Compatibility check date][status-checked-on]Send or reply in one-to-one conversations with text, links, emoji, files, images, and GIFs.
ServerCheck runtime`linkedin.server.status`![LinkedIn UI compatibility][status-linkedin-server-status]![Compatibility check date][status-checked-on]Inspect the shared runtime, queue, and active browser operation.
Check LinkedIn session`linkedin.session.status`![LinkedIn UI compatibility][status-linkedin-session-status]![Compatibility check date][status-checked-on]Inspect browser-profile, authentication, login, and pause state.
List capabilities`linkedin.capabilities.list`![LinkedIn UI compatibility][status-linkedin-capabilities-list]![Compatibility check date][status-checked-on]Inspect available capabilities, versions, read/write effects, and required LinkedIn surfaces.

`NOT CHECKED` tools remain covered by the offline simulator on every pull request.

[status-linkedin-jobs-search]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.jobs.search.json&label=

[status-linkedin-jobs-get]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.jobs.get.json&label=

[status-linkedin-people-search]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.people.search.json&label=

[status-linkedin-people-get]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.people.get.json&label=

[status-linkedin-companies-search]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.companies.search.json&label=

[status-linkedin-companies-get]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.companies.get.json&label=

[status-linkedin-posts-search]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.posts.search.json&label=

[status-linkedin-posts-get]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.posts.get.json&label=

[status-linkedin-posts-comments-list]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.posts.comments.list.json&label=

[status-linkedin-posts-create]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.posts.create.json&label=

[status-linkedin-posts-comment]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.posts.comment.json&label=

[status-linkedin-posts-react]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.posts.react.json&label=

[status-linkedin-connections-list]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.connections.list.json&label=

[status-linkedin-connections-search]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.connections.search.json&label=

[status-linkedin-invitations-list]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.invitations.list.json&label=

[status-linkedin-messaging-search]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.messaging.search.json&label=

[status-linkedin-messaging-conversation-get]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.messaging.conversation.get.json&label=

[status-linkedin-messaging-send]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.messaging.send.json&label=

[status-linkedin-server-status]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.server.status.json&label=

[status-linkedin-session-status]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.session.status.json&label=

[status-linkedin-capabilities-list]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Flinkedin.capabilities.list.json&label=

[status-checked-on]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fprakharagarwal-dev%2Flinkedin-mcp-server%2Ftool-status%2Fbadges%2Fchecked-on.json&label=

[status-not-checked]: https://img.shields.io/badge/status-not_checked-lightgrey?label=

See the capability matrix for exact filters,

supported formats, inputs, outputs, limits, and unsupported features.

📦 Installation

Claude Code

bash
claude mcp add --scope user --transport stdio linkedin-mcp -- \
  uvx --from linkedin-mcp-local linkedin-mcp serve --transport stdio

Check it with `claude mcp list`. See the

Claude Code MCP documentation.

Claude Desktop

Download for Claude Desktop

Download the `.mcpb` file, then open **Settings → Extensions → Advanced

settings → Install Extension**.

See Claude Desktop's extension documentation.

Codex and ChatGPT Desktop

bash
codex mcp add linkedin-mcp -- \
  uvx --from linkedin-mcp-local linkedin-mcp serve --transport stdio

Check it with `codex mcp list`. Codex CLI, the Codex IDE extension, and ChatGPT

Desktop share this local configuration. Restart the client after adding it. See

the Codex MCP documentation.

VS Code and GitHub Copilot

Install in VS Code
Install in VS Code Insiders

Or add this to `.vscode/mcp.json`:

json
{
  "servers": {
    "linkedin-mcp": {
      "command": "uvx",
      "args": ["--from", "linkedin-mcp-local", "linkedin-mcp", "serve", "--transport", "stdio"]
    }
  }
}

See the VS Code MCP documentation.

Cursor

Install in Cursor

For manual setup, open **Cursor Settings → MCP →

Add new MCP server**, set the command to `uvx`, and set the arguments to

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`.

See the Cursor MCP documentation.

Gemini CLI

In `~/.gemini/settings.json`, add a local server named `linkedin-mcp` under

`mcpServers` with command `uvx` and arguments

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`, then run

`gemini mcp list`.

See the Gemini CLI MCP documentation.

Windsurf

Open Settings → AI → Manage MCP Servers, or add a local server named

`linkedin-mcp` to `~/.codeium/windsurf/mcp_config.json` with command `uvx` and

arguments `--from linkedin-mcp-local linkedin-mcp serve --transport stdio`.

See the Windsurf MCP documentation.

Cline

Open MCP Servers → Configure, then add a local server named `linkedin-mcp`

with command `uvx` and arguments

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`.

See the Cline MCP documentation.

Roo Code

Open Roo Code's MCP settings and add a local server named `linkedin-mcp` to the

global file or `.roo/mcp.json`, using command `uvx` and arguments

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`.

See the Roo Code MCP documentation.

Zed

Add this to Zed settings:

json
{
  "context_servers": {
    "linkedin-mcp": {
      "command": "uvx",
      "args": ["--from", "linkedin-mcp-local", "linkedin-mcp", "serve", "--transport", "stdio"]
    }
  }
}

See the Zed MCP documentation.

Goose

Install in Goose

Or add a custom stdio extension with command `uvx` and arguments

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`, or start one

CLI session with:

bash
goose session --with-extension \
  "uvx --from linkedin-mcp-local linkedin-mcp serve --transport stdio"

See the Goose documentation.

OpenCode

For OpenCode v2, add this to `opencode.json`:

json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "linkedin-mcp": {
        "type": "local",
        "command": ["uvx", "--from", "linkedin-mcp-local", "linkedin-mcp", "serve", "--transport", "stdio"]
      }
    }
  }
}

See the OpenCode MCP documentation.

JetBrains AI Assistant

Open Settings → Tools → AI Assistant → Model Context Protocol (MCP), click

Add, set the command to `uvx`, and set the arguments to

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`.

See the JetBrains MCP documentation.

Continue

Create `.continue/mcpServers/linkedin-mcp.json` with a local server named

`linkedin-mcp`, command `uvx`, and arguments

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`.

See the Continue MCP documentation.

Warp

Open Settings → AI → Manage MCP Servers → Add, name the server

`linkedin-mcp`, set the command to `uvx`, and set the arguments to

`--from linkedin-mcp-local linkedin-mcp serve --transport stdio`.

See the Warp MCP documentation.

💡 Examples

Find jobs

text
Find remote software engineering jobs in India posted on LinkedIn this week with Easy Apply.

Research people

text
Find LinkedIn profiles for engineering managers at Stripe in India and show me their relevant experience.

Research companies

text
Find fintech companies in Bengaluru on LinkedIn with 51–200 employees and summarize each company.

Explore posts

text
Find recent LinkedIn posts about AI agents and summarize the most useful discussions.

Manage your network

text
Show my latest received connection requests on LinkedIn.
text
Send a LinkedIn connection request to  with the note .

Send messages

text
Send  on LinkedIn to .

🏗️ Architecture

text
[Claude | Codex | Cursor | ...]
               |
       stdio / loopback HTTP
               v
      [Typed MCP boundary]
               |
               v
       [Fair queue + pacing]
               |
      one operation at a time
               v
[Capability executor] ---> [Process-local calls, cursors, evidence]
               |
               v
      [Capability page objects]
               |
               v
[Browser manager: fresh page per call]  [Persistent auth profile]
               |
        visible web UI only
               v
           [LinkedIn]

Everything runs locally. There is no hosted backend, telemetry, database,

external queue, LangGraph runtime, or credential service. Browser cookies live

only in the local Playwright profile. The first client starts one shared local

runtime; later clients attach to it, and fair scheduling gives each client a

turn between complete tool calls. Operation state lasts only for that runtime.

Read the full architecture and privacy policy.

🔒 Privacy Policy

The server has no maintainer-operated backend, analytics, advertising, or

telemetry. LinkedIn receives normal visible-UI requests, and the invoking MCP

client receives tool results under its own data policy; the project sends

nothing to the maintainer. Read the complete privacy policy for

processing, storage, sharing, retention, and deletion details.

🛡️ Safety

Use of this software is at your own risk. You are solely responsible for

complying with LinkedIn's User Agreement,

applicable laws, and third-party rights. LinkedIn may limit or restrict accounts

that use prohibited automation.

The maintainers do not authorize spam, unauthorized data collection, privacy

violations, or circumvention of access controls.

  • Use only accounts and activity you are authorized to operate.
  • The server pauses on authentication expiry, checkpoints, restriction pages,

permission failures, and configuration errors.

  • It does not implement CAPTCHA bypass, proxy rotation, fingerprint spoofing,

credential harvesting, stealth plugins, or private LinkedIn endpoints.

  • Never commit or share the persistent browser profile or local assets.

See SECURITY.md and the security design.

📚 More documentation

❤️ Support the project

If LinkedIn MCP Server is useful to you:

🌐 Let's connect

Have feedback or an idea for LinkedIn MCP Server?

⚖️ License

Licensed under the Apache License 2.0.

Frequently asked questions

What is linkedin-mcp-server?

linkedin-mcp-server is A LinkedIn MCP server to find jobs, search people, research companies, manage your network, publish and engage with posts, and read or send messages.

How do I install linkedin-mcp-server?

Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

Is linkedin-mcp-server open source?

Yes — it is hosted on GitHub at https://github.com/prakharagarwal-dev/linkedin-mcp-server and has 2 stars.

Related MCP tools

Run your own MCP server? See who uses it and what to fix.

Measure it with TrackMCP