OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  job-search-mcp:在 LinkedIn、Indeed 和 Glassdoor 跨平台搜索职位

job-search-mcp:在 LinkedIn、Indeed 和 Glassdoor 跨平台搜索职位

 
  database ·  2026-02-17 14:41:43 · 3 次点击  · 0 条评论  

名称: 职位搜索 MCP
描述: 通过 JobSpy MCP 服务器,在 LinkedIn、Indeed、Glassdoor、ZipRecruiter、Google Jobs、Bayt、Naukri 和 BDJobs 等多个平台搜索职位。
slug: job-search-mcp
标签:
- 职位搜索
- 职业
- mcp
- jobspy


职位搜索 MCP 技能

此技能使 AI 助手能够通过 JobSpy MCP 服务器 在多个招聘网站搜索职位。JobSpy 将来自 LinkedIn、Indeed、Glassdoor、ZipRecruiter、Google Jobs、Bayt、Naukri 和 BDJobs 的职位信息聚合到一个统一的接口中。

使用场景

当用户提出以下请求时,可使用此技能:
- 查找符合特定条件(职位、地点、公司等)的职位列表
- 搜索远程或现场职位
- 比较不同平台的职位机会
- 获取职位发布的薪资信息
- 查找近期发布的职位(X 小时内)
- 搜索支持“快速申请”的职位

先决条件

  • Python 3.10+
  • Node.js 16+(某些服务器实现需要)
  • 已安装并配置 JobSpy MCP 服务器

安装与配置

选项 1:Python MCP 服务器(推荐)

# 使用 pip 安装
pip install mcp>=1.1.0 python-jobspy>=1.1.82 pandas>=2.1.0 pydantic>=2.0.0

# 或使用 uv 安装(更快)
uv add mcp python-jobspy pandas pydantic

选项 2:克隆预构建的服务器

# 克隆 jobspy-mcp-server 仓库
git clone https://github.com/chinpeerapat/jobspy-mcp-server.git
cd jobspy-mcp-server

# 安装依赖
uv sync
# 或
pip install -e .

Claude Desktop 配置

将以下内容添加到 Claude Desktop 配置文件(macOS 上为 ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "jobspy": {
      "command": "uv",
      "args": ["run", "jobspy-mcp-server"],
      "env": {}
    }
  }
}

替代配置(Node.js 服务器):

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

MCP 工具模式

1. scrape_jobs_tool(主要工具)

在多个招聘网站搜索职位,支持全面的筛选功能。

参数:

参数 类型 必填 默认值 描述
search_term 字符串 ✅ 是 - 职位关键词(例如:“软件工程师”、“数据科学家”)
location 字符串 - 工作地点(例如:“旧金山, CA”、“远程”)
site_name 数组 ["indeed", "linkedin", "zip_recruiter", "google"] 要搜索的招聘网站
results_wanted 整数 15 结果数量(1-1000)
job_type 字符串 - 雇佣类型:fulltimeparttimeinternshipcontract
is_remote 布尔值 false 仅筛选远程职位
hours_old 整数 - 按发布时间筛选(小时数)
distance 整数 50 搜索半径(英里,1-100)
easy_apply 布尔值 false 筛选支持快速申请的职位
country_indeed 字符串 "usa" Indeed/Glassdoor 搜索的国家
linkedin_fetch_description 布尔值 false 获取完整的 LinkedIn 职位描述(较慢)
offset 整数 0 分页偏移量
verbose 整数 1 日志级别(0=错误,1=警告,2=全部)

site_name 支持的值:
- linkedin - 专业社交平台(有速率限制)
- indeed - 最大的职位搜索引擎(最可靠)
- glassdoor - 附带公司评价和薪资的职位
- zip_recruiter - 适用于美国/加拿大的职位匹配
- google - 聚合的职位列表
- bayt - 中东职位门户
- naukri - 印度领先的职位门户
- bdjobs - 孟加拉国职位门户

job_type 支持的值:
- fulltime(全职)
- parttime(兼职)
- internship(实习)
- contract(合同)

2. get_supported_countries

返回职位搜索支持的国家完整列表。无需参数。

3. get_supported_sites

返回所有支持的招聘网站的详细信息。无需参数。

4. get_job_search_tips

返回有效职位搜索的技巧和最佳实践。无需参数。


职位发布响应模式

返回的每个职位包含以下字段:

interface JobPost {
  // 核心字段(所有平台)
  title: string;                    // 职位标题
  company: string;                  // 公司名称
  company_url?: string;             // 公司网站 URL
  job_url: string;                  // 职位发布直接链接
  location: {
    country?: string;
    city?: string;
    state?: string;
  };
  is_remote: boolean;               // 是否为远程职位
  description?: string;             // 职位描述(Markdown 格式)
  job_type?: "fulltime" | "parttime" | "internship" | "contract";

