close_session
Close the current browser session and clean up resources.
Read LinkedIn from an agent — profiles, companies, jobs, posts and your own inbox — through your signed-in session.
LABSCO SUMMARY
What it takes off you is the paging: a company's people, its recent posts and the jobs under it come back as data in one pass. Because it acts as you, remember that a message or a connection request is visible to a real person on the other end.
A browser-driven LinkedIn server, nineteen tools, working as you: your own profile and feed, your inbox, your saved jobs, and the search pages you would otherwise open one at a time. It drives a Patchright Chromium browser and keeps the session between calls.
get_person_profile, get_my_profile, get_sidebar_profiles)search_people, search_companies, get_feed)get_company_profile, get_company_posts, get_company_employees)search_jobs, get_job_details, get_saved_jobs)search_posts)get_inbox, get_conversation, search_conversations, send_message)connect_with_person), and the browser session closed when the work is done (close_session)uv, and a signed-in LinkedIn session — every call goes through a browser as you. uvx mcp-server-linkedin@latest prepares its Chromium cache under ~/.linkedin-mcp/patchright-browsers in the background and opens a login window on the first call that needs it; --login does it up front instead. Early calls may return a setup-in-progress error until that finishes. There are also a Claude Desktop bundle and a Docker image, where the session lives in a mounted ~/.linkedin-mcp volume and login runs through a browser viewer that times out after 30 minutes. Staying on @latest is what keeps it working as LinkedIn's page structure changes, and an optional PROXY_SERVER routes only the browser traffic.
One command — uvx mcp-server-linkedin@latest
USE CASES
Open the company, read its employee list, and pull the profiles that look right — in one pass rather than twenty tabs and a spreadsheet.
Search posts as well as jobs. The "we're hiring, DM me" post usually goes up days before the listing, and post search is what catches it.
Read the company profile and its recent posts, then look at who works there. Ten minutes of preparation turns into one request.
List the conversations, search them by keyword for the thread you are thinking of, and read it in full — without the notification tray pulling you elsewhere.
Send the message or the connection request from the same session that found them. These are the calls a real person sees, so read the draft before it goes.
Read the jobs you saved and pull the full details for each. Comparing five saved roles side by side is much easier as data than as five browser tabs.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
close_sessionClose the current browser session and clean up resources.
connect_with_personSend a LinkedIn connection request or accept an incoming one.
The tool is annotated with destructiveHint so MCP clients will prompt for user confirmation before execution.
get_company_employeesList employees at a company from the LinkedIn /people/ page, including the demographics aggregate that this view exposes: where employees live, where they studied, and a function breakdown (Engineering, Sales, Operations, etc.). The demographics are unique to this tool.
For filtered search by network degree (1st/2nd/3rd) or location, prefer search_people with current_company set to the company URN id. That path also returns more result pages than the /people/ tab.
The optional keywords filter narrows results by name, title, or skill.
company_name must be the exact LinkedIn URL slug (the path segment after /company/), not the display name. LinkedIn assigns unique slugs and the display name often does not match. For example, the AI lab Anthropic lives at /company/anthropicresearch/, not /company/anthropic/. If you are unsure of the slug, call search_companies first and pick the slug from the returned references.
Args: company_name: LinkedIn company URL slug (e.g., "docker", "anthropicresearch", "microsoft") ctx: FastMCP context for progress reporting keywords: Optional filter by name, job title, or skill (e.g., "engineer", "sales")
Returns: Dict with url, sections (employees -> raw text), and optional references. References include /in/ profile paths for listed employees.
get_company_postsGet recent posts from a company's LinkedIn feed.
get_company_profileGet a specific company's LinkedIn profile.
get_conversationRead a specific messaging conversation.
Provide either linkedin_username or thread_id to identify the conversation.
When looked up by linkedin_username, resolution searches the messaging inbox for the participant's display name and click-visits every matching row to capture its thread ID — LinkedIn's sidebar has no anchor hrefs or thread-id attributes, so this is the only available path. Each visit selects the row in the LinkedIn UI and may mark it as read. Pass thread_id directly to skip this enumeration.
get_feedGet posts from the authenticated user's LinkedIn feed.
get_inboxList recent conversations from the LinkedIn messaging inbox.
get_job_detailsGet job details for a specific job posting on LinkedIn.
get_my_profileGet the authenticated user's own LinkedIn profile.
Navigates to /in/me/ and resolves the redirect to obtain the real username before scraping, so the url field in the result is the actual profile URL (e.g. linkedin.com/in/johndoe/) rather than /in/me/.
get_person_profileGet a specific person's LinkedIn profile.
get_saved_jobsList job postings saved by the authenticated LinkedIn user.
Returns job_ids that can be passed to get_job_details for full info.
get_sidebar_profilesGet profile links from sidebar recommendation sections on a LinkedIn profile page.
Extracts profiles from "More profiles for you", "Explore premium profiles", and "People you may know" sidebar sections. Follows "Show all" links to return the full list from each section. Sections that redirect to linkedin.com/premium are skipped.
search_companiesSearch for companies on LinkedIn.
search_conversationsSearch messages by keyword.
search_jobsSearch for jobs on LinkedIn.
Returns job_ids that can be passed to get_job_details for full info.
search_peopleSearch for people on LinkedIn.
search_postsSearch LinkedIn posts/content globally by keyword (the "Posts" tab).
Use this to catch informal hiring posts ("we're hiring", "Buscamos ...", "estamos contratando", "join our team") that often appear before a formal job listing exists. This is global content search, distinct from get_feed (your own home feed) and get_company_posts (one company's page).
send_messageSend a message to a LinkedIn user.
The recipient must be directly messageable from the profile page. This is a write operation when confirm_send is True.
BEFORE YOU INSTALL
19 tools when we connected. All 19 need a signed-in browser session and return an authentication error until you sign in. The write tools are connect_with_person and send_message, and send_message asks for confirmation.
uvx on PATH
CONTEXT COST
Rated by the size of the 19 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
uvx mcp-server-linkedin@latest{
"mcpServers": {
"mcp-server-linkedin": {
"command": "uvx",
"args": [
"mcp-server-linkedin@latest"
],
"env": {
"UV_HTTP_TIMEOUT": "300"
}
}
}
}Download the latest .mcpb artifact from the releases page and click it to install into Claude Desktop
mkdir -p ~/.linkedin-mcp
docker run -it --rm -v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp -p 127.0.0.1:6080:6080 stickerdaniel/linkedin-mcp-server:latest --login --login-viewerOpen the full URL that command prints and sign in to LinkedIn; let the command exit on its own so the session is saved
Add this to claude_desktop_config.json:
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-v",
"<YOUR_PATH_TO_LINKEDIN_MCP>:/home/pwuser/.linkedin-mcp",
"stickerdaniel/linkedin-mcp-server:latest"
]
}
}
}<YOUR_PATH_TO_LINKEDIN_MCP> is the full path of that folder on your machine — no leading ~, and on Windows forward slashes (C:/Users/you/.linkedin-mcp). Leave /home/pwuser/.linkedin-mcp as it is: that is the path inside the container.