CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Ai Hr Management Toolkit

xjtlumedia/ai-hr-management-toolkit
21 toolsSTDIOregistry active
Summary

Wraps a complete applicant tracking system into 21 MCP tools that cover resume ingestion, candidate scoring, and pipeline management. Parse PDFs, DOCX, and URLs into structured JSON, then extract skills, entities, and experience using algorithmic analysis (no LLM calls for 20 of 21 tools). The ATS layer handles jobs, candidates, interviews, offers, notes, and compliance reporting with full CRUD operations. Includes candidate ranking, stage movement, bottleneck detection, and interview feedback aggregation. Useful when you need to screen dozens of resumes or manage a hiring pipeline entirely through Claude without switching to a standalone ATS platform.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

21 tools
parse_resumeParse a resume file (PDF, DOCX, TXT, MD) or URL and extract text with algorithmic pre-analysis including keyword extraction, metrics detection, section identification, and experience estimation.2 params

Parse a resume file (PDF, DOCX, TXT, MD) or URL and extract text with algorithmic pre-analysis including keyword extraction, metrics detection, section identification, and experience estimation.

Parameters* required
contentstring
Base64-encoded file content, or a URL string when fileType is 'url'
fileTypestring
File type: pdf, docx, txt, md, or urlone of pdf · docx · txt · md · url
analyze_resumeUnified resume analysis tool. Select which analysis aspects to run via the "aspects" parameter: - "keywords" — TF-IDF keyword extraction with NER overlay and skill categorization - "entities" — Named Entity Recognition (12 types with confidence and disambiguation) - "skills" —...9 params

Unified resume analysis tool. Select which analysis aspects to run via the "aspects" parameter: - "keywords" — TF-IDF keyword extraction with NER overlay and skill categorization - "entities" — Named Entity Recognition (12 types with confidence and disambiguation) - "skills" —...

Parameters* required
aspectsarray
Which analysis aspects to include. Defaults to ["all"]. Use specific aspects for faster, focused results.
contentstring
Base64-encoded file content or URL. Use with fileType. Ignored if resumeText is provided.
fileTypestring
File type when using content parameter.one of pdf · docx · txt · md · url
resumeTextstring
Raw resume text. Provide either resumeText OR (content + fileType), not both.
entityTypesarray
Filter entities to specific types (e.g., ['SKILL', 'JOB_TITLE']). Only relevant for 'entities' aspect.
topKeywordsnumber
Number of top keywords to return (default: 40). Only relevant for 'keywords' aspect.
jobDescriptionstring
Job description for similarity scoring and skill gap analysis. Required when aspects includes 'similarity'.
requiredSkillsarray
Optional list of skills to check for match/miss status.
minEntityConfidencenumber
Minimum confidence (0-1) for entity inclusion. Only relevant for 'entities' aspect.
batch_parse_resumesParse multiple resume files at once and run the full algorithmic pipeline on each. Returns raw text, pipeline analysis, keywords, entities, and confidence scores for each file. The LLM client should interpret and structure the results.1 params

Parse multiple resume files at once and run the full algorithmic pipeline on each. Returns raw text, pipeline analysis, keywords, entities, and confidence scores for each file. The LLM client should interpret and structure the results.

Parameters* required
filesarray
Array of files to parse
assess_candidateAssess a resume against recruiter-defined criteria. Supports 8 criteria axes: Education, Experience, Skills, Certifications, Knowledge Stack, Competitions, Thresholds, and Job Qualification. Returns per-axis scores, weighted overall score, and a pass/review/reject decision.6 params

Assess a resume against recruiter-defined criteria. Supports 8 criteria axes: Education, Experience, Skills, Certifications, Knowledge Stack, Competitions, Thresholds, and Job Qualification. Returns per-axis scores, weighted overall score, and a pass/review/reject decision.

