Skip to main content
Glama
saurabhgayali

Job Search MCP

Поисковая система вакансий

Быстрый и надёжный поиск вакансий по 5 крупным фармацевтическим компаниям.

Ищите вакансии напрямую на сайтах карьеры Amgen, Bayer, GSK, Novartis и Pfizer. Мгновенно извлекайте названия вакансий, описания, требования и ссылки для отклика.

Демо: https://[your-vercel-app].vercel.app/

Возможности

  • ✅ Поиск по 5 компаниям одновременно

  • ✅ Извлечение подробной информации о вакансии (название, описание, требования, срок действия)

  • ✅ Отслеживание неудачных извлечений с кодами ошибок (404, таймауты и т.д.)

  • ✅ Генерация CSV-отчётов с результатами

  • ✅ Ноль внешних зависимостей, быстрый парсинг на основе регулярных выражений

  • ✅ TypeScript + строгая типизация

  • ✅ Всесторонняя обработка и классификация ошибок

  • ✅ API с ограничением частоты запросов (5 поисков/день/IP)

Related MCP server: trackly-cli

Технологический стек

  • Фронтенд: React + TypeScript + Tailwind CSS

  • Бэкенд: Next.js + Node.js

  • Парсинг: извлечение HTML на основе регулярных выражений (без тяжёлых зависимостей)

  • Среда выполнения: Node.js (v18+)

  • Язык: TypeScript 5.3+

  • Сборка: TypeScript Compiler (tsc)

  • Развёртывание: Vercel (рекомендуется) или AWS Lambda

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

Попробовать демо

Перейдите по адресу: https://[your-vercel-app].vercel.app/

Вы будете перенаправлены на интерфейс поиска вакансий. Введите название должности, выберите компании и просматривайте результаты мгновенно.

Локальная разработка

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run a test
node dist/test/test-manager-jobs.js

# Start development server (requires Next.js setup)
npm run dev

Продакшн-развёртывание

# Deploy to Vercel (recommended)
npm install -g vercel
vercel

# Or deploy to AWS
# See docs/DEPLOYMENT.md for AWS Lambda setup

Архитектура проекта

User searches for jobs → Demo page (/app/demo/page.tsx)
                          ↓
                    React UI Component
                    - Search input
                    - Company multi-select
                    - Sortable results tables
                    ↓
                   REST API (/api/search-jobs)
                    ↓
    ┌───────────────┬────────────────┬────────────────┐
    │               │                │                │
  Amgen          Bayer            GSK           Novartis  Pfizer
(Workday)   (Eightfold AI)    (Workday)      (Drupal)   (Workday)
    │               │                │                │
    └───────────────┴────────────────┴────────────────┘
                    ↓
          Search Executor (src/search-executor.ts)
          - Fetches job URLs from each site
          - Parses HTML for job listings
          ↓
    Extractor Registry (src/extractors/)
    - Extracts job details from each URL
    - Company-specific parsers
    - Error tracking & classification
          ↓
    Extraction Helpers (src/extraction-helpers.ts)
    - CSV report generation
    - Error aggregation
          ↓
    REST API Response (JSON)
          ↓
    Demo Page displays results
    - Success table: Jobs with details
    - Error table: Failed extractions
    - Download CSV buttons

Конфигурация

src/config.json — это источник истины для компаний, поддерживаемых проектом.

Пример:

{
  "projectname": "Job Search MCP",
  "sites": [
    {
      "name": "Amgen",
      "search_url": "https://amgen.wd1.myworkdayjobs.com/Careers?q=Engineer"
    },
    {
      "name": "Pfizer",
      "search_url": "..."
    }
  ]
}

При добавлении новой компании достаточно указать только название компании и рабочий URL поиска.

Определения сайтов

Каждая компания представлена отдельным файлом в каталоге sites/.

Например:

sites/amgen.json

Структура должна соответствовать test/sample.json.

Определение сайта содержит:

  • название компании

  • URL страницы карьеры

  • URL поиска

  • поддерживаемые параметры поиска

  • подписи параметров

  • типы параметров

  • доступные значения параметров

Структура параметров намеренно реализована как массив, а не как фиксированные JSON-ключи, потому что разные сайты карьеры предоставляют разные параметры поиска.

