[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82396":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":45,"readmeContent":46,"aiSummary":47,"trendingCount":16,"starSnapshotCount":16,"syncStatus":48,"lastSyncTime":49,"discoverSource":50},82396,"linkedin-mcp-server","stickerdaniel\u002Flinkedin-mcp-server","stickerdaniel","Open-source MCP server for LinkedIn. Give Claude and any MCP-compatible AI assistant access to profiles, companies, jobs, and messages.","",null,"Python",2247,404,19,24,0,100,176,183,300,109.82,"Apache License 2.0",false,"main",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"ai-agents","anthropic","chatgpt","chatgpt-desktop","claude","claude-ai","claude-code","claude-desktop","desktop-extension","dxt","linkedin","linkedin-api","linkedin-mcp","linkedin-profile-scraper","linkedin-scraper","mcp","mcp-server","model-context-protocol","python","2026-06-12 04:01:38","# LinkedIn MCP Server\n\n\u003Cp align=\"left\">\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Flinkedin-scraper-mcp\u002F\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Flinkedin-scraper-mcp?color=blue\" alt=\"PyPI\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Factions\u002Fworkflows\u002Fci.yml\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg?branch=main\" alt=\"CI Status\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Factions\u002Fworkflows\u002Frelease.yml\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Factions\u002Fworkflows\u002Frelease.yml\u002Fbadge.svg?branch=main\" alt=\"Release\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fblob\u002Fmain\u002FLICENSE\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache%202.0-%233fb950?labelColor=32383f\" alt=\"License\">\u003C\u002Fa>\n\u003C\u002Fp>\n\nThrough this LinkedIn MCP server, AI assistants like Claude can connect to your LinkedIn. Access profiles and companies, search for jobs, or get job details.\n\n\n## Installation Methods\n\n[![uvx](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fuvx-Quick_Install-de5fe9?style=for-the-badge&logo=data:image\u002Fsvg+xml;base64,PHN2ZyB3aWR0aD0iNDEiIGhlaWdodD0iNDEiIHZpZXdCb3g9IjAgMCA0MSA0MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTS01LjI4NjE5ZS0wNiAwLjE2ODYyOUwwLjA4NDMwOTggMjAuMTY4NUwwLjE1MTc2MiAzNi4xNjgzQzAuMTYxMDc1IDM4LjM3NzQgMS45NTk0NyA0MC4xNjA3IDQuMTY4NTkgNDAuMTUxNEwyMC4xNjg0IDQwLjA4NEwzMC4xNjg0IDQwLjA0MThMMzEuMTg1MiA0MC4wMzc1QzMzLjM4NzcgNDAuMDI4MiAzNS4xNjgzIDM4LjIwMjYgMzUuMTY4MyAzNlYzNkwzNy4wMDAzIDM2TDM3LjAwMDMgMzkuOTk5Mkw0MC4xNjgzIDM5Ljk5OTZMMzkuOTk5NiAtOS45NDY1M2UtMDdMMjEuNTk5OCAwLjA3NzU2ODlMMjEuNjc3NCAxNi4wMTg1TDIxLjY3NzQgMjUuOTk5OEwyMC4wNzc0IDI1Ljk5OThMMTguMzk5OCAyNS45OTk4TDE4LjQ3NzQgMTYuMDMyTDE4LjM5OTggMC4wOTEwNTkzTC01LjI4NjE5ZS0wNiAwLjE2ODYyOVoiIGZpbGw9IiNERTVGRTkiLz4KPC9zdmc+Cg==)](#-uvx-setup-recommended---universal)\n[![Install MCP Bundle](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FClaude_Desktop_MCPB-d97757?style=for-the-badge&logo=anthropic)](#-claude-desktop-mcp-bundle-formerly-dxt)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-Universal_MCP-008fe2?style=for-the-badge&logo=docker&logoColor=008fe2)](#-docker-setup)\n[![Development](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDevelopment-Local-ffdc53?style=for-the-badge&logo=python&logoColor=ffdc53)](#-local-setup-develop--contribute)\n\n| Tool | Description | Status |\n|------|-------------|--------|\n| `get_person_profile` | Get profile info with explicit section selection (experience, education, interests, honors, languages, certifications, skills, projects, contact_info, posts) | working |\n| `get_my_profile` | Get the authenticated user's own LinkedIn profile (same sections as get_person_profile) | working |\n| `connect_with_person` | Send a connection request or accept an incoming one, with optional note | [#407](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues\u002F407) [#432](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues\u002F432) [#448](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues\u002F448) [#454](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues\u002F454) |\n| `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 |\n| `get_inbox` | List recent conversations from the LinkedIn messaging inbox | working |\n| `get_conversation` | Read a specific messaging conversation by username or thread ID | [#442](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues\u002F442) |\n| `search_conversations` | Search messages by keyword | working |\n| `send_message` | Send a message to a LinkedIn user (requires confirmation) | [#433](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues\u002F433) [#441](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues\u002F441) |\n| `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 |\n| `get_company_posts` | Get recent posts from a company's LinkedIn feed | working |\n| `search_companies` | Search for companies on LinkedIn by keywords | working |\n| `get_company_employees` | List employees at a company from the \u002Fpeople\u002F page, with optional keyword filter | working |\n| `search_jobs` | Search for jobs with keywords and location filters | working |\n| `search_people` | Search for people by keywords, location, connection degree (1st\u002F2nd\u002F3rd), and current company | working |\n| `get_job_details` | Get detailed information about a specific job posting | working |\n| `get_feed` | Get recent posts from the authenticated user's home feed | working |\n| `close_session` | Close browser session and clean up resources | working |\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n## 🚀 uvx Setup (Recommended - Universal)\n\n**Prerequisites:** [Install uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F).\n\n### Installation\n\n**Client Configuration**\n\n```json\n{\n  \"mcpServers\": {\n    \"linkedin\": {\n      \"command\": \"uvx\",\n      \"args\": [\"linkedin-scraper-mcp@latest\"],\n      \"env\": { \"UV_HTTP_TIMEOUT\": \"300\" }\n    }\n  }\n}\n```\n\nThe `@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 `~\u002F.linkedin-mcp\u002Fpatchright-browsers`, and opens a LinkedIn login browser window on the first tool call that needs authentication.\n\n> [!NOTE]\n> Early tool calls may return a setup\u002Fauthentication-in-progress error until browser setup or login finishes. If you prefer to create a session explicitly, run `uvx linkedin-scraper-mcp@latest --login`.\n\n### uvx Setup Help\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>🔧 Configuration\u003C\u002Fb>\u003C\u002Fsummary>\n\n**Transport Modes:**\n\n- **Default (stdio)**: Standard communication for local MCP servers\n- **Streamable HTTP**: For web-based MCP server\n- If no transport is specified, the server defaults to `stdio`\n- An interactive terminal without explicit transport shows a chooser prompt\n\n**CLI Options:**\n\n- `--login` - Open browser to log in and save persistent profile\n- `--no-headless` - Show browser window (useful for debugging scraping issues)\n- `--log-level {DEBUG,INFO,WARNING,ERROR}` - Set logging level (default: WARNING)\n- `--transport {stdio,streamable-http}` - Optional: force transport mode (default: stdio)\n- `--host HOST` - HTTP server host (default: 127.0.0.1)\n- `--port PORT` - HTTP server port (default: 8000)\n- `--path PATH` - HTTP server path (default: \u002Fmcp)\n- `--logout` - Clear stored LinkedIn browser profile\n- `--timeout MS` - Browser timeout for page operations in milliseconds (default: 5000)\n- `--tool-timeout SECONDS` - Per-tool MCP execution timeout in seconds (default: 180.0). Increase further for heavy scrapes \u002F cold-start Chromium \u002F slow networks.\n- `--user-data-dir PATH` - Path to persistent browser profile directory (default: ~\u002F.linkedin-mcp\u002Fprofile)\n- `--chrome-path PATH` - Path to Chrome\u002FChromium executable (for custom browser installations)\n\n**Basic Usage Examples:**\n\n```bash\n# Run with debug logging\nuvx linkedin-scraper-mcp@latest --log-level DEBUG\n```\n\n**HTTP Mode Example (for web-based MCP clients):**\n\n```bash\nuvx linkedin-scraper-mcp@latest --transport streamable-http --host 127.0.0.1 --port 8080 --path \u002Fmcp\n```\n\nRuntime server logs are emitted by FastMCP\u002FUvicorn.\n\nTool calls are serialized within a single server process to protect the shared\nLinkedIn browser session. Concurrent client requests queue instead of running in\nparallel. Use `--log-level DEBUG` to see scraper lock wait\u002Facquire\u002Frelease logs.\n\n**Test with mcp inspector:**\n\n1. Install and run mcp inspector ```bunx @modelcontextprotocol\u002Finspector```\n2. Click pre-filled token url to open the inspector in your browser\n3. Select `Streamable HTTP` as `Transport Type`\n4. Set `URL` to `http:\u002F\u002Flocalhost:8080\u002Fmcp`\n5. Connect\n6. Test tools\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>❗ Troubleshooting\u003C\u002Fb>\u003C\u002Fsummary>\n\n**Installation issues:**\n\n- Ensure you have uv installed: `curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh`\n- Check uv version: `uv --version` (should be 0.4.0 or higher)\n- On first run, `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.\n\n**Session issues:**\n\n- Browser profile is stored at `~\u002F.linkedin-mcp\u002Fprofile\u002F`\n- Managed browser downloads are cached at `~\u002F.linkedin-mcp\u002Fpatchright-browsers\u002F`\n- Make sure you have only one active LinkedIn session at a time\n\n**Login issues:**\n\n- LinkedIn may require a login confirmation in the LinkedIn mobile app for `--login`\n- You might get a captcha challenge if you logged in frequently. Run `uvx linkedin-scraper-mcp@latest --login` which opens a browser where you can solve it manually.\n\n**Timeout issues:**\n\n- *Page operations failing* (elements not found, navigation hangs): increase the browser page-op timeout — `--timeout 10000` or `TIMEOUT=10000` (milliseconds, default 5000).\n- *Entire tool calls timing out* (e.g. multi-section profiles, cold-start Chromium, slow containers): increase the per-tool execution timeout — `--tool-timeout 300` or `TOOL_TIMEOUT=300` (seconds, default 180).\n- Users on slow connections may need higher values for either.\n\n**Custom Chrome path:**\n\n- If Chrome is installed in a non-standard location, use `--chrome-path \u002Fpath\u002Fto\u002Fchrome`\n- Can also set via environment variable: `CHROME_PATH=\u002Fpath\u002Fto\u002Fchrome`\n\n\u003C\u002Fdetails>\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n## 📦 Claude Desktop MCP Bundle (formerly DXT)\n\n**Prerequisites:** [Claude Desktop](https:\u002F\u002Fclaude.ai\u002Fdownload).\n\n**One-click installation** for Claude Desktop users:\n\n1. Download the latest `.mcpb` artifact from [releases](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Freleases\u002Flatest)\n2. Click the downloaded `.mcpb` file to install it into Claude Desktop\n3. Call any LinkedIn tool\n\nOn 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.\n\n### MCP Bundle Setup Help\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>❗ Troubleshooting\u003C\u002Fb>\u003C\u002Fsummary>\n\n**First-time setup behavior:**\n\n- Claude Desktop starts the bundle immediately; browser setup continues in the background\n- If the Patchright Chromium browser is still downloading, retry the tool after a short wait\n- Managed browser downloads are shared under `~\u002F.linkedin-mcp\u002Fpatchright-browsers\u002F`\n\n**Login issues:**\n\n- Make sure you have only one active LinkedIn session at a time\n- LinkedIn may require a login confirmation in the LinkedIn mobile app for `--login`\n- You might get a captcha challenge if you logged in frequently. Run `uvx linkedin-scraper-mcp@latest --login` which opens a browser where you can solve captchas manually. See the [uvx setup](#-uvx-setup-recommended---universal) for prerequisites.\n\n**Timeout issues:**\n\n- *Page operations failing* (elements not found, navigation hangs): increase the browser page-op timeout — `--timeout 10000` or `TIMEOUT=10000` (milliseconds, default 5000).\n- *Entire tool calls timing out* (e.g. multi-section profiles, cold-start Chromium, slow containers): increase the per-tool execution timeout — `--tool-timeout 300` or `TOOL_TIMEOUT=300` (seconds, default 180).\n- Users on slow connections may need higher values for either.\n\n\u003C\u002Fdetails>\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n## 🐳 Docker Setup\n\n**Prerequisites:** Make sure you have [Docker](https:\u002F\u002Fwww.docker.com\u002Fget-started\u002F) installed and running, and [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F) installed on the host for the one-time `--login` step.\n\n### Authentication\n\nDocker runs headless (no browser window), so you need to create a browser profile locally first and mount it into the container.\n\n**Step 1: Create profile on the host (one-time setup)**\n\n```bash\nuvx linkedin-scraper-mcp@latest --login\n```\n\nThis opens a browser window where you log in manually (5 minute timeout for 2FA, captcha, etc.). The browser profile and cookies are saved under `~\u002F.linkedin-mcp\u002F`. 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](#-uvx-setup-recommended---universal) instead.\n\n**Step 2: Configure Claude Desktop with Docker**\n\n```json\n{\n  \"mcpServers\": {\n    \"linkedin\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"--rm\", \"-i\",\n        \"-v\", \"~\u002F.linkedin-mcp:\u002Fhome\u002Fpwuser\u002F.linkedin-mcp\",\n        \"stickerdaniel\u002Flinkedin-mcp-server:latest\"\n      ]\n    }\n  }\n}\n```\n\n> [!NOTE]\n> Docker creates a fresh session on each startup. Sessions may expire over time — run `uvx linkedin-scraper-mcp@latest --login` again if you encounter authentication issues.\n\n> [!NOTE]\n> **Why can't I run `--login` in Docker?** Docker containers don't have a display server. Create a profile on your host using the [uvx setup](#-uvx-setup-recommended---universal) and mount it into Docker.\n\n### Docker Setup Help\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>🔧 Configuration\u003C\u002Fb>\u003C\u002Fsummary>\n\n**Transport Modes:**\n\n- **Default (stdio)**: Standard communication for local MCP servers\n- **Streamable HTTP**: For a web-based MCP server\n- If no transport is specified, the server defaults to `stdio`\n- An interactive terminal without explicit transport shows a chooser prompt\n\n**CLI Options:**\n\n- `--log-level {DEBUG,INFO,WARNING,ERROR}` - Set logging level (default: WARNING)\n- `--transport {stdio,streamable-http}` - Optional: force transport mode (default: stdio)\n- `--host HOST` - HTTP server host (default: 127.0.0.1)\n- `--port PORT` - HTTP server port (default: 8000)\n- `--path PATH` - HTTP server path (default: \u002Fmcp)\n- `--logout` - Clear all stored LinkedIn auth state, including source and derived runtime profiles\n- `--timeout MS` - Browser timeout for page operations in milliseconds (default: 5000)\n- `--tool-timeout SECONDS` - Per-tool MCP execution timeout in seconds (default: 180.0). Increase further for heavy scrapes \u002F cold-start Chromium \u002F slow networks.\n- `--user-data-dir PATH` - Path to persistent browser profile directory (default: ~\u002F.linkedin-mcp\u002Fprofile)\n- `--chrome-path PATH` - Path to Chrome\u002FChromium executable (rarely needed in Docker)\n\n> [!NOTE]\n> `--login` and `--no-headless` are not available in Docker (no display server). Use the [uvx setup](#-uvx-setup-recommended---universal) to create profiles.\n\n**HTTP Mode Example (for web-based MCP clients):**\n\n```bash\ndocker run -it --rm \\\n  -v ~\u002F.linkedin-mcp:\u002Fhome\u002Fpwuser\u002F.linkedin-mcp \\\n  -p 8080:8080 \\\n  stickerdaniel\u002Flinkedin-mcp-server:latest \\\n  --transport streamable-http --host 0.0.0.0 --port 8080 --path \u002Fmcp\n```\n\nRuntime server logs are emitted by FastMCP\u002FUvicorn.\n\n**Test with mcp inspector:**\n\n1. Install and run mcp inspector ```bunx @modelcontextprotocol\u002Finspector```\n2. Click pre-filled token url to open the inspector in your browser\n3. Select `Streamable HTTP` as `Transport Type`\n4. Set `URL` to `http:\u002F\u002Flocalhost:8080\u002Fmcp`\n5. Connect\n6. Test tools\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>❗ Troubleshooting\u003C\u002Fb>\u003C\u002Fsummary>\n\n**Docker issues:**\n\n- Make sure [Docker](https:\u002F\u002Fwww.docker.com\u002Fget-started\u002F) is installed\n- Check if Docker is running: `docker ps`\n\n**Login issues:**\n\n- Make sure you have only one active LinkedIn session at a time\n- LinkedIn may require a login confirmation in the LinkedIn mobile app for `--login`\n- You might get a captcha challenge if you logged in frequently. Run `uvx linkedin-scraper-mcp@latest --login` which opens a browser where you can solve captchas manually. See the [uvx setup](#-uvx-setup-recommended---universal) for prerequisites.\n- If Docker auth becomes stale after you re-login on the host, restart Docker once so it can fresh-bridge from the new source session generation.\n\n**Timeout issues:**\n\n- *Page operations failing* (elements not found, navigation hangs): increase the browser page-op timeout — `--timeout 10000` or `TIMEOUT=10000` (milliseconds, default 5000).\n- *Entire tool calls timing out* (e.g. multi-section profiles, cold-start Chromium, slow containers): increase the per-tool execution timeout — `--tool-timeout 300` or `TOOL_TIMEOUT=300` (seconds, default 180).\n- Users on slow connections may need higher values for either.\n\n**Custom Chrome path:**\n\n- If Chrome is installed in a non-standard location, use `--chrome-path \u002Fpath\u002Fto\u002Fchrome`\n- Can also set via environment variable: `CHROME_PATH=\u002Fpath\u002Fto\u002Fchrome`\n\n\u003C\u002Fdetails>\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n## 🐍 Local Setup (Develop & Contribute)\n\nContributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for architecture guidelines and checklists. Please [open an issue](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fissues) first to discuss the feature or bug fix before submitting a PR.\n\n**Prerequisites:** [Git](https:\u002F\u002Fgit-scm.com\u002Fdownloads) and [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F) installed\n\n### Installation\n\n```bash\n# 1. Clone repository\ngit clone https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\ncd linkedin-mcp-server\n\n# 2. Install UV package manager (if not already installed)\ncurl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\n\n# 3. Install dependencies\nuv sync\nuv sync --group dev\n\n# 4. Install pre-commit hooks\nuv run pre-commit install\n\n# 5. Start the server\nuv run -m linkedin_mcp_server\n```\n\nThe 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.\n\n### Local Setup Help\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>🔧 Configuration\u003C\u002Fb>\u003C\u002Fsummary>\n\n**CLI Options:**\n\n- `--login` - Open browser to log in and save persistent profile\n- `--no-headless` - Show browser window (useful for debugging scraping issues)\n- `--log-level {DEBUG,INFO,WARNING,ERROR}` - Set logging level (default: WARNING)\n- `--transport {stdio,streamable-http}` - Optional: force transport mode (default: stdio)\n- `--host HOST` - HTTP server host (default: 127.0.0.1)\n- `--port PORT` - HTTP server port (default: 8000)\n- `--path PATH` - HTTP server path (default: \u002Fmcp)\n- `--logout` - Clear stored LinkedIn browser profile\n- `--timeout MS` - Browser timeout for page operations in milliseconds (default: 5000)\n- `--tool-timeout SECONDS` - Per-tool MCP execution timeout in seconds (default: 180.0). Increase further for heavy scrapes \u002F cold-start Chromium \u002F slow networks.\n- `--status` - Check if current session is valid and exit\n- `--user-data-dir PATH` - Path to persistent browser profile directory (default: ~\u002F.linkedin-mcp\u002Fprofile)\n- `--slow-mo MS` - Delay between browser actions in milliseconds (default: 0, useful for debugging)\n- `--user-agent STRING` - Custom browser user agent\n- `--viewport WxH` - Browser viewport size (default: 1280x720)\n- `--chrome-path PATH` - Path to Chrome\u002FChromium executable (for custom browser installations)\n- `--help` - Show help\n\n> **Note:** Most CLI options have environment variable equivalents. See `.env.example` for details.\n\n**HTTP Mode Example (for web-based MCP clients):**\n\n```bash\nuv run -m linkedin_mcp_server --transport streamable-http --host 127.0.0.1 --port 8000 --path \u002Fmcp\n```\n\n**Claude Desktop:**\n\n```json\n{\n  \"mcpServers\": {\n    \"linkedin\": {\n      \"command\": \"uv\",\n      \"args\": [\"--directory\", \"\u002Fpath\u002Fto\u002Flinkedin-mcp-server\", \"run\", \"-m\", \"linkedin_mcp_server\"]\n    }\n  }\n}\n```\n\n`stdio` is used by default for this config.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>❗ Troubleshooting\u003C\u002Fb>\u003C\u002Fsummary>\n\n**Login issues:**\n\n- Make sure you have only one active LinkedIn session at a time\n- LinkedIn may require a login confirmation in the LinkedIn mobile app for `--login`\n- You might get a captcha challenge if you logged in frequently. The `--login` command opens a browser where you can solve it manually.\n\n**Scraping issues:**\n\n- Use `--no-headless` to see browser actions and debug scraping problems\n- Add `--log-level DEBUG` to see more detailed logging\n\n**Session issues:**\n\n- Browser profile is stored at `~\u002F.linkedin-mcp\u002Fprofile\u002F`\n- Use `--logout` to clear the profile and start fresh\n\n**Python\u002FPatchright issues:**\n\n- Check Python version: `python --version` (should be 3.12+)\n- Reinstall Patchright: `uv run patchright install chromium`\n- Reinstall dependencies: `uv sync --reinstall`\n\n**Timeout issues:**\n\n- *Page operations failing* (elements not found, navigation hangs): increase the browser page-op timeout — `--timeout 10000` or `TIMEOUT=10000` (milliseconds, default 5000).\n- *Entire tool calls timing out* (e.g. multi-section profiles, cold-start Chromium, slow containers): increase the per-tool execution timeout — `--tool-timeout 300` or `TOOL_TIMEOUT=300` (seconds, default 180).\n- Users on slow connections may need higher values for either.\n\n**Custom Chrome path:**\n\n- If Chrome is installed in a non-standard location, use `--chrome-path \u002Fpath\u002Fto\u002Fchrome`\n- Can also set via environment variable: `CHROME_PATH=\u002Fpath\u002Fto\u002Fchrome`\n\n\u003C\u002Fdetails>\n\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n> [!IMPORTANT]\n> **FAQ**\n>\n> **Is this safe to use? Will I get banned?**\n> This tool controls a real browser session; it doesn't exploit undocumented APIs or bypass authentication. That said, LinkedIn's TOS prohibit automated tools. With normal usage (not bulk scraping!) you're not risking a ban. So far, no users have been banned for using this MCP. If you encounter any issues, let me know in the [Discussions](https:\u002F\u002Fgithub.com\u002Fstickerdaniel\u002Flinkedin-mcp-server\u002Fdiscussions).\n>\n> **What if my agents execute too many actions?**\n> LinkedIn may send you a warning about automated tool usage. If that happens, reduce your automation volume. This MCP executes tool calls sequentially via a queue but has no built-in rate limits. Prompt your agents responsibly.\n\n## Acknowledgements\n\nBuilt with [FastMCP](https:\u002F\u002Fgofastmcp.com\u002F) and [Patchright](https:\u002F\u002Fgithub.com\u002FKaliiiiiiiiii-Vinyzu\u002Fpatchright-python).\n\nUse in accordance with [LinkedIn's Terms of Service](https:\u002F\u002Fwww.linkedin.com\u002Flegal\u002Fuser-agreement). Web scraping may violate LinkedIn's terms. This tool is for personal use only.\n\n## License\n\nThis project is licensed under the Apache 2.0 license.\n\n\u003Cbr>\n","这个项目是一个开源的LinkedIn MCP服务器，使Claude等兼容MCP协议的AI助手能够访问LinkedIn上的个人资料、公司信息、职位搜索以及消息功能。核心功能包括获取详细的个人资料（如经验、教育背景等）、用户自己的LinkedIn资料，以及发送或接受连接请求等功能。采用Python语言编写，支持多种安装方式，包括Docker和本地开发环境。适用于需要通过AI助手来自动化处理LinkedIn相关任务的场景，比如人力资源管理中的候选人筛选、市场调研时的企业信息收集等。",2,"2026-06-11 04:08:30","high_star"]