LinkedIn MCP Pro Max
High-performance autonomous MCP server that turns LinkedIn into an API for AI workflows, enabling profile management, job search, content posting, and document generation.
README
<p align="center"> <h1 align="center">LinkedIn MCP Pro Max</h1> </p>
<p align="center"> A high-performance, autonomous <strong>Model Context Protocol (MCP)</strong> server that turns LinkedIn into an API for your AI workflows. Built with <strong>Clean Architecture</strong>, stealth browser automation, and a convention-based zero-config component registry. </p>
<p align="center"> <a href="#features"> <img src="https://img.shields.io/badge/Tools-14_Unified-blue?style=for-the-badge&logo=rocket" alt="Tools"> </a> <a href="https://github.com/astral-sh/uv"> <img src="https://img.shields.io/badge/Package_Manager-uv-purple?style=for-the-badge&logo=python" alt="UV"> </a> <a href="https://github.com/patchright/patchright"> <img src="https://img.shields.io/badge/Automation-Patchright-green?style=for-the-badge&logo=playwright" alt="Patchright"> </a> <a href="LICENSE"> <img src="https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge" alt="License"> </a> </p>
Quick Start
1. Prerequisites
Ensure you have uv installed:
curl -LsSf https://astral.sh/uv/install.sh | sh
2. Installation & Setup
Method A: Automated Setup (Recommended)
chmod +x scripts/setup.sh
./scripts/setup.sh
The script handles dependency syncing, .env bootstrapping, and stealth browser provisioning.
Method B: Manual Setup
uv sync
uv run python -m patchright install chromium
cp .env.example .env
Edit .env with your LinkedIn credentials:
LINKEDIN_EMAIL="your-email@example.com"
LINKEDIN_PASSWORD="your-secure-password"
LINKEDIN_USERNAME="your-profile-slug"
4. First-Run Authentication
uv run linkedin-mcp-pro-max --login
5. Connect to Claude Desktop (or any MCP client)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"linkedin-mcp-pro-max": {
"command": "/home/naimul/.local/bin/uv",
"args": [
"--directory",
"/home/naimul/linkedin-mcp-pro-max",
"run",
"linkedin-mcp-pro-max"
]
}
}
}
The MCP Toolkit (14 Unified Tools)
| Category | Tool | Actions | Description |
|---|---|---|---|
| Profile | profile |
get, analyze, update, update_cover_image |
Manage deep profile data, AI analysis, and identity updates |
experience |
add, update, delete |
Manage professional experience entries | |
education |
add, update, delete |
Manage education entries | |
skills |
add, delete |
Manage skills on your profile | |
company |
- | Get detailed corporate metadata and insights | |
| Jobs & Intel | job |
search, details, recommended, apply |
Discover, analyze, and apply for job postings |
application |
list, track, update |
Manage internal job application tracking | |
| Content | create_linkedin_post |
- | Publish AI-generated posts autonomously |
interact_with_post |
read, like, comment |
Engage with feed posts via URL | |
| Documents | generate_resume |
- | Generate a professional resume from your profile |
tailor_resume |
- | Target your resume to match a specific Job ID | |
generate_cover_letter |
- | Create a personalized contextual cover letter | |
list_templates |
- | View all available document templates | |
| System | server |
restart |
Manage the MCP server lifecycle |
Architecture
Built on Clean Architecture with a one-way dependency rule and a Unified Component Registry that eliminates all manual wiring.
[tools/] → [services/] → [browser/actors/ + browser/scrapers/]
ctx.my_svc manager.my_actor / manager.my_scraper
Directory Structure
src/
├── app.py # Composition root — auto-wires from registry
├── helpers/
│ └── registry.py # Unified discovery engine (ServiceMeta, ActorMeta, ScraperMeta)
├── tools/ # MCP tool definitions (@mcp.tool) — auto-discovered
├── services/ # Business logic layer — auto-wired via SERVICE markers
├── browser/
│ ├── actors/ # Write operations (UI interaction) — auto-registered
│ ├── scrapers/ # Read operations (data extraction) — auto-registered
│ ├── manager.py # Orchestrator — auto-instantiates actors/scrapers
│ └── helpers/ # Low-level browser utilities (driver, sniffer, dom)
├── api/ # LinkedIn internal API client
├── db/ # Database repositories
├── schema/ # Pydantic domain models
├── config/ # Settings and environment
└── providers/ # AI provider wrappers (OpenAI, Claude)
The Zero-Config Flow
At startup, helpers/registry.py scans services/, browser/actors/, and browser/scrapers/ automatically:
discover_all()
├── services/*.py → SERVICE = ServiceMeta(...) → injected into AppContext
├── browser/actors/* → ACTOR = ActorMeta(...) → instantiated in BrowserManager
└── browser/scrapers/ → SCRAPER = ScraperMeta(...) → instantiated in BrowserManager
No manual registration. No editing app.py or manager.py.
Adding New Features
For the complete development pipeline, debugging guide, and working examples, see the Tool Development Guide.
A full feature (scraper + service + tool) requires exactly 3 new files. No existing file is modified.
1. Browser Scraper — src/browser/scrapers/my_feature.py
from helpers.registry import ScraperMeta
class MyFeatureScraper:
def __init__(self, page): ...
async def scrape(self): ...
SCRAPER = ScraperMeta(attr="my_feature_scraper", cls=MyFeatureScraper)
2. Service — src/services/my_feature.py
from helpers.registry import ServiceMeta
class MyFeatureService:
def __init__(self, browser=None): ...
async def do_work(self): ...
SERVICE = ServiceMeta(attr="my_feature", cls=MyFeatureService, deps=["browser"], lazy=True)
3. Tool — src/tools/my_feature.py
from app import mcp, get_ctx
@mcp.tool()
async def my_feature_tool(param: str) -> str:
"""Description the AI reads to decide when to use this tool."""
ctx = await get_ctx()
await ctx.initialize_browser()
result = await ctx.my_feature.do_work()
return json.dumps(result)
app.py, manager.py, services/__init__.py, tools/__init__.py — never touched.
uv run linkedin-mcp-pro-max # Start MCP server
uv run linkedin-mcp-pro-max --login # Autonomous headless login
uv run linkedin-mcp-pro-max --status # Check authentication status
uv run linkedin-mcp-pro-max --logout # Clear session and cookies
Documentation
| Document | Description |
|---|---|
| Tool Development Guide | Full pipeline: creating tools, services, actors, scrapers. Debugging guide. |
| Services README | Service layer conventions and dependency rules |
| Actors README | Actor conventions and browser interaction patterns |
| Schema README | Pydantic model conventions |
<p align="center"> <i>Automating your professional identity smartly, securely, and seamlessly.</i><br> <b><a href="https://github.com/mdnaimul22/linkedin-mcp-pro-max">Report an Issue</a></b> </p>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.