Skip to main content
Glama

Get Job Matches

getmattered_get_matches
Read-onlyIdempotent

Searches the user's job matches: the open roles that fit their resume and preferences, best fit first and mixed across companies, so scores are not in strict order. Also reads full postings by job_match_ids or job_url. Scores run 0 to 100. An empty list means the search is still running or found nothing, or askUserFor names a missing resume or target roles. On a new account, nextStep names the first step. Changes nothing and spends nothing.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "getmattered_get_matches"
  }
}

Input Schema

NameRequiredDescriptionDefault
pageNoPage number, starting at 1 (e.g. 2 for the next page)
limitNoMatches per page, 1 to 50 (default 10)
queryNoNarrows the user's existing matches to titles containing this text (e.g. "Product Designer"). It does not search for new jobs; getmattered_update_job_preferences changes the roles GetMattered searches for.
job_urlNoLink to any job posting, read without saving it, one link per call. The answer also says whether GetMattered can apply there. getmattered_apply reads a posting itself, and every read counts toward the same limit.
locationNoNarrows the user's existing matches to this place (e.g. "San Francisco, CA", "New York", "Remote"). It does not search for new jobs; getmattered_update_job_preferences changes the locations GetMattered searches.
saved_onlyNoIf true, the list holds only the matches the user saved
remote_onlyNoIf true, the list holds only remote-friendly positions
job_match_idsNoMatches to read in full: up to 10 job_match_ids (e.g. [48213]). Returns the full posting, skills, benefits and work arrangement.
after_job_match_idNoLimits the list to matches newer than this job_match_id, such as the newestJobMatchId of an earlier answer.

Output Schema

