Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Job Search MCP

NPM · @SERVATION/JOB-SEARCH-MCP · SCANNED AUG 7

Claude searches real job boards, scores each job 0-100 for fit, and shows a ranked board.

+36 this week 64 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security87
  • No malware found by supply-chain analysis.Pass
  • Known CVEs were checked across the 96 of 100 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Dependency health was assessed across the 96 of 100 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability40
  • 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Fail
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 1681 tokens (~152/item across 11 items; 10 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management40
  • Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (20% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · @servation/job-search-mcp

# add to Claude Code
claude mcp add servation-job-search-mcp -- npx -y @servation/job-search-mcp
# add to Codex CLI
codex mcp add servation-job-search-mcp -- npx -y @servation/job-search-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servation-job-search-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@servation/job-search-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add servation-job-search-mcp --command npx --arg -y --arg @servation/job-search-mcp
# ~/.hermes/config.yaml
mcp_servers:
  servation-job-search-mcp:
    command: "npx"
    args: ["-y", "@servation/job-search-mcp"]
// mcp.json
{
  "mcpServers": {
    "servation-job-search-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@servation/job-search-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 6 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

  • 4 Aug 26 +5
    • Stability: unverified → 0.30 functional
  • 3 Aug 26 +15
    • Provenance: unverified → fail security
    • Known CVEs: unverified → partial security
    • Install scripts: unverified → pass security
    • Maintenance: unverified → pass functional
    • Dependency health: unverified → partial functional
    • License: unverified → pass functional
    • Licence: MIT functional
  • 2 Aug 26 +15
    • Malware scan: unverified → pass security
  • 31 Jul 26 −3
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 −40
    • Install scripts: pass → unverified security
    • Provenance: fail → unverified security
    • Known CVEs: partial → unverified security
    • Malware scan: pass → unverified security
    • Maintenance: pass → unverified functional
    • Dependency health: partial → unverified functional
    • License: pass → unverified functional
    • Licence: MIT functional
  • 27 Jul 26 +28
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 43

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 7 Aug 2026 · Analysed npm/@servation/[email protected]

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm
Dependencies 96 packages
Packages resolved 96
Deprecated 96
Stale 29
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

MCP tools · 10 exposed · ~1,675 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
bulk_status ~183

Triage MANY board jobs at once by score and/or source — e.g. dismiss every scored job under 60. Applies `status` to all scanned (board) jobs matching the filters; the server selects them, so you do NOT need the individual job ids. `below_score`/`above_score` match SCORED jobs only (use clear_jobs for un-evaluated ones). Provide at least one filter. Returns text; call show_board afterward to display.

NameTypeReqDescription
above_scorenumberMatch scored jobs with matchScore AT OR ABOVE this.
below_scorenumberMatch scored jobs with matchScore BELOW this (e.g. 60).
notesstringOptional note to attach to every matched job.
sourcestringRestrict to one source.
statusstringyesStatus to apply to every match.

No output schema declared.

No examples provided.

clear_jobs ~106

Clear jobs from the review board. which='unscored' (default) removes only the not-yet-evaluated leftovers; which='all' clears the whole board. Saved/applied jobs (the tracker) and dismissed jobs are NOT affected — dismissed jobs still won't be re-sourced. Returns text; call show_board to display.

NameTypeReqDescription
whichstring'unscored' (default) clears un-evaluated jobs; 'all' clears the whole board.

No output schema declared.

No examples provided.

evaluate_jobs ~210

Score one or more sourced jobs for THIS candidate (holistic). YOU assign each job a 0-100 fit score directly, using the candidate summary (shown in find_jobs / whats_promising) and the job description. Weigh the must-have requirements, the candidate's actual skills and years of experience (a role demanding far more seniority/years than the candidate has should score LOWER), domain fit, and standout strengths. Calibrate and use the FULL range — do not bunch everything at 80+: 80-100 = strong fit and realistic; 60-79 = good with real gaps; 40-59 = partial/stretch (e.g. wrong level); below 40 = poor or wrong field. Pass { job_id, score, reason } per job. Use the EXACT bracketed ids; do not invent them. Score every job in one call. Returns text; call show_board afterward to display the ranked board.

NameTypeReqDescription
evaluationsarrayyesOne entry per job to score.

No output schema declared.

No examples provided.

find_jobs ~397

Source live jobs (LinkedIn + Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Hacker News, RemoteOK, Remotive), dedup them, and return them as text with full descriptions. Uses the saved profile's roles/location by default; pass query/location/filters to override. This returns UNSCORED jobs and does NOT show a card UI — immediately score all of them with evaluate_jobs (a 0-100 fit score + reason each), then show_board once, to present the single ranked board. Do not just list them back.

NameTypeReqDescription
date_postedstringRecency filter (LinkedIn).
experience_levelstringSeniority filter (LinkedIn).
job_typestringEmployment type (LinkedIn).
limitnumberMax jobs to return/persist this run (default 15).
locationstringLocation filter, e.g. 'California' or 'Remote'. Overrides the profile's search location.
max_applicantsnumberSurface low-applicant LinkedIn jobs (uses LinkedIn's early-applicant filter, ~under 25). Exact applicant-count filtering requires the LinkedIn cookie.
max_yearsnumberCandidate's years of experience for this search (overrides the saved profile); also defaults the seniority filter.
querystringRole/keyword filter, e.g. 'backend java spring'. Overrides the profile's target roles.
remotestringWorkplace type (LinkedIn); also sets remote preference.
salary_minnumberMinimum annual salary filter (LinkedIn), e.g. 100000.
sort_bystringLinkedIn result ordering.
sourcesarrayRestrict to these sources (default: all).
verify_urlsbooleanIf true, network-verify each job URL (slower). Default false.

No output schema declared.

No examples provided.

rescore_board ~129

Re-score the WHOLE board from scratch — every job, INCLUDING ones that already have a score. Use this when the user asks to 'rescore'/'re-evaluate' the board or after the scoring approach changed. Returns all board jobs with their ids + descriptions; call evaluate_jobs with a FRESH { job_id, score, reason } for EACH (do not skip already-scored ones), then call show_board. Set include_saved=true to also re-score the saved/applied tracker.

NameTypeReqDescription
include_savedbooleanAlso re-score the saved/applied tracker jobs (default false).

No output schema declared.

No examples provided.

review_saved ~59

List the tracker as text: jobs marked saved (interested) or applied, with their status, score, and notes. Use this to see what you're tracking or have applied to. To DISPLAY the tracker widget, call show_board with view='saved'.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

save_profile ~214

Extract the candidate's profile from their resume text (which the user pastes in chat) and save it. Pull: full name; core technical skills; suggested target roles; preferred/search location; total years of professional experience (integer); and pass the resume text as rawText. The profile is used by find_jobs (target roles + location) and by scoring (years of experience drives the experience penalty), so set yearsOfExperience accurately. Merges with any existing profile.

NameTypeReqDescription
blockedCompaniesarrayCompanies to exclude from sourcing.
namestringCandidate's full name.
prefersRemotebooleanWhether the candidate prefers remote.
rawTextstringThe full resume text, stored for reference.
searchLocationstringPreferred location, e.g. 'California' or 'Remote'.
skillsarrayCore technical skills.
targetRolesarraySuggested target job titles.
yearsOfExperiencenumberTotal years of professional experience (integer).

No output schema declared.

No examples provided.

set_status ~128

Triage a job by id: 'saved' (interested/tracking), 'applied' (also stamps the date), 'interviewing', 'offered', 'dismissed' (skip), or 'discovered' (undo back to the board). Moves it between the scanned/saved/dismissed lists and persists. Optionally attach notes. Called by the review UI; also usable directly.

NameTypeReqDescription
job_idstringyesThe job's id.
notesstringOptional notes to attach to the job.
statusstringyesNew triage status.
NameTypeReqDescription
countnumberyes
jobsarrayyes
profileyes
scoredbooleanyes
viewstring

No examples provided.

show_board ~113

Display the job board (or the saved/applied tracker) as an interactive widget. Call this ONCE, at the end of a request, after doing the work (find_jobs/evaluate_jobs/bulk_status/clear_jobs/whats_promising are text-only and do NOT render). view='board' (default) shows the ranked board; view='saved' shows the tracker.

NameTypeReqDescription
viewstring'board' (default) = the ranked board; 'saved' = the applied/saved tracker.
NameTypeReqDescription
countnumberyes
jobsarrayyes
profileyes
scoredbooleanyes
viewstring

No examples provided.

whats_promising ~136

List the current job board as text: every scored job (with its id) and any UNSCORED jobs with their ids + descriptions so you can evaluate them. To score the unscored ones, call evaluate_jobs with the EXACT bracketed ids shown. Use this to review jobs already found (find_jobs only returns brand-new ones). To re-score jobs that ALREADY have a score, use rescore_board instead. To DISPLAY the board widget to the user, call show_board (this returns text for you to act on).

NameTypeReqDescription
limitnumberMax unscored jobs to surface for evaluation (default 15).

No output schema declared.

No examples provided.