Skip to main content
Glama
TVLSS

HireJack

@hirejack/mcp

Model Context Protocol server that exposes HireJack's tech job market intelligence to MCP-compatible clients (Claude Desktop, Claude Code, Cursor, Cline, etc.) — tech jobs, companies, skills, salaries, hiring trends.

npm Glama score

Quick start

Claude Code:

claude mcp add hirejack -- npx -y @hirejack/mcp

Claude Desktop — edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "hirejack": {
      "command": "npx",
      "args": ["-y", "@hirejack/mcp"]
    }
  }
}

Restart Claude Desktop and ask away (see Example prompts).

The npm package uses stdio transport — no auth, runs locally as a subprocess, and the five public tools work out of the box.

claude.ai / Claude Desktop connector (all 31 tools): add https://hirejack.com/api/mcp as a custom connector (Settings → Connectors → Add custom connector), sign in with your HireJack account when prompted, and the full Pro/Premium/Analyst intelligence surface lights up — tier-gated server-side to your subscription.

Related MCP server: @career-now/mcp

Example prompts

Job search (public, no account):

  • "Find remote senior backend roles paying $200K+ that sponsor visas"

  • "What is Stripe currently hiring? Break it down by team."

  • "Show me staff-level ML jobs in New York with published salary ranges"

  • "Which companies are hiring Rust engineers right now?"

Market research (public, no account):

  • "Which fintech companies are scaling hiring fastest this month?"

  • "What skills are trending in tech right now?"

  • "Compare the tech stacks of Datadog and Grafana Labs"

  • "What's the median advertised salary for senior data engineers?"

Career intelligence (Pro/Premium, via the hosted connector):

  • "Score my fit for this posting and tell me what's missing: hirejack.com/jobs/…"

  • "Which skill should I learn next to unlock the most jobs?"

  • "Where does my salary sit vs the market for staff platform engineers?"

  • "Rewrite my resume bullets for this Anthropic role"

Analyst (historical/segmentation, via the hosted connector):

  • "Which companies' hiring grew >50% in the last quarter from a real base?"

  • "Show Nvidia's hiring trajectory over the last 12 months"

  • "What skills are climbing consistently from a low base — early signals only"

Slash commands (MCP prompts)

Clients that support MCP prompts (Claude Desktop, Cursor) surface these as slash commands. All four are built only on the tools that work without an account, so they never dead-end on an auth error:

Prompt

Arguments

What it does

find_jobs

constraint (required)

Maps a free-form ask ("remote, $200K+, Rust") onto search_jobs filters, loosens one at a time if results are thin, pulls the strongest postings in full.

company_deep_dive

company (required)

Resolves a name to a domain, pulls the hiring profile, then shows what is open right now.

market_snapshot

focus (optional)

Aggregate market picture, optionally narrowed to a role, skill or city.

salary_landscape

role_or_skill (required), location (optional)

What a role actually pays, using only postings that disclose a range.

The hosted endpoint serves a different, personalized set (career check-ins, interview prep, match-scored role hunts) because those need an authenticated profile.

Resources

The server exposes HireJack's controlled vocabulary as MCP resources:

URI

Contents

hirejack://vocabulary/skills

Every skill HireJack extracts, with canonical name, id and category

hirejack://vocabulary/roles

The role taxonomy: titleId, title, family, IC/management track, typical skills

Read these before filtering. search_jobs.skill substring-matches the canonical names, so Kubernetes returns jobs while K8s returns none — and update_preferences.desired_roles expects titleId values from the roles resource.

Transports

Transport

Where

Tools available

stdio (this package)

npx -y @hirejack/mcp

5 public tools (search_jobs, get_job, get_company_profile, search_companies, get_market_pulse). Pro+/Analyst tools surface but require auth — point users at the hosted endpoint.

HTTP + OAuth 2.1 (HireJack-hosted)

https://hirejack.com/api/mcp

All 31 tools, including Pro+/Analyst intelligence and account actions tied to a HireJack subscription. Implementation lives in HireJack's private Lambda; this OSS package is the stdio half.

Tools

Public (no auth required):

Tool

Purpose

search_jobs

Search live tech job postings: role family, seniority, skill, location, salary, remote, visa, education, experience

get_job

Fetch one job posting by domain + jobId or HireJack URL: full details, salary, skills, AI summary

get_company_profile

Full hiring profile for one company (tech stack, trends, salary, AI brief)

search_companies

List tracked companies, filter by industry

get_market_pulse

Market-wide stats: totals, top skills, trending skills, top companies

Pro tier (requires authenticated HireJack user with pro or higher):

Tool

Purpose

match_job

Score how well the user matches a specific job (matchPct + 5-dim breakdown + ATS tips)

company_fit

Score the user's fit for a company (fitScore + tech-stack/role/seniority breakdown)

recommendations

Top jobs ranked by composite match against the user's profile

salary_benchmark

Percentile + career-ladder benchmark vs the live market for a role/seniority

skill_gap

Compare user skills to desired-roles' market requirements; ranked missing skills

market_position

0–100 market-position score (skill demand, seniority fit, remote, breadth) + matching jobs, salary median, top-aligned companies

skill_impact

Simulate learning each missing skill: jobs unlocked, boosted matches, companies needing it — ranked by impact

watchlist_intelligence

Aggregate hiring signals across every watched company: open jobs, week-over-week trend %, top skills, median salary, sparkline

Premium tier (requires premium):

Tool

Purpose

resume_rewrite

Bullet-by-bullet resume rewrites tailored to a specific job

interview_prep

Targeted prep: key topics, likely questions by type, company research items

Analyst (dedicated Analyst tier — $49/mo founding pricing; free for working journalists in exchange for a linked citation):

Tool

Purpose

get_company_history

Per-company time-series: monthly hiring snapshots + wider job-count history

get_skill_history

Per-skill time-series: companyCount + jobMentions per month with MoM deltas

get_market_history

Market-wide time-series: 90 days daily or 24 months monthly

compare_companies

Up to 5 companies side-by-side: current state + monthly trajectory

find_companies

Multi-axis segmentation: industry × family × skill × trend × job-count band

find_breakout_companies

Companies with extreme hiring growth (% threshold + min size)

find_emerging_skills

Skills climbing consistently across the last 3 monthly snapshots from a low base, with a real absolute company-count gain — early signal, not small-base noise (the "what should I learn before everyone else" tool)

find_emerging_roles

Roles gaining company adoption over a tunable window (default 21 days, daily rollup) plus genuinely new titles the classifier just started seeing — the role-level companion to find_emerging_skills

