Naukri MCP Server
Naukri MCP Server
Атомарный MCP-сервер на 117 инструментов для автоматизации Naukri.com — крупнейшего индийского портала по поиску работы. Поиск вакансий, массовые отклики, управление профилем, отслеживание откликов, исследование компаний и мониторинг активности рекрутеров — всё из вашего MCP-клиента. Сервер спроектирован под прогрессивную загрузку Tool Search в Claude Code (по умолчанию с января 2026 года), поэтому каждый инструмент узкоспециализирован и обнаруживается по требованию.
Технологический стек: Python 3.10+, FastMCP, Playwright (персистентный Chromium), aiohttp
Ключевые возможности:
Поиск и отклик — поиск по ключевым словам, персональные рекомендации, одиночный или массовый отклик с автоматическими ответами на скрининговые вопросы
Отслеживание откликов — локальное хранение в JSON + трёхуровневая синхронизация с бэкендом Naukri (REST, перехват браузером, HTML-скрейпинг)
Управление профилем — просмотр/редактирование профиля (
naukri_get_profile,naukri_update_profile), повышение видимости (naukri_boost_profile)Исследование компаний —
naukri_research_companyплюс мост к AmbitionBox для данных о зарплатах и отзывах сотрудниковАналитика эффективности —
naukri_search_impressions,naukri_recruiter_activity,naukri_activity_levelУмная автоматизация —
naukri_auto_hunt(поиск работы в один вызов с оценкой соответствия),naukri_daily_brief(утренняя панель),naukri_tailor_resume,naukri_apply_top_fits(автоотклик на лучшие совпадения)
Архитектура
naukri.py # Entry point (FastMCP run)
naukri_server/
__init__.py # FastMCP setup + lifespan (browser start/stop)
config.py # Constants, API endpoints, timeouts
browser.py # PagePool (3 tabs) + TokenManager (JWT caching)
api.py # Deduplicated _api_request, @api_tool decorator
cache.py # Answer cache for auto-apply screening questions
scoring.py # Alias-aware fit scoring
validation.py # Response validators (job lists, profiles, etc.)
utils.py # Shared helpers
tools/ # 27 tool modules (117 tools)
auth.py # Login, OTP verification, login status
search.py # Job search, recommendations
jobs.py # Job detail, similar, compare, bulk, report fraud
apply.py # Applications: list, detail, apply, batch, purge, stale, follow-up
tracking.py # Saved jobs: list, save, unsave, sync
smart_apply.py # Smart apply with fit scoring
auto_hunt.py # One-call automated job hunting
profile.py # Profile CRUD, dashboard, boost, audit
resume_photo.py # Resume/photo info, upload, download, delete
resume_builder.py # Resume templates, builder status, tailor
sync.py # Sync applications/saved jobs, export
insights.py # Application insights, salary, match analytics, skill gap, taxonomy
performance.py # Search impressions, recruiter activity
companies.py # Company search, jobs, slug, research, follow/unfollow
ambitionbox.py # Salary data, reviews, interviews (AmbitionBox)
inbox.py # Recruiter messages, NVites, mark_interested
notifications.py # Notification feed, mark read, count, summary
settings.py # Account settings, blocked companies, email, visibility, subscription
alerts.py # Job alert CRUD
early_access.py # Pre-posted roles from top companies
mock_interview.py # AI mock interview topics, sessions, history
reminders.py # Follow-up reminders
daily_brief.py # Morning dashboard summary
health.py # Endpoint validation, browser pool, AmbitionBox checks
debug/ # Multi-action debug tool (16 actions)Гибридная стратегия «Браузер + REST»
CDN Akamai у Naukri блокирует прямые REST-запросы к ряду эндпоинтов. Сервер использует гибридный подход:
Стратегия | Где используется | Зачем |
Прямой REST API |
| Быстро, вкладка браузера не нужна. Использует JWT-токен, извлечённый из cookie браузера. |
Перехват браузером |
| Поисковый API при прямом REST-запросе возвращает 406. Браузер переходит на страницу и перехватывает XHR-ответ. |
Автоматизация UI браузера |
| Требуются клики по кнопкам, заполнение форм и обработка SSO-попапов. Akamai блокирует методы PUT/DELETE через REST. |
Скрейпинг AmbitionBox |
| Извлекает |
PagePool
Сервер поддерживает пул из 3 вкладок браузера (настраивается через NAUKRI_MAX_TABS). Вкладки выдаются через семафор, автоматически восстанавливаются при сбое и возвращаются после использования. Благодаря этому конкурентные операции, например массовый отклик, выполняются параллельно без открытия лишних вкладок.
TokenManager
JWT-токен аутентификации (cookie nauk_at) извлекается из контекста браузера Playwright и кэшируется в памяти. При ошибках 401 блокировка обновления с единственным «писателем» предотвращает параллельный «шторм» обновлений — один запрос обновляет токен, остальные ждут и переиспользуют результат.
Трёхуровневый резервный механизм синхронизации
naukri_sync_applications() последовательно пробует три стратегии:
REST API — постраничный GET к эндпоинту истории (самый быстрый и надёжный способ)
Перехват браузером — переход на страницу откликов и захват XHR-ответа
HTML-скрейпинг — извлечение карточек вакансий из серверно-отрисованного DOM с помощью адаптивных CSS-селекторов
Related MCP server: LinkedIn MCP Server
Быстрый старт для ИИ-клиентов
1. naukri_auth_status() # Check session
naukri_login(method="google") # Authenticate (Google SSO or email)
2. naukri_daily_brief() # Morning dashboard: recommendations + analytics
3. naukri_auto_hunt(keywords="...", location="...") # One-call job hunt with fit scoring
4. naukri_assess_fit(job_id=...) # Pre-flight check before applying
naukri_apply(job_id=...) # Submit application
5. naukri_compare_jobs(job_ids=[id1, id2, id3]) # Side-by-side with fit scores
6. naukri_accept_nvite(nvite_job_id="...") # Respond to recruiter NVites
7. naukri_sync_applications() # Pull latest from Naukri backend
naukri_list_applications() # Query local tracking
8. naukri_research_company(keyword="...") # Unified: Naukri + AmbitionBox data
naukri_company_intel(company="slug", intel_type="interviews") # Interview tips
9. naukri_tailor_resume(job_id=...) # Get tailoring suggestions
naukri_update_profile(...) # Apply them
10. naukri_download_resume(save_path="...") # Download resumeДетали процесса отклика: Если у вакансии есть скрининговые вопросы, первый вызов naukri_apply() возвращает их. Ответы передаются вторым вызовом. Ключи ответов сопоставляются нечётко — "current ctc" соответствует "What is your current CTC?". Ответы кэшируются в questions.json, поэтому каждый тип вопросов достаточно ответить один раз.
Инструменты (117 атомарных)
Почти каждый инструмент следует атомарному паттерну «одна операция» — один MCP-инструмент на операцию.
Исключение — naukri_company_intel и naukri_debug: они сохраняют параметр action/intel_type (почему — см. подраздел «Инструменты-диспетчеры» ниже). Каталог рассчитан на прогрессивную загрузку Tool Search в Claude Code (по умолчанию с января 2026 года), поэтому большое количество узкоспециализированных инструментов стоит не дороже, чем несколько универсальных.
Аутентификация
naukri_login(method=...)— вход через Google SSO или по email/паролюnaukri_verify_otp(otp)— отправка OTP после входаnaukri_auth_status()— проверка действительности сессии
Поиск и подбор вакансий
naukri_search_jobs— поиск по ключевым словам с перехватом браузеромnaukri_get_recommendations— персональные рекомендации вакансийnaukri_get_job(job_id)— полные сведения о вакансииnaukri_similar_jobs(job_id)— поиск похожих вакансийnaukri_compare_jobs(job_ids)— сравнение бок о бок с оценками соответствияnaukri_bulk_fetch_jobs(job_ids)— до 20 вакансий за один вызовnaukri_job_detail_v1(job_id)— информация о day/walk-in собеседованиях, контактные данныеnaukri_report_fraud(job_id, reason)— жалоба на мошенническую вакансиюnaukri_auto_hunt— автоматический поиск работы в один вызов с оценкой соответствия
Отклик и отслеживание
naukri_apply(job_id, set_reminder_days=...)— одиночный отклик с автонапоминаниемnaukri_batch_apply(keywords=...)— массовый отклик из поискаnaukri_assess_fit(job_id, apply_if_fit=False)— оценка соответствия (автоотлик опционален)naukri_score_saved_jobs(min_fit_score=60)— оценка всех сохранённых вакансийnaukri_apply_top_fits(min_fit_score=70, limit=10)— оценка + автоотлик на лучшие совпаденияnaukri_list_applications(...)— запрос локальной историиnaukri_get_application(job_id)— детальный статус откликаnaukri_purge_applications(before_date)— удаление устаревших записейnaukri_stale_applications(...)— выявление устаревших откликовnaukri_follow_up_priority(...)— сопоставление входящих и напоминанийnaukri_draft_follow_up(job_id)— генерация сообщения для повторного контактаnaukri_recruiter_history()— история общения с рекрутерами по компаниям
Синхронизация и экспорт
naukri_sync_applications(force_browser=False, days_back=365)— трёхуровневая синхронизацияnaukri_sync_saved(force_browser=False)— синхронизация сохранённых вакансийnaukri_export_data(data_type, export_format="json")— экспорт в JSON/CSV
Сохранённые вакансии
naukri_list_saved_jobs(limit=50, page=1)— список сохранённых/добавленных в закладки вакансийnaukri_save_job(job_id, ...)— сохранить вакансиюnaukri_unsave_job(job_id)— удалить сохранённую вакансиюnaukri_sync_saved_jobs()— загрузка с сервера Naukri
Входящие (сообщения рекрутеров)
naukri_list_inbox(limit=20, unread_only=False)— список сообщенийnaukri_read_message(message_id, vcard_id, unique_id)— прочитать полное сообщениеnaukri_mark_interested(mail_id, conversation_id, interested=True)— отметить заинтересованностьnaukri_accept_nvite(nvite_job_id, ...)— отклик через NVite
Уведомления
naukri_list_notifications(limit=20, page=1, notif_type=None)— список с фильтрамиnaukri_notification_count()— количество непрочитанныхnaukri_mark_notification_read(notification_id, date)— отметить одно уведомление прочитаннымnaukri_mark_all_notifications_read()— отметить все как прочитанныеnaukri_notification_summary()— единая сводная панель
Профиль
naukri_get_profile()— полный профильnaukri_update_profile(fields, ...)— обновление полей профиляnaukri_audit_profile()— полнота профиля + подсказкиnaukri_boost_profile(randomize=False)— повторное сохранение заголовка для повышения видимостиnaukri_dashboard()— данные панели профиляnaukri_profile_targeting()— представление таргетинга DFP
Резюме и фото
naukri_resume_info()— метаданные резюмеnaukri_upload_resume(file_path)— загрузка PDF/DOC/DOCXnaukri_download_resume(save_path)— скачивание в локальный файлnaukri_photo_info()— метаданные фотоnaukri_upload_photo(file_path)— загрузка PNG/JPG/JPEG/GIFnaukri_delete_photo()— удаление фото профиля
Инсайты и аналитика
naukri_application_insights(days=30)— разбивка по статусам + скорость откликовnaukri_salary_position(designation=...)— позиционирование по зарплатеnaukri_cached_answers(action="list|update|delete", key=..., new_answer=...)— управление кэшированными ответамиnaukri_match_analytics(days=30)— разбивка оценок соответствия по полямnaukri_match_quality(days=30)— обобщённое качество соответствияnaukri_skill_gap(...)— разрыв навыков относительно рыночного спросаnaukri_salary_benchmark(keywords, ...)— рыночный ориентир зарплатnaukri_taxonomy()— таксономия ролей Naukri (37 отделов × 167 категорий × 1461 ролей)naukri_profile_prompts()— незавершённые действия по заполнению профиляnaukri_conversion_funnel(days=30)— воронка «отклик → собеседование»naukri_status_changes(days=30)— выявление переходов между статусами
Эффективность
naukri_search_impressions(days=7)— статистика показов в поискеnaukri_recruiter_activity(page=1, limit=100, filter_by=None)— действия рекрутеров с профилемnaukri_activity_level()— текущий уровень активности профиля
Компании
naukri_search_companies(keyword, page=1, limit=10)— поиск компанийnaukri_company_jobs(group_id, ...)— вакансии компанииnaukri_company_slug(group_id)— slug для AmbitionBox (одиночный или массовый через запятую)naukri_research_company(keyword, ...)— комбинированно Naukri + AmbitionBoxnaukri_follow_company(group_id|group_ids, action="follow|unfollow")— подписка/отпискаnaukri_follow_status(group_id|group_ids)— проверка статуса подпискиnaukri_company_intel(company, intel_type="salary|reviews|interviews")— аналитика AmbitionBox
Настройки
naukri_get_settings()— все текущие настройки аккаунта (статус поиска работы, уведомления, флаги согласий)naukri_update_settings(...)— изменение настроек (передавайте только подлежащие изменению поля)naukri_blocked_companies()— список заблокированных компанийnaukri_check_email()— статус проверки email/мобильного номераnaukri_visibility()— переключатели видимости в Resdexnaukri_notification_prefs()— предпочтения Email/SMS/push/WhatsAppnaukri_subscription_status()— подписка Naukri 360 и доступные функции
Оповещения о вакансиях
naukri_list_alerts()— все оповещения по сохранённым поискамnaukri_alert_detail(alert_id)— детали отдельного оповещенияnaukri_create_alert(name, keywords, ...)— создание нового оповещенияnaukri_update_alert(alert_id, ...)— редактирование полей оповещенияnaukri_delete_alert(alert_id)— удаление оповещения
Ранний доступ (неопубликованные роли)
naukri_list_early_access(...)— просмотр ролей до публикации от крупных компанийnaukri_share_early_access(job_id)— выразить заинтересованность (мгновенно, без скрининга)
Конструктор резюме
naukri_resume_templates()— доступные шаблоны (бесплатные + pro)naukri_resume_builder_status()— остаток попыток ИИ-переписывания, тариф подпискиnaukri_tailor_resume(job_id, ...)— рекомендации по подгонке резюме под вакансию
Тренировочное собеседование (ИИ)
naukri_mock_interview_topics()— доступные темы + статус выполненияnaukri_mock_interview_history()— прошлые собеседования, оценки и отзывыnaukri_start_mock_interview(job_id)— начало собеседования на основе вакансииnaukri_answer_mock_interview(test_id, topic_id, question_id, answer)— отправка ответаnaukri_mock_interview_prep(job_id)— комплект для подготовки к собеседованию
Автономный агент
naukri_agent_status()— Состояние агента + последние 5 запусков + сводка конфигурацииnaukri_agent_config()— Полная конфигурацияnaukri_agent_update_config(updates)— Обновить конфигурацию JSON-патчемnaukri_agent_run_now(ctx=None)— Выполнить один цикл «наблюдение → решение → действие → обучение»naukri_agent_approve(cycle_id)— Применить ожидающие решенияnaukri_agent_reject(cycle_id)— Отклонить ожидающие решенияnaukri_agent_history(limit=10)— История последних запусковnaukri_agent_decisions(cycle_id)— Решения по каждой вакансии за один цикл
Фоновый планировщик
naukri_scheduler_status()— Состояние планировщика + информация о последнем запуске каждой задачиnaukri_enable_task(task_name)— Включить отключённую задачуnaukri_disable_task(task_name)— Отключить задачуnaukri_run_task_now(task_name)— Выполнить задачу немедленноnaukri_task_history(task_name=None, limit=20)— История последних запусков
Напоминания и собеседования
naukri_list_reminders(include_past=True, include_app_status=True)— Все напоминания со статусом срокаnaukri_set_reminder(job_id, days=7, ...)— Создать/обновить напоминаниеnaukri_interview_prep(job_id)— Пакет подготовки к собеседованиюnaukri_add_interview_round(job_id, round_type, ...)— Отслеживать этап собеседованияnaukri_list_interview_rounds(job_id=None)— Список этаповnaukri_compare_offers(job_ids)— Сравнить несколько офферов
Инструменты диспетчера (осталось только 2 — оставлены намеренно)
naukri_company_intel(company, intel_type="salary|reviews|interviews")— Три действия используют общее разрешениеcompanyи общий процесс аутентификации AmbitionBox; разделение продублировало бы эту оркестрацию.naukri_debug(action=...)— 16 отладочных действий только для разработчиков в областях браузера/API/обнаружения; цена каталога здесь реальна даже с прогрессивной загрузкой, поскольку большинство пользователей никогда их не вызывает.
Прочее
naukri_daily_brief— Утренняя панель: 16 источников + рекомендуемые действияnaukri_health_check— Проверка конечных точек + пул браузеров + AmbitionBox
Установка
Предварительные требования
Python 3.10+
Playwright Chromium (устанавливается через
playwright install chromium)
Установка
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
pip install -e ../jobcore # shared scoring engine - see below
playwright install chromiumЗависимость jobcore
Таксономия навыков, оценка соответствия и разбор зарплат находятся в соседнем пакете jobcore; naukri_server/scoring.py и модули оценки в domain/ — это тонкие обёртки переэкспорта над ним. Пакет не опубликован на PyPI, поэтому он устанавливается одним из двух способов, и эти два способа намеренно разделены:
где | как | почему |
локальная разработка |
| редактировать jobcore и naukri вместе, без переустановки |
CI |
| у сборщика нет каталога |
Не добавляйте git-URL в requirements.txt. Он затирает редактируемую установку: после pip install -e ../jobcore последующий install install -r requirements.txt удаляет редактируемый пакет и заменяет его git-копией — молча, так как pip не печатает строку «already satisfied» для требования с прямым URL. Проверено в чистом venv 2026-08-20 и воспроизведено дважды. Локальная итерация здесь важнее удобства сборки, поэтому именно сторона сборки устанавливается из git.
Если вы пересоздаёте venv или видите ошибку ModuleNotFoundError: jobcore, повторно выполните pip install -e ../jobcore из этого каталога.
Обновление версии в requirements-ci.txt — это способ принять изменение jobcore: намеренно наглядный, отслеживаемый коммит, а не динамический @master, который мог бы привести CI этого репозитория в красный статус без изменений в нём.
perёмое — First Login.
Первый вход
Запустите сервер:
python naukri.pyЗатем вызовите медиа из MCP-клиента. Он открывает видимое окно Chromium, где вы можете:
Google SSO (рекомендуется): нажмите «Login with Google» — использует сохранённую в профиле Chrome сессию Google, учётные данные не требуются.
Электронная почта / пароль: передайте
method="email",email="...",password="...".
Сессия браузера хранится в chrome-profile/ (создаётся автоматически, игнорируется git). Эта каталог привязан к конкретной машине — он содержит cookies, локальное хранилище и кэшированные учётные данные. Не нужно его переносить между машинами.
Время жизни сеанса
Сеансы сохраняются примерно в течение 30 дней. После истечения сервер обнаружит это при запуске или на первом API-вызове и вернёт ошибку "Not logged in". Повторно аутентифицируйтесь через `mpt".
Конфигурация MCP-клиента
Конфигурация MCP-клиента
Конфигурация MCP-клиента
{
"mcpServers": {
"naukri": {
"command": "python",
"args": ["naukri.py"],
"cwd": "/path/to/mcp-servers/naukri"
}
}
}Переменные среды
Все переменные необязательны. Задаются в окружении или в файле .env.
Переменная | По умолчанию | Описание |
|
| Таймаут навигации страницы Playwright (мс) |
|
| Таймаут ожидания элемента Playwright (мс) |
|
| Таймаут REST API aiohttp (секунд) |
|
| Максимум одновременных вкладок браузера в PagePool |
Расположение файлов данных
Все файлы данных находятся в корне проекта и игнорируются git.
Файл | Назначение |
| Постоянный профиль браузера Playwright. Привязан к машине, никогда не отправлять в git. |
| Локальный учёт откликов. Записывается |
| Локальные сохранённые/в избранное вакансии. Записывается |
| Кэш ответов на вопросы анкеты. Автоматически заполняется при отклике, используется batch в процессе для автозаполнения. |
| Автоматическая резервная копия перед любой перезаписью JSON (атомарная запись: запись в |
Механизмы отказоустойчивости
Глобальная aiohttp-сессия — единая общая сессия для всех REST-вызовов, без накладных расходов на соединение
Дедублицированный API-слой —
_api_requestс декоратором@api_toolнормализует все взаимодействия с RESTБлокировка обновления токена — обновление JWT одним писателем предотвращает параллельные «шторма» 401
Проверка при запуске — состояние браузера и токена проверяется до принятия вызовов инструментов
Отменяемость массового отклика — если пакетная прервётся, частичный прогресс сохраняется
Резервное копирование данных — файлы
.backupсоздаются перед каждой перезаписью JSONАвтоочистка кэша времени жизни — устаревшие записи кэша ответов истекают автоматически
Атомарные записи — состояние синхронизации пишется через временный файл + переименование, чтобы избежать повреждений
TTL-кэш профиля — данные профиля кэшируются на 30 секунд, сокращая повторные одновременные вызовы API
Известные ограничения
Блокировки Akamai CDN
Naukri использует Akamai Bot Manager. Некоторые конечные точки возвращают 406 Not Acceptable или 403 Forbidden при прямом вызове REST без браузерной сессии:
Поиск (
naukri_search_jobs) — всегда используется перехват браузера; прямой REST заблокированИзменение профиля (
naukri_update_profile()) — PUT/DELETE блокируются Akamai; вместо этого используется товарная браузернаяОповещения о вакансиях — операции CRUD выполняются через браузерную UI-автоматизацию по той же причине
Это ожидаемое поведение. Инструменты, требующие взаимодействия с браузером, описаны как таковые. Если вы видите ошибки 406 у инструментов, которые должны использовать REST, проверьте статус входа через naukri_auth_status() — по исчётившему токену Akamai classifyрует запросы как ботовый трафик.
Парсинг AmbitionBox
AmbitionBox — это сайт на Next.js SSR. Инструменты зарплат и обзоров извлекают __NEXT_DATA__ из серверного рендера. Если AmbitionBox меняет структуру страниц, эти инструменты могут возвращать ошибки. naukri_health_check включает проверку AmbitionBox — статус «warn» там периодически ожидаемый и не является препятствием для основной функциональности Naukri.
Поиск неисправностей
Проблема | Решение |
Ошибки «Not logged in» | Срок сессии истёк (~30 дней). Вызовите |
Поиск пустой / 406 | Для прямого REST ожидаемо. |
Таймауты при медленном соединении | Увеличьте |
Лимиты скорости / дневной лимит откликов | Naukri ограничивает дневное число откликов в зависимости от типа аккаунта. Поле |
Сбои вкладок браузера | PagePool автосвапе упавшие вкладки при следующем |
Петля обновления токена | Удалите |
| Обычно означает невалидную сессию. Сначала войдите. Если уже вошли, передайте |
AmbitionBox зарплаты/обзоры не работают | Запустите |
Проверка работоспособности
Запустите naukri_health_check() для проверки всех интеграций сразу. Он проверяет сессию входа, API профиля, поисковый API (ошибка 406 здесь нормальна), рекомендации, дашборденость, пул браузеров и пар Is in dreams command. Возвращает try with per-check timing.
Удалённый доступ
Запустите сервер на постоянного включённой машине и подключайтесь откуда угодно (например, веб Claude в командных окружениях, мобильные устройства и т.д.). Поддерживаются два режима аутентификации, они могут работать параллельно на одном сервере.
Порядок действий
Клиент | Режим аутентификации | ПОЧЕМУ |
Claude Code CLI | Bearer ( |
|
Claude Desktop | Bearer ( | Поддерживает конфигурацию |
Claude.ai web | OAuth ( | Веб-интерфейс предлагает только поля OAuth client_id/secret, не bearer-поле |
Оба одновременно | Bearer + OAuth (установите обе переменные среды) | На одном сервере |
Шаг 1 — Создание секретов
# Bearer secret (for Claude Code / Desktop)
python -c "import secrets; print(secrets.token_urlsafe(48))"
# OAuth client_id + client_secret (for Claude.ai web)
python -c "import secrets; print('client_id=claude-ai-web')"
python -c "import secrets; print('client_secret=' + secrets.token_urlsafe(48))"Шаг 2 — Настройка .env
Скопируйте .env.example в .env и заполните. Файл .env игнорируется git. Минимальная конфигурация для включения ОБОИХ режимов аутентификации:
MCP_REMOTE=1
MCP_PORT=8321
MCP_PUBLIC_URL=https://naukri.<your-domain>
# Bearer (Claude Code + Desktop)
MCP_SHARED_SECRET=<paste output from token_urlsafe(48)>
# OAuth (claude.ai web)
MCP_OAUTH_ENABLED=1
MCP_OAUTH_CLIENT_ID=claude-ai-web
MCP_OAUTH_CLIENT_SECRET=<paste output from token_urlsafe(48)>
MCP_OAUTH_AUTO_APPROVE=1Если MCP_REMOTE=1, но переменная окружения для аутентификации не задана, сервер отказывается запускаться — это защитная проверка, не допускающая публичного доступа к неаутентифицированному MCP.
Шаг 3 — Публичное имя хоста (Cloudflare Tunnel рекомендуется)
Cloudflare Tunnel предоставляет стабильный публичный HTTPS-URL без открытия портов брандмауэра. Бесплатный тариф, безлимитный трафик.
winget install Cloudflare.cloudflared
cloudflared tunnel login
cloudflared tunnel create naukri-mcp
cloudflared tunnel route dns naukri-mcp naukri.<your-domain>Отредактируйте %USERPROFILE%\.cloudflared\config.yml:
tunnel: <UUID-from-create-command>
credentials-file: C:\Users\<you>\.cloudflared\<UUID>.json
ingress:
- hostname: naukri.<your-domain>
service: http://localhost:8321
- service: http_status:404Запустите туннель: cloudflared tunnel run naukri-mcp (или cloudflared service install для автозапуска).
Альтернативы: Tailscale Funnel (peer-to-peer, более низкая задержка для доверенных устройств) или ngrok (проще, но у бесплатного тарифа есть ограничения).
Шаг 4 — Запустите сервер
# Load env vars from .env (PowerShell — use a one-liner or a helper script)
Get-Content .env | Where-Object { $_ -match '^[A-Z_]+=.+' } | ForEach-Object {
$name, $val = $_ -split '=', 2
[Environment]::SetEnvironmentVariable($name, $val, "Process")
}
python naukri.py --httpВ логах должно быть видно Auth: OAuth provider enabled (issuer=https://naukri.<your-domain>, bearer-fallback=yes) и HTTP mode: 0.0.0.0:8321.
Шаг 5 — Подключение клиентов
Claude Code CLI (использует bearer):
claude mcp add --transport http naukri https://naukri.<your-domain>/mcp `
--header "Authorization: Bearer <MCP_SHARED_SECRET>"Claude Desktop (использует bearer):
В claude_desktop_config.json:
{
"mcpServers": {
"naukri": {
"url": "https://naukri.<your-domain>/mcp",
"transport": "http",
"headers": { "Authorization": "Bearer <MCP_SHARED_SECRET>" }
}
}
}Claude.ai web (использует OAuth):
Настройки → Коннекторы → Добавить пользовательский коннектор
URL:
https://naukri.<your-domain>/mcpOAuth Client ID:
claude-ai-web(соответствуетMCP_OAUTH_CLIENT_ID)OAuth Client Secret: вставьте
MCP_OAUTH_CLIENT_SECRET
Claude.ai автоматически обнаружит метаданные OAuth (FastMCP предоставляет .well-known/oauth-authorization-server и конечные точки /authorize + /token).
Smoke-тест (curl)
# 401 expected — no auth header
curl -i https://naukri.<your-domain>/mcp
# Bearer flow — should return MCP JSON-RPC instead of 401
curl -i -H "Authorization: Bearer <MCP_SHARED_SECRET>" `
https://naukri.<your-domain>/mcp
# OAuth metadata discovery
curl https://naukri.<your-domain>/.well-known/oauth-authorization-server | jq .Укрепление Windows-хоста
MCP-серверу требуется сеанс Chrome с графическим интерфейсом, поэтому хост-машина должна оставаться включённой и с активной пользовательской сессией.
# Disable sleep / hibernate while plugged in
powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
# Disable screen-off (optional — Chrome stays alive when display sleeps,
# but this avoids GPU pauses)
powercfg /change monitor-timeout-ac 0Поведение | Результат |
Блокировка экрана | Chrome остаётся запущенным, MCP работает |
Выход из системы | Chrome завершается, MCP не работает — сохраняйте пользовательскую сессию активной |
Отключение RDP | Процесс продолжает работу на хосте, MCP работает |
Сон системы | Chrome возобновляет работу, но выполняемые запросы могут завершиться с ошибкой — отключите спящий режим |
Использование Chrome вручную | Chrome в Windows не может запустить два экземпляра с разными |
Мониторинг
Статус Cloudflare «tunnel healthy» отражает только связь edge↔cloudflared, но не работоспособность origin-сервера. Добавьте внешний аптайм-пробу (например, UptimeRobot, бесплатно), которая запрашивает https://naukri.<your-domain>/.well-known/oauth-authorization-server (ожидается ответ 200), и вы будете уведомлены, когда хост-машина реально недоступна.
Справочник по режимам аутентификации
Переменная окружения | Требуется для | Примечания |
| Публичного доступа | Без этого сервер остаётся на 127.0.0.1 |
| Своего порта | По умолчанию 8321 |
| OAuth issuer / RS metadata | По умолчанию |
| Bearer-аутентификации | Минимум 32 символа; ротируйте через изменение env и перезапуск сервера |
| OAuth-потока | Включает |
| OAuth | Предрегистрированный |
| OAuth | Минимум 32 символа |
| UX OAuth |
|
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI-driven job application automation for LinkedIn and SEEK platforms with intelligent cover letter generation, automated application submission, and application tracking management. Supports anti-detection measures and complies with platform usage policies for safe job hunting automation.
- AlicenseAqualityAmaintenanceEnables AI assistants to interact with LinkedIn by scraping profiles, companies, job postings, and getting personalized job recommendations using authenticated browser automation.173,204Apache 2.0
- AlicenseBqualityCmaintenanceProvides tools to search & auto-apply to jobs directly on company websites, generate custom resumes, get contacts of recruiters and referrals and track applications easily3510520MIT
- FlicenseNot gradedqualityDmaintenanceAutomates job application tracking and resume/cover letter generation using AI, integrating with Google Drive, Notion, and Gmail.1
Related MCP Connectors
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Search AI-native jobs, inspect application forms, and fetch free interview-prep resources.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sundeepg98/naukri-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server