Joblens Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Joblens Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server that gives Claude (or any MCP-compatible AI assistant) structured, live context about jobs and careers: search real job postings, parse a resume locally, and score how well a resume matches a given job — all through official, ToS-compliant APIs and local file parsing. No scraping. No stored platform passwords. No automated browser logins.
Most "LinkedIn scraper" MCP servers automate a real login through Selenium and scrape profile/job pages — which violates LinkedIn's Terms of Service and puts a user's account at risk of a ban.
JobLens solves the same underlying problem — giving an AI assistant rich job-market context — using a free, official job-search API and local resume parsing instead. Same outcome, zero ToS risk.
| Feature | Description |
|---|---|
| 🔍 Live Job Search | Query real job postings (title, company, location, salary, description) via the Adzuna Jobs API |
| 📄 Resume Parsing | Extract skills, email, and phone from a local PDF/text resume — entirely on-device |
| 🎯 Resume-to-Job Match Scoring | Transparent skill-overlap score (0–100) between a parsed resume and any job description, with matched/missing skills listed |
| ⚡ Search + Match | One call searches jobs and ranks them by fit to your resume |
joblens-mcp/
├── src/joblens_mcp/
│ ├── server.py # MCP server + tool definitions (FastMCP)
│ ├── jobsource.py # Adzuna API client (swap for any job-board API)
│ └── resume.py # Local resume parsing + match scoring
├── main.py # Entry point
├── pyproject.toml
└── requirements.txtjobsource.py is intentionally isolated from server.py — swapping Adzuna for USAJobs, Indeed's Publisher API, RemoteOK, or Jooble means editing one file, not the MCP tool layer.
Prerequisites
app_id and app_key (instant signup, no scraping involved)1. Clone the repository
git clone https://github.com/rohith-jpg/joblens-mcp
cd joblens-mcp2. Set up environment & install dependencies
Using uv (recommended):
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv
source .venv/bin/activate # macOS/Linux
uv pip install -e .Or with plain pip:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt3. Add your API credentials
cp .env.example .env
# then edit .env with your ADZUNA_APP_ID and ADZUNA_APP_KEY4. Run the server
uv run main.py
# or
python main.pyAdd this to your Claude Desktop config (Settings → Developer → Edit Config):
{
"mcpServers": {
"joblens": {
"command": "/path/to/uv",
"args": ["--directory", "/path/to/joblens-mcp", "run", "main.py"],
"env": {
"ADZUNA_APP_ID": "your_app_id",
"ADZUNA_APP_KEY": "your_app_key"
}
}
}
}Restart Claude Desktop, then look for the tools (hammer) icon to confirm JobLens is connected.
cover_letter_draft tool using match results to draft a tailored cover letterMIT — see LICENSE.
Built using the Model Context Protocol Python SDK and the Adzuna Jobs API.
Note: This project deliberately avoids any LinkedIn scraping or automated login. All data sources used are official, public APIs or files the user provides locally.
<p align="center">Built by <a href="https://github.com/rohith-jpg">Rohith Singhu</a></p>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.