mcpField
J
jd-intel-mcp

jd-intel-mcp

本地服务
github.com/prPMDev商业与营销12 周前更新

关于 jd-intel-mcp

jd-intel-mcp 让支持 MCP 的 AI 客户端从九种 ATS 平台获取并筛选完整职位描述。它将职位整理为统一结构,包含清晰的 Markdown 描述及可用的薪资和地点信息。

主要功能

  1. 01从九种 ATS 平台获取职位
  2. 02按职位、主题、地点和发布时间筛选
  3. 03将职位整理为统一结构
  4. 04以清晰 Markdown 返回完整描述
  5. 05搜索公司注册表并识别 ATS

适用场景

  1. 01查找公司的当前职位
  2. 02根据候选人背景比较岗位
  3. 03批量查看某行业的职位描述
  4. 04识别公司的招聘平台

MCP 相关

MCP 服务提供 fetch_jobs、search_registry 和 detect_ats 工具,以及 registry://jd-intel/all 资源。它在本地运行,通过公开 ATS API 获取数据,无需 API 密钥。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"prpmdev-jd-intel": {
"command": "npx",
"args": [
"-y",
"jd-intel-mcp"
]
}
}
}
启动命令npx -y jd-intel-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmjd-intel-mcp0.13.0

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
limitinteger否每页最多返回的职位数(默认值为 100)。通常 max_tokens 会先限制输出。
orderenum否"newest"(默认值):按 postedAt 排序,未标注日期的排在最后。"board":按 ATS 自身的顺序。newest | board
filterstring否在标题、部门和描述中匹配正则表达式:主题/范围
offsetinteger否排序后跳过的匹配项数(默认值为 0)。传入上一次响应中的 next_offset 以获取下一页。
companystring是公司 slug 或名称(例如 "stripe")
workdayobject否为未编入索引的 Workday 招聘板覆盖注册表配置。根据招聘页面 URL https://{tenant}.{env}.myworkdayjobs.com/{site} 推导这三个值。切勿猜测。
workday.envstring是Workday 环境/数据中心,例如 "wd108"、"wd5"
workday.sitestring是Workday 招聘网站路径,例如 "search"、"Cisco_Careers"
workday.tenantstring是Workday 租户,即 URL 中的第一个标签,例如 "expedia"
max_tokensinteger否响应的 token 预算,按文本块字符数的 1/4 计算(默认值为 12000,最小值为 1 的任意整数)。只返回完整职位;始终至少返回一个。较大的值可让每次调用返回更多完整招聘信息;较小的值适合快速浏览。
title_filterstring否仅针对标题匹配正则表达式:职位身份
location_excludesarray否仅当职位列出的所有地点都包含某个关键词时才排除该职位
location_includesarray否保留列出的任一地点包含任一关键词的职位
posted_within_daysinteger否仅返回过去 N 天内发布的职位

详细介绍

jd-intel

MIT License Node.js 18+ npm jd-intel downloads jd-intel-mcp downloads GitHub stars

别再把职位描述粘贴到 AI 助手中,让你的 AI 直接获取。

完整文本。结构清晰。覆盖九大主流 ATS。无需复制粘贴,不会丢失上下文。


为什么要做这个

你的 AI 助手已经很了解你。它的记忆里有你的简历、目标职位、过往项目和背景。只要你提供职位描述,它就能立即帮上忙。

于是你开始复制粘贴。

一家公司的职位描述,下一家公司的职位描述,还有目标清单里的十几份。其中一半 HTML 格式错乱。薪资信息在转换时丢失。链接被去掉。每看一个职位,都得从头来一遍。

你可以等招聘平台推出自己的 MCP。它们迟早会做到,但要按它们自己的时间表,受它们的优先事项影响,而不是为你着想,还得依赖它们的查询抽象。

jd-intel 不必等。让你的 AI 按你的方式直接获取原始职位描述,比精挑细选后的信息更接近源头。

试着问问你的 AI:

“查找本周发布的 AI/ML 工程职位。” “现在有哪些金融科技公司的产品设计师职位在招聘?” “查找过去 7 天发布的高级产品经理职位。”

搞定。


为什么不直接抓取网页?

因为网页抓取会在 jd-intel 不会出问题的地方出问题:

  • 浏览失败时也能获取完整职位描述。 单页应用渲染的招聘页面、加载缓慢、身份验证墙和地理限制都会阻止浏览器访问,但不会阻止公开 API 调用。
  • 结构化数据,而不是一团 HTML。 薪资、工作地点类型、部门和整洁的 Markdown 格式,均已在九种 ATS 之间统一规范。
  • 无需密钥,无需浏览器。 仅使用公开 API,可在你的 AI 能运行的任何地方运行。
  • 一个架构,适用于所有平台。 Greenhouse、Lever、Ashby、SmartRecruiters、Teamtailor、Recruitee、Personio、Workable 和 Workday 返回相同的数据结构。

