Skip to main content
Glama
MajidAli2006

jobfinder

by MajidAli2006

Job Finder

Находит вакансии для любой профессии, в любой стране — по одному предложению или по вашему резюме — и ранжирует их по реальному шансу попасть в шорт-лист.

jobfinder daily --query "electrician jobs in Dubai"

Вы получаете таблицу на рабочем столе, от лучших к худшим. Она откроется, когда завершится выполнение.

Всё выполняется на вашей машине. Ваше резюме не покидает её, кроме как в виде текста, отправляемого в API Anthropic по вашему собственному ключу, а ваши поисковые запросы уходят на подключённые доски вакансий — ровно так же, как если бы вы вводили их на этих сайтах.


Быстрый старт

Четыре шага. Займёт около пяти минут.

1. Установите

git clone https://github.com/MajidAli2006/jobfinder.git
cd jobfinder
python3 -m venv .venv
.venv/bin/pip install -e ".[all]"

2. Получите один API-ключ

Перейдите на console.anthropic.com/settings/keys, войдите, нажмите Create Key и скопируйте его. Он начинается с sk-ant-.

Это единственный ключ, который действительно нужен инструменту.

3. Поместите ключ в файл .env

cp .env.example .env

Откройте .env в любом текстовом редакторе и вставьте ключ после =, без кавычек и пробелов:

ANTHROPIC_API_KEY=sk-ant-your-key-here

Сохраните файл. .env находится в git-ignore, так что ваш ключ никогда не попадёт в коммит.

4. Проверьте, что всё работает, затем ищите

.venv/bin/jobfinder setup
.venv/bin/jobfinder daily --query "warehouse jobs in Leeds"

Совет: выполните source .venv/bin/activate один раз, и вы сможете не вводить префикс .venv/bin/ до конца текущего сеанса терминала.


Related MCP server: JobSpy MCP Server

Использование из Claude (MCP)

Этот инструмент также является MCP-сервером, так что вы можете просто попросить Claude поискать за вас.

Claude Code — одна команда:

claude mcp add --scope user jobfinder -- /full/path/to/jobFinder/.venv/bin/jobfinder-mcp

Замените /full/path/to/jobFinder на путь, куда вы его клонировали. Выполните pwd внутри папки, чтобы получить его.

Claude Desktop — откройте claude_desktop_config.json и добавьте:

{
  "mcpServers": {
    "jobfinder": {
      "command": "/full/path/to/jobFinder/.venv/bin/jobfinder-mcp"
    }
  }
}

Файл конфигурации находится по адресу:

Платформа

Путь

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

После этого перезапустите Claude Desktop. Cursor и Windsurf используют тот же формат command в своих настройках MCP.

Затем просто спросите:

"Найди мне удалённую контрактную работу React в Европе"

Доступны четыре инструмента: check_setup (проверить, что ключи работают), preview_search (посмотреть, как был понят запрос, до того как тратить средства), find_jobs (полный запуск — занимает несколько минут и создаёт таблицу) и list_platforms (какие сайты вакансий обслуживают страну).


API-ключи — что нужно, а что нет

Без каких-либо ключей инструмент по-прежнему ищет в публичных объявлениях LinkedIn, на карьерных страницах работодателей (Greenhouse, Lever, Ashby, Workable и других), на десяти сайтах удалённой работы, в разделе Hacker News "Who is hiring" и на любых региональных площадках, публикующих стандартную разметку вакансий.

С ключом Anthropic (шаг 2 выше) он также понимает свободные текстовые запросы, читает ваше резюме и оценивает соответствие и пригодность. Без него вы по-прежнему можете искать, но вам придётся указать, что искать, в candidate.local.json, а не в предложении — см. раздел «Устранение неполадок».

Всё ниже — необязательно. Каждый пункт добавляет больше сайтов с вакансиями. Если какой-то пропустить, инструмент просто сообщит, что этот источник не использовался — он никогда не завершится ошибкой.

Бесплатные ключи, самостоятельное получение

Зарегистрируйтесь, скопируйте ключ, вставьте его в .env.

Добавьте в .env

Сайт

Где получить

ADZUNA_APP_ID и ADZUNA_APP_KEY

Adzuna (по всему миру)

