Skip to main content
Glama

List job matches

get_radar_matches
Read-only

List vacancies the user's job radar has found (automatic job search based on their resume), best match first. Each item carries title, company, location, match_grade (strong/possible/weak — the radar's rough fit; match_percentage is the same guess as a number and does not predict an analysis), the keywords behind it, the published salary when the board gave one, the applicant-tracking system behind the link, the level and employment type its title states (null when it states none), an opening snippet of the posting text and on_screen (whether the user has seen it in the app yet), analysis_id when this vacancy was already analyzed, with analysis_match_percentage once that analysis finished (get_vacancy_detail reads it at no cost; analyze_radar_match analyzes one that has none). The stored snippet is all the posting text we hold. Optional status: 'new' (not yet reviewed) or 'saved' (liked) pick one half of the active list; 'deferred' reads the put-off-for-later pile and 'archived' the Skipped pile — everything the user skipped or put away, latest first, and where delete_radar_match takes its ids from. Omit for new plus saved. Narrow with min_match, is_remote, source, posted_after (ISO date), has_analysis, seniority and employment_type — the last two come from the title, so a posting whose title says nothing is dropped by them: a small result means most titles were silent, not that such jobs are rare. Order with sort='fresh' (newest posting first) instead of the default best-match. total says how many matched the filters; offset pages past the 30-item cap. Empty list is a normal result, and the usual one before the first start_radar_scan.

Input Schema

NameRequiredDescriptionDefault
inputNo

Output Schema

NameRequiredDescriptionDefault
totalYesHow many matches passed the filters in total — not how many this page returned. Without filters it equals get_radar_status.active (the active list is read up to its first 300).
matchesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / $defs / RadarMatchItem / properties / on_screen / description
      Previous value: -"True when the user has seen this match in the app: dealt into their radar deck, saved, put off or skipped, or analyzed (it is then in their vacancies). False while the user has not opened the radar since the scan found it; the next visit deals it on every plan."New value: +"True when the user has seen this match in the app: dealt into their radar deck, looked at in the radar feed, saved, put off or skipped, or analyzed (it is then in their vacancies). False while the user has not opened the radar since the scan found it; the next visit deals it on every plan."
    • changedOutput schema / $defs / RadarMatchItem / properties / status / enum
      Previous value: -[
      -  "new",
      -  "saved",
      -  "deferred",
      -  "archived",
      -  "skipped"
      -]New value: +[
      +  "new",
      +  "saved",
      +  "deferred",
      +  "archived",
      +  "skipped",
      +  "seen"
      +]
  2. Changed3 schema fields changed
    • removedOutput schema / $defs / RadarDeckItem
      Removed value: -{
      -  "properties": {
      -    "daily_left": {
      -      "description": "How many more the deck deals today, the next time the user opens the radar (0: today's are dealt).",
      -      "title": "Daily Left",
      -      "type": "integer"
      -    },
      -    "daily_limit": {
      -      "description": "How many new matches the free plan deals into the deck a UTC day.",
      -      "title": "Daily Limit",
      -      "type": "integer"
      -    },
      -    "next_deal_at": {
      -      "description": "When the next day's deal starts (UTC midnight), ISO 8601.",
      -      "title": "Next Deal At",
      -      "type": "string"
      -    },
      -    "pool_remaining": {
      -      "description": "Matches waiting in the pool behind the deck, not seen by the user yet.",
      -      "title": "Pool Remaining",
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "daily_limit",
      -    "daily_left",
      -    "pool_remaining",
      -    "next_deal_at"
      -  ],
      -  "title": "RadarDeckItem",
      -  "type": "object"
      -}
    • changedOutput schema / $defs / RadarMatchItem / properties / on_screen / description
      Previous value: -"True when the user can see this match in the app: dealt into their radar deck, saved, put off or skipped, or analyzed (it is then in their vacancies). False while it waits in the pool behind the deck — the user has not seen it and will not find it on the radar screen yet."New value: +"True when the user has seen this match in the app: dealt into their radar deck, saved, put off or skipped, or analyzed (it is then in their vacancies). False while the user has not opened the radar since the scan found it; the next visit deals it on every plan."
    • removedOutput schema / properties / deck
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "$ref": "#/$defs/RadarDeckItem"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "The free plan's daily deck: the radar screen deals a few new matches a day out of the pool. Null on a paid plan, whose deck is not limited by day, and on the deferred and archived piles."
      -}
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly annotations, it discloses non-obvious behavior: the 30-item cap with offset paging, the total count, that match_percentage is a rough guess and not predictive of analysis, that the stored snippet is the full posting text held, and that title-derived filters (seniority, employment_type, posted_after) silently drop postings with no title/date signal.

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?

Purpose and ordering come first, and virtually every clause carries information (field meanings, filter pitfalls, paging). It is dense and reads as two long run-on paragraphs, which makes it harder to scan than a bulleted field list would be, but there is no filler.

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?

Covers what the list contains, the shape of each item, all filter semantics and their biases, paging, ordering, and the expected empty result. Even though an output schema exists, the extra notes about analysis_id/analysis_match_percentage and null-valued levels make the tool callable without further lookup.

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?

The description explains the practical meaning of status, the filter set, sort='fresh' vs the best-match default, and total/offset paging, adding semantic caveats (e.g. small results mean silent titles, not rare jobs) beyond the schema's own field descriptions. It does not mention the limit parameter's 1..30 range, which stays with the schema.

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?

Opens with a specific verb+resource ('List vacancies the user's job radar has found'), defines the radar as an automatic resume-based search, and states default ordering. It also names adjacent tools (get_vacancy_detail, analyze_radar_match, delete_radar_match) so an agent can separate this list tool from detail/analysis/mutation siblings.

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 explicit conditions for each status value, says 'Omit for new plus saved', explains that the archived pile is where delete_radar_match takes its ids, and warns that an empty list is normal before start_radar_scan. What is missing is an explicit contrast with search_vacancies/get_recent_vacancies for non-radar browsing.

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.