Например, один сайт может предоставлять:

location
country
jobType

а другой —:

location
timeType
LocationCountry
jobFamilyGroup
workerSubType

MCP не должен предполагать, что каждая компания поддерживает одинаковые параметры.

Экстракторы вакансий

Проект включает специфичные для сайтов экстракторы вакансий, которые анализируют отдельные URL-адреса вакансий и извлекают подробную информацию.

Извлекаемые данные

Каждый экстрактор получает:

  • Название вакансии — наименование должности

  • Описание вакансии — полное описание/обязанности (без верхних и нижних колонтитулов)

  • Требования — требования, квалификация и навыки

  • Дата окончания — дата закрытия приёма заявок (формат ГГГГ-ММ-ДД, пусто, если недоступно)

  • Ссылка для отклика — прямой URL для подачи заявки (может отличаться от URL вакансии)

Доступные экстракторы

src/extractors/
├── types.ts                  # JobExtractor interface & types
├── amgen.ts                  # Amgen (Workday-based)
├── pfizer.ts                 # Pfizer (Workday-based)
├── bayer.ts                  # Bayer (Eightfold AI)
├── gsk.ts                    # GSK (Workday-based)
├── novartis.ts               # Novartis (Drupal)
└── index.ts                  # ExtractorRegistry

Пример использования

import { ExtractorRegistry } from './src/extractors/index.js';

const registry = new ExtractorRegistry();
const amgenExtractor = registry.getExtractor('amgen');

const result = await amgenExtractor?.extract(
  'https://amgen.wd1.myworkdayjobs.com/job/India---Hyderabad/Assoc-Director---Data-Product-Mgmt_R-219150'
);

if (result?.success && result.data) {
  console.log(result.data.jobTitle);
  console.log(result.data.jobDescription);
  console.log(result.data.eligibility);
}

Тестирование

Проект включает комплексный набор тестов для проверки функциональности поиска и извлечения.

Обзор набора тестов

Все тесты — это автономные TypeScript-файлы, которые можно запускать независимо:

npm run build
node dist/test/[test-name].js

Доступные тесты

1. test-config.ts — тест загрузки конфигурации

Проверяет, что конфигурации компаний корректно загружаются из src/config.json.

node dist/test/test-config.js

Назначение: проверяет структуру конфигурации и обнаружение компаний Результат: список доступных компаний и их URL поиска


2. test-search.ts — тест поиска вакансий

Проверяет функциональность поиска по всем компаниям.

node dist/test/test-search.js

Назначение: проверяет, что поиск возвращает корректные URL вакансий Результат: результаты поиска вакансий «Manager» по каждой компании Примечание: требуется подключение к интернету для доступа к реальным сайтам карьеры


3. test-extractors.ts — тест извлечения вакансий

Проверяет, что извлечение деталей вакансии работает для URL вакансий каждой компании.

node dist/test/test-extractors.js

Назначение: проверяет извлечение названия, описания и требований вакансии Результат: процент успешных извлечений и детализация полей Примечание: требуются реальные URL вакансий из вывода test-search.ts


4. test-manager-jobs.ts — сквозной интеграционный тест

Полный конвейерный тест: поиск вакансий → извлечение деталей → генерация отчётов

node dist/test/test-manager-jobs.js

Назначение: полный интеграционный тест с отслеживанием ошибок и генерацией CSV-отчётов Результат:

  • test/manager-jobs-success.csv — успешно извлечённые данные о вакансиях

  • test/manager-jobs-errors.csv — ошибки извлечения (404, таймауты и т.д.)

  • Сводка в консоли с процентом успеха и разбивкой по ошибкам

Запуск всех тестов

npm run build
node dist/test/test-config.js
node dist/test/test-search.js
node dist/test/test-extractors.js
node dist/test/test-manager-jobs.js

Выходные файлы тестов

Сгенерированные CSV-отчёты сохраняются в папке test/:

  • manager-jobs-success.csv — успешные извлечения вакансий

  • manager-jobs-errors.csv — неудачные попытки извлечения с кодами ошибок

  • Примеры HTML-файлов для отладки

Эти файлы создаются во время выполнения тестов, и их можно безопасно удалять. Они указаны в .gitignore.

test/sample.json

test/sample.json определяет ожидаемую структуру для отдельных файлов компаний.

