devag7/linkedin-mcp

🌐 Social Media
0 Views
0 Installs

πŸ“‡ 🏠 - LinkedIn for AI assistants over an authenticated browser session β€” profiles, people/job/company search, feed, messaging, and gated writes (connect, message, post, react, comment) returned as structured JSON, with built-in rate limiting. npx -y linkedin-mcp-tools.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "devag7-linkedin-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "devag7-linkedin-mcp"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

πŸ”— LinkedIn MCP

LinkedIn for AI assistants β€” structured data via a real, stealth browser session

CI npm version MIT License TypeScript MCP Glama score

Give Claude, Cursor, and any MCP client access to LinkedIn β€” profiles, people/job/company search, feed, messaging, and your network β€” as clean structured JSON.

22 tools Β· reads + gated writes (connect, message, post, react, comment) Β· a real safety layer (daily caps, human pacing, circuit breaker) Β· 166 tests.

⚠️ Automating LinkedIn violates its User Agreement and can get an account restricted. No tool is ban-proof β€” and this one says so up front. Use a secondary account; read Account safety and DISCLAIMER.md first.


Why this exists

LinkedIn's internal Voyager API (the one its own web app uses) returns rich, structured JSON β€” but it sits behind Cloudflare bot-management, which rejects plain HTTP requests (a stateless fetch or curl gets stuck in an endless redirect, even with a valid cookie). The only reliable way to read LinkedIn data programmatically in 2026 is from inside a real browser that clears the challenge.

This project's approach:

  1. Drive a real Chrome via patchright (an undetected Playwright fork) so Cloudflare's challenge is solved with a genuine browser fingerprint.
  2. Query Voyager from inside the authenticated page β€” same-origin, the exact network path LinkedIn's own SPA uses β†’ structured JSON, not scraped DOM text.

That last point is the edge over DOM-scraping tools: in-page API calls are locale-independent and resilient to UI redesigns, so they don't break on a moved CSS selector or a translated label.


✨ What's good here

🧩 Structured JSONIn-page Voyager API calls return normalized data, shaped into compact objects β€” not brittle innerText scraping.
✍️ Writes are API calls, not button-clickingconnect / message / post / react / comment POST straight to Voyager β€” the exact requests the web app sends, captured and verified live. No hunting for a "Connect" button under a sticky navbar, no composer-dialog race. Every write returns a structured status (ok / duplicate / already_connected / restricted / quota_exhausted / …) β€” never a blind "sent: true".
πŸ›‘οΈ Safety layer built inSerial queue, human-paced jittered delays, per-action daily budgets, account warmup ramp, and a circuit breaker that hard-stops on any checkpoint/captcha. (Risk reduction β€” not a safety guarantee.)
πŸ”₯ One warm sessionA single persistent browser per process (cookies + Cloudflare clearance survive restarts). Explicit close_session, signal-handled teardown β€” no zombie Chrome.
🌍 Locale-independentAPI + embedded-JSON parsing, not English-only DOM selectors β€” survives UI redesigns and translations.
πŸ”’ Local & privateSession stored under ~/.linkedin-mcp/ with 0700/0600 perms; no cookies/tokens to paste, none ever logged.

How it compares

DOM-scraping LinkedIn MCPsThis
Readsscraped page text (brittle, locale-bound)structured API JSON
Writes (connect/message/post)click rendered buttons (break on sticky navbars, dialog races, localized labels)direct Voyager POST, captured + verified live
Write feedback"clicked it" β†’ hopestructured status (ok / duplicate / restricted / quota_exhausted / …)
Resiliencebreaks on UI tweaks / translationsAPI + embedded-JSON, locale-proof
Safety (caps, pacing, circuit breaker)noneβœ… built-in, 166 tests
Zombie browser processescommonβœ… reaped on close
LanguagePythonTypeScript + official MCP SDK

We hit LinkedIn's own API from inside the challenge-passed browser β€” reads and writes β€” so you get the structured response and a real status, not parsed HTML and a hopeful click.

πŸ“¦ Status

Stable β€” v2, all 22 tools shipping. Full transparency on exactly where every piece stands:

AreaState
Stealth browser engine (patchright)βœ… built, live-proven
In-page Voyager fetch (the core mechanism)βœ… live-verified (returns structured JSON)
Safety layer (queue / pacer / budgets / circuit-breaker)βœ… built, 166 unit tests
Profile β€” get_profile, get_my_profile (name, headline, summary, experience, education, skills, certifications, languages)βœ… live-verified
Feed / notifications β€” get_feed, get_notificationsβœ… live-verified
Jobs / messaging β€” search_jobs, get_job_details, get_inbox, get_conversationβœ… live-verified
People / companies β€” search_people, search_companies, get_company, get_company_posts, get_company_employees (DOM fallback)βœ… live-verified
Network β€” get_pending_invitations (received + sent)βœ…
Session β€” whoami, health_check (live Voyager probe + budget headroom), close_sessionβœ…
Write tools β€” connect_with_person, send_message, create_post, react_to_post, comment_on_postβœ… all 5 endpoints captured + live-verified on a burner; gated (confirm:true + daily caps), structured statuses. ⚠️ These take real, often irreversible actions β€” keep the gate on and use a throwaway account.

