baby-benzing/job-research-mcp-server
If you are the rightful owner of job-research-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A Model Context Protocol (MCP) server designed for comprehensive job research across multiple platforms, currently supporting LinkedIn with plans to expand to Indeed, Glassdoor, and others.
Job Research MCP Server
A Model Context Protocol (MCP) server for comprehensive job research across multiple platforms. Currently supports LinkedIn with plans to add Indeed, Glassdoor, and other job platforms.
Features
Current Platforms
LinkedIn (Active)
- Profile Fetching: Retrieve public LinkedIn profile information
- Job & People Search: Search for jobs and professionals
- Batch Processing: Fetch multiple profiles with concurrency control
- Rate Limiting: Built-in rate limiting to respect LinkedIn's servers
Coming Soon
Indeed
- Job search and filtering
- Salary insights
- Company reviews integration
Glassdoor
- Company ratings and reviews
- Salary data and trends
- Interview experiences
Installation
Prerequisites
- Python 3.10 or higher
- Chrome browser (if using Selenium mode)
Setup
- Clone the repository:
git clone <repository-url>
cd job-research-mcp-server
- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install dependencies:
pip install -r requirements.txt
- Configure environment variables:
cp .env.example .env
# Edit .env with your preferences
Configuration
The server can be configured through environment variables in the .env
file:
SCRAPING_METHOD
: Set to 'public' for public data onlyUSER_AGENT
: Browser user agent stringREQUEST_DELAY_MIN
: Minimum seconds between requests (default: 2)REQUEST_DELAY_MAX
: Maximum seconds between requests (default: 5)USE_SELENIUM
: Set to 'true' to use Selenium for JavaScript rendering
Usage
Starting the Server
Run the MCP server:
cd src
python server.py
The server will start on http://localhost:8000
by default.
Available Tools
LinkedIn Tools
1. linkedin_fetch_profile
Fetches public profile data for a single LinkedIn profile.
Parameters:
profile_id
(string): The LinkedIn profile ID
Returns:
- Profile data including name, headline, location, experience, education, and skills
2. linkedin_search
Search LinkedIn for people or jobs.
Parameters:
query
(string): Search querycompany
(string, optional): Company filtersearch_type
(string): "people" or "jobs"
Returns:
- Search URL and query parameters
3. linkedin_batch_fetch
Fetch multiple LinkedIn profiles with rate limiting.
Parameters:
profile_ids
(list): List of profile IDsmax_concurrent
(int): Maximum concurrent requests
Returns:
- List of profile data dictionaries
General Tools
4. search_all_platforms
Search across multiple job platforms simultaneously.
Parameters:
query
(string): Search queryplatforms
(list, optional): Platforms to search
Returns:
- Combined results from all platforms
5. get_server_info
Returns server configuration and available features.
Project Structure
job-research-mcp-server/
āāā src/
ā āāā tools/
ā ā āāā common/ # Base classes and shared utilities
ā ā āāā linkedin/ # LinkedIn-specific implementation
ā ā āāā indeed/ # Indeed implementation (coming soon)
ā ā āāā glassdoor/ # Glassdoor implementation (coming soon)
ā āāā server.py # Main MCP server
ā āāā server_test.py # Test server (Python 3.9 compatible)
āāā tests/ # Comprehensive test suite
āāā .env.example # Environment configuration template
āāā requirements.txt # Production dependencies
āāā README.md # This file
Testing
Run the test suite:
pytest tests/
Run specific test categories:
pytest tests/test_linkedin_scraper.py # Unit tests
pytest tests/test_integration.py # Integration tests
pytest tests/test_performance.py # Performance tests
Adding New Platforms
To add support for a new job platform:
- Create a new directory under
src/tools/[platform_name]/
- Implement a scraper class inheriting from
BaseJobScraper
- Add platform-specific tools in
server.py
- Update tests and documentation
Example structure for a new platform:
# src/tools/newplatform/scraper.py
from ..common.base_scraper import BaseJobScraper
class NewPlatformScraper(BaseJobScraper):
async def fetch_profile(self, profile_id: str):
# Implementation
pass
async def search(self, query: str, **kwargs):
# Implementation
pass
Legal and Ethical Considerations
ā ļø Important:
- This server only accesses publicly available data
- Respects rate limiting to avoid overwhelming servers
- Does not bypass authentication or access private data
- Users are responsible for ensuring their use case complies with platform Terms of Service
Roadmap
- LinkedIn profile fetching
- LinkedIn job search
- Multi-platform architecture
- Indeed job search integration
- Glassdoor company data
- Resume matching
- Job alert system
- Analytics dashboard
Contributing
Contributions are welcome! Please ensure:
- Code follows the existing architecture
- Tests are added for new features
- Documentation is updated
- Ethical scraping practices are maintained
License
[Your License Here]
Disclaimer
This tool is for educational and research purposes only. Users are responsible for complying with all applicable Terms of Service and laws. The authors are not responsible for any misuse of this software.