  // 薪资信息
  salary?: {
    interval?: "yearly" | "monthly" | "weekly" | "daily" | "hourly";
    min_amount?: number;
    max_amount?: number;
    currency?: string;
    salary_source?: "direct_data" | "description";  // 从发布信息中解析
  };

  date_posted?: string;             // ISO 日期字符串
  emails?: string[];                // 可用的联系邮箱

  // LinkedIn 特定
  job_level?: string;               // 职级

  // LinkedIn 和 Indeed 特定
  company_industry?: string;        // 公司行业

  // Indeed 特定
  company_country?: string;
  company_addresses?: string[];
  company_employees_label?: string;
  company_revenue_label?: string;
  company_description?: string;
  company_logo?: string;

  // Naukri 特定
  skills?: string[];
  experience_range?: string;
  company_rating?: number;
  company_reviews_count?: number;
  vacancy_count?: number;
  work_from_home_type?: string;
}

示例:用户请求 → MCP 调用 → 输出

示例 1:基础职位搜索

用户请求:

“帮我找 10 个旧金山的软件工程师职位”

MCP 工具调用:

{
  "tool": "scrape_jobs_tool",
  "params": {
    "search_term": "软件工程师",
    "location": "旧金山, CA",
    "results_wanted": 10,
    "site_name": ["indeed", "linkedin"]
  }
}

预期输出:

{
  "jobs": [
    {
      "title": "软件工程师",
      "company": "TechCorp Inc.",
      "location": { "city": "旧金山", "state": "CA" },
      "job_url": "https://indeed.com/viewjob?jk=abc123",
      "salary": { "min_amount": 120000, "max_amount": 180000, "interval": "yearly" },
      "job_type": "fulltime",
      "is_remote": false
    }
    // ... 更多职位
  ],
  "total_found": 10
}

示例 2:远程职位搜索

用户请求:

“在 Indeed 和 ZipRecruiter 上搜索远程 Python 开发职位”

MCP 工具调用:

{
  "tool": "scrape_jobs_tool",
  "params": {
    "search_term": "Python 开发",
    "location": "远程",
    "is_remote": true,
    "site_name": ["indeed", "zip_recruiter"],
    "results_wanted": 20
  }
}

示例 3:近期职位带筛选

用户请求:

“查找过去 24 小时内发布的波士顿数据科学家职位”

MCP 工具调用:

{
  "tool": "scrape_jobs_tool",
  "params": {
    "search_term": "数据科学家",
    "location": "波士顿, MA",
    "hours_old": 24,
    "site_name": ["linkedin", "glassdoor", "indeed"],
    "linkedin_fetch_description": true
  }
}

示例 4:入门级职位带快速申请

用户请求:

“寻找纽约的入门级营销职位,要求支持快速申请”

MCP 工具调用:

{
  "tool": "scrape_jobs_tool",
  "params": {
    "search_term": "初级营销",
    "location": "纽约, NY",
    "job_type": "fulltime",
    "easy_apply": true,
    "site_name": ["indeed", "zip_recruiter"],
    "results_wanted": 30
  }
}

示例 5:国际职位搜索

用户请求:

“在 Indeed 上查找德国的软件职位”

MCP 工具调用:

{
  "tool": "scrape_jobs_tool",
  "params": {
    "search_term": "软件开发",
    "location": "柏林",
    "country_indeed": "germany",
    "site_name": ["indeed"],
    "results_wanted": 15
  }
}

示例 6:获取辅助信息

用户请求:

“支持哪些招聘网站?”

MCP 工具调用:

{
  "tool": "get_supported_sites",
  "params": {}
}

预期输出:

{
  "sites": [
    { "name": "indeed", "description": "最大的职位搜索引擎,最可靠" },
    { "name": "linkedin", "description": "专业社交平台,有速率限制" },
    { "name": "glassdoor", "description": "附带公司评价和薪资的职位" },
    { "name": "zip_recruiter", "description": "适用于美国/加拿大的职位匹配" },
    { "name": "google", "description": "聚合的职位列表" },
    { "name": "bayt", "description": "中东职位门户" },
    { "name": "naukri", "description": "印度领先的职位门户" },
    { "name": "bdjobs", "description": "孟加拉国职位门户" }
  ]
}

错误处理示例

错误 1:速率限制

场景: LinkedIn 返回速率限制错误。

错误响应:

{
  "error": "RateLimitError",
  "message": "LinkedIn 速率限制已超。请稍后重试或使用其他网站。",
  "suggestion": "切换到 Indeed 或 ZipRecruiter,它们的速率限制更宽松。"
}

处理方法:
- 将 results_wanted 减少到较小数值(10-15)
- 暂时从 site_name 中移除 linkedin
- 在搜索之间添加延迟
- 如果可用,考虑使用代理配置


错误 2:未找到结果

