Skip to main content
Glama

Search jobs

search_jobs
Read-only

Search HeadStart's tech jobs. query is the role only ('backend engineer at a climate startup'); years, pay, place and dates have their own fields. query ranks but never narrows the total; keyword requires a word. For visas or relocation use work_authorization, never keyword. Text company matches any name containing it: say so. Non-tech is left out unless include_non_tech.

Input Schema

NameRequiredDescriptionDefault
atsNoOne ATS, such as greenhouse.
pageNoThe page; the last is 20.
sortNoWith `query`, orders its 2,000 closest scoring 0.67+.relevance
limitNoJobs per page.
queryNoThe role only; omit for the newest.
detailNofull adds counts per filter and country (slow).concise
remoteNoRemote jobs only.
companyNoText in a company's name, or a Board key ('ashby:openai'); a key or exact name with `category`.
countryNoISO code (US, GB) or English name ('Germany').
keywordNoWords the job must contain, as word starts; quotes keep a phrase.
categoryNoA job category.
locationNoText in the location; Zurich finds Zürich.
max_yearsNoThe user's years ('3+' is 3); keeps jobs stating none.
operatorsNoWho may post; staffing and aggregator need naming or `company`.
has_salaryNoOnly jobs stating a salary.
keyword_inNoWhere `keyword` must be (title).
salary_maxNoAnnual; keeps ranges starting at or under it.
salary_minNoAnnual (30 lakh = 3000000); keeps ranges reaching it.
similar_toNoA job id to rank by, not with `query`.
india_placeNoAn Indian city or region ('pune'), or 'india'.
per_companyNoMost rows a company (3; 0: no cap).
max_age_daysNoSkips postings older than this; 0: any age.
employment_typeNofull-time also keeps jobs stating none.
exclude_companyNoSkips companies whose name has this.
salary_currencyNoISO 4217, such as USD or INR.
include_non_techNoAlso keep jobs confidently not tech.
posted_within_daysNoPosted within this many days.
work_authorizationNoAs the description says, by HeadStart's rules; confirm with get_job.
first_seen_within_hoursNoFirst seen within this many hours.
required_years_at_leastNoJobs asking at least this many years.

Output Schema

