MCP server for ATS resume analysis — parse, score, improve resumes and generate cover letters, interview questions, skill roadmaps, and LinkedIn optimization tips.
Server has 10 tools with consistent naming (verb_noun pattern) and documented schemas. However, descriptions are generic and lack LLM-optimization guidance. Parameter descriptions exist but are minimal (avg ~40 chars). Output schemas are not documented in the source. Error handling is absent, no recovery guidance, categorization, or actionable error messages. Security: no evidence of input validation, rate limiting, or permission checks. Composition is reasonable (single responsibility per tool), but tools lack chaining metadata (e.g., calculate_ats_match returns no resume_id for downstream tools).
Extract company details and research from the job description.
Calculate keyword overlap and ATS match score.
Scrape the raw text of a job posting from a URL.
Generate a targeted cover letter template.
Generate technical and HR interview questions based on match results.
Analyze resume content and provide actionable tips.
Analyze LinkedIn profile text and suggest improvements.
No output schemas documented. Tools return unstructured text from LLM calls (Groq SDK). LLMs cannot plan downstream calls or extract structured data. Violates pattern:tool and pattern:response-shaper.
No error handling or recovery guidance. Tools call external APIs (Groq, axios) without try-catch or error categorization. Failures return raw exceptions instead of actionable messages. Violates pattern:recovery-guide and pattern:error-classification.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Extract raw text from a PDF, DOCX, TXT, or MD file sent as base64 content.
Extract raw text from a local PDF, DOCX, TXT, or MD file.
Compare resume against job to identify missing skills and generate a learning roadmap.
Descriptions are generic and under 100 chars. E.g., 'Scrape the raw text of a job posting from a URL' lacks WHEN to use, prerequisites, or dependencies. Does not meet 10 - 1024 char baseline or LLM-optimization guidance. Violates pattern:tool-description.
No input validation or constraint documentation. Parameters accept free-form strings (resume_text, job_text) with no length limits, format specs, or validation. LLMs can pass invalid or oversized inputs. Violates pattern:constrained-input.
No tool chaining metadata. Tools return raw text with no IDs or references for downstream calls. E.g., parse_resume returns text but no resume_id; calculate_ats_match returns score but no structured breakdown. Violates mxe:include-chaining-ids.