Linkedin mcp
Read LinkedIn DMs/threads, look up people and company profiles, search and inspect job postings, and send messages or connection requests via the linkedin MCP server. Use when the user asks to check LinkedIn messages/inbox, read a conversation, search messages, look up a profile or company, search jobs, send a LinkedIn DM, or send/accept a connection request.From its SKILL.md
npx -y skills add magnusrodseth/dotfiles --skill linkedin-mcpAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.8 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
LinkedIn MCP
Driven by the linkedin MCP server (registered globally as uvx linkedin-scraper-mcp@latest). All tools are exposed under the mcp__linkedin__* namespace and operate on a real authenticated browser session for the signed-in account.
The signed-in user is Magnus Rødseth — LinkedIn username magnus-rodseth (https://www.linkedin.com/in/magnus-rodseth/). When the user says "my profile", "me", "my inbox", or "my messages", that's this account.
Quick start
- Read recent DMs:
mcp__linkedin__get_inbox(defaults to 20 most recent threads). - Open a thread by participant name/handle:
mcp__linkedin__get_conversationwithlinkedin_username. - Find a thread by content:
mcp__linkedin__search_conversationswithkeywords, then open via returnedthread_id. - Look up a profile:
mcp__linkedin__get_person_profilewithlinkedin_username(and optionalsections). - Look up a company:
mcp__linkedin__get_company_profilewithcompany_name.
Workflows
Reading DMs (the main use case)
- Default to
get_inbox(limit 5–20) for "what's in my inbox" type asks. Don't go above 20 unless the user wants a backlog scan. - To open a specific thread:
- If the user names a person (e.g. "the thread with Jane Doe"): pass their handle as
linkedin_usernametoget_conversation. If they have multiple threads (e.g. organic + InMail), usesearch_conversationsfirst to enumeratethread_ids, then callget_conversationwith the rightthread_id. - If they describe content ("the message about the contract"): use
search_conversationswith tightkeywords.
- If the user names a person (e.g. "the thread with Jane Doe"): pass their handle as
- Side-effect warning:
get_conversation(by username) andsearch_conversationsenumerate matches by clicking rows in LinkedIn's UI, which may mark them as read. Keeplimitsmall (≤10) on noisy queries, and preferthread_idonce known to skip enumeration.
Sending a message
- Confirm the recipient and full message text with the user verbatim before calling.
- Call
mcp__linkedin__send_messagewithconfirm_send: true. Without confirmation it won't send. - If the recipient isn't directly messageable from their profile, fetch
get_person_profilefirst to obtain theprofile_urnand pass it tosend_message— that's more reliable than the Message-button lookup.
Profile and people lookups
get_person_profilealways scrapes the main page. Addsections(comma-separated) only for what you need:experience,education,interests,honors,languages,certifications,skills,projects,contact_info,posts. Heavy sections (e.g.posts, 30+ certs) — bumpmax_scrollsand request them in a separate call to avoid slowing other sections.search_peopletakeskeywordsand optionallocation— use it to find a handle when only a name/role is known.get_sidebar_profilespulls "More profiles for you", "Explore premium profiles", "People you may know" recommendations from a given profile page.
Jobs
search_jobswithkeywords(+ optionallocation,experience_level,job_type,work_type,date_posted,easy_apply,sort_by,max_pages). Returnsjob_ids.get_job_detailswith ajob_idfor the full posting.
Companies
get_company_profilewithcompany_name(the URL slug, e.g.anthropic,docker). Addsections(posts,jobs) only when needed.get_company_postsfor just the feed.
Connection requests
connect_with_personsends or accepts a connection request (with optionalnote). AnnotateddestructiveHint, so confirm with the user before calling.
Cleanup
close_sessionreleases the browser session — call when the user signals they're done with LinkedIn work in this conversation, or when retrying after a session error.
Conventions
- Handles, not URLs. Pass
magnus-rodseth, nothttps://www.linkedin.com/in/magnus-rodseth/. - Tool calls serialize. The server queues tool calls behind a single browser. Don't try to parallelize multiple linkedin tools.
- Cold start. First call after install can stall on Patchright Chromium download; if it errors with setup-in-progress, retry after a moment.
- Auth failures. If tools fail with auth/session errors, the user can re-login:
uvx linkedin-scraper-mcp@latest --login.
Write operations require confirmation
These tools change state and must be confirmed with the user before invocation:
send_message(must passconfirm_send: true)connect_with_person(sends/accepts a request)
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.