NameRequiredDescriptionDefault
pageYes
rowsYes
totalYes
next_pageYes
truncatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed30 schema fields changed
    • changedInput schema / properties / ats / description
      Previous value: -"One ATS, such as greenhouse or workday."New value: +"One ATS, such as greenhouse."
    • changedInput schema / properties / category / description
      Previous value: -"A job category. A label or close name ('AI/ML') is read as its id."New value: +"A job category."
    • changedInput schema / properties / company / description
      Previous value: -"Any company name containing this text, or a Board key such as 'ashby:openai' (needed beside `category`, or an exact name)."New value: +"Text in a company's name, or a Board key ('ashby:openai'); a key or exact name with `category`."
    • changedInput schema / properties / country / description
      Previous value: -"An ISO 3166-1 alpha-2 code (US, GB, DE, IN) or a country's English name ('Germany', 'UK'). IN is india_place 'india'."New value: +"ISO code (US, GB) or English name ('Germany')."
    • changedInput schema / properties / detail / description
      Previous value: -"full adds counts per filter option and per country; slower."New value: +"full adds counts per filter and country (slow)."
    • changedInput schema / properties / employment_type / description
      Previous value: -"full-time also keeps jobs stating no type; the others keep only jobs that say so."New value: +"full-time also keeps jobs stating none."
    • changedInput schema / properties / exclude_company / description
      Previous value: -"Leaves out every company whose name contains this text."New value: +"Skips companies whose name has this."
    • changedInput schema / properties / first_seen_within_hours / description
      Previous value: -"New to HeadStart within this many hours."New value: +"First seen within this many hours."
    • changedInput schema / properties / has_salary / description
      Previous value: -"Only jobs that state a salary."New value: +"Only jobs stating a salary."
    • changedInput schema / properties / include_non_tech / description
      Previous value: -"Also keep jobs confidently not tech (a cashier), for a non-tech role the user wants."New value: +"Also keep jobs confidently not tech."
    • changedInput schema / properties / india_place / description
      Previous value: -"An Indian city or region, such as 'bengaluru', 'delhi ncr' or 'pune', or 'india' for anywhere in India."New value: +"An Indian city or region ('pune'), or 'india'."
    • changedInput schema / properties / keyword / description
      Previous value: -"Words the job must contain, each starting a word ('ai' finds AIOps, not Retail); double quotes keep a phrase together."New value: +"Words the job must contain, as word starts; quotes keep a phrase."
    • changedInput schema / properties / keyword_in / description
      Previous value: -"Where `keyword` must appear; title unless sent."New value: +"Where `keyword` must be (title)."
    • changedInput schema / properties / location / description
      Previous value: -"Text the job's location contains, any country; Zurich finds Zürich, Bangalore finds Bengaluru."New value: +"Text in the location; Zurich finds Zürich."
    • changedInput schema / properties / max_age_days / description
      Previous value: -"Leaves out postings older than this many days; 0 for any age."New value: +"Skips postings older than this; 0: any age."
    • changedInput schema / properties / max_years / description
      Previous value: -"The user's own years ('3+ years' is 3); jobs stating none are kept."New value: +"The user's years ('3+' is 3); keeps jobs stating none."
    • changedInput schema / properties / operators / description
      Previous value: -"Who may post the jobs; staffing (agencies) and aggregator (job boards) are left out unless named or a `company` is."New value: +"Who may post; staffing and aggregator need naming or `company`."
    • changedInput schema / properties / per_company / description
      Previous value: -"Most rows of one company before others' (3; 0 for none)."New value: +"Most rows a company (3; 0: no cap)."
    • changedInput schema / properties / posted_within_days / description
      Previous value: -"Posted by the employer within this many days."New value: +"Posted within this many days."
    • changedInput schema / properties / query / description
      Previous value: -"The role only; omit for the newest jobs."New value: +"The role only; omit for the newest."
    • changedInput schema / properties / required_years_at_least / description
      Previous value: -"Jobs asking at least this many years; not the user's own."New value: +"Jobs asking at least this many years."
    • changedInput schema / properties / salary_currency / description
      Previous value: -"ISO 4217 code, such as USD, INR, EUR."New value: +"ISO 4217, such as USD or INR."
    • changedInput schema / properties / salary_max / description
      Previous value: -"Annual, in salary_currency: keeps a stated range starting at or below it."New value: +"Annual; keeps ranges starting at or under it."
    • changedInput schema / properties / salary_min / description
      Previous value: -"Annual, in salary_currency (30 lakh = 3000000 INR): keeps a stated range reaching it."New value: +"Annual (30 lakh = 3000000); keeps ranges reaching it."
    • changedInput schema / properties / similar_to / description
      Previous value: -"A job id: rank by that job, leaving it out. Not with `query`."New value: +"A job id to rank by, not with `query`."
    • changedInput schema / properties / sort / description
      Previous value: -"With `query`, orders only matches scoring at least 0.67 among its 2,000 closest; salary by a range's low end."New value: +"With `query`, orders its 2,000 closest scoring 0.67+."
    • changedInput schema / properties / work_authorization / description
      Previous value: -"What the description says of visas or relocation: an unhedged offer of sponsorship; also hedged or transfer-only offers (rows say which); a refusal or a citizenship requirement; relocation help. Read from the text by HeadStart's rules, so read the job with get_job before telling a user it sponsors."New value: +"As the description says, by HeadStart's rules; confirm with get_job."
    • addedOutput schema / additionalProperties
      Added value: +false
    • addedOutput schema / properties / rows / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / rows / items / required
      Added value: +[
      +  "id",
      +  "title",
      +  "company",
      +  "key",
      +  "url",
      +  "location",
      +  "remote",
      +  "posted",
      +  "first_seen",
      +  "min_years",
      +  "salary_min",
      +  "salary_max",
      +  "salary_currency",
      +  "source",
      +  "score"
      +]
  2. Changed30 schema fields changed
    • changedInput schema / properties / category / description
      Previous value: -"A job category, across the whole index or, with `company`, within that company's jobs. A label or close name ('AI/ML') is read as its id."New value: +"A job category. A label or close name ('AI/ML') is read as its id."
    • changedInput schema / properties / company / description
      Previous value: -"A company name, matched as the site's company box matches (any company name containing the text), or a Board key from an earlier answer such as 'ashby:openai'. In search_jobs beside `category` it needs a directory company: a key such as 'greenhouse:stripe', or an exact name."New value: +"Any company name containing this text, or a Board key such as 'ashby:openai' (needed beside `category`, or an exact name)."
    • changedInput schema / properties / country / description
      Previous value: -"ISO 3166-1 alpha-2 code (US, GB, DE, IN); a country's name or 'UK', 'USA', 'UAE' is read as its code. Matches every way a job's location names the country: its name, states, cities and codes. IN is india_place 'india'."New value: +"An ISO 3166-1 alpha-2 code (US, GB, DE, IN) or a country's English name ('Germany', 'UK'). IN is india_place 'india'."
    • removedInput schema / properties / country / enum
      Removed value: -[
      -  "US",
      -  "IN",
      -  "GB",
      -  "CA",
      -  "SG",
      -  "DE",
      -  "CN",
      -  "AU",
      -  "PL",
      -  "MY",
      -  "PH",
      -  "ES",
      -  "MX",
      -  "NL",
      -  "IE",
      -  "AE",
      -  "TW",
      -  "JP",
      -  "PT",
      -  "RO",
      -  "BR",
      -  "EG",
      -  "SA",
      -  "FR",
      -  "IL",
      -  "VN",
      -  "ZA",
      -  "BE",
      -  "IT",
      -  "CH",
      -  "SE",
      -  "TH",
      -  "GR",
      -  "CO",
      -  "HK",
      -  "AR",
      -  "PK",
      -  "HU",
      -  "BG",
      -  "ID",
      -  "NZ",
      -  "NG",
      -  "UA",
      -  "QA",
      -  "RS",
      -  "DK",
      -  "CZ",
      -  "AT",
      -  "CR",
      -  "KR",
      -  "LT",
      -  "FI",
      -  "NO",
      -  "TR",
      -  "LK",
      -  "CL",
      -  "PE",
      -  "LB",
      -  "LU",
      -  "KE",
      -  "CY",
      -  "SK",
      -  "MT",
      -  "JO",
      -  "PR",
      -  "UY",
      -  "EE",
      -  "LV",
      -  "HR",
      -  "PA",
      -  "AM",
      -  "TN",
      -  "DO",
      -  "GE",
      -  "SI",
      -  "GT",
      -  "KZ",
      -  "BO",
      -  "EC",
      -  "SV",
      -  "OM",
      -  "MA",
      -  "NI",
      -  "AL",
      -  "KW",
      -  "BH",
      -  "MD",
      -  "MU",
      -  "GH",
      -  "BD",
      -  "HN",
      -  "PY",
      -  "BA",
      -  "MK",
      -  "TZ",
      -  "GY",
      -  "SR",
      -  "IQ",
      -  "DZ",
      -  "XK",
      -  "NP",
      -  "ZM",
      -  "UG",
      -  "BZ",
      -  "KH",
      -  "IS",
      -  "BY",
      -  "RW",
      -  "ZW",
      -  "UZ",
      -  "KY",
      -  "MV",
      -  "CI",
      -  "LY",
      -  "SY",
      -  "MM",
      -  "MG",
      -  "ET",
      -  "CM",
      -  "BS",
      -  "TO",
      -  "BN",
      -  "PG",
      -  "TT",
      -  "LI",
      -  "JM",
      -  "PS",
      -  "AZ"
      -]
    • addedInput schema / properties / country / maxLength
      Added value: +60
    • changedInput schema / properties / detail / description
      Previous value: -"full adds the count behind each filter's options, and where every matching job is: the jobs in each country (what `country` would total, a job naming two in both) with its top cities, over the whole match."New value: +"full adds counts per filter option and per country; slower."
    • changedInput schema / properties / employment_type / description
      Previous value: -"full-time also keeps jobs whose source states no type; part-time, contract and internship keep only jobs that say so."New value: +"full-time also keeps jobs stating no type; the others keep only jobs that say so."
    • changedInput schema / properties / exclude_company / description
      Previous value: -"Leaves out every job whose company name contains this text, such as the employer of a `similar_to` job."New value: +"Leaves out every company whose name contains this text."
    • changedInput schema / properties / include_non_tech / description
      Previous value: -"Also list the jobs HeadStart's classifier is confident are not tech (a store cashier, a plant's process engineer), which are left out unless this is true, as the site leaves them out unless its 'Include non-tech roles' switch is on. The answer says how many were left out. Send it for a role the user really wants that is not software or tech."New value: +"Also keep jobs confidently not tech (a cashier), for a non-tech role the user wants."
    • changedInput schema / properties / india_place / description
      Previous value: -"An Indian city or region, or 'india' for anywhere in India."New value: +"An Indian city or region, such as 'bengaluru', 'delhi ncr' or 'pune', or 'india' for anywhere in India."
    • removedInput schema / properties / india_place / enum
      Removed value: -[
      -  "india",
      -  "delhi ncr",
      -  "bengaluru",
      -  "hyderabad",
      -  "pune",
      -  "chennai",
      -  "mumbai",
      -  "gurgaon",
      -  "noida",
      -  "kolkata",
      -  "delhi",
      -  "ahmedabad",
      -  "coimbatore",
      -  "vadodara",
      -  "indore",
      -  "chandigarh",
      -  "thane",
      -  "jaipur",
      -  "kochi",
      -  "bhubaneswar",
      -  "thiruvananthapuram",
      -  "surat",
      -  "faridabad",
      -  "nagpur",
      -  "visakhapatnam",
      -  "vijayawada",
      -  "mysuru",
      -  "nashik",
      -  "goa",
      -  "ghaziabad",
      -  "anand",
      -  "jajpur",
      -  "meerut",
      -  "savli",
      -  "guntur",
      -  "jammu",
      -  "madurai",
      -  "bhopal",
      -  "jamshedpur",
      -  "hosur",
      -  "bharuch",
      -  "shahjahanpur",
      -  "lucknow",
      -  "sikkim",
      -  "tiruchirappalli",
      -  "gandhinagar",
      -  "halol",
      -  "palghar",
      -  "aurangabad",
      -  "jalandhar",
      -  "vellore",
      -  "rajkot",
      -  "mangaluru",
      -  "kozhikode",
      -  "jodhpur",
      -  "patna",
      -  "ludhiana",
      -  "raipur",
      -  "anakapalli",
      -  "belagavi",
      -  "puducherry",
      -  "kanpur",
      -  "ranchi",
      -  "dehradun",
      -  "amritsar",
      -  "tirupati",
      -  "udaipur",
      -  "guwahati",
      -  "srinagar",
      -  "baddi"
      -]
    • addedInput schema / properties / india_place / maxLength
      Added value: +40
    • changedInput schema / properties / keyword / description
      Previous value: -"Words the job must contain, each at the start of a word: 'ai' finds AI and AIOps but not Retail, 'java' also finds JavaScript. Put a phrase in double quotes to keep its words together, in order: '\"ai engineer\"'. In descriptions it can match only jobs with a stored description, and the answer says how many have one. Not for visas or relocation: see `work_authorization`."New value: +"Words the job must contain, each starting a word ('ai' finds AIOps, not Retail); double quotes keep a phrase together."
    • changedInput schema / properties / keyword_in / description
      Previous value: -"Where keyword must appear; title by default."New value: +"Where `keyword` must appear; title unless sent."
    • addedInput schema / properties / limit / description
      Added value: +"Jobs per page."
    • changedInput schema / properties / location / description
      Previous value: -"Text the job's location contains, any country. Accents and a city's other spellings read alike: Zurich finds Zürich, Bangalore finds Bengaluru."New value: +"Text the job's location contains, any country; Zurich finds Zürich, Bangalore finds Bengaluru."
    • changedInput schema / properties / max_age_days / description
      Previous value: -"Leaves out postings older than this many days: the posted date, else the day HeadStart first saw the job. 365 unless sent; 0 for any age."New value: +"Leaves out postings older than this many days; 0 for any age."
    • changedInput schema / properties / max_years / description
      Previous value: -"The user's own years of experience ('3+ years' is 3): keeps jobs asking for at most this many, and jobs that state no experience (their rows say 'experience not stated')."New value: +"The user's own years ('3+ years' is 3); jobs stating none are kept."
    • changedInput schema / properties / operators / description
      Previous value: -"Who may post the jobs, as hiring_now labels companies: employer, services (an IT services firm), staffing (an agency posting clients' contracts) or aggregator (a job board re-posting others' jobs). Staffing and aggregator are left out unless named, as on the site's Hiring now tab, or a `company` is named; the answer says how many jobs that left out. Labels come from a curated list: an unlisted company counts as an employer."New value: +"Who may post the jobs; staffing (agencies) and aggregator (job boards) are left out unless named or a `company` is."
    • addedInput schema / properties / page / description
      Added value: +"The page; the last is 20."
    • changedInput schema / properties / per_company / description
      Previous value: -"With `query` or `similar_to` and sort relevance: at most this many rows of one company, besides a listed posting's copy on another of its Boards, before every other company's; its others follow them, and the answer says how many. 3 when not sent, and then not applied with `company`, a sort or no ranking; sent with a sort or no ranking, it is refused. 0 lists the ranking as it is."New value: +"Most rows of one company before others' (3; 0 for none)."
    • changedInput schema / properties / query / description
      Previous value: -"The role only. Omit to list the newest jobs."New value: +"The role only; omit for the newest jobs."
    • changedInput schema / properties / required_years_at_least / description
      Previous value: -"A floor on the job's required experience, not the user's: keeps jobs asking for at least this many years ('roles needing 8+ years' is 8), as stated or else estimated from the title's seniority. Jobs whose experience is unknown are left out."New value: +"Jobs asking at least this many years; not the user's own."
    • changedInput schema / properties / salary_currency / description
      Previous value: -"ISO 4217 code, such as USD, INR, EUR, GBP."New value: +"ISO 4217 code, such as USD, INR, EUR."
    • changedInput schema / properties / salary_max / description
      Previous value: -"Annual; needs salary_currency. Keeps a job whose stated range starts at or below it."New value: +"Annual, in salary_currency: keeps a stated range starting at or below it."
    • changedInput schema / properties / salary_min / description
      Previous value: -"Annual; needs salary_currency (30 lakh = 3000000 INR). Keeps a job whose stated range reaches it; other currencies are converted at fixed rates."New value: +"Annual, in salary_currency (30 lakh = 3000000 INR): keeps a stated range reaching it."
    • changedInput schema / properties / similar_to / description
      Previous value: -"A job id from an earlier answer: rank by that job instead of `query`, leaving it out. Not with `query`."New value: +"A job id: rank by that job, leaving it out. Not with `query`."
    • changedInput schema / properties / sort / description
      Previous value: -"salary orders by the low end of each stated range, in salary_currency or else USD. With `query`, any sort orders only the matches scoring at least 0.67 among its 2,000 closest."New value: +"With `query`, orders only matches scoring at least 0.67 among its 2,000 closest; salary by a range's low end."
    • changedInput schema / properties / work_authorization / description
      Previous value: -"Use this, not `keyword`, for visa sponsorship or relocation: a description that mentions sponsorship usually refuses it. offers_sponsorship: the description offers this job visa sponsorship and nothing in it refuses or hedges it; an offer limited to another country than the job's (or a move to another country's city), to levels above its title, or to full-time roles on an internship, does not count. may_offer_sponsorship: those jobs, plus the ones whose offer is hedged ('not guaranteed', 'not for every role', 'case by case', 'may be available', 'if possible', 'subject to approval', 'only if already based in'), is a visa transfer only, or names a country or level the job's place or title does not show; each row says which kind it is, so say it. refuses_sponsorship: it refuses sponsorship ('now or in the future', 'Visa Sponsorship: No'), requires citizenship of this job or work authorisation already held, or offers it only to another country or level; offers_relocation: it offers relocation help. Text-derived, not a field the employer set: HeadStart's rules (headstart.jobs.work_authorization) read each sponsorship, citizenship and relocation sentence with its negation, and read an offer against the job's place, title and type. Of 50 offers_sponsorship jobs drawn from the live index after the rules froze (ADR-0368; 25 in the US, 25 elsewhere, at most 5 a company), read strictly, 47 (0.94) offered this job sponsorship firmly and all 50 at least may; the 0.98 to 0.99 precision on 1,062 hand-read descriptions (ADR-0333 to ADR-0368) is on the rules' own tuning set. Before telling a user a job sponsors visas, read its sponsorship sentences with get_job. A posting without a description never matches."New value: +"What the description says of visas or relocation: an unhedged offer of sponsorship; also hedged or transfer-only offers (rows say which); a refusal or a citizenship requirement; relocation help. Read from the text by HeadStart's rules, so read the job with get_job before telling a user it sponsors."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "next_page": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "page": {
      +      "type": "integer"
      +    },
      +    "rows": {
      +      "items": {
      +        "properties": {
      +          "company": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "first_seen": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "key": {
      +            "type": "string"
      +          },
      +          "location": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "min_years": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "posted": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "remote": {
      +            "type": "boolean"
      +          },
      +          "salary_currency": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "salary_max": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "salary_min": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "score": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "source": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "title": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "url": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "total": {
      +      "type": "integer"
      +    },
      +    "truncated": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "page",
      +    "next_page",
      +    "rows"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • removedInput schema / properties / per_company / default
      Removed value: -3
    • changedInput schema / properties / per_company / description
      Previous value: -"With `query` or `similar_to` and sort relevance: at most this many rows of one company, besides a listed posting's copy on another of its Boards, before every other company's; its others follow them, and the answer says how many. 0 lists the ranking as it is. Not applied with `company`."New value: +"With `query` or `similar_to` and sort relevance: at most this many rows of one company, besides a listed posting's copy on another of its Boards, before every other company's; its others follow them, and the answer says how many. 3 when not sent, and then not applied with `company`, a sort or no ranking; sent with a sort or no ranking, it is refused. 0 lists the ranking as it is."
  4. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only and open-world, so the description's job is the query semantics it does supply: `query` ranks but never narrows the total, `company` text matches any name containing it, and non-tech jobs are dropped unless `include_non_tech`. Useful behavioral context beyond the annotations, though return shape and paging limits are left to the schema/output schema.

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?

Front-loaded with purpose, then tight sentence-per-pitfall structure with no filler. The fragment 'Text `company` matches any name containing it: say so' is grammatically dangling and slightly ambiguous about who should say what, which keeps it off a 5.

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

Completeness5/5

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

For a 30-parameter, all-optional search with an output schema and safety annotations, the description covers exactly what the structured fields cannot: ranking-vs-filtering semantics, the query/keyword split, the visa-parameter rule, and the non-tech default. Nothing needed to call it correctly is missing.

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 100%, so 3 is the baseline; the description earns a bump by disambiguating the two easiest-to-confuse parameters — `query` (role text, ranking only) versus `keyword` (hard word requirement) — and by steering visa/relocation intent to `work_authorization`. It adds meaning the schema does not restate, though most of the 30 parameters are left to their schema descriptions.

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?

A specific verb and resource ('Search HeadStart's tech jobs') plus a stated scope limit (non-tech excluded by default). It does not name any sibling (get_job, find_company, hiring_now) to bound itself against, so an agent must infer the boundary itself. Clear but not sibling-differentiated.

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?

Gives real routing rules among parameters: years/pay/place/dates belong to their own fields, not `query`; `query` ranks but never narrows, while `keyword` requires a word; visas or relocation go to `work_authorization`, never `keyword`. No guidance on when to use this tool rather than get_job or find_company, which is the remaining gap.

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.

Resources