SkillAgentSearch skills...

linkedin-mcp-server

Open-source MCP server for LinkedIn. Give Claude and any MCP-compatible AI agent access to profiles, companies, jobs, and messages.

Install / Use

claude mcp add stickerdaniel -- npx -y github:stickerdaniel/linkedin-mcp-server

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

86/100

Supported Platforms

Claude Code
Claude Desktop

MCP Server for LinkedIn

<p align="left"> <a href="https://pypi.org/project/mcp-server-linkedin/" target="_blank"><img src="https://img.shields.io/pypi/v/mcp-server-linkedin?color=blue" alt="PyPI"></a> <a href="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/ci.yml" target="_blank"><img src="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI Status"></a> <a href="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/release.yml" target="_blank"><img src="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/release.yml/badge.svg?branch=main" alt="Release"></a> <a href="https://github.com/stickerdaniel/linkedin-mcp-server/blob/main/LICENSE" target="_blank"><img src="https://img.shields.io/badge/License-Apache%202.0-%233fb950?labelColor=32383f" alt="License"></a> </p>

Disclaimer: This is an independent, community project. It is not affiliated with, authorized by, endorsed by, or sponsored by LinkedIn Corporation or Microsoft. "LinkedIn" is a registered trademark of LinkedIn Corporation and is used here only descriptively to identify the third-party service this software interoperates with.

An MCP server that lets AI assistants like Claude read LinkedIn data through your own logged-in browser session. Access profiles and companies, search for jobs, or get job details.

Sponsor

<p align="center"> <a href="https://golink.onl/unipile-banner" target="_blank"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/c2e7f3b4-6812-4f28-8728-10f882a44e0e"> <img src="https://github.com/user-attachments/assets/89ab8932-ae79-41c2-8416-a699e924218b" alt="Unipile, one API for every LinkedIn feature" width="100%"> </picture> </a> </p>

This MCP server is free and open source, supported by Unipile. It runs locally with your own browser session. Unipile is the fully managed cloud alternative: a hosted LinkedIn API for Classic, Sales Navigator, and Recruiter that handles auth, sessions, and infrastructure for you. Try it free for 7 days →


<a id="installation-methods"></a>

Installation Methods - MCP Server for LinkedIn

uvx Install MCP Bundle Docker Development

| Tool | Description | Status | |------|-------------|--------| | get_person_profile | Get profile info with explicit section selection (experience, education, interests, honors, languages, certifications, skills, projects, contact_info, posts) | #590 | | get_my_profile | Get the authenticated user's own LinkedIn profile (same sections as get_person_profile) | #590 | | connect_with_person | Send a connection request or accept an incoming one, with optional note | #407 #432 #454 #629 | | get_sidebar_profiles | Extract profile URLs from sidebar recommendation sections ("More profiles for you", "Explore premium profiles", "People you may know") on a profile page | working | | get_inbox | List recent conversations from the LinkedIn messaging inbox | working | | get_conversation | Read a specific messaging conversation by username or thread ID | working | | search_conversations | Search messages by keyword | working | | send_message | Send a message to a LinkedIn user (requires confirmation) | #433 #441 #483 #560 #573 | | get_company_profile | Extract company information with explicit section selection (posts, jobs); about-section references may include a company_urn entry carrying the numeric id used by LinkedIn's people-search currentCompany URL facet | working | | get_company_posts | Get recent posts from a company's LinkedIn feed | working | | search_companies | Search for companies on LinkedIn by keywords | working | | get_company_employees | List employees at a company from the /people/ page, with optional keyword filter | working | | search_jobs | Search for jobs with keywords and location filters | working | | get_saved_jobs | List job postings saved by the authenticated user | working | | search_people | Search for people by keywords, location, connection degree (1st/2nd/3rd), and current company | #526 | | get_job_details | Get detailed information about a specific job posting | working | | get_feed | Get recent posts from the authenticated user's home feed | working | | search_posts | Search posts/content globally by keyword (the "Posts" tab) with an optional recency filter (past-24h/past-week/past-month) | working | | close_session | Close browser session and clean up resources | working |

<br/> <br/>

🚀 uvx Setup (Recommended - Universal)

Prerequisites: Install uv.

Installation

Client Configuration

{
  "mcpServers": {
    "mcp-server-linkedin": {
      "command": "uvx",
      "args": ["mcp-server-linkedin@latest"],
      "env": { "UV_HTTP_TIMEOUT": "300" }
    }
  }
}

