Skip to main content
Glama

Outreach Desk

Set Candidate Criteria

set_criteria
Destructive

Use this to save the user's job search criteria; each call overwrites all saved criteria, and the earlier ones are lost. Best for: the first setup, which starts the user's private desk, or a change of role, skills, salary floor or remote policy. Input tips: send target_role, skills, salary_floor in whole US dollars and remote_policy, plus optional dealbreakers; to change one field, send every field again with the change. Ask the user for any missing required field before calling. Returns status saved, the cleaned criteria and the retention note. A client that sends no user id gets status not_saved: nothing is stored, and the returned criteria go to score_message as its criteria argument. Past evaluations and the scoreboard are kept. Not for scoring a pitch; use score_message.

Input Schema

NameRequiredDescriptionDefault
skillsYesCore skills, 1 to 30, such as ["TypeScript", "Go"].
target_roleYesTarget job title, such as "Staff Distributed Systems Engineer".
dealbreakersNoOptional, up to 20: constraints that rule out a pitch, such as ["Onsite required", "Legacy Java"]. Omit it or send [] for none.
salary_floorYesMinimum yearly base salary in whole US dollars, 0 to 10000000, such as 210000. Use 0 for no floor.
remote_policyYesWanted work arrangement, such as "100% remote", "hybrid 1 day" or "any".

Output Schema