Parameters* required
modelstring
Model name
apiKeystring
API key for the AI provider
contentstring
Base64-encoded file content, or URL string when fileType is 'url', or plain resume text when fileType is 'txt'
criteriaobject
Assessment criteria object. Structure: { name: string, education: { enabled, weight, minimumDegreeLevel, preferredFields, targetUniversities, acceptAnyAccredited }, experience: { enabled, weight, minimumYears, preferredYearsRange, requiredIndustries, preferredCompanies, requiredJobTitles }, skills: { enabled, weight, requiredSkills: [{name, required, minimumProficiency}], niceToHaveSkills, minimumSkillMatchPercent }, certifications: { enabled, weight, requiredCertifications, preferredCertifications }, knowledgeStack: { enabled, weight, requiredLanguages, requiredFrameworks, requiredTools, requiredDatabases, requiredPlatforms }, competitions: { enabled, weight, valuedCompetitions, requirePublications, requirePatents, requireOpenSource }, thresholds: { autoPassPercent, reviewRangePercent, autoRejectBelowPercent }, jobQualification: { enabled, weight, jobDescription, companyCultureKeywords, softSkillsRequired, leadershipRequired } }
fileTypestring
File typeone of pdf · docx · txt · md · url
providerstring
AI provider (openai, anthropic, google, deepseek, etc.)
inspect_pipelineRun the full 5-node atomic deconstruction pipeline (Ingestion → Sanitization → Tokenization → Classification → Serialization) on resume text. Returns stage-by-stage metrics, confidence scores, entity classification with disambiguation, data quality assessment, and assumption a...1 params

Run the full 5-node atomic deconstruction pipeline (Ingestion → Sanitization → Tokenization → Classification → Serialization) on resume text. Returns stage-by-stage metrics, confidence scores, entity classification with disambiguation, data quality assessment, and assumption a...

Parameters* required
resumeTextstring
The raw text content of a resume
ats_manage_candidatesUnified candidate management for the ATS pipeline. Actions: CRUD: add, update, delete, move, bulk_move, list Analytics: rank (sort by fit), filter (by criteria), recommend_stage (suggest moves), compare (side-by-side), summarize (overview stats) Pass the current candidates rec...4 params

Unified candidate management for the ATS pipeline. Actions: CRUD: add, update, delete, move, bulk_move, list Analytics: rank (sort by fit), filter (by criteria), recommend_stage (suggest moves), compare (side-by-side), summarize (overview stats) Pass the current candidates rec...

Parameters* required
actionobject
Action to perform. Types: - { type: "add", candidate: { firstName, lastName, email, phone?, jobId, currentStage?, tags?, source? } } - { type: "update", candidateId: string, fields: { partial candidate fields } } - { type: "delete", candidateId: string } - { type: "move", move: { candidateId, newStage } } - { type: "bulk_move", moves: [{ candidateId, newStage }, ...] } - { type: "list", jobId?: string, stage?: string } - { type: "rank" } — Rank candidates by fit score - { type: "filter" } — Filter by criteria - { type: "recommend_stage" } — Suggest pipeline stage changes - { type: "compare" } — Side-by-side comparison - { type: "summarize" } — Aggregate stats
criteriaobject
For rank/filter: { requiredSkills?: string[], minimumRating?: number, stages?: string[], tags?: string[], sortBy?: 'rating'|'name'|'stage'|'assessment', limit?: number }
candidatesobject
Current candidates record (id → candidate object). Pass {} for a fresh start. For analytics actions (rank/filter/compare/summarize/recommend_stage), pass as array or record.
jobDescriptionstring
Optional job description for relevance ranking (used by 'rank' action).
ats_manage_jobsManage job postings in the ATS. Actions: create (new job posting), update (edit fields), delete, list (with optional status/department filter), search (by keyword in title/description), close, reopen. Pass current jobs record and an action.2 params

Manage job postings in the ATS. Actions: create (new job posting), update (edit fields), delete, list (with optional status/department filter), search (by keyword in title/description), close, reopen. Pass current jobs record and an action.

Parameters* required
jobsobject
Current jobs record: Record<id, jobObject>. Pass {} for empty.
actionobject
Action to perform. Must include "type" field: "create" | "update" | "delete" | "list" | "search" | "close" | "reopen". See tool description for per-action fields.
ats_manage_offersManage offers in the ATS. Actions: create (validate & structure), update_status (draft→pending-approval→approved→sent→accepted/declined), delete (remove offer), list (all offers with optional filters), compare (side-by-side offer comparison), validate (check for issues). Retur...2 params

Manage offers in the ATS. Actions: create (validate & structure), update_status (draft→pending-approval→approved→sent→accepted/declined), delete (remove offer), list (all offers with optional filters), compare (side-by-side offer comparison), validate (check for issues). Retur...