developer.adzuna.com

REED_API_KEY

Reed (Великобритания)

reed.co.uk/developers

JOOBLE_API_KEY

Jooble (по всему миру)

jooble.org/api/about

CAREERJET_API_KEY

Careerjet (по всему миру)

careerjet.com/partners/api

Как получить доступ к Indeed, Glassdoor, Bayt, Naukri и другим

Эти сайты — а также Rozee и foundit — блокируют прямые запросы с помощью CAPTCHA, но все они намеренно публикуются в индексе вакансий Google. Поэтому путь лежит через индекс Google, и несколько поставщиков продают лицензированный доступ к нему.

Все они возвращают одни и те же объявления, потому что это данные Google. Разница заключается в цене и бесплатном лимите, а не в охвате. Выберите любой и поместите его ключ в .env точно так же, как и остальные — инструмент использует тот, который найдёт:

Добавьте в .env

Поставщик

Где получить

Примечания

SERPAPI_KEY

SerpApi

serpapi.com

Бесплатная месячная квота, далее платно

SEARCHAPI_KEY

SearchApi.io

searchapi.io

Те же данные, бесплатный лимит, затем платно

Используйте переменную, соответствующую сайту, где вы зарегистрировались. Они не взаимозаменяемы: ключ SearchApi.io в SERPAPI_KEY будет отклонён с ошибкой 401 Invalid API key. Ключи SerpApi состоят из 64 шестнадцатеричных символов; у SearchApi.io они короче. Если вы получили отказ, проверьте, каким сайтом был выдан ключ. Выполните jobfinder sources, и он сообщит, какого поставщика использует.

SERPAPI_KEY=your-key-here

Установите только один. Если указаны оба, используется первый настроенный поставщик, и ни один не является обязательным — без них инструмент по-прежнему работает, просто пропускает эти сайты и сообщает об этом в сводке выполнения.

Если основная доска вакансий вашей страны не входит в бесплатный список выше, этот ключ стоит того, чтобы его получить: он обеспечивает доступ к этим сайтам в любой стране. Охват зависит от страны и формулировки запроса — в индексе Google много вакансий для "software engineer" в Пакистане и "full stack developer" в ОАЭ, а для некоторых других сочетаний нет вообще. Пустой результат отображается как таковой, а не как неработающий ключ.

Требуется одобрение

INDEED_PUBLISHER_ID, ZIPRECRUITER_API_KEY, SEEK_API_KEY, STEPSTONE_API_KEY, BAYT_API_KEY, NAUKRI_API_KEY, ROZEE_API_KEY — это партнёрские программы, которые должны сначала вас одобрить. Большинству людей они не нужны; ключ SerpApi даёт доступ к тем же объявлениям.

Чтобы узнать, какие платформы обслуживают вашу страну и какие ключи им нужны:

jobfinder setup --region Nigeria

Куда помещать ключи

Любой из вариантов, какой вам удобнее:

  1. Файл с произвольным именем через JOBFINDER_ENV=/path/to/your.env

  2. .env в папке, из которой вы запускаете команду

  3. ~/.jobfinder/.env — хороший выбор, если нужен один набор ключей для всех проектов

  4. .env в папке проекта

Все они читаются и объединяются. Если ключ задан в нескольких местах, приоритет у того, что выше по списку; ключ, который есть только в нижнем файле, тоже подхватывается. Таким образом, общие ключи можно хранить в ~/.jobfinder/.env, а специфичные для проекта — в .env проекта.

Настоящие переменные окружения имеют приоритет над любым файлом, поэтому export ADZUNA_APP_ID=... побеждает. Обратите внимание, что обратное неверно: сброс переменной в оболочке не скрывает ключ, который также определён в файле .env. Формат — одна KEY=value в строке, без кавычек:

ANTHROPIC_API_KEY=sk-ant-...
ADZUNA_APP_ID=12345678
ADZUNA_APP_KEY=abcdef...

Повседневное использование

Скажите, что вы хотите, простыми словами. Никаких фильтров настраивать не нужно:

jobfinder daily --query "plumber jobs in Lagos"
jobfinder daily --query "remote React contract, Europe"
jobfinder daily --query "part time warehouse work near Leeds"
jobfinder daily --query "graduate marketing internship, London"