你可以用它做什么

  • 让 AI 直接查询任意公司的开放职位,无需复制粘贴
  • 在一次对话中针对十个职位调整简历
  • 根据你的背景为开放职位匹配度排名
  • 扫描整个行业:“查找本周发布的金融科技公司开放职位”
  • 批量阅读职位描述,调研各个团队

工具负责获取信息,AI 负责思考。


安装

适用于支持 MCP 的 AI 客户端:Claude Desktop、Claude Code、Cursor、Windsurf、VS Code。ChatGPT、Gemini 和其他不支持 MCP 的客户端目前还不支持这一功能。它们使用不同的工具调用系统。(我们也希望它们支持。无论你使用哪种 AI,对话方式都不影响协议的工作方式。)

所有操作都在你的本地计算机上运行。这也意味着仅支持桌面端:移动应用无法运行本地 MCP 服务,因此 jd-intel 无法在手机或平板电脑上使用。

Claude Desktop(单文件安装,无需终端)

最简单的方式。无需 Node.js 或终端:Claude Desktop 使用自带的运行时运行服务。

  1. 下载扩展:jd-intel.mcpb。
  2. 在 Claude Desktop 中,打开设置,然后依次打开扩展、高级设置,再点击安装扩展。选择下载的文件。
  3. 查看访问权限摘要,点击安装,然后开始新的聊天。工具会自动显示。

快捷方式:将 .mcpb 拖到设置窗口中,或在系统设置为用 Claude Desktop 打开 .mcpb 文件时双击该文件。此扩展是开源且未经签名的,因此 Claude Desktop 会显示“未经验证”提示。选择仍要安装。

更喜欢使用终端,或使用较旧版本的 Claude Desktop?安装 Node.js 18+,运行 npx jd-intel-mcp install,然后重新打开 Claude Desktop。或者直接编辑配置文件,参见手动安装(备用方式)。

其他客户端(Claude Code、Cursor、Windsurf、VS Code)

单文件 .mcpb 安装是 Claude Desktop 的专属功能;这些客户端通过 npx 运行同一服务,并需要 Node.js 18+。

Claude Code

claude mcp add jd-intel -- npx -y jd-intel-mcp

Cursor(依次打开设置、工具与 MCP、新建 MCP 服务,或编辑 ~/.cursor/mcp.json):

{
  "mcpServers": {
    "jd-intel": { "command": "npx", "args": ["-y", "jd-intel-mcp"] }
  }
}

Windsurf(依次打开设置、工具、Windsurf 设置、添加服务,或打开查看原始配置以编辑 mcp_config.json)。使用与 Cursor 相同的 mcpServers 块,然后点击刷新。

VS Code(Copilot Agent 模式):运行 MCP: Add Server 命令,或创建 .vscode/mcp.json。键为 servers,类型为 stdio:

{
  "servers": {
    "jd-intel": { "type": "stdio", "command": "npx", "args": ["-y", "jd-intel-mcp"] }
  }
}
确认运行正常

开始新的聊天并询问:“jd-intel 注册表中有哪些金融科技公司?” 如果它列出了公司,就说明已配置完成。然后试试实际需求:“查找目前正在招聘、且适合我的高级 PM 职位。”

工具没有显示?

  • 完全退出并重新打开客户端(请退出,不要只关闭窗口)。Claude Desktop:打开系统托盘,然后选择退出(Windows);或按 ⌘Q(macOS)。
  • 对于使用 npx 的客户端(Claude Code、Cursor、Windsurf、VS Code),运行 npx clear-npx-cache,然后重启。
  • 确认 npx 安装方式使用的 node --version 为 18 或更高版本。一键 .mcpb 安装无需 Node。
面向开发者
npm install jd-intel
import { fetchJobs } from 'jd-intel';

const jobs = await fetchJobs({
  company: '<your-target-company>',
  titleFilter: 'designer',
  postedWithinDays: 14,
  limit: 50,
});

结果按 postedAt 从新到旧返回,未注明日期的排在最后(order: 'board' 会保留 ATS 自身的顺序)。fetchJobs 以数组形式返回当前页。fetchJobsDetailed 返回相同页面,并附带 total_matched,即应用 offset 和 limit 前的匹配数量,因此你可以判断职位列表较少还是结果被截断,并继续翻页查看其余结果:

import { fetchJobsDetailed } from 'jd-intel';

