内容
<!-- mcp-name: io.github.gzchenhao/openhire -->
# openhire-mcp
> **工作机会来找你。你的简历不会经过我们的服务器,也不会被我们存储。**
> 岗位来找你,简历不经过我们的服务器,也不被我们存储。
    
<p align="center"><em>▶️ 30秒快速上手演示 — 即将到来。</em></p>
<!-- TODO(v0.2): replace the line above with  once recorded.
Recording checklist (what to record + timing) is in reports/012. -->
一个MCP服务器,将你的AI助手(Claude, Cursor, Windsurf)转变为一个私人的雷达,用于**远程AI / 基础设施岗位** — 直接从约100个公司职业网站和他们的公共ATS API(Greenhouse / Lever / Ashby)获取。 **无需账户。无需注册。无需上传简历。**
匹配过程在你的机器上运行;只有匿名指纹和硬过滤器才会到达服务器。这是v0.1「哨兵 / Sentinel」参考实现 — 请参阅`design_handoff_openhire_v01/README.md`获取完整的协议规范。
---
## 快速上手 — 一分钟内
```bash
# 1. 安装(pipx保持隔离并将`ohp`放在你的PATH上)
pipx install openhire
# 2. 获取工作索引。默认:下载公共快照,然后实时刷新。
ohp bootstrap
# --fresh 从头开始爬取公共ATS(启发式,免费,无快照)
# --deepseek 使用你自己的DEEPSEEK_API_KEY进行更高质量的提取
# 3. 直接使用…
ohp search --required-skills rust,k8s --remote --role-family engineering
# …或连接到MCP客户端:
ohp serve
```
然后将你的MCP客户端指向它 — 请参阅下面的 **[兼容列表](#兼容列表)**。
---
## 兼容列表
所有客户端都使用相同的MCP入口。如果你运行了`pipx install openhire`,请使用`ohp`;否则,`uvx openhire serve`会在无需事先安装的情况下获取并运行它(需要 [uv](https://docs.astral.sh/uv/))。
**Claude Desktop** — `%APPDATA%\Claude\claude_desktop_config.json`(macOS: `~/Library/Application Support/Claude/`);编辑后请退出并重新打开:
```json
{ "mcpServers": { "openhire": { "command": "ohp", "args": ["serve"] } } }
```
**Cursor** — `~/.cursor/mcp.json`(或项目 `.cursor/mcp.json`):
```json
{ "mcpServers": { "openhire": { "command": "uvx", "args": ["openhire", "serve"] } } }
```
**Windsurf** — `~/.codeium/windsurf/mcp_config.json`:
```json
{ "mcpServers": { "openhire": { "command": "uvx", "args": ["openhire", "serve"] } } }
```
> 运行`ohp bootstrap`一次,以便索引有数据。在Windows上,从Microsoft Store的Claude Desktop中,配置位于`…\Packages\<Claude package>\LocalCache\Roaming\Claude\`。
---
## 功能介绍
| 工具 | 功能 |
|------|-------------------|
| `search_jobs` | 对实时索引进行硬过滤;每个结果都带有`verified_at`、`datePosted`、`days_open`、`ghost_score`、`remote_scope`、`eligible_regions`、`apply_channel`。按`required_skills`(与)、`role_family`、`remote_scope`、`min_salary` + `currency`过滤。 |
| `watch_intent` | 注册一个长期意图 — 当你下次查看时,会有新的匹配工作等待。接受`required_skills` / `role_family`,以便销售 / 解决方案角色保持退出。 |
| `check_watches` | 拉取自上次查看以来新增的匹配结果(客户端拉取;stdio无推送)。 |
| `authorize_application` | 每个工作一个明确的确认。它记录你的授权并返回雇主的**自己的**申请网址 — 你以自己的身份申请。它**不能**接受简历。 |
| `get_company_info` | 为一个雇主聚合匿名信任信号(`ghost_score_avg`、`active_jobs`、`index_built_at`)。从不收集候选人数据。 |
可选,完全本地:`ohp init --scan <dir>`从你自己的仓库中导出一个**技能指纹**。你从不编写简历;代码从不离开你的机器 — 只有匿名向量。
## 五个协议字段
每个列表都是有效的`schema.org/JobPosting`,此外还包含:
- `verified_at` — 在雇主自己的网站上确认有效的最新时刻
- `source` — `employer_site | ats_public_api`(从不通过工作板)
- `ghost_score` — 0–1可能性,表明列表不是真正的、活跃的招聘(从**真实**发布日期开始计算;越低越好)
- `response_sla_days` — 雇主承诺的响应窗口(v0.1:始终为null)
- `apply_channel` — 始终是雇主自己的申请网址,深度链接到特定工作
## 隐私模型
| | |
|---|---|
| **简历 / 个人信息上传** | **从不** — 匹配在本地运行;简历从不经过服务器,我们也从不存储。 |
| **服务器看到的内容** | 一个匿名的、客户端生成的指纹 + 硬过滤器 |
| **仓库扫描** | 仅限本地 · 个人项目 · 明确同意 · 随时退出 |
| **工作来源** | 一方:雇主职业页面 + 公共ATS API(Greenhouse / Lever / Ashby) |
## 首次运行数据 — 快照 vs. 刷新
`ohp bootstrap`(默认)下载一个小的**公共**索引快照(GitHub Release资产 — 仅`companies` + `jobs`,**零**用户数据),然后运行一个增量爬取来刷新`verified_at` / 删除。 `--fresh` 跳过快照,从头开始爬取公共ATS。无论哪种方式:无需账户,无需个人信息。
## 三条规则,本项目永远不会违反
1. 你的简历保留在你的机器上 — 它从不经过服务器,我们也从不存储。
2. 排名不买卖 — 它只是`f(match_quality, freshness)`,一个纯粹的锁定函数。
3. 雇主仅为授权的、交付的结果付费 — 从不为曝光付费。(v0.1完全没有计费。)
这些由CI强制执行(`tests/test_privacy.py`,`tests/test_ranking.py`,`tests/test_snapshot.py`)。
## 开发
```bash
python -m venv .venv && . .venv/Scripts/activate # Windows
pip install -e ".[dev]"
pytest # 隐私红线 + 排名 + 快照必须为绿色
```
设置`OPENHIRE_DATABASE_URL=postgresql+psycopg://…`以运行Postgres而不是默认的本地SQLite文件(`~/.openhire/openhire.db`)。
## 路线图
- **v0.2** — CN ATS适配器(Beisen / Moka)· `ghost_score`公共测试
- **v0.3** — 雇主声明 + 验证徽章 · 响应SLA强制执行(7天自动下架)
- **v1.0** — 开放、供应商中立的AI可读工作帖扩展
## 常见问题
**工作数据从哪里来?**
直接来自约100个雇主的公共ATS API(Greenhouse,Lever,Ashby) — 与他们的职业页面相同的端点。没有爬取,没有第三方工作板。`source`始终为`ats_public_api`,`verified_at`记录了我们确认每个帖子有效的最新时间。
**为什么我应该信任`ghost_score`?**
它是一个纯粹的、开放的、不可购买的函数 — `min(1, 0.15·relist_count + staleness)` 从**真实**的ATS发布日期开始计算,而不是我们的爬取日期。公式位于`pipeline/ghost_score.py`,经过单元测试,不接受金钱作为输入(红线 #2)。长期公开、重复列出的帖子得分更高(更差);您可以随时在客户端重新排序。
**我的简历真的会经过服务器吗?**
不。协议中没有任何简历。`authorize_application`没有简历/文件参数(它在结构上不能接受一个),匹配在您的机器上运行,服务器上经过的唯一内容是一个短的匿名指纹,如`#a3f9`。这由`tests/test_privacy.py`强制执行,发布的快照携带**零**用户数据(`tests/test_snapshot.py`)。
**是否支持中国(中国区)?**
v0.1涵盖了Greenhouse/Lever/Ashby上的全球远程AI/基础设施角色。CN ATS适配器(Beisen / Moka)位于 **v0.2** 路线图上。该架构是基于适配器的(`src/openhire/ats/`),因此添加供应商是自包含的。
**如何添加公司?**
打开一个**公司加入请求**问题(以公司 + 其ATS URL为标题) — 这是贡献的最佳方式。如果您编写代码,请将其添加到`src/openhire/seed/candidates.py`(公司slug + ATS供应商/租户)并打开一个PR;种子验证租户对抗实时API。
## License
MIT © OpenHire Protocol · PRs 欢迎。
*由非编码PM-ing Claude Code构建 — [`reports/`](reports/)中的完整验收报告。*