Или передайте ему своё резюме, и он сам разберётся, чем вы занимаетесь:

jobfinder daily --cv ~/cv.pdf
jobfinder daily --cv ~/cv.pdf --query "only remote, minimum £45k"

Резюме читается на вашей машине. В Anthropic отправляется только текст, чтобы составить ваш поисковый профиль и оценить, насколько каждое объявление вам подходит.

Полезные флаги:

Флаг

Что делает

--days 7

Только объявления, опубликованные за последние 7 дней (по умолчанию 30)

--min-salary 60000

Отбросить всё, где указанная зарплата ниже этого значения

--require-salary

Также отбрасывать объявления, где зарплата не указана

--quick

Более быстрое и поверхностное сканирование — меньше запросов деталей и вызовов API

--no-llm

Только правила. Без вызовов API, без затрат

--offline

Запуск на встроенных примерах данных — удобно для тестирования

--no-open

Не открывать таблицу по завершении

--output-dir PATH

Сохранять отчёты в другое место

--region "USA, UK"

Где вы хотите работать. Берётся из резюме, если не указано

--deep

Более медленное и тщательное сканирование

--no-verify

Не перепроверять, что каждое объявление ещё открыто

--tier quick|normal|deep

Тот же выбор, что и --quick/--deep, но с явным названием

--sources a,b

Ограничить запуск указанными коннекторами — см. jobfinder sources

--small-only

Только стартапы, быстрорастущие компании и средний бизнес

--allow-low-rate-markets

Оставлять вакансии на рынках, где обычно платят ниже вашего минимума

--no-prompt

Никогда не запрашивать недостающий ключ; пропускать эти платформы

-v, --verbose / -q, --quiet

Показывать каждый шаг или только предупреждения и ошибки. Доступно для любой команды

Каждый флаг выше работает для любой страны. --region принимает страну, город, название на родном языке или список — "uae", "Deutschland", "Lagos", "USA, UK" — все они распознаются.

О --min-salary: объявление, в котором зарплата не указана, сохраняется с пометкой «Зарплата не указана», потому что нельзя доказать, что она ниже вашего минимума. Добавьте --require-salary, если предпочитаете вообще не видеть такие объявления. Если в самом запросе указана цифра — --query "electrician jobs, minimum $60k" — объявления без указанной зарплаты будут перемещены на лист Prospects.


Что вы получаете

Электронную таблицу в ~/Desktop/job finder/ с тринадцатью листами: Quick Apply (только самое необходимое), Hot Leads, All Qualified Jobs, затем разбивка по Full Time, Part Time, Contract, Freelance, Startups и Partnerships, а также Prospects (соответствие неясно — стоит спросить), Long Shots (соответствует, но вероятность ответа низкая), Companies & Contacts и Search Summary с указанием того, что было отфильтровано и почему.

Те же данные сохраняются рядом в виде .csv, .json и удобной для просмотра .html-страницы.

Процент совпадения — это оценка попадания в шорт-лист, а не совпадение по ключевым словам. Соответствие вашему резюме задаёт потолок; от него оценка зависит от того, что объявление раскрывает о конкурсе. Каждая строка показывает свою арифметику в столбце «Почему такой ранг»:

fit 87 × 1.05 = 91 — applicant count not published (-4%) · posted in the
last 24 hours (+3%) · scoped to United Kingdom, smaller pool (+6%) ·
applying straight into the employer's own system (+5%)

Таким образом, идеальное совпадение при 200 претендентах будет ниже, чем хорошее совпадение, которое ещё никто не нашёл, — честный ответ на вопрос, на что уходит ваше время.


Другие команды

jobfinder setup                 # which keys are set, which are missing
jobfinder setup --region India  # what serves a particular country
jobfinder sources               # every connector and its status
jobfinder sources --test        # live-check every configured key
jobfinder status                # what previous runs found
jobfinder platforms --region Kenya
jobfinder platforms --region Kenya --trade "solar installer"
jobfinder check --title "..." --description "..."   # why one advert passed or failed

check также принимает --company, --location и --url, что позволяет оценить работодателя, соответствие и способ подачи заявки, а не только формулировку.

Чтобы сделать один поиск используемым по умолчанию, чтобы простой jobfinder daily запускал его, создайте candidate.local.json в папке проекта:

{
  "home_country": "Nigeria",
  "default_search": {
    "label": "Electrical",
    "query": "electrician jobs in Lagos",
    "core_terms": ["electrician", "electrical"]
  }
}

Он находится в git-ignore. Без него простой jobfinder daily спросит, что искать, а не будет угадывать.


Устранение неполадок

«Я не знаю, какую работу искать» — укажите --query или --cv. Он не будет придумывать поиск за вас.

«Для пользовательского поиска требуется уровень оценки Claude» — свободный текстовый --query должен быть прочитан моделью, прежде чем по нему можно будет искать, поэтому требуется ANTHROPIC_API_KEY. Выполнение завершается с кодом 1 и не создаёт отчёт. Либо задайте ключ, либо укажите поиск самостоятельно в candidate.local.json, как показано ниже.

No jobs found — расширьте окно с помощью --days 30, проверьте, что название вашей страны написано полностью, и выполните jobfinder setup --region <your country>, чтобы узнать, не требуют ли сайты, которые вы используете, ключ, который вы не задали.

"ANTHROPIC_API_KEY is not set" — файл .env находится не там, где его ищет инструмент, или ключ заключён в кавычки. Выполните jobfinder setup, чтобы увидеть, что он нашёл. Помните, что файл должен называться .env, а не env или .env.txt.

Ничего не происходит в Windows — установите с помощью pip install -e ".[all]", а не запускайте напрямую из исходного кода; Windows требуется встроенный пакет tzdata.

Хотите увидеть, как это работает, прежде чем настраивать ключи? Для свободного текстового --query требуется ключ Anthropic, потому что кто-то должен прочитать ваше предложение и превратить его в поисковый запрос. Чтобы запустить без каких-либо ключей, передайте поисковый запрос напрямую — поместите это в candidate.local.json в папке проекта:

{
  "default_search": {
    "label": "Warehouse",
    "query": "warehouse operative",
    "core_terms": ["warehouse", "forklift"]
  }
}

затем запустите его на прилагаемых образцах объявлений:

jobfinder daily --offline --no-llm

Это создаст полную электронную таблицу, не обращаясь ни к чему.


Разработка

.venv/bin/pip install -e ".[all,dev]"
.venv/bin/python -m pytest tests/ -q      # 661 tests, fully offline
.venv/bin/ruff check job_agent/ tests/

Для тестов не нужны ключи и доступ в сеть.


Конфиденциальность

Ваш файл с резюме остаётся на вашем компьютере — он считывается локально, и только извлечённый текст отправляется в API Anthropic, с вашего собственного ключа, для создания вашего профиля поиска и оценки соответствия. Текст объявлений отправляется в тот же API для той же цели и больше никуда.

Ваши поисковые запросы отправляются на те сайты вакансий, которые вы включили, потому что так работает поиск — это те же слова, которые вы бы ввели на этих сайтах. Если ключи не заданы, это означает публичный поиск LinkedIn и открытые доски вакансий. Выполните jobfinder sources, чтобы увидеть, какие именно активны.

Ничего не отправляется автору этого инструмента, и никакой телеметрии нет. Ключи API считываются из .env, который игнорируется git, и удаляются из журналов и сообщений об ошибках — неудачный запрос, содержащий ключ в URL-адресе, редактируется перед выводом.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables users to search for jobs, prefill applications using AI, and automate submissions across major platforms like Lever and Ashby directly from Claude or Cursor. It provides a full suite of tools for managing job queues, profile data, and resumes within a chat interface.
    37
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables job search and scraping across multiple job boards (LinkedIn, Indeed, Glassdoor, etc.) with advanced filtering, directly from Claude Desktop or other MCP clients.
    6
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Transforms Claude into an AI job-hunting assistant that searches remote job boards, scores roles against your CV, generates tailored cover letters, and logs everything to a Notion tracker.
    11
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude to parse CVs, search job boards (Remotive, Arbeitnow, Adzuna, Greenhouse/Lever), tailor resumes and cover letters, and prepare application packages with direct apply links—without ever auto-submitting. It runs 100% locally and free, storing jobs and applications as JSON files.
    -