A production-ready Model Context Protocol (MCP) server for job searching across multiple job boards, built with JobSpy and containerized for easy deployment.
- Multi-platform job search: LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, BDJobs
- MCP Protocol: Standard interface for AI assistants (Claude Desktop, Claude Code)
- Docker containerized: Easy deployment and scaling
- LAN-safe: Secure local network access only
- No API keys required: JobSpy handles all authentication internally
βββββββββββββββββββ TCP:8500 ββββββββββββββββββββββββ
β Claude Code βββββββββββββββββΊβ MCP Server Stack β
β Claude Desktop β β β
βββββββββββββββββββ β βββββββββββββββββββ β
β β JobSpy MCP β β
β β Server β β
β βββββββββββββββββββ β
β β
β βββββββββββββββββββ β
β β Future MCP β β
β β Servers β β
β βββββββββββββββββββ β
ββββββββββββββββββββββββ
- Docker & Docker Compose
- Linux/macOS (tested on Ubuntu/Debian)
- Network access to job boards
git clone https://github.com/YOUR_USERNAME/jobspy-mcp-stack.git
cd jobspy-mcp-stack
docker-compose up -d# Check container status
docker-compose ps
# Test connection
telnet localhost 8500Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"jobspy": {
"command": "nc",
"args": ["YOUR_SERVER_LAN_IP", "8500"],
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}Replace YOUR_SERVER_LAN_IP with your server's LAN IP (e.g., 192.168.1.100).
Connect to MCP server:
- Host:
YOUR_SERVER_LAN_IP - Port:
8500 - Protocol:
TCP - Authentication:
None
Search for job postings across multiple job boards.
Parameters:
search_term(required): Job title or keywordslocation(optional): Location to search insite_name(optional): Job boards to search (default: ["indeed", "linkedin"])results_wanted(optional): Number of results per site (1-100, default: 20)job_type(optional): "fulltime", "parttime", "internship", "contract"is_remote(optional): Filter for remote jobsdistance(optional): Search radius in miles (default: 50)hours_old(optional): Filter jobs posted within X hourscountry_indeed(optional): Country for Indeed/Glassdoor (default: "usa")
Example:
Search for software engineer jobs in San Francisco with remote options
Get detailed information about a specific job posting (planned feature).
| Job Board | Coverage | Rate Limits |
|---|---|---|
| Indeed | Global, best performance | Minimal |
| Global | Moderate (use proxies for heavy usage) | |
| Glassdoor | Most countries | Moderate |
| ZipRecruiter | US/Canada | Low |
| Google Jobs | Global (specific syntax) | Low |
| Bayt | Middle East | Low |
| Naukri | India | Low |
| BDJobs | Bangladesh | Low |
environment:
- PYTHONUNBUFFERED=1
- LOG_LEVEL=INFO- 8500: JobSpy MCP Server
- 8501-8510: Reserved for future MCP servers
The server supports all JobSpy parameters. See JobSpy documentation for advanced usage.
docker-compose updocker-compose up -d --restart unless-stopped- Create your MCP server in a new directory
- Add service to
docker-compose.yml:
your-mcp:
build: ../YourMCPServer
container_name: mcp-your-server
ports:
- "8501:8501"
networks:
- mcp-network
restart: unless-stoppeddocker-compose ps
docker-compose logs -fdocker stats mcp-jobspy-server# Test TCP connection
nc -zv YOUR_SERVER_IP 8500
# Test MCP protocol
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | nc YOUR_SERVER_IP 8500- LAN-only access: Server binds to private network interfaces
- Container isolation: Runs with non-root user
- No external credentials: No API keys or tokens stored
- Firewall friendly: Single port exposure
docker-compose down
docker-compose build --no-cache
docker-compose up -dgit pull origin main
docker-compose down
docker-compose up -d --buildContainer won't start:
docker-compose logs jobspy-mcpPort conflicts:
netstat -tuln | grep 8500
# Change port in docker-compose.yml if neededConnection refused:
# Check if container is running
docker-compose ps
# Check port binding
docker port mcp-jobspy-serverJob search returns no results:
- Verify internet connectivity
- Try different job boards
- Check search parameters
- Some job boards may be temporarily blocking
Enable verbose logging:
environment:
- LOG_LEVEL=DEBUG
- PYTHONUNBUFFERED=1- Rate Limiting: JobSpy handles rate limiting internally
- Proxies: For heavy usage, configure proxy rotation
- Caching: Results are not cached by default
- Concurrency: JobSpy searches job boards concurrently
- CPU: 1 core minimum, 2+ recommended
- RAM: 512MB minimum, 1GB+ recommended
- Storage: 2GB for container and logs
- Network: Stable internet connection
- Fork the repository
- Create a feature branch
- Make your changes
- Test with
docker-compose up --build - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Create an Issue for bug reports
- Check JobSpy documentation for scraping issues
- Review MCP specification for protocol questions
Built with β€οΈ for the AI community