Account & profile (any authenticated HireJack account — reads and writes on the user's own data):

Tool

Purpose

save_job

Save a job to (or remove it from) the user's saved-jobs list

watch_company

Follow (or unfollow) a company — powers watchlist intelligence, alerts, and the weekly digest

track_application

Track an application through the pipeline: applied → phone_screen → interview → offer / rejected / withdrawn, with notes

list_saved_jobs

List the user's saved jobs (read companion to save_job), flagging postings that have since closed

list_applications

List tracked applications with their pipeline stage (read companion to track_application)

list_watchlist

List watched companies (read companion to watch_company)

get_profile

Read the user's profile: skills, desired roles, tier, and the matching preferences (seniority, city, remote, US-only, minimum salary) that hard-filter recommendations and alerts

update_preferences

Update matching preferences from the conversation — minimum salary, require-listed-salary, remote / US-only, seniority, city — persists to the profile and re-filters everything immediately

Unlike the website's toggle endpoints, these use explicit, idempotent actions (state is checked first), so an agent retrying a "save" can never silently unsave. The write tools (save_job, watch_company, track_application, update_preferences) are annotated readOnlyHint: false so MCP clients ask for approval appropriately.

Pro+ tools are thin wrappers over the website's existing intelligence Lambdas. Tier gating happens server-side in those Lambdas — the MCP server just forwards the user's identity. If the user lacks the required tier, the API returns 403 and the tool surfaces a clear upgrade hint.

Build from source

git clone https://github.com/TVLSS/hirejack-mcp
cd hirejack-mcp
npm install
npm run build       # tsc → dist/
node dist/index.js  # waits on stdin/stdout for JSON-RPC

Releasing

Publishing is automated by GitHub Actions (.github/workflows/release.yml). Pushing a version tag builds, publishes to npm, and updates the MCP Registry:

npm version patch          # bumps package.json + creates the vX.Y.Z tag
git push && git push --tags

The workflow verifies the tag matches package.json, then runs npm publish (using the NPM_TOKEN repo secret) and a best-effort MCP Registry update via GitHub OIDC. Keep server.json's version in step with package.json.

Configuration

Env var

Default

Purpose

HIREJACK_API_BASE

https://hirejack.com/api

Override if you're self-hosting a fork against a different backend

HIREJACK_SITE_BASE

https://hirejack.com

Used in citation_url fields returned by tools

The npm package ships the stdio transport only. The hosted HTTP+OAuth endpoint at https://hirejack.com/api/mcp is run separately by HireJack and not implemented in this repo.

Project layout

src/
├── index.ts            # stdio entry point
├── registry.ts         # transport-agnostic tool registry
├── prompts.ts          # slash commands (public-tool-only by design)
├── resources.ts        # controlled vocabulary (skills, roles)
├── lib/
│   ├── api.ts          # HireJack REST client
│   ├── format.ts       # tool result helpers
│   └── proAuth.ts      # Pro+ auth check (returns "use hosted endpoint" in stdio)
└── tools/              # 29 files, 31 registered tools

License

MIT — see LICENSE.

Support

Available Tools

13 tools
get_company_historyGet Company HistoryA
Read-only
Inspect

Time-series of a company's hiring profile. Analyst tier. Returns monthly snapshots (totalJobs, engineeringJobs, medianSalary, hiringTrend, trendPct, top skills, seniority + family distribution) plus the wider monthlyPostings job-count series and current-state summary. Use for 'how has Anthropic's hiring changed since January?' or 'is Stripe growing or shrinking?'. Not for a current-state snapshot (get_company_profile) or side-by-side comparison (compare_companies).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesCompany domain (e.g. 'stripe.com')
monthsNoMonths of history to return (default 12, max 24). Note: detailed monthly snapshots only began March 2026, so depth is currently capped by available history.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesMonthly hiring history plus current state for one company
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, and the description adds context about being 'Analyst tier' and notes that detailed snapshots began March 2026, capping available history. No contradictions. Description adds value beyond annotations.

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?

Two sentences: first packs the return values, second gives usage and exclusions. No unnecessary words. Highly efficient.

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

Completeness4/5

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

Given the tool's complexity (time-series with many fields), the description covers key return elements and the main limitation. Output schema exists but not shown; description compensates. Missing edge case handling or error scenarios, but still very complete.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds context about months default and max, and the historical depth limitation starting March 2026. This extra information helps the agent understand parameter constraints beyond schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Time-series of a company's hiring profile.' It lists the specific data returned (monthly snapshots with metrics like totalJobs, engineeringJobs, etc.) and explicitly differentiates from siblings get_company_profile and compare_companies.

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?

Provides explicit usage examples: 'Use for "how has Anthropic's hiring changed since January?" or "is Stripe growing or shrinking?"' and clearly states when not to use: 'Not for a current-state snapshot (get_company_profile) or side-by-side comparison (compare_companies).'

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

get_company_profileGet Company ProfileA
Read-only
Inspect

Fetch HireJack's full hiring profile for a single company by domain. Returns: tech stack (top skills with counts), role distribution, seniority breakdown, location breakdown, hiring trend (% MoM), salary medians where disclosed, and an AI-generated hiring brief. Use this for queries like 'what is Stripe hiring?', 'what tech does Anthropic use?', or before comparing companies. Not for historical trends (get_company_history, Analyst) or the user's personal fit (company_fit).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesCompany domain (e.g. 'stripe.com', 'anthropic.com'). Use the apex domain, not subdomains.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesFull hiring profile for one company; additional aggregate fields may be present
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only behavior is clear. The description adds behavioral context by enumerating the return fields and stating that it returns a comprehensive hiring profile. No contradictions with annotations. Could be higher if it mentioned any potential rate limits or additional side effects, but for a read-only tool the transparency is solid.

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 (two sentences), front-loaded with the purpose, and contains no filler. Every sentence adds value: purpose, return values, usage examples, and exclusions. Efficient and well-structured.

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 only 1 parameter, high schema coverage, and an output schema (which presumably details return structure), the description is sufficiently complete. It specifies what is returned and provides context on when to use the tool. No missing critical information for an AI agent to correctly select and invoke the tool.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter 'domain' already has a detailed description in the schema (e.g., format example, apex domain note). The tool description does not add additional parameter information; it only mentions 'by domain'. Therefore, baseline 3 is appropriate as the schema covers parameter semantics adequately.

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 verb 'Fetch' and the resource 'full hiring profile for a single company by domain'. It lists specific return fields (tech stack, role distribution, etc.) and distinguishes from siblings by referencing alternatives like get_company_history and company_fit. This provides high specificity and differentiation.

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 example queries ('what is Stripe hiring?', 'what tech does Anthropic use?') and states what the tool is NOT for ('Not for historical trends... or the user's personal fit'), naming specific sibling tools. This gives clear when-to-use and when-not-to-use guidance.

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

get_jobGet JobA
Read-only
Inspect

Fetch one job posting by domain + jobId, or by HireJack detail URL. Returns title, company, location, salary, skills, seniority, posted date, visa/remote/education metadata, and (when available) the AI summary. Use after search_jobs when the user picks a specific role to discuss, or when the user pastes a HireJack job URL. Not for browsing or filtering postings (search_jobs) or personal fit scoring (match_job).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoFull HireJack job detail URL, e.g. 'https://hirejack.com/jobs/stripe.com/sw-eng-12345/'. Convenience alternative to passing `domain` + `jobId` separately.
jobIdNoJob canonical id — pass the `id` field from a `search_jobs` result VERBATIM (it may contain '#' separators, e.g. 'greenhouse#stripe#4921361'; keep them). The dashed URL form also works. Required unless `url` is provided.
domainNoCompany domain (e.g. 'stripe.com'). Required unless `url` is provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe job posting (metadata only — description HTML is intentionally omitted; meta.gated marks postings the website would paywall)
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, consistent with fetch. Description adds return field details beyond annotations, but no behavioral quirks beyond that.

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?

Three concise sentences: purpose, usage, exclusions. No redundancy, well-structured.

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

Completeness5/5

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

For a simple read tool with output schema, description covers input modes and return fields adequately.

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

Parameters3/5

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

Schema coverage is 100%, so description adds limited new meaning. It clarifies the relationship between url, jobId, and domain, and warns about verbatim jobId usage.

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 fetches one job posting by domain+jobId or URL, and lists return fields. It distinguishes from siblings like search_jobs and match_job.

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?

Explicitly says when to use (after search_jobs or when user pastes a URL) and when not to (browsing, personal fit scoring), with sibling tool names.

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

get_market_historyGet Market HistoryA
Read-only
Inspect

Time-series of market-wide hiring stats: total jobs, remote share, compensation, seniority + family distribution, top skills. Analyst tier. Daily resolution back to early March 2026; monthly resolution from March 2026. Use for 'how has the market shifted in 2026?' or 'is remote hiring trending up?'. Not for the current snapshot — use get_market_pulse for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoDays of daily history (1-90, default 30). Only used when range='daily'; ignored for range='monthly'.
rangeNoGranularity. 'daily' returns up to 90 days back (rich, recent). 'monthly' returns up to 24 months back (coarser, longer view). Defaults to daily.
detailNo'compact' (default) returns a slim per-snapshot series (date, jobs, companies, remote share, median comp) plus full distributions for only the first and latest snapshots — enough for trend analysis at ~10x less output. 'full' returns every snapshot's complete distributions (seniority, family, top skills); only use when you need per-date distribution detail.
monthsNoMonths of monthly history (1-24, default 12). Only used when range='monthly'; ignored for range='daily'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesMarket-wide hiring time-series; shape depends on `detail` (compact: series+endpoints, full: snapshots)
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, confirming safe read operation. Description adds behavioral details like data resolution (daily back to early March 2026, monthly from March 2026) and explains the difference between compact and full detail modes. 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?

Three sentences, front-loaded with the core purpose and key outputs. Every sentence adds essential information without waste.

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's complexity (4 parameters, two granularities, two detail modes), the description covers resolution, parameter interactions, and distinguishes from sibling tools. Output schema exists, so return values need not be detailed.

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 already provides 100% coverage with detailed parameter descriptions. The description adds value by explaining when parameters are used or ignored based on other parameters (e.g., days ignored when range=monthly), which aids correct usage.

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 it returns time-series of market-wide hiring stats with specific metrics (total jobs, remote share, compensation, etc.). It distinguishes from siblings like get_market_pulse by explicitly noting it is not for current snapshots.

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?

Explicitly provides usage scenarios: 'how has the market shifted in 2026?' or 'is remote hiring trending up?'. Also clearly states when not to use: for current snapshot, use get_market_pulse instead.

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

get_skill_historyGet Skill HistoryA
Read-only
Inspect

Time-series of a skill's market adoption. Analyst tier. Returns monthly companyCount + jobMentions for the skill, top companies hiring for it each month, and computed MoM deltas. Use for 'how fast is Rust adoption growing?' or 'is React still dominant?'. Not for discovering early-stage skills you can't yet name — use find_emerging_skills for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillYesSkill name or id (e.g. 'Rust', 'kubernetes', 'Machine Learning'). Aliases resolve via codex/skills.json.
monthsNoMonths of history to return (1-24, default 12). Monthly snapshots began March 2026, so depth is capped by available history.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesMonthly market-adoption history for one skill
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint and openWorldHint. The description adds context about the data granularity (monthly) and computed deltas, and mentions 'Analyst tier' implying access level. No contradiction.

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?

Highly concise: two sentences plus a use-case statement and a negative instruction. Information is front-loaded and every sentence adds value.

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

Completeness4/5

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

With output schema present and annotations, the description covers core purpose, use cases, alternatives, and data details. Minor omission: data start date (March 2026) is in schema but not description. Still largely complete.

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

Parameters3/5

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

Schema covers all parameters with descriptions. The description adds example values but does not significantly enhance understanding beyond schema. Baseline 3 applies.

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 it provides time-series data on a skill's market adoption, listing specific metrics (companyCount, jobMentions, top companies, MoM deltas). It gives concrete example queries and distinguishes from 'find_emerging_skills'.

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?

Explicitly tells when to use (tracking adoption growth/dominance of known skills) and when not to (for unknown early-stage skills), directing to an alternative tool. Provides example use cases.

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

interview_prepInterview PrepA
Read-only
Inspect

Generate targeted interview prep for a specific job: 5 key topics (deep vs surface depth based on job seniority), 5 likely questions by type (technical, behavioral, system design) with answer tips, and 3 company-specific research items. Premium tier. Uses job description + company tech stack + user skills as context. Use for 'help me prep for my Anthropic interview' or 'what should I expect in this loop?'. Not for resume tailoring — use resume_rewrite for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoFull HireJack job detail URL. Convenience alternative to passing `domain` + `jobId` separately.
jobIdNoPass the `id` field from a `search_jobs` result VERBATIM — do not reformat (ids may contain '#' separators; keep them). Required unless `url` is provided.
domainNoCompany domain (e.g. 'anthropic.com'). Required unless `url` is provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesAI interview preparation for one job posting
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, openWorldHint), the description reveals premium tier status, depth variation based on seniority, and context sources (job description, tech stack, user skills), providing rich behavioral context without contradiction.

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 with two sentences that are front-loaded with purpose. Every sentence adds value: first sentence specifies outputs, second provides usage guidance and sibling distinction.

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's complexity, output schema existence, and 100% parameter coverage, the description sufficiently covers inputs, outputs, usage, and constraints, leaving no major gaps for an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not add extra meaning beyond the schema's parameter descriptions (url, jobId, domain). The instruction to pass jobId verbatim is already in the schema.

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

Purpose5/5

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

The description clearly states the tool generates targeted interview prep with specific outputs (5 key topics, 5 questions, 3 research items) and explicitly distinguishes from the sibling tool `resume_rewrite` by stating it is not for resume tailoring.

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 provides explicit use cases ('help me prep for my Anthropic interview') and directly states when not to use the tool ('Not for resume tailoring — use `resume_rewrite` for that'), offering clear guidance and an alternative.

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

market_positionMarket PositionA
Read-only
Inspect

Compute the authenticated user's market position score (0-100). Pro tier. Weighted: 50% skill demand against current market, 20% seniority fit, 15% remote availability for the user's preference, 15% skill breadth. Returns score, matchingJobs count, salaryMedian for matching roles, per-skill demand breakdown, and the top companies whose tech stacks align best with the user's skills. Use for queries like 'how do I stack up against the market?' or 'what's my market position right now?'. Not for job-specific (match_job) or company-specific (company_fit) scores.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe authenticated user's overall market position
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true; description adds detailed computation weighting (50% skill demand, etc.) and expected output fields. Does not disclose rate limits or authentication beyond 'Pro tier', but is largely transparent.

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

Conciseness4/5

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

Description is concise and front-loaded with purpose and weighting, though the weight breakdown could be slightly more succinct. No unnecessary repetition.

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 no parameters and presence of an output schema, the description fully covers tool functionality, including inputs (none), computation logic, and return fields. Appropriate for its complexity.

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?

No parameters; schema coverage is 100%. Description explains the computation context, which is sufficient for a param-less tool. Baseline score of 4 applies.

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?

Clearly states it computes a market position score (0-100) with weighted breakdown. Distinguishes from job-specific and company-specific tools, making its purpose unambiguous.

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?

Explicitly lists example queries and what the tool is not for (job-specific or company-specific scores), providing clear guidance on when to use vs. alternatives.

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

resume_rewriteResume RewriteA
Read-only
Inspect

Generate targeted resume bullet rewrites for a specific job, using the user's uploaded resume + the job description as context. Premium tier. Returns before/after bullet rewrites, missing keywords from the JD, and ATS-format tips. The user must have a resume uploaded to HireJack (via Settings or Onboarding). Use for 'rewrite my resume for this Stripe role' or 'tailor my bullets for this JD'. Not for interview preparation — use interview_prep for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoFull HireJack job detail URL. Convenience alternative to passing `domain` + `jobId` separately.
jobIdNoPass the `id` field from a `search_jobs` result VERBATIM — do not reformat (the id contains '#' separators; keep them). Always fetch a real id via search_jobs first. Required unless `url` is provided.
domainNoCompany domain (e.g. 'stripe.com'). Required unless `url` is provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesAI resume rewrite suggestions targeted at one job posting
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.9/5.0
Behavior5/5

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

The description adds behavioral context beyond annotations: it specifies the returns (before/after rewrites, missing keywords, ATS tips), notes it's a premium tier feature, and indicates the resume upload requirement. No contradiction with readOnlyHint annotation.

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 brief, well-structured, and front-loaded. Every sentence adds critical information without redundancy.

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 3 parameters and an output schema, the description fully covers input preconditions, output summary, and usage context. It also mentions premium tier and prerequisites.

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

Parameters4/5

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

Schema coverage is 100%, so baseline 3. The description adds extra value by explaining that 'url' is a convenience alternative to 'domain'+'jobId', and that 'jobId' must be passed verbatim from search_jobs with '#' separators.

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 explicitly states the tool generates targeted resume bullet rewrites for a specific job using the user's resume and job description. It clearly distinguishes from sibling tools like interview_prep.

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 gives direct usage examples ('rewrite my resume for this Stripe role') and explicitly states when not to use it ('Not for interview preparation') with a named alternative (interview_prep). It also mentions the prerequisite of having a resume uploaded.

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

salary_benchmarkSalary BenchmarkA
Read-only
Inspect

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).

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
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

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.