Parameters* required
actionobject
Action to perform: - { type: "create", offer: { candidateId, candidateName, jobId, jobTitle, salary: { base, currency, period, bonus?, equity? }, benefits?, startDate, expirationDate, notes? } } - { type: "update_status", offerId, newStatus: "pending-approval"|"approved"|"sent"|"accepted"|"declined"|"withdrawn"|"negotiating", comment? } - { type: "delete", offerId } - { type: "list", filters?: { candidateId?, jobId?, status? } } - { type: "compare", offers: [existing offer objects] } - { type: "validate", offer: { same as create } }
existingOffersobject
Current offers record (id → offer object). Pass {} for a fresh start.
ats_manage_notesManage candidate notes in the ATS. Actions: add (create note on candidate), update (edit note content), list (get all notes for a candidate), delete (remove a note), search (find notes by keyword across one or all candidates), bulk_add (add notes to multiple candidates). Pass...2 params

Manage candidate notes in the ATS. Actions: add (create note on candidate), update (edit note content), list (get all notes for a candidate), delete (remove a note), search (find notes by keyword across one or all candidates), bulk_add (add notes to multiple candidates). Pass...

Parameters* required
actionobject
Action to perform. "type": "add" | "update" | "list" | "delete" | "search" | "bulk_add".
candidatesobject
Current candidates record: Record<id, candidateObject>.
ats_schedule_interviewFull CRUD for interviews. Actions: create (validate & schedule with conflict detection), update (reschedule/modify), delete (permanent removal), list (filter by candidateId/jobId/status), get (single interview by id). Pass existing interviews record for conflict checks.2 params

Full CRUD for interviews. Actions: create (validate & schedule with conflict detection), update (reschedule/modify), delete (permanent removal), list (filter by candidateId/jobId/status), get (single interview by id). Pass existing interviews record for conflict checks.

