104 Job Hunter MCP
# 104 Job Hunter MCP
> 透過 MCP (Model Context Protocol) 讓 AI 直接操作 104 人力銀行。實現搜尋、比對、投遞自動化。
> **🤖 進階應用**:利用 `AGENTS.md` 啟動詢答,從現有履歷直接建立「求職者虛擬分身」(`MY_PROFILE.md`),精準鎖定職缺。
[](https://www.typescriptlang.org/)
[](https://playwright.dev/)
[](https://modelcontextprotocol.io/)
---
> [!IMPORTANT]
> **🤖 給 AI Agent 的最高指導原則 (System Prompt for AI)**
>
> 如果你是接手這個專案的 AI,你的下一步是**立刻讀取專案根目錄的 [`AGENTS.md`](./AGENTS.md)**。
> 裡面有建立「虛擬分身」、過濾職缺與投遞的標準劇本。**讀完前,禁止執行任何搜尋工具。**
---
## ✨ 核心功能 (Features)
- 🔍 **API 攔截式搜尋**:直接攔截 104 後端 JSON API,繞過前端防爬蟲機制。
- 📄 **職缺詳情讀取**:用真實 Chrome 提取職位描述、條件要求與福利。
- 🛡️ **Hit-in-the-loop 安全機制**:投遞工具只會填好求職信,**絕對不會幫你按送出**。
- 🍪 **持久化登入**:Cookie 存入專屬 Chrome Profile,免重複登入。
- 🤖 **Agent 行為規範**:內建 `AGENTS.md` 提供自動化求職劇本。
## 🔒 隱私與安全 (Privacy & Security)
這個工具採用**本地優先 (Local-First)** 架構,確保帳號安全:
1. **100% 本地執行**:MCP 伺服器只在你的電腦上跑,不回傳帳號密碼。
2. **不經手密碼**:登入時會跳出本地 Chrome,你自己在 104 官方頁面登入。
3. **Cookie 安全隔離**:加密存在本機的 `.chrome-profile/`。該資料夾已列入 `.gitignore`,不會上傳 GitHub。
---
## 🚀 安裝與執行 (Setup)
### 1. Clone 專案與建置
```bash
git clone https://github.com/YuJunWang/104-job-hunter-mcp.git
cd 104-job-hunter-mcp
npm install
npm run build
```
*(系統需求:Node.js 18+、Google Chrome)*
### 2. 登入 104 帳號(只需一次)
```bash
npx tsx src/login.ts
```
執行後會跳出 Chrome 視窗,請手動登入 104,完成後關閉視窗。
### 3. 掛載 MCP 伺服器
把以下設定貼進 MCP 客戶端設定檔(如 Antigravity 的 `mcp_config.json` 或 Claude Desktop `config.json`):
```json
{
"mcpServers": {
"104-job-hunter": {
"command": "node",
"args": ["/絕對路徑/104-job-hunter-mcp/build/index.js"]
}
}
}
```
*(Windows 使用者請注意路徑反斜線跳脫:`C:\\Users\\你的帳號\\...\\build\\index.js`)*
重啟 AI 客戶端,工具就準備好了。
### 4. 設定 AI 腦袋 (Agent 規範)
1. 複製根目錄的 `MY_PROFILE.example.md`,重新命名為 `MY_PROFILE.md`。
2. 填入你的求職偏好與地雷。
3. 讓 AI 讀取 `AGENTS.md`:
- **Antigravity**:將 `AGENTS.md` 放進 `.agents/rules/`,或存成全域 Skill (`~/.gemini/config/skills/104-hunter/SKILL.md`)。
- **Cursor**:把 `AGENTS.md` 內容貼進 `.cursorrules`。
- **Claude Desktop**:貼進 System Prompt。
- **直接講**:「請閱讀專案內的 MY_PROFILE.md 與 AGENTS.md 並按照流程幫我找工作」。
---
## 🤖 AI Agent 開發與操作手冊
> **給 AI 的環境建置交接指令**
>
> 如果你是負責幫人類安裝 MCP 的 AI,請執行以下步驟:
> 1. 跑 `git clone`、`npm install` 跟 `npm run build`。
> 2. 請人類跑 `npx tsx src/login.ts` 並手動登入。
> 3. 幫人類把 MCP 絕對路徑寫進設定檔。
> 4. **讀取 [`AGENTS.md`](./AGENTS.md)** 了解操作劇本。
> 5. 依據 `AGENTS.md` 引導人類建立 `MY_PROFILE.md`。
### 工具列表 (MCP Tools)
#### `job104_check_session`
- **功能**:檢查登入狀態。
- **時機**:求職流程的最開頭,確保 Cookie 未過期。
#### `job104_search`
- **必填參數**:`keyword` (如:`AI 全端工程師 Python`)
- **選填參數**:`location` (如:`台北市`)、`page` (預設 1)
- **注意**:AI 應在背景比對結果,只向人類展示 Top 3~5 筆。
#### `job104_get_details`
- **必填參數**:`job_url`
- **功能**:獲取職位描述、條件要求與福利。草擬推薦信前必備。
#### `job104_get_cover_letters`
- **選填參數**:`job_url`
- **功能**:讀取 104 帳號中儲存的所有自我推薦信(Cover Letter)範本,包含範本標題與完整內容。可作為 AI 客製化潤飾的基底。
#### `job104_prepare_application` (Hit-in-the-loop)
- **必填參數**:`job_url`
- **選填參數**:`template_title` (指定使用之範本名稱)、`cover_letter_text` (自訂推薦信內容)、`dry_run` (預設 false)
- **注意**:只會開啟投遞確認頁與代填推薦信。AI 執行後必須提醒人類:「請手動點擊確認送出」。
#### `job104_search_companies`
- **必填參數**:`keyword` (公司名稱)
- **選填參數**:`page`、`pageSize`
#### `job104_get_company_detail`
- **必填參數**:`companyInput` (代碼或網址)
- **功能**:獲取公司福利、產品與開放職缺列表。
#### `job104_save_job`
- **必填參數**:`jobInput` (代碼或網址)
- **功能**:將職缺加入 104 收藏。
#### `job104_save_company`
- **必填參數**:`companyInput` (代碼或網址)
- **功能**:追蹤公司。
#### `job104_reload_server`
- **功能**:優雅重啟 MCP 伺服器以載入新編譯的代碼,避免進程鎖死或 stdio 管道中斷。
---
## 📁 專案結構
```
104-job-hunter-mcp/
├── src/
│ ├── index.ts # MCP 主程式,工具註冊入口
│ ├── browser.ts # Playwright 瀏覽器單例管理 (含 Stealth Plugin)
│ ├── login.ts # 登入輔助腳本
│ ├── utils/
│ │ └── url.ts # 職缺/公司 URL 與代碼解析模組
│ ├── __tests__/
│ │ └── url.test.ts # URL 單元測試
│ └── tools/
│ ├── search.ts # job104_search
│ ├── details.ts # job104_get_details
│ ├── letters.ts # job104_get_cover_letters
│ ├── apply.ts # job104_prepare_application
│ ├── company.ts # job104_search_companies, job104_get_company_detail
│ ├── save.ts # job104_save_job, job104_save_company
│ └── session.ts # job104_check_session
├── examples/
│ └── client.ts # 本地測試客戶端範例
├── build/ # npm run build 輸出 (不進 git)
├── .chrome-profile/ # Cookie 儲存目錄 (不進 git)
├── AGENTS.md # AI 操作劇本
├── MY_PROFILE.example.md # 虛擬分身範本
├── package.json
└── tsconfig.json
```
TDQS
Scored across 3 tools
Each tool has a distinct purpose: searching for jobs, retrieving details for a specific job, and preparing an application. There is no overlap in functionality, making it easy for an agent to select the correct tool.
All tool names follow the same pattern: the 'job104_' prefix followed by an action verb ('search', 'get_details', 'prepare_application'). This consistent verb_noun style makes the toolset predictable and easy to navigate.
With 3 tools, the server is well-scoped for its purpose. The tools map to the core job hunting workflow (search, view, apply) without unnecessary extras, fitting comfortably within the ideal 3-15 range.
The toolset covers the entire lifecycle from job discovery to application preparation, including a handoff to human confirmation. There are no obvious gaps that would prevent an agent from completing the core job hunting flow.