blind-mcp
This server exposes Blind community-discussion tools (search, topics, posts, reading, research) — not the pay-band tools described in the README.
company_topics— List the discussion topics Blind suggests for a company (e.g.,india,wlb,layoffs) to guide browsing.company_posts— List posts about a company, optionally filtered by a topic, withpageandlimit.find— Search a company's Blind posts by a keyword (e.g.,maternity,rto) and return matching threads.read_post— Read a full Blind post, including Blind's AI summary and comments with each commenter's employer for weighting claims.research— Ask a natural-language question about a company and get the most relevant threads in full, with comments that address the question.
Reads job postings and published pay bands from companies using Greenhouse as their applicant tracking system, providing per-level salary ranges, currency conversions, and market comparisons.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@blind-mcpwhat do Blind users say about Amazon's RTO policy?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
payband-mcp
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.
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, AmsterdamPer 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.
The same job, in every market the employer posts it in
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.
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-15The 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.
Tools
Pay
Tool | What it does |
| Published bands per seniority, plus every currency the role is posted in, converted |
| The same rung across several employers, sorted by midpoint |
| The underlying postings, with inferred level |
Culture — not registered by default
Tool | What it does |
| Search a company's Blind posts by keyword |
| Pick the topic, rank threads against the question, return them in full |
| 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.
Related MCP server: sec-mcp
Coverage
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:
pay_bands("Some Rebranded Co", "engineer", board="greenhouse:theirslug")Self-hosted Indian employers are still open in #13.
Install
uv syncRegister with Claude Code:
uv tool install --editable . # puts `payband-mcp` on PATH
claude mcp add --scope user payband -- payband-mcpOr in claude_desktop_config.json:
{
"mcpServers": {
"payband": {
"command": "uv",
"args": ["run", "--directory", "/path/to/payband-mcp", "payband-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.txtfirst and fails closed if it can't be read
Configure via PAYBAND_CACHE_DIR, PAYBAND_CACHE_TTL,
PAYBAND_MIN_INTERVAL, PAYBAND_USER_AGENT.
The job boards get the same treatment. SmartRecruiters and Workday need one
request per posting to read a range, so those are spaced 250ms apart behind a
lock shared by all four workers — the workers overlap the board's latency
without ever raising the rate we ask at — and the number of lookups is capped
per question. Workday site discovery reads robots.txt and takes its word for
what is public, including never treating a Disallowed path as a career site.
Exchange rates are cached for a day, because the ECB publishes them once a
working day.
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
Four things the output says that are easy to skim past:
distinct_bandsvspostings— 58 postings sharing one band is one data point advertised 58 times.precision—widemeans the employer published one range across several levels, so it narrows almost nothing.not_checked_count— postings whose range we did not look at, kept apart from ones the employer genuinely left blank. Raisemax_lookups.on_target_earnings_excluded— sales roles often publish OTE, which is base plus commission. Those are reported separately, never averaged into a base band.
Converted figures are estimates on a dated exchange rate, and adjust for neither cost of living nor tax. The published figure in its own currency is the fact; the conversion is there so the comparison is not nonsense.
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 most useful change is a board we can't reach yet — each adapter is a whole category of employer the tool can suddenly answer for, and two of the last three releases were built by outside contributors doing exactly that. Non-US employers most of all, since markets that publish nothing are the whole point.
Next most useful: a band that's wrong. A number that looks authoritative and isn't is the worst failure this project has, and every serious bug so far has been one. Those get priority over new coverage.
Maintainers: see MAINTAINING.md.
Start with good first issues, 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. Claim one in a comment and it's assigned to you.
First review within 48 hours — reviewed by running it, not just reading it.
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/payband-mcp
See RELEASING.md.
License
MIT
Available Tools
5 toolscompany_postsA
List posts about a company, optionally narrowed to one topic.
topic accepts a bare keyword from company_topics (e.g. "india", "wlb").
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| topic | No | ||
| company | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It clearly discloses a read-only listing behavior and adds an important constraint: `topic` must be a bare keyword from company_topics, not an arbitrary string. It does not detail pagination or ordering, but these are minor for this straightforward query and the output schema defines the result format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences: the first states the primary purpose, the second clarifies the only non-obvious parameter. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description covers the key behavior and the topic constraint, and an output schema exists to define the response shape. It falls slightly short of full completeness because the pagination parameters are undocumented, but the defaults and names make them reasonably inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It only documents `topic` (with examples), while leaving `page`, `limit`, and `company` unaddressed. `company` is required and inferable, and `page`/`limit` have defaults, but their semantics (e.g., page size, offset) are not defined anywhere in the schema or description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'List' and the resource 'posts about a company', making the core action unambiguous. It also states the optional narrowing by topic, which distinguishes it from sibling tools like company_topics (which presumably lists topics) and read_post (which reads a single post).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the context: use this tool to list posts about a company, with an optional topic filter. It also directs the agent to source `topic` values from company_topics, giving a concrete prerequisite. However, it does not explicitly contrast with alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_topicsA
List the discussion topics Blind itself suggests for a company.
These are the highest-signal entry points -- e.g. Roku exposes india, wlb,
culture, layoffs, interview, rsu. Use one as the topic for company_posts.
| Name | Required | Description | Default |
|---|---|---|---|
| company | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that this is a read-only listing operation and explains the selection behavior: topics are 'Blind itself suggests' and are 'highest-signal entry points.' This adds meaningful behavioral context, although it does not mention potential edge cases such as companies with no suggested topics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core statement appears in the first sentence, followed by a helpful purpose rationale and concrete examples. Every sentence earns its place, and the reference to company_posts adds actionable guidance without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description covers the main usage flow: retrieve suggested topics, then pass one to company_posts. The main gap is the missing company identifier format, but the overall tool behavior and integration with the sibling are sufficiently explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate by explaining the `company` parameter, but it only says 'for a company.' It does not clarify the expected format (e.g., display name vs. slug), case sensitivity, or whether the company must match a known entity. The Roku example is about topic values, not the parameter format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('discussion topics Blind itself suggests for a company'). It includes concrete examples (Roku's topics: india, wlb, culture, layoffs) and explicitly connects to the sibling company_posts by explaining that one of these topics should be used as its `topic`, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly tells the agent when to use this tool: to get the highest-signal entry points before calling company_posts. It explicitly names the relevant sibling and how the result should be consumed. It does not enumerate exclusions or alternatives like read_post/find/research, so it stops just short of full explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findA
Find a company's posts about one keyword.
This is how you search Blind. The company topic path accepts any keyword,
so find("Intuit", "maternity") returns exactly the maternity threads --
which paging the main listing will not surface, since they can be years
deep. Prefer one distinctive noun ("maternity", "rto", "refresher");
vague words like "policy" match hundreds of loosely-related posts.
Returns no posts when nothing matches, rather than falling back to the generic listing, so an empty result is a real answer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| company | Yes | ||
| keyword | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses exact-match behavior on the topic path, the no-fallback empty-result semantics, and the risk of vague keywords, which are non-obvious and useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the one-sentence purpose, followed by only behaviorally relevant details. Every sentence adds information (example, keyword guidance, empty-result meaning) without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-style search with three parameters and an output schema, the description covers the important invocation distinctions, result semantics, and fallback behavior. Nothing necessary for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% property descriptions, so the description must compensate. It richly explains the keyword parameter and illustrates company/keyword with the Intuit/maternity example, though the limit parameter is left to inference from its name and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource ('Find a company's posts about one keyword') and the examples make the exact scope unmistakable. It also contrasts with the generic 'main listing' by saying this returns keyword-specific threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly positions itself as the way to search Blind and gives concrete keyword-selection advice. It mentions the 'main listing' as an alternative that fails to surface old threads, but it does not name sibling tools or state explicit when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_postA
Read one Blind post in full.
Returns the body, Blind's own AI summary of the comment thread, and the comments with each commenter's employer -- which is how you weigh a claim (an answer from someone at the company differs from a passer-by).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| max_comments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It usefully describes the return payload (body, AI summary, comments with employer context) and the reasoning behind it. However, it does not disclose that max_comments limits how many comments are returned, despite the schema's default of 40, which could mislead an agent into expecting all comments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action comes first, then the return contents, then a concise rationale for the employer data. Every sentence contributes useful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose, the return values, and the practical use case (weighing claims). Since an output schema exists, return format details are not required here. The main gap is the lack of any mention of max_comments or URL expectations, which keeps it just short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the two parameters. It implies that 'url' identifies a single post, but it never explains the expected URL format or the meaning/behavior of 'max_comments'. This leaves both parameters underspecified beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Read one Blind post in full'), which clearly distinguishes it from sibling list/search tools like company_posts and find. It also specifies what the tool returns, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case: retrieving a single post by URL in order to read its full content and comments. It does not explicitly contrast with sibling tools or state when not to use it, but the 'one post in full' framing provides enough context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchA
Answer a question about a company by pulling the most relevant threads.
Probes the distinctive words in the question against Blind's keyword-scoped company pages, merges the hits, then returns the best threads in full with Blind's own AI summary and the comments that actually address the question.
Ask naturally: "how many days in office in India", "what is the maternity leave policy", "do they require a PhD".
| Name | Required | Description | Default |
|---|---|---|---|
| company | Yes | ||
| question | Yes | ||
| max_posts | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the internal process (probing distinctive words, merging hits) and the exact output shape (best threads in full, Blind's AI summary, comments that address the question). This goes well beyond a generic 'research' label, though it does not mention error conditions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and well-structured: a one-sentence summary, a two-sentence mechanism/outcome explanation, and example queries. Every sentence earns its place and there is no redundant fluff. The key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and three simple parameters, the description covers the core purpose, mechanism, and return contents clearly. It is slightly incomplete for an agent because it does not explain the meaning of max_posts or explicitly differentiate from sibling tools, but it is still usable as-is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It effectively explains 'company' and 'question' through the purpose sentence and the example prompts, but 'max_posts' is never mentioned or contextualized. The compensation is partial: the two main parameters are clear, but the third is not addressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pairing: "Answer a question about a company by pulling the most relevant threads." It clearly differentiates itself from the sibling tools (company_topics, company_posts, read_post, find) by describing a cross-thread research capability that merges hits and returns a curated answer with AI summary and relevant comments. The natural-language examples reinforce what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly implies when to use this tool: whenever you have a natural-language question about a company, with examples showing the expected phrasing ("Ask naturally: ..."). However, it does not explicitly name alternatives or state when NOT to use this tool in favor of a sibling, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
company_posts - First observed
company_topics - First observed
find - First observed
read_post - First observed
research
TDQS
Scored across 5 tools
The tools generally occupy distinct layers: topic discovery, listing, keyword search, question answering, and full post reading. The only mild overlap is between company_posts and find, since both return company posts, but their input styles (curated topic vs arbitrary keyword) make the split understandable.
Names are readable and consistently lowercase, but the pattern is mixed: company_topics and company_posts are noun-style resources, read_post is verb_noun, and find/research are bare verbs. There is no single predictable naming convention across the set.
Five tools is a well-scoped size for a read-only Blind search and research server. Each tool serves a meaningful step in the workflow without unnecessary bloat or duplication.
The toolset covers the full read-oriented workflow: discover company topics, list posts, search by keyword, ask a natural-language research question, and read a full post with comments. There are no obvious gaps for the stated domain.
Maintenance
Related MCP Connectors
Search job postings aggregated from companies' careers sites, plus each job's discussion thread.
Search job postings, companies, and technology stacks across 10M+ companies.
Company profile lookup and B2B company search for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables searching and analyzing H-1B visa sponsoring companies using U.S. Department of Labor data. Supports filtering by job role, location, and salary with natural language queries to find direct employers and export results.16MIT
- AlicenseNot gradedqualityBmaintenanceProvides access to SEC EDGAR data through natural language, including company filings, financial statements, and company info, without requiring an API key.MIT
- AlicenseAqualityBmaintenanceEnables querying open job postings directly from company applicant-tracking systems (Greenhouse, Ashby, Lever), finding a company's job board, listing and comparing roles, and accessing salary data, all without scraping or API keys.322 PyPIMIT
- AlicenseAqualityCmaintenanceEnables asking what companies are hiring right now by querying live job postings from their applicant-tracking system board APIs (Greenhouse, Lever, Ashby, Recruitee, Rippling, Personio), with filters, parsed location, remote flag, and structured salary.3MIT