Skip to main content

blind-mcp

tests good first issues python license

Find out what a role actually pays — including in markets where the employer publishes nothing.

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.

pay_bands(company="Databricks", role="forward deployed")

  101 matching openings · 68 publish a range
  USD 140,400 – 320,200   (median 182,000 – 250,208)

  PUBLISHES A RANGE                      PUBLISHES NOTHING (same title)
    $152,900–210,155  United States        Remote - India
    $182,000–250,208  MD; VA; D.C.         Seoul, South Korea
    $211,800–291,300  Remote - D.C.        London, United Kingdom
    $178,800–245,850  Central - US         Berlin; Munich

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.

Reads the public job-board APIs (Greenhouse, Ashby, Lever). Documented, intended for machines, and stable — not scraping.

Tools

Pay

Culture — currently blocked

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

⚠️ Blind began returning 403 to all automated requests around September 2026. This is site-wide bot protection, not a block on this project: curl and an empty User-Agent are refused too, and only a browser User-Agent gets through. robots.txt still 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 BlindBlocked with an explanation rather than returning empty results that would read as "no discussion found".

The pay tools are unaffected. See #12.

Coverage

Measured, not estimated:

Company Board Open roles With a published range
Databricks Greenhouse 880 464 (52%)
Anthropic Greenhouse 595 470 (78%)
Ramp Ashby 148 141 (95%)
Figma Greenhouse 158 101 (63%)
Notion Ashby 127 71 (55%)
Stripe Greenhouse 647 21 (3%)

Not covered: employers who self-host their careers site — Google, Meta, Amazon, Apple, Atlassian, Canva — and most Indian-headquartered companies. fetch_postings raises BoardNotFound and says so rather than returning nothing. Adding an adapter is #13.

Install

uv sync

Register with Claude Code:

uv tool install --editable .          # puts `blind-mcp` on PATH
claude mcp add --scope user blind -- blind-mcp

Or in claude_desktop_config.json:

{
  "mcpServers": {
    "blind": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/blind-mcp", "blind-mcp"]
    }
  }
}

Do I need to log in?

No — and you probably shouldn't. This was measured, not assumed:

  • Post bodies, full comment threads, Blind's AI comment summaries, company listings, topic pages, reviews and salary pages all return HTTP 200 anonymously, with no gating.
  • Driving an authenticated session with automation tripped Blind's anomaly detection after roughly six navigations: 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.

The cookie itself is never written to disk, but responses fetched with it are cached under a separate auth/ directory so authenticated and anonymous results can never be served for each other. Don't commit the cookie.

Being a good citizen

Blind's robots.txt disallows /search/ for every user-agent, so this server has no search tool and refuses to fetch that path. It also:

  • sends an honest User-Agent (no browser impersonation — Blind serves it a 200 anyway)
  • caches every response on disk for 6h, so repeat questions cost zero requests
  • spaces requests ~1.5s apart
  • fetches robots.txt first and fails closed if it can't be read

Configure via BLIND_MCP_CACHE_DIR, BLIND_MCP_CACHE_TTL, BLIND_MCP_MIN_INTERVAL, BLIND_MCP_USER_AGENT.

Blind's Terms of Service restrict automated access. This reads public pages at human pace for personal research; bulk crawling is both a ToS problem and, given that Blind's value rests on anonymity, a privacy one. Don't build a dataset of posts joined to employers and nicknames.

Reading the output

Blind is anonymous and unverified. Weight claims by the commenter's employer (company on each comment) and treat a single loud voice as one data point. In testing, the Roku India RTO answer was corroborated by two independent commenters and an unrelated Glassdoor review — that's when it's worth trusting.

Contributing

Small project, easy to contribute to. The cheapest useful change is a keyword alias — one dict entry plus a test — and it's the change that most improves answers, because research only finds threads whose words match yours.

Start with good first issues — nine open, all real and reproduced, each one saying where the code is and how to test the fix — then CONTRIBUTING.md. Issues are labelled by size (size: XS is under 30 minutes) and mentored means ask questions in the thread and you'll get walked through it. First review within 48 hours.

Two hard rules, both explained in CONTRIBUTING: don't commit captured Blind pages (fixtures are generated), and don't weaken robots/cache/throttle for speed.

Publishing

mcp-name: io.github.dheerajjha/blind-mcp

See RELEASING.md.

License

MIT

Release files for blind-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for blind-mcp 0.1.0
File Size Uploaded
blind_mcp-0.1.0.tar.gz 99.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for blind-mcp 0.1.0
File Interpreter ABI Platform
blind_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 120.6 kB

Release files / blind_mcp-0.1.0.tar.gz

Download URL blind_mcp-0.1.0.tar.gz
Size 99.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c7d601f6c19c658e0d023cbbaeca983c99dd0c74052ebaa4963e1fcc8b59ed55
BLAKE2b-256 checksum
How to use checksums
5339ccf64075f018ef8dda9c641bbcff57ad8191c434f080aa2706b489f884f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / blind_mcp-0.1.0-py3-none-any.whl

Download URL blind_mcp-0.1.0-py3-none-any.whl
Size 21.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
876ac741b43ad455f8e6082d953ddd4ce9236c2ca17fb11970d4910780fa040e
BLAKE2b-256 checksum
How to use checksums
e34f60edc83fbca893132b926a43aec28ab91782f4eb13fc8278d5461a737222
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page