Skip to main content
Glama
Nirvanjha2004

yc-mcp-connector

README.md
# yc-mcp-connector — Y Combinator MCP (API-only, local npx)

Search YC startups/jobs via APIs and apply with **human-in-loop** email approval + per-startup customization.

## Features
- `yc_search_startups` — Algolia search (batch, industry, status, isHiring, topCompany)
- `yc_search_jobs` — Work at a Startup search (role, Internship/Full-time, remote, batch, industry) — supports `Backend Intern` etc.
- `yc_get_startup` / `yc_get_job` — enrich before applying
- `yc_apply_to_job` — per-startup cover message (from `templates/cover-message.txt`) + resume from `./resumes/` + **approval email** to you. `dryRun=true` (default) only emails; `dryRun=false` after `APPROVE` submits via WAAS API.
- `yc_list_resumes` — list local resumes

**API-only:** No headless browsing. All via Algolia + WAAS API + SMTP.

## Quick start (local npx)

```bash
npm install
npm run build

# configure (copy and fill app password)
cp .env.example .env

# run MCP via npx/inspector
npx @modelcontextprotocol/inspector node dist/index.js
# or: npm start
```

Add to Claude Desktop / Cursor `mcp.json`:
```json
{
  "mcpServers": {
    "yc": {
      "command": "node",
      "args": ["C:/Users/nirva/Desktop/Projects/yc-mcp-connector/dist/index.js"],
      "env": { "APPROVAL_EMAIL": "nirvanjha2004@gmail.com" }
    }
  }
}
```

## Resumes folder
Put PDFs in `./resumes/`:
```
resumes/Resume_Nirvan_BackendIntern.pdf
resumes/Resume_Nirvan_SWE.pdf
```
Pass to tool as `resumes/Resume_Nirvan_BackendIntern.pdf`.

## Per-startup customization
Edit `templates/cover-message.txt` placeholders: `{{company}} {{one_liner}} {{industries}} {{role}} {{name}} {{skills}}`
Or pass `coverMessage` directly per call — MCP injects startup context so each application is unique.

## Human-in-loop flow
1. LLM calls `yc_search_jobs` with `role: "Backend Intern"` etc.
2. LLM calls `yc_apply_to_job` with `dryRun:true` (default) → email sent to `APPROVAL_EMAIL` with customized message + resume path.
3. You reply `APPROVE <jobId>` (or just re-call tool with `dryRun:false`).
4. MCP calls WAAS API to submit.

Search works without `WAAS_SESSION_TOKEN`; apply requires it (copy session token after login at workatastartup.com).

## Git pushes
Every change auto-pushed to GitHub via git hooks (see below).

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation3/5

Most tools map to distinct resources, but yc_get_startup and yc_fetch_companies both fetch company profiles, and yc_search_startups explicitly routes to yc_fetch_companies while yc_get_startup supports the same batch lookup, creating ambiguity. The remaining search, job, and apply tools are clearly separable.

Naming Consistency5/5

All tools share the yc_ prefix and follow a consistent snake_case verb_object pattern, such as list_, search_, get_, fetch_, and apply_to. The slight synonym difference between get and fetch does not break the naming structure.

Tool Count5/5

Seven tools is well-scoped for a YC startup and job search-and-apply workflow. Each tool maps to a meaningful step: list resumes, search startups or jobs, fetch details, and apply.

Completeness4/5

The core workflow is covered: search startups, search jobs, fetch startup and job details, and submit applications with a dry-run approval flow. The main gap is lack of any post-application management or status-checking, though that may be outside the server's intended scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues