What a role really pays, including markets where the employer publishes no range.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
Find out what a role actually pays — including in markets where the employer publishes nothing.
Renamed from
blind-mcpin 0.5.0. The Blind tools are still here (see below), but reading published pay bands is what this does, so the name now says so. The old GitHub URL redirects; the old PyPI package points here.BLIND_MCP_*environment variables still work —PAYBAND_*is preferred.
Colorado, California, New York, Washington and Illinois require a salary range on covered job postings. India, Singapore and most of the EU require none. So the same title, at the same company, in the same week, is posted with a band in Denver and without one in Bengaluru.
The band is still there. It is just attached to a different listing.
Per level, because one range across seniorities is a number nobody is
offered — undivided, that role reads as 140,400–320,200, a 2.3x spread
covering five different jobs.
typical is the modal band. distinct_bands vs postings is the honest
measure of evidence: 58 postings sharing one band is one data point
advertised 58 times. precision flags how much a band actually narrows
things — Databricks posts tight per-level bands, Figma posts a single x2.5
band spanning its whole ladder, and both are real.
That is the same employer, the same title, the same moment — a far better anchor for an unpublished number than any salary survey, and it takes one call.
Employers covered by transparency law in one country often post the same role in several. That is the closest thing to a controlled experiment you can get: same company, same title, same week.
The published figure is always kept; the conversion sits beside it, dated.
Without it the comparison misleads — GitLab's Polish band reads as
272,000–408,000 against a US 139,200–235,200, which looks like Poland
paying more and is actually 0.48x.
Reads the public job-board APIs — Greenhouse, Ashby, Lever, SmartRecruiters and Workday — plus a small number of employers who run their own endpoint. Documented, intended for machines, and stable — not scraping.
| Tool | What it does |
|---|---|
pay_bands(company, role, board=, max_lookups=) | Published bands per seniority, plus every currency the role is posted in, converted |
market_rate(role, companies, level=) | The same rung across several employers, sorted by midpoint |
job_openings(company, role=, with_pay_only=) | The underlying postings, with inferred level |
| Tool | What it does |
|---|---|
find(company, keyword, limit=, page=) | Search a company's Blind posts by keyword |
research(company, question, max_posts=) | Pick the topic, rank threads against the question, return them in full |
company_topics / company_posts / read_post | Listings and single threads |
These five are switched off unless you ask for them (PAYBAND_ENABLE_BLIND=1).
A tool list is part of what a model reads before deciding what to do, and five
entries that can currently only raise cost context and invite dead ends. The
code and its tests are untouched, so the flag brings them straight back.
⚠️ Blind began returning 403 to all automated requests around September 2026. This is site-wide bot protection, not a block on this project:
curland an empty User-Agent are refused too, and only a browser User-Agent gets through.robots.txtstill permits/company/, but the WAF does not.We do not spoof a browser to get around it — that would be circumventing an access control, and it is the first thing their next escalation defeats. The Blind tools now raise
BlindBlockedwith an explanation rather than returning empty results that would read as "no discussion found".The pay tools are unaffected. See #12.
Measured, not estimated:
| Company | Board | Open roles | With a published range |
|---|---|---|---|
| Company | Board | Open roles | With a published range |
| --- | --- | --- | --- |
| 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 | on demand |
| NVIDIA | Workday | 1,693 | on demand |
| Cisco · Adobe · Salesforce · HPE · eBay | Workday | — | on demand |
| Atlassian | self-hosted | 287 | 122 (43%) |
SmartRecruiters and Workday say on demand because they keep the range
inside each posting rather than in the listing. Postings are filtered by title
first and only the survivors are fetched, so a question about NVIDIA costs
about forty requests instead of 1,693. max_lookups sets that budget, and
anything beyond it is reported as not_checked_count — never as the employer
publishing nothing.
Workday tenants are found by reading their robots.txt, which names the
public career site in its Sitemap line. If the tenant differs from the
company name, paste the careers URL or pass
board="workday:<tenant>/<site>".
SmartRecruiters company ids come from
careers.smartrecruiters.com/<company-id> and are also guessed from the
company name. Pass board="smartrecruiters:<company-id>" when they differ.
Atlassian self-hosts and is reached by name, through its own endpoint. Its US
roles publish three geographic zones (Zone A/B/C), which are reported as
separate bands rather than collapsed — their union spans 1.6x and is nobody's
offer.
Not covered: Google, Meta, Amazon and Apple, and most Indian-headquartered
companies. Amazon and Netflix were probed and both serve clean JSON with no
pay in it at all — their ranges exist only in rendered HTML. Apple answers 401. BoardNotFound explains the causes
rather than just failing.
If a company is on one of these boards under a token you can't guess, read it out of their careers URL and pass it directly:
Self-hosted Indian employers are still open in #13.
Register with Claude Code:
Or in claude_desktop_config.json:
No — and you probably shouldn't. This was measured, not assumed:
Automatic Logout — we noticed a login from a new device or location (code 2009), with a redirect to
/session-out.So a cookie buys no extra read access and costs you session stability. The only thing it would unlock is company-internal channels, which are gated to verified employees of that company.
If you still want it, set BLIND_COOKIE to your session cookie header (copy it
from a logged-in browser request in DevTools). There is no login flow — the
server only replays a cookie you supply, read once at startup and attached to
each request. It is off by default, and the client raises immediately if Blind
invalidates it rather than silently returning logged-out HTML.
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/blind)<a href="https://allmcps.com/mcp/blind"><img src="https://allmcps.com/api/badge/blind?style=directory" alt="Blind on AllMCPs" /></a>