jd-intel-mcp について
jd-intel-mcpは、MCP対応AIクライアントから9種類のATSの求人情報を取得・絞り込みできるサーバーです。求人を共通形式に整え、読みやすいMarkdownの説明文や、提供されている給与・勤務地情報を返します。
主な機能
- 019種類のATSから求人を取得
- 02職種、分野、勤務地、掲載時期で絞り込み
- 03求人情報を共通形式に統一
- 04完全な求人説明をMarkdownで提供
- 05企業レジストリー検索とATS判定
活用シーン
- 01企業の募集中ポジションの検索
- 02候補者の経歴に基づく求人比較
- 03業界内の求人説明の一括確認
- 04企業が利用する採用プラットフォームの特定
MCP 対応
MCPサーバーはfetch_jobs、search_registry、detect_atsの各ツールと、registry://jd-intel/allリソースを提供します。ローカルで動作し、APIキー不要で公開ATS APIを利用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | 1 ページあたりの最大求人件数(デフォルトは 100)。通常は max_tokens が先に出力を制限します。 |
| order | enum | いいえ | "newest"(デフォルト):postedAt 順で、投稿日なしは最後。"board":ATS 独自の順序。newest | board |
| filter | string | いいえ | タイトル、部門、説明に対する正規表現マッチ:トピック/範囲 |
| offset | integer | いいえ | 並べ替え後にスキップする一致件数(デフォルトは 0)。次のページを取得するには、前回の応答の next_offset を渡します。 |
| company | string | はい | 会社の slug または名前(例:"stripe") |
| workday | object | いいえ | インデックスにない Workday 採用ボードのレジストリ設定を上書きします。採用ページの URL https://{tenant}.{env}.myworkdayjobs.com/{site} から 3 つの値を導出してください。推測しないでください。 |
| workday.env | string | はい | Workday の環境/データセンター。例:"wd108"、"wd5" |
| workday.site | string | はい | Workday 採用サイトのパス。例:"search"、"Cisco_Careers" |
| workday.tenant | string | はい | Workday テナント。URL の最初のラベル。例:"expedia" |
| max_tokens | integer | いいえ | 応答のトークン予算。テキストブロックの文字数÷4(デフォルトは 12000、1 以上の任意の整数)。求人は全体のみ返し、常に少なくとも 1 件を返します。値を大きくすると 1 回の呼び出しでより多くの求人情報が返り、小さくするとすばやく確認できます。 |
| title_filter | string | いいえ | タイトルのみを対象に正規表現でマッチ:職種 |
| location_excludes | array | いいえ | 求人に記載されたすべての勤務地にキーワードが含まれる場合のみ、その求人を除外します |
| location_includes | array | いいえ | 記載された勤務地のいずれかに、いずれかのキーワードが含まれる求人を保持します |
| posted_within_days | integer | いいえ | 過去 N 日以内に掲載された求人のみ |
詳細
jd-intel
求人情報をAIアシスタントに貼り付けるのはもうやめましょう。AIが求人情報を直接取得できるようになります。
全文を取得。構造も整理済み。9つの主要なATSに対応。コピー&ペーストは不要です。コンテキストも失われません。
これが生まれた理由
AIアシスタントは、すでにあなたについて多くのことを知っています。履歴書は記憶されています。希望する職種、これまでのプロジェクト、経歴も把握しています。求人情報を渡せば、すぐにサポートできる状態です。
そこで、あなたはコピー&ペーストします。
ある会社の求人情報。次の会社の求人情報。希望企業リストからさらに半ダース。半分はHTMLが壊れています。給与情報は変換時に消えます。リンクは取り除かれます。そして、職種が変わるたびに、同じ作業を最初から繰り返します。
求人サイトが独自のMCPを公開するのを待つこともできます。いずれは登場するでしょう。彼らのスケジュールで。あなたの優先事項ではなく、彼らの優先事項に沿って。彼らのクエリ抽象化に縛られて。
jd-intelなら、待つ必要はありません。AIが求人情報の生データを直接、あなたのやり方で取得します。厳選された情報層の一段下で動作します。
AIにこう尋ねてみてください。
「今週掲載されたAI/MLエンジニアリングの求人を探して」 「今、フィンテック企業で募集中のプロダクトデザイナー職は?」 「過去7日間に掲載されたスタッフPM職を取得して」
これで完了です。
スクレイピングではだめなのですか?
スクレイピングは失敗する場面でも、jd-intelなら対応できるからです。
- ブラウジングに失敗しても求人情報の全文を取得できます。 SPAで描画される求人サイト、読み込みの遅さ、認証の壁、地域制限はブラウザーを妨げます。しかし、公開API呼び出しは妨げません。
- HTMLの寄せ集めではなく、構造化データを取得します。 給与、勤務地の種類、部署、整ったMarkdownを、9つのATS間で正規化します。
- APIキーもブラウザーも不要です。 公開APIのみを使用します。AIが動く環境ならどこでも実行できます。
- すべてのプラットフォームで共通のスキーマを使います。 Greenhouse、Lever、Ashby、SmartRecruiters、Teamtailor、Recruitee、Personio、Workable、Workdayから、同じ形式で情報を取得できます。
できること
- コピー&ペーストせずに、AIから直接、どの会社の募集中の職種も検索する
- 1回の会話で、10職種に合わせて履歴書を調整する
- 経歴との適合度に基づいて求人をランク付けする
- 業界全体を調べる:「今週掲載されたフィンテック企業の募集中の職種を取得して」
- 大量の求人情報を読んでチームを調査する
このツールキットが情報を取得します。AIが考えます。
インストール
Claude Desktop、Claude Code、Cursor、Windsurf、VS Codeなど、MCP対応のAIクライアントで動作します。ChatGPT、GeminiなどMCP非対応のクライアントは、現時点ではサポートされていません。これらは異なるツール呼び出しシステムを使用しています。(対応してほしいところです。どのAIと会話する場合でも、プロトコルの仕組みは同じです。)
すべての処理は、お使いのマシン上でローカルに実行されます。そのため、デスクトップでのみ利用できます。モバイルアプリではローカルのMCPサーバーを実行できないため、スマートフォンやタブレットではjd-intelを使用できません。
Claude Desktop(ワンファイルでインストール、ターミナル不要)
最も簡単な方法です。Node.js もターミナルも不要です。Claude Desktop が同梱のランタイムでサーバーを実行します。
- 拡張機能をダウンロードします:jd-intel.mcpb。
- Claude Desktop で設定を開き、拡張機能、詳細設定の順に選択して、拡張機能をインストールをクリックします。ダウンロードしたファイルを選択します。
- アクセス内容を確認してインストールをクリックし、新しいチャットを開始します。ツールが自動的に表示されます。
ショートカット:.mcpb を設定ウィンドウにドラッグするか、システムで .mcpb ファイルを Claude Desktop で開くよう設定されている場合は、ファイルをダブルクリックします。この拡張機能はオープンソースで署名されていないため、Claude Desktop に「未検証」の通知が表示されます。それでもインストールを選択してください。
ターミナルを使いたい場合、または古いバージョンの Claude Desktop をお使いの場合は、Node.js 18+ をインストールし、npx jd-intel-mcp install を実行してから、Claude Desktop を再起動してください。または、設定ファイルを直接編集してください。詳しくは手動インストール(代替方法)をご覧ください。
その他のクライアント(Claude Code、Cursor、Windsurf、VS Code)
ワンファイルの .mcpb インストールは Claude Desktop の機能です。これらのクライアントでは同じサーバーを npx 経由で実行するため、Node.js 18+ が必要です。
Claude Code
claude mcp add jd-intel -- npx -y jd-intel-mcp
Cursor(設定、ツールと MCP、新しい MCP サーバーの順に選択するか、~/.cursor/mcp.json を編集します):
{
"mcpServers": {
"jd-intel": { "command": "npx", "args": ["-y", "jd-intel-mcp"] }
}
}
Windsurf(設定、ツール、Windsurf 設定、サーバーの追加の順に選択するか、「Raw Config を表示」から mcp_config.json を編集します)。Cursor と同じ mcpServers ブロックを使用し、更新をクリックします。
VS Code(Copilot エージェントモード):MCP: Add Server コマンドを実行するか、.vscode/mcp.json を作成します。キーは servers、タイプは stdio です:
{
"servers": {
"jd-intel": { "type": "stdio", "command": "npx", "args": ["-y", "jd-intel-mcp"] }
}
}
動作を確認する
新しいチャットを開始して、**「jd-intel の登録リストにあるフィンテック企業を教えてください」**と尋ねます。企業が表示されれば準備完了です。次に、実際に使ってみましょう:「今募集中で、自分に合いそうなシニア PM の求人を探してください。」
ツールが表示されませんか?
- クライアントを完全に終了して再起動します(ウィンドウを閉じるだけでなく、終了してください)。Claude Desktop の場合は、システムトレイから「終了」(Windows)、または ⌘Q(macOS)を選択します。
- npx クライアント(Claude Code、Cursor、Windsurf、VS Code)の場合は、
npx clear-npx-cacheを実行してから再起動します。 - npx を使う方法では、
node --versionで Node.js 18 以降であることを確認します。ワンクリックの.mcpbインストールには Node.js は不要です。
開発者向け
npm install jd-intel
import { fetchJobs } from 'jd-intel';
const jobs = await fetchJobs({
company: '<your-target-company>',
titleFilter: 'designer',
postedWithinDays: 14,
limit: 50,
});
結果はpostedAtの新しい順に返され、日付のないものは最後になります(order: 'board'ではATS独自の順序が維持されます)。fetchJobsはページを配列として返します。fetchJobsDetailedは同じページに加えて、offsetとlimitを適用する前の一致件数であるtotal_matchedも返すため、掲載数が少ないのか、結果が途中で切られているのかを判断し、残りのページを取得できます。
import { fetchJobsDetailed } from 'jd-intel';
const { jobs, total_matched } = await fetchJobsDetailed({
company: '<your-target-company>',
titleFilter: 'engineer',
limit: 20,
offset: 20, // second page
});
同じ結果から、企業がどのように特定されたか、どのボードから応答があったかも分かります。
match:registry(登録済み企業。アダプターの呼び出しは1回)、probe(レジストリ未登録のため、すべてのアダプターに問い合わせ)またはworkday_override(明示的なWorkday設定)。company:レジストリに一致した場合はレジストリ行の{ key, name }、それ以外はnullです。boards:応答があったボードごとのエントリーです。{ ats, slug, name, site, board_url, org_name, org_url, jobs_found, matched, selected, scan }が含まれます。jobs_foundは、フィルター適用前にボードが掲載していた行数です。WorkdayとSmartRecruitersでは詳細を取得する前に掲載リストをフィルタリングするため、この件数はリストの件数であり、返された行数ではありません(リストのスキャンに上限がある場合は下限値になります)。matchedはフィルター適用後、offsetとlimitを適用する前に残った行数です。そのため、行がすべてページから外れたボードも表示されます。board_urlはslugから作られます。org_nameとorg_urlはボードが自身について示す情報、つまりATSの応答に含まれる組織名と、リンク先の採用情報または会社のホストです。プラットフォームが情報を公開していない場合はnullになります(LeverとAshbyはどちらも公開していません)。slugやレジストリの名前で補完されることはありません。probeによる一致はslugの一致であり、本人確認済みではありません。求人をその企業のものとして扱う前に、org_nameとorg_urlが意図した企業と一致するか確認し、これらがnullの場合はboard_urlを開いてください。failed:検出中に例外を発生させたアダプターです。{ ats, slug, name, code, message }が含まれ、codeはrate_limitedまたはats_unreachableです。どのボードからも応答がなく、確認に失敗した場合、fetchJobsは[]を返す代わりにそのエラーをスローするため、障害が「見つからない」と誤って認識されることはありません。total_before_filters:jobs_foundの合計です。一致件数がゼロでtotal_before_filtersが正の値の場合、企業は採用中ですが、どのATSでもフィルターを通過した求人がなかったことを意味します。
detectAtsDetailed(company)は{ boards, failed }を返します。まずレジストリ行(source: 'registry'。プローブは行いません)、続いて応答があったすべてのライブプローブ(source: 'probe')がプラットフォーム順に並びます。failedには確認できなかったプローブが同じコードとともに一覧表示されます。detectAtsは引き続き[{ ats, slug }]を返します。
ライブラリが実行できない呼び出しではArgumentError(code: 'invalid_args')がスローされます。対象企業が指定されていない場合、atsが不明な場合、またはtitleFilterやfilterを正規表現としてコンパイルできない場合が該当します。リクエストを送信する前にスローされます。
CLIの使用例:npx jd-intel fetch <company-slug> --title-filter "engineer" --posted-within-days 14。フィルターの完全なリファレンスは以下をご覧ください。
各ATSへのリクエストでは、サーバーから応答が始まるまで10秒待ちます。429、5xx、またはネットワークエラーの場合は、最大3回、バックオフ(1秒、2秒)を挟んで再試行し、ATSからRetry-Afterが送信された場合はその値に従います。1つのホストにつき、同時に実行するリクエストは最大4件です。再試行後も失敗する場合は、codeがrate_limitedまたはats_unreachableのAtsErrorがスローされます。
Node.js 18以降。APIキーは不要です。設定も不要です。
手動インストール(代替手順)
npx jd-intel-mcp installが失敗する場合は、設定を直接編集してください。
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"jd-intel": {
"command": "npx",
"args": ["-y", "jd-intel-mcp"]
}
}
}
Claude Desktopを再起動してください。
更新
- **Claude Desktop 拡張機能(
.mcpb):**現在のものに新しい.mcpbをインストールするか、Settings、次に Extensions から管理します。リセットするには、削除して再インストールします。 - npx クライアント(Claude Code、Cursor、Windsurf、VS Code):
npx -y jd-intel-mcpは npm のキャッシュから新しいバージョンを取得します(約24時間以内)。すぐに強制的に更新するには、npx clear-npx-cacheを実行してからクライアントを再起動します。 - ライブラリまたは CLI:
npm install jd-intel@latest(最新バージョンを強制)またはnpm update jd-intel(semver に従う)を実行します。
企業レジストリは自動的に更新されます。jd-intel は起動時に最新のリストを取得し、オフライン時は同梱のコピーを使用するため、再インストールしなくても新しい企業が表示されます。
MCP ツール
| ツール | 目的 |
|---|---|
fetch_jobs | 職種、トピック、勤務地、掲載時期で絞り込んで、企業の募集中の職種を取得します |
search_registry | 名前または業種で企業を検索します |
detect_ats | 企業が利用している ATS プラットフォームを特定します |
さらに、1つのリソースがあります:registry://jd-intel/all。ATS ごとに分類された企業レジストリ全体です。広範なカタログ調査向けに、遅延取得されます。
取得できる内容
すべてのプラットフォームの求人情報は、1つのスキーマに正規化されます:
{
"id": "a1b2c3d4e5f6",
"company": "Example Co",
"title": "Senior Software Engineer, Platform",
"department": "Engineering",
"location": "Remote - US",
"locations": ["Remote - US", "Toronto, Canada"],
"locationType": "remote",
"workplace": { "type": "remote", "source": "ats" },
"salary": { "min": 180000, "max": 240000, "currency": "USD", "period": "year", "source": "text" },
"description": "Design and build the API surface our customers integrate against...",
"url": "https://boards.example.com/jobs/12345",
"postedAt": "2026-04-10T14:30:00Z"
}
企業ごとにカスタム解析する必要はありません。
データモデル
| フィールド | 説明 |
|---|---|
title | 求人の正式なタイトル |
company | 正規化された企業名 |
department | チームまたは部門(提供されている場合) |
location | 主な勤務地:市区町村、州、国、またはリモート |
locations | 求人への応募が可能なすべての勤務地。主な勤務地が先頭です。勤務地フィルターは各項目を確認します |
locationType | remote、hybrid、onsite、またはプラットフォームにも勤務地のテキストにも記載がない場合は unknown |
workplace | { type, source }。type は locationType と同じ値です。source はプラットフォームに明記されている場合は ats、勤務地文字列から読み取った場合は text、不明な場合は null です |
salary | currency を含む最小値から最大値までの範囲、および period(year、month、hour、または null)と source(プラットフォームから提供された場合は ats、求人情報から解析した場合は text)です。記載がない場合は null です |
description | 整形された Markdown 形式の完全な求人票(JD)です。content.status が missing の場合は空です |
content | { status, reason }。求人情報を読み取れた場合は complete です。Workday または SmartRecruiters で求人が掲載されていたものの、詳細取得リクエストに失敗した場合は missing です(reason:http_503、http_429、network_error)。この場合、description と salary は不明です |
url | 求人情報への直接リンク |
postedAt | 掲載日(提供されている場合) |
対応プラットフォーム
| プラットフォーム | 状況 | 主な用途 |
|---|---|---|
| Greenhouse | 提供済み | テクノロジー業界で最も広く利用されている ATS |
| Ashby | 提供済み | スタートアップで急速に普及 |
| Lever | 提供済み | 成長中の企業でよく利用 |
| SmartRecruiters | 提供済み | 大企業および中堅企業 |
| Teamtailor | 提供済み | 欧州のスタートアップおよびスケールアップ企業 |
| Recruitee | 提供済み | オランダ/EU の中小企業およびスケールアップ企業 |
| Personio | 提供済み | ドイツ/EU の中堅企業 |
| Workable | 提供済み | 世界各地の中小企業 |
| Workday | 提供済み | 大企業(レジストリキーで識別) |
新しい ATS の追加は、アダプターファイルを1つ追加するだけです。コントリビューションをご覧ください。
フィルター(クイックリファレンス)
| フラグ | マッチ対象 | 用途 |
|---|---|---|
--title-filter | タイトルのみ | 職種の識別(PM、エンジニア、デザイナー) |
--filter | タイトル+部門+説明 | トピックまたは担当範囲(インテグレーション、成長) |
--posted-within-days | 最近の求人 | 掲載時期による絞り込み |
--location-include | 勤務地にいずれかのキーワードが含まれる | 対象地域の指定 |
--location-exclude | 勤務地にキーワードが含まれない | 地理的なノイズの除外 |
--limit | 最初の N 件 | 出力サイズの上限設定 |
すべてのフィルターは AND 条件で適用されます。パターンと注意点の詳細:docs/filters.md。
ロードマップ
リリース済み
- ライブラリ、CLI、MCP サーバー(1 つのツールキットを構成する 3 つのインターフェース)
- Greenhouse、Ashby、Lever、SmartRecruiters、Teamtailor、Recruitee、Personio、Workable、Workday のアダプター
- タイトル、トピック、勤務地、日付によるフィルター
- 求人票テキストからの給与情報の抽出
- 検証済み企業レジストリ(1,100 社以上)
次の予定
- Anthropic MCP マーケットプレイスへの申請
計画中
- 経時的な追跡(求人の掲載、終了、再掲載)
- 変更の検出
- 履歴書を考慮した適合度スコアリング
貢献
詳しくは CONTRIBUTING.md をご覧ください。概要は次のとおりです。
企業をレジストリに追加する: registry/*.json を直接編集しないでください。候補を tmp/candidates.json に追加してから、各求人ボードに実際に問い合わせ、公開中の求人を返すものだけを残すライブゲートを実行します。
node scripts/verify-registry.mjs --candidates tmp/candidates.json --limit 50
node scripts/append-registry.mjs
npm run sync:registry-pages
node --test test/*.test.js
ゲートを通過していないエントリーはマージできません。一見正しそうな求人ボードが何も返さないと、誰かの検索でひそかに失敗します。それは単に企業が登録されていないよりも悪いことです。Workday では、企業の実際の採用ページ URL から読み取った {tenant, env, site} の config が必要です。パターンから組み立ててはいけません。確認方法については CONTRIBUTING.md をご覧ください。
ATS アダプターを追加する: src/adapters/ に新しいファイルを追加します。アダプター 1 つにつきファイル 1 つです。既存のアダプターのパターンに従ってください。
企業をリクエストする: issue を作成してください。足りない企業を教えてください。それだけでも役に立つ貢献です。
制作者
Prashant R。PM として開発もしています。AI ブームの裏で本当に重要なものを試し、作るようにしています。
- ポートフォリオと執筆記事:prashantrana.xyz
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。