Skip to main content
Glama

freehire

Read one job posting

get_job
Read-only

Read one posting in full by the slug a search result carries: the whole description, the stated requirements, which applicant tracking system handles applications, and whether the posting still looks live — when it was last seen open, a reality class, and any observed signs that it is not being filled.

Input Schema

NameRequiredDescriptionDefault
slugYesthe posting's identifier, as carried by a search result's slug

Output Schema

NameRequiredDescriptionDefault
urlYesthe posting's page on freehire
slugYesthe posting's identifier
titleYes
skillsNo
sourceYesthe job board this posting was collected from
companyYes
realityNofresh, stale or likely-evergreen: whether the posting looks like a live opening, judged from its age and repost history
summaryNoa short preview, not the full description
categoryNo
locationNo
apply_viaNothe applicant tracking system handling applications
countriesNoISO 3166-1 alpha-2 codes the role is open in
posted_atNoRFC3339 UTC
seniorityNo
work_modeNoremote, hybrid or onsite
salary_maxNo
salary_minNo
descriptionYesthe posting's full text
ghost_levelNopossible or likely: observed signs that the posting is not being actively filled; absent when there is too little evidence
company_slugNothe employer's identifier
last_seen_atNoRFC3339 UTC; when a re-crawl last confirmed the posting live on its source
requirementsNo
english_levelNo
first_seen_atNoRFC3339 UTC; when freehire first saw this posting — a posted_at far newer than this means the date was refreshed
salary_periodNoyear, month, day or hour
apply_requiresNowhat the employer's application form requires
fake_freshnessNotrue when the posted date is recent but freehire has seen the posting for 90 days or more; present whenever reality is
ghost_criteriaNothe signs behind ghost_level: evergreen_posting, ats_absent (gone from the employer's own board), silent_applications, user_reports
employment_typeNo
salary_currencyNoISO 4217 code
official_job_urlNothe employer's own posting, when known
visa_sponsorshipNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / properties / company_slug / description
      Previous value: -"the employer's identifier, to pass to get_company"New value: +"the employer's identifier"
    • changedOutput schema / properties / slug / description
      Previous value: -"the posting's identifier, to pass to get_job"New value: +"the posting's identifier"
    • changedOutput schema / properties / summary / description
      Previous value: -"a short preview; call get_job for the full description"New value: +"a short preview, not the full description"
  2. Changed6 schema fields changed
    • addedOutput schema / properties / fake_freshness
      Added value: +{
      +  "description": "true when the posted date is recent but freehire has seen the posting for 90 days or more; present whenever reality is",
      +  "type": [
      +    "null",
      +    "boolean"
      +  ]
      +}
    • addedOutput schema / properties / first_seen_at
      Added value: +{
      +  "description": "RFC3339 UTC; when freehire first saw this posting — a posted_at far newer than this means the date was refreshed",
      +  "type": "string"
      +}
    • addedOutput schema / properties / ghost_criteria
      Added value: +{
      +  "description": "the signs behind ghost_level: evergreen_posting, ats_absent (gone from the employer's own board), silent_applications, user_reports",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "null",
      +    "array"
      +  ]
      +}
    • addedOutput schema / properties / ghost_level
      Added value: +{
      +  "description": "possible or likely: observed signs that the posting is not being actively filled; absent when there is too little evidence",
      +  "type": "string"
      +}
    • addedOutput schema / properties / last_seen_at
      Added value: +{
      +  "description": "RFC3339 UTC; when a re-crawl last confirmed the posting live on its source",
      +  "type": "string"
      +}
    • addedOutput schema / properties / reality
      Added value: +{
      +  "description": "fresh, stale or likely-evergreen: whether the posting looks like a live opening, judged from its age and repost history",
      +  "type": "string"
      +}
  3. First observed

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, idempotentHint=false, so the safety profile is covered. The description's extra content is about returned fields (liveness, reality class, ATS) rather than behavior, and an output schema exists to document those, so it adds only modest value beyond the structured data.

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 the verb and the key, single sentence with no filler. It is somewhat long because it enumerates return fields that the output schema already covers, which is mild redundancy rather than bloat.

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 one-parameter read tool with a full schema, full annotation coverage and an output schema, the essentials are present: what it returns and where the slug comes from. The only real gap is routing guidance against siblings like check_jobs_open or fetch.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is fully documented in the schema itself ('the posting's identifier, as carried by a search result's slug'). The description's 'by the slug a search result carries' merely restates that, adding no format or provenance detail beyond it.

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

Purpose5/5

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

Specific verb ('Read') plus a precisely scoped resource ('one posting in full') and an explicit retrieval key ('the slug a search result carries'), which cleanly separates it from the plural search/list siblings (search_jobs, check_jobs_open). The enumeration of what comes back makes the tool's identity unambiguous.

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 tells the agent the prerequisite for calling it — the slug must come from a search result — which implies the search_jobs → get_job workflow. It does not name an alternative or state when not to use it (e.g. versus check_jobs_open for bulk liveness checks), so it stops short of full when/when-not guidance.

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.