MCP stdio server exposing 3 read-only tools for job-search agents. Analyzes job descriptions against candidate profiles, generates tailored resumes, and prepares interview materials.
Three tools with clear domain purpose (job search triage, resume generation, interview prep) but significant quality gaps. All tools have descriptions (good baseline), but parameter descriptions are minimal and lack actionable constraints. Input schemas present but sparse, parameters lack type constraints, enums, ranges, or format guidance. No output schemas documented. Error handling exists (guardrails) but not surfaced to LLM with recovery guidance. Tool names are verb-noun (triage, resume, interview) but generic, 'triage' and 'resume' don't clearly signal what they do vs. similar tools. No tool annotations (readOnlyHint, idempotentHint). Composition is reasonable (three separate concerns) but tools accept raw text blobs rather than structured inputs, forcing parsing inside tools.
Generates interview preparation materials including predicted questions, chase-trees (follow-up questions), and draft answers based on job description and candidate profile.
Generates a tailored markdown resume from a candidate profile and job description, filtered by governance track label (保底/冲刺/边界). Returns markdown content with ATS score estimation.
Analyzes a job description against a candidate profile and produces a triage result with governance track label (保底/冲刺/边界), 3-dimensional assessment, and gap list.
No output schemas documented. LLMs cannot plan downstream calls or extract structured data from results. Triage returns JSON with 'governance track label' and '3-dimensional assessment' but structure is not specified.
Parameter descriptions lack actionable constraints. 'jd_text' and 'profile_text' are described as 'Raw job description text' and 'Raw candidate profile JSON text' but no format, length, or structure guidance. LLMs cannot validate inputs before calling.
Tool names are generic and do not clearly distinguish from similar tools. 'triage' could mean many things; 'resume' is ambiguous (generate? parse? evaluate?). Names should be verb_noun with clear action: 'analyze_job_fit', 'generate_tailored_resume', 'prepare_interview_questions'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | <=2025-11-25 | v2 |
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). All three tools are read-only and idempotent but LLM cannot infer this from schema. Should declare readOnlyHint=true and idempotentHint=true.
Error handling (guardrails G1-G5) is internal; failures raise _GuardrailError but LLM receives no recovery guidance. E.g., if G3 (real numbers check) fails, LLM should know to retry with different input or call a different tool.