const { jobs, total_matched } = await fetchJobsDetailed({
  company: '<your-target-company>',
  titleFilter: 'engineer',
  limit: 20,
  offset: 20, // second page
});

相同的结果还会说明公司是如何解析的,以及哪些职位板块作出了响应:

  • match:registry(已知公司,调用一个适配器)、probe(不在注册表中,询问所有适配器)或 workday_override(显式的 Workday 配置)。
  • company:匹配注册表时,取自注册表条目的 { key, name };否则为 null。
  • boards:每个作出响应的职位板块对应一个条目,格式为 { ats, slug, name, site, board_url, org_name, org_url, jobs_found, matched, selected, scan }。jobs_found 统计职位板块在应用任何筛选条件前列出的行数。Workday 和 SmartRecruiters 会在获取详细信息前筛选列表,因此对这两个平台而言,该值是列表数量,而不是实际返回的行数(当列表扫描达到上限时,这是一个下限)。matched 是应用筛选条件后、应用 offset 和 limit 前剩余的行数,因此即使某个职位板块的所有行都被排除在当前页面之外,它仍会显示。board_url 根据 slug 构建。org_name 和 org_url 是职位板块对自身的描述:ATS 响应中的组织名称,以及其链接指向的招聘或公司域名;平台未提供这些信息时则为 null(Lever 和 Ashby 均不提供)。不会根据 slug 或注册表中的名称补全信息。probe 匹配仅表示 slug 匹配,并不代表已确认身份:在将职位视为该公司的职位之前,请将 org_name 和 org_url 与目标公司进行核对;如果它们为 null,请打开 board_url 核实。
  • failed:发现过程中发生异常的适配器,格式为 { ats, slug, name, code, message },其中 code 为 rate_limited 或 ats_unreachable。如果没有任何职位板块作出响应,且检查过程中发生错误,fetchJobs 会抛出该错误,而不是返回 [],因此服务中断不会被误判为“未找到”。
  • total_before_filters:jobs_found 的总和。如果匹配数为 0,但 total_before_filters 大于 0,说明该公司正在招聘,但所有 ATS 上的职位都未通过筛选条件。

detectAtsDetailed(company) 返回 { boards, failed }:先列出注册表条目(source: 'registry',不会进行探测),然后按平台顺序列出所有作出响应的实时探测结果(source: 'probe');failed 列出无法检查的探测结果,错误代码相同。detectAts 仍返回 [{ ats, slug }]。

如果库无法执行某项调用,会抛出 ArgumentError(code: 'invalid_args'):未提供公司、ats 未知,或 titleFilter 或 filter 无法编译为正则表达式。该错误会在发出任何请求前抛出。

CLI 用法:npx jd-intel fetch <company-slug> --title-filter "engineer" --posted-within-days 14。完整筛选条件参考见下文。

每个 ATS 请求最多等待服务器 10 秒开始响应。遇到 429、5xx 或网络错误时,最多重试 3 次,并采用退避策略(1s、2s);如果 ATS 提供 Retry-After,则遵循该值。每个主机同时最多运行 4 个请求。重试后仍失败时,会抛出 AtsError,其 code 为 rate_limited 或 ats_unreachable。

Node.js 18+。无需 API 密钥。无需配置。

手动安装(备用方案)

如果 npx jd-intel-mcp install 失败,请直接编辑配置。

配置文件位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "jd-intel": {
      "command": "npx",
      "args": ["-y", "jd-intel-mcp"]
    }
  }
}

重启 Claude Desktop。

更新
  • Claude Desktop 扩展(.mcpb): 安装较新的 .mcpb 覆盖当前版本,或前往 Settings,再进入 Extensions 进行管理。删除并重新安装即可重置。
  • npx 客户端(Claude Code、Cursor、Windsurf、VS Code): npx -y jd-intel-mcp 会从 npm 缓存获取新版本(约 24 小时内)。如需立即强制更新,请运行 npx clear-npx-cache,然后重启客户端。
  • 库或 CLI: npm install jd-intel@latest(强制安装最新版本),或 npm update jd-intel(遵循 semver)。

公司注册表会自动刷新:jd-intel 启动时会获取当前列表,离线时则回退到内置副本,因此无需重新安装即可显示新公司。


MCP 工具

工具用途
fetch_jobs获取公司的开放职位,并按职位类型、主题、地点和发布时间筛选
search_registry按名称或行业查找公司
detect_ats识别公司使用的 ATS 平台

此外还有一个资源:registry://jd-intel/all。完整公司注册表,按 ATS 分组。进行广泛目录调查时会按需获取。


返回内容