22 tools. typecheck + 166 tests green.

Login is headful, the server is headless. The one-time --login opens a real Chrome window (to clear Cloudflare and let you solve any captcha/2FA). After that the persistent profile carries the clearance, so the server runs headless β€” verified returning live data. Use a residential IP; datacenter/VPN IPs are often pre-flagged by Cloudflare regardless of headless vs headful.


πŸš€ Quick start

1. Log in once (opens a real Chrome window β€” sign in, solve any captcha/2FA):

npx -y linkedin-mcp-tools@latest --login

Needs Google Chrome installed (or run npx patchright install chrome once). Your session β€” Cloudflare clearance and all β€” persists to ~/.linkedin-mcp/profile/.

2. Point your MCP client at it. Claude Desktop / Cursor / Claude Code config:

{
  "mcpServers": {
    "linkedin": {
      "command": "npx",
      "args": ["-y", "linkedin-mcp-tools@latest"]
    }
  }
}

Then just ask: "Get my LinkedIn profile and summarize my experience" or "Find 5 recruiters at Google."

From source / contributing
git clone https://github.com/devag7/linkedin-mcp.git
cd linkedin-mcp
npm install
npm run setup:browser     # installs the Chrome patchright drives
npm run login             # log in once
npm run spike             # verify: fetches your profile as JSON
npm run build             # produces dist/

MCP config: "command": "node", "args": ["/absolute/path/to/dist/index.js"].

Headless / server deployment

The one-time --login needs a window; the server then runs headless (verified returning live data). Run --login on a machine with a display (or via VNC), copy ~/.linkedin-mcp/profile/ to your server, and run there:

LINKEDIN_HEADLESS=true npx -y linkedin-mcp-tools@latest   # no display needed

Use a residential IP β€” datacenter/VPN IPs are frequently pre-flagged by Cloudflare regardless of headless vs headful.


πŸ›‘οΈ Account safety

Read this. Automating LinkedIn violates its User Agreement and can get your account restricted or banned β€” no tool can prevent that, including this one. The built-in safety features (daily caps, human pacing, warmup, circuit breaker) reduce risk; they do not eliminate it.

Defaults err conservative:

  • Connections 20/day, messages 50/day, likes+comments 50/day combined, follows 30/day β€” combined write cap 150/24h.
  • Profile views 80/day, searches 30/day.
  • New-account warmup ramp over the first weeks; pending-invite ceiling and acceptance-rate pauses.
  • Reads paced 4–12s apart, writes 45–150s, with long breaks and a working-hours gate.
  • A circuit breaker stops automatically on any checkpoint, captcha, or "unusual activity" page β€” and never tries to solve one.

Recommendations: use a secondary/throwaway account, run from a residential IP, warm it up slowly. See DISCLAIMER.md for the full legal/ToS notice.


βš™οΈ Configuration

VariableDefaultDescription
LINKEDIN_HEADLESStrueServer runs headless. --login always opens a real window regardless. Set false to watch the browser.
LINKEDIN_CHROME_PATHβ€”Explicit Chrome binary path (else patchright's).
LINKEDIN_PROFILE_DIR~/.linkedin-mcp/profilePersistent browser profile.
LINKEDIN_IDLE_TIMEOUT_MS300000Close the browser after this idle time (0 disables).
LINKEDIN_CONCURRENCY1Serial by default; >1 is ban-risky.
TRANSPORTstdiostdio (primary) or http.

πŸ›  Development

npm run dev          # run from source (stdio)
npm run typecheck
npm test             # vitest (safety layer + smoke)
npm run build

πŸ“„ License

MIT β€” see LICENSE. Not affiliated with LinkedIn. Use at your own risk; see DISCLAIMER.md.

linkedin-mcp MCP server

Made by Dev Agarwalla

Related MCP Servers

06ketan/substack-ops

🐍 🏠 - Substack with zero AI API keys. 26 tools (posts, notes, comments, replies, reactions, restacks). Host LLM drafts via proposereply β†’ confirmreply tokens. SQLite dedup, JSONL audit, dry-run default. Install: uvx substack-ops mcp install cursor.

🌐 Social Media0 views
abhineet34/linkedin-mcp-server

πŸ“‡ 🏠 - Local LinkedIn MCP server for posting to LinkedIn from Claude. 9 tools β€” create/edit/delete posts (text, image, article), upload images, fetch profile, look up company pages, and check follower counts. Uses the official LinkedIn REST API with OAuth 2.0 (wmembersocial, OIDC).

🌐 Social Media0 views
anwerj/youtube-uploader-mcp

🏎️ ☁️ - AI‑powered YouTube uploaderβ€”no CLI, no YouTube Studio. Uploade videos directly from MCP clients with all AI capabilities.

🌐 Social Media0 views
arjun1194/insta-mcp

πŸ“‡ 🏠 - Instagram MCP server for analytics and insights. Get account overviews, posts, followers, following lists, post insights, and search for users, hashtags, or places.

🌐 Social Media0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

Last checked: 7/28/2026, 10:16:55 PM

Unclaimed listing (imported or pending owner verification). Claim it β†’
β˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.