search_jobsSearch JobsA
Read-only
Inspect

Search HireJack's database of live tech job postings. Filter by keyword, role family, seniority, skill, location, salary, remote policy, or visa sponsorship. Returns a slim list of jobs with title, company, location, salary range, posted date, and key skills. Use this for queries like 'remote senior backend roles paying $200K+', 'data engineer jobs at fintech companies', 'who is hiring Rust developers in NYC'. Not for a single known posting (get_job), company-level questions (get_company_profile), personalized ranking (recommendations), or aggregate market stats (get_market_pulse).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text keyword search (case-insensitive substring) across raw and standardized title, company name, company domain, and location. Tip: use the `skill` parameter for skill matches — `q` does NOT search job descriptions or the skill list.
visaNoVisa sponsorship (AI-extracted): 'yes' returns jobs whose posting indicates sponsorship, 'no' those that rule it out. Omit to include jobs where the posting doesn't say.
limitNoMax results to return (default 25, max 100)
skillNoSingle skill name to require (case-insensitive substring match), e.g. 'Rust' or 'Kubernetes'
cursorNoOpaque pagination cursor from a previous search_jobs call's `meta.next_cursor`. Pass it back (with the SAME filters) to fetch the next page of results.
familyNoRole family (software_engineering, machine_learning, etc.). Omit to search all families.
remoteNoRemote policy filter; 'remote+hybrid' matches either mode. Omit to include onsite jobs too.
companyNoCompany domain to filter by, e.g. 'stripe.com'
locationNoLocation substring filter, e.g. 'San Francisco' or 'New York'
educationNoMinimum degree the job requires (AI-extracted). E.g. 'bachelor' returns jobs whose stated requirement is exactly a bachelor's.
seniorityNoSeniority level on the intern → vp ladder. Omit to include all levels.
experienceNoYears-of-experience bucket the job asks for (AI-extracted yearsMin). E.g. '0-2' for entry-level-friendly roles, '10+' for very senior ones.
has_salaryNoSet true to only include jobs with a disclosed salary range; omit to include jobs without pay data.
salary_maxNoMaximum salary ceiling (annual USD). Matches jobs whose floor is at or below this (i.e. salaryMin <= X).
salary_minNoMinimum salary floor (annual USD). Matches jobs whose disclosed salary range *could pay at least* this much (i.e. salaryMax >= X). A job with range $150K–$250K matches salary_min=200000.
posted_sinceNoOnly include jobs posted on or after this date (YYYY-MM-DD). E.g. for 'jobs posted this week', pass the date 7 days ago.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesSearch results page; meta.next_cursor is present when more pages exist
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation (true), the description discloses important behavioral traits: q does not search job descriptions or skill list, pagination via cursor, salary_min/salary_max matching logic, and that results are a slim list with specific fields. No contradictions with annotations.

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

