给 Claude Code、Codex、Cursor 等 Agent 装一个本地求职 MCP Server。 jobfindsme 负责 刷、筛、记:多来源发现、确定性过滤排序、跨天状态记忆;Agent 负责理解需求和与你对话。
每天找工作最烦的不是“不会搜索”,而是这些重复劳动:
| 问题 | jobfindsme 的做法 |
|---|---|
| 多个平台来回切 | 统一检索四个来源;单源失败会明确提示并返回其他来源 |
| 推荐一堆不相关岗位 | 先硬过滤角色、城市、薪资、社招/校招、正式/实习,再排序 |
| 反复看到同一个岗位 | 本地记录已看、已投、已忽略,只汇报变化 |
| 不知道为什么推荐 | 使用简历时给出匹配度、证据、差距和投递链接;没有简历时不虚构匹配度 |
| 不想配置模型 API | 核心功能不依赖 API Key,数据存在本地 SQLite |
一句话开始:
用 jobfindsme,根据本地简历(路径:~/Documents/resume.pdf),
找上海的 AI 应用工程师,20K以上,社招,正式。
在 Claude Code、Codex、Cursor 里直接说(复制整段):
按 https://github.com/russeell/jobfindsme 的 README 安装 jobfindsme
Agent 会读取仓库 README 完成:安装本地运行时(
curl -fsSL https://github.com/russeell/jobfindsme/releases/latest/download/install.sh | bash)
→ 写入 MCP 配置(jobfindsme connect <当前Agent>)→ 提示重启。
首次安装需要几分钟;如果 Agent 无法访问网络,改用下面的手动方式。
install.sh 随 Release 发布,此固定链接始终指向最新脚本(无 CDN 缓存滞后)。
国内备选:https://cdn.jsdelivr.net/gh/russeell/jobfindsme@main/scripts/install.sh
(jsdelivr 缓存可能在 push 后滞后最多 12 小时)。
装好后,直接说需求即可:
用 jobfindsme,根据本地简历(路径:~/Documents/resume.pdf),找上海的 AI 应用工程师岗位,20K 以上,社招,正式。
需要 Python 3.11+。安装一次本地运行时:
curl -fsSL https://github.com/russeell/jobfindsme/releases/latest/download/install.sh | bashCodex / Claude Code 支持原生插件,一条命令装好 Skill + MCP 配置(安装脚本结束时会打印对应命令);
其他 MCP 客户端用 connect 把配置交给当前 Agent,然后重启 Agent:
jobfindsme connect # 自动探测当前 Agent(推荐)
jobfindsme connect claude # Claude Code
jobfindsme connect codex # Codex
jobfindsme connect cursor # Cursor其他 MCP 客户端:jobfindsme config 打印标准 JSON 手动粘贴,或
jobfindsme connect --path <配置文件> 直接写入。仓库根目录的 .mcp.json
就是同一份标准配置。
自检并开始:
jobfindsme doctor用 jobfindsme,根据 ~/Documents/resume.pdf 找上海的 AI 应用工程师,20K以上,社招。
完整简历由本地 Core 解析。Agent 只应把路径传给 setup,不得先读取全文。
BOSS直聘需要登录态时,对 Agent 说:
帮我登录 BOSS直聘
它会打开专用 Chrome 窗口。扫码登录后保持窗口运行即可。跳过此步仍可使用无需登录的来源。
| 能力 | 说明 |
|---|---|
| 一句话找岗位 | Agent 调用本地 MCP Server,自动配置搜索并返回结果 |
| 四平台来源 | BOSS直聘、猎聘、智联招聘、前程无忧;失败会明确标注 |
| 简历匹配 | 本地解析 PDF/MD/TXT,按技能、经验、学历等信号排序 |
| 事实驱动输出 | Server 返回有界结构化事实 + 三层简明摘要,Agent 组织最终表达 |
| 增量追踪 | 识别新增、变更、重开、关闭,避免重复推荐 |
| 状态记忆 | 支持保存、已投递、忽略;下次自动跳过 |
| 本地优先 | 不需要模型 API Key;简历和状态保存在本地 SQLite |
| 发布门禁 | 当前结果 |
|---|---|
| Python 测试 | 334 项通过 |
| 干净环境安装 + Cursor 接入 | 12 秒 |
| Agent 行为契约 | 无 Skill 0/9,安装 Skill 后 9/9 |
| Wheel 冒烟 | CLI、SQLite migration、5 个 MCP tools 全链路通过 |
四来源的实时可用性会随平台安全策略和本机登录状态变化。项目不会把缓存或 被拦截响应伪装成实时结果;每次搜索都返回逐来源状态。最新实盘报告见 four-source search report。
直接复制改参数:
# 找岗位
用 jobfindsme 根据 ~/Documents/resume.pdf 找北京的 大模型应用工程师,30K以上,社招。
# 定时推送
配合支持定时任务的 Agent,每天早上 9 点只推送新增岗位给我。
# 查历史
我之前看过的岗位有哪些?
我投过哪些岗位?
# 只看新增
继续帮我找新岗位,只要今天新增的。
# 只要实时结果
重新实时搜索,不要使用缓存。
# 换条件
把城市换成深圳,薪资下限改成 25K,重新搜。
# 管理状态
把刚才第 2 个岗位标记为已投递;把外包公司全部忽略。
Server 决定岗位事实、过滤、排序、匹配证据和投递链接;Agent 基于这些事实组织最终回答。
每次结果包含有界结构化事实(structuredContent.jobs)和三层简明摘要
(搜索摘要 / 推荐岗位 / 状态与下一步)。标题不是逐字协议,Agent 可以调整措辞和排版,但不得修改事实、证据、风险、来源状态和链接:
AI应用工程师(Agent开发)|示例科技|上海|社招|正式|25-40K
条件状态:已确认项通过;未确认项见下方
证据匹配:86/100(高);证据覆盖:90%(均非录用概率)
技能:RAG、Agent、MCP | 经验:1-3年 | 学历:本科
投递链接:https://example.com/jobs/123
推荐理由:简历技能命中:RAG、Agent、MCP;可验证证据得分 86/100,证据覆盖 90%;薪资信息明确。
需要注意:JD 要求 Kubernetes,简历中未找到直接证据
推荐岗位至少应保留:事实行、投递链接、推荐理由和风险。硬条件是通过/冲突/未知,不计入分数;使用简历时,Server 再依据可验证的角色、技能、经验、学历和活跃度证据生成 0–100 排序分,并同时返回证据覆盖率。不使用简历时仅按明确条件过滤,不虚构分数。
招聘类型、岗位性质、经验或薪资没有证据时保持“未注明”,不会猜成符合条件;只有明确冲突才会被过滤。
结果摘要会区分“全部条件已确认”和“存在待确认项”,不会把未知字段写成严格满足。
不同 Agent 可以使用不同表达,但不得编造岗位、薪资、链接、分数或理由;
用户明确要求比较或查看详情时,同一轮也可以调用 get_jobs。
结果不足时 Agent 不会用弱匹配岗位凑数;来源字段不完整时会明确标注。 设置薪资下限时,默认排除薪资未公开岗位;也可明确说“保留薪资面议岗位”, 系统会保留并逐条提示信息缺口。 用户明确说“不要缓存”时,Core 会在匹配前排除所有失败、降级或跳过来源, 而不是让 Agent 在结果返回后手工删除缓存岗位。
当前维护四个来源:BOSS直聘 + 猎聘 + 智联招聘 + 前程无忧。项目优先 保证每个来源能稳定返回有效岗位,不用名义上的平台数量冒充覆盖率;被平台 安全校验拦截的来源会在结果里明确标注,不会静默当作"没有岗位"。
| 来源 | 方式 | 速度 | 需要浏览器? |
|---|---|---|---|
| BOSS直聘 | 用户授权的本地 Chrome 会话;失败时使用有时效标记的缓存 | 取决于登录态 | ✅ 需要 |
| 猎聘 | 公开 Web JSON 列表;浏览器可用时有界补全详情 | 通常亚秒级 | ❌ 列表不需要 |
| 智联招聘 | 本地 Chrome 打开公开搜索页并读取岗位卡 | 通常 2-4 秒 | ✅ 需要,不要求登录 |
| 前程无忧 | 本地 Chrome 搜索页上下文请求公开 Web JSON | 通常 2-5 秒 | ✅ 需要,不要求登录 |
猎聘优先纯 HTTP 直连(亚秒级、无需浏览器);本机已运行 Chrome 时, 再自动用浏览器补充岗位详情页的 JD 文本,进一步丰富匹配信号。
智联旧 JSON 接口会在页面仍有岗位时返回风控空结果;前程无忧的 JSON 接口
会校验浏览器执行环境。当前维护链路因此复用 jobfindsme setup 启动的隔离
Chrome:智联读取真实搜索页,前程无忧由真实搜索页发起同源请求。系统不绕过
验证码、不读取个人 Chrome 配置;来源仍不可用时会明确标记失败,并继续返回
其他平台结果。
Agent (Claude/GPT/Qwen/WorkBuddy — 负责交互与后续解释)
→ MCP Server (本地 stdio)
→ 本地 Core
→ 纯 HTTP 直连(猎聘)
→ 本地 Chrome CDP(BOSS 登录会话;智联公开页;前程无忧公开页 API)
→ live 模式:有界并行刷新全部来源,单源失败不阻断其他来源
→ 标准化 → 跨来源去重 → 硬过滤(城市/薪资/校招社招/实习正式)
→ 信号提取 + 加权粗筛(技能/经验/学历/活跃度/薪资)
→ 增量雷达(新增/变化/重开/关闭识别)
→ Server 返回有界事实 + 三层简明摘要;Agent 基于事实组织回答
(不得编造事实或丢失投递链接)
MCP Server 负责硬过滤、结构化信号提取、确定性排序和事实基线。 Agent 负责自然语言表达;用户追问岗位对比时,才基于返回证据补充分析, 不编造事实、不丢失或改写投递链接。
简历画像、求职偏好、岗位和追踪状态保存在本地 SQLite。Core 不需要模型 API。
- jobfindsme 不需要把完整简历发送给 Agent;按内置 Skill 工作时,Agent 只把本地路径交给 Core 解析;
- 岗位描述按不可信外部数据处理,不作为 Agent 指令;
- 导出写入本地文件;删除走「预览 + 确认令牌」两阶段协议;
- 不自动投递、不绕过验证码、不承诺覆盖全部岗位。
更新:重新运行安装脚本,数据库自动迁移,历史岗位和状态保留:
curl -fsSL https://github.com/russeell/jobfindsme/releases/latest/download/install.sh | bash手动安装(脚本不可用时):
python3 -m venv ~/.jobfindsme/runtime
~/.jobfindsme/runtime/bin/python -m pip install --upgrade \
"jobfindsme[browser] @ <最新版 wheel 链接>"wheel 链接从 Releases
复制,形如 jobfindsme-X.Y.Z-py3-none-any.whl(安装脚本自动取最新版本,无需关心)。
网络受限时可加 --index-url https://pypi.tuna.tsinghua.edu.cn/simple。
卸载:jobfindsme uninstall <host> 只移除 Agent 配置,不删数据。彻底删除前先导出:
rm -rf ~/.jobfindsmeQ:平台都要登录吗? 只有 BOSS 需要(扫码一次,后续复用本地登录态)。猎聘纯 HTTP 直连,不需要浏览器。
Q:会不会封号? 它做的是低频、拟人节奏的读取,不批量抓取、不自动操作。但自动化访问在平台条款里 都属于灰色地带,存在账号被限制的可能 — 请个人低频使用,风险自负。
Q:搜索结果为什么是 0 / 某个平台经常没有结果?
先跑 jobfindsme doctor 自检。BOSS 检查本地 Chrome 和登录态;猎聘检查 HTTP
来源状态。来源失败时系统会明确标注降级或缓存,不会静默伪装成实时结果。
Q:简历会被上传吗?
jobfindsme 默认在本地解析简历并保存结构化事实,不需要把完整简历发送给 Agent。按内置 Skill 工作时,Agent 只传本地路径;
jobfindsme export / delete_local_data 可随时导出和清除。
Q:和直接把简历发给 AI 让它搜,有什么区别? 通用 Agent 没有平台接入、没有跨天去重和状态记忆、也不能稳定解析 PDF 简历成结构化 事实。jobfindsme 把这三件事做成了确定性的本地服务,Agent 只负责对话。
Q:安装超过 5 分钟? 停止当前命令,保留最后输出并提交 Issue。不要让 Agent 克隆仓库、安装测试依赖或下载 整套浏览器来尝试修复。
python -m pip install -e ".[dev]"
python -m pytest
ruff check . && ruff format --check .架构、来源门禁和评测闭环见 architecture、
connectors、evaluation;
完整工程规范在 docs/internal/project_spec.md。
发现错排、漏排、重复或失效链接,请提交脱敏
Issue。
- 本项目为免费开源的个人学习工具,帮助整理你已登录、有权查看的岗位信息;
- 自动化访问招聘平台可能触发对方风控,由此产生的账号限制、封禁等后果由使用者 自行承担,与作者无关;
- 禁止用于商业转售、大规模爬取或绕过平台限制;
- 平台页面结构随时可能变化导致某个来源失效,请通过 Issue 反馈,作者会尽力跟进。