jevjob
Reads job postings from employers' Greenhouse career sites and includes them in ranked job search results.
Adds Indeed as a source of job postings through the Indeed plugin, expanding the number of postings JevJob can find and rank.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@jevjobFind junior software engineer jobs in Chicago posted in the last 30 days, ranked against my resume."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
JevJob
Ask your AI assistant for jobs. Get them ranked against your resume, one requirement at a time.
Works inside Claude Desktop and Codex.
You type "junior software engineer in Chicago, last 30 days" in Claude or Codex. JevJob finds live postings on employers' own career sites, reads every requirement in each one, and checks it against your resume. You get a ranked list in five tiers, with every requirement marked green, yellow or red.
๐ข Apply ยท ๐ก Maybe ยท ๐ Stretch ยท ๐ด Big stretch ยท ๐ฅ No. The color of the rank number is the tier.
See why. Each requirement sits next to the resume line that proves it, or shows that nothing does.
Real postings, direct links. Straight from employers' systems (Workday, Greenhouse, Lever, Ashby, Oracle, iCIMS, and more), plus the Indeed plugin if you have it. Apply links go to the company, not a job board.
One slider from Conservative to Apply anyway re-ranks instantly, with no AI calls.
Never a "chance of being hired." JevJob reports which requirements you meet, and how sure it is.
Set it up (about 10 minutes)
You need:
Node.js 20 or newer (the LTS download is fine).
Git.
Claude Desktop or Codex.
An API key for Jev, the model JevJob uses. Step 2 shows where to get one.
1. Download and install
Open a terminal (on Windows: PowerShell) and run:
git clone https://github.com/adnanrules/jevjob.git
cd jevjob
npm install
npm run setupnpm run setup checks your install, creates a .env file for your key, and prints the exact settings for step 4,
already filled in with this folder's location. Keep that output handy.
2. Get a Jev key
Pick one:
Where | Best if | |
A. TypeSafe (Jev's maker) | you want to use Jev directly | |
B. OpenRouter | you already have OpenRouter credits |
Sign in, create a key, and copy it. It's shown only once.
3. Put the key in .env
Open the .env file in the jevjob folder:
notepad .env # Windows
open -e .env # macOS
nano .env # LinuxPaste your key after TYPESAFE_API_KEY=, with no spaces or quotes:
TYPESAFE_API_KEY=paste-your-key-hereUsing OpenRouter (option B)? Also remove the # from the start of these two lines:
TYPESAFE_BASE_URL=https://openrouter.ai/api
TYPESAFE_DEFAULT_MODEL=typesafe/jev-1.13Save, then run npm run setup again. It should say โ Jev key found.
.envnever leaves your computer and is ignored by git, so your key can't be committed by accident. No key yet? JevJob still works, using simpler keyword rules instead of Jev.
4. Connect it to your assistant
Open Claude Desktop, then go to Settings โ Developer โ Edit Config. This opens
claude_desktop_config.json.Paste the
jevjobentry thatnpm run setupprinted inside"mcpServers". If the file is empty, it should look like this, with your own paths:{ "mcpServers": { "jevjob": { "command": "node", "args": ["C:/path/to/jevjob/node_modules/tsx/dist/cli.mjs", "C:/path/to/jevjob/packages/harness/src/mcp.ts"] } } }Save the file, then fully quit Claude Desktop (on Windows, also quit it from the system tray) and reopen it.
Check Settings โ Developer:
jevjobshould show as running.
Open
~/.codex/config.toml(on Windows:C:\Users\<you>\.codex\config.toml), creating it if needed.Paste the block that
npm run setupprinted:[mcp_servers.jevjob] command = "node" args = ["C:/path/to/jevjob/node_modules/tsx/dist/cli.mjs", "C:/path/to/jevjob/packages/harness/src/mcp.ts"] tool_timeout_sec = 300Restart Codex. The CLI, IDE extension and app all read this file.
5. Optional: turn on Indeed
If your app offers the Indeed plugin (in Claude: Settings โ Connectors), turn it on for extra postings. JevJob works without it.
Related MCP server: recruiting-jobs-mcp
Use it
Just ask, in plain words:
Use JevJob to find junior software engineer jobs in Chicago posted in the last 30 days
Find me entry-level data analyst roles near Austin or remote, with JevJob
Your assistant runs the search and then opens the JevJob app in your browser (http://localhost:3100). The first launch takes about half a minute. Drop your resume in (PDF, DOCX, TXT or Markdown) and watch the postings rank.
View opens the full posting; Apply โ goes to the employer's own page.
Ask for more: "JevJob, 50 more" continues the same search without repeats.
Fit map plots every posting by how well you fit and how recently it was posted.
Searches widen on their own: the city, then nearby cities, then the rest of the state, then remote. Postings in other states count only if they're remote. If a "posted within" window is too short, it widens step by step, and those postings are tagged ("19d ยท outside 7d").
Privacy: the app runs on your computer. Your resume goes only to the Jev API (with your key) to classify
requirements. Postings are read from the employers' sites. Results are cached locally in .jevjob/.
How it works
JevJob asks many small questions instead of one big one. It never asks a model "rate this job 1โ10". For each requirement it asks a typed question, "does this resume meet: Proficiency in Java or Python?", and gets back meets / partial / not stated / doesn't meet, with a confidence.
Facts vs. policy. Whether you meet a requirement is a fact: one model call, cached. Which tier a job lands in is policy: plain, deterministic code that re-runs on every slider move. That's why the slider is instant.
Jev for judgment, code for arithmetic. Code works out your degree level and months per job; Jev (TypeSafe AI) judges which roles are the kind of work a line asks for. Negations ("a degree is not required") get their own question, and low-confidence answers become unclear instead of guesses.
The assistant finds, JevJob judges. Claude or Codex runs the searches. JevJob plans them, filters every listing, reads full postings from employers' systems, and ranks. The assistant never grades a posting.
More: architecture ยท search and sources ยท eval lab notebook
Does it actually work?
58 hand-labeled resume/job pairs: 40 for tuning (dev), and 18 labeled and committed before anything ran on them
(held-out). Every number comes from npm run eval.
Held-out, first clean run | Keyword rules | Jev |
Tier exactly right | 5/18 (28%) | 10/18 (56%) |
Within one tier | 12/18 | 17/18 |
Single-requirement verdicts right | 3/16 | 12/16 |
Model calls per posting | 0 | 1 |
The rules scored 80% on the dev set they were tuned on and 28% on held-out, which is overfitting shown in numbers. The current Jev version gets 13/18 tiers and 18/18 within one tier on held-out, but that set is no longer clean (its errors were read while improving), so the table keeps the first clean run. The full story, including what went wrong, is in docs/eval-log.md.
Troubleshooting
Problem | Fix |
| Fully quit and reopen the app. Check the paths in the config match |
"node" not found when the app starts it | Use the full path to Node as |
The app says it's using Rules, not Jev | Your key isn't set: redo step 3, then restart Claude/Codex. |
Few results | Try a wider window ("last 30 days"), or drop the city for remote-only. Entry-level searches find the most. |
Port 3100 is busy | Close whatever uses it; JevJob's app always runs on 3100. |
npm test # unit tests, including an end-to-end MCP protocol test
npm run typecheck
npm run web # just the app, at http://localhost:3100
npm run eval -- jev # score an assessor on the labeled sets (-- rules needs no key; --dev to tune)
npm run sweep # search policy thresholds on dev onlypackages/core domain types, requirement extraction, posting normalizer, rules assessor, ranking policy (pure)
packages/jev Jev assessor: typed questions, resume facts, answer validation, confidence routing, cache
packages/harness search planning and filtering, career-site readers, new-grad feed, job pool, MCP server
packages/eval labeled datasets, metrics, report writer, policy sweep
apps/web Next.js app: streamed ranking, board, fit map, resume-vs-posting detailCredits
Jev by TypeSafe AI does the classification.
Entry-level searches use the community-maintained SimplifyJobs/New-Grad-Positions list. JevJob reads it at run time and never copies it into this repo.
MIT licensed. See LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search real, recent job postings from company career pages and ATS boards, scored for fit.
Read job postings live from employer career sites across 10 applicant tracking systems.
Search a live index of millions of open jobs from employer career sites and 100+ ATS platforms.
Verified AI/tech jobs from company ATSs: search, fit matching, salary stats; employer job posting
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to fetch and structure job postings from major ATS platforms (Greenhouse, Lever, Ashby, etc.) directly, eliminating copy-paste and context loss.35 npm2MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to pull live job listings from major ATS platforms (Greenhouse, Lever, Ashby, Workable), Hacker News hiring threads, and detect hiring signals on company career pages.-
- AlicenseAqualityAmaintenanceAI job search and job application tracker. Search live jobs by title, location, salary, date posted, and remote or on-site, and see each one checked on real data: pay against market rates, ghost-job signals, visa sponsorship history, and how well it matches your resume. Check how hiring software reads your resume, track applications, set follow-up reminders, and get email alerts.121529 npmISC
- AlicenseNot gradedqualityBmaintenanceEnables natural-language job search and aggregation from multiple recruitment websites with zero configuration, providing filtered results and standardized output for AI assistants.29 npmISC