linkedin-mcp-server-ts
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@linkedin-mcp-server-tsFind me software engineering jobs in New York posted this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LinkedIn MCP Server (TypeScript / Bun)
Disclaimer: This is an independent, community-driven open-source project. It is not affiliated with, sponsored by, authorized by, or endorsed by LinkedIn Corporation or Microsoft Corporation. "LinkedIn" is a registered trademark of LinkedIn Corporation and is used purely descriptively.
A blazing-fast, lightweight Model Context Protocol (MCP) server for LinkedIn automation and scraping, rewritten in TypeScript and powered by the Bun runtime.
It provides AI assistants (such as Claude Desktop, Cursor, OpenCode, VS Code, and Windsurf/Antigravity) with 19 production-grade MCP tools to navigate profiles, search jobs and companies, interact with messages, and extract feeds using your own authenticated browser session.
โก Why TypeScript + Bun?
linkedin-mcp-server-ts is a native TypeScript/Bun port of stickerdaniel/linkedin-mcp-server, built to deliver maximum efficiency and minimal resource footprint:
๐ Instant Startup & Near-Zero Overhead: Bun's native JIT and fast package execution eliminate cold-start delays.
๐ Native WebView & Direct CDP Engine: Automates Chromium through direct Chrome DevTools Protocol (CDP) and
Bun.WebViewwithout heavy external browser daemon layers.๐ 100% Contract & Schema Parity: Complete 1:1 drop-in replacement for the Python MCP server tools, schemas, and return formats.
๐ Seamless Session Sharing: 100% compatible with the standard
~/.linkedin-mcp/profilesession storage and cookies format.
Architecture Comparison
Feature | Python Version ( | TypeScript / Bun Version ( |
Runtime | Python 3.10+ ( | Bun 1.2+ ( |
Language | Python ( | TypeScript 6 ( |
Browser Engine | Patchright Chromium fork | Native |
Memory / Footprint | Moderate (~150MB+ runtime) | Ultra-lightweight (~30-60MB baseline) |
Transports |
|
|
Session Directory |
|
|
Validation | Pydantic | Zod schemas |
Tool Count | 19 tools | 19 tools |
๐ ๏ธ MCP Tools Overview (19 Tools)
Tool | Category | Description | Access Type |
| People | Extract profile details with granular sections (experience, education, skills, projects, certifications, posts, etc.) | Read-Only |
| People | Extract the authenticated user's own profile | Read-Only |
| People | Search people by keywords, location, connection degree ( | Read-Only |
| People | Send a connection request or accept an invitation with an optional personalized note | Write / Action |
| People | Extract recommended sidebar profile links ("People you may know", "More profiles") | Read-Only |
| Company | Extract company details, about info, posts, jobs, and numeric company URN IDs | Read-Only |
| Company | Retrieve recent company feed posts | Read-Only |
| Company | Search companies by keyword | Read-Only |
| Company | List company employees from the | Read-Only |
| Jobs | Fetch full details and descriptions for a specific job posting | Read-Only |
| Jobs | Search jobs with filters: keywords, location, date posted, job type, work type, experience level, easy apply | Read-Only |
| Jobs | Retrieve the authenticated user's saved job listings | Read-Only |
| Messaging | List recent conversation threads from the messaging inbox | Read-Only |
| Messaging | Read messages in a thread by username or | Read-Only |
| Messaging | Search messaging threads by keyword | Read-Only |
| Messaging | Send a LinkedIn direct message (requires | Write / Action |
| Feed | Retrieve recent posts from your home timeline | Read-Only |
| Feed | Global search across LinkedIn posts with recency filter ( | Read-Only |
| Session | Gracefully terminate the browser session and clean up background resources | Write / Action |
๐ Quickstart
Prerequisites
Install Bun (v1.2 or higher):
# Windows (PowerShell) powershell -c "irm bun.sh/install.ps1 | iex" # macOS / Linux curl -fsSL https://bun.sh/install | bashGoogle Chrome / Chromium: Installed on your system.
One-Command Execution (bunx)
You can run the server directly without manual installation using bunx:
bunx linkedin-mcp-server-tsLocal Clone & Development Setup
# Clone the repository
git clone https://github.com/joaovjo/linkedin-mcp-server-ts.git
cd linkedin-mcp-server-ts
# Install dependencies
bun install
# Start the server (stdio mode for MCP clients)
bun run start
# Start the HTTP server (for web MCP debugging)
bun run dev๐ป MCP Client Configuration
1. Claude Desktop
Add to your claude_desktop_config.json:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"linkedin": {
"command": "bunx",
"args": ["linkedin-mcp-server-ts"]
}
}
}Or when running from a local clone:
{
"mcpServers": {
"linkedin": {
"command": "bun",
"args": ["run", "src/index.ts"],
"cwd": "D:/linkedin/linkedin-mcp-server-ts"
}
}
}2. Cursor
Add to your project's .cursor/mcp.json or Global Cursor Settings:
{
"mcpServers": {
"linkedin": {
"command": "bunx",
"args": ["linkedin-mcp-server-ts"]
}
}
}3. OpenCode
Add to your opencode.json (or ~/.config/opencode/opencode.json):
{
"mcp": {
"linkedin": {
"type": "stdio",
"command": "bunx",
"args": ["linkedin-mcp-server-ts"]
}
}
}4. Antigravity / Windsurf / VS Code (Cline / Roo Code)
Add to mcp_config.json:
{
"mcpServers": {
"linkedin": {
"command": "bunx",
"args": ["linkedin-mcp-server-ts"],
"disabled": false,
"autoApprove": []
}
}
}5. Streamable HTTP Mode
To expose the server over HTTP for remote agents or containerized setups:
bun run src/index.ts --transport streamable-http --host 127.0.0.1 --port 8000Endpoint URL: http://127.0.0.1:8000/mcp
Healthcheck: http://127.0.0.1:8000/health
๐ Authentication & Session Management
The server uses a persistent browser profile stored at ~/.linkedin-mcp/profile so you only need to authenticate once.
Option A: Auto-Import from your Everyday Browser (Fastest)
If you are already logged in to LinkedIn in your browser (Chrome, Brave, Edge, Arc, Vivaldi), import your session instantly:
# Auto-detect the most recent browser session
bunx linkedin-mcp-server-ts --import-from-browser
# Or specify a target browser
bunx linkedin-mcp-server-ts --import-from-browser brave
bunx linkedin-mcp-server-ts --import-from-browser chrome
bunx linkedin-mcp-server-ts --import-from-browser edgeOption B: Interactive Visual Login
Launch an interactive Chrome window to log in:
bunx linkedin-mcp-server-ts --login
# Or from local source:
bun run loginA Chrome browser window will open to the LinkedIn login page.
Complete your login (including 2FA / CAPTCHA if prompted).
The server detects successful navigation to your feed and saves your session profile securely.
Check Session Status
bunx linkedin-mcp-server-ts --status
# Or from local source:
bun run statusLogout & Clear Session
bunx linkedin-mcp-server-ts --logout
# Or from local source:
bun run logoutโ๏ธ Configuration & Environment Variables
Create a .env file in the root directory (or pass CLI arguments) to customize behavior:
Variable | CLI Flag | Default | Description |
|
|
| Path to persistent browser profile directory |
|
|
| Run browser in headless mode |
|
|
| Transport protocol: |
|
|
| HTTP bind host |
|
|
| HTTP port |
|
|
| HTTP endpoint path |
|
|
| DOM navigation/interaction timeout (ms) |
|
|
| Per-tool MCP execution timeout (seconds) |
|
|
| Maximum wait time during |
|
|
| Wait time for inline authentication fallback (seconds) |
|
|
| Automatically import cookies if no profile exists |
|
|
| Custom path to Chrome/Chromium executable |
|
|
| Optional custom browser User-Agent override |
|
|
| Browser viewport dimensions ( |
|
|
| Chrome remote debugging port used during |
|
|
| Logging level ( |
๐งช Development, Testing & Quality
Run Contract & Unit Tests
Run the full test suite verifying all 19 tools, schema validations, link metadata classifiers, and error handling:
bun testLinting & Formatting
Code style and formatting are enforced with Biome:
# Check code for lint issues
bun run lint
# Auto-fix formatting and linting
bun run lint:fix
# Format files
bun run formatProject Architecture
linkedin-mcp-server-ts/
โโโ src/
โ โโโ index.ts # CLI Entrypoint & Transport routing (stdio / HTTP)
โ โโโ config.ts # CLI flags & environment configuration
โ โโโ browser/
โ โ โโโ auth.ts # Login, logout, status, and browser cookie importer
โ โ โโโ cdp.ts # Direct Chrome DevTools Protocol helper functions
โ โ โโโ chrome-launch.ts # Process launcher for visual login & remote attach
โ โ โโโ manager.ts # Bun.WebView & CDP lifecycle manager
โ โ โโโ types.ts # Browser status types
โ โโโ errors/ # Unified error handling & custom error hierarchy
โ โโโ mcp/
โ โ โโโ create-server.ts # MCP Server registration & tool mounting
โ โโโ middleware/ # Concurrency serialization queue
โ โโโ scraping/ # DOM extraction, noise removal, link classification & URNs
โ โโโ session/ # Cookie storage, profile directories, and persistence
โ โโโ tools/ # 19 MCP tool implementations
โ โโโ utils/ # General helpers
โโโ tests/ # Bun test suite & contract validations
โโโ bunfig.toml # Bun configuration & npm publish registry settings
โโโ package.json # Package metadata, dependencies, and scripts๐ฆ Publishing to NPM
This project uses bunfig.toml to publish directly to the npm registry with Bun:
# Verify typecheck & tests pass
bun test
bun run lint
# Publish public package
bun publish๐ค Contributing
Contributions, bug reports, and pull requests are welcome!
Fork the repository on GitHub:
https://github.com/joaovjo/linkedin-mcp-server-tsCreate a feature branch:
git checkout -b feature/amazing-featureCommit your changes:
git commit -m 'feat: add amazing feature'Ensure all tests pass:
bun test && bun run lintPush to the branch:
git push origin feature/amazing-featureOpen a Pull Request.
๐ License & Credits
License: Distributed under the MIT License.
Credits: Special thanks to Daniel Sticker and contributors of
stickerdaniel/linkedin-mcp-serverfor the original Python architecture, scraper logic, and research.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
MCP server for LeadDelta โ manage LinkedIn connections and CRM data via AI assistants.
Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/joaovjo/linkedin-mcp-server-ts'
If you have feedback or need assistance with the MCP directory API, please join our Discord server