Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.
io.github.ChanMeng666/vitex (MCP Server)
The MCP server io.github.ChanMeng666/vitex generates tailored, ATS-optimized resume PDFs and cover letters from a provided job description. It exposes this capability over MCP, supporting automated document creation workflows tied to specific job postings.
🛠️ Key Features
Generates tailored resume PDFs
Generates ATS-optimized cover letters
Inputs: job description
Operates over the MCP protocol
🚀 Use Cases
Create resumes matched to a specific job description
Produce ATS-optimized cover letters for applications
Automate resume/cover-letter generation via MCP in developer tools
Paste a job description, describe your background, and get a tailored, ATS-optimized resume PDF + cover letter in ~30 seconds.
Built with Next.js 16, React 19, TypeScript 6, and the Vercel AI SDK.
Demo: typing a job description and background into Vitex — the AI resume generator form in action
⚙️ How it works + pricingHow It Works section: three steps — Paste JD, AI Generates (tailored resume with optimal ATS score), Download PDF (professional PDF ready in seconds)Simple, Transparent Pricing — Free ($0/forever, 3 free credits on signup), Pro ($29/month, 20 credits for active job seekers), Unlimited ($49/month, unlimited everything)📱 Mobile viewVitex on mobile — stacked layout with Job Description and Your Background textareas filling the screen
Introduction
Vitex is an AI-powered resume generation platform that transforms a job description and your professional background into a polished, ATS-optimized resume PDF and cover letter. An 8-step AI pipeline handles everything from JD parsing and skill matching to server-side PDF compilation, with Typst compiling PDFs locally in under 100ms. It is agent-ready: every capability is reachable over an authenticated HTTP API (the web UI and the public v1 API share one pipeline core), and billing is outcome-based — you are charged only when a resume is successfully produced. The UI follows the Phantom design system: a soft, flat aubergine-and-lavender aesthetic with pill geometry, whisper-weight typography, and generous whitespace.
Vitex is built for a person plus their AI assistant on a "one core, N thin adapters" design — "The API is the UI". Everything the web app does, an agent can do over the public v1 HTTP API, the published vitex-cli, or the hosted MCP connector. The guiding framing is Career as Code: your career facts are the source, each tailored PDF is a reproducible build artifact, the refinement chain is a series of commits, outcome billing means you pay per successful build, and the exported .typ source means zero lock-in. See ADR 0003.
Key Features
AI Resume Generation -- Paste a job description + describe your background, get a tailored resume PDF
8-Step AI Pipeline -- JD parsing, background parsing, match analysis, tailoring, ATS scoring, cover letter, document generation, server-side PDF compilation
Agent-Ready API -- Operate the whole product over HTTP with an API key; no browser, 2FA, or CAPTCHA (see docs/api/v1.md, the OpenAPI spec at public/openapi.yaml, and the runnable curl playbook at public/skill.md)
CLI & MCP server -- vitex-cli (bin vitex) is a thin client over the hosted API: a token-cheap CLI for terminals and coding agents, plus vitex mcp (a stdio MCP server via npx -y vitex-cli mcp) for Claude Desktop, Claude Code, and Cursor
Hosted MCP connector -- a browser-OAuth remote MCP server at https://www.vitex.org.nz/api/mcp lets non-technical users connect Vitex inside ChatGPT or Claude with a sign-in (no API key to paste): ChatGPT guide, Claude guide. For agent-driven setup from docs alone, see llms-install.md
Outcome-Based Billing -- Credits are charged only when a resume is successfully produced (failures are free), idempotently
7 Professional Templates -- Auto-selected by AI based on industry and role (two-column, modern-cv, executive, creative, compact, banking, academic)
ATS Optimization -- Real-time ATS compatibility scoring with actionable feedback
Cover Letter Generation -- Automatically generated alongside the resume
Typst-Powered PDF -- Local compilation in <100ms, no external APIs required
Natural Language Refinement -- Describe changes in plain English; AI applies a targeted, free refinement (resume and/or cover letter) — not a full regeneration
Voice Profile -- Save a writing sample on a candidate profile so generated cover letters match your voice
Public Career Endpoint -- Publish a profile to a stable, agent-readable page at /p/<slug> (HTML, /json, and /md); contact PII and raw text are never exposed
Credit System -- Stripe-powered subscription plans for usage management
Cloud Storage -- Persistent resume management with user accounts (My Resumes history, search, and re-open)
How It Works
Input -- Paste a job description and describe your professional background on the homepage
Generate -- AI analyzes, matches, tailors, and compiles your resume through an 8-step pipeline streamed via SSE
Refine & Export -- Review the PDF preview, ATS score, and cover letter; refine with natural language; download or share
See .env.example for the full annotated list. Rate limiting and webhook
idempotency use the existing Neon Postgres — no Redis required.
Development
bash
npm run dev # Start dev server on http://localhost:3000
npm run build # Production build
npm run start # Start production server
npm run lint # Run ESLint
Deployment
Vitex runs as a Docker container on a VPS behind Traefik reverse proxy, with GitHub Actions for CI/CD.
bash
# Build Docker image
docker build -t vitex .
# Run container
docker run -p 3000:3000 --env-file .env vitex
The production deployment uses:
DigitalOcean VPS as the host
Docker for containerization
Traefik for reverse proxy and TLS
GitHub Actions for automated build and deploy on push
Architecture
code
Monolith Next.js App (Docker Container on VPS)
|
|-- Pages
| |-- / Landing page: JD + background input
| |-- /editor Result review: PDF preview, ATS score, cover letter, refinement
| |-- /resumes My Resumes history (search, open, download, delete)
| |-- /profiles Candidate profiles (background + voice sample) + publish
| |-- /applications Application tracker
| |-- /dashboard Credits, billing + Connections & API Keys
| |-- /pricing Subscription plans
| |-- /p/[slug] Public career endpoint (HTML, +/json, +/md)
|
|-- Transports (thin adapters over one shared core -- "the API is the UI")
| |-- POST /api/generate SSE stream for the web UI
| |-- /api/v1/resumes Public agent REST API (API key, job-based) + /api/v1/me
| |-- /api/mcp Hosted remote MCP (Streamable HTTP, OAuth-protected)
| |-- /api/oauth/* OAuth 2.1 Authorization Server (facade minting API keys)
| |-- vitex-cli Published npm package: CLI + stdio MCP server
|
|-- Backend Core (src/server/, transport-agnostic)
| |-- 8-Step Pipeline: JD parse || background parse -> match -> tailor
| | -> ATS score || cover letter -> render (Typst) -> compile (PDF)
| |-- Outcome billing: charge once, only on a compiled PDF, idempotent
| |-- Auth: getCaller() resolves API key or Neon Auth cookie session
| |-- Errors: machine-readable envelope; structured JSON logs
|
|-- Services
| |-- Neon PostgreSQL (Drizzle ORM) -- data, credits, rate limits, job queue
| |-- Neon Auth / Stack Auth (authentication)
| |-- Stripe (payments)
| |-- OpenAI (tiered: gpt-5.4-mini extract / gpt-5.5 reason)
License
This project is licensed under the MIT License - see the LICENSE file for details.