ApplyWise について
ApplyWiseは、求人検索や応募計画、応募フォーム入力を行う求職者向けのMCPサーバーです。既定ではドライランとなり、実際の送信には承認または明示的な同意が必要です。
主な機能
- 01複数求人サイトの並列検索
- 02条件による求人の絞り込みと重複排除
- 03応募計画とドライラン
- 04応募フォームの入力と確認
- 05承認ゲートと安全チェック
- 06生成テキストの出典記録
活用シーン
- 01複数サイトを横断した求人探し
- 02送信前の応募内容の確認
- 03CAPTCHAや認証手順の人への引き継ぎ
- 04重複応募の防止と実行レポートの確認
MCP 対応
互換クライアントに求人検索、応募計画、フォーム処理のツールを提供します。stdioとbearer token付きのstreamable HTTPに対応し、実際の送信は承認と同意の制御下にあります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
33掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | |
| query | string | いいえ | |
| boards | any | いいえ | |
| cursor | string | いいえ | |
| location | string | いいえ | |
| platforms | any | いいえ | |
| since_days | integer | いいえ | |
| apply_policy | boolean | いいえ |
詳細
job-apply-mcp (ApplyWise)
求人を検索して応募フォームに入力し、取り消せない操作の前に停止する MCP サーバーです。モジュール式(プラットフォーム、LLM プロバイダー、ブラウザードライバーを差し替え可能)、並列処理対応、トークン節約型(コンパクトなページ分割出力)、ローカルファースト(定型フォーム項目はお使いのマシン上の Ollama、LM Studio、または MLX に送信し、難しい文章だけをエスカレーション)です。macOS、Linux、Windows 上のあらゆる MCP クライアントで動作します。
警告
アルファ版です。 最初の実環境でのドッグフーディング実行(1人のユーザー、1晩、約330件の求人情報を発見)で得られた結果: 検索、ランキング、重複排除、計画は一連の流れで機能し、ブラウザードライバーは Greenhouse と Lever のフォームをすべて入力して確認できるようになりましたが、無人で応募が送信されたことはまだありません。Greenhouse の求人ページのほとんどは reCAPTCHA で保護されているため、ツールがフォームに入力した後、最後のクリックはあなたに引き継がれます(
handoff)。これは意図された動作です。自由記述式の質問をあなたの操作なしで送信するには、writing.reviewer = "router"(ローカルでの厳格なレビュー)が必要です。まだ不安定な部分があります。取り消せない操作にはすべてゲートを設けてログに記録し、結果が不確かな場合は再試行しません。
Claude Code プラグインとしてインストールする
このリポジトリは Claude Code のプラグインマーケットプレイスでもあります。applywise プラグインはレビュー済みのバージョンに固定して MCP サーバーを起動し、ツールを安全に使う方法を Claude に伝えるスキルを追加します。
claude plugin marketplace add tanmayagrawal21/job-apply-mcp
claude plugin install applywise@applywise
続いて、以下のクイックスタートにある init と doctor をご自身のターミナルで実行し、/mcp に plugin:applywise:applywise があることを確認してください。同じ安全モデルが適用されます。デフォルトではドライランとなり、実際に送信するたびに人間が承認します。また、画面に表示される CAPTCHA は必ずあなたに引き継がれます。自分で同意のウィンドウを開かない限り、ログイン、コード、アカウント作成はあなた自身で行います(安全モデルの項目7と8)。更新するには、claude plugin update applywise@applywise を実行します。リリースとバージョン固定の仕組みについては、docs/release.md を参照してください。
5分で始める
uv(または pipx)が必要です。リポジトリをクローンする必要はありません。
# 1. Create config.toml, profile.toml, controls.toml (asks a few questions; --yes to skip them)
uvx --from git+https://github.com/tanmayagrawal21/job-apply-mcp job-apply-mcp init
# 2. Put your real details in the profile it printed the path of, then check everything
uvx --from git+https://github.com/tanmayagrawal21/job-apply-mcp job-apply-mcp doctor
# 3. Add the printed snippet to your MCP client (guides for ten clients: docs/clients/)
claude mcp add --transport stdio job-apply -- uvx --from git+https://github.com/tanmayagrawal21/job-apply-mcp job-apply-mcp
続いて、アシスタントに「greenhouse:examplecorp でデータ関連の求人を検索し、最適な求人の応募計画を立てて、ドライランを実行して」と依頼してください。
dry_run = false を設定するまでは、すべてドライランです。
インストール方法の別の選択肢:pipx install git+https://github.com/tanmayagrawal21/job-apply-mcp(その場合、コマンドは job-apply-mcp のみ)または、仮想環境に pip install します。最初の PyPI リリース後は uvx applywise も使えます(PyPI のディストリビューション名は applywise ですが、job-apply-mcp コマンドもエイリアスとして引き続き使えます)。
オプションの追加機能:[browser](Playwright)、[agent]、[jobspy]、[mlx]、[hf]、[litellm]、[keyring]。
機能
| 領域 | 内容 |
|---|---|
| 検索 | Greenhouse、Lever、Ashby、SmartRecruiters、Workday、JobSpy の求人ボードをページネーションしながら並列検索します |
| ポリシーゲート | スポンサーシップ、市民権、セキュリティクリアランス、経験、卒業時期、給与の下限、雇用主のパターンに基づいてスキップします |
| 実行 | run_applications / job-apply-mcp run:渡したリンク、自分宛てにメールした求人リンク(メールは読み取り専用)、求人検索を1回の実行にまとめ、実行レポートを作成し、フィードバックを次回の実行に反映します |
| 応募 | 可能な場合はプラットフォーム API を使用し、それ以外の場合はブラウザードライバーを使用します。他のサイトには汎用の LLM 支援アダプターを使用します |
| ローカル LLM ルーティング | 複雑さでスコア付けした階層(small/medium/large/narrative)、フォールバック、任意のクラウド利用、最後の手段としての MCP クライアントを備えています |
| プロフィールビルダー | プロフィールで回答できなかった質問を収集して順位付けし、あなたに尋ねます(profile_questions、answer_profile_question、job-apply-mcp profile ask)。モデルが回答を生成することはありません |
| 認可 | 国ごとの事実(home_country には [authorization]、その他の国には [authorization.<CC>])を使用します。デフォルトの国はなく、不明な国は未解決のままです |
| 文章作成 | スタイルルール、禁止フレーズ、経歴の空白を避けるためのチェックに基づいて、カバーレターと回答を作成します |
| 出所情報 | 生成したテキストはすべて記録され、あなたが検証または編集できます |
| 重複排除 | 応募データの保存に確認メールの任意の取り込み機能を加え、二重応募を防ぎます |
| 制御レイヤー | クォータ、モード切り替え、証明と受信者のガード、文章のリント、プロンプトインジェクションの検出を備えています |
| トランスポート | stdio(デフォルト)とベアラートークン付きのストリーム可能な HTTP に対応しています |
| 運用 | init、doctor、Dockerfile、Linux/macOS/Windows での CI |
実行ステータス
run_applications / run_report の結果に含まれる各求人には、必ず1つのステータスが設定されます。必要に応じて why も含まれます
(ADR-0049)。
| ステータス | 意味 |
|---|---|
submitted | 実際の送信を実行しました。確認が届く場合があります |
confirmed | 照合により送信が確認されました |
dry_run_ok | ドライランが完了しました。実行モードなら送信されます(クォータについては live_preview を参照してください。CAPTCHA によって処理が停止するかどうかは、行の captcha モードに示されます:docs/tools.md) |
needs_human | あなたの対応が必要です。why に理由(未解決のフィールド、レビューゲート、承認待ち、確認コード)が示されます |
quota_blocked | 日次、プラットフォームごと、または実行ごとのクォータにより、実際の送信が拒否されました。何も送信されていません |
skipped | 試行されませんでした。why に理由(ポリシー、重複、文章が未承認、max_applications 到達)が示されます |
unsupported_site | ホストに対応する有効なアダプターがありません |
unknown | 結果が不明です(クリック後に障害が発生した場合など)。手動で確認してください |
failed | エラーが発生しました |
max_applications(1以上の整数)は、1回の実行で処理する応募可能な求人(送信準備が整っているもの、またはあなたの対応が必要なもの)の上限です。この上限はドライランと実行モードの両方に適用されます。スキップされた求人と未対応の求人はカウントされません。ドライランでは、現在の実行モードのクォータで許可される内容を示す
live_preview も返されます。実際の送信は、日次(24時間の移動期間あたり25件)、プラットフォームごと(10件)、実行ごと(10件)の上限にもカウントされます。ユーザー設定で上限を引き下げたり引き上げたりできます。
安全性モデル
- デフォルトではドライランです。 変更しない限り
dry_run = trueです。initは常にこの値を書き込みます。 - 承認トークン。
plan_applicationは、回答そのもののハッシュに紐づくトークンを返します。実際に送信するにはこのトークンが必要なので、確認した内容がそのまま送信されます(apply.auto_approveを有効にするとこの機能は無効になります。無効にしないでください)。 - 制御レイヤー。 副作用が発生するたびに、独立したチェックが実行されます。日次および実行ごとの上限、二重送信防止、送信先拒否リスト、文章のリント、ページテキストのインジェクション検査、
apply_enabledキルスイッチが対象です。独自のルールはcontrols.tomlに追加できます。 - 強制停止。 表示されている CAPTCHA チャレンジと、
policy.stop_phrasesに一致する証明チェックボックス(たとえば「AIを使用していません」)がある場合は、必ずneeds_humanが返されます。これらの設定を変更して回避することはできません。確認コードが入力されるのは、ユーザー自身が入力した場合、許可された事前入力を確認した場合(ADR-0026/0027)、またはターミナルから無人実行に同意した場合(項目8)のみです。アカウント作成はデフォルトで無効です。有効にするには、ユーザー自身の設定ファイルでaccounts.auto_create = trueにし、さらに認証情報への同意ウィンドウを開く必要があります(ADR-0046)。 - 事実を捏造しません。 回答にはプロフィールの情報を使用するか、仮定であることを明示します。必須項目が未解決の場合、実行は停止します。自律性レベル(ADR-0052)。 ユーザー自身の設定ファイルにある
[answers] autonomyで、ユーザーが対応できないときにエージェントが何を仮定できるかを決定します。strict(デフォルト:未解決の項目はすべてユーザーの応答を待ちます)、safe_default(連絡・マーケティングへの許可は拒否し、設定済みの「どのようにして知りましたか」のデフォルト値を使い、「自分についての回答を辞退する」を選択します)、infer(さらに、ツールやテクノロジーに関するスキル・経験の質問には、履歴書に基づいて回答します。「はい」と答えるのは履歴書に明確な記載がある場合のみで、それ以外は「いいえ」です。意欲、勤務可能時期、勤務地、条件に関する質問は推測しません)。就労資格・ビザ・身元、経歴などの審査、配慮、録音、証明、法的契約、雇用条件、ポリシーのない給与、開始日や勤務地に関する事実は、決して仮定しません。仮定した回答にはすべてラベルが付きます(assumed、プラン、根拠、実行レポート)。同じ質問についてpromote_after(3)回仮定すると、一度だけユーザーに質問し、その回答を再利用します。プロジェクトファイルや環境変数では、自律性レベルをより厳しくすることしかできません。initでは使用するレベルを尋ね、control_statusではそのレベルを表示します。 - プライバシー。 プロフィールとシークレットはユーザーのマシン内に保持され、コミットされることはありません。API キーは環境変数からのみ読み込まれます。SECURITY.md を参照してください。
- 認証情報がモデルに渡されることはありません。 ATS のログイン情報は OS のキーチェーンに保存されます(
job-apply-mcp vault add <host> --username U。パスワードは画面に表示されず、入力を求められます)。ブラウザーがページに直接入力し、MCP が公開するのはvault_status(ホストのみ。シークレットは含みません)だけです。1回の実行で、ホストごとのログイン試行は最大2回です。アカウントがロックされた場合、またはパスワードが誤っている場合、そのホストの処理を停止します(ADR-0046)。 - 同意ウィンドウ(任意、ADR-0048)。
job-apply-mcp consent --for 24h(または--per-run、--max N、--scopes ...)を、選択した期間ごとにターミナルから一度入力します。ウィンドウが開いている間は、送信が自動承認され(同意 ID とともに記録されます)、ボットチェックが非表示ウィジェットのみのページはワンクリックで送信されます。また、メールで届いたコードは、想定される送信元からの最新メッセージを読み取って一度だけ入力します。無人でのコード入力は、なりすましの送信者がコードを提供できないよう、verification.trusted_authserv_idsにユーザー自身のメールサーバーの Authentication-Results ID が登録されるまで無効です(ユーザー設定のみ)。結果は後から確認します(list_applications)。consent --revokeで終了できます。consent_status(MCP)は読み取り専用で、同意ウィンドウを作成できるツールはありません。 - ユーザー本人だけが回答できる質問(ADR-0050)。 連絡、メッセージ、マーケティングに関する許可(SMS、WhatsApp、電話、メール、求人アラート、タレントコミュニティ)には、決して「はい」と回答しません。適用されるのは、ユーザー自身の
optin:<channel>の回答があり、かつ単独の明確な許可の質問である場合のみです。それ以外はユーザーに委ねるか、answers.autonomy = "safe_default"または"infer"(項目5)では拒否し、assumedとラベル付けします。就労資格とスポンサーシップについては、国ごとの構造化された事実情報のみを使用します。 - 最後のクリックはユーザーが行います(任意、ADR-0058)。
headless = falseにして、[browser] final_click = "human"を設定します。エージェントは各フォームに入力して検証し、タブを前面に表示しますが、「送信」はクリックしません。クリックするのはユーザーです。監視機能は最大human_click_timeout_s(デフォルトは900秒)の間、3秒ごとにページを読み取り、サイトに成功ページが表示されると送信を記録します。run_applicationsは、入力済みのタブを一度に1つずつユーザーに渡します。この設定は制限を厳しくすることしかできません。どの設定レイヤーでもhumanに設定できますが、agentに戻せるのはユーザー自身の設定のみです。 既知の制限:reCAPTCHA Enterprise を使用する Ashby。 reCAPTCHA Enterprise で保護された Ashby のフォームは、ウィジェットが非表示の場合でも、自動送信クリックを通知なく拒否するか、チャレンジを表示します。これらの求人にはfinal_click = "human"を使用してください。
トランスポート
job-apply-mcp # stdio (what clients launch)
job-apply-mcp --transport http --host 127.0.0.1 --port 8765 # http://127.0.0.1:8765/mcp
JOB_APPLY_MCP_TOKEN=... job-apply-mcp --transport http --host 0.0.0.0 # non-local: token required
HTTP はデフォルトでループバックにバインドされます。それ以外のアドレスでは、JOB_APPLY_MCP_TOKEN
(Authorization: Bearer ...)が設定されていないと起動しません。ネットワーク経由でアクセスする場合は、TLS リバースプロキシを使用してください。Dockerfile が含まれています
(デフォルトではブラウザーなし。--build-arg BROWSER=1 を指定すると Playwright と Chromium が追加されます)。
ドキュメント
- クライアントのセットアップガイド:Claude Desktop、Claude Code、Cursor、VS Code、Windsurf、Zed、 Codex CLI、Gemini CLI、Continue、汎用 JSON
- ツールのリファレンス と 設定のリファレンス(自動生成)
- FAQ、CHANGELOG、設計上の決定事項、CONTRIBUTING
開発
git clone https://github.com/tanmayagrawal21/job-apply-mcp && cd job-apply-mcp
uv sync --extra dev
uv run ruff check . && uv run pytest -q # offline; live tests need JAM_LIVE=1
uv run python scripts/gen_config_docs.py # after changing config.py
プライバシースキャン:python scripts/privacy_scan.py --terms ~/.config/job-apply-mcp/privacy_terms.txt。所有者が承認した検出結果は、リポジトリ外の ~/.config/job-apply-mcp/privacy_allow.txt(--allow FILE)に記録します。ADR-0051 を参照してください。コミット済みの .privacy-allow に含めてよいのは、架空のフィクスチャとマニフェスト内の公開プロジェクト ID(ADR-0042)に対する、完全一致のアンカー付き正規表現のみです。個人情報やフィンガープリントは絶対に追加しないでください。
MIT ライセンスです。行動規範に従ったコントリビューションを歓迎します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。