Search people, companies, and jobs, and scrape structured LinkedIn data.
LinkedIn MCP Server
A Model Context Protocol (MCP) server for LinkedIn. Search people, companies, and jobs, scrape profiles, and retrieve structured JSON data from any MCP-compatible AI client.
https://github.com/user-attachments/assets/50cd8629-41ee-4261-9538-40dc7d30294e
Built with FastMCP, Patchright, and a clean hexagonal architecture.
Features
| Category | Tools |
|---|---|
| People | get_person_profile · search_people |
| Companies | get_company_profile · get_company_posts |
| Jobs | get_job_details · search_jobs |
| Browser | close_browser |
Person Profile Sections
The get_person_profile tool supports granular section scraping. Request only the sections you need:
- Main profile (always included) — name, headline, location, followers, connections, about, profile image
- Experience — title, company, dates, duration, description, company logo
- Education — school, degree, dates, description, school logo
- Contact info — email, phone, websites, birthday, LinkedIn URL
- Interests — people, companies, and groups followed
- Honors and awards — title, issuer, description
- Languages — language name and proficiency level
- Posts — recent activity with reactions and timestamps
- Recommendations — received and given, with author details
Company Profile Sections
- About (always included) — overview, website, industry, size, headquarters, specialties, logo
- Posts — recent feed posts with engagement metrics
- Jobs — current open positions
Job Search Filters
The search_jobs tool supports the following filters:
| Filter | Values |
|---|---|
date_posted |
past_hour, past_24_hours, past_week, past_month |
job_type |
full_time, part_time, contract, temporary, internship, other |
experience_level |
entry, associate, mid_senior, director, executive |
work_type |
on_site, remote, hybrid |
easy_apply |
true / false |
sort_by |
date, relevance |
Prerequisites
- Python 3.12 or later
- uv package manager
- A LinkedIn account for authentication
Quick Start
1. Clone and install
git clone https://github.com/eliasbiondo/linkedin-mcp-server.git
cd linkedin-mcp-server
uv sync
2. Install browser
This project uses Patchright (a patched fork of Playwright) for browser automation. You need to install the browser binaries before first use:
uv run patchright install
Windows users: If the command above fails with
program not found, run instead:uv run python -m patchright install
3. Authenticate with LinkedIn
uv run linkedin-mcp-server --login
A browser window will open. Log in to LinkedIn and the session will be persisted locally at ~/.linkedin-mcp-server/browser-data.
4. Run the server
stdio transport (default — for Claude Desktop, Cursor, and similar clients):
uv run linkedin-mcp-server
HTTP transport (for remote clients, the MCP Inspector, etc.):
uv run linkedin-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000
Client Integration
Claude Desktop / Cursor
Add to your MCP configuration file:
{
"mcpServers": {
"linkedin": {
"command": "uv",
"args": [
"--directory", "/path/to/linkedin-mcp-server",
"run", "linkedin-mcp-server"
]
}
}
}
MCP Inspector
npx @modelcontextprotocol/inspector
Then connect to http://localhost:8000/mcp if using HTTP transport.
Configuration
Configuration follows a strict precedence chain: CLI args > environment variables > .env file > defaults.
CLI Arguments
| Argument | Description | Default |
|---|---|---|
--transport |
stdio or streamable-http |
stdio |
--host |
Host for HTTP transport | 127.0.0.1 |
--port |
Port for HTTP transport | 8000 |
--log-level |
DEBUG, INFO, WARNING, ERROR |
WARNING |
--headless |
Run browser in headless mode | ` |
Tools (7)
get_person_profileRetrieves detailed profile information for a specific person.search_peopleSearches for people on LinkedIn based on query parameters.get_company_profileRetrieves detailed profile information for a specific company.get_company_postsRetrieves recent posts from a company page.get_job_detailsRetrieves full details for a specific job listing.search_jobsSearches for job listings based on filters.close_browserCloses the active browser instance.Configuration
{"mcpServers": {"linkedin": {"command": "uv", "args": ["--directory", "/path/to/linkedin-mcp-server", "run", "linkedin-mcp-server"]}}}