A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Open-source MCP server for LinkedIn. Give Claude and any MCP-compatible AI assistant access to profiles, companies, jobs
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.
| Tool | Description | Status |
|---|---|---|
get_person_profile | Get profile info with explicit section selection (experience, education, interests, honors, languages, certifications, skills, projects, contact_info, posts) | working |
get_my_profile | Get the authenticated user's own LinkedIn profile (same sections as get_person_profile) | working |
connect_with_person | Send a connection request or accept an incoming one, with optional note | #407 #432 #448 #454 |
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 | #442 |
search_conversations | Search messages by keyword | working |
send_message | Send a message to a LinkedIn user (requires confirmation) | #433 #441 |
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 |
search_people | Search for people by keywords, location, connection degree (1st/2nd/3rd), and current company | working |
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 |
close_session | Close browser session and clean up resources | working |
Prerequisites: Install uv.
Client Configuration
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["linkedin-scraper-mcp@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.
[!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 linkedin-scraper-mcp@latest --login.
Transport Modes:
stdioCLI Options:
--login - Open browser to log in and save persistent profile--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.--user-data-dir PATH - Path to persistent browser profile directory (default: ~/.linkedin-mcp/profile)--chrome-path PATH - Path to Chrome/Chromium executable (for custom browser installations)Basic Usage Examples:
# Run with debug logging
uvx linkedin-scraper-mcp@latest --log-level DEBUG
HTTP Mode Example (for web-based MCP clients):
uvx linkedin-scraper-mcp@latest --transport streamable-http --host 127.0.0.1 --port 8080 --path /mcp
Runtime server logs are emitted by FastMCP/Uvicorn.
Tool calls are serialized within a single server process to protect the shared
LinkedIn browser session. Concurrent client requests queue instead of running in
parallel. Use --log-level DEBUG to see scraper lock wait/acquire/release logs.
Test with mcp inspector:
bunx @modelcontextprotocol/inspectorStreamable HTTP as Transport TypeURL to http://localhost:8080/mcpInstallation issues:
curl -LsSf https://astral.sh/uv/install.sh | shuv --version (should be 0.4.0 or higher)uvx downloads all Python dependencies. On slow connections, uv's default 30s HTTP timeout may be too short. The recommended config above already sets UV_HTTP_TIMEOUT=300 (seconds) to avoid this.Session issues:
~/.linkedin-mcp/profile/~/.linkedin-mcp/patchright-browsers/Login issues:
--loginuvx linkedin-scraper-mcp@latest --login which opens a browser where you can solve it manually.Timeout issues:
--timeout 10000 or TIMEOUT=10000 (milliseconds, default 5000).--tool-timeout 300 or TOOL_TIMEOUT=300 (seconds, default 180).Custom Chrome path:
--chrome-path /path/to/chromeCHROME_PATH=/path/to/chromePrerequisites: Claude Desktop.
One-click installation for Claude Desktop users:
.mcpb artifact from releases.mcpb file to install it into Claude DesktopOn startup, the MCP Bundle starts preparing the shared Patchright Chromium browser cache in the background. If you call a tool too early, Claude will surface a setup-in-progress error. On the first tool call that needs authentication, the server opens a LinkedIn login browser window and asks you to retry after sign-in.
First-time setup behavior:
~/.linkedin-mcp/patchright-browsers/Login issues:
--loginuvx linkedin-scraper-mcp@latest --login which opens a browser where you can solve captchas manually. See the uvx setup for prerequisites.Timeout issues:
--timeout 10000 or TIMEOUT=10000 (milliseconds, default 5000).--tool-timeout 300 or TOOL_TIMEOUT=300 (seconds, default 180).Prerequisites: Make sure you have Docker installed and running, and uv installed on the host for the one-time --login step.
Docker runs headless (no browser window), so you need to create a browser profile locally first and mount it into the container.
Step 1: Create profile on the host (one-time setup)
uvx linkedin-scraper-mcp@latest --login
This opens a browser window where you log in manually (5 minute timeout for 2FA, captcha, etc.). The browser profile and cookies are saved under ~/.linkedin-mcp/. On startup, Docker derives a Linux browser profile from your host cookies and creates a fresh session each time. If you experience stability issues with Docker, consider using the uvx setup instead.
Step 2: Configure Claude Desktop with Docker
{
"mcpServers": {
"linkedin": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "~/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
"stickerdaniel/linkedin-mcp-server:latest"
]
}
}
}
[!NOTE] Docker creates a fresh session on each startup. Sessions may expire over time — run
uvx linkedin-scraper-mcp@latest --loginagain if you encounter authentication issues.
[!NOTE] Why can't I run
--loginin Docker? Docker containers don't have a display server. Create a profile on your host using the uvx setup and mount it into Docker.
Transport Modes:
stdioCLI Options:
--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 all stored LinkedIn auth state, including source and derived runtime profiles--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.--user-data-dir PATH - Path to persistent browser profile directory (default: ~/.linkedin-mcp/profile)--chrome-path PATH - Path to Chrome/Chromium executable (rarely needed in Docker)[!NOTE]
--loginand--no-headlessare not available in Docker (no display server). Use the uvx setup to create profiles.
HTTP Mode Example (for web-based MCP clients):
docker run -it --rm \
-v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp \
-p 8080:8080 \
stickerdaniel/linkedin-mcp-server:latest \
--transport streamable-http --host 0.0.0.0 --port 8080 --path /mcp
Runtime server logs are emitted by FastMCP/Uvicorn.
Test with mcp inspector:
bunx @modelcontextprotocol/inspectorStreamable HTTP as Transport TypeURL to http://localhost:8080/mcpDocker issues:
docker psLogin issues:
--loginuvx linkedin-scraper-mcp@latest --login which opens a browser where you can solve captchas manually. See the uvx setup for prerequisites.Timeout issues:
--timeout 10000 or TIMEOUT=10000 (milliseconds, default 5000).--tool-timeout 300 or TOOL_TIMEOUT=300 (seconds, default 180).Custom Chrome path:
--chrome-path /path/to/chromeCHROME_PATH=/path/to/chromeContributions are welcome! See CONTRIBUTING.md for architecture guidelines and checklists. Please open an issue first to discuss the feature or bug fix before submitting a PR.
Prerequisites: Git and uv installed
# 1. Clone repository
git clone https://github.com/stickerdaniel/linkedin-mcp-server
cd linkedin-mcp-server
# 2. Install UV package manager (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 3. Install dependencies
uv sync
uv sync --group dev
# 4. Install pre-commit hooks
uv run pre-commit install
# 5. Start the server
uv run -m linkedin_mcp_server
The local server uses the same managed-runtime flow as MCPB and uvx: it prepares the Patchright Chromium browser cache in the background and opens LinkedIn login on the first auth-requiring tool call. You can still run uv run -m linkedin_mcp_server --login when you want to create the session explicitly.
CLI Options:
--login - Open browser to log in and save persistent profile--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.--status - Check if current session is valid and exit--user-data-dir PATH - Path to persistent browser profile directory (default: ~/.linkedin-mcp/profile)--slow-mo MS - Delay between browser actions in milliseconds (default: 0, useful for debugging)--user-agent STRING - Custom browser user agent--viewport WxH - Browser viewport size (default: 1280x720)--chrome-path PATH - Path to Chrome/Chromium executable (for custom browser installations)--help - Show helpNote: Most CLI options have environment variable equivalents. See
.env.examplefor details.
HTTP Mode Example (for web-based MCP clients):
uv run -m linkedin_mcp_server --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp
Claude Desktop:
{
"mcpServers": {
"linkedin": {
"command": "uv",
"args": ["--directory", "/path/to/linkedin-mcp-server", "run", "-m", "linkedin_mcp_server"]
}
}
}
stdio is used by default for this config.
Login issues:
--login--login command opens a browser where you can solve it manually.Scraping issues:
--no-headless to see browser actions and debug scraping problems--log-level DEBUG to see more detailed loggingSession issues:
~/.linkedin-mcp/profile/--logout to clear the profile and start freshPython/Patchright issues:
python --version (should be 3.12+)uv run patchright install chromiumuv sync --reinstallTimeout issues:
--timeout 10000 or TIMEOUT=10000 (milliseconds, default 5000).--tool-timeout 300 or TOOL_TIMEOUT=300 (seconds, default 180).Custom Chrome path:
--chrome-path /path/to/chromeCHROME_PATH=/path/to/chrome[!IMPORTANT] FAQ
Is this safe to use? Will I get banned? This tool controls a real browser session; it doesn't exploit undocumented APIs or bypass authentication. LinkedIn's User Agreement prohibits automated access, and accounts using automated tools can be restricted or banned. Use at your own risk; there is no guarantee of account safety. If you encounter any issues, let me know in the Discussions.
What if my agents execute too many actions? Tool calls run sequentially through a queue. You are responsible for the volume of automation you run; use it sparingly and prompt your agents responsibly.
Built with FastMCP and Patchright.
Use in accordance with LinkedIn's User Agreement. Automated access may violate LinkedIn's terms and can lead to account restrictions. This tool is for personal use only and comes with no warranty of any kind.
This project is licensed under the Apache 2.0 license.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
English-first Korean equity intelligence MCP — DART filings, foreign-holder 5%-rule flows, activist filings, KRX news. F
Unity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control sc