icon for mcp server

JobSpy

HTTP-SSESTDIO

基于JobSpy的多平台招聘搜索MCP服务器

JobSpy MCP Server

A Model Context Protocol (MCP) server that enables AI assistants like Claude to search for jobs across multiple job listing platforms using the JobSpy tool.

Features

  • Search for jobs across multiple platforms (Indeed, LinkedIn, Glassdoor, etc.)
  • Filter by search terms, location, time frames, and more
  • Get structured job data that AI models can easily process
  • Format results as JSON or CSV
  • Multiple transport options: stdio for Claude integration, SSE for web clients

Prerequisites

  • Node.js 16+
  • Python 3.6+
  • The JobSpy tool installed and available

Installation

# Clone the repository git clone https://github.com/yourusername/jobspy-mcp-server.git cd jobspy-mcp-server # Install dependencies npm install # Make sure the JobSpy tool is properly set up cd ../jobSpy pip install -r requirements.txt chmod +x run.sh

Configuration

The server will automatically try to locate the JobSpy script in standard locations:

  • ../jobSpy/run.sh (relative to the server directory)
  • ./run.sh (in the current directory)
  • /app/run.sh (for Docker environments)

Environment Variables

You can configure the server using the following environment variables:

Environment VariableDescriptionDefault
JOBSPY_DOCKER_IMAGEDocker image to use for JobSpyjobspy
JOBSPY_ACCESS_TOKENAccess token for JobSpy API (if required)none
PORTPort for the MCP server9423
HOSTHost for HTTP server'0.0.0.0'
ENABLE_SSEEnable Server-Sent Events transport0

Setting Up Configuration

You can set these configuration values in multiple ways:

1. Using environment variables directly

export JOBSPY_DOCKER_IMAGE=jobspy export JOBSPY_HOST='0.0.0.0' export JOBSPY_PORT=9423 export ENABLE_SSE=1

2. Using a .env file

Create a .env file in the root directory with your configuration:

JOBSPY_DOCKER_IMAGE=jobspy
JOBSPY_HOST='0.0.0.0'
JOBSPY_PORT=9423
ENABLE_SSE=1

Usage

Starting the server

npm start

Connecting with Claude Desktop

Add the following to your Claude Desktop config file (typically at ~/Library/Application Support/Claude/claude_desktop_config.json):

{ "mcpServers": { "jobspy": { "command": "node", "args": ["/path/to/jobspy-mcp-server/src/index.js"], "env": { "ENABLE_SSE": 0 } } } }

Using with Web Clients (SSE Transport)

The server exposes HTTP endpoints that allow web applications to interact with the JobSpy MCP server:

  • Connect for updates: GET /mcp/connect

    • Establishes a Server-Sent Events (SSE) connection for real-time updates
    • Returns progress updates and job search results
  • Send requests: POST /mcp/request

    • Accepts tool invocation requests in MCP format
    • Returns tool responses

Example JavaScript client for browser:

// Connect to SSE endpoint const eventSource = new EventSource('http://localhost:9423/mcp/connect'); // Listen for updates eventSource.onmessage = function(event) { const data = JSON.parse(event.data); console.log('Received update:', data); // Handle progress updates if (data.type === 'progress') { updateProgressBar(data.progress); } }; // Send a search request async function searchJobs() { const response = await fetch('http://localhost:9423/mcp/request', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tool: 'search_jobs', params: { search_term: 'software engineer', location: 'San Francisco, CA', site_names: 'indeed,linkedin' } }) }); return await response.json(); }

API Usage

The server exposes the following endpoints:

Search Jobs

GET /search

Query parameters:

  • site_names: Comma-separated list of job sites to search
  • search_term: Term to search for
  • location: Job location
  • And other JobSpy parameters as needed

Available Tools

search_jobs

Searches for jobs across various job listing websites.

Parameters:

ParameterTypeDescriptionDefault
site_namesstringComma-separated list of job sites to search (indeed,linkedin,zip_recruiter,glassdoor,google,bayt,naukri)"indeed"
search_termstringSearch term for jobs"software engineer"
locationstringLocation for job search"San Francisco, CA"
google_search_termstringGoogle specific search termnull
results_wantedintegerNumber of results wanted20
hours_oldintegerHow many hours old the jobs can be72
country_indeedstringCountry for Indeed search"USA"
linkedin_fetch_descriptionbooleanWhether to fetch LinkedIn job descriptions (slower)false
formatstringOutput format (json or csv)"json"
outputstringOutput filename without extension"jobs"

Example usage with Claude:

I need to find senior software engineer jobs in Boston posted in the last 24 hours on both LinkedIn and Indeed.

Docker Support

A Dockerfile is provided to containerize the MCP server:

# Build the Docker image docker build -t jobspy-mcp-server . # Run the container docker run -p 9423:9423 jobspy-mcp-server

Development

Running in development mode

npm run dev

Running tests

npm test
curl -X POST "http://localhost:9423/api" \ -H "Content-Type: application/json" \ -d '{ "method": "search_jobs", "params": { "search_term": "software engineer", "location": "San Francisco, CA", "site_names": "indeed,linkedin", "results_wanted": 10, "format": "json" } }'

License

MIT

MCP Now 重磅来袭,抢先一步体验