CVX — structured input, professional output. YAML content in, pixel-perfect CV PDFs out; swappable themes and layouts, no headless browser. MCP server included.
Five well-named tools with clear, detailed descriptions (avg 180 chars, well above 10-char minimum). All tools have complete input schemas with typed parameters and descriptions. Tool names follow verb_noun pattern (get_schema, init_cv, validate_cv, build_pdf, plan_layout). Descriptions explain WHAT, WHEN, and consequences (e.g., 'Refuses to overwrite', 'Returns diagnostics'). Parameters include optional dir with clear guidance ('If not provided, uses current working directory'). Output schemas are documented in descriptions (e.g., 'Returns filename, path, byte size, theme, layout, diagnostics'). No security issues detected, no secrets in parameters. Error handling is implicit but not explicitly documented in tool descriptions (e.g., what happens if cv-content/ is malformed?). Composition is clean: each tool has one responsibility. Missing: explicit error recovery guidance, per-parameter constraints (e.g., enum for 'guides' ids), and output schema formalization in JSON Schema format.
Render cv-content/ to a pixel-perfect PDF. Returns the filename, path, byte size, theme, layout, and diagnostics (page count, per-page fills, blockedBy reasons, warnings). The ATS variant (ats: true) renders a single-column layout optimized for applicant tracking systems. Notices include unsupported glyphs, layout fallbacks, and overflowing pages.
Retrieve the CV schema, available themes, layouts, and optional packaged guides (ai-guide, cv-schema). The guides are ~20 kB each and not returned by default — request them by id to get the content inline.
Scaffold a starter cv-content/ directory with example YAML files, images folder, and layouts. Returns the git ref the scaffolded files' $schema headers point at. Refuses to overwrite if cv-content/ already exists.
Dry run: show how the CV will paginate before building the PDF. Returns page count, per-page fills (occupancy of the whole column), which roles land on page 1, and why the next role could not start there (blockedBy.shortByPt). Prices the layout without rendering or writing a PDF. Does not detect physical-pages-exceed-plan defects (only a full build can).
Validate cv-content/ against the schema. Returns all errors at once with fixes. Checks fonts, YAML structure, required fields, and unknown keys. Strict mode treats UNKNOWN-KEY warnings as errors.
Output schemas not formalized in JSON Schema. Descriptions document return fields (filename, path, byte size, diagnostics) but no structured schema definition visible in code. LLMs cannot reliably parse unstructured field lists.
Error handling not documented. Tools return 'all errors at once' (validate_cv) but no guidance on error format, recovery steps, or categorization (retryable vs fatal). LLMs cannot self-correct without actionable error messages.
Parameter 'guides' in get_schema accepts array of strings but no enum constraint. Description says 'ai-guide' or 'cv-schema' but LLMs may hallucinate other values. Should declare enum: ['ai-guide', 'cv-schema'].
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
plan_layout description mentions 'blockedBy.shortByPt' but no explanation of what 'shortByPt' means or how to interpret it. Jargon without definition reduces LLM comprehension.
No tool supports pagination or result limits. If cv-content/ contains hundreds of roles or layouts, responses could be unbounded. No limit parameter or cursor guidance.