Skip to main content
Glama

Update Job Preferences

aiapplyd_update_job_preferences
DestructiveIdempotent

Update job preferences to refine your job hunt and rerun discovery immediately. Set target roles, locations, salary, remote, seniority, and more.

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: entry, 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. 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"
      +}
  2. First observedv1.3.0

TDQS

A4.9/5.0
Behavior5/5

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

Adds valuable side-effect context beyond annotations: 'Lists REPLACE what is saved, so pass the complete list, not an addition,' 're-run discovery immediately,' and 'fill only values the user stated, never guesses.' These details enrich the destructiveHint and idempotentHint annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose, immediate side effects, replacement semantics, application_answers caution, call condition, prerequisite, and sibling routing. The most critical behavioral caveats are front-loaded before secondary details.

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 mutation tool with full schema coverage and an output schema, the description covers call conditions, destructive replacement behavior, natural-language precedence, the application_answers safety rule, and exclusion of search usage. 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% and parameter descriptions already include key rules like 'REPLACES the saved list' and 'Fields passed explicitly win over it.' The main description adds useful aggregate guidance ('pass the complete list, not an addition') and the read-before-update prerequisite, but only modestly exceeds 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?

Description opens with a specific verb and resource ('Set what AI Applyd hunts for on the user's behalf') and enumerates the preference dimensions it updates. It also explicitly differentiates from siblings by saying 'Do not use it to search; use aiapplyd_get_matches with query.'

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 explicit invocation conditions: 'Only call this when the user asks,' a prerequisite ('Read the current preferences first with aiapplyd_get_account'), and a clear exclusion for search usage with the alternative tool named. This is strong when-to-use and when-not-to-use guidance.

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