Conciseness4/5

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

The description is well-organized and front-loaded with the primary action. It efficiently covers purpose, output, examples, and exclusions. Slightly verbose with comma-separated lists but no wasted sentences.

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 16 parameters and the existence of an output schema, the description adequately covers filtering behavior, return fields, pagination, and edge cases (e.g., salary range matching, q not searching descriptions). It leaves no major gaps.

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

Parameters5/5

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

Despite 100% schema coverage, the description adds significant meaning: explains q's scope limitations, clarifies salary_min and salary_max semantics with examples, describes cursor usage, and provides usage tips for skill and posted_since parameters.

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 searches HireJack's database of live tech job postings, lists filterable attributes, and describes the returned data format. It also explicitly distinguishes from sibling tools like get_job, get_company_profile, recommendations, 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?

Provides explicit guidance on when to use this tool (for searching tech jobs with various filters) and when not to use it (for single job, company profile, recommendations, market stats). Also gives example queries to illustrate appropriate usage.

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

skill_gapSkill GapA
Read-only
Inspect

Analyze the gap between the authenticated user's current skills and what their desired roles require in the live market. Pro tier. Returns matchPct (0-100), the list of skills the user already has that map to their target roles, and the list of missing skills ranked by impact (how often the skill appears in target-role postings). Use for 'what should I learn next?' or 'how close am I to senior PM roles?'. Not for simulating the payoff of skills the user might LEARN — use skill_impact for that.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesGap between the user's skills and their desired roles' requirements
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.9/5.0
Behavior5/5

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

Description adds significant behavioral context beyond annotations: explains return values (matchPct, map of skills, missing skills ranked by impact). Annotations already indicate readOnlyHint, and description does not contradict it.

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?

Three sentences with no fluff: first sentence states purpose, second details outputs, third gives usage guidelines. Front-loaded and efficient.

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?

Despite zero parameters and output schema present, the description fully explains what the tool returns and when to use it. Sibling tools provide context. No gaps.

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?

No parameters defined, so schema coverage is 100% vacuously. Baseline for 0 params is 4; description has no need to add param info.

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 analyzes the gap between the authenticated user's current skills and desired role requirements in the live market. It uses a specific verb ('Analyze') and resource ('gap'), and distinguishes from sibling tool 'skill_impact'.

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?

Explicitly provides use cases ('what should I learn next?', 'how close am I to senior PM roles?') and tells when NOT to use it ('Not for simulating...'), directing to alternative 'skill_impact'. Also mentions 'Pro tier' as context.

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

skill_impactSkill ImpactA
Read-only
Inspect

