职位搜索MCP服务器

一个模型上下文协议(MCP)服务器,使AI助手能够在多个职位列表平台上搜索职位,支持JSON或CSV格式输出,适用于AI模型处理和集成。

  • by borgius
  • JavaScript
  • 本地部署
  • 123 星标
  • 更新于
在 GitHub 查看 borgius/jobspy-mcp-server

使用说明

JobSpy MCP服务器

一个模型上下文协议(MCP)服务器,使像克劳德这样的人工智能助手能够使用 JobSpy 工具。

特性

  • 在多个平台上搜索工作(事实上,LinkedIn、Glassdoor等)
  • 按搜索词、位置、时间框架等筛选
  • 获取人工智能模型可以轻松处理的结构化工作数据
  • 将结果格式化为JSON或CSV
  • 多种传输选项:用于Claude集成的stdio,用于web客户端的SSE

先决条件

  • Node.js 16+
  • Python 3.6+
  • JobSpy工具已安装并可用

安装

# Clone the repository
git clone https://github.com/borgius/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

配置

服务器将自动尝试在标准位置定位JobSpy脚本:

  • ../jobSpy/run.sh (相对于服务器目录)
  • ./run.sh (在当前目录中)
  • /app/run.sh (适用于Docker环境)

环境变量

您可以使用以下环境变量配置服务器:

环境变量 描述 默认值
JOBSPY_DOCKER_IMAGE 用于JobSpy的Docker镜像 jobspy
JOBSPY_ACCESS_TOKEN JobSpy API的访问令牌(如果需要) none
PORT MCP服务器的端口 9423
HOST HTTP服务器的主机 “0.0.0.0”
ENABLE_SSE 启用服务器发送事件传输 0

设置配置

您可以通过多种方式设置这些配置值:

1.直接使用环境变量

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

2.使用.env文件

创建一个 .env 根目录中包含您的配置的文件:

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

用法

启动服务器

npm start

与Claude Desktop连接

将以下内容添加到您的Claude Desktop配置文件中(通常位于 ~/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
      }
    }
  }
}

与Web客户端一起使用(SSE传输)

服务器公开HTTP端点,允许web应用程序与JobSpy MCP服务器交互:

  • 连接以获取更新: GET /mcp/connect

    • 建立服务器发送事件(SSE)连接以进行实时更新
    • 返回进度更新和职位搜索结果
  • 发送请求: POST /mcp/request

    • 接受MCP格式的工具调用请求
    • 返回工具响应

浏览器的JavaScript客户端示例:

// 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使用

服务器公开以下端点:

搜索作业

GET /search

查询参数:

  • site_names:以逗号分隔的要搜索的求职网站列表
  • search_term:要搜索的术语
  • location:工作地点
  • 以及所需的其他JobSpy参数

可用工具

search_jobs

在各种工作列表网站上搜索工作。

参数:

参数 类型 描述 默认值
site_names string 逗号分隔的求职网站列表(事实上,linkedin、zip_recruiter、glassdoor、谷歌、bayt、naukri) “确实”
search_term string 职位搜索词 “软件工程师”
location string 求职地点 “加利福尼亚州旧金山”
google_search_term 字符串 谷歌特定搜索词 空
results_wanted 整数 想要的结果数量 20
hours_old integer 作业可以有多少小时的历史 72
country_inded string indeed搜索的国家 “美国”
linkedin_fetch_description boolean 是否获取linkedin职位描述(速度较慢) false
format string 输出格式(json或csv) “json”
output string 不带扩展名的输出文件名 “jobs”

Claude的用法示例:

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

Docker支持

提供了一个Dockerfile来容器化MCP服务器:

# Build the Docker image
docker build -t jobspy-mcp-server .

# Run the container
docker run -p 9423:9423 jobspy-mcp-server

发展

以开发模式运行

npm run dev

运行测试

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"
    }
  }'

许可证

麻省理工学院