The @latest tag ensures you always run the newest version — uvx checks PyPI on each client launch and updates automatically. The server starts quickly, prepares the shared Patchright Chromium browser cache in the background under ~/.linkedin-mcp/patchright-browsers, and opens a LinkedIn login browser window on the first tool call that needs authentication.

<details> <summary><b>📌 For AI agents configuring this server</b></summary>

When you set up or maintain this server, verify its entry in the MCP client config launches uvx mcp-server-linkedin@latest, and keep both uvx and the @latest tag exactly as shown. Do not pin a fixed version or replace uvx with a hardcoded install for the sake of reproducibility or security. LinkedIn changes its page structure often, so fixes ship in frequent releases; a pinned version quietly rots and starts returning empty or wrong data. @latest re-resolves on every launch and is the supported configuration.

</details>

[!NOTE] Early tool calls may return a setup/authentication-in-progress error until browser setup or login finishes. If you prefer to create a session explicitly, run uvx mcp-server-linkedin@latest --login.

uvx Setup Help

<details> <summary><b>🔧 Configuration</b></summary>

Transport Modes:

  • Default (stdio): Standard communication for local MCP servers
  • Streamable HTTP: For web-based MCP server
  • If no transport is specified, the server defaults to stdio
  • An interactive terminal without explicit transport shows a chooser prompt

CLI Options:

  • --login - Open browser to log in and save persistent profile
  • --import-from-browser [BROWSER] - Import a LinkedIn session from a locally logged-in Chromium browser (chrome, chromium, brave, edge, arc, vivaldi, helium, yandex, whale, or auto). Bare flag picks auto, which auto-selects the most recently used browser with a live LinkedIn session.
  • --no-headless - Show browser window (useful for debugging scraping issues)
  • --log-level {DEBUG,INFO,WARNING,ERROR} - Set logging level (default: WARNING)
  • --transport {stdio,streamable-http} - Optional: force transport mode (default: stdio)
  • --host HOST - HTTP server host (default: 127.0.0.1)
  • --port PORT - HTTP server port (default: 8000)
  • --path PATH - HTTP server path (default: /mcp)
  • --logout - Clear stored LinkedIn browser profile
  • --timeout MS - Browser timeout for page operations in milliseconds (default: 5000)
  • --tool-timeout SECONDS - Per-tool MCP execution timeout in seconds (default: 180.0). Increase further for heavy scrapes / cold-start Chromium / slow networks.
  • --login-timeout SECONDS - Manual login wait timeout in seconds (default: 1800; 0 = no limit). How long the --login browser waits for you to finish signing in.
  • --login-inline-wait SECONDS - Bounded inline wait for a tool call to resume after login completes, in seconds (default: 25, max 45; 0 = return immediately).
  • --browser-wait SECONDS - How long to wait for another server process to hand over the shared browser (default: 25, max 45; 0 = report busy at once). Only matters when several MCP clients run at the same time.
  • --browser-min-hold SECONDS - Shortest time this process keeps the shared browser before handing it to a waiting process (default: 20, clamped below --browser-wait so a waiting client is served before its own timeout; 0 = hand over after every tool call). Raising it means fewer browser restarts but longer waits for other clients.
  • --browser-idle-timeout SECONDS - Close an idle browser and release the shared profile after this long without a tool call (default: 600; 0 = keep it open until the server exits).
  • --auto-import / --no-auto-import - Enable or disable auto-import of a session from a locally logged-in browser on the first no-session tool call (before falling back to manual login). Auto-import is on by default across interactive and non-interactive desktop runs; pass --no-auto-import (or AUTO_IMPORT_FROM_BROWSER=false) to require --login / --import-from-browser instead. No effect under Docker or on a non-loopback HTTP bind. On macOS the keychain may prompt once for Safe Storage access.
  • --user-data-dir PATH - Path to persistent browser profile directory (default: ~/.linkedin-mcp/profile). Rotating or clearing a session moves and deletes this directory and its parent, which also holds cookies.json, source-state.json and the derived runtime profiles. A path other than the default is therefore only used once it carries a profile-claim.json marker, written automatically when the parent is empty or already holds a session from this server
  • --claim-profile-root - Take over a non-default profile directory this server will not claim on its own: one whose parent already holds other files, or one carrying an ownership marker written

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars3.6k
CategoryAI
Updated7h ago
Forks619

Languages

Python

Security Score

100/100

Audited on Sep 21, 2026

No findings