For each skill the authenticated user does NOT have, simulate adding it and compute the market impact. Pro tier. Returns a ranked list of skills with: newJobsUnlocked (jobs that previously didn't match but would after learning the skill), boostedJobs (existing matches that would score higher), companiesNeedingIt, relevantRoles, and a composite impactScore. Also returns profileCompleteness so the caller can suggest filling missing profile fields. Use for queries like 'what should I learn next?' or 'which skill would unlock the most jobs for me?'. Not for auditing the user's CURRENT skills against their target roles — use skill_gap for that.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesSimulated market impact of skills the user could learn
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false; the description adds that it is a simulation (no actual skill addition) and lists output fields. No contradictions, and adds meaningful behavioral context beyond annotations.

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?

Three sentences: purpose, output details, usage guidance. Front-loaded and every sentence adds value. No fluff.

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 zero parameters, an output schema exists, and sibling tools are listed, the description covers purpose, usage, output structure, and distinguishes from related tools. Complete for an agent to decide when and how to invoke.

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?

No parameters (0 params), so baseline is 4. The description does not need to add parameter information and appropriately focuses on behavior and output.

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 simulates adding each missing skill and computes market impact, returning a ranked list. It explicitly distinguishes from sibling 'skill_gap' by noting it's not for auditing current skills.

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?

Provides explicit use cases ('what should I learn next?', 'which skill would unlock the most jobs?') and a clear when-not-to-use ('not for auditing... use skill_gap'), naming the alternative tool.

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

watchlist_intelligenceWatchlist IntelligenceA
Read-only
Inspect

Aggregate hiring intelligence on every company the authenticated user is watching. Pro tier. For each watched company returns: totalJobs currently open, hiringTrend (up/down/stable), trendPct (week-over-week %), topSkills the company is hiring for, medianSalary, sparkline data (last ~12 weeks of job counts), and jobDelta since the previous snapshot. Use for queries like 'what's happening at the companies I'm watching?' or 'which of my watched companies are scaling up right now?'. Not for a plain list of watched companies — use list_watchlist for that.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesHiring intelligence for every company on the user's watchlist
metaNoRequest/response metadata (pagination cursors, snapshot timestamps, applied filters)
citation_urlNohirejack.com URL to cite when surfacing this result

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 context about Pro tier requirement and details the returned fields (hiringTrend, trendPct, etc.) without contradicting annotations.

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 (few sentences), front-loaded with purpose, then return fields, then usage guidelines. Every sentence adds value with no fluff.

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 zero parameters and an existing output schema, the description fully covers purpose, usage, return values, and constraints (Pro tier), making it complete for an AI agent.

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?

No parameters are defined, so the description correctly focuses on the output and usage. The 0-param baseline is 4, and the description adds no unnecessary param info.

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

Purpose5/5

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

The description states a specific verb ('aggregate') and resource ('hiring intelligence on watched companies'), clearly distinguishing from sibling 'list_watchlist' which returns a plain list.

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?

Explicitly provides example queries for when to use the tool and specifically states when not to use it, naming the alternative tool (list_watchlist).

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.

  1. 31 tool updatesv0.3.5
    • Removedcompany_fit
    • Removedcompare_companies
    • Removedfind_breakout_companies
    • Removedfind_companies
    • Removedfind_emerging_roles
    • Removedfind_emerging_skills
    • Changedget_company_history1 field changed
      • 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": "Monthly hiring history plus current state for one company",
        +      "properties": {
        +        "companyName": {
        +          "type": "string"
        +        },
        +        "current": {
        +          "additionalProperties": true,
        +          "description": "Company's current hiring state",
        +          "properties": {
        +            "hiringTrend": {
        +              "description": "'up' | 'down' | 'stable'",
        +              "type": "string"
        +            },
        +            "medianSalary": {
        +              "description": "Median disclosed salary (annual USD), when enough postings disclose pay",
        +              "nullable": true,
        +              "type": "number"
        +            },
        +            "totalJobs": {
        +              "type": "number"
        +            },
        +            "trendPct": {
        +              "description": "Trend magnitude, % change",
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "domain": {
        +          "type": "string"
        +        },
        +        "industry": {
        +          "type": "string"
        +        },
        +        "monthlyPostings": {
        +          "description": "Wider job-count series derived from currently-live jobs (older months under-count expired listings)",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "count": {
        +                "description": "Job postings observed that month",
        +                "type": "number"
        +              },
        +              "month": {
        +                "description": "YYYY-MM",
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "note": {
        +          "description": "Present when fewer snapshot months exist than requested",
        +          "type": "string"
        +        },
        +        "snapshots": {
        +          "description": "Detailed monthly snapshots, oldest first",
        +          "items": {
        +            "additionalProperties": true,
        +            "description": "One monthly company snapshot (snapshots began March 2026); compare_companies returns a slimmer subset of these fields",
        +            "properties": {
        +              "engineeringJobs": {
        +                "type": "number"
        +              },
        +              "familyDistribution": {
        +                "description": "get_company_history only",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "hiringTrend": {
        +                "description": "'up' | 'down' | 'stable'",
        +                "type": "string"
        +              },
        +              "jobsWithCompensation": {
        +                "description": "get_company_history only",
        +                "type": "number"
        +              },
        +              "medianSalary": {
        +                "description": "Annual USD",
        +                "nullable": true,
        +                "type": "number"
        +              },
        +              "month": {
        +                "description": "YYYY-MM",
        +                "type": "string"
        +              },
        +              "seniorityDistribution": {
        +                "description": "get_company_history only",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "topSkills": {
        +                "description": "Top 10 skills that month (get_company_history only)",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "totalJobs": {
        +                "type": "number"
        +              },
        +              "trendPct": {
        +                "description": "Trend magnitude, % change",
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_company_profile1 field changed
      • 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": "Full hiring profile for one company; additional aggregate fields may be present",
        +      "properties": {
        +        "companyName": {
        +          "type": "string"
        +        },
        +        "content": {
        +          "description": "AI-generated analyst hiring brief",
        +          "type": "string"
        +        },
        +        "domain": {
        +          "type": "string"
        +        },
        +        "engineeringJobs": {
        +          "type": "number"
        +        },
        +        "engineeringPct": {
        +          "type": "number"
        +        },
        +        "familyDistribution": {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {},
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "hiringTrend": {
        +          "description": "'up' | 'down' | 'stable' (2-month rolling average)",
        +          "type": "string"
        +        },
        +        "industry": {
        +          "type": "string"
        +        },
        +        "jobsWithCompensation": {
        +          "type": "number"
        +        },
        +        "medianSalary": {
        +          "description": "Median of disclosed salaries (annual USD), when enough postings disclose pay",
        +          "nullable": true,
        +          "type": "number"
        +        },
        +        "seniorityDistribution": {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {},
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "techStack": {
        +          "description": "Capped at 15",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {},
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "topLocations": {
        +          "description": "Capped at 10",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {},
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "topSkills": {
        +          "description": "Top skills with adoption counts (capped at 15)",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {},
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "topTitles": {
        +          "description": "Capped at 10",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {},
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "totalJobs": {
        +          "description": "Total open postings",
        +          "type": "number"
        +        },
        +        "trendPct": {
        +          "description": "Trend magnitude, % change",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_job1 field changed
      • 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": "The job posting (metadata only — description HTML is intentionally omitted; meta.gated marks postings the website would paywall)",
        +      "properties": {
        +        "ai_summary": {
        +          "description": "2-3 sentence AI summary when available (get_job only)",
        +          "type": "string"
        +        },
        +        "apply_url": {
        +          "description": "Direct ATS application URL",
        +          "type": "string"
        +        },
        +        "company": {
        +          "type": "string"
        +        },
        +        "company_domain": {
        +          "description": "e.g. 'stripe.com' — pass to get_company_profile or company_fit",
        +          "type": "string"
        +        },
        +        "detail_url": {
        +          "description": "hirejack.com job page for citation",
        +          "type": "string"
        +        },
        +        "education": {
        +          "description": "Stated degree requirement, e.g. 'bachelor', or null",
        +          "nullable": true,
        +          "type": "string"
        +        },
        +        "family": {
        +          "description": "Role family, e.g. 'software_engineering'",
        +          "type": "string"
        +        },
        +        "id": {
        +          "description": "Raw canonical job id — pass back to get_job, match_job, save_job, or track_application",
        +          "type": "string"
        +        },
        +        "location": {
        +          "description": "Normalized location, e.g. 'San Francisco, CA' or 'Remote (US)'",
        +          "type": "string"
        +        },
        +        "posted_at": {
        +          "description": "YYYY-MM-DD",
        +          "type": "string"
        +        },
        +        "remote_policy": {
        +          "description": "'remote' | 'hybrid' | 'onsite' | null — AI-extracted",
        +          "nullable": true,
        +          "type": "string"
        +        },
        +        "salary": {
        +          "additionalProperties": true,
        +          "description": "Disclosed pay range, or null when the posting lists none",
        +          "nullable": true,
        +          "properties": {
        +            "currency": {
        +              "description": "Currency code, e.g. 'USD'",
        +              "type": "string"
        +            },
        +            "max": {
        +              "description": "Top of the disclosed range (annual)",
        +              "type": "number"
        +            },
        +            "min": {
        +              "description": "Bottom of the disclosed range (annual)",
        +              "type": "number"
        +            },
        +            "period": {
        +              "description": "Pay period, normally 'year'",
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "seniority": {
        +          "description": "intern|junior|mid|senior|staff|principal|manager|director|vp",
        +          "type": "string"
        +        },
        +        "skills": {
        +          "description": "Extracted skill names (capped)",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "title": {
        +          "description": "Standardized title when available, else the raw posting title",
        +          "type": "string"
        +        },
        +        "track": {
        +          "description": "ic|tech_leadership|hybrid|management (get_job only)",
        +          "type": "string"
        +        },
        +        "visa_sponsorship": {
        +          "description": "'yes' | 'no' | null — AI-extracted from the posting",
        +          "nullable": true,
        +          "type": "string"
        +        },
        +        "years_min": {
        +          "description": "Minimum years of experience the posting asks for, or null",
        +          "nullable": true,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_market_history3 fields changed
      • changedInput schema / properties / days / description
        Previous value: -"Days of daily history (default 30, max 90; only used when range=daily)"New value: +"Days of daily history (1-90, default 30). Only used when range='daily'; ignored for range='monthly'."
      • changedInput schema / properties / months / description
        Previous value: -"Months of monthly history (default 12; only used when range=monthly)"New value: +"Months of monthly history (1-24, default 12). Only used when range='monthly'; ignored for range='daily'."
      • 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": "Market-wide hiring time-series; shape depends on `detail` (compact: series+endpoints, full: snapshots)",
        +      "properties": {
        +        "days": {
        +          "description": "Window size (daily granularity)",
        +          "type": "number"
        +        },
        +        "detail": {
        +          "description": "'compact' — present only in compact mode",
        +          "type": "string"
        +        },
        +        "endpoints": {
        +          "additionalProperties": true,
        +          "description": "Compact mode: full distributions for the first and latest snapshots only",
        +          "properties": {
        +            "first": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "compensationStats": {
        +                  "additionalProperties": true,
        +                  "description": "Salary stats incl. marketMedian (annual USD)",
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "date": {
        +                  "description": "YYYY-MM-DD (daily granularity)",
        +                  "type": "string"
        +                },
        +                "familyDistribution": {
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "month": {
        +                  "description": "YYYY-MM (monthly granularity)",
        +                  "type": "string"
        +                },
        +                "remoteDistribution": {
        +                  "additionalProperties": true,
        +                  "description": "Job counts by work mode (remote/hybrid/onsite)",
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "seniorityDistribution": {
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "topSkills": {
        +                  "description": "Top 10 skills by prevalence",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "totals": {
        +                  "additionalProperties": true,
        +                  "description": "Market totals (jobs, companies, engineeringPct, ...)",
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "latest": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "compensationStats": {
        +                  "additionalProperties": true,
        +                  "description": "Salary stats incl. marketMedian (annual USD)",
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "date": {
        +                  "description": "YYYY-MM-DD (daily granularity)",
        +                  "type": "string"
        +                },
        +                "familyDistribution": {
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "month": {
        +                  "description": "YYYY-MM (monthly granularity)",
        +                  "type": "string"
        +                },
        +                "remoteDistribution": {
        +                  "additionalProperties": true,
        +                  "description": "Job counts by work mode (remote/hybrid/onsite)",
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "seniorityDistribution": {
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "topSkills": {
        +                  "description": "Top 10 skills by prevalence",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "totals": {
        +                  "additionalProperties": true,
        +                  "description": "Market totals (jobs, companies, engineeringPct, ...)",
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "type": "object"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "granularity": {
        +          "description": "'daily' | 'monthly'",
        +          "type": "string"
        +        },
        +        "months": {
        +          "description": "Window size (monthly granularity)",
        +          "type": "number"
        +        },
        +        "series": {
        +          "description": "Compact mode: slim per-snapshot series, oldest first",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "companies": {
        +                "description": "Total tracked companies",
        +                "type": "number"
        +              },
        +              "date": {
        +                "description": "YYYY-MM-DD (daily granularity)",
        +                "type": "string"
        +              },
        +              "engineeringPct": {
        +                "description": "Engineering share of jobs, 0-100",
        +                "type": "number"
        +              },
        +              "jobs": {
        +                "description": "Total tracked jobs",
        +                "type": "number"
        +              },
        +              "medianComp": {
        +                "description": "Market median salary, annual USD",
        +                "type": "number"
        +              },
        +              "month": {
        +                "description": "YYYY-MM (monthly granularity)",
        +                "type": "string"
        +              },
        +              "remotePct": {
        +                "description": "Remote share of jobs, 0-100; null when work-mode data is missing",
        +                "nullable": true,
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "snapshots": {
        +          "description": "Full mode (detail='full'): every snapshot's complete distributions, oldest first",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "compensationStats": {
        +                "additionalProperties": true,
        +                "description": "Salary stats incl. marketMedian (annual USD)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "date": {
        +                "description": "YYYY-MM-DD (daily granularity)",
        +                "type": "string"
        +              },
        +              "familyDistribution": {
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "month": {
        +                "description": "YYYY-MM (monthly granularity)",
        +                "type": "string"
        +              },
        +              "remoteDistribution": {
        +                "additionalProperties": true,
        +                "description": "Job counts by work mode (remote/hybrid/onsite)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "seniorityDistribution": {
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "topSkills": {
        +                "description": "Top 10 skills by prevalence",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "totals": {
        +                "additionalProperties": true,
        +                "description": "Market totals (jobs, companies, engineeringPct, ...)",
        +                "properties": {},
        +                "type": "object"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Removedget_market_pulse
    • Removedget_profile
    • Changedget_skill_history2 fields changed
      • changedInput schema / properties / months / description
        Previous value: -"Months of history (default 12, max 24)"New value: +"Months of history to return (1-24, default 12). Monthly snapshots began March 2026, so depth is capped by available history."
      • 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": "Monthly market-adoption history for one skill",
        +      "properties": {
        +        "skill": {
        +          "description": "The skill as passed in",
        +          "type": "string"
        +        },
        +        "skillId": {
        +          "description": "Resolved canonical skill id",
        +          "type": "string"
        +        },
        +        "snapshots": {
        +          "description": "Monthly adoption snapshots, oldest first",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "companyCount": {
        +                "description": "Companies mentioning the skill that month",
        +                "type": "number"
        +              },
        +              "companyCountDelta": {
        +                "description": "MoM change in companyCount (absent on the first snapshot)",
        +                "type": "number"
        +              },
        +              "jobMentions": {
        +                "description": "Job postings mentioning it",
        +                "type": "number"
        +              },
        +              "jobMentionsPctChange": {
        +                "description": "MoM % change in jobMentions; null when the prior month had 0",
        +                "nullable": true,
        +                "type": "number"
        +              },
        +              "month": {
        +                "description": "YYYY-MM",
        +                "type": "string"
        +              },
        +              "topCompanies": {
        +                "description": "Top companies hiring for it (capped at 10)",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedinterview_prep1 field changed
      • 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": "AI interview preparation for one job posting",
        +      "properties": {
        +        "companyName": {
        +          "type": "string"
        +        },
        +        "companyPrep": {
        +          "description": "Up to 3 company-specific research items",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "item": {
        +                "description": "What to research",
        +                "type": "string"
        +              },
        +              "why": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "jobTitle": {
        +          "type": "string"
        +        },
        +        "keyTopics": {
        +          "description": "Up to 5 technical topics to study",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "depth": {
        +                "description": "'deep' (likely interview focus) | 'surface' (good to mention)",
        +                "type": "string"
        +              },
        +              "topic": {
        +                "type": "string"
        +              },
        +              "why": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "likelyQuestions": {
        +          "description": "Up to 5 likely interview questions",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "question": {
        +                "type": "string"
        +              },
        +              "tip": {
        +                "description": "One-sentence answering tip",
        +                "type": "string"
        +              },
        +              "type": {
        +                "description": "'technical' | 'behavioral' | 'system_design'",
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "seniority": {
        +          "description": "intern|junior|mid|senior|staff|principal|manager|director|vp",
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Removedlist_applications
    • Removedlist_saved_jobs
    • Removedlist_watchlist
    • Changedmarket_position1 field changed
      • 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": "The authenticated user's overall market position",
        +      "properties": {
        +        "matchingJobs": {
        +          "description": "Conservative estimate of jobs matching the user's top skills",
        +          "type": "number"
        +        },
        +        "message": {
        +          "description": "Present (with score 0) when the profile has no skills or market data is unavailable",
        +          "type": "string"
        +        },
        +        "remoteAvailPct": {
        +          "description": "Share of jobs that are remote or hybrid, 0-100",
        +          "type": "number"
        +        },
        +        "salaryMedian": {
        +          "description": "Market median salary, annual USD",
        +          "type": "number"
        +        },
        +        "score": {
        +          "description": "Market position score, 0-100 (skill demand 50%, seniority fit 20%, remote availability 15%, skill breadth 15%)",
        +          "type": "number"
        +        },
        +        "seniorityJobPct": {
        +          "description": "Share of jobs at the user's seniority level, 0-100",
        +          "type": "number"
        +        },
        +        "skillDemand": {
        +          "description": "Per-skill market demand for each of the user's skills, highest demand first",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "companies": {
        +                "description": "Companies mentioning the skill",
        +                "type": "number"
        +              },
        +              "companyPct": {
        +                "description": "Share of tracked companies mentioning it, 0-100",
        +                "type": "number"
        +              },
        +              "demand": {
        +                "description": "'high' | 'medium' | 'low' | 'niche'",
        +                "type": "string"
        +              },
        +              "rank": {
        +                "description": "Rank among top market skills; null when not ranked",
        +                "nullable": true,
        +                "type": "number"
        +              },
        +              "skill": {
        +                "type": "string"
        +              },
        +              "totalMentions": {
        +                "description": "Job postings mentioning it",
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "topMatchingCompanies": {
        +          "description": "Companies whose tech stacks best overlap the user's skills (capped at 10)",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "domain": {
        +                "description": "Pass to get_company_profile / company_fit",
        +                "type": "string"
        +              },
        +              "matchingSkills": {
        +                "description": "How many of the user's skills appear in the company's top skills",
        +                "type": "number"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "skills": {
        +                "description": "The overlapping skill names (capped at 5)",
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "totalJobs": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "totals": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "trackedCompanies": {
        +              "type": "number"
        +            },
        +            "trackedJobs": {
        +              "type": "number"
        +            },
        +            "userSkillCount": {
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Removedmatch_job
    • Removedrecommendations
    • Changedresume_rewrite1 field changed
      • 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": "AI resume rewrite suggestions targeted at one job posting",
        +      "properties": {
        +        "bulletRewrites": {
        +          "description": "Up to 4 targeted bullet rewrites",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "original": {
        +                "description": "The resume bullet to improve (quoted from the resume)",
        +                "type": "string"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "rewritten": {
        +                "description": "Improved version incorporating the job's keywords",
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "companyName": {
        +          "type": "string"
        +        },
        +        "formatTips": {
        +          "description": "Up to 2 structural suggestions",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "jobTitle": {
        +          "type": "string"
        +        },
        +        "missingKeywords": {
        +          "description": "Up to 5 JD keywords absent from the resume",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "overallTip": {
        +          "description": "The single biggest improvement to make",
        +          "type": "string"
        +        },
        +        "usedFreeCredit": {
        +          "description": "Present (true) when a non-Premium user's one free rewrite credit was consumed",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedsalary_benchmark1 field changed
      • 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"
        +}
    • Removedsave_job
    • Removedsearch_companies
    • Changedsearch_jobs6 fields changed
      • changedInput schema / properties / family / description
        Previous value: -"Role family (software_engineering, machine_learning, etc.)"New value: +"Role family (software_engineering, machine_learning, etc.). Omit to search all families."
      • changedInput schema / properties / has_salary / description
        Previous value: -"Only include jobs with disclosed salary"New value: +"Set true to only include jobs with a disclosed salary range; omit to include jobs without pay data."
      • changedInput schema / properties / remote / description
        Previous value: -"Remote policy filter"New value: +"Remote policy filter; 'remote+hybrid' matches either mode. Omit to include onsite jobs too."
      • changedInput schema / properties / seniority / description
        Previous value: -"Seniority level"New value: +"Seniority level on the intern → vp ladder. Omit to include all levels."
      • changedInput schema / properties / visa / description
        Previous value: -"Visa sponsorship: 'yes' or 'no'"New value: +"Visa sponsorship (AI-extracted): 'yes' returns jobs whose posting indicates sponsorship, 'no' those that rule it out. Omit to include jobs where the posting doesn't say."
      • 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": "Search results page; meta.next_cursor is present when more pages exist",
        +      "properties": {
        +        "count": {
        +          "description": "Jobs in this page (not the corpus total)",
        +          "type": "number"
        +        },
        +        "jobs": {
        +          "description": "Matching jobs, newest first",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "ai_summary": {
        +                "description": "2-3 sentence AI summary when available (get_job only)",
        +                "type": "string"
        +              },
        +              "apply_url": {
        +                "description": "Direct ATS application URL",
        +                "type": "string"
        +              },
        +              "company": {
        +                "type": "string"
        +              },
        +              "company_domain": {
        +                "description": "e.g. 'stripe.com' — pass to get_company_profile or company_fit",
        +                "type": "string"
        +              },
        +              "detail_url": {
        +                "description": "hirejack.com job page for citation",
        +                "type": "string"
        +              },
        +              "education": {
        +                "description": "Stated degree requirement, e.g. 'bachelor', or null",
        +                "nullable": true,
        +                "type": "string"
        +              },
        +              "family": {
        +                "description": "Role family, e.g. 'software_engineering'",
        +                "type": "string"
        +              },
        +              "id": {
        +                "description": "Raw canonical job id — pass back to get_job, match_job, save_job, or track_application",
        +                "type": "string"
        +              },
        +              "location": {
        +                "description": "Normalized location, e.g. 'San Francisco, CA' or 'Remote (US)'",
        +                "type": "string"
        +              },
        +              "posted_at": {
        +                "description": "YYYY-MM-DD",
        +                "type": "string"
        +              },
        +              "remote_policy": {
        +                "description": "'remote' | 'hybrid' | 'onsite' | null — AI-extracted",
        +                "nullable": true,
        +                "type": "string"
        +              },
        +              "salary": {
        +                "additionalProperties": true,
        +                "description": "Disclosed pay range, or null when the posting lists none",
        +                "nullable": true,
        +                "properties": {
        +                  "currency": {
        +                    "description": "Currency code, e.g. 'USD'",
        +                    "type": "string"
        +                  },
        +                  "max": {
        +                    "description": "Top of the disclosed range (annual)",
        +                    "type": "number"
        +                  },
        +                  "min": {
        +                    "description": "Bottom of the disclosed range (annual)",
        +                    "type": "number"
        +                  },
        +                  "period": {
        +                    "description": "Pay period, normally 'year'",
        +                    "type": "string"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "seniority": {
        +                "description": "intern|junior|mid|senior|staff|principal|manager|director|vp",
        +                "type": "string"
        +              },
        +              "skills": {
        +                "description": "Extracted skill names (capped)",
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "title": {
        +                "description": "Standardized title when available, else the raw posting title",
        +                "type": "string"
        +              },
        +              "track": {
        +                "description": "ic|tech_leadership|hybrid|management (get_job only)",
        +                "type": "string"
        +              },
        +              "visa_sponsorship": {
        +                "description": "'yes' | 'no' | null — AI-extracted from the posting",
        +                "nullable": true,
        +                "type": "string"
        +              },
        +              "years_min": {
        +                "description": "Minimum years of experience the posting asks for, or null",
        +                "nullable": true,
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "jobs",
        +        "count"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedskill_gap1 field changed
      • 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": "Gap between the user's skills and their desired roles' requirements",
        +      "properties": {
        +        "learnDisclosure": {
        +          "description": "Affiliate-link disclosure text when learn links are present",
        +          "nullable": true,
        +          "type": "string"
        +        },
        +        "matchPct": {
        +          "description": "Share of target-role skills the user already has, 0-100",
        +          "type": "number"
        +        },
        +        "matchedSkills": {
        +          "description": "User skills that map to their desired roles",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "id": {
        +                "type": "string"
        +              },
        +              "name": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "message": {
        +          "description": "Present (with matchPct 0) when the profile lacks skills or desired roles",
        +          "type": "string"
        +        },
        +        "missingSkills": {
        +          "description": "Skills the desired roles require that the user lacks, most impactful first",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "id": {
        +                "description": "Skill id from codex/skills.json",
        +                "type": "string"
        +              },
        +              "learn": {
        +                "additionalProperties": true,
        +                "description": "Learning resources for the skill, when known",
        +                "nullable": true,
        +                "properties": {
        +                  "alternates": {
        +                    "items": {
        +                      "additionalProperties": true,
        +                      "properties": {},
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "primary": {
        +                    "additionalProperties": true,
        +                    "description": "Recommended course link (provider, url, title, free, ...)",
        +                    "nullable": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "roles": {
        +                "description": "The desired-role titles that require it",
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "rolesNeeding": {
        +                "description": "How many of the user's desired roles require it (impact rank)",
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "topGaps": {
        +          "description": "Top 5 of missingSkills",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "id": {
        +                "description": "Skill id from codex/skills.json",
        +                "type": "string"
        +              },
        +              "learn": {
        +                "additionalProperties": true,
        +                "description": "Learning resources for the skill, when known",
        +                "nullable": true,
        +                "properties": {
        +                  "alternates": {
        +                    "items": {
        +                      "additionalProperties": true,
        +                      "properties": {},
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "primary": {
        +                    "additionalProperties": true,
        +                    "description": "Recommended course link (provider, url, title, free, ...)",
        +                    "nullable": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "roles": {
        +                "description": "The desired-role titles that require it",
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "rolesNeeding": {
        +                "description": "How many of the user's desired roles require it (impact rank)",
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedskill_impact1 field changed
      • 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": "Simulated market impact of skills the user could learn",
        +      "properties": {
        +        "currentMatchingJobs": {
        +          "description": "Jobs matching the user's current skills in the sample",
        +          "type": "number"
        +        },
        +        "learnDisclosure": {
        +          "description": "Affiliate-link disclosure text when learn links are present",
        +          "nullable": true,
        +          "type": "string"
        +        },
        +        "message": {
        +          "description": "Present when the profile has no skills yet",
        +          "type": "string"
        +        },
        +        "profileCompleteness": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "hasLocation": {
        +              "type": "boolean"
        +            },
        +            "hasName": {
        +              "type": "boolean"
        +            },
        +            "hasResume": {
        +              "type": "boolean"
        +            },
        +            "hasRoles": {
        +              "type": "boolean"
        +            },
        +            "hasSeniority": {
        +              "type": "boolean"
        +            },
        +            "hasSkills": {
        +              "type": "boolean"
        +            },
        +            "score": {
        +              "description": "Profile completeness, 0-100",
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "skillImpacts": {
        +          "description": "Highest-impact skills to learn, ranked (capped at 10)",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "avgBoostPoints": {
        +                "type": "number"
        +              },
        +              "boostedJobs": {
        +                "description": "Existing matches whose score would rise",
        +                "type": "number"
        +              },
        +              "companiesNeedingIt": {
        +                "type": "number"
        +              },
        +              "impactScore": {
        +                "description": "Composite ranking score (unlocked x3 + boosted + companies x2 + roles x5)",
        +                "type": "number"
        +              },
        +              "jobsMentioning": {
        +                "description": "Sampled jobs mentioning the skill",
        +                "type": "number"
        +              },
        +              "learn": {
        +                "additionalProperties": true,
        +                "nullable": true,
        +                "properties": {
        +                  "alternates": {
        +                    "items": {
        +                      "additionalProperties": true,
        +                      "properties": {},
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "primary": {
        +                    "additionalProperties": true,
        +                    "description": "Recommended course link (provider, url, title, free, ...)",
        +                    "nullable": true,
        +                    "properties": {},
        +                    "type": "object"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "newJobsUnlocked": {
        +                "description": "Jobs that would newly match after learning it",
        +                "type": "number"
        +              },
        +              "relevantRoles": {
        +                "description": "Desired-role titles that list it as required",
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "skillId": {
        +                "type": "string"
        +              },
        +              "skillName": {
        +                "type": "string"
        +              },
        +              "topCompanies": {
        +                "description": "Company domains needing the skill (capped at 5)",
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "totalJobsAnalyzed": {
        +          "description": "Size of the job sample simulated against",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Removedtrack_application
    • Removedupdate_preferences
    • Removedwatch_company
    • Changedwatchlist_intelligence1 field changed
      • 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": "Hiring intelligence for every company on the user's watchlist",
        +      "properties": {
        +        "companies": {
        +          "description": "One entry per watched company, trending-up companies first",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "available": {
        +                "description": "False when no company profile exists — only domain/companyName/followedAt are present",
        +                "type": "boolean"
        +              },
        +              "companyName": {
        +                "type": "string"
        +              },
        +              "domain": {
        +                "description": "Pass to get_company_profile / company_fit / watch_company",
        +                "type": "string"
        +              },
        +              "engineeringJobs": {
        +                "type": "number"
        +              },
        +              "engineeringPct": {
        +                "description": "Engineering share of open roles, 0-100",
        +                "type": "number"
        +              },
        +              "followedAt": {
        +                "description": "ISO timestamp the user followed the company",
        +                "type": "string"
        +              },
        +              "hiringTrend": {
        +                "description": "'up' | 'down' | 'stable'",
        +                "type": "string"
        +              },
        +              "industry": {
        +                "nullable": true,
        +                "type": "string"
        +              },
        +              "jobDelta": {
        +                "description": "Job-count change vs the prior month; null with <2 months of history",
        +                "nullable": true,
        +                "type": "number"
        +              },
        +              "jobDeltaPct": {
        +                "description": "jobDelta as %, null when prior month was 0",
        +                "nullable": true,
        +                "type": "number"
        +              },
        +              "medianSalary": {
        +                "description": "Annual USD, null when too few postings disclose pay",
        +                "nullable": true,
        +                "type": "number"
        +              },
        +              "sparkline": {
        +                "description": "Last ~6 months of job counts",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {
        +                    "count": {
        +                      "description": "Job postings observed that month",
        +                      "type": "number"
        +                    },
        +                    "month": {
        +                      "description": "YYYY-MM",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "topLocations": {
        +                "description": "Capped at 3",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "topSkills": {
        +                "description": "Capped at 8",
        +                "items": {
        +                  "additionalProperties": true,
        +                  "properties": {
        +                    "name": {
        +                      "type": "string"
        +                    },
        +                    "pct": {
        +                      "description": "Share of the company's postings mentioning the skill, 0-100",
        +                      "type": "number"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "totalJobs": {
        +                "type": "number"
        +              },
        +              "trendPct": {
        +                "description": "Trend magnitude, % change",
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "message": {
        +          "description": "Present when the watchlist is empty",
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": true,
        +      "description": "Request/response metadata (pagination cursors, snapshot timestamps, applied filters)",
        +      "properties": {},
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "type": "object"
        +}
  2. 10 tool updatesv0.3.2
    • Addedfind_emerging_roles
    • Addedget_profile
    • Addedlist_applications
    • Addedlist_saved_jobs
    • Addedlist_watchlist
    • Addedsave_job
    • Changedsearch_jobs2 fields changed
      • addedInput schema / properties / education
        Added value: +{
        +  "description": "Minimum degree the job requires (AI-extracted). E.g. 'bachelor' returns jobs whose stated requirement is exactly a bachelor's.",
        +  "enum": [
        +    "none",
        +    "associate",
        +    "bachelor",
        +    "master",
        +    "phd"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / experience
        Added value: +{
        +  "description": "Years-of-experience bucket the job asks for (AI-extracted yearsMin). E.g. '0-2' for entry-level-friendly roles, '10+' for very senior ones.",
        +  "enum": [
        +    "0-2",
        +    "3-5",
        +    "5-10",
        +    "10+"
        +  ],
        +  "type": "string"
        +}
    • Addedtrack_application
    • Addedupdate_preferences
    • Addedwatch_company
  3. 22 tool updatesv0.1.6
    • First observedcompany_fit
    • First observedcompare_companies
    • First observedfind_breakout_companies
    • First observedfind_companies
    • First observedfind_emerging_skills
    • First observedget_company_history
    • First observedget_company_profile
    • First observedget_job
    • First observedget_market_history
    • First observedget_market_pulse
    • First observedget_skill_history
    • First observedinterview_prep
    • First observedmarket_position
    • First observedmatch_job
    • First observedrecommendations
    • First observedresume_rewrite
    • First observedsalary_benchmark
    • First observedsearch_companies
    • First observedsearch_jobs
    • First observedskill_gap
    • First observedskill_impact
    • First observedwatchlist_intelligence

TDQS

A4.4/5.0

Scored across 13 tools

Disambiguation4/5

Each tool has a distinct resource and generally clear purpose, with explicit 'not for' notes that reduce ambiguity. skill_gap vs skill_impact and market_position vs salary_benchmark are the closest pairs, but their descriptions draw adequate boundaries.

Naming Consistency3/5

The six get_* retrieval tools follow a clear verb_noun pattern, but the rest are mixed noun phrases like salary_benchmark, skill_gap, and interview_prep, or inverted patterns like resume_rewrite. The names are readable but the convention is not uniform.

Tool Count5/5

Thirteen tools is well within the ideal range and each tool earns its place for a job-search and career-intelligence platform. The set covers search, job details, company profiles, skills analysis, resume prep, interview prep, and historical analytics without feeling bloated.

Completeness3/5

Core workflows like searching jobs, viewing roles, benchmarking salary, analyzing skill gaps, and preparing for interviews are covered. However, several tools defer to tools not exposed in this server, such as get_market_pulse, list_watchlist, compare_companies, match_job, company_fit, and find_emerging_skills, creating notable dead ends.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server that provides tools to interact with LinkedIn's Feeds and Job API. You can do "search for 3 data engineer jobs in . For each job check if it a good match for me by analyzing it against my resume in file resume.md."
    207
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to search and explore a large database of tech job listings with filtering options.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to access and interact with LinkedIn data—profiles, messaging, jobs, companies, and more—via MCP, with remote or local deployment.
    2
    22
    52 npm
    9
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to pull live job listings from major ATS platforms (Greenhouse, Lever, Ashby, Workable), Hacker News hiring threads, and detect hiring signals on company career pages.
    -