Skip to main content
Glama
README.md
# WinningCV MCP Server

An MCP (Model Context Protocol) server for AI-powered job matching and CV generation. Search jobs on LinkedIn and Seek, match them against your CV, get detailed fit analysis, and generate tailored CVs.

## Features

- **🔍 search_jobs** - Search for jobs on LinkedIn and/or Seek
- **📊 match_jobs** - AI-powered CV matching with scoring (1-10)
- **🎯 analyze_job** - Deep-dive job analysis with fit assessment, strengths, gaps, red flags, and cover letter angles
- **📝 generate_cv** - Generate tailored CVs optimized for specific jobs

## Installation

```bash
npm install
npm run build
```

## Configuration

Copy `.env.example` to `.env` and configure:

```bash
cp .env.example .env
```

### Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `OPENAI_API_KEY` | OpenAI API key (or "dummy" for proxies) | Required |
| `OPENAI_BASE_URL` | OpenAI-compatible API endpoint | OpenAI default |
| `OPENAI_MODEL` | Model to use for AI features | gpt-4o-mini |

### Using with GitHub Copilot Proxy

```bash
export OPENAI_API_KEY=dummy
export OPENAI_BASE_URL=http://localhost:14141/v1
export OPENAI_MODEL=gpt-4o
```

## Usage

### Running the Server

```bash
node dist/index.js
```

### MCP Integration

Add to your MCP client configuration:

```json
{
  "mcpServers": {
    "winning-cv": {
      "command": "node",
      "args": ["/path/to/winning-cv-mcp/dist/index.js"],
      "env": {
        "OPENAI_API_KEY": "your-key",
        "OPENAI_MODEL": "gpt-4o"
      }
    }
  }
}
```

## Tools

### search_jobs

Search for jobs on LinkedIn and/or Seek.

**Input:**
```json
{
  "keywords": "Digital Transformation Manager",
  "location": "Melbourne, Australia",
  "sources": ["linkedin", "seek"],
  "days_old": 7
}
```

**Output:** List of jobs with title, company, location, URL, salary, and posted date.

### match_jobs

Score how well your CV matches job postings.

**Input:**
```json
{
  "cv_path": "/path/to/your-cv.pdf",
  "job_urls": [
    "https://www.seek.com.au/job/123456",
    "https://www.linkedin.com/jobs/view/789012"
  ],
  "threshold": 7
}
```

**Output:** Jobs meeting the threshold with scores, strengths, and gaps.

### analyze_job

Get detailed analysis of a job against your CV.

**Input:**
```json
{
  "cv_path": "/path/to/your-cv.pdf",
  "job_url": "https://www.seek.com.au/job/123456"
}
```

**Output:**
- Fit assessment (score 1-10, recommendation: strong_apply/apply/consider/skip)
- Strengths with categories
- Gaps with severity (critical/moderate/minor) and mitigation suggestions
- Red flags
- Cover letter angles with talking points
- Key requirements checklist (met/unmet with evidence)

### generate_cv

Generate a tailored CV for a specific job.

**Input:**
```json
{
  "cv_path": "/path/to/your-cv.pdf",
  "job_url": "https://www.seek.com.au/job/123456",
  "output_format": "markdown",
  "tone": "professional"
}
```

**Options:**
- `output_format`: markdown, plain_text, or structured (JSON)
- `tone`: professional, creative, technical, or executive
- `focus_areas`: Optional array of areas to emphasize

**Output:** Tailored CV content with tailoring notes (keywords emphasized, skills highlighted, experience reframed).

## Supported CV Formats

- PDF
- DOCX
- TXT
- Markdown (.md)

## Dependencies

- Node.js 18+
- Playwright (for web scraping)

### Installing Playwright Browsers

```bash
npx playwright install chromium
```

## Development

```bash
# Build
npm run build

# Watch mode
npm run dev

# Test a tool
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js
```

## License

MIT

## Author

Jack Hui (https://jackhui.com.au)