FoundRole — AI Job Search & Application Tracker MCP for Claude & ChatGPT
Server Details
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
- Status
- Healthy
- Uptime
- 24.5% over 69 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- foundrole/jobs-mcp-proxy
- GitHub Stars
- 0
- Server Listing
- FoundRole Jobs - AI Job Search & Application Tracker
TDQS
Scored across 21 tools
Most tools target a clear resource+action, and the descriptions explicitly distinguish jobs_search from jobs_recommendations and tracker_add from tracker_add_external. However, reminder_set/reminder_delete overlap with tracker_update's reminder_at field, and search vs. recommendations can still return the same personalized feed, creating some misselection risk.
Tools consistently use snake_case with a resource-first, action-second pattern (job_alert_list, tracker_add, reminder_set, knowledge_search). Minor deviations exist: singular job_alert_* versus plural jobs_*, and noun-style actions such as jobs_details and jobs_recommendations.
At 21 tools this is a heavy surface for a job-search MCP, falling into the borderline 16–25 range. Several operations could be consolidated—reminders into tracker_update, and bulk alert unsubscribe into a parameter—though the broad domain does justify many tools.
The surface covers the core lifecycle: job search/details/recommendations/compare, external analysis, tracker CRUD and status updates, alerts, reminders, resume checking, and knowledge lookup. Remaining gaps are minor—no saved-search listing or profile/resume upload management—but agents can work around them.
Available Tools
21 toolsjob_alert_listList job alertsARead-onlyInspect
Lists the authenticated user's job alerts across all subscription sources (regular, company page, MCP).
Input:
status: Filter by status — one of pending, active, unsubscribed (optional, default: all statuses)limit: Number of results to return (default 20, max 50)offset: Number of results to skip (default 0)
Output: Returns the user's job alerts with pagination info and a summary of the underlying job search (query, location, company where available). Each response includes a system_instruction describing how to present the results for the current client.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (default 20, max 50) | |
| offset | No | Number of results to skip (default 0) | |
| status | No | Filter by status: pending, active, unsubscribed |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| jobAlerts | No | |
| totalCount | No | |
| frequencies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower, and the description adds real behavioral context: responses carry pagination info, a summary of the underlying job search (query, location, company), and a system_instruction governing how results should be presented for the current client. That presentation-instruction detail is not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by clearly labeled Input/Output blocks; the structure aids scanning. It is slightly padded by restating parameter text already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-risk, zero-required-parameter list tool with a full output schema and covering annotations, this is close to complete. Return-value detail is technically redundant given the output schema, but the mention of the system_instruction field adds genuine completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, offset and status, and the description largely repeats them. It does add one piece of meaning the schema omits — that status is optional and defaults to all statuses — but nothing about syntax beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb (Lists), resource (job alerts), owner scope (authenticated user's) and breadth (all subscription sources: regular, company page, MCP). This clearly distinguishes it from the job_alert_subscribe/unsubscribe siblings without needing their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — you call this to enumerate the user's existing alerts — and the sibling mutations (subscribe/unsubscribe) are obviously different operations. However, the description never states when to prefer this over e.g. job_alert_unsubscribe_all or tracker_list, nor any preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_alert_subscribeCreate a job alertADestructiveIdempotentInspect
Subscribes the authenticated user to job alerts for a specific saved job search.
Input:
job_search_id: The job search identifier to subscribe to (required). Accepts either the job search UUID or the composite job ID returned byjobs_search/jobs_details(format: "seo_id--job_search_id").delivery: digest, fast (optional). Fast email is not available on every account and needs enough new matches for the exact saved search. Unsupported fast selection returns a validation error and keeps the existing delivery mode.frequency: Alert frequency — one of daily, weekly, monthly (optional, defaults to "weekly")
Output:
Returns the created or updated job alert with id, status, and frequency.
Idempotent: calling this tool for an already-subscribed search updates the existing alert without creating a duplicate. An existing active alert with the same query text, location, company and filters, and at least the same radius, is returned instead of a new one, with the requested frequency applied to it.
A user keeps one alert per query and place. When they already have an active alert for the same query and place with other filters, radius or sort, this tool changes that alert to the new search instead of adding a second one: the returned jobAlert.id is the existing alert, jobSearchId is the new search, and message says the alert was changed.
Delivery:
Digest alerts arrive together in one email, one section per query and place. Opted-in fast alerts are sent separately while the account has them: matches found overnight arrive in one morning email at the hour the user usually starts the day, and later matches follow at least 3 hours after the previous email, up to 3 emails per local day. A fast email carries only jobs found since the previous one, never a job already sent to the user, a role from the same employer sent in the last 30 days, or a job in the user's tracker. When the account no longer has fast alerts they return to the ordinary digest and retain the saved fast preference. Each section applies every filter and the sort of its saved search, the same way jobs_search does for that account. A job appears in the digest once, even when it matches several alerts, and no email is sent when there are no new matches. The digest follows the most frequent alert, and arrives less often when the user has not used FoundRole for a while.
| Name | Required | Description | Default |
|---|---|---|---|
| delivery | No | Delivery mode: digest, fast; fast is not available on every account and needs a qualifying search | |
| frequency | No | Alert frequency: daily, weekly, monthly (defaults to "weekly") | |
| job_search_id | Yes | Job search UUID or composite job id ("seo_id--job_search_id") from jobs_search results |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobAlert | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, but do not explain what is destroyed or how idempotency works. The description adds crucial context: it explains that active alerts can be changed rather than duplicated, details delivery modes and their constraints, describes digest vs fast email behavior, and clarifies the resulting email content. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (Input, Output, Delivery) and uses bullet points. It is somewhat lengthy, particularly the Delivery section, but every part earns its place by explaining important behavior. It is well front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (idempotent updates, delivery options, email scheduling) and the presence of an output schema, the description is remarkably complete. It covers input validation, idempotency, conflict resolution, and delivery mechanics in detail, leaving no critical gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds some value by explaining the composite job ID format and the effect of unsupported fast delivery (validation error, keeping existing mode). However, it largely repeats schema details, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource clearly: subscribes the authenticated user to alerts for a saved job search. Distinguishes itself from siblings like job_alert_list and job_alert_unsubscribe by focusing on creation/update of alerts. The idempotent-update semantics further differentiate it from any pure 'create' sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides clear context for when to use it (subscribing to a saved search) and describes idempotent behavior on re-call, which implies repeated use is safe. However, it does not explicitly name alternative tools or provide when-not-to-use guidance, such as what to do if the user wants to unsubscribe or list alerts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_alert_unsubscribeUnsubscribe from a job alertADestructiveInspect
Unsubscribes the authenticated user from job alerts for a specific job search.
Input:
job_search_id: The job search identifier to unsubscribe from (required). Accepts either the job search UUID or the composite job ID returned byjobs_search/jobs_details(format: "seo_id--job_search_id").
Output: Confirms the alert has been unsubscribed. Idempotent: returns success even when the user was not subscribed or is already unsubscribed.
| Name | Required | Description | Default |
|---|---|---|---|
| job_search_id | Yes | Job search UUID or composite job id ("seo_id--job_search_id") from jobs_search results |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly claims 'Idempotent: returns success even when the user was not subscribed or is already unsubscribed,' but the annotations declare idempotentHint=false. This is a direct contradiction of a declared behavioral trait, which is the most consequential kind of error for an agent deciding whether retries are safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly four sentences, front-loaded with the action, then clearly delimited Input/Output sections. The Input paragraph carries real information (accepted ID formats and their origin) rather than padding, and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not be explained, and the description still adds the ID-sourcing guidance and the idempotency/error behavior an agent needs. The only gap is the missing contrast with job_alert_unsubscribe_all, and the idempotency claim is contradicted rather than merely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3; the description goes slightly beyond by naming the tools that produce the composite 'seo_id--job_search_id' value (jobs_search / jobs_details) and by restating requiredness, which helps an agent source the value correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (unsubscribes), resource (job alerts), and scope (for a specific job search, by the authenticated user), which naturally distinguishes it from job_alert_unsubscribe_all and job_alert_subscribe. An agent can pick this tool over its siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the 'specific job search' scoping, and the description helpfully says where the accepted ID format comes from (jobs_search / jobs_details). However, it never states when to prefer this over job_alert_unsubscribe_all, nor any prerequisites (e.g., auth/scope requirements) or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_alert_unsubscribe_allUnsubscribe from all job alertsADestructiveIdempotentInspect
Unsubscribes the authenticated user from ALL of their job alerts at once, across every subscription source (regular, company page, MCP).
Input:
confirm: Must betrueto execute. The call is rejected when omitted or not true — this guards against an unintended bulk unsubscribe.
Output: Confirms how many alerts were unsubscribed. Idempotent: returns success even when the user has no active alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Set to true to confirm unsubscribing from every alert; the call is rejected otherwise |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real behavioral substance beyond them: the call is rejected unless confirm is true, and it returns success even when no alerts are active. It also states the output shape (a count of alerts unsubscribed). It restates idempotency that annotations already carry, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the core action in the first sentence and the guard/idempotency details after. The Input/Output headings are slightly heavy for a single-parameter tool, costing a little structure economy, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive bulk operation with an output schema and rich annotations, nothing an agent needs is missing: scope, the confirmation precondition, the rejection behavior, idempotency, and the return summary are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents that confirm must be true and that the call is rejected otherwise. The description adds only the rationale ('guards against an unintended bulk unsubscribe'), which is useful intent but no new syntax or format information. Baseline 3 is appropriate when the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Unsubscribes ... from ALL of their job alerts') and scopes the operation precisely ('at once, across every subscription source (regular, company page, MCP)'). This cleanly distinguishes it from the sibling job_alert_unsubscribe, which handles a single alert, without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'ALL ... at once' framing makes the bulk-use case clear and implicitly routes single-alert requests to job_alert_unsubscribe, and the confirm guard establishes a precondition for execution. However, it never names the alternative tool explicitly or states when NOT to use this bulk operation, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_analyze_externalAnalyze a job from another siteAInspect
Analyzes one job found outside FoundRole using the authenticated user's FoundRole profile and the same signals used for FoundRole jobs: resume match, missing skills, H-1B sponsorship history, E-Verify, ghost-job risk, posted compensation, and market salary estimates. Use tracker_add_external only when the user asks to save without analysis.
The input represents the direct posting URL and all job content already available in the conversation.
The five text identity fields are required; every structured fact field is optional, with a fact the
source does not state simply omitted (or null). The optional client_extraction object carries
evidence-backed skills, technology, benefits, bonuses, seniority, industry, management, clearance,
visa, and remote-scope labels when source excerpts for them exist. FoundRole validates the evidence,
stores the client extraction separately, derives missing deterministic facts, and reports which
values were provided, derived, accepted, rejected, or remain unknown.
The output includes comparisonRef; retain it exactly for a later jobs_compare call. The analysis is a
decision aid, not a guarantee about sponsorship, legitimacy, compensation, or hiring outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Direct URL of the specific job posting; a company homepage is invalid | |
| posted_at | No | Posting date as ISO 8601, when the source states it | |
| title_name | Yes | Job title from the posting | |
| description | Yes | Complete posting text available in the conversation; a source summary is valid only when no fuller posting text is available | |
| salary_type | No | Salary period: year, month, week, day, hour | |
| company_name | Yes | Company name from the posting | |
| salary_value | No | Single salary amount, when the posting gives one figure instead of a range | |
| location_name | Yes | Location text from the posting, including Remote when stated | |
| employment_type | No | Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other | |
| salary_currency | No | ISO 4217 salary currency code, when stated | |
| salary_max_value | No | Salary range maximum, when stated | |
| salary_min_value | No | Salary range minimum, when stated | |
| client_extraction | No | Evidence-backed facts extracted by the client model from the posting; non-null evidence is a short source excerpt rather than an inference. Fields absent from the source are omitted or null. | |
| experience_months | No | Minimum required experience in months, when stated | |
| work_location_type | No | Work arrangement: on_site, remote, hybrid | |
| education_requirements | No | Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| mode | Yes | |
| studioUrl | No | |
| statusOrder | Yes | |
| derivedFields | Yes | |
| trackerWebUrl | Yes | |
| unknownFields | Yes | |
| providedFields | Yes | |
| clientExtraction | Yes | |
| system_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the write/safety profile (readOnlyHint=false, non-destructive, non-idempotent). The description goes well beyond that: it discloses that facts are validated, client extraction is stored separately, deterministic facts are derived, and results are reported as provided/derived/accepted/rejected/unknown, plus an explicit disclaimer that the analysis is a decision aid rather than a guarantee. No rate limits or failure modes are mentioned, so a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three paragraphs for a 16-parameter tool with a nested extraction object is proportionate, and the purpose plus the sibling alternative are front-loaded in the first sentence. The middle paragraph is dense but each sentence carries distinct information; minor redundancy around whether fields are omitted or null.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still flags the one output value that matters downstream (comparisonRef to retain for jobs_compare) without wasting words on the rest. Combined with required/optional rules, evidence requirements, storage behavior, and scope disclaimers, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, and the description adds real meaning: the five text identity fields are required, structured fact fields are optional and omitted/null when unstated, and client_extraction entries must be evidence-backed source excerpts rather than inferences. It does not clarify individual field semantics beyond the schema, keeping it at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Analyzes one job found outside FoundRole") and scopes it precisely to external postings, contrasting with FoundRole-hosted jobs. It also names the sibling tool it is not (tracker_add_external), so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative and its selecting condition: "Use tracker_add_external only when the user asks to save without analysis." It does not, however, distinguish itself from jobs_details or jobs_search for hosted jobs, so the when-to-use matrix is one-directional rather than exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_compareCompare jobsARead-onlyInspect
Compares 2 to 4 jobs side by side using the same FoundRole analysis fields: resume match, missing skills, H-1B and E-Verify signals, ghost-job risk, posted pay, and market salary estimates.
comparison_refs accepts exact FoundRole job IDs returned by jobs_search and exact external
comparisonRef URLs returned by jobs_analyze_external. Analyze each outside job first; a bare URL that
has not been analyzed cannot be compared because FoundRole does not have its posting facts. Preserve
every reference exactly, keep the user's requested order, and do not send duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| comparison_refs | Yes | Two to four exact FoundRole job IDs or external comparisonRef URLs |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| mode | Yes | |
| studioUrl | No | |
| statusOrder | Yes | |
| trackerWebUrl | Yes | |
| system_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the analysis fields produced, the hard constraint that un-analyzed URLs cannot be compared, and the ordering/dedup invariants the caller must respect. It stops short of describing output format, but that is carried by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and comparison fields, then a focused second sentence on input constraints. Every sentence earns its place; the field enumeration is slightly long but directly useful for setting caller expectations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not be explained, and the description fully covers the one input's format, provenance, and invariants against the annotation-provided safety profile. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with effectively one parameter, so baseline is 3. The description adds real meaning beyond the schema by specifying the exact provenance (FoundRole job IDs from jobs_search, external comparisonRef URLs from jobs_analyze_external) and the invariants (preserve exact references, keep requested order, no duplicates).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (compares) and resource (jobs) with explicit scope (2 to 4, side by side) and enumerates the exact analysis fields returned (resume match, missing skills, H-1B/E-Verify, ghost-job risk, pay, salary estimates). An agent can distinguish this from jobs_search or jobs_analyze_external, which are named as the sources of its inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite workflow: analyze each outside job first via jobs_analyze_external, and notes that a bare un-analyzed URL cannot be compared. Names the sibling tools that produce valid refs. No explicit 'when-not-to-use' exclusion, but the conditional guidance is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_detailsGet job detailsAInspect
Fetches full details for one job by the id returned from jobs_search — the deeper view behind a search result.
Input:
job_id: The exact ID string from theidfield of ajobs_searchresult.result_item_id: The matching occurrence ID from that result'sresultItemIdfield, when available.
Output:
Complete job details: description, skills, benefits, requirements, salary benchmark, resume match,
H-1B and E-Verify signals, job-trust analysis, and application link. A posting that passed the
fully-remote check carries remoteCheck: the posting lines that make the role remote and where
the employee may work from, or an unknown scope when the posting does not say. Personalized and extended
insight fields follow the authenticated user's current entitlements.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The unique identifier of the job from jobs_search results | |
| result_item_id | No | The result occurrence ID returned with the selected job |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | No | |
| studioUrl | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackerWebUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by enumerating what the payload contains (description, skills, benefits, salary benchmark, resume match, H-1B/E-Verify signals, trust analysis, application link), explaining the conditional `remoteCheck` field, and noting that personalized/extended fields depend on the caller's entitlements. There is mild tension with the structured hints (readOnlyHint=false and idempotentHint=false on what is described as a fetch), but the description itself discloses no destructive or mutating behavior and the hints appear to be conservative defaults rather than a substantive conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then cleanly separated into Input and Output blocks, with zero filler sentences. The Output block is somewhat long given that an output schema already exists, so it is more verbose than strictly necessary, but each listed item carries semantic meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers everything an agent needs: where each identifier comes from, what the single required parameter must be, what the response contains, the conditional `remoteCheck` semantics, and the entitlement-dependent nature of personalized fields. With an output schema present, this is more than sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 provenance meaning the schema lacks: `job_id` must be 'the exact ID string from the `id` field of a jobs_search result' and `result_item_id` is the matching `resultItemId` 'when available', clarifying that one of the two identifiers is conditional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetches full details for one job') and immediately positions it against the sibling that produces the input ('the deeper view behind a search result', keyed by the id from jobs_search). An agent can distinguish it from jobs_search, jobs_compare, and jobs_recommendations without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear retrieval context: call it with the `id` from a jobs_search result, optionally paired with that result's `resultItemId`. It does not explicitly state when not to use it (e.g., to discover jobs in the first place, use jobs_search), but the sequencing dependency is unambiguous enough for correct routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_recommendationsRecommend jobs for my profileAIdempotentInspect
Returns the authenticated user's personalized job recommendations built from their resume, skills, target roles, and preferred location. Results are ranked by fit, may include related roles, and carry the same salary, match, H-1B, and job-trust insight payload used by job search. The search filters and sort parameters apply to this personalized feed too. One call returns one answer: there is no next page, and the response links to the same feed on the FoundRole website. An explicit query for a different or unrecognized profession uses the same general job search as jobs_search, preserving the query and filters instead of substituting the profile's target roles.
A processing status means the personalized feed is still being prepared; a later call returns the completed feed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Result order (score, posted_at, match, salary): score is relevance and the default, posted_at is newest first, salary is highest pay first, match is best personal fit first and needs a resume. Ordering by salary or match is an advanced option. | |
| query | No | The full job title or skill (e.g., "Ruby Developer", NOT just "Ruby") | |
| radius | No | Search radius in miles around a city location (default 40); not used for state, country or remote searches. | |
| remote | No | Advanced filter: only remote-eligible jobs, matched across the whole country of the requested location rather than its radius. | |
| company | No | The official company name, or the domain of one employer | |
| benefits | No | Advanced filter: benefit names such as "health insurance", "401k" or "parental leave"; a job qualifies only when it states every listed benefit. Names that match no known benefit are ignored. | |
| location | No | Geographic location (e.g., 'Boston, MA') | |
| companies | No | Filter: official company names; a job from any of them qualifies, across every job board each employer posts on. More than one company makes it an advanced filter. Next to company, a job has to match both; hiring_brand narrows company only. | |
| education | No | Filter: jobs whose posting requires one of these education levels (no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree); bachelor_degree means the posting asks for a bachelor degree, not that it suits someone holding one. | |
| min_match | No | Advanced filter: lowest personal FoundRole match grade to keep, the same letter each job shows in insights.match.grade. A and A- are rare even for a strong resume; B keeps good and strong matches; C+ also keeps fair ones. Needs a resume on the account. | |
| work_modes | No | Advanced filter: jobs in any of these work modes (on_site, remote, hybrid). remote is matched across the whole country of the location, the others within the radius. ["remote"] is the same search as remote: true. | |
| bonuses_only | No | Advanced filter: only jobs that state a bonus (sign-on, performance, referral, commission and the like). | |
| hiring_brand | No | Filter: one brand inside the company, for example company "Google" with hiring_brand "YouTube"; used only together with company. | |
| salary_floor | No | Advanced filter: minimum annualized salary in USD; a posting qualifies when the lower bound of its pay band reaches the floor. Jobs without a USD salary are dropped. | |
| posted_days_ago | No | Number of days ago to search for jobs (1-365) | |
| employment_types | No | Filter: jobs offered as any of these employment types (full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other). | |
| exclude_companies | No | Advanced filter: official company names whose jobs are removed from the results, across every job board each employer posts on. | |
| experience_levels | No | Filter: jobs at any of these experience levels (entry_level, mid_level, senior_level, executive, level_not_stated). The level comes from the years of experience the posting asks for and the seniority in its title, the higher of the two; entry_level never includes a posting asking for more than two years. level_not_stated selects jobs whose level cannot be derived; it can be selected alone or alongside other levels. | |
| h1b_sponsors_only | No | Advanced filter: only companies known to sponsor H1B visas. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | No | |
| preview | No | |
| feedKind | No | |
| feedStatus | No | |
| totalCount | No | |
| continueUrl | No | |
| jobSearchId | No | |
| resultSetId | No | |
| statusOrder | No | |
| revalidating | No | |
| resultBatchId | No | |
| trackerWebUrl | No | |
| profileSetupUrl | No | |
| profileSetupState | No | |
| lowRelevanceNotice | No | |
| system_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses that results are ranked by fit, may include related roles, carry the same insight payload as job search, and that there is no next page. It also explains that a processing status means the personalized feed is still being prepared, which is valuable behavioral context for a tool with readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then adds only operationally relevant details: ranking, filters, no pagination, fallback behavior, and processing status. Each sentence contributes useful context for a complex 19-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 19 optional parameters, full schema coverage, annotations, and an output schema, the description provides the missing behavioral context an agent needs: personalization source, ranking, filter applicability, no pagination, sibling fallback, and processing status. Nothing critical appears absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter definitions are already well documented. The description adds useful semantic context that search filters and sort parameters apply to this personalized feed and that a different-profession query preserves the query and filters rather than substituting profile target roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: returns the authenticated user's personalized job recommendations built from resume, skills, target roles, and location. It also distinguishes this personalized feed from general job search by explaining that explicit queries for different professions fall back to the same search as jobs_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames this as the personalized recommendation feed and explains how to handle an explicit query for a different or unrecognized profession by using the same general job search as jobs_search. It does not give a full when-to-use-this-vs-jobs_search matrix, but the intended usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_searchSearch jobsAInspect
Searches a database for real-time job listings matching the user's criteria.
The query is the full job title or role: "Ruby Developer" rather than a bare keyword like "Ruby", which is too broad and matches unrelated fields. Results may be filtered by location, company, and how recently a job was posted.
Each result carries an id and resultItemId; jobs_details takes that id with the corresponding
result_item_id and returns the job's full description, requirements, and benefits. One call returns one answer: there is no next page, and the
response links to the same search on the FoundRole website for the rest of the list.
With a ready profile, a query for the profile's target profession or an omitted query uses the same personalized feed as jobs_recommendations and the website. Alternative titles matching that same profile target return the same ranked feed: parallel calls for those title variants can repeat jobs in separate widgets. Each call represents a distinct search intent, rather than a spelling variant of the same requested role. A different or unrecognized profession uses general job search, preserving the explicit query and filters. An omitted location uses the profile location. Without a ready profile, search uses the general job listings. Job details include FoundRole salary benchmarks, H-1B sponsorship signals, E-Verify status, and job-trust analysis; list-level employer signals follow the user's current entitlements.
Constraints in the user's request — remote-only work, H1B sponsorship, a minimum salary, a minimum match grade — are the search parameters remote, h1b_sponsors_only, salary_floor, and min_match; sort orders the results by relevance, newest, salary or personal match. The search enforces only constraints passed as parameters; a constraint left out of the call is not applied to the result set.
Job type, work mode, required education, experience level, benefits, bonuses, employers to include or exclude, and the search radius are the parameters employment_types, work_modes, education, experience_levels, benefits, bonuses_only, companies, exclude_companies and radius. Remote and hybrid are independent work modes: a remote search never returns hybrid jobs. A job that does not state the filtered attribute is left out while that filter is set. One brand inside a company is hiring_brand next to company.
A company name that several employers share covers all of them, and the response names each with its domain; an employer's domain in place of a name (company, companies or exclude_companies) means that employer alone.
When nothing matches, a city search is repeated within 100 miles and the response says so; a search limited by posted_days_ago keeps that limit and reports how many jobs match over a longer period instead of listing them.
Advanced filters (sort, min_match, h1b_sponsors_only, salary_floor, remote, work_modes, benefits, bonuses_only, companies, exclude_companies; sort only when ordering by salary or match, companies only when it names more than one employer) apply for every account. One answer lists the first matching jobs and states how many further jobs match.
Each response includes a system_instruction describing how to present the results for the current client.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Result order (score, posted_at, match, salary): score is relevance and the default, posted_at is newest first, salary is highest pay first, match is best personal fit first and needs a resume. Ordering by salary or match is an advanced option. | |
| query | No | The full job title or skill (e.g., "Ruby Developer", NOT just "Ruby") | |
| radius | No | Search radius in miles around a city location (default 40); not used for state, country or remote searches. | |
| remote | No | Advanced filter: only remote-eligible jobs, matched across the whole country of the requested location rather than its radius. | |
| company | No | The official company name, or the domain of one employer | |
| benefits | No | Advanced filter: benefit names such as "health insurance", "401k" or "parental leave"; a job qualifies only when it states every listed benefit. Names that match no known benefit are ignored. | |
| location | No | Geographic location (e.g., 'Boston, MA') | |
| companies | No | Filter: official company names; a job from any of them qualifies, across every job board each employer posts on. More than one company makes it an advanced filter. Next to company, a job has to match both; hiring_brand narrows company only. | |
| education | No | Filter: jobs whose posting requires one of these education levels (no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree); bachelor_degree means the posting asks for a bachelor degree, not that it suits someone holding one. | |
| min_match | No | Advanced filter: lowest personal FoundRole match grade to keep, the same letter each job shows in insights.match.grade. A and A- are rare even for a strong resume; B keeps good and strong matches; C+ also keeps fair ones. Needs a resume on the account. | |
| work_modes | No | Advanced filter: jobs in any of these work modes (on_site, remote, hybrid). remote is matched across the whole country of the location, the others within the radius. ["remote"] is the same search as remote: true. | |
| bonuses_only | No | Advanced filter: only jobs that state a bonus (sign-on, performance, referral, commission and the like). | |
| hiring_brand | No | Filter: one brand inside the company, for example company "Google" with hiring_brand "YouTube"; used only together with company. | |
| salary_floor | No | Advanced filter: minimum annualized salary in USD; a posting qualifies when the lower bound of its pay band reaches the floor. Jobs without a USD salary are dropped. | |
| posted_days_ago | No | Number of days ago to search for jobs (1-365) | |
| employment_types | No | Filter: jobs offered as any of these employment types (full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other). | |
| exclude_companies | No | Advanced filter: official company names whose jobs are removed from the results, across every job board each employer posts on. | |
| experience_levels | No | Filter: jobs at any of these experience levels (entry_level, mid_level, senior_level, executive, level_not_stated). The level comes from the years of experience the posting asks for and the seniority in its title, the higher of the two; entry_level never includes a posting asking for more than two years. level_not_stated selects jobs whose level cannot be derived; it can be selected alone or alongside other levels. | |
| h1b_sponsors_only | No | Advanced filter: only companies known to sponsor H1B visas. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | No | |
| preview | No | |
| feedKind | No | |
| feedStatus | No | |
| continueUrl | No | |
| jobSearchId | No | |
| resultSetId | No | |
| statusOrder | No | |
| revalidating | No | |
| resultBatchId | No | |
| trackerWebUrl | No | |
| profileSetupUrl | No | |
| profileSetupState | No | |
| lowRelevanceNotice | No | |
| system_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present but odd for a search tool (readOnlyHint=false, not idempotent), and the description neither explains nor contradicts that. It does add real behavior beyond the annotations: no pagination, city searches silently widened to 100 miles, posted_days_ago limits reported rather than relaxed, entitlement-gated employer signals, and a system_instruction in every response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the routing to jobs_details are front-loaded, which is good, but the body sprawls across ten dense paragraphs with repeated enumeration of the advanced filter list and awkward fragments like "One brand inside a company is hiring_brand next to company." Valuable content, weak structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter, zero-required tool with dual profile/general paths, the description covers fallback behavior, entitlements, result-limit reporting, and the trigger for following up with jobs_details. An output schema exists, so return-field detail is correctly omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Coverage is 100% so the baseline is 3, but the description adds semantics the schema does not: unpassed constraints are not applied, remote and hybrid are independent modes so a remote search never returns hybrid, a job lacking a filtered attribute is dropped, a shared company name covers all employers while a domain means one, and company plus hiring_brand intersect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb (searches) plus resource (database of real-time job listings) and scope. It then differentiates from siblings by name, explaining that jobs_details takes the returned `id`/`resultItemId` and that jobs_recommendations shares the personalized feed. An agent can route without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance: query is a full title not a bare keyword, jobs_details follows for full descriptions, jobs_recommendations when a ready profile targets the profession, distinct search intents vs spelling variants of the same role. It also states the negative cases (unrecognized profession falls to general search) and profile/no-profile behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_searchSearch career guidesARead-onlyIdempotentInspect
Searches FoundRole's published content by semantic similarity and returns the most relevant sources for a job-search question: career-guidance blog articles plus FoundRole site pages that describe the product's features (job tracker, H1B salary data, AI job search) and industry/sector career landings. Each article carries a title, url, summary, a content excerpt, publication date, and tags; each page carries a title, url, description, and its FAQ entries — enough material to answer the question and link the source.
Two optional facets add further result groups: company returns FoundRole's employer profile pages matching that company name; location returns the market landing page for that city, state, or country — an analytical page about that labour market, not a list of openings. The facets describe what the user is asking about — a company mentioned only in passing does not need the company facet.
Returns empty groups when nothing is relevant rather than padding with off-topic content. Results are the closest matches to the given question, not an index of the site's full coverage; questions about overall topic coverage are answered by knowledge_topics, which lists the blog's categories and tags with article counts. It does not search job listings and reports no open-job counts — jobs_search covers live roles, including questions about openings for a particular job title. Each response includes a system_instruction describing how to present the sources.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum articles to return (default 5) | |
| query | Yes | The career, job-search, or FoundRole product question to answer | |
| company | No | A company name, when the question is about that employer — returns FoundRole company profile pages | |
| location | No | A city, state, or country, when the question is about that labour market — returns its market landing page |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | No | |
| articles | No | |
| totalCount | No | |
| companyPages | No | |
| landingPages | No | |
| profileSetupUrl | No | |
| system_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the safety profile is covered; the description adds genuinely non-derivable behavior: empty groups returned instead of off-topic padding, results being closest matches rather than a full index, and the presence of a system_instruction in the response. It does not discuss pagination or ranking cutoff, but the annotations carry the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and corpora, then facets, then exclusions and return behavior. It is on the longer side and could trim the enumerated product-feature list, but nearly every sentence carries routing or behavioral information that isn't in the structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't restate return values, yet it still sketches the fields (title, url, summary, excerpt, date, tags) enough to set expectations. Combined with full schema coverage, clear sibling routing, and disclosed empty-result semantics, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema lacks: the company facet yields employer profile pages (not generic mentions) and the location facet yields an analytical labour-market landing page, explicitly 'not a list of openings.' The passing-mention caveat further disambiguates when to set the facets.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (searches) and resource (FoundRole's published content) with the retrieval mechanism (semantic similarity) and enumerates exactly what corpora are covered: blog articles, product/site pages, and industry landing pages. It explicitly contrasts itself with knowledge_topics and jobs_search, so an agent can distinguish it from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternatives (knowledge_topics for coverage questions, jobs_search for live roles) and the conditions that select them. It also gives a concrete when-not rule for the facets: 'a company mentioned only in passing does not need the company facet.' This is explicit routing, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_topicsList career guide topicsARead-onlyIdempotentInspect
Lists what FoundRole's published career-guidance blog covers: every category and the most-used tags, each with its published-article count and url, plus the total number of published articles. This is the factual source for questions about the blog's topics or overall coverage. It takes no parameters and reflects the live published corpus. It does not retrieve articles for a specific question; knowledge_search does that.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tags | No | |
| categories | No | |
| totalArticles | No | |
| system_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world and non-destructive, so safety is covered. The description adds genuinely new context beyond that: no parameters, freshness ('reflects the live published corpus'), and the shape of what comes back. It stops short of noting volatility of counts or any caching/rate behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the payload, then follows with scope, freshness, and the exclusion/alternative in short sentences. The opening sentence is somewhat clause-heavy (categories, tags, counts, urls, totals) but every element carries information an agent can act on; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, and the annotations cover the safety profile. Combined with explicit no-parameter confirmation and the sibling routing note, an agent has everything needed to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the schema is trivially complete and the description explicitly confirms 'It takes no parameters,' which usefully tells the agent not to hunt for filters like category or tag. There is no further semantic depth available to add for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (categories, most-used tags) with their payload (article counts, url, total article count). Explicitly positions itself against the sibling knowledge_search, so an agent can distinguish the two 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both when to use it ('factual source for questions about the blog's topics or overall coverage') and when not ('does not retrieve articles for a specific question'), and names the alternative that handles that case. This is precisely the routing information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reminder_deleteDelete a reminderBDestructiveInspect
Deletes a reminder from a tracked job.
Input:
tracked_job_id: The tracked job ID —trackedJobs[].idfrom tracker_list output, distinct fromtrackable.idandjob.id(required)
Output: Returns the updated tracked job with reminderAt cleared.
| Name | Required | Description | Default |
|---|---|---|---|
| tracked_job_id | Yes | The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond the annotations: the effect is clearing `reminderAt` on the tracked job rather than removing the job. It does not address what happens if no reminder exists, which matters given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and clear, but the Input and Output blocks largely duplicate the input schema's parameter description and the output schema respectively. Those sections dilute rather than sharpen the definition, though the total length remains short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, full schema coverage, an output schema, and annotations, the definition covers the essentials: what it does, which ID to supply, and the resulting state. The remaining gap is failure behavior (deleting a non-existent reminder) for a mutation flagged as non-idempotent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, so the schema already carries the semantics. The Input section of the description restates the schema text nearly verbatim, adding no syntax, format, or sourcing detail beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Deletes a reminder from a tracked job,' which clearly separates it from sibling verbs like reminder_set or reminder_list without opening a schema. It does not, however, explicitly name an alternative or contrast itself with them, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use/when-not-to-use guidance or named alternative (e.g., reminder_set for replacing a reminder). The only guidance is implicit and ID-scoped: the description warns that `tracked_job_id` must come from `tracker_list` output and is distinct from `trackable.id` and `job.id`, which is a partial disambiguation guideline at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reminder_listList remindersBRead-onlyInspect
Lists tracked jobs that have reminders set, ordered by reminder time (soonest first).
Input:
limit: Number of results to return (default 20, max 50)
Output: Returns a list of tracked jobs with active reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (default 20, max 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJobs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description usefully adds the sort order (soonest first) and that only jobs with *active* reminders appear, but says nothing about pagination, total counts, or how to page past the 50-result cap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is front-loaded and earns its place. The Input section duplicates the schema description word-for-word and the Output section restates what the output schema already covers, so roughly a third of the text is redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list with one optional, fully documented parameter and an existing output schema, the description is nearly sufficient — the agent needs no return-value detail. The remaining gap is routing guidance among the many sibling list/search/alert tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single `limit` parameter is fully documented in the schema. The Input block merely restates it verbatim, adding no syntax, ordering, or default behavior beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope ("Lists tracked jobs that have reminders set") plus an ordering guarantee (soonest first), which separates it from tracker_list and jobs_search. It stops short of naming a sibling to prefer or avoid, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. With siblings like tracker_list and reminder_set/reminder_delete in the same namespace, the description never says which one to pick when an agent wants jobs versus reminders versus alerts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reminder_setSet a follow-up reminderADestructiveInspect
Sets a reminder for a tracked job. Sends a confirmation email with .ics calendar attachment.
Input:
tracked_job_id: The tracked job ID —trackedJobs[].idfrom tracker_list output, distinct fromtrackable.idandjob.id(required)remind_at: Reminder date/time in ISO 8601 format, e.g. "2025-03-15T10:00:00Z" (required, must be in the future)
Output: Returns the updated tracked job with reminderAt field.
| Name | Required | Description | Default |
|---|---|---|---|
| remind_at | Yes | ISO 8601 datetime, e.g. "2025-03-15T10:00:00Z" (must be in the future) | |
| tracked_job_id | Yes | The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveness/idempotency/open-world, and the description adds genuinely new context: an outbound confirmation email with a calendar attachment is sent, and remind_at must be in the future. It doesn't address reversibility or what happens on repeat calls, which matters given idempotentHint=false, but the email side effect is a real disclosure beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-sentence purpose followed by clearly labeled Input/Output sections with short bullets. Slightly redundant: the Output section restates return data that the output schema already defines, and the Input bullets duplicate the schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not be explained, and the description covers purpose, side effect, and both parameter constraints. What's missing for a non-idempotent, destructive-hinted mutation is any note on repeat-call behavior or how to undo it (e.g., pointing at reminder_delete).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description's parameter notes are essentially verbatim copies of the schema property descriptions (including the trackedJobs[].id vs trackable.id/job.id disambiguation and the future-datetime constraint). It adds no syntax, format, or default information beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sets a reminder for a tracked job') and immediately names the observable side effect (confirmation email with .ics attachment). The scope is narrow enough that an agent can separate it from reminder_list/reminder_delete and from tracker_* siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the tool's narrow scope and by the hint that tracked_job_id comes from tracker_list, but the description never states when to use this versus reminder_delete or reminder_list, nor any prerequisites for setting up a reminder. No explicit when/when-not guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_checkCheck how hiring software reads a resumeARead-onlyIdempotentInspect
Checks resume text for machine-readable sections, recognized skills, contact channels, a headline, and experience date ranges using FoundRole's deterministic parser.
Pass resume_text to check plain text supplied in the conversation. If resume_text is omitted, the tool reads the previously extracted text of the primary resume in the authenticated user's FoundRole account. It returns a readability band (strong, good, partial) and the single biggest loss. Depending on the account it also returns additional findings and the parsed facts (headline, years of experience, sections, contact channels, recognized skill count). Each finding includes a suggested fix. A saved report link is returned only when the account already has access to that report. This is FoundRole's text-readability assessment, not a test against a named ATS, a hiring prediction, or a file-layout check. Pasted text does not preserve the original PDF or DOCX layout.
The tool does not upload a file, create a saved resume or report, change the user's profile, submit an application, or fetch URLs found in the text. It may return a FoundRole website link; opening that link and uploading or editing a resume are separate user actions. Operational request records and diagnostics may retain tool inputs; this tool does not promise that submitted text is never stored.
| Name | Required | Description | Default |
|---|---|---|---|
| resume_text | No | Plain text of the resume to check, when it is available in the conversation. Omit to check the resume uploaded to the user's FoundRole account. Minimum 200 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| band | No | |
| mode | Yes | |
| findings | No | |
| parsedAs | No | |
| profileSetupUrl | No | |
| studioReportUrl | No | |
| system_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only/idempotent profile, yet the description adds real behavioral context beyond them: the parse is deterministic (not a named-ATS simulation), the report link appears only when the account has access, pasted text loses PDF/DOCX layout, and inputs may be retained in operational logs. This level of disclosure is far above the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the two usage modes, and most sentences carry non-redundant scope or retention information. It is somewhat long and the negative-scope claims ('not a named ATS... not a file-layout check' plus the 'does not upload/create/change/submit/fetch' list) overlap enough that a tighter phrasing would lose nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description still names the return shape (readability band, biggest loss, findings with suggested fixes, parsed facts) and covers retention and safety. For a low-complexity one-param tool with annotations and an output schema, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single resume_text parameter, its omit-to-use-account fallback, and the 200-character minimum are already documented in the schema. The description restates this rather than adding syntax or format detail beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Checks') and resource ('resume text') plus the exact facets examined: machine-readable sections, recognized skills, contact channels, headline, and experience date ranges. No sibling overlaps with this capability, and the description also explicitly bounds what it is not (not an ATS test, hiring prediction, or layout check).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly distinguishes the two invocation modes: pass resume_text for conversation-supplied text, omit it to read the account's primary resume. It also states exclusions (no upload, no saved resume/report, no application submission, no URL fetching), so the agent knows when this tool is and is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_addSave a job to the trackerAIdempotentInspect
Tracks a job from jobs_search results in the user's job tracker, identified by its job_id. For a job found elsewhere on the open web (with a URL but no jobs_search job_id), tracker_add_external is the right tool instead.
Fields:
job_id: the job ID from jobs_search results (required)status: initial status (saved, applied, interviewing, offered, archived); defaults to "saved"sub_status: sub-status within the main status: saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_companynotes: notes about the job
Returns the tracked job with its details. Repeated saves return the existing tracked job. A job that was previously removed from the tracker is restored with its earlier status and notes.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Notes about this job | |
| job_id | Yes | The job ID from jobs.search results | |
| status | No | Initial tracking status: saved, applied, interviewing, offered, archived | |
| sub_status | No | Sub-status within the main status, valid only for that status — saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company | |
| result_item_id | No | The result occurrence ID returned with the selected job |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, and the description reinforces this ('repeated saves return the existing tracked job'). More valuable is the non-obvious disclosure that a previously removed job is restored with its earlier status and notes — a side effect an agent could not infer from annotations. It stops short of covering auth or rate-limit behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the sibling routing rule are front-loaded in the first two sentences, which is the right ordering. The long sub_status enumeration duplicates the schema description nearly verbatim and inflates length, but the field list is otherwise tight and each remaining sentence (idempotency, restore behavior) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description still summarizes the return shape. Idempotency, restoration semantics, and the external-tool alternative are all covered, so an agent has enough to call it correctly; only the undocumented result_item_id parameter and lack of permission context leave a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3, but the description adds the default value ('status defaults to "saved"') which the schema does not state, plus an enumeration of valid status values in one place. It omits the schema's result_item_id parameter entirely, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (tracks/saves) and resource (a job from jobs_search results into the user's job tracker), with the identifying key (job_id) named up front. It explicitly differentiates itself from the sibling tracker_add_external, so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use and when-not-to-use: jobs with a jobs_search job_id go here, while jobs found on the open web (URL, no job_id) must go to tracker_add_external. That is a concrete routing rule to the correct sibling, not just implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_add_externalSave a job from another site to the trackerAIdempotentInspect
Saves a job posting found anywhere on the open web into the user's tracker. For jobs that came from jobs_search results, tracker_add (which takes a job_id) is the right tool instead. A job seen elsewhere in the conversation needs no prior jobs_search call — its URL and details from the conversation are sufficient input.
url, company_name, title_name, location_name, and description identify the posting
and are the only required fields. Every structured fact field (salary, dates, employment type,
education, experience) is optional: a fact the source does not state is simply omitted (or
null), and FoundRole's own extractors derive missing salary, employment, work-arrangement,
education, experience, skills, benefits, and bonuses from the description. A save never waits
on facts the source did not provide. The optional client_extraction object carries
evidence-backed skills, technology, benefits, bonuses, seniority, industry, management,
clearance, visa, and remote-scope labels when source excerpts for them exist; FoundRole
validates and stores those labels separately.
Fields:
url: the job posting's direct URL (required; not a company homepage)company_name: company name (required)title_name: job title (required)location_name: location, e.g. "New York, NY" (required)description: the posting's description from the source result; a short summary is acceptable (required)salary_min_value/salary_max_value: salary range bounds (numbers)salary_value: a single salary figure when there is no range (number)posted_at: ISO 8601 posting datesalary_currency: ISO 4217 currency codesalary_type: one of year, month, week, day, houremployment_type: array of full_time, part_time, contractor, temporary, intern, volunteer, per_diem, otherwork_location_type: one of on_site, remote, hybrideducation_requirements: array of no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degreeexperience_months: minimum required experience in months (number)client_extraction: evidence-backed extraction object; fields without source evidence are omittedstatus: initial tracking status (saved, applied, interviewing, offered, archived); defaults to "saved"sub_status: sub-status within the main status: saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_companynotes: notes about the job
Returns the tracked job. Repeated saves return the existing tracked job.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Direct URL of the specific job posting; a company homepage is invalid | |
| notes | No | Notes about this job | |
| status | No | Initial tracking status: saved, applied, interviewing, offered, archived | |
| posted_at | No | Posting date as ISO 8601, when the source states it | |
| sub_status | No | Sub-status within the main status, valid only for that status — saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company | |
| title_name | Yes | Job title from the posting | |
| description | Yes | Complete posting text available in the conversation; a source summary is valid only when no fuller posting text is available | |
| salary_type | No | Salary period: year, month, week, day, hour | |
| company_name | Yes | Company name from the posting | |
| salary_value | No | Single salary amount, when the posting gives one figure instead of a range | |
| location_name | Yes | Location text from the posting, including Remote when stated | |
| employment_type | No | Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other | |
| salary_currency | No | ISO 4217 salary currency code, when stated | |
| salary_max_value | No | Salary range maximum, when stated | |
| salary_min_value | No | Salary range minimum, when stated | |
| client_extraction | No | Evidence-backed facts extracted by the client model from the posting; non-null evidence is a short source excerpt rather than an inference. Fields absent from the source are omitted or null. | |
| experience_months | No | Minimum required experience in months, when stated | |
| work_location_type | No | Work arrangement: on_site, remote, hybrid | |
| education_requirements | No | Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by disclosing that a save never waits on facts the source omits, that FoundRole extractors derive missing salary/employment/education/skills, that client_extraction labels are validated and stored separately, and that repeated saves return the existing record (reinforcing idempotentHint). No auth or rate-limit context, but the mutation/extraction behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening two paragraphs are tight and front-loaded, but the extended field enumeration largely restates a schema that already has 100% description coverage, repeating enums verbatim. Structured well, yet noticeably longer than it needs to be for an agent that will read the schema anyway.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter mutation tool, the description covers required vs optional fields, the derivation/omission policy, the client_extraction evidence contract, and idempotent re-save behavior; return values are covered by the output schema. Nothing an agent needs in order 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: status 'defaults to saved', the fact that non-source facts are simply omitted or null, and that the description field accepts a short summary. The bulk of the field list duplicates schema enums, so it does not reach the top of the scale.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('saves a job posting found anywhere on the open web into the user's tracker') with explicit scope, and directly names the sibling it is not (tracker_add, which takes a job_id). An agent can distinguish it from tracker_add 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the alternative ('For jobs that came from jobs_search results, tracker_add ... is the right tool instead') and removes a common false prerequisite ('needs no prior jobs_search call'). Both the selection condition and the exclusion are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_listList tracked jobsARead-onlyInspect
Lists the user's tracked jobs with optional filtering and pagination.
Input:
status: Filter by status (saved, applied, interviewing, offered, archived)limit: Number of results per page (default 20, max 50)offset: Number of results to skip (default 0)
Output: Returns a list of tracked jobs grouped by status with pagination info. Each response includes a system_instruction describing how to present the results for the current client.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results per page (default 20, max 50) | |
| offset | No | Number of results to skip (default 0) | |
| status | No | Filter by status: saved, applied, interviewing, offered, archived |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: results are grouped by status and each response carries a system_instruction on how to present results for the current client, which is not derivable from the input schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The layout is front-loaded and scannable with clear Input/Output sections, and the opening sentence carries the core purpose. The Input block largely duplicates the schema, which costs a little, but the overall size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, no-required-parameter list tool with a rich input schema, annotations, and an output schema, the description covers purpose, parameters, and return shape adequately. The only real omission is routing guidance versus sibling tracker_* and job_alert_* tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters, their defaults, and bounds. The description restates the same information verbatim (status values, default 20/max 50, default 0) without adding format, syntax, or edge-case meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Lists the user's tracked jobs') with scope details (filtering, pagination). It is clear what the tool returns, but it never distinguishes itself from sibling read tools like job_alert_list or jobs_search, so an agent must infer the boundary from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as job_alert_list or jobs_search. The mention of 'optional filtering and pagination' describes behavior rather than the conditions under which this tool should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_removeRemove a job from the trackerADestructiveInspect
Removes a job from the user's job tracker.
Input:
tracked_job_id: The tracked job ID —trackedJobs[].idfrom tracker_list output, distinct fromtrackable.idandjob.id(required)
Output: Confirms the job was removed from tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| tracked_job_id | Yes | The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, non-idempotent, non-read-only, so the safety profile is covered. The description adds only that the operation is confirmed on completion; it does not disclose whether removal is reversible, whether it requires the job to exist, or what happens on repeat calls — useful context given destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then cleanly sectioned into Input and Output. Slight redundancy: the Input block duplicates the schema description word-for-word, and the Output line restates what an output schema already conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single fully documented required parameter, an output schema, and annotations carrying the destructive/idempotency profile, little is missing. The gap is the absence of any note on reversibility or precondition behavior worth having for a destructive single-target operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description's Input block reproduces the schema text verbatim, so no meaning is added beyond the structured field. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (removes) and resource (a job from the user's job tracker), and the intent is unambiguous against siblings like tracker_add, tracker_update, and tracker_list. An agent can distinguish the removal operation without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus tracker_update or tracker_update_status, and no prerequisites or conditions. The only routing help is implicit — the ID distinction hints that tracker_list should be consulted first, but that is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_updateUpdate a tracked jobADestructiveInspect
Updates details of a tracked job (notes, deadline, salary, tags).
Input:
tracked_job_id: The tracked job ID —trackedJobs[].idfrom tracker_list output, distinct fromtrackable.idandjob.id(required)notes: Updated notesdeadline: Deadline date (ISO 8601 format)salary_offered: Salary amountsalary_offered_type: Salary type: year, month, week, day, hourtags: Comma-separated tags (e.g., "remote,startup,tech")reminder_at: Reminder date/time in ISO 8601 format, e.g. "2025-03-15T10:00:00Z" (must be in the future, or empty to clear)
Output: Returns the updated tracked job.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Comma-separated tags (e.g., "remote,startup,tech") | |
| notes | No | Notes about this job | |
| deadline | No | Deadline date in ISO 8601 format | |
| reminder_at | No | ISO 8601 datetime, e.g. "2025-03-15T10:00:00Z" (must be in the future, or empty to clear) | |
| salary_offered | No | Salary amount | |
| tracked_job_id | Yes | The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required) | |
| salary_offered_type | No | Salary type: year, month, week, day, hour |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is carried by structured data. The description adds modest value by listing the mutable fields and the reminder 'must be in the future, or empty to clear' rule, but it never addresses the key non-idempotent-update question: whether omitting a field preserves or clears it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The header/Input/Output structure front-loads the operation and the fields, and the required ID guidance comes first. It is somewhat verbose because it duplicates the schema field descriptions line for line, but nothing is incoherent or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with full schema coverage and an output schema, the description covers the required ID sourcing, the field set, and the one datetime constraint. The main remaining gap is partial-update semantics for omitted fields, which matters given idempotentHint=false.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema, and the description largely restates those same descriptions verbatim. It adds no new syntax, format, or interaction detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (updates a tracked job) and enumerates which fields can be changed, which implicitly separates it from tracker_update_status and tracker_remove. It never names those siblings explicitly, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It usefully tells the agent where the required ID comes from (tracker_list output) and warns it is distinct from trackable.id and job.id, which is real guidance. However, there is no explicit when-to-use vs tracker_update_status, nor any statement of when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_update_statusMove a tracked job to another stageCDestructiveInspect
Updates the status of a tracked job.
Input:
tracked_job_id: The tracked job ID —trackedJobs[].idfrom tracker_list output, distinct fromtrackable.idandjob.id(required)status: New status: saved, applied, interviewing, offered, archived (required)sub_status: Sub-status within the main status, valid only for that status (optional): saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company
Output: Returns the updated tracked job.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | New status: saved, applied, interviewing, offered, archived | |
| sub_status | No | Sub-status within the main status, valid only for that status — saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company | |
| tracked_job_id | Yes | The tracked job ID — `trackedJobs[].id` from tracker_list output, distinct from `trackable.id` and `job.id` (required) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | No | |
| totalCount | No | |
| trackedJob | No | |
| statusOrder | No | |
| trackedJobs | No | |
| trackerWebUrl | No | |
| subStatusOrder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered by structured data. The description does add one genuinely useful behavioral constraint — that sub_status is 'valid only for that status' — plus the fact that the updated tracked job is returned. It does not say whether the prior status is lost, whether the transition is reversible, or any auth requirements, but with rich annotations a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one clean sentence, but the 'Input' section re-enumerates every parameter and its full enum value list, all of which already exist verbatim in the schema. That duplication roughly triples the length without adding information, which is padding rather than concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description is not obligated to describe return values, and annotations carry the safety profile, so the core coverage is adequate. The missing piece is routing: for a status-mutation tool sitting beside tracker_update, the absence of any when-to-use guidance leaves the main decision an agent faces unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the parameter list essentially verbatim from the schema, adding no syntax, format, or edge-case guidance beyond what is already structured — notably it does not explain what happens if a mismatched sub_status is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Updates the status of a tracked job'), and the title adds the 'move to another stage' framing, which separates it from tracker_update. However, it never explicitly names tracker_update or explains what that sibling does differently, so the differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many siblings, most notably tracker_update and tracker_add. The description only lists inputs and outputs; an agent must guess whether status changes belong here or in tracker_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
jobs_recommendations3 fields changed- changed
Input schema / properties / company / descriptionPrevious value: -"The official company name"New value: +"The official company name, or the domain of one employer" - removed
Input schema / properties / confirmed_work_fromRemoved value: -{ - "description": "Advanced filter: with strict_remote, also leaves out postings that do not say where the work can be done from.", - "type": "boolean" -} - removed
Input schema / properties / strict_remoteRemoved value: -{ - "description": "Advanced filter: only postings checked as fully remote that can be worked from the requested location: the posting names that area, allows anywhere, or does not say where. Stricter than remote; work_modes other than remote do not apply with it.", - "type": "boolean" -}
- Changed
jobs_search3 fields changed- changed
Input schema / properties / company / descriptionPrevious value: -"The official company name"New value: +"The official company name, or the domain of one employer" - removed
Input schema / properties / confirmed_work_fromRemoved value: -{ - "description": "Advanced filter: with strict_remote, also leaves out postings that do not say where the work can be done from.", - "type": "boolean" -} - removed
Input schema / properties / strict_remoteRemoved value: -{ - "description": "Advanced filter: only postings checked as fully remote that can be worked from the requested location: the posting names that area, allows anywhere, or does not say where. Stricter than remote; work_modes other than remote do not apply with it.", - "type": "boolean" -}
1 tool update
- Changed
resume_check5 fields changed- added
Output schema / properties / findings / items / properties / fixAdded value: +{ + "type": "string" +} - removed
Output schema / properties / limitedRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / moreFindingsRemoved value: -{ - "type": "integer" -} - added
Output schema / properties / profileSetupUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / uploadUrlRemoved value: -{ - "type": [ - "string", - "null" - ] -}
5 tool updates
- Changed
jobs_analyze_external1 field changed- added
Output schema / properties / jobs / items / properties / insights / properties / employerFilingHistoryAdded value: +{ + "properties": { + "attribution": { + "enum": [ + "FILED_BY" + ], + "type": "string" + }, + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "UNRESOLVED_EMPLOYER", + "NOT_READY" + ], + "type": "string" + }, + "bindingStatus": { + "enum": [ + "LEGACY_UNREVIEWED", + "UNRESOLVED" + ], + "type": "string" + }, + "coverage": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "current": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "workerPositions": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "currentPeriod": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "history": { + "properties": { + "access": { + "enum": [ + "AVAILABLE", + "RESTRICTED", + "UNAVAILABLE" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "points": { + "items": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "workerPositions": { + "type": "integer" + } + }, + "type": "object" + }, + "type": [ + "array", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "type": "string" + }, + "subject": { + "properties": { + "domain": { + "type": "string" + }, + "domainDictionaryId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "wageLevel": { + "properties": { + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "INSUFFICIENT_SAMPLE", + "NOT_STATED", + "NOT_READY", + "UNRESOLVED_EMPLOYER" + ], + "type": "string" + }, + "breakdown": { + "properties": { + "level1Pct": { + "type": [ + "number", + "null" + ] + }, + "level2Pct": { + "type": [ + "number", + "null" + ] + }, + "level3Pct": { + "type": [ + "number", + "null" + ] + }, + "level4Pct": { + "type": [ + "number", + "null" + ] + }, + "notStatedPct": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "sampleSize": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": [ + "object", + "null" + ] +}
- Changed
jobs_compare1 field changed- added
Output schema / properties / jobs / items / properties / insights / properties / employerFilingHistoryAdded value: +{ + "properties": { + "attribution": { + "enum": [ + "FILED_BY" + ], + "type": "string" + }, + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "UNRESOLVED_EMPLOYER", + "NOT_READY" + ], + "type": "string" + }, + "bindingStatus": { + "enum": [ + "LEGACY_UNREVIEWED", + "UNRESOLVED" + ], + "type": "string" + }, + "coverage": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "current": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "workerPositions": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "currentPeriod": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "history": { + "properties": { + "access": { + "enum": [ + "AVAILABLE", + "RESTRICTED", + "UNAVAILABLE" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "points": { + "items": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "workerPositions": { + "type": "integer" + } + }, + "type": "object" + }, + "type": [ + "array", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "type": "string" + }, + "subject": { + "properties": { + "domain": { + "type": "string" + }, + "domainDictionaryId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "wageLevel": { + "properties": { + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "INSUFFICIENT_SAMPLE", + "NOT_STATED", + "NOT_READY", + "UNRESOLVED_EMPLOYER" + ], + "type": "string" + }, + "breakdown": { + "properties": { + "level1Pct": { + "type": [ + "number", + "null" + ] + }, + "level2Pct": { + "type": [ + "number", + "null" + ] + }, + "level3Pct": { + "type": [ + "number", + "null" + ] + }, + "level4Pct": { + "type": [ + "number", + "null" + ] + }, + "notStatedPct": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "sampleSize": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": [ + "object", + "null" + ] +}
- Changed
jobs_details1 field changed- added
Output schema / properties / job / properties / insights / properties / employerFilingHistoryAdded value: +{ + "properties": { + "attribution": { + "enum": [ + "FILED_BY" + ], + "type": "string" + }, + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "UNRESOLVED_EMPLOYER", + "NOT_READY" + ], + "type": "string" + }, + "bindingStatus": { + "enum": [ + "LEGACY_UNREVIEWED", + "UNRESOLVED" + ], + "type": "string" + }, + "coverage": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "current": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "workerPositions": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "currentPeriod": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "history": { + "properties": { + "access": { + "enum": [ + "AVAILABLE", + "RESTRICTED", + "UNAVAILABLE" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "points": { + "items": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "workerPositions": { + "type": "integer" + } + }, + "type": "object" + }, + "type": [ + "array", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "type": "string" + }, + "subject": { + "properties": { + "domain": { + "type": "string" + }, + "domainDictionaryId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "wageLevel": { + "properties": { + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "INSUFFICIENT_SAMPLE", + "NOT_STATED", + "NOT_READY", + "UNRESOLVED_EMPLOYER" + ], + "type": "string" + }, + "breakdown": { + "properties": { + "level1Pct": { + "type": [ + "number", + "null" + ] + }, + "level2Pct": { + "type": [ + "number", + "null" + ] + }, + "level3Pct": { + "type": [ + "number", + "null" + ] + }, + "level4Pct": { + "type": [ + "number", + "null" + ] + }, + "notStatedPct": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "sampleSize": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": [ + "object", + "null" + ] +}
- Changed
jobs_recommendations1 field changed- added
Output schema / properties / jobs / items / properties / insights / properties / employerFilingHistoryAdded value: +{ + "properties": { + "attribution": { + "enum": [ + "FILED_BY" + ], + "type": "string" + }, + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "UNRESOLVED_EMPLOYER", + "NOT_READY" + ], + "type": "string" + }, + "bindingStatus": { + "enum": [ + "LEGACY_UNREVIEWED", + "UNRESOLVED" + ], + "type": "string" + }, + "coverage": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "current": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "workerPositions": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "currentPeriod": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "history": { + "properties": { + "access": { + "enum": [ + "AVAILABLE", + "RESTRICTED", + "UNAVAILABLE" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "points": { + "items": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "workerPositions": { + "type": "integer" + } + }, + "type": "object" + }, + "type": [ + "array", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "type": "string" + }, + "subject": { + "properties": { + "domain": { + "type": "string" + }, + "domainDictionaryId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "wageLevel": { + "properties": { + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "INSUFFICIENT_SAMPLE", + "NOT_STATED", + "NOT_READY", + "UNRESOLVED_EMPLOYER" + ], + "type": "string" + }, + "breakdown": { + "properties": { + "level1Pct": { + "type": [ + "number", + "null" + ] + }, + "level2Pct": { + "type": [ + "number", + "null" + ] + }, + "level3Pct": { + "type": [ + "number", + "null" + ] + }, + "level4Pct": { + "type": [ + "number", + "null" + ] + }, + "notStatedPct": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "sampleSize": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": [ + "object", + "null" + ] +}
- Changed
jobs_search1 field changed- added
Output schema / properties / jobs / items / properties / insights / properties / employerFilingHistoryAdded value: +{ + "properties": { + "attribution": { + "enum": [ + "FILED_BY" + ], + "type": "string" + }, + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "UNRESOLVED_EMPLOYER", + "NOT_READY" + ], + "type": "string" + }, + "bindingStatus": { + "enum": [ + "LEGACY_UNREVIEWED", + "UNRESOLVED" + ], + "type": "string" + }, + "coverage": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "current": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "workerPositions": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "currentPeriod": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "history": { + "properties": { + "access": { + "enum": [ + "AVAILABLE", + "RESTRICTED", + "UNAVAILABLE" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "points": { + "items": { + "properties": { + "filings": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "workerPositions": { + "type": "integer" + } + }, + "type": "object" + }, + "type": [ + "array", + "null" + ] + } + }, + "type": "object" + }, + "id": { + "type": "string" + }, + "subject": { + "properties": { + "domain": { + "type": "string" + }, + "domainDictionaryId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "wageLevel": { + "properties": { + "availability": { + "enum": [ + "AVAILABLE", + "NO_FILINGS", + "INSUFFICIENT_SAMPLE", + "NOT_STATED", + "NOT_READY", + "UNRESOLVED_EMPLOYER" + ], + "type": "string" + }, + "breakdown": { + "properties": { + "level1Pct": { + "type": [ + "number", + "null" + ] + }, + "level2Pct": { + "type": [ + "number", + "null" + ] + }, + "level3Pct": { + "type": [ + "number", + "null" + ] + }, + "level4Pct": { + "type": [ + "number", + "null" + ] + }, + "notStatedPct": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "id": { + "type": "string" + }, + "period": { + "properties": { + "complete": { + "type": "boolean" + }, + "coveredQuarters": { + "items": { + "properties": { + "fiscalYear": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "quarter": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "endFiscalYear": { + "type": "integer" + }, + "endQuarter": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "startFiscalYear": { + "type": "integer" + }, + "startQuarter": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "sampleSize": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": [ + "object", + "null" + ] +}
10 tool updates
- Changed
job_alert_list2 fields changed- added
Output schema / properties / jobAlerts / items / properties / deliveryAdded value: +{ + "type": "string" +} - added
Output schema / properties / jobAlerts / items / properties / fastActiveAdded value: +{ + "type": "boolean" +}
- Changed
job_alert_subscribe3 fields changed- added
Input schema / properties / deliveryAdded value: +{ + "description": "Delivery mode: digest, fast; fast is not available on every account and needs a qualifying search", + "type": "string" +} - added
Output schema / properties / jobAlert / properties / deliveryAdded value: +{ + "type": "string" +} - added
Output schema / properties / jobAlert / properties / fastActiveAdded value: +{ + "type": "boolean" +}
- Changed
jobs_analyze_external5 fields changed- removed
Output schema / properties / jobs / items / properties / companyRatingRemoved value: -{ - "type": [ - "number", - "null" - ] -} - removed
Output schema / properties / jobs / items / properties / estimatedSalary / properties / basedOnRemoved value: -{ - "type": [ - "string", - "null" - ] -} - changed
Output schema / properties / jobs / items / properties / trackerInput / properties / location_name / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / studioUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / system_instructionAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_compare5 fields changed- removed
Output schema / properties / jobs / items / properties / companyRatingRemoved value: -{ - "type": [ - "number", - "null" - ] -} - removed
Output schema / properties / jobs / items / properties / estimatedSalary / properties / basedOnRemoved value: -{ - "type": [ - "string", - "null" - ] -} - changed
Output schema / properties / jobs / items / properties / trackerInput / properties / location_name / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / studioUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / system_instructionAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_details7 fields changed- added
Input schema / properties / job_id / minLengthAdded value: +1 - added
Input schema / properties / result_item_idAdded value: +{ + "description": "The result occurrence ID returned with the selected job", + "type": "string" +} - removed
Output schema / properties / job / properties / companyRatingRemoved value: -{ - "type": [ - "number", - "null" - ] -} - removed
Output schema / properties / job / properties / estimatedSalary / properties / basedOnRemoved value: -{ - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / job / properties / remoteCheckAdded value: +{ + "properties": { + "quotes": { + "items": { + "properties": { + "source": { + "type": "string" + }, + "text": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "workFrom": { + "properties": { + "allowedPlaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "excludedPlaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "quotes": { + "items": { + "properties": { + "source": { + "type": "string" + }, + "text": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "scope": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / job / properties / resultItemIdAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / studioUrlAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_recommendations34 fields changed- added
Input schema / properties / benefitsAdded value: +{ + "description": "Advanced filter: benefit names such as \"health insurance\", \"401k\" or \"parental leave\"; a job qualifies only when it states every listed benefit. Names that match no known benefit are ignored.", + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" +} - added
Input schema / properties / bonuses_onlyAdded value: +{ + "description": "Advanced filter: only jobs that state a bonus (sign-on, performance, referral, commission and the like).", + "type": "boolean" +} - added
Input schema / properties / companiesAdded value: +{ + "description": "Filter: official company names; a job from any of them qualifies, across every job board each employer posts on. More than one company makes it an advanced filter. Next to company, a job has to match both; hiring_brand narrows company only.", + "items": { + "type": "string" + }, + "maxItems": 20, + "type": "array" +} - added
Input schema / properties / companyAdded value: +{ + "description": "The official company name", + "type": "string" +} - added
Input schema / properties / confirmed_work_fromAdded value: +{ + "description": "Advanced filter: with strict_remote, also leaves out postings that do not say where the work can be done from.", + "type": "boolean" +} - added
Input schema / properties / educationAdded value: +{ + "description": "Filter: jobs whose posting requires one of these education levels (no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree); bachelor_degree means the posting asks for a bachelor degree, not that it suits someone holding one.", + "items": { + "enum": [ + "no_requirements", + "high_school", + "associate_degree", + "bachelor_degree", + "professional_certificate", + "postgraduate_degree" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / employment_typesAdded value: +{ + "description": "Filter: jobs offered as any of these employment types (full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other).", + "items": { + "enum": [ + "full_time", + "part_time", + "contractor", + "temporary", + "intern", + "volunteer", + "per_diem", + "other" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / exclude_companiesAdded value: +{ + "description": "Advanced filter: official company names whose jobs are removed from the results, across every job board each employer posts on.", + "items": { + "type": "string" + }, + "maxItems": 20, + "type": "array" +} - added
Input schema / properties / experience_levelsAdded value: +{ + "description": "Filter: jobs at any of these experience levels (entry_level, mid_level, senior_level, executive, level_not_stated). The level comes from the years of experience the posting asks for and the seniority in its title, the higher of the two; entry_level never includes a posting asking for more than two years. level_not_stated selects jobs whose level cannot be derived; it can be selected alone or alongside other levels.", + "items": { + "enum": [ + "entry_level", + "mid_level", + "senior_level", + "executive", + "level_not_stated" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / h1b_sponsors_onlyAdded value: +{ + "description": "Advanced filter: only companies known to sponsor H1B visas.", + "type": "boolean" +} - added
Input schema / properties / hiring_brandAdded value: +{ + "description": "Filter: one brand inside the company, for example company \"Google\" with hiring_brand \"YouTube\"; used only together with company.", + "type": "string" +} - changed
Input schema / properties / location / descriptionPrevious value: -"Optional preferred location name or slug"New value: +"Geographic location (e.g., 'Boston, MA')" - added
Input schema / properties / min_matchAdded value: +{ + "description": "Advanced filter: lowest personal FoundRole match grade to keep, the same letter each job shows in insights.match.grade. A and A- are rare even for a strong resume; B keeps good and strong matches; C+ also keeps fair ones. Needs a resume on the account.", + "enum": [ + "A", + "A-", + "B+", + "B", + "B-", + "C+", + "C" + ], + "type": "string" +} - removed
Input schema / properties / pageRemoved value: -{ - "description": "Recommendation page number", - "minimum": 1, - "type": "integer" -} - added
Input schema / properties / posted_days_agoAdded value: +{ + "description": "Number of days ago to search for jobs (1-365)", + "maximum": 365, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / queryAdded value: +{ + "description": "The full job title or skill (e.g., \"Ruby Developer\", NOT just \"Ruby\")", + "type": "string" +} - added
Input schema / properties / radiusAdded value: +{ + "description": "Search radius in miles around a city location (default 40); not used for state, country or remote searches.", + "maximum": 100, + "minimum": 5, + "type": "integer" +} - added
Input schema / properties / remoteAdded value: +{ + "description": "Advanced filter: only remote-eligible jobs, matched across the whole country of the requested location rather than its radius.", + "type": "boolean" +} - added
Input schema / properties / salary_floorAdded value: +{ + "description": "Advanced filter: minimum annualized salary in USD; a posting qualifies when the lower bound of its pay band reaches the floor. Jobs without a USD salary are dropped.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / sortAdded value: +{ + "description": "Result order (score, posted_at, match, salary): score is relevance and the default, posted_at is newest first, salary is highest pay first, match is best personal fit first and needs a resume. Ordering by salary or match is an advanced option.", + "enum": [ + "score", + "posted_at", + "match", + "salary" + ], + "type": "string" +} - added
Input schema / properties / strict_remoteAdded value: +{ + "description": "Advanced filter: only postings checked as fully remote that can be worked from the requested location: the posting names that area, allows anywhere, or does not say where. Stricter than remote; work_modes other than remote do not apply with it.", + "type": "boolean" +} - added
Input schema / properties / work_modesAdded value: +{ + "description": "Advanced filter: jobs in any of these work modes (on_site, remote, hybrid). remote is matched across the whole country of the location, the others within the radius. [\"remote\"] is the same search as remote: true.", + "items": { + "enum": [ + "on_site", + "remote", + "hybrid" + ], + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / continueUrlAdded value: +{ + "type": "string" +} - changed
Output schema / properties / feedStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Output schema / properties / jobs / items / properties / companyRatingRemoved value: -{ - "type": [ - "number", - "null" - ] -} - removed
Output schema / properties / jobs / items / properties / estimatedSalary / properties / basedOnRemoved value: -{ - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / jobs / items / properties / relatedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / jobs / items / properties / resultItemIdAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / lowRelevanceNoticeAdded value: +{ + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / nextPageRemoved value: -{ - "type": [ - "integer", - "null" - ] -} - added
Output schema / properties / previewAdded value: +{ + "properties": { + "continueUrl": { + "type": [ + "string", + "null" + ] + }, + "hidden": { + "type": "integer" + }, + "hiddenAtLeast": { + "type": "boolean" + }, + "shown": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / resultBatchIdAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / resultSetIdAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / system_instructionAdded value: +{ + "type": "string" +}
- Changed
jobs_search32 fields changed- added
Input schema / properties / benefitsAdded value: +{ + "description": "Advanced filter: benefit names such as \"health insurance\", \"401k\" or \"parental leave\"; a job qualifies only when it states every listed benefit. Names that match no known benefit are ignored.", + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" +} - added
Input schema / properties / bonuses_onlyAdded value: +{ + "description": "Advanced filter: only jobs that state a bonus (sign-on, performance, referral, commission and the like).", + "type": "boolean" +} - added
Input schema / properties / companiesAdded value: +{ + "description": "Filter: official company names; a job from any of them qualifies, across every job board each employer posts on. More than one company makes it an advanced filter. Next to company, a job has to match both; hiring_brand narrows company only.", + "items": { + "type": "string" + }, + "maxItems": 20, + "type": "array" +} - added
Input schema / properties / confirmed_work_fromAdded value: +{ + "description": "Advanced filter: with strict_remote, also leaves out postings that do not say where the work can be done from.", + "type": "boolean" +} - removed
Input schema / properties / cursorRemoved value: -{ - "description": "Pagination cursor. Treat as an opaque string. COPY EXACTLY.", - "type": "string" -} - added
Input schema / properties / educationAdded value: +{ + "description": "Filter: jobs whose posting requires one of these education levels (no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree); bachelor_degree means the posting asks for a bachelor degree, not that it suits someone holding one.", + "items": { + "enum": [ + "no_requirements", + "high_school", + "associate_degree", + "bachelor_degree", + "professional_certificate", + "postgraduate_degree" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / employment_typesAdded value: +{ + "description": "Filter: jobs offered as any of these employment types (full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other).", + "items": { + "enum": [ + "full_time", + "part_time", + "contractor", + "temporary", + "intern", + "volunteer", + "per_diem", + "other" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / exclude_companiesAdded value: +{ + "description": "Advanced filter: official company names whose jobs are removed from the results, across every job board each employer posts on.", + "items": { + "type": "string" + }, + "maxItems": 20, + "type": "array" +} - added
Input schema / properties / experience_levelsAdded value: +{ + "description": "Filter: jobs at any of these experience levels (entry_level, mid_level, senior_level, executive, level_not_stated). The level comes from the years of experience the posting asks for and the seniority in its title, the higher of the two; entry_level never includes a posting asking for more than two years. level_not_stated selects jobs whose level cannot be derived; it can be selected alone or alongside other levels.", + "items": { + "enum": [ + "entry_level", + "mid_level", + "senior_level", + "executive", + "level_not_stated" + ], + "type": "string" + }, + "type": "array" +} - removed
Input schema / properties / hide_low_qualityRemoved value: -{ - "description": "Advanced filter: hides postings with a risky ghost grade (D/F); ungraded postings stay.", - "type": "boolean" -} - added
Input schema / properties / hiring_brandAdded value: +{ + "description": "Filter: one brand inside the company, for example company \"Google\" with hiring_brand \"YouTube\"; used only together with company.", + "type": "string" +} - changed
Input schema / properties / min_match / descriptionPrevious value: -"Advanced filter: minimum personal FoundRole match score (0-100); needs a resume on the account."New value: +"Advanced filter: lowest personal FoundRole match grade to keep, the same letter each job shows in insights.match.grade. A and A- are rare even for a strong resume; B keeps good and strong matches; C+ also keeps fair ones. Needs a resume on the account." - added
Input schema / properties / min_match / enumAdded value: +[ + "A", + "A-", + "B+", + "B", + "B-", + "C+", + "C" +] - removed
Input schema / properties / min_match / maximumRemoved value: -100 - removed
Input schema / properties / min_match / minimumRemoved value: -0 - changed
Input schema / properties / min_match / typePrevious value: -"integer"New value: +"string" - added
Input schema / properties / radiusAdded value: +{ + "description": "Search radius in miles around a city location (default 40); not used for state, country or remote searches.", + "maximum": 100, + "minimum": 5, + "type": "integer" +} - changed
Input schema / properties / remote / descriptionPrevious value: -"Advanced filter: only remote-eligible jobs (respects the location/region scope)."New value: +"Advanced filter: only remote-eligible jobs, matched across the whole country of the requested location rather than its radius." - changed
Input schema / properties / salary_floor / descriptionPrevious value: -"Advanced filter: minimum annualized salary in USD; a posting qualifies when the midpoint of its pay band reaches the floor. Jobs without a USD salary are dropped."New value: +"Advanced filter: minimum annualized salary in USD; a posting qualifies when the lower bound of its pay band reaches the floor. Jobs without a USD salary are dropped." - added
Input schema / properties / sortAdded value: +{ + "description": "Result order (score, posted_at, match, salary): score is relevance and the default, posted_at is newest first, salary is highest pay first, match is best personal fit first and needs a resume. Ordering by salary or match is an advanced option.", + "enum": [ + "score", + "posted_at", + "match", + "salary" + ], + "type": "string" +} - added
Input schema / properties / strict_remoteAdded value: +{ + "description": "Advanced filter: only postings checked as fully remote that can be worked from the requested location: the posting names that area, allows anywhere, or does not say where. Stricter than remote; work_modes other than remote do not apply with it.", + "type": "boolean" +} - added
Input schema / properties / work_modesAdded value: +{ + "description": "Advanced filter: jobs in any of these work modes (on_site, remote, hybrid). remote is matched across the whole country of the location, the others within the radius. [\"remote\"] is the same search as remote: true.", + "items": { + "enum": [ + "on_site", + "remote", + "hybrid" + ], + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / continueUrlAdded value: +{ + "type": "string" +} - removed
Output schema / properties / jobs / items / properties / companyRatingRemoved value: -{ - "type": [ - "number", - "null" - ] -} - removed
Output schema / properties / jobs / items / properties / estimatedSalary / properties / basedOnRemoved value: -{ - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / jobs / items / properties / relatedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / jobs / items / properties / resultItemIdAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / previewAdded value: +{ + "properties": { + "continueUrl": { + "type": [ + "string", + "null" + ] + }, + "hidden": { + "type": "integer" + }, + "hiddenAtLeast": { + "type": "boolean" + }, + "shown": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] +} - removed
Output schema / properties / proFilterUpsellUrlRemoved value: -{ - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / resultBatchIdAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / resultSetIdAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / system_instructionAdded value: +{ + "type": "string" +}
- Changed
knowledge_search5 fields changed- removed
Input schema / properties / job_titleRemoved value: -{ - "description": "A job title or role, when the question is about openings for it — returns job-listing landing pages", - "type": "string" -} - changed
Input schema / properties / location / descriptionPrevious value: -"A city, state, or country refining job_title, or alone when the question is about jobs in that place"New value: +"A city, state, or country, when the question is about that labour market — returns its market landing page" - removed
Output schema / properties / companyPages / items / properties / openJobsRemoved value: -{ - "type": [ - "integer", - "null" - ] -} - removed
Output schema / properties / landingPages / items / properties / openJobsRemoved value: -{ - "type": [ - "integer", - "null" - ] -} - removed
Output schema / properties / proUrlRemoved value: -{ - "type": [ - "string", - "null" - ] -}
- Added
resume_check - Changed
tracker_add1 field changed- added
Input schema / properties / result_item_idAdded value: +{ + "description": "The result occurrence ID returned with the selected job", + "type": "string" +}
5 tool updates
- Changed
jobs_analyze_external1 field changed- added
Output schema / properties / jobs / items / properties / estimatedSalary / properties / currencyAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_compare1 field changed- added
Output schema / properties / jobs / items / properties / estimatedSalary / properties / currencyAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_details1 field changed- added
Output schema / properties / job / properties / estimatedSalary / properties / currencyAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_recommendations1 field changed- added
Output schema / properties / jobs / items / properties / estimatedSalary / properties / currencyAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_search2 fields changed- changed
Input schema / properties / salary_floor / descriptionPrevious value: -"Advanced filter: minimum annualized salary in USD; a posting qualifies when the midpoint of its pay band reaches the floor. Jobs without salary data are dropped."New value: +"Advanced filter: minimum annualized salary in USD; a posting qualifies when the midpoint of its pay band reaches the floor. Jobs without a USD salary are dropped." - added
Output schema / properties / jobs / items / properties / estimatedSalary / properties / currencyAdded value: +{ + "type": [ + "string", + "null" + ] +}
5 tool updates
- Changed
jobs_analyze_external4 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentKindAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentMultiplierAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerProfileIdAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerSpecializationIdAdded value: +{ + "type": [ + "integer", + "null" + ] +}
- Changed
jobs_compare4 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentKindAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentMultiplierAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerProfileIdAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerSpecializationIdAdded value: +{ + "type": [ + "integer", + "null" + ] +}
- Changed
jobs_details4 fields changed- added
Output schema / properties / job / properties / insights / properties / match / properties / breakdown / properties / alignmentKindAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / job / properties / insights / properties / match / properties / breakdown / properties / alignmentMultiplierAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / job / properties / insights / properties / match / properties / breakdown / properties / jobCareerProfileIdAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / job / properties / insights / properties / match / properties / breakdown / properties / jobCareerSpecializationIdAdded value: +{ + "type": [ + "integer", + "null" + ] +}
- Changed
jobs_recommendations4 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentKindAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentMultiplierAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerProfileIdAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerSpecializationIdAdded value: +{ + "type": [ + "integer", + "null" + ] +}
- Changed
jobs_search4 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentKindAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / alignmentMultiplierAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerProfileIdAdded value: +{ + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / breakdown / properties / jobCareerSpecializationIdAdded value: +{ + "type": [ + "integer", + "null" + ] +}
5 tool updates
- Changed
jobs_analyze_external3 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeConfidenceAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeReasonsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "params": { + "type": [ + "object", + "null" + ] + }, + "severity": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
jobs_compare3 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeConfidenceAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeReasonsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "params": { + "type": [ + "object", + "null" + ] + }, + "severity": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
jobs_details3 fields changed- added
Output schema / properties / job / properties / insights / properties / match / properties / gradeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / job / properties / insights / properties / match / properties / gradeConfidenceAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / job / properties / insights / properties / match / properties / gradeReasonsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "params": { + "type": [ + "object", + "null" + ] + }, + "severity": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
jobs_recommendations3 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeConfidenceAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeReasonsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "params": { + "type": [ + "object", + "null" + ] + }, + "severity": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
jobs_search3 fields changed- added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeConfidenceAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insights / properties / match / properties / gradeReasonsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "params": { + "type": [ + "object", + "null" + ] + }, + "severity": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
8 tool updates
- Removed
job_alert_disable - Removed
job_alert_enable - Added
job_alert_subscribe - Added
job_alert_unsubscribe - Added
tracker_add - Added
tracker_add_external - Removed
tracker_save - Removed
tracker_save_external
11 tool updates
- Added
job_alert_disable - Added
job_alert_enable - Removed
job_alert_subscribe - Removed
job_alert_unsubscribe - Changed
jobs_search5 fields changed- changed
Input schema / properties / h1b_sponsors_only / descriptionPrevious value: -"Pro filter. Only companies known to sponsor H1B visas. Applied only for Pro users; ignored otherwise."New value: +"Advanced filter: only companies known to sponsor H1B visas." - changed
Input schema / properties / hide_low_quality / descriptionPrevious value: -"Pro filter. Hide postings with a risky ghost grade (D/F); ungraded jobs stay. Applied only for Pro users; ignored otherwise."New value: +"Advanced filter: hides postings with a risky ghost grade (D/F); ungraded postings stay." - changed
Input schema / properties / min_match / descriptionPrevious value: -"Pro filter. Minimum personal match score (0-100); needs a resume. Applied only for Pro users; ignored otherwise."New value: +"Advanced filter: minimum personal FoundRole match score (0-100); needs a resume on the account." - changed
Input schema / properties / remote / descriptionPrevious value: -"Pro filter. Only remote-eligible jobs (respects the location/region scope). Applied only for Pro users; ignored otherwise."New value: +"Advanced filter: only remote-eligible jobs (respects the location/region scope)." - changed
Input schema / properties / salary_floor / descriptionPrevious value: -"Pro filter. Minimum annualized salary in USD; jobs without salary data are dropped. Applied only for Pro users; ignored otherwise."New value: +"Advanced filter: minimum annualized salary in USD; a posting qualifies when the midpoint of its pay band reaches the floor. Jobs without salary data are dropped."
- Changed
knowledge_search11 fields changed- added
Input schema / properties / companyAdded value: +{ + "description": "A company name, when the question is about that employer — returns FoundRole company profile pages", + "type": "string" +} - added
Input schema / properties / job_titleAdded value: +{ + "description": "A job title or role, when the question is about openings for it — returns job-listing landing pages", + "type": "string" +} - added
Input schema / properties / locationAdded value: +{ + "description": "A city, state, or country refining job_title, or alone when the question is about jobs in that place", + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"The career or job-search question to answer from the blog"New value: +"The career, job-search, or FoundRole product question to answer" - removed
Output schema / properties / articles / items / properties / scoreRemoved value: -{ - "type": "number" -} - added
Output schema / properties / companyPagesAdded value: +{ + "items": { + "properties": { + "headquarters": { + "type": [ + "string", + "null" + ] + }, + "industry": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "openJobs": { + "type": [ + "integer", + "null" + ] + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / landingPagesAdded value: +{ + "items": { + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "openJobs": { + "type": [ + "integer", + "null" + ] + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / pagesAdded value: +{ + "items": { + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "faq": { + "items": { + "type": "object" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / proUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / profileSetupUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / system_instructionAdded value: +{ + "type": "string" +}
- Added
knowledge_topics - Removed
tracker_add - Removed
tracker_add_external - Added
tracker_save - Added
tracker_save_external
3 tool updates
- Changed
tracker_add1 field changed- changed
Input schema / properties / sub_status / descriptionPrevious value: -"Sub-status within the main status"New value: +"Sub-status within the main status, valid only for that status — saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company"
- Changed
tracker_add_external1 field changed- changed
Input schema / properties / sub_status / descriptionPrevious value: -"Sub-status within the main status"New value: +"Sub-status within the main status, valid only for that status — saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company"
- Changed
tracker_update_status1 field changed- changed
Input schema / properties / sub_status / descriptionPrevious value: -"Sub-status within the main status"New value: +"Sub-status within the main status, valid only for that status — saved: interested, researching_company, preparing_application, ready_to_apply; applied: application_submitted, followed_up; interviewing: interview_scheduled, phone_screen, technical, onsite, final_round, pending_feedback; offered: negotiating, considering, offer_received, accepted; archived: ghosted, rejected_by_company, withdrawn_by_candidate, not_interested, employed_by_this_company, employed_by_another_company"
1 tool update
- Added
knowledge_search
2 tool updates
- Changed
jobs_recommendations1 field changed- added
Output schema / properties / jobSearchIdAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
jobs_search1 field changed- added
Output schema / properties / jobSearchIdAdded value: +{ + "type": [ + "string", + "null" + ] +}
9 tool updates
- Changed
reminder_delete16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
reminder_list8 fields changed- changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
reminder_set16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
tracker_add16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
tracker_add_external16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
tracker_list16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
tracker_remove16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
tracker_update16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
tracker_update_status16 fields changed- changed
Output schema / properties / trackedJob / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJob / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / appliedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / createdAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / deadline / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / notes / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / reminderAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / salaryOfferedType / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / subStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / trackedJobs / items / properties / updatedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +]
18 tool updates
- Changed
job_alert_list3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
job_alert_subscribe3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
job_alert_unsubscribe3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
job_alert_unsubscribe_all3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobs_analyze_external19 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / client_extraction / allOfRemoved value: -[ - { - "required": [ - "skills", - "tech_stack", - "benefits", - "bonuses", - "seniority", - "industry", - "management", - "security_clearance", - "visa_sponsorship", - "remote_scope" - ] - } -] - changed
Input schema / properties / client_extraction / descriptionPrevious value: -"Evidence-backed facts extracted by the client model from the posting. Every nested field is present and nullable; non-null evidence is a short source excerpt rather than an inference."New value: +"Evidence-backed facts extracted by the client model from the posting; non-null evidence is a short source excerpt rather than an inference. Fields absent from the source are omitted or null." - changed
Input schema / properties / client_extraction / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Input schema / properties / education_requirements / descriptionPrevious value: -"Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree, or null"New value: +"Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree" - changed
Input schema / properties / employment_type / descriptionPrevious value: -"Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other, or null"New value: +"Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other" - changed
Input schema / properties / experience_months / descriptionPrevious value: -"Minimum required experience in months, or null when not stated"New value: +"Minimum required experience in months, when stated" - changed
Input schema / properties / posted_at / descriptionPrevious value: -"Posting date as ISO 8601, or null when the source does not state it"New value: +"Posting date as ISO 8601, when the source states it" - changed
Input schema / properties / salary_currency / descriptionPrevious value: -"ISO 4217 salary currency code, or null when not stated"New value: +"ISO 4217 salary currency code, when stated" - changed
Input schema / properties / salary_max_value / descriptionPrevious value: -"Salary range maximum, or null when not stated"New value: +"Salary range maximum, when stated" - changed
Input schema / properties / salary_min_value / descriptionPrevious value: -"Salary range minimum, or null when not stated"New value: +"Salary range minimum, when stated" - changed
Input schema / properties / salary_type / descriptionPrevious value: -"Salary period: year, month, week, day, hour, or null"New value: +"Salary period: year, month, week, day, hour" - changed
Input schema / properties / salary_value / descriptionPrevious value: -"Single salary amount, or null when the posting gives a range or no salary"New value: +"Single salary amount, when the posting gives one figure instead of a range" - changed
Input schema / properties / work_location_type / descriptionPrevious value: -"Work arrangement: on_site, remote, hybrid, or null"New value: +"Work arrangement: on_site, remote, hybrid" - changed
Input schema / requiredPrevious value: -[ - "url", - "company_name", - "title_name", - "location_name", - "description", - "posted_at", - "salary_min_value", - "salary_max_value", - "salary_value", - "salary_type", - "salary_currency", - "employment_type", - "work_location_type", - "education_requirements", - "experience_months", - "client_extraction" -]New value: +[ + "url", + "company_name", + "title_name", + "location_name", + "description" +] - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / properties / clientExtraction / allOfRemoved value: -[ - { - "required": [ - "recordId", - "schemaVersion", - "acceptedFields", - "rejectedFields" - ] - } -] - changed
Output schema / properties / clientExtraction / typePrevious value: -"object"New value: +[ + "object", + "null" +]
- Changed
jobs_compare3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobs_details3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobs_recommendations3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jobs_search9 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / h1b_sponsors_onlyAdded value: +{ + "description": "Pro filter. Only companies known to sponsor H1B visas. Applied only for Pro users; ignored otherwise.", + "type": "boolean" +} - added
Input schema / properties / hide_low_qualityAdded value: +{ + "description": "Pro filter. Hide postings with a risky ghost grade (D/F); ungraded jobs stay. Applied only for Pro users; ignored otherwise.", + "type": "boolean" +} - added
Input schema / properties / min_matchAdded value: +{ + "description": "Pro filter. Minimum personal match score (0-100); needs a resume. Applied only for Pro users; ignored otherwise.", + "maximum": 100, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / remoteAdded value: +{ + "description": "Pro filter. Only remote-eligible jobs (respects the location/region scope). Applied only for Pro users; ignored otherwise.", + "type": "boolean" +} - added
Input schema / properties / salary_floorAdded value: +{ + "description": "Pro filter. Minimum annualized salary in USD; jobs without salary data are dropped. Applied only for Pro users; ignored otherwise.", + "minimum": 0, + "type": "integer" +} - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / proFilterUpsellUrlAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
reminder_delete3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
reminder_list3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
reminder_set3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
tracker_add3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
tracker_add_external17 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / client_extraction / allOfRemoved value: -[ - { - "required": [ - "skills", - "tech_stack", - "benefits", - "bonuses", - "seniority", - "industry", - "management", - "security_clearance", - "visa_sponsorship", - "remote_scope" - ] - } -] - changed
Input schema / properties / client_extraction / descriptionPrevious value: -"Evidence-backed facts extracted by the client model from the posting. Every nested field is present and nullable; non-null evidence is a short source excerpt rather than an inference."New value: +"Evidence-backed facts extracted by the client model from the posting; non-null evidence is a short source excerpt rather than an inference. Fields absent from the source are omitted or null." - changed
Input schema / properties / client_extraction / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Input schema / properties / education_requirements / descriptionPrevious value: -"Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree, or null"New value: +"Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree" - changed
Input schema / properties / employment_type / descriptionPrevious value: -"Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other, or null"New value: +"Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other" - changed
Input schema / properties / experience_months / descriptionPrevious value: -"Minimum required experience in months, or null when not stated"New value: +"Minimum required experience in months, when stated" - changed
Input schema / properties / posted_at / descriptionPrevious value: -"Posting date as ISO 8601, or null when the source does not state it"New value: +"Posting date as ISO 8601, when the source states it" - changed
Input schema / properties / salary_currency / descriptionPrevious value: -"ISO 4217 salary currency code, or null when not stated"New value: +"ISO 4217 salary currency code, when stated" - changed
Input schema / properties / salary_max_value / descriptionPrevious value: -"Salary range maximum, or null when not stated"New value: +"Salary range maximum, when stated" - changed
Input schema / properties / salary_min_value / descriptionPrevious value: -"Salary range minimum, or null when not stated"New value: +"Salary range minimum, when stated" - changed
Input schema / properties / salary_type / descriptionPrevious value: -"Salary period: year, month, week, day, hour, or null"New value: +"Salary period: year, month, week, day, hour" - changed
Input schema / properties / salary_value / descriptionPrevious value: -"Single salary amount, or null when the posting gives a range or no salary"New value: +"Single salary amount, when the posting gives one figure instead of a range" - changed
Input schema / properties / work_location_type / descriptionPrevious value: -"Work arrangement: on_site, remote, hybrid, or null"New value: +"Work arrangement: on_site, remote, hybrid" - changed
Input schema / requiredPrevious value: -[ - "url", - "company_name", - "title_name", - "location_name", - "description", - "posted_at", - "salary_min_value", - "salary_max_value", - "salary_value", - "salary_type", - "salary_currency", - "employment_type", - "work_location_type", - "education_requirements", - "experience_months", - "client_extraction" -]New value: +[ + "url", + "company_name", + "title_name", + "location_name", + "description" +] - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
tracker_list3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
tracker_remove3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
tracker_update3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
tracker_update_status3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema"
8 tool updates
- Changed
reminder_delete6 fields changed- added
Output schema / properties / hasMoreAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusOrderAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / subStatusOrderAdded value: +{ + "type": "object" +} - added
Output schema / properties / totalCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trackedJobsAdded value: +{ + "items": { + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "job": { + "type": [ + "object", + "null" + ] + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / trackerWebUrlAdded value: +{ + "type": "string" +}
- Changed
reminder_set6 fields changed- added
Output schema / properties / hasMoreAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusOrderAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / subStatusOrderAdded value: +{ + "type": "object" +} - added
Output schema / properties / totalCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trackedJobsAdded value: +{ + "items": { + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "job": { + "type": [ + "object", + "null" + ] + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / trackerWebUrlAdded value: +{ + "type": "string" +}
- Changed
tracker_add6 fields changed- added
Output schema / properties / hasMoreAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusOrderAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / subStatusOrderAdded value: +{ + "type": "object" +} - added
Output schema / properties / totalCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trackedJobsAdded value: +{ + "items": { + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "job": { + "type": [ + "object", + "null" + ] + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / trackerWebUrlAdded value: +{ + "type": "string" +}
- Changed
tracker_add_external6 fields changed- added
Output schema / properties / hasMoreAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusOrderAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / subStatusOrderAdded value: +{ + "type": "object" +} - added
Output schema / properties / totalCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trackedJobsAdded value: +{ + "items": { + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "job": { + "type": [ + "object", + "null" + ] + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / trackerWebUrlAdded value: +{ + "type": "string" +}
- Changed
tracker_list1 field changed- added
Output schema / properties / trackedJobAdded value: +{ + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" +}
- Changed
tracker_remove6 fields changed- added
Output schema / properties / hasMoreAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusOrderAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / subStatusOrderAdded value: +{ + "type": "object" +} - added
Output schema / properties / totalCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trackedJobsAdded value: +{ + "items": { + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "job": { + "type": [ + "object", + "null" + ] + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / trackerWebUrlAdded value: +{ + "type": "string" +}
- Changed
tracker_update6 fields changed- added
Output schema / properties / hasMoreAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusOrderAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / subStatusOrderAdded value: +{ + "type": "object" +} - added
Output schema / properties / totalCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trackedJobsAdded value: +{ + "items": { + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "job": { + "type": [ + "object", + "null" + ] + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / trackerWebUrlAdded value: +{ + "type": "string" +}
- Changed
tracker_update_status6 fields changed- added
Output schema / properties / hasMoreAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / statusOrderAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / subStatusOrderAdded value: +{ + "type": "object" +} - added
Output schema / properties / totalCountAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trackedJobsAdded value: +{ + "items": { + "properties": { + "appliedAt": { + "type": "string" + }, + "contacts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "createdAt": { + "type": "string" + }, + "deadline": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isStarred": { + "type": "boolean" + }, + "job": { + "type": [ + "object", + "null" + ] + }, + "notes": { + "type": "string" + }, + "reminderAt": { + "type": "string" + }, + "salaryOffered": { + "type": [ + "number", + "null" + ] + }, + "salaryOfferedType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subStatus": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "trackable": { + "type": [ + "object", + "null" + ] + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / trackerWebUrlAdded value: +{ + "type": "string" +}
3 tool updates
- Added
jobs_analyze_external - Added
jobs_compare - Changed
tracker_add_external27 fields changed- added
Input schema / properties / client_extractionAdded value: +{ + "additionalProperties": false, + "allOf": [ + { + "required": [ + "skills", + "tech_stack", + "benefits", + "bonuses", + "seniority", + "industry", + "management", + "security_clearance", + "visa_sponsorship", + "remote_scope" + ] + } + ], + "description": "Evidence-backed facts extracted by the client model from the posting. Every nested field is present and nullable; non-null evidence is a short source excerpt rather than an inference.", + "properties": { + "benefits": { + "items": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "maxLength": 255, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "value", + "evidence" + ], + "type": "object" + }, + "maxItems": 30, + "type": [ + "array", + "null" + ] + }, + "bonuses": { + "items": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "maxLength": 255, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "value", + "evidence" + ], + "type": "object" + }, + "maxItems": 20, + "type": [ + "array", + "null" + ] + }, + "industry": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "maxLength": 255, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "value", + "evidence" + ], + "type": [ + "object", + "null" + ] + }, + "management": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "type": "boolean" + } + }, + "required": [ + "value", + "evidence" + ], + "type": [ + "object", + "null" + ] + }, + "remote_scope": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "maxLength": 255, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "value", + "evidence" + ], + "type": [ + "object", + "null" + ] + }, + "security_clearance": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "type": "boolean" + } + }, + "required": [ + "value", + "evidence" + ], + "type": [ + "object", + "null" + ] + }, + "seniority": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "maxLength": 255, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "value", + "evidence" + ], + "type": [ + "object", + "null" + ] + }, + "skills": { + "items": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "importance": { + "enum": [ + "required", + "preferred", + "mentioned" + ], + "type": "string" + }, + "value": { + "maxLength": 255, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "value", + "evidence", + "importance" + ], + "type": "object" + }, + "maxItems": 50, + "type": [ + "array", + "null" + ] + }, + "tech_stack": { + "items": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "maxLength": 255, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "value", + "evidence" + ], + "type": "object" + }, + "maxItems": 30, + "type": [ + "array", + "null" + ] + }, + "visa_sponsorship": { + "additionalProperties": false, + "properties": { + "evidence": { + "maxLength": 500, + "minLength": 8, + "type": "string" + }, + "value": { + "enum": [ + "offered", + "not_offered", + "conditional" + ], + "type": "string" + } + }, + "required": [ + "value", + "evidence" + ], + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +} - changed
Input schema / properties / company_name / descriptionPrevious value: -"Company name"New value: +"Company name from the posting" - changed
Input schema / properties / description / descriptionPrevious value: -"The posting's description from the source result; a short summary is acceptable"New value: +"Complete posting text available in the conversation; a source summary is valid only when no fuller posting text is available" - changed
Input schema / properties / education_requirements / descriptionPrevious value: -"Array of: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree"New value: +"Education requirements: no_requirements, high_school, associate_degree, bachelor_degree, professional_certificate, postgraduate_degree, or null" - changed
Input schema / properties / education_requirements / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Input schema / properties / employment_type / descriptionPrevious value: -"Array of: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other"New value: +"Employment types: full_time, part_time, contractor, temporary, intern, volunteer, per_diem, other, or null" - changed
Input schema / properties / employment_type / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Input schema / properties / experience_months / descriptionPrevious value: -"Minimum required experience in months"New value: +"Minimum required experience in months, or null when not stated" - changed
Input schema / properties / experience_months / typePrevious value: -"number"New value: +[ + "integer", + "null" +] - changed
Input schema / properties / location_name / descriptionPrevious value: -"Location text, e.g. \"New York, NY\""New value: +"Location text from the posting, including Remote when stated" - added
Input schema / properties / posted_atAdded value: +{ + "description": "Posting date as ISO 8601, or null when the source does not state it", + "format": "date-time", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / salary_currencyAdded value: +{ + "description": "ISO 4217 salary currency code, or null when not stated", + "type": [ + "string", + "null" + ] +} - changed
Input schema / properties / salary_max_value / descriptionPrevious value: -"Salary range maximum"New value: +"Salary range maximum, or null when not stated" - changed
Input schema / properties / salary_max_value / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Input schema / properties / salary_min_value / descriptionPrevious value: -"Salary range minimum"New value: +"Salary range minimum, or null when not stated" - changed
Input schema / properties / salary_min_value / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Input schema / properties / salary_type / descriptionPrevious value: -"One of: year, month, week, day, hour"New value: +"Salary period: year, month, week, day, hour, or null" - changed
Input schema / properties / salary_type / enumPrevious value: -[ - "year", - "month", - "week", - "day", - "hour" -]New value: +[ + null, + "year", + "month", + "week", + "day", + "hour" +] - changed
Input schema / properties / salary_type / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / salary_value / descriptionPrevious value: -"Single salary figure when there is no range"New value: +"Single salary amount, or null when the posting gives a range or no salary" - changed
Input schema / properties / salary_value / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Input schema / properties / title_name / descriptionPrevious value: -"Job title"New value: +"Job title from the posting" - changed
Input schema / properties / url / descriptionPrevious value: -"The job posting URL"New value: +"Direct URL of the specific job posting; a company homepage is invalid" - changed
Input schema / properties / work_location_type / descriptionPrevious value: -"One of: on_site, remote, hybrid"New value: +"Work arrangement: on_site, remote, hybrid, or null" - changed
Input schema / properties / work_location_type / enumPrevious value: -[ - "on_site", - "remote", - "hybrid" -]New value: +[ + null, + "on_site", + "remote", + "hybrid" +] - changed
Input schema / properties / work_location_type / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / requiredPrevious value: -[ - "url", - "company_name", - "title_name", - "location_name", - "description" -]New value: +[ + "url", + "company_name", + "title_name", + "location_name", + "description", + "posted_at", + "salary_min_value", + "salary_max_value", + "salary_value", + "salary_type", + "salary_currency", + "employment_type", + "work_location_type", + "education_requirements", + "experience_months", + "client_extraction" +]
3 tool updates
- Changed
jobs_details5 fields changed- added
Output schema / properties / job / properties / estimatedSalary / properties / maxAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / job / properties / estimatedSalary / properties / minAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / job / properties / estimatedSalary / properties / updatedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / job / properties / insightsAdded value: +{ + "properties": { + "eVerify": { + "type": [ + "boolean", + "null" + ] + }, + "ghostScore": { + "properties": { + "confidence": { + "type": [ + "string", + "null" + ] + }, + "grade": { + "type": [ + "string", + "null" + ] + }, + "reasons": { + "items": { + "properties": { + "code": { + "type": "string" + }, + "params": { + "type": [ + "object", + "null" + ] + }, + "severity": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": [ + "object", + "null" + ] + }, + "h1bHistory": { + "items": { + "properties": { + "fiscalPeriod": { + "type": "string" + }, + "petitions": { + "type": "integer" + }, + "workers": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "h1bPetitions": { + "properties": { + "count": { + "type": [ + "integer", + "null" + ] + }, + "fiscalPeriod": { + "type": [ + "string", + "null" + ] + }, + "workers": { + "type": [ + "integer", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "h1bSponsor": { + "type": [ + "boolean", + "null" + ] + }, + "match": { + "properties": { + "breakdown": { + "properties": { + "jobRank": { + "type": [ + "integer", + "null" + ] + }, + "jobTrack": { + "type": [ + "string", + "null" + ] + }, + "scoredSkillCount": { + "type": [ + "integer", + "null" + ] + }, + "seniorityMultiplier": { + "type": [ + "number", + "null" + ] + }, + "skillScore": { + "type": [ + "number", + "null" + ] + }, + "userRank": { + "type": [ + "integer", + "null" + ] + }, + "userTrack": { + "type": [ + "string", + "null" + ] + }, + "weightedDenominator": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "insufficientData": { + "type": "boolean" + }, + "matchedCount": { + "type": "integer" + }, + "matchedRequiredCount": { + "type": "integer" + }, + "missingNice": { + "items": { + "type": "string" + }, + "type": "array" + }, + "missingNiceTotal": { + "type": "integer" + }, + "missingRequired": { + "items": { + "type": "string" + }, + "type": "array" + }, + "missingRequiredTotal": { + "type": "integer" + }, + "requiredTotal": { + "type": "integer" + }, + "score": { + "type": [ + "integer", + "null" + ] + }, + "seniorityMatch": { + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / job / properties / salaryBandAdded value: +{ + "properties": { + "max": { + "type": "number" + }, + "min": { + "type": "number" + } + }, + "type": [ + "object", + "null" + ] +}
- Added
jobs_recommendations - Changed
jobs_search11 fields changed- added
Output schema / properties / feedKindAdded value: +{ + "type": "string" +} - added
Output schema / properties / feedStatusAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / estimatedSalary / properties / maxAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / estimatedSalary / properties / minAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / estimatedSalary / properties / updatedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / insightsAdded value: +{ + "properties": { + "eVerify": { + "type": [ + "boolean", + "null" + ] + }, + "ghostScore": { + "properties": { + "confidence": { + "type": [ + "string", + "null" + ] + }, + "grade": { + "type": [ + "string", + "null" + ] + }, + "reasons": { + "items": { + "properties": { + "code": { + "type": "string" + }, + "params": { + "type": [ + "object", + "null" + ] + }, + "severity": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": [ + "object", + "null" + ] + }, + "h1bHistory": { + "items": { + "properties": { + "fiscalPeriod": { + "type": "string" + }, + "petitions": { + "type": "integer" + }, + "workers": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "h1bPetitions": { + "properties": { + "count": { + "type": [ + "integer", + "null" + ] + }, + "fiscalPeriod": { + "type": [ + "string", + "null" + ] + }, + "workers": { + "type": [ + "integer", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "h1bSponsor": { + "type": [ + "boolean", + "null" + ] + }, + "match": { + "properties": { + "breakdown": { + "properties": { + "jobRank": { + "type": [ + "integer", + "null" + ] + }, + "jobTrack": { + "type": [ + "string", + "null" + ] + }, + "scoredSkillCount": { + "type": [ + "integer", + "null" + ] + }, + "seniorityMultiplier": { + "type": [ + "number", + "null" + ] + }, + "skillScore": { + "type": [ + "number", + "null" + ] + }, + "userRank": { + "type": [ + "integer", + "null" + ] + }, + "userTrack": { + "type": [ + "string", + "null" + ] + }, + "weightedDenominator": { + "type": [ + "number", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "insufficientData": { + "type": "boolean" + }, + "matchedCount": { + "type": "integer" + }, + "matchedRequiredCount": { + "type": "integer" + }, + "missingNice": { + "items": { + "type": "string" + }, + "type": "array" + }, + "missingNiceTotal": { + "type": "integer" + }, + "missingRequired": { + "items": { + "type": "string" + }, + "type": "array" + }, + "missingRequiredTotal": { + "type": "integer" + }, + "requiredTotal": { + "type": "integer" + }, + "score": { + "type": [ + "integer", + "null" + ] + }, + "seniorityMatch": { + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / jobs / items / properties / salaryBandAdded value: +{ + "properties": { + "max": { + "type": "number" + }, + "min": { + "type": "number" + } + }, + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / lowRelevanceNoticeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / profileSetupStateAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / profileSetupUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / revalidatingAdded value: +{ + "type": "boolean" +}
Publisher details
- Operator
- FoundRole · Publisher source
- Operator website
- https://www.foundrole.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://www.foundrole.com/ai-search-mcp · Publisher source
- Trust center
- Unknown
- Restrictions
- A FoundRole account and OAuth sign-in are required. Free accounts see a preview of matching jobs in chat. Pro unlocks full matching results and additional in-chat insights. Fair-use limits apply. · Publisher source
Related MCP Connectors
Search 250K+ jobs, 5,400+ companies. MCP for Claude, ChatGPT, Codex and Cursor.
Job application tracker for developers - AI agents write over MCP, you review in a dashboard.
Search live startup jobs from Claude, Cursor, or ChatGPT via MCP. Free, no account needed.
MCP for 8,700+ current AI jobs. 13 tools: search, match, salaries, companies, commerce quotes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAI job search, resume builder, and career advice via MCP2MIT
- AlicenseAqualityCmaintenanceJob application tracker for developers: AI agents write over a remote MCP server (OAuth), humans review in a dashboard at jobctl app.10MIT
- AlicenseAqualityAmaintenanceLive job postings read straight from 139 employers' own ATS APIs (Greenhouse, Lever, Ashby, Beisen, Moka). Every listing carries the employer's real posting date, days_open and a ghost_score — a board's "posted 2 days ago" is routinely 300 days old underneath. Heavy on AI infra, autonomous driving and embodied AI across the US, EU and China. No account, no signup, no résumé upload.111,228 PyPI13MIT
- AlicenseAqualityCmaintenanceTurn any careers page into a structured job feed. Straight from Claude, Cursor or any MCP client.224 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.