关于 Blind
Blind 是面向求职者和薪酬研究者的 MCP 服务,可按职位级别汇总招聘信息中的薪资范围,并比较不同公司和市场。它还提供可选的 Blind 职场讨论工具,但目前这些工具受站点自动化访问限制。
主要功能
- 01按资历汇总薪资范围
- 02比较多个公司的同级职位
- 03查看职位及推断级别
- 04对照不同市场的货币薪资
- 05可选查询 Blind 讨论
适用场景
- 01估算未公布薪资的职位水平
- 02比较同一职位在不同市场的薪资
- 03核查多个雇主的同级薪酬
- 04查看公司的 Blind 讨论
MCP 相关
作为 MCP 服务,向客户端提供薪资范围、市场薪酬和职位查询工具。Blind 讨论工具默认不启用,且当前自动化请求会被站点拦截。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
8收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| company | string | 是 |
详细介绍
payband-mcp
了解某个职位的实际薪酬——包括雇主没有公布薪酬的市场。
在 0.5.0 版本中从
blind-mcp更名而来。Blind 工具仍在这里(见 下文),但这个项目用于读取已公布的薪酬 范围,因此现在的名称更贴切。旧的 GitHub URL 会重定向;旧的 PyPI 软件包会指向此处。BLIND_MCP_*环境 变量仍可使用——推荐使用PAYBAND_*。
科罗拉多州、加利福尼亚州、纽约州、华盛顿州和伊利诺伊州要求受监管的招聘信息注明薪酬范围。印度、新加坡和欧盟大多数地区则没有这项要求。因此,同一家公司、同一职位、同一周发布的招聘信息,在丹佛会注明薪酬范围,在班加罗尔却不会。
薪酬范围仍然存在,只是附在了另一条招聘信息上。
pay_bands(company="Databricks", role="forward deployed")
101 matching openings · band width ratio x1.37 · 33 publish no range
LEVEL TYPICAL BAND BANDS POSTS PRECISION
mid 152,900–210,155 2 3 tight
senior 182,000–250,208 1 58 tight
lead 178,800–245,850 1 1 tight
manager 211,800–291,300 4 5 tight
senior_manager 232,900–320,200 1 1 tight
steps: mid→senior +19.1% · lead→manager +18.5% · manager→sr_mgr +9.9%
silent: Remote-India, Seoul, London, Berlin, Amsterdam
按级别划分,因为把不同资历的薪酬合在一个范围内,得出的数字没人能拿到——不划分级别时,该职位的范围是 140,400–320,200,跨度达 2.3 倍,涵盖了五种不同的工作。
typical 是众数薪酬范围。distinct_bands 与 postings 的对比才是衡量证据的可靠指标:58 条招聘信息共用一个薪酬范围,只是一条数据被公布了 58 次。precision 标示薪酬范围实际缩小了多少——Databricks 按级别公布紧凑的薪酬范围,Figma 则公布一个覆盖整个职级阶梯、跨度达 2.5 倍的薪酬范围,两者都是真实情况。
这是同一雇主、同一职位、同一时间——与任何薪酬调查相比,它都是更好的未公布薪酬参照,而且只需一次调用。
同一份工作,遍布雇主发布招聘信息的每个市场
在某个国家受薪酬透明法约束的雇主,往往也会在多个国家发布同一职位。这是最接近受控实验的对比:同一家公司、同一职位、同一周。
pay_bands(company="Anthropic", role="software engineer")
MARKET PUBLISHED BAND POSTS ≈ IN USD vs US
USD 405,000–485,000 78 — —
GBP 325,000–390,000 10 438,206–525,847 1.08x
EUR 235,000–295,000 2 271,165–340,399 0.69x
fx: ECB daily reference rates, 2026-09-15
始终保留已公布的数字;换算结果会附在旁边,并注明日期。没有换算,比较就会产生误导——GitLab 在波兰公布的薪酬范围显示为 272,000–408,000,而美国的范围为 139,200–235,200,看起来像是波兰薪酬更高,但实际比例是 0.48 倍。
读取公共招聘网站 API——Greenhouse、Ashby、Lever、 SmartRecruiters 和 Workday——以及少数使用自有端点的雇主。文档齐全、专为机器使用而设计且稳定——不进行抓取。
工具
薪酬
| 工具 | 功能 |
|---|---|
pay_bands(company, role, board=, max_lookups=) | 按资历划分的已公布薪酬范围,以及该职位发布时使用的每种货币和换算结果 |
market_rate(role, companies, level=) | 多家雇主中处于同一级别的职位,按中点排序 |
job_openings(company, role=, with_pay_only=) | 相关招聘信息,并推断级别 |
文化——默认不注册
| 工具 | 功能 |
|---|---|
find(company, keyword, limit=, page=) | 按关键词搜索公司的 Blind 帖子 |
research(company, question, max_posts=) | 选择主题,根据问题为帖子排序,并完整返回 |
company_topics / company_posts / read_post | 帖子列表和单个帖子 |
除非你主动启用,否则这五个工具都处于关闭状态(PAYBAND_ENABLE_BLIND=1)。
工具列表是模型在决定如何行动前会读取的内容,而目前这五个条目只会增加上下文成本,还可能引向死胡同。代码和测试均未改动,因此启用此标志即可立即恢复这些工具。
⚠️ Blind 大约从 2026 年 9 月起开始对所有自动化请求返回 403。 这是网站范围内的机器人防护,并非针对本项目的封锁:
curl和空的 User-Agent 也会被拒绝,只有浏览器 User-Agent 能通过。robots.txt仍允许访问/company/,但 WAF 不允许。我们不会伪装成浏览器来绕过限制——这属于规避访问控制,而且也是他们下一步升级防护时最先封堵的做法。现在,Blind 工具会抛出
BlindBlocked并说明原因,而不是返回空结果,让人误以为“没有找到相关讨论”。薪酬工具不受影响。请参阅 #12。
覆盖范围
数据来自实际测量,而非估算:
| 公司 | 招聘平台 | 开放职位 | 发布了薪酬范围的职位 |
|---|---|---|---|
| 公司 | 招聘平台 | 开放职位 | 发布了薪酬范围的职位 |
| --- | --- | --- | --- |
| Databricks | Greenhouse | 880 | 471(54%) |
| Anthropic | Greenhouse | 595 | 525(88%) |
| Ramp | Ashby | 148 | 141(95%) |
| Monzo | Greenhouse | 66 | 55(83%) |
| Notion | Ashby | 127 | 83(65%) |
| Figma | Greenhouse | 156 | 101(65%) |
| GitLab | Greenhouse | 224 | 94(42%) |
| Stripe | Greenhouse | 648 | 22(3%) |
| Freshworks | SmartRecruiters | 139 | 按需查询 |
| NVIDIA | Workday | 1,693 | 按需查询 |
| Cisco · Adobe · Salesforce · HPE · eBay | Workday | — | 按需查询 |
| Atlassian | 自托管 | 287 | 122(43%) |
SmartRecruiters 和 Workday 标为按需查询,因为它们将薪酬范围放在每个职位详情中,而不是职位列表里。系统会先按职位名称筛选,只有筛选后的职位才会被获取,因此查询 NVIDIA 的问题大约需要 40 次请求,而非 1,693 次。max_lookups 用于设置请求上限,超出部分会记为 not_checked_count,绝不会被表述为雇主没有公布薪酬范围。
系统通过读取 Workday 租户的 robots.txt 来查找租户,其中的 Sitemap 行会列出公开的招聘网站。如果租户名称与公司名称不同,请粘贴招聘网址或传入 board="workday:<tenant>/<site>"。
SmartRecruiters 的公司 ID 来自 careers.smartrecruiters.com/<company-id>,也会根据公司名称推测。如果 ID 不同,请传入 board="smartrecruiters:<company-id>"。
Atlassian 使用自托管平台,可通过名称访问其专属端点。其美国职位会公布三个地理区域(Zone A/B/C),系统会将它们分别报告为独立薪酬区间,而不是合并;三者合并后的范围相差 1.6 倍,并不代表任何人的实际录用薪酬。
未覆盖的公司: Google、Meta、Amazon、Apple,以及大多数总部位于印度的公司。我们探测过 Amazon 和 Netflix,两者都会返回干净的 JSON,但其中完全没有薪酬信息——它们的薪酬范围仅存在于渲染后的 HTML 中。Apple 返回 401。BoardNotFound 会说明原因,而不是直接失败。
如果某家公司确实在这些招聘平台上,但对应标识无法推测,请从其招聘网址中读取标识并直接传入:
pay_bands("Some Rebranded Co", "engineer", board="greenhouse:theirslug")
印度的自托管雇主仍在待支持列表中,详见 #13。
安装
uv sync
在 Claude Code 中注册:
uv tool install --editable . # puts `payband-mcp` on PATH
claude mcp add --scope user payband -- payband-mcp
或者在 claude_desktop_config.json 中:
{
"mcpServers": {
"payband": {
"command": "uv",
"args": ["run", "--directory", "/path/to/payband-mcp", "payband-mcp"]
}
}
}
我需要登录吗?
不需要,而且你可能不该登录。 这是经过实测的结论,而非假设:
- 帖子正文、完整评论串、Blind 的 AI 评论摘要、公司列表、话题页面、评价和薪资页面,匿名访问时均返回 HTTP 200,且没有访问限制。
- 使用自动化操作经过身份验证的会话,浏览约 6 个页面后就触发了 Blind 的异常检测:
Automatic Logout — we noticed a login from a new device or location (code 2009),随后重定向到/session-out。
因此,Cookie 不会带来额外的读取权限,却会损害会话稳定性。它唯一能解锁的是公司内部频道,而这些频道仅限该公司的已验证员工访问。
如果你仍想使用,请将 BLIND_COOKIE 设置为你的会话 Cookie 请求头(可在已登录浏览器的 DevTools 中复制请求头)。没有登录流程——服务只会重放你提供的 Cookie,在启动时读取一次,并附加到每个请求中。默认情况下它处于关闭状态;如果 Blind 使 Cookie 失效,客户端会立即报错,而不是悄悄返回已退出登录的 HTML。
Cookie 本身绝不会写入磁盘,但使用它获取的响应会缓存在单独的 auth/ 目录中,因此经过身份验证和匿名获取的结果绝不会互相混用。请勿提交 Cookie。
做个负责任的使用者
Blind 的 robots.txt 禁止所有 user-agent 访问 /search/,因此此服务没有搜索工具,并会拒绝获取该路径。它还会:
- 使用如实的
User-Agent(不冒充浏览器——Blind 仍会向其返回 200) - 将每个响应缓存在磁盘上 6 小时,因此重复查询不会产生请求
- 将请求间隔设为约 1.5 秒
- 首先获取
robots.txt,如果无法读取则拒绝访问
通过 PAYBAND_CACHE_DIR、PAYBAND_CACHE_TTL、PAYBAND_MIN_INTERVAL、PAYBAND_USER_AGENT 进行配置。
招聘网站也会受到同样的处理。SmartRecruiters 和 Workday 需要为每个职位发布请求一次才能读取一个范围,因此请求会在由四个工作线程共享的锁保护下间隔 250 毫秒发送——工作线程可以并行处理网站的延迟,但绝不会提高请求速率——并且每个问题的查询次数都有上限。Workday 网站发现流程会读取 robots.txt,并以其规定为准来判断哪些内容是公开的,包括绝不将 Disallow 禁止的路径视为招聘网站。汇率会缓存一天,因为欧洲央行每个工作日只发布一次汇率。
Blind 的服务条款限制自动化访问。本工具以符合人工浏览节奏的速度读取公开页面,用于个人研究;批量抓取既违反服务条款,也会损害隐私,因为 Blind 的价值正是建立在匿名之上。不要创建将帖子与雇主和昵称关联起来的数据集。
阅读输出
输出中有四项容易被忽略的信息:
distinct_bands与postings——58 个职位发布共享同一薪资范围,意味着同一个数据点被发布了 58 次。precision——wide表示雇主为多个级别公布了同一个范围,因此几乎不能缩小范围。not_checked_count——这些职位发布的薪资范围尚未查询;它们与雇主确实未填写薪资范围的职位发布分开统计。请提高max_lookups。on_target_earnings_excluded——销售岗位经常公布 OTE,即基本工资加佣金。这些数据会单独报告,绝不会计入基本工资范围的平均值。
换算后的数字是基于标注日期的汇率估算得出的,既未调整生活成本,也未考虑税费。以原货币公布的数字才是事实;换算只是为了让比较不至于毫无意义。
Blind 上的内容是匿名且未经验证的。请根据评论者的雇主(每条评论中的 company)评估其说法,并将单个高声量的发言视为一个数据点。在测试中,关于 Roku India RTO 的回答得到了两位彼此独立的评论者以及一条无关的 Glassdoor 评价佐证——这才值得信任。
贡献
这是个小型项目,很容易参与贡献。最有价值的改动是我们还无法访问的招聘平台——每个适配器都能让工具突然覆盖一整类雇主,而最近三次发布中有两次正是由外部贡献者完成的。非美国雇主尤其重要,因为不公开薪酬信息的市场正是这个项目的目标。
其次有价值的是:薪酬区间有误。看起来权威却并不准确的数字,是这个项目最严重的问题,而目前所有严重 Bug 都属于这一类。此类问题的优先级高于新增覆盖范围。
维护者请参阅 MAINTAINING.md。
请从适合新手的议题开始,然后阅读
CONTRIBUTING.md。议题会按规模标记(size: XS
表示耗时不到 30 分钟),mentored 表示可以在讨论串中提问,我们会带你完成。请在评论中认领一个议题,以免其他人也开始处理。
我们会在 48 小时内进行首次审查——通过实际运行来审查,而不只是阅读代码。
CONTRIBUTING 中说明了两条严格规则:不要提交抓取的 Blind 页面(测试样例会自动生成),以及不要为了提速而放宽 robots、缓存或限流规则。
发布
mcp-name: io.github.dheerajjha/payband-mcp
请参阅 RELEASING.md。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。