场景: 搜索返回空结果。

错误响应:

{
  "jobs": [],
  "total_found": 0,
  "message": "未找到符合您条件的职位"
}

处理方法:
- 扩大搜索词范围(例如,用“工程师”代替“高级首席软件工程师”)
- 增加 distance 半径
- 移除限制性筛选条件,如 hours_oldjob_type
- 尝试不同的 site_name 选项
- 检查地点拼写是否正确


错误 3:无效的国家代码

场景: 用户为 Indeed 指定了不支持的国家。

错误响应:

{
  "error": "ValidationError",
  "message": "无效的 country_indeed 值。请使用 get_supported_countries 查看有效选项。"
}

处理方法:
- 调用 get_supported_countries 获取有效的国家代码
- 使用确切的国家名称(例如,用“usa”而不是“US”,用“united kingdom”而不是“UK”)


错误 4:平台特定的限制冲突

场景: 用户尝试使用冲突的筛选条件。

已知限制:
- Indeed: 只能使用以下之一:hours_oldjob_type & is_remoteeasy_apply
- LinkedIn: 只能使用以下之一:hours_oldeasy_apply

处理方法:
- 告知用户此限制
- 优先考虑最重要的筛选条件
- 如果需要多个筛选条件,则运行单独的搜索


反模式(应避免的操作)

❌ 不要:请求过多结果

// 错误 - 可能导致超时或触发速率限制
{
  "search_term": "工程师",
  "results_wanted": 1000,
  "site_name": ["linkedin", "indeed", "glassdoor", "zip_recruiter", "google"]
}

原因: 同时从过多网站请求过多结果会触发速率限制并导致超时。

✅ 正确做法:

{
  "search_term": "软件工程师",
  "results_wanted": 20,
  "site_name": ["indeed", "linkedin"]
}

❌ 不要:过度使用 LinkedIn

// 错误 - LinkedIn 有严格的速率限制
{
  "search_term": "开发",
  "site_name": ["linkedin"],
  "results_wanted": 100,
  "linkedin_fetch_description": true
}

原因: LinkedIn 有最严格的速率限制。使用 linkedin_fetch_description: true 会倍增请求数。

✅ 正确做法:
- 使用 Indeed 作为主要来源
- 将 LinkedIn 限制在 10-15 个结果
- 仅在确实需要时启用 linkedin_fetch_description


❌ 不要:使用冲突的筛选条件

// 错误 - Indeed 限制:只能使用一组筛选条件
{
  "search_term": "开发",
  "site_name": ["indeed"],
  "hours_old": 24,
  "job_type": "fulltime",
  "is_remote": true
}

原因: Indeed 仅支持以下之一:hours_oldjob_type & is_remoteeasy_apply

✅ 正确做法:

// 要么按发布时间筛选
{
  "search_term": "开发",
  "site_name": ["indeed"],
  "hours_old": 24
}

// 要么按职位类型筛选
{
  "search_term": "开发",
  "site_name": ["indeed"],
  "job_type": "fulltime",
  "is_remote": true
}

❌ 不要:进行模糊搜索且不提供上下文

// 错误 - 过于宽泛,将返回不相关的结果
{
  "search_term": "工作"
}

原因: 模糊搜索会返回低质量结果并浪费 API 调用。

✅ 正确做法:
- 始终包含具体的职位名称或技能
- 在已知时包含地点
- 使用筛选条件缩小结果范围


❌ 不要:忽略错误响应

原因: 速率限制、网络问题和无效参数需要适当处理。

✅ 正确做法:
- 在处理结果前检查错误响应
- 为速率限制实现带退避的重试逻辑
- 当搜索失败时向用户提供有用的信息


❌ 不要:使用错误的国家代码

// 错误 - 国家代码格式错误
{
  "search_term": "开发",
  "country_indeed": "UK"  // 错误!应使用 "united kingdom"
}

✅ 正确做法:
- 使用 get_supported_countries 验证有效的国家代码
- 常见代码:"usa"、"united kingdom"、"canada"、"germany"、"india"


速率限制与最佳实践

平台可靠性排名

  1. Indeed - 最可靠,适合大规模搜索
  2. ZipRecruiter - 适用于美国/加拿大,可靠
  3. Google Jobs - 聚合效果好,稳定
  4. Glassdoor - 可靠,提供公司洞察
  5. LinkedIn - 限制最严格,谨慎使用

推荐方法

  1. 从小开始: 先用 10-15 个结果测试筛选条件
  2. 优先使用 Indeed: 对于职位数据最可靠
  3. 具体明确: 使用有针对性的搜索词
  4. 明智筛选: 对于 Indeed/LinkedIn,一次只使用一组筛选条件
  5. 分页处理: 使用 offset 获取更多结果,而不是设置高 results_wanted

支持的国家

调用 `get

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor