MCP server for job application processing tools, including resume extraction, scoring, and email notifications.
Server has 8 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-200 chars, mostly adequate), and input schemas are present with type definitions. However, output schemas are undocumented, LLMs cannot predict return structures for downstream chaining. Error handling is minimal: most tools catch exceptions and log them but provide no recovery guidance. Tool naming is verb-first (extract_, generate_, calculate_, send_) which is good, but descriptions lack WHEN/WHY context and dependency hints. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk profiles (WRITE vs READ_ONLY). Parameter descriptions are present but sparse, e.g., 'The recipient's email address' lacks format validation hints. No pagination, no batch operations, no natural-language identifier support (e.g., email extraction requires exact text match, no fuzzy lookup). Overall: functional but below production baseline.
Calculates similarity score using pure semantic analysis with SentenceTransformer.
Checks if an application with the same resume content exists in the database.
Extracts the first email address found in the text using regex.
Extracts text from DOCX or PDF files.
Uses Ollama to create a focused summary of job requirements in a single paragraph.
Sends an email using Resend API.
Sends an initial interview invitation with a YouCanBook.me link.
Output schemas undocumented. Tools return strings, floats, and booleans but LLMs cannot predict structure for downstream chaining. E.g., extract_text returns 'str' but no field names; calculate_score returns 'float' but no bounds or error cases documented.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked READ_ONLY or WRITE in metadata but not in schema. Agents cannot determine retry safety or side-effect scope without explicit hints.
Error handling lacks recovery guidance. Exceptions are caught and logged but return raw error strings (e.g., 'Error occurred during...') with no actionable next steps. LLMs cannot self-correct or retry intelligently.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Validates if the extracted text is from a resume document.
Parameter descriptions lack format/constraint hints. E.g., 'email' param has no regex pattern, length bounds, or validation rules. 'score' param in send_interview_invitation has no range (0-100?). LLMs cannot validate inputs before calling.
No dependency hints or multi-step guidance. Tool descriptions do not explain prerequisites (e.g., 'Call extract_text first, then generate_summary') or when to use one tool vs another. Agents must infer composition logic.