每个职位都会规范化为统一的架构,适用于所有平台:

{
  "id": "a1b2c3d4e5f6",
  "company": "Example Co",
  "title": "Senior Software Engineer, Platform",
  "department": "Engineering",
  "location": "Remote - US",
  "locations": ["Remote - US", "Toronto, Canada"],
  "locationType": "remote",
  "workplace": { "type": "remote", "source": "ats" },
  "salary": { "min": 180000, "max": 240000, "currency": "USD", "period": "year", "source": "text" },
  "description": "Design and build the API surface our customers integrate against...",
  "url": "https://boards.example.com/jobs/12345",
  "postedAt": "2026-04-10T14:30:00Z"
}

无需针对每家公司自定义解析。

数据模型
字段说明
title完整职位名称
company规范化后的公司名称
department团队或部门(如有提供)
location主要地点:城市、州、国家或远程
locations招聘启事开放的所有地点,主要地点排在首位。地点筛选器会检查每个条目
locationTyperemote、hybrid、onsite;如果平台和地点文本均未说明,则为 unknown
workplace{ type, source }。type 与 locationType 相同;如果平台有说明,source 为 ats;如果从地点字符串中读取,则为 text;未知时为 null
salary含 currency 的最低至最高薪资范围,以及 period(year、month、hour 或 null)和 source(平台提供时为 ats,从招聘启事解析时为 text)。未说明时为 null
description格式整洁的完整 JD Markdown。若 content.status 为 missing,则为空
content{ status, reason }。读取到招聘启事时为 complete。如果 Workday 或 SmartRecruiters 列出了职位,但职位详情请求失败,则为 missing(reason:http_503、http_429、network_error),此时 description 和 salary 未知
url招聘启事的直接链接
postedAt发布日期(如有提供)

支持的平台

平台状态常见用途
Greenhouse已发布科技行业使用最广泛的 ATS
Ashby已发布在初创公司中快速普及
Lever已发布中型公司常用
SmartRecruiters已发布大型企业和中端市场
Teamtailor已发布欧洲初创公司和规模扩张型公司
Recruitee已发布荷兰 / 欧盟中小企业和规模扩张型公司
Personio已发布德国 / 欧盟中端市场
Workable已发布全球中小企业
Workday已发布大型企业(按注册表键值索引)

新增 ATS 只需一个适配器文件。请参阅贡献指南。


筛选器(快速参考)

标志匹配内容用途
--title-filter仅职位名称职位身份(PM、工程师、设计师)
--filter职位名称 + 部门 + 描述主题或范围(集成、增长)
--posted-within-days最近发布的招聘启事筛选近期职位
--location-include地点包含任一关键词定位地区
--location-exclude地点不包含任何关键词排除地理噪声
--limit前 N 条结果限制输出大小

所有筛选条件按 AND 组合。有关模式和注意事项的深入说明:docs/filters.md。


路线图

已交付

  • 库、CLI 和 MCP 服务(同一工具包的三个入口)
  • Greenhouse、Ashby、Lever、SmartRecruiters、Teamtailor、Recruitee、Personio、Workable、Workday 适配器
  • 职位名称、主题、地点和日期筛选条件
  • 从 JD 文本中提取薪资
  • 已验证的公司注册表(1,100 多家公司)

下一步

  • 提交至 Anthropic MCP marketplace

计划中

  • 时间追踪(职位何时开放、关闭、重新开放)
  • 变更检测
  • 基于简历的匹配度评分

参与贡献

详情请参阅 CONTRIBUTING.md。简而言之:

**向注册表添加公司:**不要手动编辑 registry/*.json。将候选公司放入 tmp/candidates.json,然后运行实时检查。该检查会实际调用每个招聘平台,并仅保留有正在招聘职位的平台:

node scripts/verify-registry.mjs --candidates tmp/candidates.json --limit 50
node scripts/append-registry.mjs
npm run sync:registry-pages
node --test test/*.test.js

未通过检查的条目无法合并。看起来没问题、实际却没有返回任何结果的招聘平台,会在某人的搜索中悄无声息地失效,这比完全没有这家公司更糟。Workday 需要一个 {tenant, env, site} 格式的 config,从公司的真实招聘网址中读取,绝不能按模式构造。CONTRIBUTING.md 介绍了如何查找并确认这些信息。

**添加 ATS 适配器:**在 src/adapters/ 中新建文件。一个适配器对应一个文件。遵循现有适配器的模式。

申请添加公司:提交 issue。告诉我缺少了哪些公司。单是这一点就很有帮助。


构建者

Prashant R。一位动手实践的 PM。我会在 AI 炒作之下,尝试并构建真正重要的东西。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。