Parameters* required
actionobject
Action to perform: - { type: "create", interview: { candidateId, candidateName, jobId, jobTitle, type, scheduledDate, durationMinutes, interviewers, location?, meetingLink?, notes? } } - { type: "update", interviewId, updates: { partial interview fields } } - { type: "delete", interviewId } - { type: "list", filters?: { candidateId?, jobId?, status? } } - { type: "get", interviewId }
existingInterviewsobject
Current interviews record: Record<id, interviewObject>. Pass {} for fresh start.
ats_interview_feedbackManage interview feedback in the ATS. Actions: submit (add feedback to completed interview), get (retrieve feedback for an interview), update (modify existing feedback), list_pending (interviews awaiting feedback), list_completed (interviews with feedback, optionally filtered...2 params

Manage interview feedback in the ATS. Actions: submit (add feedback to completed interview), get (retrieve feedback for an interview), update (modify existing feedback), list_pending (interviews awaiting feedback), list_completed (interviews with feedback, optionally filtered...

Parameters* required
actionobject
Action to perform. "type": "submit" | "get" | "update" | "list_pending" | "list_completed" | "analyze" | "summary".
interviewsobject
Current interviews record: Record<id, interviewObject>.
ats_analyticsUnified ATS analytics. Select report type: - "dashboard" — Hiring health report: key metrics, stage distribution, offer stats, velocity, insights - "pipeline" — Funnel analysis: conversion rates, avg days-in-stage, bottleneck detection - "full" — Both reports combined5 params

Unified ATS analytics. Select report type: - "dashboard" — Hiring health report: key metrics, stage distribution, offer stats, velocity, insights - "pipeline" — Funnel analysis: conversion rates, avg days-in-stage, bottleneck detection - "full" — Both reports combined

Parameters* required
jobIdstring
Optional: filter pipeline analytics to a specific job.
stateobject
ATS state object with candidates, jobs, interviews, and offers records (each keyed by ID). Required for 'dashboard' and 'full' reports.
candidatesarray
Array of candidate objects. Required for 'pipeline' report. For 'full'/'dashboard', candidates come from state.
stageOrderarray
Ordered pipeline stages for funnel analysis. Defaults to: ["applied","screening","phone-screen","interview","final-round","offer","hired","rejected"]
report_typestring
Which report to generate. Defaults to "full".one of dashboard · pipeline · full
ats_generate_demo_dataGenerate a full set of realistic demo data for the ATS (Applicant Tracking System). Returns a complete ATSState with sample jobs, candidates at various pipeline stages, scheduled interviews, and offers. Useful for testing, demonstrations, or populating an empty ATS instance.1 params

Generate a full set of realistic demo data for the ATS (Applicant Tracking System). Returns a complete ATSState with sample jobs, candidates at various pipeline stages, scheduled interviews, and offers. Useful for testing, demonstrations, or populating an empty ATS instance.

Parameters* required
includeStatsboolean
If true, include summary statistics alongside the generated data. Default: false.
ats_searchGlobal search across the ATS. Actions: search (keyword search across candidates, jobs, interviews, offers — scoped optionally), filter_candidates (structured filter by stage/job/tags/score), get_entity (retrieve a single entity by type+id). Pass the full ATS state.2 params

Global search across the ATS. Actions: search (keyword search across candidates, jobs, interviews, offers — scoped optionally), filter_candidates (structured filter by stage/job/tags/score), get_entity (retrieve a single entity by type+id). Pass the full ATS state.

Parameters* required
stateobject
Full ATS state: { candidates: Record<id, obj>, jobs: Record<id, obj>, interviews: Record<id, obj>, offers: Record<id, obj> }
actionobject
Action: "search" (query, scope?, limit?), "filter_candidates" (filters: {stage?, jobId?, tags?, minScore?}), "get_entity" (entityType, entityId).
ats_complianceEnterprise compliance toolkit: audit trail queries, EEO/EEOC diversity reporting, GDPR data export & erasure (right to be forgotten), data retention policy checks. Actions: query_audit, eeo_report, eeo_record, gdpr_export, gdpr_erase, retention_check, update_settings, get_sett...2 params

Enterprise compliance toolkit: audit trail queries, EEO/EEOC diversity reporting, GDPR data export & erasure (right to be forgotten), data retention policy checks. Actions: query_audit, eeo_report, eeo_record, gdpr_export, gdpr_erase, retention_check, update_settings, get_sett...

Parameters* required
stateobject
Current ATS state containing candidates, auditLog, eeoRecords, complianceSettings.
actionobject
Action to perform. Set "type" to one of: query_audit, eeo_report, eeo_record, gdpr_export, gdpr_erase, retention_check, update_settings, get_settings.
ats_talent_poolManage passive candidate talent pools (CRM). Create pools, add/remove candidates, search across pools, get pool analytics. Actions: create, update, delete, list, get, add_candidates, remove_candidates, search, analytics.2 params

Manage passive candidate talent pools (CRM). Create pools, add/remove candidates, search across pools, get pool analytics. Actions: create, update, delete, list, get, add_candidates, remove_candidates, search, analytics.

Parameters* required
stateobject
Current ATS state containing talentPools and candidates.
actionobject
Action to perform. Set "type" to one of: create, update, delete, list, get, add_candidates, remove_candidates, search, analytics.
ats_scorecardStructured interview scorecards — create evaluation templates with weighted criteria, fill scorecards per candidate/evaluator, aggregate scores to rank candidates, ensure consistent hiring decisions. Actions: create_template, list_templates, get_template, delete_template, fill...2 params

Structured interview scorecards — create evaluation templates with weighted criteria, fill scorecards per candidate/evaluator, aggregate scores to rank candidates, ensure consistent hiring decisions. Actions: create_template, list_templates, get_template, delete_template, fill...

Parameters* required
stateobject
Current ATS state containing scorecardTemplates and scorecardEntries.
actionobject
Action to perform. Set "type" to one of: create_template, list_templates, get_template, delete_template, fill, get_entry, get_candidate_scores, aggregate, delete_entry.
ats_onboardingPost-hire onboarding checklist management. Create checklists with categorized tasks (paperwork, IT setup, training, orientation, compliance), track per-task progress, find overdue items, manage assignees. Actions: create, list, get, update_task, add_task, remove_task, progress...2 params

Post-hire onboarding checklist management. Create checklists with categorized tasks (paperwork, IT setup, training, orientation, compliance), track per-task progress, find overdue items, manage assignees. Actions: create, list, get, update_task, add_task, remove_task, progress...

Parameters* required
stateobject
Current ATS state containing onboardingChecklists and candidates.
actionobject
Action to perform. Set "type" to one of: create, list, get, update_task, add_task, remove_task, progress, delete, overdue.
ats_communicationCandidate communication management — create email templates with {{variable}} interpolation, preview and send messages, log inbound/outbound communications, search history, and get communication stats. Actions: create_template, list_templates, get_template, update_template, de...2 params

Candidate communication management — create email templates with {{variable}} interpolation, preview and send messages, log inbound/outbound communications, search history, and get communication stats. Actions: create_template, list_templates, get_template, update_template, de...

Parameters* required
stateobject
Current ATS state containing emailTemplates, communicationLog, and candidates.
actionobject
Action to perform. Set "type" to one of: create_template, list_templates, get_template, update_template, delete_template, preview, send, log, get_history, search_history, stats.
export_resultsExport parsed resume results to a specified format (JSON, CSV, or Markdown). Accepts an array of structured resume results and returns formatted output.2 params

Export parsed resume results to a specified format (JSON, CSV, or Markdown). Accepts an array of structured resume results and returns formatted output.

Parameters* required
formatstring
Export format: json, csv, or markdownone of json · csv · markdown
resultsarray
Array of parsed resume results with fileName and structured data
send_emailSend parsed resume results via email using SMTP. Requires SMTP configuration (host, port, user, pass) and recipient email. Sends an HTML summary of all results.8 params

Send parsed resume results via email using SMTP. Requires SMTP configuration (host, port, user, pass) and recipient email. Sends an HTML summary of all results.

Parameters* required
tostring
Recipient email address
resultsarray
Array of resume results to include
subjectstring
Email subject (optional)
smtpHoststring
SMTP server host
smtpPassstring
SMTP password or app password
smtpPortnumber
SMTP server port (default: 587)
smtpUserstring
SMTP username/email
smtpSecureboolean
Use TLS (default: false)

AI HR Management Toolkit

AI-powered resume parser & full Applicant Tracking System with 21 MCP tools. Parse PDFs, extract skills, detect patterns, score candidates, and manage a complete hiring pipeline — all from your AI assistant, no manual work required.

image image image

Live demo: https://ai-hr-management-toolkit.vercel.app

npm version License: MIT

mcp-ai-hr-management-toolkit server

What Is This?

You have 50 resumes to screen. Your AI assistant can reason about candidates — but it cannot open PDFs, extract structured data, or track pipeline stages. This toolkit bridges that gap.

Give your AI assistant 21 tools covering the entire hiring workflow:

  • Parse PDFs, DOCX, TXT, Markdown, and URLs into structured JSON
  • Extract skills, experience, keywords, and entities algorithmically
  • Score and rank candidates against job descriptions
  • Run a full ATS: jobs, candidates, interviews, offers, notes, and analytics

20 of 21 tools are 100% algorithmic — no LLM calls, no API keys required. The AI calls tools, interprets the results, and delivers analysis. You just ask questions.


Quick Start (MCP Clients)

No installation needed. Point your MCP client at the package:

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

{
  "mcpServers": {
    "ai-hr-management-toolkit": {
      "command": "npx",
      "args": ["-y", "mcp-ai-hr-management-toolkit"]
    }
  }
}

Example usage:

image image

Cursor — Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "ai-hr-management-toolkit": {
      "command": "npx",
      "args": ["-y", "mcp-ai-hr-management-toolkit"]
    }
  }
}