NameRequiredDescriptionDefault
as_ofYesDay of the call, as YYYY-MM-DD in UTC.
skillsYesCore skills.
sourceYesWhere the data comes from: the user's own private desk.
statusYessaved: the criteria replaced any earlier criteria on the user's desk. not_saved: the client sends no user id (no ChatGPT sign-in and no OAuth connection), so nothing was stored; pass the criteria to score_message.
target_roleYesTarget role, with contact details removed.
dealbreakersYesDealbreakers; empty when none were given.
salary_floorYesMinimum yearly base salary in US dollars.
remote_policyYesWork arrangement.
retention_noteYesHow long evaluations and the desk are kept, or, with not_saved, what to do next.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / dealbreakers / items / maxLength
      Added value: +200
    • addedInput schema / properties / remote_policy / maxLength
      Added value: +200
    • addedInput schema / properties / skills / items / maxLength
      Added value: +80
    • addedInput schema / properties / target_role / maxLength
      Added value: +200
  2. Changed1 schema field changed
    • changedOutput schema / properties / status / description
      Previous value: -"saved: the criteria replaced any earlier criteria on the user's desk. not_saved: the client sends no signed-in ChatGPT user, so nothing was stored; pass the criteria to score_message."New value: +"saved: the criteria replaced any earlier criteria on the user's desk. not_saved: the client sends no user id (no ChatGPT sign-in and no OAuth connection), so nothing was stored; pass the criteria to score_message."
  3. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "remote_policy": "100% remote",
      +    "salary_floor": 150000,
      +    "skills": [
      +      "Go",
      +      "PostgreSQL"
      +    ],
      +    "target_role": "Backend engineer"
      +  }
      +]
  4. Changed8 schema fields changed
    • changedOutput schema / properties / dealbreakers / description
      Previous value: -"Saved dealbreakers; empty when none were given."New value: +"Dealbreakers; empty when none were given."
    • changedOutput schema / properties / remote_policy / description
      Previous value: -"Saved work arrangement."New value: +"Work arrangement."
    • changedOutput schema / properties / retention_note / description
      Previous value: -"How long evaluations and the desk are kept."New value: +"How long evaluations and the desk are kept, or, with not_saved, what to do next."
    • changedOutput schema / properties / salary_floor / description
      Previous value: -"Saved minimum yearly base salary in US dollars."New value: +"Minimum yearly base salary in US dollars."
    • changedOutput schema / properties / skills / description
      Previous value: -"Saved core skills."New value: +"Core skills."
    • changedOutput schema / properties / status / description
      Previous value: -"Always saved: the criteria replaced any earlier criteria."New value: +"saved: the criteria replaced any earlier criteria on the user's desk. not_saved: the client sends no signed-in ChatGPT user, so nothing was stored; pass the criteria to score_message."
    • changedOutput schema / properties / status / enum
      Previous value: -[
      -  "saved"
      -]New value: +[
      +  "saved",
      +  "not_saved"
      +]
    • changedOutput schema / properties / target_role / description
      Previous value: -"Saved target role, with contact details removed."New value: +"Target role, with contact details removed."
  5. Changed20 schema fields changed
    • changedInput schema / properties / dealbreakers / description
      Previous value: -"Non-negotiable constraints that automatically rule out a pitch (e.g. 'Onsite required', 'Legacy Java')."New value: +"Optional, up to 20: constraints that rule out a pitch, such as [\"Onsite required\", \"Legacy Java\"]. Omit it or send [] for none."
    • addedInput schema / properties / dealbreakers / maxItems
      Added value: +20
    • changedInput schema / properties / remote_policy / description
      Previous value: -"Target work arrangement (e.g. '100% remote', 'hybrid 1 day', 'any')."New value: +"Wanted work arrangement, such as \"100% remote\", \"hybrid 1 day\" or \"any\"."
    • changedInput schema / properties / salary_floor / description
      Previous value: -"Minimum acceptable annual base salary in USD."New value: +"Minimum yearly base salary in whole US dollars, 0 to 10000000, such as 210000. Use 0 for no floor."
    • addedInput schema / properties / salary_floor / maximum
      Added value: +10000000
    • changedInput schema / properties / skills / description
      Previous value: -"List of core required skills or technical focus areas."New value: +"Core skills, 1 to 30, such as [\"TypeScript\", \"Go\"]."
    • addedInput schema / properties / skills / maxItems
      Added value: +30
    • addedInput schema / properties / skills / minItems
      Added value: +1
    • changedInput schema / properties / target_role / description
      Previous value: -"Target job title or seniority level (e.g. 'Staff Distributed Systems Engineer')."New value: +"Target job title, such as \"Staff Distributed Systems Engineer\"."
    • addedInput schema / properties / target_role / minLength
      Added value: +1
    • addedOutput schema / properties / as_of / description
      Added value: +"Day of the call, as YYYY-MM-DD in UTC."
    • addedOutput schema / properties / dealbreakers / description
      Added value: +"Saved dealbreakers; empty when none were given."
    • addedOutput schema / properties / remote_policy / description
      Added value: +"Saved work arrangement."
    • addedOutput schema / properties / retention_note / description
      Added value: +"How long evaluations and the desk are kept."
    • addedOutput schema / properties / salary_floor / description
      Added value: +"Saved minimum yearly base salary in US dollars."
    • addedOutput schema / properties / skills / description
      Added value: +"Saved core skills."
    • addedOutput schema / properties / source / description
      Added value: +"Where the data comes from: the user's own private desk."
    • addedOutput schema / properties / status / description
      Added value: +"Always saved: the criteria replaced any earlier criteria."
    • addedOutput schema / properties / status / enum
      Added value: +[
      +  "saved"
      +]
    • addedOutput schema / properties / target_role / description
      Added value: +"Saved target role, with contact details removed."
  6. Changed3 schema fields changed
    • removedInput schema / properties / desk_key
      Removed value: -{
      -  "description": "The secret desk_key returned when the desk was created. It is the only credential for this desk and cannot be recovered.",
      -  "pattern": "^od_[0-9a-f]{32}$",
      -  "type": "string"
      -}
    • removedOutput schema / properties / desk_key
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "status",
      -  "desk_key",
      -  "target_role",
      -  "skills",
      -  "salary_floor",
      -  "remote_policy",
      -  "dealbreakers",
      -  "retention_note",
      -  "source",
      -  "as_of"
      -]New value: +[
      +  "status",
      +  "target_role",
      +  "skills",
      +  "salary_floor",
      +  "remote_policy",
      +  "dealbreakers",
      +  "retention_note",
      +  "source",
      +  "as_of"
      +]
  7. Changed1 schema field changed
    • removedOutput schema / properties / note_from_openkrill
      Removed value: -{
      -  "description": "Shown at most once a day per caller: what this server offers, and a paid service for the person you work for.",
      -  "type": "string"
      -}
  8. Changed1 schema field changed
    • addedOutput schema / properties / note_from_openkrill
      Added value: +{
      +  "description": "Shown at most once a day per caller: what this server offers, and a paid service for the person you work for.",
      +  "type": "string"
      +}
  9. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations flag destructiveHint=true and non-idempotent, and the description goes well beyond them by naming exactly what is destroyed ('each call overwrites all saved criteria, and the earlier ones are lost'), what survives ('past evaluations and the scoreboard are kept'), and the degraded path when no user id is supplied (status not_saved, nothing stored, criteria routed to score_message). That is genuine behavioral disclosure rather than a restatement of 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?

Every sentence carries load – overwrite semantics, use cases, input tips, return values, and the no-user-id branch – and the destructive behavior is front-loaded in the first clause. It is dense and slightly run-on in the middle 'Input tips' stretch, which keeps it just short of 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 five-parameter mutation tool with an output schema, the description covers the full call lifecycle: preconditions (ask for missing required fields), destructive effect, return shape (status saved, cleaned criteria, retention note), and the failure branch. Nothing an agent needs to invoke 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 the schema already documents each field and its bounds, establishing a baseline of 3. The description adds real operational meaning on top: salary_floor is in whole US dollars, dealbreakers are optional, and crucially 'to change one field, send every field again with the change', which the schema cannot express.

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?

The description states a specific verb+resource pair ('save the user's job search criteria') and immediately scopes it with the overwrite behavior. It explicitly names the sibling it is not ('Not for scoring a pitch; use score_message'), so an agent can route correctly without opening either schema.

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?

It gives explicit when-to-use conditions (first setup to start the private desk, or a change of role, skills, salary floor or remote policy) and an explicit exclusion with the alternative tool named. It also prescribes a workflow step: 'Ask the user for any missing required field before calling.'

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.