Skip to main content
Glama

Resume Booster Job Board

Search jobs

search_jobs
Read-onlyIdempotent

Search the live job board: postings pulled directly from employers' own hiring systems, 30-day freshness cap. Send job titles, skills and places, never CV text; put the place in location, not in query. Returns slim job cards with the board's parsed pay (salaryMinAnnual/salaryMaxAnnual) and seniority, plus its honesty disclosures: totals (a floor when countCapped; countUnavailable when unknown), filters it could not honour (ignoredFilters), words it read as filters (intentFilters) and spelling suggestions. Answers with no key: one page of 10 rows to offset 200; a key pages up to 60.

Input Schema

NameRequiredDescriptionDefault
sortNo
limitNoRows per page: 10 with no key, up to 60 with one.
queryNoJob titles or skills, never CV text; the place goes in location. Exclude with a minus: 'engineer -senior'.
offsetNoPass back nextOffset; to 200 with no key, 10,000 with one.
remoteNo
vendorNoComma list of hiring systems (greenhouse, lever, …), max 8; usajobs and smartrecruiters are not served here.
countryNoISO-2 codes, comma list, max 5.
categoryNoComma list of board_stats category slugs, max 3.
locationNoCity, state or metro: 'texas', 'NYC', 'berlin'.
maxYearsNoRoles asking at most N years of experience.
payBasisNo
workModeNoComma list: remote, hybrid, onsite.
companiesNoComma list of companyToken values or employer names.
salaryMaxNoAnnual USD-equivalent ceiling.
salaryMinNoAnnual USD-equivalent floor (filterCoverage gives the share of postings that state one).
departmentNoPart of the employer's own team name.
experienceNoComma list: entry, mid, senior, expert (the posting's band).
maxAgeDaysNoPostings from the last N days (1-30).
postedAfterNoISO date; postings the employer dated after it.
hasStatedPayNoOnly postings whose salary field holds a figure (see the card's salary: rarely a business figure, not pay).
employmentTypeNoComma list: full_time, part_time, contract, temporary, internship.
excludeAgenciesNoHide staffing-agency postings.
includeUnstatedPayNoWith a pay band, also admit postings that state no pay.

Output Schema

NameRequiredDescriptionDefault
jobsYes
totalNo
hasMoreNo
withheldNo
didYouMeanNo
nextOffsetNo
countCappedNo
relatedTotalNo
totalAtLeastNo
excludedTermsNo
intentFiltersNo
relatedCappedNo
filterCoverageNo
ignoredFiltersNo
rankedFellBackNo
agenciesExcludedNo
countUnavailableNo
filterCoverageAtNo
pageLimitReachedNo
salaryStatedOnlyNo
unknownCompaniesNo
companiesResolvedNo
companiesUnresolvedNo
locationInterpretedNo
companiesNotLookedUpNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed79 schema fields changed
    • removedInput schema / properties / agentReadyOnly
      Removed value: -{
      -  "description": "Only jobs the apply agent can submit to on the user's behalf.",
      -  "type": "boolean"
      -}
    • changedInput schema / properties / category / description
      Previous value: -"Comma list of category slugs (see board_stats for the live set), max 3."New value: +"Comma list of board_stats category slugs, max 3."
    • changedInput schema / properties / companies / description
      Previous value: -"Scope to specific employers: a comma list of companyToken values from job cards (or from the site's employer pages). An employer the board does not carry simply matches nothing; tokens the board drops are named in ignoredFilters."New value: +"Comma list of companyToken values or employer names."
    • changedInput schema / properties / country / description
      Previous value: -"ISO-2 codes, comma-separated, max 5. E.g. 'US,GB'."New value: +"ISO-2 codes, comma list, max 5."
    • changedInput schema / properties / department / description
      Previous value: -"Substring match on the employer's own department/team text."New value: +"Part of the employer's own team name."
    • changedInput schema / properties / employmentType / description
      Previous value: -"Comma list of: full_time, part_time, contract, temporary, internship."New value: +"Comma list: full_time, part_time, contract, temporary, internship."
    • changedInput schema / properties / excludeAgencies / description
      Previous value: -"Hide postings from staffing/recruiting agencies (their job cards carry agency:true). Agencies are served by default; this is an opt-in narrowing."New value: +"Hide staffing-agency postings."
    • changedInput schema / properties / experience / description
      Previous value: -"Comma list of seniority bands the POSTING asks for: entry, mid, senior, expert. Rows whose band could not be read are excluded — use maxYears for the candidate's own side of the question."New value: +"Comma list: entry, mid, senior, expert (the posting's band)."
    • changedInput schema / properties / hasStatedPay / description
      Previous value: -"Only postings whose pay field carries a figure the employer published — hourly and per-shift rates included, read from the `salary` field. The response's filterCoverage gives the live share. Narrower than it sounds only for RANKING: salaryFloor compares an annualised figure in approximate US dollars, which fewer postings carry, so some rows this returns cannot be filtered by pay amount."New value: +"Only postings whose salary field holds a figure (see the card's salary: rarely a business figure, not pay)."
    • changedInput schema / properties / includeUnstatedPay / description
      Previous value: -"WIDENS an active salaryMin/salaryMax band to also admit postings that state no pay at all. Inert with no band set (unpriced rows are already included). The response says salaryStatedOnly when a band is narrowing without it."New value: +"With a pay band, also admit postings that state no pay."
    • changedInput schema / properties / limit / description
      Previous value: -"Rows per page, 1-60. Default 20."New value: +"Rows per page: 10 with no key, up to 60 with one."
    • changedInput schema / properties / location / description
      Previous value: -"City/state/metro, e.g. 'texas', 'NYC', 'berlin'."New value: +"City, state or metro: 'texas', 'NYC', 'berlin'."
    • changedInput schema / properties / maxAgeDays / description
      Previous value: -"Only postings from the last N days (1-30)."New value: +"Postings from the last N days (1-30)."
    • changedInput schema / properties / maxYears / description
      Previous value: -"Only roles asking for at most N years of experience."New value: +"Roles asking at most N years of experience."
    • changedInput schema / properties / offset / description
      Previous value: -"Paging offset — pass back the previous response's nextOffset."New value: +"Pass back nextOffset; to 200 with no key, 10,000 with one."
    • removedInput schema / properties / payBasis / description
      Removed value: -"Restrict to hourly or salaried pay."
    • changedInput schema / properties / postedAfter / description
      Previous value: -"ISO-8601 instant; only postings the EMPLOYER dated after it. Undated rows fall out of this window (unlike maxAgeDays, which falls back to when the board first saw a posting), so this is the strict form of 'new'."New value: +"ISO date; postings the employer dated after it."
    • changedInput schema / properties / query / description
      Previous value: -"Search terms. Supports exclusions: 'engineer -senior'."New value: +"Job titles or skills, never CV text; the place goes in location. Exclude with a minus: 'engineer -senior'."
    • removedInput schema / properties / remote / description
      Removed value: -"Only remote-friendly roles."
    • changedInput schema / properties / salaryMax / description
      Previous value: -"Annual USD-equivalent salary ceiling."New value: +"Annual USD-equivalent ceiling."
    • changedInput schema / properties / salaryMin / description
      Previous value: -"Annual USD-equivalent salary floor. Many postings state no comparable pay; the response's filterCoverage gives the live share this floor can see, dated by filterCoverageAt."New value: +"Annual USD-equivalent floor (filterCoverage gives the share of postings that state one)."
    • removedInput schema / properties / sort / description
      Removed value: -"Default relevance."
    • changedInput schema / properties / vendor / description
      Previous value: -"Comma list of hiring-system vendors (greenhouse, lever, ashby, …), max 8. Not available here: usajobs, smartrecruiters — Two hiring systems are shown on resumebooster.work but not handed on by this connector: the U.S. federal job feed, whose terms of use forbid redistributing it as a data feed, and SmartRecruiters, withheld until SmartRecruiters (SAP) permits it. No tool here returns their rows; open the posting on the site instead. Naming one is refused rather than answered with an empty page."New value: +"Comma list of hiring systems (greenhouse, lever, …), max 8; usajobs and smartrecruiters are not served here."
    • changedInput schema / properties / workMode / description
      Previous value: -"Comma list of: remote, hybrid, onsite."New value: +"Comma list: remote, hybrid, onsite."
    • removedOutput schema / additionalProperties
      Removed value: -true
    • removedOutput schema / properties / agenciesExcluded / description
      Removed value: -"Row-selecting: disclosed agency inventory is hidden from this page."
    • addedOutput schema / properties / companiesNotLookedUp
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / companiesResolved
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / companiesUnresolved
      Added value: +{
      +  "type": "array"
      +}
    • addedOutput schema / properties / countCapped
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / countUnavailable / description
      Removed value: -"The board could not count this query exactly — do not report a total."
    • removedOutput schema / properties / filterCoverage / description
      Removed value: -"For each filter applied, the live share (0-1) of the board that states the field it filters on; rows that state nothing are excluded."
    • removedOutput schema / properties / filterCoverageAt / description
      Removed value: -"When filterCoverage was measured. ABSENT when a figure is a pinned fallback rather than a live reading."
    • removedOutput schema / properties / ignoredFilters / description
      Removed value: -"Filters the board could NOT apply. Results answer a wider question than was asked."
    • removedOutput schema / properties / intentFilters / description
      Removed value: -"Words read out of the query as filters."
    • removedOutput schema / properties / jobs / items / additionalProperties
      Removed value: -true
    • removedOutput schema / properties / jobs / items / properties / agency / description
      Removed value: -"Present and true when the posting comes from a staffing/recruiting agency."
    • removedOutput schema / properties / jobs / items / properties / agentReady
      Removed value: -{
      -  "description": "True when request_application can submit to this hiring system.",
      -  "type": "boolean"
      -}
    • addedOutput schema / properties / jobs / items / properties / applyForm
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / jobs / items / properties / applyUrl / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / category
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • changedOutput schema / properties / jobs / items / properties / company / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / companyToken / description
      Removed value: -"The employer handle; pass it back in search_jobs `companies`."
    • changedOutput schema / properties / jobs / items / properties / companyToken / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / country / description
      Removed value: -"ISO-2."
    • changedOutput schema / properties / jobs / items / properties / country / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / department / description
      Removed value: -"The employer's own team name. ABSENT when the posting carries none."
    • changedOutput schema / properties / jobs / items / properties / employmentType / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / experienceBand / description
      Removed value: -"ABSENT when the posting's seniority could not be read."
    • removedOutput schema / properties / jobs / items / properties / id / description
      Removed value: -"vendor:employer:externalId — the id every other tool takes."
    • changedOutput schema / properties / jobs / items / properties / location / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / matchScope / description
      Removed value: -"Which part of the posting matched the query. ABSENT when the board's path did not say."
    • removedOutput schema / properties / jobs / items / properties / minYears / description
      Removed value: -"Years of experience the posting asks for. ABSENT when it names none (most postings)."
    • removedOutput schema / properties / jobs / items / properties / postedAt / description
      Removed value: -"The employer's own date, ISO-8601. Null when the feed carries none — never the date we first saw it."
    • changedOutput schema / properties / jobs / items / properties / postedAt / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / recheckedAt / description
      Removed value: -"When the employer's feed was last fetched and still carried this employer's board."
    • removedOutput schema / properties / jobs / items / properties / salary / description
      Removed value: -"The employer's own pay text, verbatim and unparsed."
    • changedOutput schema / properties / jobs / items / properties / salary / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / salaryCurrency / description
      Removed value: -"ISO-4217, as stated. ABSENT when unstated."
    • removedOutput schema / properties / jobs / items / properties / salaryMaxAnnual / description
      Removed value: -"Annual USD-equivalent ceiling. ABSENT when unstated."
    • removedOutput schema / properties / jobs / items / properties / salaryMinAnnual / description
      Removed value: -"Annual USD-equivalent floor, parsed by the board. ABSENT when the posting states no pay — absence is not zero."
    • removedOutput schema / properties / jobs / items / properties / salaryPeriod / description
      Removed value: -"The period the employer stated: hour, month, year. ABSENT when unstated (most postings)."
    • removedOutput schema / properties / jobs / items / properties / siteUrl / description
      Removed value: -"The posting's page on resumebooster.work."
    • changedOutput schema / properties / jobs / items / properties / title / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / jobs / items / properties / workMode / description
      Removed value: -"The employer's own statement: the option they chose in their ATS, or their own words on the posting (title, location, department). null has THREE meanings: neither source says anything, the two disagree and the board refuses to choose, or the posting is older than the vendor field this board now reads. Never inferred from the description, and silence is never read as onsite."
    • changedOutput schema / properties / jobs / items / properties / workMode / enum
      Previous value: -[
      -  "remote",
      -  "hybrid",
      -  "onsite",
      -  null
      -]New value: +[
      +  "remote",
      +  "hybrid",
      +  "onsite"
      +]
    • changedOutput schema / properties / jobs / items / properties / workMode / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / jobs / items / required
      Previous value: -[
      -  "id",
      -  "agentReady"
      -]New value: +[
      +  "id"
      +]
    • addedOutput schema / properties / locationInterpreted
      Added value: +{
      +  "type": "object"
      +}
    • removedOutput schema / properties / nextOffset / description
      Removed value: -"Pass back as `offset` for the next page."
    • addedOutput schema / properties / pageLimitReached
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / rankedFellBack
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / relatedCapped / description
      Removed value: -"relatedTotal stopped counting at the board's cap; the true figure is higher."
    • removedOutput schema / properties / relatedTotal / description
      Removed value: -"Further postings matched in the description only, beyond `total` (which counts title matches). Each card says which in matchScope."
    • removedOutput schema / properties / salaryStatedOnly / description
      Removed value: -"Row-selecting: this page excludes the postings with no annualised figure in approximate US dollars, including postings that publish an hourly rate (filterCoverage, when present, gives the live share)."
    • removedOutput schema / properties / total / description
      Removed value: -"Exact match count. ABSENT with countUnavailable:true when the board refuses to guess."
    • addedOutput schema / properties / totalAtLeast
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / unknownCompanies
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / withheld
      Added value: +{
      +  "type": "integer"
      +}
  2. Changed12 schema fields changed
    • changedInput schema / properties / hasStatedPay / description
      Previous value: -"Only postings whose pay field carries a figure the employer published — hourly and per-shift rates included, read from the `salary` field. About 28% of the board (2026-09-27). Narrower than it sounds only for RANKING: salaryFloor compares an annualised figure in approximate US dollars, which about 24% carry, so some rows this returns cannot be filtered by pay amount."New value: +"Only postings whose pay field carries a figure the employer published — hourly and per-shift rates included, read from the `salary` field. The response's filterCoverage gives the live share. Narrower than it sounds only for RANKING: salaryFloor compares an annualised figure in approximate US dollars, which fewer postings carry, so some rows this returns cannot be filtered by pay amount."
    • changedInput schema / properties / salaryMin / description
      Previous value: -"Annual USD-equivalent salary floor. Note: only ~13% of postings state pay."New value: +"Annual USD-equivalent salary floor. Many postings state no comparable pay; the response's filterCoverage gives the live share this floor can see, dated by filterCoverageAt."
    • changedInput schema / properties / vendor / description
      Previous value: -"Comma list of hiring-system vendors (greenhouse, lever, ashby, …), max 8. Not available here: usajobs — The U.S. federal job feed is readable on resumebooster.work but may not be redistributed as a data feed under its terms of use, so no tool here returns its rows. Naming one is refused rather than answered with an empty page."New value: +"Comma list of hiring-system vendors (greenhouse, lever, ashby, …), max 8. Not available here: usajobs, smartrecruiters — Two hiring systems are shown on resumebooster.work but not handed on by this connector: the U.S. federal job feed, whose terms of use forbid redistributing it as a data feed, and SmartRecruiters, withheld until SmartRecruiters (SAP) permits it. No tool here returns their rows; open the posting on the site instead. Naming one is refused rather than answered with an empty page."
    • addedOutput schema / properties / filterCoverage
      Added value: +{
      +  "additionalProperties": {
      +    "type": "number"
      +  },
      +  "description": "For each filter applied, the live share (0-1) of the board that states the field it filters on; rows that state nothing are excluded.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / filterCoverageAt
      Added value: +{
      +  "description": "When filterCoverage was measured. ABSENT when a figure is a pinned fallback rather than a live reading.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs / items / properties / matchScope
      Added value: +{
      +  "description": "Which part of the posting matched the query. ABSENT when the board's path did not say.",
      +  "enum": [
      +    "title",
      +    "description"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / jobs / items / properties / minYears / description
      Previous value: -"Years of experience the posting asks for. ABSENT when it names none (~71%)."New value: +"Years of experience the posting asks for. ABSENT when it names none (most postings)."
    • changedOutput schema / properties / jobs / items / properties / salaryPeriod / description
      Previous value: -"The period the employer stated: hour, month, year. ABSENT when unstated (~89% of the board)."New value: +"The period the employer stated: hour, month, year. ABSENT when unstated (most postings)."
    • addedOutput schema / properties / jobs / items / properties / siteUrl
      Added value: +{
      +  "description": "The posting's page on resumebooster.work.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / relatedCapped
      Added value: +{
      +  "description": "relatedTotal stopped counting at the board's cap; the true figure is higher.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / relatedTotal
      Added value: +{
      +  "description": "Further postings matched in the description only, beyond `total` (which counts title matches). Each card says which in matchScope.",
      +  "type": "integer"
      +}
    • changedOutput schema / properties / salaryStatedOnly / description
      Previous value: -"Row-selecting: this page excludes the ~76% of postings with no annualised figure in approximate US dollars (2026-09-27), including postings that publish an hourly rate."New value: +"Row-selecting: this page excludes the postings with no annualised figure in approximate US dollars, including postings that publish an hourly rate (filterCoverage, when present, gives the live share)."
  3. Changed3 schema fields changed
    • changedInput schema / properties / hasStatedPay / description
      Previous value: -"Only postings that state a salary (excludes the ~87% that don't)."New value: +"Only postings whose pay field carries a figure the employer published — hourly and per-shift rates included, read from the `salary` field. About 28% of the board (2026-09-27). Narrower than it sounds only for RANKING: salaryFloor compares an annualised figure in approximate US dollars, which about 24% carry, so some rows this returns cannot be filtered by pay amount."
    • changedOutput schema / properties / jobs / items / properties / workMode / description
      Previous value: -"Stated or inferred from title/location; null when neither says."New value: +"The employer's own statement: the option they chose in their ATS, or their own words on the posting (title, location, department). null has THREE meanings: neither source says anything, the two disagree and the board refuses to choose, or the posting is older than the vendor field this board now reads. Never inferred from the description, and silence is never read as onsite."
    • changedOutput schema / properties / salaryStatedOnly / description
      Previous value: -"Row-selecting: this page excludes the ~87% of postings with no stated pay."New value: +"Row-selecting: this page excludes the ~76% of postings with no annualised figure in approximate US dollars (2026-09-27), including postings that publish an hourly rate."
  4. Changed1 schema field changed
    • changedInput schema / properties / vendor / description
      Previous value: -"Comma list of hiring-system vendors (greenhouse, lever, ashby, …), max 8."New value: +"Comma list of hiring-system vendors (greenhouse, lever, ashby, …), max 8. Not available here: usajobs — The U.S. federal job feed is readable on resumebooster.work but may not be redistributed as a data feed under its terms of use, so no tool here returns its rows. Naming one is refused rather than answered with an empty page."
  5. First observed

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already marking this as a read-only, idempotent, non-destructive, open-world operation, the description adds substantial behavioral context: a 30-day freshness cap, the employer-system source, slim job cards, parsed pay fields, capped totals, ignored filters, interpreted filters, and spelling suggestions. It also discloses pagination depth with and without a key, which materially affects how an agent should call it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded around the core purpose, data source, query semantics, and return behavior. Every part earns its place for a 23-parameter search tool, though some return-detail sentences overlap with what the output schema can provide. It remains readable and avoids redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex job-search tool with 23 optional parameters, rich annotations, and an output schema, the description covers the essential operational context: source freshness, query/location split, pagination limits, and result disclosures. It is not fully complete because it omits explicit sibling routing and how a caller obtains an API key, but an agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high at 87%, so most parameter meaning is already structured, and the description appropriately focuses on the highest-risk ambiguity: query must hold titles or skills, while location must hold the place. It also notes the no-key vs key pagination limits. It adds useful semantic guidance beyond the schema, though it does not elaborate on most of the 23 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: searching the live job board, with postings sourced directly from employers' hiring systems. It clearly distinguishes this as a job-board search rather than a stats, employer-history, or single-job lookup. It does not explicitly name or contrast with sibling tools like search, get_jobs, or get_job, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context and important query-shaping instructions: send titles, skills, and places, never CV text, and put the place in location rather than query. It also communicates pagination expectations with and without a key. It does not explicitly say when to prefer this over siblings such as get_jobs or search, so it lacks full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.