Skip to main content
Glama
TVLSS

HireJack

Salary Benchmark

salary_benchmark
Read-only

Compare your salary against live market data by role family and seniority. Get percentile rankings and career-ladder progression to see if you're paid fairly.

Instructions

Compare a salary against the live HireJack market for a role family + seniority slice. Pro tier. Returns precomputed P10/P25/P50/P75/P90 percentiles, the user's percentile ranking (when salary is supplied), and a career-ladder progression of medians by seniority. Use for 'am I paid well as a senior backend engineer?' or 'what should I ask for?'. Not for a specific job's posted range (get_job) or market-wide comp stats (get_market_pulse).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
familyNoRole family to benchmark against. Omit to benchmark against the whole market.
salaryNoUser's current annual USD salary. When provided, the response includes the user's percentile ranking within the slice.
seniorityNoSeniority level to benchmark against. Omit to include all seniority levels in the slice.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYesSalary percentile benchmark for a role family + seniority slice
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.3.5
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "citation_url": {
      +      "description": "hirejack.com URL to cite when surfacing this result",
      +      "type": "string"
      +    },
      +    "data": {
      +      "additionalProperties": true,
      +      "description": "Salary percentile benchmark for a role family + seniority slice",
      +      "properties": {
      +        "benchmark": {
      +          "additionalProperties": true,
      +          "description": "Percentiles for the requested slice",
      +          "properties": {
      +            "count": {
      +              "description": "Disclosed salary ranges in the slice",
      +              "type": "number"
      +            },
      +            "median": {
      +              "description": "50th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p10": {
      +              "description": "10th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p25": {
      +              "description": "25th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p75": {
      +              "description": "75th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p90": {
      +              "description": "90th percentile, annual USD",
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "comparison": {
      +          "additionalProperties": true,
      +          "nullable": true,
      +          "properties": {
      +            "description": {
      +              "type": "string"
      +            },
      +            "vsMedian": {
      +              "description": "User salary minus slice median, annual USD",
      +              "type": "number"
      +            },
      +            "vsMedianPct": {
      +              "description": "Difference vs median, %",
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "error": {
      +          "description": "Present (with only `global`) when the slice has too little data",
      +          "type": "string"
      +        },
      +        "global": {
      +          "additionalProperties": true,
      +          "description": "Whole-market percentiles for context",
      +          "properties": {
      +            "count": {
      +              "description": "Disclosed salary ranges in the slice",
      +              "type": "number"
      +            },
      +            "median": {
      +              "description": "50th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p10": {
      +              "description": "10th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p25": {
      +              "description": "25th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p75": {
      +              "description": "75th percentile, annual USD",
      +              "type": "number"
      +            },
      +            "p90": {
      +              "description": "90th percentile, annual USD",
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "label": {
      +          "description": "Human-readable slice name, e.g. 'software engineering (senior)'",
      +          "type": "string"
      +        },
      +        "percentile": {
      +          "description": "User's percentile (0-99) within the slice; null when no salary was supplied",
      +          "nullable": true,
      +          "type": "number"
      +        },
      +        "progression": {
      +          "description": "Career-ladder medians by seniority for the family; null when no family was given",
      +          "items": {
      +            "additionalProperties": true,
      +            "properties": {
      +              "count": {
      +                "type": "number"
      +              },
      +              "level": {
      +                "description": "intern|junior|mid|senior|staff|principal|manager|director|vp",
      +                "type": "string"
      +              },
      +              "median": {
      +                "description": "Annual USD",
      +                "type": "number"
      +              },
      +              "p25": {
      +                "type": "number"
      +              },
      +              "p75": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "nullable": true,
      +          "type": "array"
      +        },
      +        "query": {
      +          "additionalProperties": true,
      +          "description": "Echo of the requested slice",
      +          "properties": {
      +            "family": {
      +              "nullable": true,
      +              "type": "string"
      +            },
      +            "salary": {
      +              "nullable": true,
      +              "type": "number"
      +            },
      +            "seniority": {
      +              "nullable": true,
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "meta": {
      +      "additionalProperties": true,
      +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
      +      "properties": {},
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "data"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.1.6

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds valuable behavioral context: it's Pro tier, returns percentiles, percentile ranking, and career-ladder progression. No contradictions.

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

Conciseness5/5

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

The description is concise and well-structured, with the action first, followed by key features and exclusions. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and 3 parameters, the description covers the purpose, output contents, usage guidance, and exclusions comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds meaning beyond individual parameter docs by explaining how omitting parameters affects the slice (whole market, all seniorities) and that salary enables percentile ranking.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compares a salary against live market data for a role family and seniority slice. It uses specific verbs and resources, and distinguishes from sibling tools like get_job and get_market_pulse.

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

Usage Guidelines5/5

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

The description explicitly provides use cases ('am I paid well?', 'what should I ask for?') and tells what not to use it for, naming specific alternatives (get_job, get_market_pulse).

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