VS Code Copilot — Create .vscode/mcp.json in your project root:

{
  "servers": {
    "ai-hr-management-toolkit": {
      "command": "npx",
      "args": ["-y", "mcp-ai-hr-management-toolkit"]
    }
  }
}

VS Code users: Run the npx command from a directory that contains a package.json (i.e. any project root). The cwd key in .vscode/mcp.json can override the working directory if needed.

Windsurf / other MCP clients — Use the same npx pattern above.


Installation Options

Option 1: NPX (Zero-install, recommended)

Works from any project directory (requires a package.json in the working directory):

{
  "mcpServers": {
    "ai-hr-management-toolkit": {
      "command": "npx",
      "args": ["-y", "mcp-ai-hr-management-toolkit"]
    }
  }
}

Option 2: Global install

Install once, use from any directory:

npm install -g mcp-ai-hr-management-toolkit
{
  "mcpServers": {
    "ai-hr-management-toolkit": {
      "command": "mcp-ai-hr-management-toolkit",
      "args": []
    }
  }
}

Option 3: Remote HTTP endpoint

Deploy the Next.js app and use the Streamable HTTP transport:

https://your-domain.com/api/mcp

Test locally:

npx @modelcontextprotocol/inspector http://localhost:3000/api/mcp

Option 4: Local development (Web UI + MCP)

