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.
Available components
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
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 29 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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
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
claude mcp add servation-job-search-mcp -- npx -y @servation/job-search-mcp
codex mcp add servation-job-search-mcp -- npx -y @servation/job-search-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servation-job-search-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@servation/job-search-mcp"
],
"enabled": true
}
}
} openclaw mcp add servation-job-search-mcp --command npx --arg -y --arg @servation/job-search-mcp
mcp_servers:
servation-job-search-mcp:
command: "npx"
args: ["-y", "@servation/job-search-mcp"] {
"mcpServers": {
"servation-job-search-mcp": {
"command": "npx",
"args": [
"-y",
"@servation/job-search-mcp"
]
}
}
} 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.
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.
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.
bulk_status Bulk Triage ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| above_score | number | – | Match scored jobs with matchScore AT OR ABOVE this. |
| below_score | number | – | Match scored jobs with matchScore BELOW this (e.g. 60). |
| notes | string | – | Optional note to attach to every matched job. |
| source | string | – | Restrict to one source. |
| status | string | yes | Status to apply to every match. |
No output schema declared.
No examples provided.
clear_jobs 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.
| Name | Type | Req | Description |
|---|---|---|---|
| which | string | – | 'unscored' (default) clears un-evaluated jobs; 'all' clears the whole board. |
No output schema declared.
No examples provided.
evaluate_jobs 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.
| Name | Type | Req | Description |
|---|---|---|---|
| evaluations | array | yes | One entry per job to score. |
No output schema declared.
No examples provided.
find_jobs 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.
| Name | Type | Req | Description |
|---|---|---|---|
| date_posted | string | – | Recency filter (LinkedIn). |
| experience_level | string | – | Seniority filter (LinkedIn). |
| job_type | string | – | Employment type (LinkedIn). |
| limit | number | – | Max jobs to return/persist this run (default 15). |
| location | string | – | Location filter, e.g. 'California' or 'Remote'. Overrides the profile's search location. |
| max_applicants | number | – | Surface low-applicant LinkedIn jobs (uses LinkedIn's early-applicant filter, ~under 25). Exact applicant-count filtering requires the LinkedIn cookie. |
| max_years | number | – | Candidate's years of experience for this search (overrides the saved profile); also defaults the seniority filter. |
| query | string | – | Role/keyword filter, e.g. 'backend java spring'. Overrides the profile's target roles. |
| remote | string | – | Workplace type (LinkedIn); also sets remote preference. |
| salary_min | number | – | Minimum annual salary filter (LinkedIn), e.g. 100000. |
| sort_by | string | – | LinkedIn result ordering. |
| sources | array | – | Restrict to these sources (default: all). |
| verify_urls | boolean | – | If true, network-verify each job URL (slower). Default false. |
No output schema declared.
No examples provided.
rescore_board Re-score 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.
| Name | Type | Req | Description |
|---|---|---|---|
| include_saved | boolean | – | Also re-score the saved/applied tracker jobs (default false). |
No output schema declared.
No examples provided.
review_saved Review Saved Jobs ~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 Save Resume 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.
| Name | Type | Req | Description |
|---|---|---|---|
| blockedCompanies | array | – | Companies to exclude from sourcing. |
| name | string | – | Candidate's full name. |
| prefersRemote | boolean | – | Whether the candidate prefers remote. |
| rawText | string | – | The full resume text, stored for reference. |
| searchLocation | string | – | Preferred location, e.g. 'California' or 'Remote'. |
| skills | array | – | Core technical skills. |
| targetRoles | array | – | Suggested target job titles. |
| yearsOfExperience | number | – | Total years of professional experience (integer). |
No output schema declared.
No examples provided.
set_status Set Job 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.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The job's id. |
| notes | string | – | Optional notes to attach to the job. |
| status | string | yes | New triage status. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| jobs | array | yes | – |
| profile | – | yes | – |
| scored | boolean | yes | – |
| view | string | – | – |
No examples provided.
show_board 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.
| Name | Type | Req | Description |
|---|---|---|---|
| view | string | – | 'board' (default) = the ranked board; 'saved' = the applied/saved tracker. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | – |
| jobs | array | yes | – |
| profile | – | yes | – |
| scored | boolean | yes | – |
| view | string | – | – |
No examples provided.
whats_promising What's 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).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max unscored jobs to surface for evaluation (default 15). |
No output schema declared.
No examples provided.