Through this LinkedIn MCP server, AI assistants like Claude can connect to your LinkedIn. Access profiles and companies, search for jobs, or get job details.
Important Breaking change: LinkedIn recently made some changes to prevent scraping. The newest version uses Patchright with persistent browser profiles instead of Playwright with session files. Old Prerequisites: Install uv. Client Configuration The 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 Transport Modes: CLI Options: Basic Usage Examples: HTTP Mode Example (for web-based MCP clients): 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 Test with mcp inspector: Installation issues: Session issues: Login issues: Timeout issues: Custom Chrome path: Prerequisites: Claude Desktop. One-click installation for Claude Desktop users: On 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: Login issues: Timeout issues: Prerequisites: Make sure you have Docker installed and running, and uv installed on the host for the one-time 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) 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 Step 2: Configure Claude Desktop with Docker Note Docker creates a fresh session on each startup. Sessions may expire over time — run Note Why can't I run Transport Modes: CLI Options: [!NOTE]
HTTP Mode Example (for web-based MCP clients): Runtime server logs are emitted by FastMCP/Uvicorn. Test with mcp inspector: Docker issues: Login issues: Timeout issues: Custom Chrome path: Contributions 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 The local server uses the same managed-runtime flow as MCPB and CLI Options: Note: Most CLI options have environment variable equivalents. See HTTP Mode Example (for web-based MCP clients): Claude Desktop: Login issues: Scraping issues: Session issues: Python/Patchright issues: Timeout issues: Custom Chrome path: Built with FastMCP and Patchright. Use in accordance with LinkedIn's Terms of Service. Web scraping may violate LinkedIn's terms. This tool is for personal use only. This project is licensed under the Apache 2.0 license.
Research the background of this candidate https://www.linkedin.com/in/stickerdaniel/
Get this company profile for partnership discussions https://www.linkedin.com/company/inframs/
Suggest improvements for my CV to target this job posting https://www.linkedin.com/jobs/view/4252026496
What has Anthropic been posting about recently? https://www.linkedin.com/company/anthropicresearch/
Tool
Description
Status
get_person_profileGet profile info with explicit section selection (experience, education, interests, honors, languages, certifications, contact_info, posts)
working
connect_with_personSend a connection request or accept an incoming one, with optional note
#304
get_sidebar_profilesExtract profile URLs from sidebar recommendation sections ("More profiles for you", "Explore premium profiles", "People you may know") on a profile page
working
get_inboxList recent conversations from the LinkedIn messaging inbox
working
get_conversationRead a specific messaging conversation by username or thread ID
#307
search_conversationsSearch messages by keyword
working
send_messageSend a message to a LinkedIn user (requires confirmation)
#344
get_company_profileExtract company information with explicit section selection (posts, jobs)
working
get_company_postsGet recent posts from a company's LinkedIn feed
working
search_jobsSearch for jobs with keywords and location filters
working
search_peopleSearch for people by keywords and location
working
get_job_detailsGet detailed information about a specific job posting
working
close_sessionClose browser session and clean up resources
working
session.json files and LINKEDIN_COOKIE env vars are no longer supported. Run --login again to create a new profile + cookie file that can be mounted in docker. 02/2026
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": ["linkedin-scraper-mcp@latest"],
"env": { "UV_HTTP_TIMEOUT": "300" }
}
}
}@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.uvx linkedin-scraper-mcp@latest --login.🔧 Configuration
stdio
--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)--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)# Run with debug logging
uvx linkedin-scraper-mcp@latest --log-level DEBUGuvx linkedin-scraper-mcp@latest --transport streamable-http --host 127.0.0.1 --port 8080 --path /mcp
--log-level DEBUG to see scraper lock wait/acquire/release logs.
bunx @modelcontextprotocol/inspectorStreamable HTTP as Transport TypeURL to http://localhost:8080/mcp❗ Troubleshooting
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.
~/.linkedin-mcp/profile/~/.linkedin-mcp/patchright-browsers/
--loginuvx linkedin-scraper-mcp@latest --login which opens a browser where you can solve it manually.
--timeout 10000TIMEOUT=10000
--chrome-path /path/to/chromeCHROME_PATH=/path/to/chrome
.mcpb artifact from releases.mcpb file to install it into Claude Desktop❗ Troubleshooting
~/.linkedin-mcp/patchright-browsers/
--loginuvx linkedin-scraper-mcp@latest --login which opens a browser where you can solve captchas manually. See the uvx setup for prerequisites.
--timeout 10000TIMEOUT=10000
--login step.uvx linkedin-scraper-mcp@latest --login
~/.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.{
"mcpServers": {
"linkedin": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "~/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
"stickerdaniel/linkedin-mcp-server:latest"
]
}
}
}uvx linkedin-scraper-mcp@latest --login again if you encounter authentication issues.--login in Docker? Docker containers don't have a display server. Create a profile on your host using the uvx setup and mount it into Docker.🔧 Configuration
stdio
--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)--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)
--login and --no-headless are not available in Docker (no display server). Use the uvx setup to create profiles.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
bunx @modelcontextprotocol/inspectorStreamable HTTP as Transport TypeURL to http://localhost:8080/mcp❗ Troubleshooting
docker ps
--loginuvx linkedin-scraper-mcp@latest --login which opens a browser where you can solve captchas manually. See the uvx setup for prerequisites.
--timeout 10000TIMEOUT=10000
--chrome-path /path/to/chromeCHROME_PATH=/path/to/chrome
# 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
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.🔧 Configuration
--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)--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 help
.env.example for details.uv run -m linkedin_mcp_server --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp
{
"mcpServers": {
"linkedin": {
"command": "uv",
"args": ["--directory", "/path/to/linkedin-mcp-server", "run", "-m", "linkedin_mcp_server"]
}
}
}stdio is used by default for this config.❗ Troubleshooting
--login--login command opens a browser where you can solve it manually.
--no-headless to see browser actions and debug scraping problems--log-level DEBUG to see more detailed logging
~/.linkedin-mcp/profile/--logout to clear the profile and start fresh
python --version (should be 3.12+)uv run patchright install chromiumuv sync --reinstall
--timeout 10000TIMEOUT=10000
--chrome-path /path/to/chromeCHROME_PATH=/path/to/chrome