git clone <repo-url>
cd Resume-parser
npm install
npm run dev

Web UI at http://localhost:3000. MCP endpoint at http://localhost:3000/api/mcp. No .env needed — configure API keys in the UI or pass them per tool call.


All 21 MCP Tools

All tools return structured JSON with next_steps hints so the AI knows what to call next.

Resume Parsing & Ingestion

ToolWhat it doesAI?
parse_resumeParse PDF / DOCX / TXT / MD / URL → raw text + contacts, keywords, section mapNo
batch_parse_resumesParse up to 20 files in one call, full pipeline on eachNo
inspect_pipelineRun the 5-stage analysis pipeline → confidence scores, entity counts, data quality reportNo

Unified Analysis

ToolWhat it doesAI?
analyze_resumeMaster analysis tool with selectable aspects: keywords (TF-IDF + bigrams), patterns (date ranges, metrics, team sizes, career trajectory), entities (NER with 12 types + context disambiguation), skills (13 categories with proficiency estimation), experience (structured timeline), similarity (cosine, Jaccard, TF-IDF overlap vs. job description), or allNo

analyze_resume consolidates what were previously 7 separate tools (extract_keywords, detect_patterns, classify_entities, extract_skills_structured, extract_experience_structured, compute_similarity, analyze_resume_comprehensive) into a single entry point with aspect selection.

Candidate Matching & Scoring

ToolWhat it doesAI?
assess_candidateScore against up to 8 weighted criteria axes → weighted total + pass / review / reject decisionOptional

Export & Notifications

ToolWhat it doesAI?
export_resultsExport structured parse results to JSON or CSVNo
send_emailSend results via SMTP (config passed per call — no server-side secrets stored)No

ATS — Jobs

ToolWhat it doesAI?
ats_manage_jobsFull CRUD for job postings: create, read, update, delete, list, search by title/department/statusNo

ATS — Candidates & Pipeline

ToolWhat it doesAI?
ats_manage_candidatesCRUD + analytics: add, update, move stage, bulk-move, filter, rank, compare, recommend stage changes, summarizeNo
ats_analyticsUnified dashboard + pipeline analytics: stage distribution, conversion rates, avg time-in-stage, bottleneck detection, offer acceptance rateNo
ats_searchGlobal full-text search across all ATS entities (candidates, jobs, interviews, offers, notes)No

ATS — Interviews

ToolWhat it doesAI?
ats_schedule_interviewCreate, update, and delete interviews with conflict detection and interviewer availability checkNo
ats_interview_feedbackSubmit structured feedback, compute consensus score, summarize feedback across all interviewersNo

ATS — Offers & Notes

ToolWhat it doesAI?
ats_manage_offersFull offer lifecycle: draft → pending → approved → sent → accepted / declined / expiredNo
ats_manage_notesAdd, update, search, and delete timestamped candidate notesNo

ATS — Enterprise HR

ToolWhat it doesAI?
ats_complianceEEO/EEOC reporting, GDPR export/erasure, audit trail, data retention policiesNo
ats_talent_poolPassive candidate talent pools (CRM): create pools, add/remove candidates, search, analyticsNo
ats_scorecardStructured interview scorecards with weighted criteria, per-evaluator scores, aggregate rankingsNo
ats_onboardingPost-hire onboarding checklists: tasks by category, assignees, progress tracking, overdue alertsNo
ats_communicationEmail templates with {{variable}} interpolation, send/preview, communication history, statsNo

Testing & Seeding

ToolWhat it doesAI?
ats_generate_demo_dataGenerate a realistic sample ATS dataset (jobs, candidates, interviews, offers) for testingNo

assess_candidate optionally calls an LLM when you supply provider + apiKey; it falls back to fully algorithmic scoring otherwise.


Example Multi-Turn Flow

