MCP server that lints a CV against 5 real ATS parsers (Workday, Greenhouse, Lever, Taleo, iCIMS). Real heuristics from public vendor docs. Works with Claude Code, Cursor, Windsurf, Zed, and any MCP-compatible agent.
Three tools with clear, domain-specific descriptions (194 - 250 chars, within baseline 34 - 392). All have proper input schemas with types and enums. However, output schemas are undocumented, LLMs cannot predict response structure. Error handling is basic (generic try-catch). No tool annotations (readOnlyHint, idempotentHint). Parameter descriptions are adequate but lack format/constraint details (e.g., 'Absolute path' does not specify file existence, size limits, or supported encodings). Tool composition is sound: analyze_cv and lint_for_vendor are distinct, get_express_url is a utility. Naming follows verb_noun convention (analyze_, lint_, get_). No security issues detected (no secrets in params, file paths are user-provided). Missing: output schema documentation, error recovery guidance, and tool annotations.
Analyse a CV (PDF or DOCX) against 5 real ATS parsers (Workday, Greenhouse, Lever, Taleo, iCIMS). Returns per-vendor lint findings, parse risk score, and concrete fixes. Use when the user asks 'is my CV ATS-friendly', 'will my resume pass [vendor]', or 'why am I not getting interviews' (with a file path).
Returns the URL for the visual web companion tool (CV Mirror) where the user can drag-drop a CV and see the side-by-side parser view in their browser. Useful when the user wants the visual reading-order overlay or doesn't want to share a file path.
Run lint for ONE specific ATS vendor only. Use when the user asks something vendor-specific like 'will my CV pass Workday' or 'what would Greenhouse strip from this'. Vendor must be one of: workday, greenhouse, lever, taleo, icims.
Output schemas are not documented. LLMs cannot predict response structure (fields, types, nesting). formatReport() and formatVendorFindings() return plain text, but the response object structure is implicit.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). All three tools are read-only and idempotent, but this is not declared in the schema. Agents cannot infer safety properties.
Error handling is generic. errorResponse() returns a plain text message with no recovery guidance. E.g., 'analyze_cv requires a "path" argument' does not suggest what to do next or how to obtain a valid path.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Parameter 'path' lacks format constraints. Description says 'Absolute path to the CV file (PDF or DOCX)' but does not specify: file must exist, max size, encoding, or what happens if the file is unreadable or in an unsupported format.
get_express_url has an empty inputSchema (no properties). This is correct, but the description could clarify that no parameters are needed and the tool always returns the same URL.