Naukri MCP Server
Naukri MCP Server
원자 단위(atomic) 도구 117개로 구성된 MCP 서버로 Naukri.com(인도 최대 구직 포털)을 자동화합니다. 채용공고 검색, 대량 지원, 프로필 관리, 지원 내역 추적, 기업 조사, 채용 담당자 활동 모니터링까지 모두 MCP 클라이언트에서 처리할 수 있습니다. Claude Code의 점진적 도구 검색(Tool Search) 로딩(2026년 1월부터 기본 제공)에 맞게 설계되어, 각 도구는 단일 목적을 가지며 필요할 때마다 발견됩니다.
기술 스택: Python 3.10+, FastMCP, Playwright(영구 Chromium), aiohttp
주요 기능:
검색 및 지원 — 키워드 검색, 개인 맞춤 추천, 스크리닝 질문 자동 응답이 포함된 단일 또는 일괄 지원
지원 내역 추적 — 로컬 JSON 저장 + Naukri 백엔드와의 3계층 동기화(REST, 브라우저 인터셉트, HTML 스크레이핑)
프로필 관리 — 프로필 조회/수정(
naukri_get_profile,naukri_update_profile), 노출 강화(naukri_boost_profile)기업 조사 —
naukri_research_company및 연봉 데이터와 직원 리뷰를 제공하는 AmbitionBox 브리지성과 분석 —
naukri_search_discover,naukri_recruiter_activity_of,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 전략
Naukri의 Akamai CDN은 여러 엔드포인트에 대한 직접 REST 호출을 차단합니다. 서버는 하이브리드 접근 방식을 사용합니다.
전략 | 사용되는 도구 | 이유 |
직접 REST API |
| 빠르고 브라우저 탭이 필요 없습니다. 브라우저 쿠키에서 추출한 JWT 토큰을 사용합니다. |
브라우저 인터셉트 |
| 직접 REST 호출 시 검색 API가 406을 반환합니다. 브라우저가 해당 페이지로 이동한 후 XHR 응답을 가로챕니다. |
브라우저 UI 자동화 |
| 버튼 클릭, 폼 작성, SSO 팝업 처리가 필요합니다. REST로는 PUT/DELETE를 Akamai가 차단합니다. |
AmbitionBox 스크레이핑 |
| 서버 사이드 렌더링된 Next.js 페이지에서 |
PagePool
서버는 3개의 브라우저 탭 풀을 유지합니다(NAUKRI_MAX_TABS로 설정 가능). 탭은 세마포어를 통해 체크아웃되고, 충돌 시 자동 복구되며, 사용 후 반환됩니다. 이를 통해 일괄 지원과 같은 동시 작업이 필요한 탭을 과도하게 생성하지 않고도 병렬로 실행될 수 있습니다.
TokenManager
JWT 인증 토큰(nauk_at 쿠키)은 Playwright 브라우저 컨텍스트에서 추출되어 메모리에 캐시됩니다. 401 오류 발생 시 단일 작성자 갱신 잠금(single-writer refresh lock)이 병렬 갱신 폭주를 방지합니다. 즉 하나의 요청만 갱신하고 나머지 요청은 대기한 후 그 결과를 재사용합니다.
3계층 동기화 폴백
naukri_sync_applications()은 세 가지 전략을 순서대로 시도합니다.
REST API — 히스토리 엔드포인트에 대한 페이징 GET(가장 빠르고 안정적)
브라우저 인터셉트 — 지원한 공고 페이지로 이동하여 XHR 응답 캡처
HTML 스크래이핑 — 적응형 CSS 선택자를 사용하여 서버가 렌더링한 DOM에서 공고 카드 추출
Related MCP server: LinkedIn MCP Server
AI 사용자를 위한 빠른 시작
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 매개변수를 유지합니다(이유는 아래 "Dispatcher tools" 하위 섹션 참조). 이 카탈로그는 Claude Code의 점진적 Tool Search 로딩(2026년 1월부터 기본 설정)을 위해 설계되어, 다목적 도구 몇 개와 비용이 비슷하면서도 더 많은 특화 도구를 제공할 수 있습니다.
인증
naukri_login(method=...)— Google SSO 또는 이메일/비밀번호 로그인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_id)— 적합성 점수와 함께병렬 비교naukri_bulk_fetch_jobs(job_ids)— 한 호출에서 최대 20건 공고naukri_job_detail_v1(job_id)— 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)— 3계층 동기화naukri_sync_saved(force_browser=False)— 저장된 공고 동기화naukri_export_data(data_format="저장..."— 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/DOCX 업로드naukri_download_resume(save_path)— 로컬 파일로 다운로드naukri_photo_info()— 사진 메타데이터naukri_upload_photo(file_path)— PNG/JPG/JPEG/GIF 업로드naukri_delete_photo()— 프로필 사진 삭제
인사이트 & 분석
naukri_application_insights(days=30)— 지원 상태 분석 및 처리 속도naukri_salary_position(designation=...)— 연봉 위치 파악naukri_cached_answer(action="list|dictionary|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, company_group_id...)— 해당 기업의 공고naukri_company_slug(group_id)— AmbitionBox 슬러그(단일 또는 콤마 구분 일괄)naukri_research_company(keyword, ...)— Naukri + AmbitionBox 통합 조사naukri_follow_company(group_id|group_ids, action="follow|unfollow")— 팔로우/팔로우 해지naukri_flick_follow_status— 팔로우 상태 확인naukri_company_intel(company, intel_type="salary|reviews|interviews")— AmbitionBox 정보 조회
설정
naukri_get_settings()— 현재 계정의 전체 설정(구직 상태, 알림, 동의 플래그)naukri_update_settings(...)— 설정 변경(변경할 필드만 전달)naukri_blocked_companies()— 차단한 기업 목록naukri_check_email()— 이메일/휴대폰 인증 상태naukri_visibility()— Resdex 가시성 토글naukri_notification_prefs()— 이메일/SMS/푸시/WhatsApp 선호 설정naukri_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(...)— 상위 기업들이 소개하는 사전 공개 역할 살Frac12;보기naukri_share_early_access(job_id)— 관심 표현 (즉시 진행, 스크리닝 없음)
이력서 빌더
naukri_resume_templates()— 사용 가능한 템플릿(무료 + 프로)naukri_resume_builder_status()— 남은 AI 재작성 기회 및 구독 등급naukri_tailor_resume(job_id, ...)— 특정 공고에 맞춘 이력서 수정 제안
모의 면접채 (AI)
naukri_mock_interview_do_topics()— 지원 주제 및 완료 상태naukri_mock_interview_history()— 점수/피드백이 포함된 과거 면접 기록naukri_start_mock_interview(job_id)— JD 기반 모의 면접 시작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)— 관찰→결정→행동→학습 사이클 1회 실행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=...)— 브라우저/API/디스커버리 영역의 개발 전용 디버그 동작 16개; 대부분의 사용자가 호출하지 않기 때문에 프로그레시브 로딩을 써도 카탈로그 비용은 실질적으로 발생합니다.
기타
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 chromiumjobcore 의존성
기술 분류, 적합성 점수, 급여 파싱은 형제 패키지인
jobcore에 있습니다. naukri_server/scoring.py
및 domain/ 스코어링 모듈은 단순한 재-export 셔로 그 위에 있습니다. PyPI에는
없으므로 두 가지 방법 중 하나로 설치하며, 두 방법은 의도적으로 분리됩니다:
적용 대상 | 방법 | 이유 |
로컬 개발 |
| jobcore와 naukri를 재설치 없이 함께 편집 |
CI |
| 실행기에 |
requirements.txt에 git URL을 추가하지 마세요. 그렇게 하면 editable 설치를 덮어씁니다.
pip install -e ../jobcore 이후에 pip install -r requirements.txt를 실행하면 editable 패키지를
지우고 git 체크아웃으로 대체합니다. 이때 direct-URL 요구사항에는 pip가 "already satisfied"
출력이 없어서 조용히 일어납니다. 2026-08-20에 깨끗한 venv에서 측정했고 두 번 재현했습니다.
여기서 중시하는 것은 CI 편의성보다 로컬 반복 작업이므로, git에서 설치하는 쪽은 CI 쪽입니다.
venv를 다시 만들거나 ModuleNotFoundError: jobcore가 뜨면 이 디렉터리에서
pip install -e ../jobcore를 다시 실행하세요.
requirements-ci.txt의 고정 버전을 올리는 것이 jobcore 변경을 채택하는 방식입니다.
움직이는 @master가 아무 변경 없이 CI를 빨갛게 불이지 않도록, 이는 의도적으로
눈에 보이고 검토 가능한 커밋으로 남깁니다.
첫 번째 로그인
서버를 시작하세요:
python naukri.py그 다음 MCP 클라이언트에서 naukri_login(method="google")을 호출하세요. 보이는 Chromium 창이 열리며 다음을 할 수 있습니다:
Google SSO(권장): "Login with Google" 클릭 — Chrome 프로필에 저장된 Google 세션을 사용하므로 별도 인증 정보가 필요 없습니다.
이메일/비밀번호
method="email",email="...",password="..."를 전달하세요.
브라우저 세션은 chrome-profile/에 저장됩니다(자동 생성, gitignore됨). 이 디렉터리는 시스템별로 다릅니다 — 쿠키, 로컬 저장소, 캐시된 자격 증명이 들어 있습니다. 다른 시스템 사이에 복사하지 마세요.
세션 수명
세션은 약 30일간 유지됩니다. 만료된 경우 서버는 시작 시점이나 첫 번째 API 호출에서
이를 감지하고 "Not logged" 오류를 반환합니다. naukri_login(method="google")로 다시 인증하세요.
MCP 클라이언트 설정
{
"mcpServers": {
"naukri": {
"command": "python",
"args": ["naukri.py"],
"cwd": "/path/to/mcp-servers/naukri"
}
}
}환경 변수
모두 선택 사항입니다. 셸 또는 .env 파일에 설정하세요.
변수 | 기본값 | 설명 |
|
| Playwright 페이지 탐색 시간(ms) |
|
| Playwright 요소 대기 시간(ms) |
|
| aiohttp REST API 시간(초) |
|
| PagePool의 최대 동시 브라우저 탭 수 |
데이터 파일 위치
모든 데이터 파일은 프로젝트 루트에 있으며 gitignore됩니다.
파일 | 용도 |
| Playwright 영구 브라우저 프로필. 시스템별 파일이므로 커밋하지 마세요. |
| 로컬 지원 추적. |
| 로컬 저장/북마크된 채용 정보. |
| 문항 답변 캐시. apply 중 자동으로 채워지며 batch apply의 자동 응답에 사용됩니다. |
| JSON 파일을 덮어쓰기 전 자동 백업(원자적 쓰기: |
회복 탄력성
전역 aiohttp 세션 — 모든 REST 호출에 단일 공유 세션, 연결 오버헤드 절감
중복 제거된 API 레이어 —
_api_request를@api_tool데코레이터로 감싸 모든 REST 상호작용을 정규화갱신 잠금(Refresh lock) — 단일 작성자 JWT 갱신으로 401 storm을 동시에 방지
시작 시 검증 — 브라우저 및 토큰 상태를 호출 이전에 검증
일괄 지원(배치) 취소 안전장치 — 일괄 작업이 중단되어도부분 진행 상태를 보존
데이터 백업 — JSON을 덮어쓰기 전에
.backup파일 생성캐시 TTL 자동 정리 — 오래된 응답 캐시 항목이 만료되자 자동 삭제
원자적 쓰기 — 동기화 상태를 임시 파일 + rename 방식으로 기록해 손상 방지
프로필 TTL 캐시 — 중복 API 호출 감소를 위해 프로필 데이터를 30초 동안 캐시
알려진 제한 사항
Akamai CDN 차단
Naukri는 Akamai Bot Manager를 사용합니다. 브라우저 세션 없이 REST로 직접 호출하면
몇몇 엔드포인트가 406 Not Acceptable이나 403 Forbidden을 반환합니다:
검색 (
naukri_search_jobs) — 항상 브라우저 인터셉트 사용, 직접 REST는 차단됨프로필 수정 (
naukri_update_profile()) — PUT/DELETE가 Akamai에 차단되어 브라우저 자동화로 대체채용 알림 — CRUD 조작이 같은 이유로 브라우저 UI 자동화를 통함
이는 예상된 동작입니다. 브라우저 상호작용이 필요한 도구는 그렇게 문서화되어 있습니다.
REST를 사용해야 하는 도구에서 406 오류가 보이면 naukri_auth_status()로 로그인 상태를
확인하세요. 토큰이 만료되면 Akamai가 그 요청을 봇으로 분류합니다.
AmbitionBox 스크래핑
AmbitionBox는 Next.js SSR 사이트입니다. 급여 및 리뷰 도구는 서버 렌더링 페이지에서
__NEXT_DATA__ 를 추출합니다. AmbitionBox가 페이지 구조를 바꾸면 이 도구가 오류를
반환할 수 있습니다. naukri_health_check에는 AmbitionBox 점검이 포함되어 있으며
여기서 "warn" 상태가 나와도 핵심 Naukri 기능에는 지장이 없습니다.
문제 해결
문제 | 해결 방법 |
"Not logged in" 오류 | 세션 만료(~30일). |
검색 결과가 비어 있거나 406 | 직접 REST에서는 예상된 동작. |
느린 연결에서 타임아웃 |
|
속도 제한 / 일일 지원 상한 | Naukri는 계정 유형별로 일일 지원 수를 제한합니다. 응답 차분 |
브라우저 탭 충돌 | PagePool은 다음 |
토큰 갱신 반복 |
|
| 보통 유효하지 않은 세션입니다. 먼저 로그인하세요. 이미 로그인했다면 |
AmbitionBox 급여/리뷰가 동작 안 함 |
|
Health Check
naukri_health_check()를 실행하면 모든 통합을 한 번에 검증합니다. 로그인 세션, 프로필
API, 검색 API(여기서 406은 정상), 추천, 대시보드, 브라우저 풀 활성 상태, AmbitionBox
스크래핑을 확인합니다.
각 체크의 소요 시간과 함께 {summary: {ok: N, warn: N, fail: N}, checks: [...]}를 반환합니다.
원격 접근
항상 켜져 있는 머신에서 서버를 실행하고, 어디서든 연결하세요(함께 사용하는 환경의 웹 Claude, 모바일 등). 두 가지 인증 모드를 지원하며 같은 서버에서 동시에 실행할 수 있습니다.
빠른 결정
클라이언트 | 인증 모드 | 이유 |
Claude Code CLI | Bearer ( |
|
Claude Desktop | Bearer ( |
|
Claude.ai 웹 | OAuth ( | 웹 UI에서는 bearer가 아닌 OAuth client_id/secret 필드만 표시됨 |
둘 모두 동시 | Bearer + OAuth (두 환경 변수 모두) | 단일 서버에서 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 파일은 gitignored입니다.
두 인증 모드를 모두 활성화하는 최소 구성:
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=1MCP_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(피어-투-피어 방식이라 신뢰할 수 있는 기기에서는 지연 시간이 낮음) 또는 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 웹(OAuth 사용):
설정 → 커넥터 → 사용자 지정 커넥터 추가
URL:
https://naukri.<your-domain>/mcpOAuth 클라이언트 ID:
claude-ai-web(MCP_OAUTH_CLIENT_ID와 일치)OAuth 클라이언트 시크릿:
MCP_OAUTH_CLIENT_SECRET값을 붙여넣기
Claude.ai는 OAuth 메타데이터를 자동으로 검색합니다(FastMCP가 .well-known/oauth-authorization-server와 /authorize 및 /token 엔드포인트를 제공).
스모크 테스트 (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는 화면이 있는(headed) 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 사용 | Windows에서 Chrome은 서로 다른 |
모니터링
Cloudflare의 "tunnel healthy" 상태는 엣지↔cloudflared 구간의 연결만 반영하며, 오리진(실제 서버)의 상태는 반영하지 않습니다. 호스트 머신이 실제로 접근 불가능할 때 알림을 받으려면, https://naukri.<your-domain>/.well-known/oauth-authorization-server(이 200 응답 예상)에 접속을 확인하는 외부 업타임 프로브(예: UptimeRobot, 무료)를 설정하세요.
인증 모드 참조
환경 변수 | 필요한 용도 | 참고 |
| 공개 바인딩 | 이 값이 없으면 서버는 127.0.0.1에만 유지됨 |
| 사용자 지정 포트 | 기본값 8321 |
| OAuth 발급자 / RS 메타데이터 | 기본값은 |
| Bearer 인증 | 32자 이상; 환경 변수를 바꾸고 재시작하면 교체됨 |
| OAuth 흐름 |
|
| OAuth | 클라이언트의 사전 등록된 클라이언트 ID |
| OAuth | 32자 이상 |
| OAuth UX |
|
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