Это схема-по-примеру/шаблон, а не реестр компаний.

Текущий пример использует такие параметры, как location, timeType, LocationCountry, jobFamilyGroup и workerSubType.

BUILD.md

BUILD.md содержит инструкции для процесса ИИ/разработки, который собирает MCP из конфигураций компаний.

Процесс сборки должен:

  1. Прочитать src/config.json.

  2. Обработать каждую компанию, указанную в sites.

  3. Посетить/проанализировать предоставленный URL поиска.

  4. Определить фактическую структуру карьеры/поиска компании.

  5. Обнаружить доступные параметры поиска и их значения.

  6. Сгенерировать или обновить соответствующий файл sites/<company>.json.

  7. Убедиться, что сгенерированный файл соответствует структуре, определённой в test/sample.json.

  8. Собрать/обновить общую реализацию MCP.

  9. Проверить, что все настроенные сайты можно искать.

UPDATE.md

См. ai/UPDATE.md для инструкций по пересборке проекта при выпуске новой версии.

Когда изменяется src/config.json, ИИ должен пересобрать все определения компаний, а не только вновь добавленные.

Это сделано намеренно.

Существующие сайты карьеры могут изменять:

  • URL поиска

  • параметры запроса

  • названия фильтров

  • значения фильтров

  • структуру сайта карьеры

  • реализацию ATS

Поэтому при каждом выпуске следует повторно проверять существующие файлы sites/*.json на соответствие текущим действующим сайтам карьеры.

src/config.json updated
       │
       ▼
Rebuild ALL sites
       │
       ├── New company → create site JSON
       │
       └── Existing company → re-analyze and update
       │
       ▼
Rebuild common MCP
       │
       ▼
Validate

Структура проекта

JobSearchMCP/
├── src/                      # Source code & configs
│   ├── server.ts             # MCP server entry point
│   ├── search-executor.ts    # Search execution & parsing
│   ├── config-loader.ts      # Configuration loader
│   ├── types.ts              # TypeScript types
│   ├── config.json           # Company registry
│   ├── site_configurations.json
│   └── site_analysis.json
├── sites/                    # Company-specific configs
│   ├── amgen.json
│   ├── pfizer.json
│   ├── novartis.json
│   ├── bayer.json
│   └── gsk.json
├── test/                     # Tests & test data
│   ├── test-*.js             # Test scripts
│   ├── sample.json           # Configuration template
│   └── *.html                # Sample HTML files
├── ai/                       # AI development notes (Gitignored)
│   ├── AI.md
│   └── UPDATE.md
├── reports/                  # Documentation
│   ├── IMPLEMENTATION.md
│   ├── ANALYSIS_GUIDE.md
│   ├── MCP_USAGE.md
│   └── MIGRATION.md
├── dist/                     # Compiled JavaScript
├── package.json              # Dependencies & scripts
├── tsconfig.json             # TypeScript config
└── README.md                 # This file

Технологии

Среда выполнения: Node.js Язык: TypeScript MCP SDK: официальный TypeScript SDK протокола Model Context Protocol Конфигурация: JSON

Принцип проектирования

Проект разделяет специфичные для сайтов знания и общую логику MCP.

sites/*.json
    = How a particular company career site works

MCP implementation
    = How to search any configured company

AI
    = Understand the user's request and select/use the appropriate
      company search configuration

MCP не должен содержать жёстко заданных предположений о таких параметрах, как location, remote, full_time или job_type.

Параметр существует для компании только в том случае, если сайт карьеры этой компании действительно его поддерживает или предоставляет информацию, требуемую конфигурацией.

Цель

Цель — создать переиспользуемый MCP для поиска вакансий, в котором добавление компаний сводится в основном к добавлению их URL поиска в config.json, что позволяет процессу сборки на основе ИИ автоматически обнаруживать и поддерживать конфигурации, специфичные для сайтов.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.
    258 npm
    3
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    An MCP server that enables AI-assisted job search workflows including job discovery, application tracking, resume evaluation, and cover letter generation, with support for multiple job sources and scheduled scraping.
    83
    42 npm
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A custom MCP server that exposes a jobs database to any MCP-compatible LLM client, allowing users to ask in plain English to search, filter, and match job openings.
    MIT