NameRequiredDescriptionDefault
modeYes
pageYes
matchesYes
postingYesA posting read from job_url. Nothing was saved. A null title means the link could not be read as a posting: applySupport and hiringSystem still hold, and nextStep says what to do.
nextStepYesThe open next step, when there is one: the empty list's missing step, applications waiting for review, the offer to apply to the best matches, or a short list.
setupStepNoPresent while account setup is open: the first setup step.
askUserForYesFilled when the list is empty because the account still needs something from the user: resume or target_roles.
totalPagesYes
notFoundIdsYesRequested job_match_ids with no match on this account.
offeredApplyYesTrue when this answer offers to apply to the jobs in offeredJobMatchIds on one yes from the user.
totalMatchesYes
newestJobMatchIdYesThe highest job_match_id on this page. As after_job_match_id on a later call, it limits the list to newer matches.
offeredJobMatchIdsYesThe jobs the offer names, best fit first, ready as getmattered_apply job_match_ids. Empty when nothing is offered.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedOutput schema / properties / nextStep / description
      Previous value: -"The open next step, when there is one: the empty list's missing step, applications waiting for review, or a short list."New value: +"The open next step, when there is one: the empty list's missing step, applications waiting for review, the offer to apply to the best matches, or a short list."
    • addedOutput schema / properties / offeredApply
      Added value: +{
      +  "description": "True when this answer offers to apply to the jobs in offeredJobMatchIds on one yes from the user.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / offeredJobMatchIds
      Added value: +{
      +  "description": "The jobs the offer names, best fit first, ready as getmattered_apply job_match_ids. Empty when nothing is offered.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "mode",
      -  "matches",
      -  "page",
      -  "totalPages",
      -  "totalMatches",
      -  "newestJobMatchId",
      -  "notFoundIds",
      -  "posting",
      -  "askUserFor",
      -  "nextStep"
      -]New value: +[
      +  "mode",
      +  "matches",
      +  "page",
      +  "totalPages",
      +  "totalMatches",
      +  "newestJobMatchId",
      +  "notFoundIds",
      +  "posting",
      +  "askUserFor",
      +  "nextStep",
      +  "offeredApply",
      +  "offeredJobMatchIds"
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / location / description
      Previous value: -"Location to search in (e.g. \"San Francisco, CA\", \"New York\", \"Remote\")"New value: +"Narrows the user's existing matches to this place (e.g. \"San Francisco, CA\", \"New York\", \"Remote\"). It does not search for new jobs; getmattered_update_job_preferences changes the locations GetMattered searches."
    • changedInput schema / properties / query / description
      Previous value: -"Narrows the list to titles containing this text (e.g. \"Product Designer\")."New value: +"Narrows the user's existing matches to titles containing this text (e.g. \"Product Designer\"). It does not search for new jobs; getmattered_update_job_preferences changes the roles GetMattered searches for."
  3. Changed9 schema fields changed
    • changedInput schema / properties / location / description
      Previous value: -"Preferred location (e.g. \"San Francisco, CA\", \"New York\", \"Remote\")"New value: +"Location to search in (e.g. \"San Francisco, CA\", \"New York\", \"Remote\")"
    • changedOutput schema / properties / askUserFor / description
      Previous value: -"Set when the list is empty because the account still needs something from the user: resume or target_roles."New value: +"Filled when the list is empty because the account still needs something from the user: resume or target_roles."
    • changedOutput schema / properties / matches / items / properties / jobMatchId / description
      Previous value: -"Pass to getmattered_apply (job_match_id), or to getmattered_save_matches or getmattered_skip_matches (job_match_ids)."New value: +"The id getmattered_apply takes as job_match_id, and getmattered_save_matches and getmattered_skip_matches take in job_match_ids."
    • changedOutput schema / properties / matches / items / properties / location / description
      Previous value: -"Where the employer's posting placed the job when GetMattered read it, in the posting's own words. Not checked against the live page: a remote job can also name offices. Read workArrangement and otherCities with it."New value: +"Where the employer's posting placed the job when GetMattered read it, in the posting's own words. Not checked against the live page: a remote job can also name offices. workArrangement and otherCities complete it."
    • changedOutput schema / properties / newestJobMatchId / description
      Previous value: -"The highest job_match_id on this page. Store it and pass it back as after_job_match_id to see only newer matches."New value: +"The highest job_match_id on this page. As after_job_match_id on a later call, it limits the list to newer matches."
    • changedOutput schema / properties / nextStep / description
      Previous value: -"The one thing to do next, when there is one: the empty list's missing step, applications waiting for review, or a short list. Follow it before calling again."New value: +"The open next step, when there is one: the empty list's missing step, applications waiting for review, or a short list."
    • changedOutput schema / properties / notFoundIds / description
      Previous value: -"Requested job_match_ids that do not exist on this account."New value: +"Requested job_match_ids with no match on this account."
    • changedOutput schema / properties / posting / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "applySupport": {
      -        "description": "supported: GetMattered applies on this hiring system. unsupported: it does not, so do not call getmattered_apply. job_board or unknown: only getmattered_apply can tell, and a refusal spends nothing.",
      -        "enum": [
      -          "supported",
      -          "unsupported",
      -          "job_board",
      -          "unknown"
      -        ],
      -        "type": "string"
      -      },
      -      "company": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "description": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "hiringSystem": {
      -        "description": "The hiring system name when applySupport is supported.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "location": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "salary": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "title": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "url": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "url",
      -      "title",
      -      "company",
      -      "location",
      -      "salary",
      -      "description",
      -      "applySupport",
      -      "hiringSystem"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "applySupport": {
      +        "description": "supported: GetMattered applies on this hiring system. unsupported: GetMattered does not apply there, and getmattered_apply refuses the link. job_board or unknown: getmattered_apply finds out on the call, and a refusal spends nothing.",
      +        "enum": [
      +          "supported",
      +          "unsupported",
      +          "job_board",
      +          "unknown"
      +        ],
      +        "type": "string"
      +      },
      +      "company": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "description": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "hiringSystem": {
      +        "description": "The hiring system name when applySupport is supported.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "location": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "salary": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "title": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "url",
      +      "title",
      +      "company",
      +      "location",
      +      "salary",
      +      "description",
      +      "applySupport",
      +      "hiringSystem"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / setupStep / description
      Previous value: -"Set while account setup is open: the step to take first."New value: +"Present while account setup is open: the first setup step."
  4. Changed6 schema fields changed
    • changedInput schema / properties / after_job_match_id / description
      Previous value: -"Return only matches newer than this job_match_id. Store newestJobMatchId from each answer and pass it back."New value: +"Limits the list to matches newer than this job_match_id, such as the newestJobMatchId of an earlier answer."
    • changedInput schema / properties / job_match_ids / description
      Previous value: -"Read these matches in full: up to 10 job_match_ids (e.g. [48213]). Returns the full posting, skills, benefits and work arrangement."New value: +"Matches to read in full: up to 10 job_match_ids (e.g. [48213]). Returns the full posting, skills, benefits and work arrangement."
    • changedInput schema / properties / job_url / description
      Previous value: -"Read any job posting by URL without saving it (e.g. \"https://jobs.lever.co/acme/123\"). Read one link at a time. It also says whether GetMattered can apply there. Do not read a posting before applying to it: getmattered_apply reads it itself, and every read counts toward the same limit."New value: +"Link to any job posting, read without saving it, one link per call. The answer also says whether GetMattered can apply there. getmattered_apply reads a posting itself, and every read counts toward the same limit."
    • changedInput schema / properties / query / description
      Previous value: -"Narrow the list to titles containing this text (e.g. \"Product Designer\")."New value: +"Narrows the list to titles containing this text (e.g. \"Product Designer\")."
    • changedInput schema / properties / remote_only / description
      Previous value: -"If true, only show remote-friendly positions"New value: +"If true, the list holds only remote-friendly positions"
    • changedInput schema / properties / saved_only / description
      Previous value: -"If true, only return the matches the user saved"New value: +"If true, the list holds only the matches the user saved"
  5. Changed1 schema field changed
    • changedOutput schema / properties / posting / description
      Previous value: -"A posting read from job_url. Nothing was saved."New value: +"A posting read from job_url. Nothing was saved. A null title means the link could not be read as a posting: applySupport and hiringSystem still hold, and nextStep says what to do."
  6. Changed3 schema fields changed
    • changedOutput schema / properties / askUserFor / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "resume",
      -      "target_roles",
      -      "apply_fields"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "resume",
      +      "target_roles"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / nextStep / description
      Previous value: -"Set when the list is empty: the one thing to do next. Follow it before calling again."New value: +"The one thing to do next, when there is one: the empty list's missing step, applications waiting for review, or a short list. Follow it before calling again."
    • addedOutput schema / properties / setupStep
      Added value: +{
      +  "description": "Set while account setup is open: the step to take first.",
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • changedInput schema / properties / job_url / description
      Previous value: -"Read any job posting by URL without saving it (e.g. \"https://jobs.lever.co/acme/123\"). Read one link at a time. Do not read a posting before applying to it: getmattered_apply reads it itself, and every read counts toward the same limit."New value: +"Read any job posting by URL without saving it (e.g. \"https://jobs.lever.co/acme/123\"). Read one link at a time. It also says whether GetMattered can apply there. Do not read a posting before applying to it: getmattered_apply reads it itself, and every read counts toward the same limit."
    • changedOutput schema / properties / posting / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "company": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "description": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "location": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "salary": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "title": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "url": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "url",
      -      "title",
      -      "company",
      -      "location",
      -      "salary",
      -      "description"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "applySupport": {
      +        "description": "supported: GetMattered applies on this hiring system. unsupported: it does not, so do not call getmattered_apply. job_board or unknown: only getmattered_apply can tell, and a refusal spends nothing.",
      +        "enum": [
      +          "supported",
      +          "unsupported",
      +          "job_board",
      +          "unknown"
      +        ],
      +        "type": "string"
      +      },
      +      "company": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "description": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "hiringSystem": {
      +        "description": "The hiring system name when applySupport is supported.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "location": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "salary": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "title": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "url",
      +      "title",
      +      "company",
      +      "location",
      +      "salary",
      +      "description",
      +      "applySupport",
      +      "hiringSystem"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  8. Changed9 schema fields changed
    • changedInput schema / properties / job_url / description
      Previous value: -"Read any job posting by URL without saving it (e.g. \"https://jobs.lever.co/acme/123\")."New value: +"Read any job posting by URL without saving it (e.g. \"https://jobs.lever.co/acme/123\"). Read one link at a time. Do not read a posting before applying to it: getmattered_apply reads it itself, and every read counts toward the same limit."
    • addedOutput schema / properties / askUserFor
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "resume",
      +        "target_roles",
      +        "apply_fields"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Set when the list is empty because the account still needs something from the user: resume or target_roles."
      +}
    • addedOutput schema / properties / matches / items / properties / location / description
      Added value: +"Where the employer's posting placed the job when GetMattered read it, in the posting's own words. Not checked against the live page: a remote job can also name offices. Read workArrangement and otherCities with it."
    • addedOutput schema / properties / matches / items / properties / matchScore / description
      Added value: +"GetMattered's own fit score, 0 to 100, against the user's saved preferences and resume. Not the employer's rating, and not a chance of being hired."
    • addedOutput schema / properties / matches / items / properties / otherCities
      Added value: +{
      +  "description": "Other cities the same job is posted in. Empty when GetMattered holds it in one place only.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / matches / items / properties / workArrangement / description
      Added value: +"onsite, hybrid, remote_local, remote_country, remote_region, remote_global or unknown, as GetMattered classified the posting."
    • changedOutput schema / properties / matches / items / required
      Previous value: -[
      -  "jobMatchId",
      -  "title",
      -  "company",
      -  "location",
      -  "matchScore",
      -  "postedAt",
      -  "salary",
      -  "applyUrl",
      -  "saved",
      -  "applicationStatus",
      -  "descriptionExcerpt",
      -  "description",
      -  "extractedSkills",
      -  "benefits",
      -  "workArrangement"
      -]New value: +[
      +  "jobMatchId",
      +  "title",
      +  "company",
      +  "location",
      +  "matchScore",
      +  "postedAt",
      +  "salary",
      +  "applyUrl",
      +  "saved",
      +  "applicationStatus",
      +  "descriptionExcerpt",
      +  "description",
      +  "extractedSkills",
      +  "benefits",
      +  "workArrangement",
      +  "otherCities"
      +]
    • addedOutput schema / properties / nextStep
      Added value: +{
      +  "description": "Set when the list is empty: the one thing to do next. Follow it before calling again.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "mode",
      -  "matches",
      -  "page",
      -  "totalPages",
      -  "totalMatches",
      -  "newestJobMatchId",
      -  "notFoundIds",
      -  "posting"
      -]New value: +[
      +  "mode",
      +  "matches",
      +  "page",
      +  "totalPages",
      +  "totalMatches",
      +  "newestJobMatchId",
      +  "notFoundIds",
      +  "posting",
      +  "askUserFor",
      +  "nextStep"
      +]
  9. Changed1 schema field changed
    • changedOutput schema / properties / matches / items / properties / jobMatchId / description
      Previous value: -"Pass to getmattered_apply (job_match_id) or getmattered_triage_matches."New value: +"Pass to getmattered_apply (job_match_id), or to getmattered_save_matches or getmattered_skip_matches (job_match_ids)."
  10. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description still adds real context beyond them: results are mixed across companies so scores are not in strict order, scores run 0–100, an empty list means still-running or nothing-found or a missing resume/target roles, and it 'spends nothing' (quota behavior not in annotations).

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?

Short and mostly front-loaded — the core search behavior leads, followed by the alternate read mode, then edge-case semantics. The terse fragments ('Scores run 0 to 100.', 'Changes nothing and spends nothing.') are efficient but read as a list of notes rather than a structured whole.

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?

An output schema exists, so return values needn't be spelled out, yet the description still covers the important agent-facing cases: empty results and first-step naming on a new account. For a 9-parameter tool spanning two modes it is nearly complete, with only minor gaps such as how paging interacts with the id-based read mode.

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 the baseline is 3, but the description adds meaning the schema does not: it explains that the two paging/filter params operate on an already-mixed ordering (so page results are not score-sorted), and it clarifies that job_match_ids/job_url are an alternate read mode rather than list filters.

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?

Names a specific verb and resource ('Searches the user's job matches: the open roles that fit their resume and preferences') and covers the second mode plainly ('Also reads full postings by job_match_ids or job_url'). An agent can tell this apart from a new-job search because the description frames results as the user's existing matches.

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 clear operating context: match-list mode vs. full-posting mode via job_match_ids or job_url, and what an empty list implies. It stops short of naming a sibling alternative (e.g. search_jobs for new roles) or stating exclusions, so the agent must infer routing rather than being told.

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.