Skip to main content

LinkedIn Model Context Protocol (MCP) Server

Project description

LinkedIn Model Context Protocol (MCP) Server

License: MIT Python Version Code Style: Black

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.

Features

  • 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

Architecture

This project implements the Model Context Protocol (MCP) specification, allowing AI assistants to interact with LinkedIn through standardized JSON-RPC style requests and responses.

Project Structure

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

Getting Started

Prerequisites

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/linkedin-mcp.git
    cd linkedin-mcp
    
  2. Create and activate a virtual environment

    # Linux/macOS
    python -m venv venv
    source venv/bin/activate
    
    # Windows
    python -m venv venv
    .\venv\Scripts\activate
    
  3. Install dependencies

    pip install -r requirements.txt
    
  4. Set up environment variables

    cp .env.example .env
    

    Edit the .env file with your LinkedIn API credentials and other settings.

Configuration

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

Usage

Starting the Server

python server.py

Example MCP Requests

Authentication

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "linkedin.login",
  "params": {
    "username": "user@example.com",
    "password": "password123"
  }
}

Searching for Jobs

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "linkedin.searchJobs",
  "params": {
    "filter": {
      "keywords": "software engineer",
      "location": "New York, NY",
      "distance": 25
    },
    "page": 1,
    "count": 20
  }
}

Generating a Resume

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "linkedin.generateResume",
  "params": {
    "profileId": "user123",
    "template": "standard",
    "format": "pdf"
  }
}

Available Methods

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

Development

Project Structure

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

Running Tests

pytest

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • LinkedIn API documentation
  • Model Context Protocol specification

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iflow_mcp_rayyan9477_linkedin_mcp-0.1.0.tar.gz (62.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file iflow_mcp_rayyan9477_linkedin_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: iflow_mcp_rayyan9477_linkedin_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 62.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for iflow_mcp_rayyan9477_linkedin_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4e374c0a77a25bcd99a98b20c0a4fab8d5eb2028d155f7895eeb7a5226c0ddaa
MD5 957152573fdc1550d5b0814af58de53c
BLAKE2b-256 ceb6aae725d489d91bd13ade6d35805a9baac2a3cfcbec1ffd67559a6bec0248

See more details on using hashes here.

File details

Details for the file iflow_mcp_rayyan9477_linkedin_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: iflow_mcp_rayyan9477_linkedin_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 75.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for iflow_mcp_rayyan9477_linkedin_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a016ad12925199915b732e286ee58af4c808fc0bdda43cc2125570b994b6cda3
MD5 879fc743c40e1cf1e6709da5c9e4229b
BLAKE2b-256 14a9083cf7609c6f27715bf9b5db197019e0335cd9177a9074f2c77b36dfb691

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page