You: "Parse this resume and tell me if they're a good fit for our Senior Engineer role"

AI → parse_resume(file)
     → raw text, contact info, section map

AI → inspect_pipeline(rawText)
     → 5-stage confidence scores, entity classification

AI → analyze_resume(text, aspects=["skills", "patterns", "similarity"], jobDescription=...)
     → 13 skill categories with proficiency levels
     → career trajectory, metrics, date ranges
     → cosine 0.74, skill match 82%, gap analysis

AI synthesizes → "Strong match. 6 of 8 required skills present.
                  Two gaps: Kubernetes and system design at scale.
                  Recommend: Technical Screen"

Analysis Pipeline

Every resume runs through a 5-stage algorithmic pipeline:

┌─────────────┐    ┌──────────────┐    ┌──────────────┐    ┌────────────────┐    ┌───────────────┐
│  Ingestion  │───▶│ Sanitization │───▶│ Tokenization │───▶│ Classification │───▶│ Serialization │
│ (file/URL)  │    │ (noise trim) │    │  (TF-IDF)    │    │ (NER + disamb) │    │ (structured)  │
└─────────────┘    └──────────────┘    └──────────────┘    └────────────────┘    └───────────────┘
  1. Ingestion — PDF via pdf-parse v2, DOCX via mammoth, HTML/URL via cheerio, plain text/markdown natively
  2. Sanitization — Removes non-ASCII artifacts, normalizes whitespace, strips formatting noise
  3. Tokenization — TF-IDF with unigrams, bigrams, and trigrams; scored by document frequency
  4. Classification — NER with domain-aware disambiguation (e.g. "Java" as language vs. Indonesian city; "Go" as language vs. verb)
  5. Serialization — Maps entities to typed ResumeSchema with confidence scores and data quality metrics

Supported File Formats

FormatExtensionsParser
PDF.pdfpdf-parse v2
DOCX.docxmammoth
Plain text.txtdirect read
Markdown.md, .markdownregex-based
URL / HTMLany URL stringcheerio

Max file size: 10 MB


Structured Output Schema

contact        — name, email, phone, location, LinkedIn, GitHub, website, portfolio
summary        — professional summary text
skills[]       — name, category (13 types), proficiency, usage context
experience[]   — company, title, start/end dates, highlights, achievements (with metrics), technologies
education[]    — institution, degree, field, dates, GPA
certifications[] — name, issuer, date, credential URL
projects[]     — name, description, URL, technologies, highlights
languages[]    — spoken language and proficiency

Web UI

The app ships with a full web interface:

TabDescription
Single ParseUpload one file or paste a URL. Returns structured data, pipeline visualization, and AI-enhanced analysis
Batch ParseUpload up to 20 files. Export to JSON / CSV / PDF or email results
ChatConversational interface with tool access — ask questions about any parsed resume
ATSFull pipeline board: jobs, candidates (Kanban), interviews, offers, and analytics dashboard

Switch AI providers from the selector at the top. Supports OpenAI, Anthropic, Google, DeepSeek, GLM, Qwen, OpenRouter, and OpenCode Zen.


REST API Endpoints

All endpoints accept multipart/form-data with optional headers:

HeaderDescription
x-api-keyYour AI provider API key
x-ai-provideropenai / anthropic / google / deepseek / glm / qwen / openrouter / opencodezen
x-ai-modelSpecific model ID
# Parse a single resume
curl -X POST http://localhost:3000/api/parse \
  -H "x-api-key: sk-..." \
  -F "file=@resume.pdf"

# Batch parse (up to 20 files)
curl -X POST http://localhost:3000/api/batch-parse \
  -H "x-api-key: sk-..." \
  -F "files=@resume1.pdf" \
  -F "files=@resume2.docx"

# MCP endpoint (Streamable HTTP)
curl -X POST http://localhost:3000/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

# Export parsed data
curl -X POST http://localhost:3000/api/export \
  -H "Content-Type: application/json" \
  -d '{"format":"csv","results":[...]}'

Tech Stack

