Skip to main content
Glama

Update Job Preferences

aiapplyd_update_job_preferences
DestructiveIdempotent

Set what AI Applyd hunts for on the user's behalf, and re-run discovery immediately: target roles, locations, remote, salary band and currency, seniority (experience_levels), work styles, job types, visa sponsorship need, industries to…

Instructions

Set what AI Applyd hunts for on the user's behalf, and re-run discovery immediately: target roles, locations, remote, salary band and currency, seniority (experience_levels), work styles, job types, visa sponsorship need, industries to exclude, or pause matching. Pass description to say it in plain words ("remote only, 120k+, senior, no crypto"); fields passed explicitly win over it. Lists REPLACE what is saved, so pass the complete list, not an addition. application_answers saves the answers employer forms ask for (phone, city, state, zip, country, LinkedIn, work authorization, relocation, start date, notice period): fill only values the user stated, never guesses. Only call this when the user asks. Read the current preferences first with aiapplyd_get_account. Do not use it to search; use aiapplyd_get_matches with query.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pausedNoTrue pauses new matches for the user; false resumes them. It never changes auto-apply.
job_typesNoJob types to match: full_time, part_time, contract, internship, freelance, temporary. REPLACES the saved list.
locationsNoFull list of preferred locations. REPLACES the saved list.
salary_maxNoHighest yearly salary to target, in salary_currency.
salary_minNoLowest yearly salary the user accepts, in salary_currency (e.g. 120000).
descriptionNoWhat the user wants, in their own words (e.g. "remote only, 120k+, senior, no crypto"). Fields passed explicitly win over it. Uses AI credits.
remote_onlyNoDeprecated name of include_remote. Use include_remote.
work_stylesNoWork styles to match: onsite, hybrid, remote. REPLACES the saved list.
target_rolesNoFull list of job titles to hunt for. REPLACES the saved list.
include_remoteNoInclude remote jobs in the user's region alongside their locations.
salary_currencyNoCurrency of the salary band (default usd).
experience_levelsNoSeniority to match: intern, entry, junior, mid, senior, lead, executive. REPLACES the saved list.
exclude_industriesNoIndustries to never match (e.g. ["Crypto"]). REPLACES the saved list.
application_answersNoAnswers employer forms ask for, saved to the user's application profile: phone, city, state, zip_code, country, linkedin_url, work_authorization, willing_to_relocate, available_start_date, notice_period. Only values the user stated, never guesses.
needs_visa_sponsorshipNoTrue when the user needs visa sponsorship to take the job.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
pausedYes
jobTypesYes
locationsYes
salaryMaxYes
salaryMinYes
workStylesYes
targetRolesYes
includeRemoteYes
salaryCurrencyYes
remoteWorldwideYes
visaSponsorshipYes
describedSummaryYesHow AI Applyd understood `description`, when one was given.
experienceLevelsYes
excludeIndustriesYes
onboardingCompletedYesTrue when this call finished the account setup, so AI Applyd starts searching for these roles.
applicationAnswersSavedYesThe application_answers fields written to the application profile.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv1.8.5
    • removedOutput schema / properties / describedSummary / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / describedSummary / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / includeRemote / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / includeRemote / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / properties / paused / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / paused / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / properties / salaryCurrency / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / salaryCurrency / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / salaryMax / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / salaryMax / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / salaryMin / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / salaryMin / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / visaSponsorship / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / visaSponsorship / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. Changed2 schema fields changedv1.8.3
    • changedInput schema / properties / experience_levels / description
      Previous value: -"Seniority to match: entry, mid, senior, lead, executive. REPLACES the saved list."New value: +"Seniority to match: intern, entry, junior, mid, senior, lead, executive. REPLACES the saved list."
    • changedInput schema / properties / experience_levels / items / enum
      Previous value: -[
      -  "entry",
      -  "mid",
      -  "senior",
      -  "lead",
      -  "executive"
      -]New value: +[
      +  "intern",
      +  "entry",
      +  "junior",
      +  "mid",
      +  "senior",
      +  "lead",
      +  "executive"
      +]
  3. Changed15 schema fields changedv1.8.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / application_answers
      Added value: +{
      +  "description": "Answers employer forms ask for, saved to the user's application profile: phone, city, state, zip_code, country, linkedin_url, work_authorization, willing_to_relocate, available_start_date, notice_period. Only values the user stated, never guesses.",
      +  "properties": {
      +    "available_start_date": {
      +      "type": "string"
      +    },
      +    "city": {
      +      "type": "string"
      +    },
      +    "country": {
      +      "type": "string"
      +    },
      +    "linkedin_url": {
      +      "type": "string"
      +    },
      +    "notice_period": {
      +      "enum": [
      +        "immediately",
      +        "two_weeks",
      +        "one_month",
      +        "two_months",
      +        "three_months",
      +        "flexible"
      +      ],
      +      "type": "string"
      +    },
      +    "phone": {
      +      "type": "string"
      +    },
      +    "state": {
      +      "type": "string"
      +    },
      +    "willing_to_relocate": {
      +      "type": "boolean"
      +    },
      +    "work_authorization": {
      +      "enum": [
      +        "us_citizen",
      +        "permanent_resident",
      +        "visa_holder",
      +        "require_sponsorship",
      +        "other"
      +      ],
      +      "type": "string"
      +    },
      +    "zip_code": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / description
      Added value: +{
      +  "description": "What the user wants, in their own words (e.g. \"remote only, 120k+, senior, no crypto\"). Fields passed explicitly win over it. Uses AI credits.",
      +  "maxLength": 2000,
      +  "type": "string"
      +}
    • addedInput schema / properties / exclude_industries
      Added value: +{
      +  "description": "Industries to never match (e.g. [\"Crypto\"]). REPLACES the saved list.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / experience_levels
      Added value: +{
      +  "description": "Seniority to match: entry, mid, senior, lead, executive. REPLACES the saved list.",
      +  "items": {
      +    "enum": [
      +      "entry",
      +      "mid",
      +      "senior",
      +      "lead",
      +      "executive"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / include_remote
      Added value: +{
      +  "description": "Include remote jobs in the user's region alongside their locations.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / job_types
      Added value: +{
      +  "description": "Job types to match: full_time, part_time, contract, internship, freelance, temporary. REPLACES the saved list.",
      +  "items": {
      +    "enum": [
      +      "full_time",
      +      "part_time",
      +      "contract",
      +      "internship",
      +      "freelance",
      +      "temporary"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / needs_visa_sponsorship
      Added value: +{
      +  "description": "True when the user needs visa sponsorship to take the job.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / paused
      Added value: +{
      +  "description": "True pauses new matches for the user; false resumes them. It never changes auto-apply.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / remote_only / description
      Previous value: -"Whether to include remote-friendly positions"New value: +"Deprecated name of include_remote. Use include_remote."
    • addedInput schema / properties / salary_currency
      Added value: +{
      +  "description": "Currency of the salary band (default usd).",
      +  "enum": [
      +    "usd",
      +    "eur",
      +    "gbp",
      +    "cad",
      +    "aud",
      +    "inr"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / salary_max
      Added value: +{
      +  "description": "Highest yearly salary to target, in salary_currency.",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / salary_min
      Added value: +{
      +  "description": "Lowest yearly salary the user accepts, in salary_currency (e.g. 120000).",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / work_styles
      Added value: +{
      +  "description": "Work styles to match: onsite, hybrid, remote. REPLACES the saved list.",
      +  "items": {
      +    "enum": [
      +      "onsite",
      +      "hybrid",
      +      "remote"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "applicationAnswersSaved": {
      +      "description": "The application_answers fields written to the application profile.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "describedSummary": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "How AI Applyd understood `description`, when one was given."
      +    },
      +    "excludeIndustries": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "experienceLevels": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "includeRemote": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "jobTypes": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "locations": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "onboardingCompleted": {
      +      "description": "True when this call finished the account setup, so AI Applyd starts searching for these roles.",
      +      "type": "boolean"
      +    },
      +    "paused": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "remoteWorldwide": {
      +      "type": "boolean"
      +    },
      +    "salaryCurrency": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "salaryMax": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "salaryMin": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "targetRoles": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "visaSponsorship": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "workStyles": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "targetRoles",
      +    "locations",
      +    "includeRemote",
      +    "remoteWorldwide",
      +    "salaryMin",
      +    "salaryMax",
      +    "salaryCurrency",
      +    "experienceLevels",
      +    "workStyles",
      +    "jobTypes",
      +    "visaSponsorship",
      +    "excludeIndustries",
      +    "paused",
      +    "applicationAnswersSaved",
      +    "describedSummary",
      +    "onboardingCompleted"
      +  ],
      +  "type": "object"
      +}
  4. First observedv1.3.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, so the write/replace risk is signposted. The description adds non-obvious behavior the annotations cannot convey: lists REPLACE rather than append (data loss on partial input), discovery is re-run immediately, the free-text `description` consumes AI credits, and fields win over prose. This is exactly the added value a description should provide on top of structured fields.

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 purpose and the replace/credits caveats before the parameter enumeration, and every clause carries operational meaning. The long parenthetical field list and the application_answers sentence make it denser than necessary, but nothing is pure 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?

For a 15-parameter, nested-object, currently-mutating tool with an output schema, the description covers the prerequisites, the destructive replace behavior, the free-text precedence rule, the credits cost, and the correct sibling for searching. An agent has everything needed to call it safely.

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 meaningfully exceeds it: it explains the precedence rule between the free-text `description` and explicit fields, the destructive replace semantics for list params, and the correct usage for the nested `application_answers` object (fill only user-stated values, never guesses). It does not add guidance for the deprecated `remote_only` vs `include_remote` migration beyond what the schema already carries.

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 (Update/Set) and resource (job preferences: target roles, locations, remote, salary band, seniority, work styles, job types, visa sponsorship, exclusions, pause) and explicitly names what it is not (a search tool). An agent can distinguish it from aiapplyd_get_matches, aiapplyd_search_jobs, and aiapplyd_update_application_profile without opening a 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?

Explicit trigger ("Only call this when the user asks"), an explicit prerequisite ("Read the current preferences first with aiapplyd_get_account"), and an explicit exclusion with the alternative to use instead ("Do not use it to search; use aiapplyd_get_matches with query"). This is the full when/when-not/alternative pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.