A powerful Model Context Protocol server for LinkedIn interactions that enables AI assistants to search for jobs, generate resumes and cover letters, and manage job applications programmatically.
- Authentication: Secure OAuth 2.0 authentication with token refresh
- Profile Management: Access and update LinkedIn profile information
- Job Search: Advanced job search with filtering and pagination
- Resume & Cover Letters: Generate tailored resumes and cover letters
- Messaging: Send messages and connection requests
- Analytics: Track job applications and engagement metrics
- Async API: Built with asyncio for high performance
- Modular Design: Clean, maintainable code with separation of concerns
This project implements the Model Context Protocol (MCP) specification, allowing AI assistants to interact with LinkedIn through standardized JSON-RPC style requests and responses.
linkedin_mcp/
├── api/
│ ├── clients/ # API client implementations
│ │ ├── __init__.py # Client factory functions
│ │ ├── linkedin.py # LinkedIn API client
│ │ └── openai.py # OpenAI integration
│ │
│ ├── models/ # Data models and schemas
│ │ ├── __init__.py # Model exports
│ │ ├── common.py # Common data models
│ │ ├── enums.py # Enumerations
│ │ ├── requests.py # Request models
│ │ └── responses.py # Response models
│ │
│ └── services/ # Business logic
│ └── ...
│
├── core/ # Core application logic
│ ├── __init__.py
│ ├── exceptions.py # Custom exceptions
│ ├── mcp_handler.py # MCP protocol handler
│ └── protocol.py # Protocol definitions
│
├── utils/ # Utility functions
│ ├── __init__.py
│ ├── auth.py # Authentication helpers
│ ├── rate_limiter.py # Rate limiting
│ └── retry.py # Retry mechanisms
│
├── examples/ # Example scripts
│ └── basic_usage.py # Basic client usage example
│
├── .env.example # Example environment variables
├── README.md # This file
└── requirements.txt # Project dependencies
- Python 3.8+
- LinkedIn Developer Account
- OAuth 2.0 credentials from LinkedIn Developers
-
Clone the repository
git clone https://github.com/yourusername/linkedin-mcp.git cd linkedin-mcp
-
Create and activate a virtual environment
# Linux/macOS python -m venv venv source venv/bin/activate # Windows python -m venv venv .\venv\Scripts\activate
-
Install dependencies
pip install -r requirements.txt
-
Set up environment variables
cp .env.example .env
Edit the
.env
file with your LinkedIn API credentials and other settings.
Create a .env
file in the project root with the following variables (see .env.example
for details):
# LinkedIn API Credentials (required)
LINKEDIN_CLIENT_ID=your_client_id_here
LINKEDIN_CLIENT_SECRET=your_client_secret_here
LINKEDIN_REDIRECT_URI=http://localhost:8080/callback
# Optional: OpenAI API Key (for resume/cover letter generation)
# OPENAI_API_KEY=your_openai_api_key_here
# Optional: Logging
LOG_LEVEL=INFO
# API Settings
OPENAI_API_KEY=your_openai_api_key
SESSION_DIR=sessions
DATA_DIR=data
python server.py
{
"jsonrpc": "2.0",
"id": 1,
"method": "linkedin.login",
"params": {
"username": "[email protected]",
"password": "password123"
}
}
{
"jsonrpc": "2.0",
"id": 2,
"method": "linkedin.searchJobs",
"params": {
"filter": {
"keywords": "software engineer",
"location": "New York, NY",
"distance": 25
},
"page": 1,
"count": 20
}
}
{
"jsonrpc": "2.0",
"id": 3,
"method": "linkedin.generateResume",
"params": {
"profileId": "user123",
"template": "standard",
"format": "pdf"
}
}
Method | Description |
---|---|
linkedin.login |
Authenticate with LinkedIn |
linkedin.logout |
End the current session |
linkedin.checkSession |
Check if the current session is valid |
linkedin.getFeed |
Get LinkedIn feed posts |
linkedin.getProfile |
Get LinkedIn profile information |
linkedin.getCompany |
Get company profile information |
linkedin.searchJobs |
Search for jobs with filters |
linkedin.getJobDetails |
Get detailed information about a job |
linkedin.getRecommendedJobs |
Get job recommendations |
linkedin.generateResume |
Generate a resume from a LinkedIn profile |
linkedin.generateCoverLetter |
Generate a cover letter for a job application |
linkedin.tailorResume |
Customize a resume for a specific job |
linkedin.applyToJob |
Apply to a job |
linkedin.getApplicationStatus |
Check application status |
linkedin.getSavedJobs |
Get saved jobs |
linkedin.saveJob |
Save a job for later |
linkedin-mcp/
├── README.md
├── requirements.txt
├── server.py
├── data/
│ ├── applications/
│ ├── companies/
│ ├── cover_letters/
│ ├── jobs/
│ ├── profiles/
│ └── resumes/
├── linkedin_mcp/
│ ├── api/
│ │ ├── auth.py
│ │ ├── cover_letter_generator.py
│ │ ├── job_application.py
│ │ ├── job_search.py
│ │ ├── profile.py
│ │ └── resume_generator.py
│ ├── core/
│ │ ├── mcp_handler.py
│ │ └── protocol.py
│ └── utils/
│ └── config.py
├── sessions/
└── templates/
├── cover_letter/
│ └── standard.html
└── resume/
└── standard.html
pytest
This project is licensed under the MIT License - see the LICENSE file for details.
- LinkedIn API documentation
- Model Context Protocol specification