LayerTechnologies
FrameworkNext.js 16 (App Router, Turbopack), React 19, TypeScript
AIVercel AI SDK v6, multi-provider (OpenAI, Anthropic, Google, DeepSeek, GLM, Qwen, OpenRouter)
MCP@modelcontextprotocol/sdk v1.29 — Streamable HTTP + stdio transports
Parsingpdf-parse v2, mammoth, cheerio
NLPTF-IDF, NER, cosine similarity, Jaccard index (all in-process, no external services)
SchemaZod v4
ExportExcelJS (CSV/XLSX), jsPDF + jspdf-autotable
EmailNodemailer
StylingTailwind CSS v4, Framer Motion

Development

npm install

# Start dev server (Web UI at :3000 + MCP at /api/mcp)
npm run dev

# Build the standalone MCP CLI (stdio transport)
npm run build:mcp

# Build the Next.js app for production
npm run build

# Test MCP with the official inspector
npx @modelcontextprotocol/inspector http://localhost:3000/api/mcp
npx @modelcontextprotocol/inspector node dist/mcp-stdio.js

# Lint
npm run lint

Project Structure

src/
├── app/
│   ├── page.tsx              # Main UI (tabs, provider selector, chat, ATS)
│   ├── layout.tsx            # Root layout + global styles
│   └── api/
│       ├── parse/route.ts    # Single resume parse
│       ├── batch-parse/route.ts
│       ├── chat/route.ts     # Conversational AI with tool access
│       ├── mcp/route.ts      # MCP server (Streamable HTTP)
│       ├── models/route.ts   # Provider model listing
│       ├── export/route.ts   # JSON / CSV / PDF export
│       └── email/route.ts    # SMTP email
├── components/               # React UI components (parse, batch, chat, ATS)
│   └── ats/                  # ATS-specific views (Kanban, Dashboard, Scheduler…)
└── lib/
    ├── ai-model.ts           # Multi-provider model config (no env fallback)
    ├── mcp-server.ts         # MCP server — registers all 21 tools
    ├── schemas/
    │   ├── resume.ts         # Zod v4 ResumeSchema
    │   └── criteria.ts       # Assessment criteria schema
    ├── analysis/
    │   ├── pipeline.ts       # 5-stage pipeline orchestrator
    │   ├── sanitizer.ts      # Text cleaning
    │   ├── keyword-extractor.ts  # TF-IDF
    │   ├── classifier.ts     # NER with context disambiguation
    │   ├── pattern-matcher.ts    # Regex extraction (metrics, dates, contacts)
    │   └── scoring.ts        # Cosine similarity, Jaccard, skill matching
    ├── parser/
    │   ├── pdf.ts, docx.ts, text.ts, markdown.ts, url.ts
    │   └── index.ts
    ├── ats/
    │   ├── types.ts          # ATS entity types
    │   ├── store.ts          # In-memory ATS state
    │   ├── demo-data.ts      # Realistic seed data generator
    │   └── context.tsx       # React context for ATS state
    └── tools/
        ├── parse-resume.ts       # parse_resume
        ├── inspect-pipeline.ts   # inspect_pipeline
        ├── export-results.ts     # export_results
        ├── send-email.ts         # send_email
        └── mcp/                  # 17 MCP-specific tools
            ├── analyze-resume.ts     # analyze_resume (unified: keywords, patterns, entities, skills, experience, similarity)
            ├── batch-parse.ts        # batch_parse_resumes
            ├── assess-candidate.ts   # assess_candidate
            ├── ats-manage-candidates.ts  # ats_manage_candidates (includes rank/filter/compare/summarize)
            ├── ats-manage-jobs.ts
            ├── ats-manage-offers.ts
            ├── ats-manage-notes.ts
            ├── ats-analytics.ts      # ats_analytics (unified dashboard + pipeline)
            ├── ats-schedule-interview.ts
            ├── ats-interview-feedback.ts
            ├── ats-search.ts
            ├── ats-generate-demo-data.ts
            ├── ats-compliance.ts     # Enterprise: EEO / GDPR / audit
            ├── ats-talent-pool.ts    # Enterprise: passive candidate CRM
            ├── ats-scorecard.ts      # Enterprise: structured scorecards
            ├── ats-onboarding.ts     # Enterprise: onboarding checklists
            └── ats-communication.ts  # Enterprise: email templates & history

License

MIT

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Registryactive
Packagemcp-ai-hr-management-toolkit
TransportSTDIO
UpdatedApr 4, 2026
View on GitHub