Naukri MCP Server
Naukri MCP Server
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_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 戦略
Naukri の Akamai CDN は、一部のエンドポイントへの直接 REST 呼び出しをブロックします。このサーバーではハイブリッド方式を採用しています:
戦略 | 使用箇所 | 理由 |
直接 REST API |
| 高速で、ブラウザのタブが不要です。JWT トークンはブラウザの Cookie から抽出します。 |
ブラウザインターセプト |
| 検索 API は直接 REST では 406 を返します。ブラウザがページに移動して XHR レスポンスを取得します。 |
ブラウザ UI 自動化 |
| ボタンのクリックやフォーム入力、SSO ポップアップの操作が必要です。Akamai が REST 経由の PUT/DELETE をブロックします。 |
AmbitionBox スクレイピング |
| サーバーサイドレンダリングされた Next.js ページから |
PagePool
サーバーは 3 つのブラウザタブのプールを管理しています(NAUKRI_MAX_TABS で設定可能)。MULTIPLE タブはセマフォでチェックアウトされ、落ちた場合は自動復旧され、使用後に返却されます。これにより、バッチようや一括応募のような同時実行処理も、タブをいくつも開きすぎずに並列で行えます。
TokenManager
JWT 認証トークン(nauk_at Cookie)はブラウザコンテキストから抽出され、メモリにキャッシュされます。401 エラー時は、単一ライターの更新ロックが並列更新ストームを防ぎます。1 つのリクエストが更新し、他のリクエストは待機してその結果を再利用します。
3 層同期フォールバック
naukri_sync_applications() は次の 3 つの戦略を順に試します。
REST API -- 履歴エンドポイントへのページ割り GET(最速・最信頼)
ブラウザインターセプト -- 応募済み求人ページへ移動し、XHR レスポンスを捕捉
HTML スクレイピング -- サーバーレンダリングされた DOM から適応的 CSS セレクタで求人カードを抽出
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() 呼び出しで質問が返されます。2 回目の呼び出しで回答を渡します。回答キーはあいまい一致です。たとえば "current ctc" の答えは "What is your current CTC?" にマッチします。回答は questions.json にキャッシュされるため、各質問タイプは一度だけ答えれば済みます。
ツール(117 個のアトミックツール)
ほぼすべてのツールは、単一目的のアトミックパターンに従っています(1 操作に 1 ソフトウェアツール)。naukri_company_intel と naukri_debug だけが action/intel_type パラメータを保持しています(その理由は後述の「ディスパッチャ型ツール」の節を参照)。このカタログは 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_ids)-- 適合度スコア付きの比較表示naukri_bulk_fetch_jobs(job_ids)-- 1 回の呼び出しで最大 20 件の求人を取得naukri_job_detail_v1(job_id)-- ウォークイン情報、連絡先詳細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_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)-- 1 件を既読に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_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)-- AmbitionBox のスラグ(単一またはカンマ区切りの一括)naukri_research_company(keyword, ...)-- Naukri + AmbitionBox を組み合わせた企業リサーチnaukri_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()-- メール・モバイル認証の状態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(...)-- 大手企業の未公開求人を閲覧naukri_share_early_access(job_id)-- 興味表明(即時、質問なし)
履歴書ビルダー
naukri_resume_templates()-- 利用可能なテンプレート(無料 + 有料)naukri_resume_builder_status()-- AI リライトの残り回数、サブスクリプション層naukri_tailor_resume(job_id, ...)-- 指定求人向けのカスタマイズ提案
模擬面接(AI)
naukri_mock_interview_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)— observe→decide→act→learn サイクルを1回実行naukri_agent_approve(cycle_id)— 保留中の決定を適用naukri_agent_reject(cycle_id)— 保留中の決定を却下naukri_agent_history(limit=10)— 直近の実行履歴naukri_agent_decisions(cycle_id)— 1サイクル分のジョブ別決定
バックグラウンドスケジューラ
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")— 3つのアクションは同じ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/ のスコアリングモジュールはそれを再エクスポートする薄いシムです。これは PyPI にはないため、次の2つの方法のいずれかでインストールされ、この2つは意図的に区別されています。
場所 | 方法 | 理由 |
ローカル開発 |
| jobcore と naukri を一緒に編集でき、再インストール不要 |
CI |
| ランナーには |
git URL を requirements.txt に追加しないでください。 追加すると editable インストールが壊れます。pip install -e ../jobcore の後に pip install -r requirements.txt を実行すると、editable パッケージがアンインストールされ、静かに git チェックアウトに置き換えられます。direct-URL の要件には "already satisfied" の行が表示されないためです。クリーンな venv で 2026-08-20 に計測し、2回再現しました。ここでは CI の利便性よりもローカルでの反復が重要なので、git からインストールするのは CI 側です。
venv を再構築した場合、または ModuleNotFoundError: jobcore が表示された場合は、このディレクトリから pip install -e ../jobcore を再実行してください。
requirements-ci.txt のピンを更新することが、jobcore の変更を取り込む方法です。これは意図的に、このリポジトリの CI をここでの変更なしに赤くする可能性のある動く @master ではなく、可視でレビュー可能なコミットです。
初回ログイン
サーバーを起動します:
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 in" エラーを返します。naukri_login(method="google") で再認証してください。
MCP クライアント設定
{
"mcpServers": {
"naukri": {
"command": "python",
"args": ["naukri.py"],
"cwd": "/path/to/mcp-servers/naukri"
}
}
}環境変数
すべてオプションです。シェルまたは .env ファイルで設定します。
変数 | デフォルト | 説明 |
|
| Playwright のページナビゲーションタイムアウト(ミリ秒) |
|
| Playwright の要素待機タイムアウト(ミリ秒) |
|
| aiohttp REST API タイムアウト(秒) |
|
| PagePool 内の同時ブラウザタブの最大数 |
データファイルの場所
すべてのデータファイルはプロジェクトルートに置かれ、gitignore されています。
ファイル | 目的 |
| Playwright の永続的ブラウザプロファイル。マシン固有のため、コミットしないでください。 |
| ローカルの応募状態の追跡。 |
| ローカルの保存・ブックマーク済み求人。 |
| スクリーニング質問の回答キャッシュ。応募時に自動生成され、バッチ応募の自動回答に使用されます。 |
| JSON ファイルが上書きされる前の自動バックアップ(原子的書き込み: |
高可用性機能
グローバル aiohttp セッション — すべての REST 呼び出しで単一の共有セッションを使い、接続オーバーヘッドを回避
重複排除 API レイヤー —
_api_requestと@api_toolデコレータによる REST 操作の正規化リフレッシュロック — 単一書き込みの JWT リフレッシュで並列 401 ストームを防止
起動時検証 — ツール呼び出しを受け入れる前にブラウザとトークンの状態を検証
バッチ応募のキャンセル安全性 — バッチが中断されても部分的な進捗を維持
データバックアップ — JSON の上書き前に
.backupファイルを作成キャッシュTTL自動パージ — 古くなった回答キャッシュエントリを自動的に失効
原子的書き込み — 一時ファイル + リネームによる同期状態の書き込みで破損を回避
プロフィールTTLキャッシュ — プロフィールデータを30秒間キャッシュし、冗長なAPI呼び出しを削減
既知の制限事項
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 では想定された動作。 |
低速接続でのタイムアウト |
|
レート制限 / 1日の応募上限 | Naukri はアカウントタイプごとに1日の応募数を制限しています。 |
ブラウザタブのクラッシュ | PagePool は次の |
トークンのリフレッシュループ |
|
| 通常は無効なセッションを意味します。まずログインしてください。すでにログインしている場合は |
AmbitionBox の給与/レビューが機能しない |
|
ヘルスチェック
naukri_health_check() を実行すると、すべての統合を一度に検証できます。ログインセッション、プロフィールAPI、検索API(ここでは 406 は正常)、レコメンデーション、ダッシュボード、ブラウザプールの活性、AmbitionBox スクレイピングをテストします。
{summary: {ok: N, warn: N, fail: N}, checks: [...]} を、各チェックの所要時間とともに返します。
リモートアクセス
常時稼働のマシンでサーバーを実行し、どこからでも接続します(共同作業環境、モバイルなどの web Claude)。2つの認証モードがサポートされて、同じサーバーで並行して実行できます。
簡単な判断
クライアント | 認証モード | 理由 |
Claude Code CLI | Bearer ( |
|
Claude Desktop | Bearer ( |
|
Claude.ai web | OAuth ( | Web UI は OAuth の client_id/secret フィールドのみ公開し、Bearer は公開しない |
両方を一度に | Bearer + OAuth(両方の env 変数を設定) | 単一サーバーで、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 ファイルは gitignore されています。両方の認証モードを有効にする最小限の設定:
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 web(OAuthを使用):
Settings → Connectors → Add custom connector
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エンドポイントを提供します)。
スモークテスト(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間のリンクのみを反映しており、オリジン(配信元)は反映されません。外部の稼働監視プローブ(例:UptimeRobot、無料)でhttps://naukri.<your-domain>/.well-known/oauth-authorization-server(200期待)を監視し、ホストマシンに実際に到達できないときに通知を受け取れるようにしてください。
認証モードのリファレンス
環境変数 | 必須対象 | 補足 |
| 公開バインド | これがないとサーバーは127.0.0.1のまま |
| カスタムポート | デフォルトは8321 |
| OAuth発行者/RSメタデータ | デフォルトは |
| Bearer認証 | 32文字以上。環境変数の変更+再起動でローテーション |
| OAuthフロー |
|
| OAuth | claude.ai用に事前登録されたクライアント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