Skip to main content
Glama

Show your job matches (Stellen)

get_job_matches
Read-onlyIdempotent

Use this when the user asks for jobs (Stellen) that fit them or wants to see their job matches again. Returns the five jobs currently matched to their resume. Nothing is recalculated: the selection stays until the user replaces it with refresh_job_matches, even if they change their resume; erneuerbarAb says from when that is possible. A job with zustand verschwunden is no longer advertised: tell the user so and do not offer to apply; from the next day on it is left out. Scope: cv:lesen.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
hinweisYes
stellenYes
erneuerbarAbYes
vollstaendigYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • removedOutput schema / properties / anlass
      Removed value: -{
      -  "enum": [
      -    "cv",
      -    "erneuert"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / cvId
      Removed value: -{
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -  "type": "string"
      -}
    • removedOutput schema / properties / erzeugtAm
      Removed value: -{
      -  "format": "date-time",
      -  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -  "type": "string"
      -}
    • removedOutput schema / properties / grenze
      Removed value: -{
      -  "maximum": 9007199254740991,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedOutput schema / properties / id
      Removed value: -{
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -  "type": "string"
      -}
    • removedOutput schema / properties / protokollId
      Removed value: -{
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -  "type": "string"
      -}
    • removedOutput schema / properties / stellen / items / properties / bestandteile
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "abschluss": {
      -      "anyOf": [
      -        {
      -          "enum": [
      -            "erfuellt",
      -            "fehlt"
      -          ],
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null
      -    },
      -    "aehnlichkeit": {
      -      "type": "number"
      -    },
      -    "familiennaehe": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "ueberlappung": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    }
      -  },
      -  "required": [
      -    "aehnlichkeit",
      -    "ueberlappung",
      -    "familiennaehe",
      -    "abschluss"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / stellen / items / properties / score
      Removed value: -{
      -  "type": "number"
      -}
    • removedOutput schema / properties / stellen / items / properties / urteil
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "enum": [
      -        "gemerkt",
      -        "verworfen",
      -        "entfernt"
      -      ],
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
    • changedOutput schema / properties / stellen / items / required
      Previous value: -[
      -  "stelleId",
      -  "titel",
      -  "arbeitgeber",
      -  "url",
      -  "standorte",
      -  "arbeitsort",
      -  "bewerbungsweg",
      -  "formularUrl",
      -  "begruendung",
      -  "umfang",
      -  "vertragsart",
      -  "beschaeftigungsstatus",
      -  "gehalt",
      -  "score",
      -  "bestandteile",
      -  "urteil",
      -  "zustand"
      -]New value: +[
      +  "stelleId",
      +  "titel",
      +  "arbeitgeber",
      +  "url",
      +  "standorte",
      +  "arbeitsort",
      +  "bewerbungsweg",
      +  "formularUrl",
      +  "begruendung",
      +  "umfang",
      +  "vertragsart",
      +  "beschaeftigungsstatus",
      +  "gehalt",
      +  "zustand"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "cvId",
      -  "anlass",
      -  "stellen",
      -  "grenze",
      -  "vollstaendig",
      -  "hinweis",
      -  "protokollId",
      -  "erzeugtAm",
      -  "erneuerbarAb"
      -]New value: +[
      +  "vollstaendig",
      +  "hinweis",
      +  "erneuerbarAb",
      +  "stellen"
      +]
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses that nothing is recalculated, that the selection persists even after a resume change unless refresh_job_matches is called, that `erneuerbarAb` marks when replacement becomes possible, and that expired jobs drop out the next day. It also names the authorization scope cv:lesen, which an agent needs to anticipate permission failures.

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 trigger condition is front-loaded and every sentence carries operational meaning, including the expiry rule. The second half is packed with German field names in a single dense clause, which slightly slows parsing but does not waste words.

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 no-parameter, read-only, idempotent tool with an output schema, the description covers everything an agent needs: when to call it, what it returns, that state is frozen until a refresh, and how to handle an unavailable job. Nothing material is left to inference.

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?

There are zero parameters, so the schema offers nothing to explain and the baseline of 4 applies. The description's field references (`erneuerbarAb`, `zustand`) describe response fields rather than inputs, and an output schema exists, so no parameter-level clarification is required.

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?

States a specific verb (show/return) plus resource (the five jobs matched to the resume) and even the count returned, which lets an agent distinguish it from sibling list tools like list_job_applications at a glance. It also names the sibling it is not (refresh_job_matches).

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

Usage Guidelines5/5

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

Gives an explicit trigger ('when the user asks for jobs (Stellen) that fit them or wants to see their job matches again') and routes recalculation to refresh_job_matches. It also supplies the downstream rule for a `zustand` of `verschwunden`: inform the user, do not offer to apply.

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