Multi-source job search MCP server — aggregation, enrichment, fit scoring, and resume tailoring
jobsearch-mcp has 14 well-named tools with clear verb-noun patterns (search_jobs, track_job, score_fit). All tools have descriptions (avg ~120 chars, within baseline 34-392 range). Input schemas are present and typed for all tools. However, output schemas are NOT documented, the code shows tool implementations but no explicit return type documentation visible in the source. Parameter descriptions are present but often minimal (e.g., 'Job title or keyword to search for' lacks format/constraint details). Error handling is basic, no recovery guidance or actionable error messages visible. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in the spec. Missing pagination guidance for list-returning tools like get_tracked_jobs.
Add a timestamped note to a tracked job
Parse unstructured resume or bio text into a structured resume profile using Claude
Generate a structured cover letter brief from a job description and resume using Claude
Delete the current user's stored resume profile
Fetch and enrich a job posting with full content via Firecrawl, Crawl4AI, or raw HTTP fetch with caching
Fetch salary histogram and historical trend data for a job title from Adzuna
Output schemas not documented. Code shows tool implementations but no explicit return type schemas visible in source. LLMs cannot plan downstream calls or extract fields without knowing response structure.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk classifications. track_job, update_job_status, add_job_note, set_user_profile, delete_user_profile are WRITE/DESTRUCTIVE but lack annotations to signal this to clients.
Parameter descriptions lack format/constraint details. E.g., 'Job title or keyword to search for' does not specify length limits, character restrictions, or examples. 'Location filter (optional)' does not clarify format (city, state, country, postal code?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Retrieve all tracked jobs for the current user, optionally filtered by status
Retrieve the current user's stored resume profile
Score resume fit and ATS compatibility against a job description using Claude
Search for jobs across multiple sources (Adzuna, Remotive, We Work Remotely, USAJobs, The Muse, Findwork, JobSpy)
Store or update the current user's resume profile
Tailor a resume profile to a specific job description, returning only changed sections
Mark a job as seen or applied, storing it in the user's job tracking database
Update the status of a tracked job (seen, applied, interviewing, offered, rejected, closed)
No error handling guidance visible. Code does not show recovery hints (e.g., 'If job not found, try search_jobs first'). Errors are likely raw exceptions without actionable next steps for LLMs.
get_tracked_jobs lacks pagination guidance. No limit parameter visible, no mention of max results or cursor-based pagination. Returning all tracked jobs could exhaust context window.