MCP server wrapping JobSpy to search LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, and BDJobs from any MCP-compatible AI client.
SaferSkills independently audited Jobspy 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.
MCP server wrapping JobSpy to search LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, Bayt, Naukri, and BDJobs from any MCP-compatible AI client.
Run directly with uvx (stdio, default):
uvx jobspy-mcpOr with SSE / HTTP transports:
uvx jobspy-mcp --transport sse # SSE on 127.0.0.1:8000
uvx jobspy-mcp --transport streamable-http # HTTP on 127.0.0.1:8000
uvx jobspy-mcp --transport sse --host 0.0.0.0 --port 9000Or install globally:
pip install jobspy-mcp
jobspy-mcp| Flag | Default | Description |
|---|---|---|
--transport | stdio | stdio, sse, or streamable-http |
--host | 127.0.0.1 | Bind host (SSE/HTTP only) |
--port | 8000 | Bind port (SSE/HTTP only) |
Add to ~/.config/claude/claude_desktop_config.json (Linux/macOS):
{
"mcpServers": {
"jobspy": {
"command": "uvx",
"args": ["jobspy-mcp"]
}
}
}On Windows: %APPDATA%\Claude\claude_desktop_config.json
| Tool | Description |
|---|---|
list_job_sites | Returns all supported site names with notes |
search_jobs | Search jobs with full parameter control |
search_jobs Parameters| Parameter | Type | Default | Description |
|---|---|---|---|
site_name | list[str] | ["linkedin","indeed"] | Job boards to search |
search_term | str | None | Job title or keywords |
google_search_term | str | None | Search term for Google Jobs specifically |
location | str | None | City, state, or country |
results_wanted | int | 15 | Results per site |
hours_old | int | None | Filter by recency (hours) |
job_type | str | None | fulltime, parttime, internship, contract |
is_remote | bool | False | Remote jobs only |
distance | int | 50 | Search radius in miles |
country_indeed | str | "usa" | Country for Indeed/Glassdoor |
easy_apply | bool | None | Easy Apply filter |
fetch_description | bool | False | Fetch full descriptions on every site that supports it (slower) |
linkedin_fetch_description | bool | False | Deprecated alias for fetch_description |
linkedin_company_ids | list[int] | None | Restrict LinkedIn results to these company ids |
enforce_annual_salary | bool | False | Convert hourly/monthly salaries to annual |
offset | int | 0 | Pagination offset |
description_format | str | "markdown" | "markdown", "html" or "plain" |
proxies | list[str] | None | Proxy URLs for rate limit avoidance |
user_agent | str | None | Override the HTTP User-Agent |
| Site | Notes |
|---|---|
linkedin | Global; proxies recommended for large searches |
indeed | Best scraper; use country_indeed for non-US |
glassdoor | Use country_indeed for non-US |
zip_recruiter | US and Canada only |
google | Use google_search_term for best results |
bayt | Middle East focused |
naukri | India focused |
bdjobs | Bangladesh focused |
git clone https://github.com/andrijdavid/jobspy-mcp
cd jobspy-mcp
uv sync --dev
uv run pytest
uv run jobspy-mcp # starts MCP server on stdio~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.