
Job Search MCP
io.github.Servation由 GitHub 帳號 Servation 發布v0.1.3更新於 Oct 24, 2026
Claude searches real job boards, scores each job 0-100 for fit, and shows a ranked board.
概覽
為 Claude Desktop 設計的本地 MCP 伺服器,會搜尋真實求職網站、依符合度為每個職缺打 0-100 分,並顯示可快速篩選的排名看板。
- 可以做什麼
- 依職務、地點、資歷、刊登時間、遠端、薪資或應徵人數搜尋求職網站(LinkedIn 及 Greenhouse、Lever、Ashby、Workday 等)
- 為找到的職缺打 0-100 符合度分數並附一句理由,也可重新為整個看板評分
- 顯示排名看板或已儲存的追蹤清單,並以文字列出有潛力的職缺
- 對單一職缺標記已應徵、略過或儲存,並依分數或來源批次篩選
- 儲存履歷檔案以驅動搜尋與評分,並清空未評分或全部看板項目
- 適用情境
- 適合正在求職、主要關注美國軟體工程職缺的人:讓 Claude 從多個求職網站蒐集職缺、依履歷排序,並維護候選清單與應徵追蹤,且不會重複顯示同一職缺。
- 執行需求
- 透過 npx(Node.js)以 stdio 在本機執行,為 Claude Desktop 打造;用戶端需能啟動本機伺服器並呈現 MCP App 介面,純遠端用戶端無法使用。不需要 API 金鑰或帳號。資料存於本機 JSON 檔案,可用 JOB_SEARCH_MCP_DATA 覆寫路徑。選用的 LinkedIn Premium 模式使用 LINKEDIN_LI_AT 與 LINKEDIN_JSESSIONID Cookie。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Job Search MCP,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
job-search-mcp
A personal job-search assistant for Claude Desktop. You ask Claude to find jobs; it searches the real job boards, scores each one 0–100 for how well it fits you, and shows them on a ranked board you can triage with one click. Everything runs locally — no API keys, no accounts required.
It's an MCP App: a small server Claude Desktop talks to, plus an inline board that renders right in the chat.
Scope: it's tuned for US software-engineering roles (the built-in sources and role filters target US tech employers). Other fields or regions will return sparse results.
Works in: built and tested for Claude Desktop. It should also work in other MCP clients that both run a local (stdio) server and render MCP App UIs, such as VS Code (Copilot), Cursor, or Goose (untested). Remote-only clients (ChatGPT, Claude on web/mobile) can't launch a local server, so they won't work.
What it does
- Searches real job boards — LinkedIn plus 8 ATS/job sources (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Hacker News, RemoteOK, Remotive), using your target roles and location.
- Scores each job for you — Claude reads the full description and gives it a 0–100 fit score with a one-line reason, weighing your skills, years of experience, seniority fit, and the role.
- Lets you triage fast — Apply / Skip on each card, or in bulk ("dismiss everything under 60").
- Remembers — keeps a running shortlist, a tracker of what you've applied to, and won't show you the same job twice (for 6 months).
Setup
1. Tell Claude Desktop about it. Open your config file:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add this under "mcpServers" — npx fetches the published package
for you, no cloning or building required:
2. Fully quit and reopen Claude Desktop (on Windows, quit it from the system tray — closing the window isn't enough). That's it.
Running from source instead
Then point the config at this folder's dist/main.js instead:
How to use it
Just talk to Claude. For example:
- "Save my profile" — paste your resume first; Claude pulls out your skills, roles, years, and location so searches and scoring are tailored to you.
- "Find backend engineer jobs in California, senior level, posted this week."
- "Find low-applicant jobs" — adds LinkedIn's early-applicant filter.
- "Dismiss everything under 60."
- "Show what I've applied to."
- "Re-score the board."
A typical first run: save your profile → "find jobs" → Claude scores them and shows the ranked board → you Apply/Skip.
The board
The board is a running shortlist. A job stays on it until you Apply (moves to your tracker) or Skip (hidden for good). New searches automatically skip jobs already on the board, in your tracker, dismissed, or shown in the last 6 months — so you never see the same listing twice in a row.
Click Applied or Skip on a card, or ask Claude to do it. Triaged in the widget, it sticks.
Tools (for reference)
You rarely call these by name — Claude picks the right one — but here's what's under the hood:
Where your data lives
One JSON file on your machine — no cloud, nothing sent anywhere except the job boards you search:
- Installed:
~/.job-search-mcp/jobs.json - Running from source:
./data/jobs.json - Override with the
JOB_SEARCH_MCP_DATAenvironment variable.
Optional: LinkedIn Premium mode
By default LinkedIn uses its public guest endpoints: no login and no account-login risk, and you
already get full job descriptions. Note that automated access still runs from your own IP and is against
LinkedIn's User Agreement even in guest mode, so use it at your discretion. If you want richer/Premium
data, you can use your logged-in account by adding an env block to the server config:
Get both cookies from a logged-in linkedin.com tab → DevTools → Application → Cookies.
⚠️ Heads up: this is against LinkedIn's Terms of Service and can get your account flagged or restricted. The cookies also expire about monthly and LinkedIn's internal endpoints change without notice. If anything fails it falls back to guest mode automatically. Leave the
envblock out to stay fully safe (guest-only).
How scoring works
Claude (the host model) does the scoring directly — it reads each description and judges fit, which is
well-calibrated. A deterministic formula (computeMatchScore in scoring.ts) is kept as a fallback for
anyone running a weaker local model that tends to over-rank everything; it's not active by default.
Development
The server is stdio-only (main.ts → server.ts); the UI is a React app bundled to a single inlined
HTML file (src/mcp-app.tsx → dist/mcp-app.html) that the server serves as a ui:// resource.
Working on the UI, use harness/. It is a local stand-in for Claude Desktop that renders
the widget against a synthetic job store and a real ui/* bridge. Opening dist/mcp-app.html in a
browser tab just gets you "Connecting…", and the things most likely to break (link opening, theming,
the post-mount refresh) are all host-mediated, so they only show up with a host on the other end.
If a job source goes dark, npm run canary tells you which one. Company slugs rot often, so the fix
usually belongs in the remote slug registry that updateCompanyDirectoriesFromRegistry() re-reads at
runtime, rather than in a new release.
來源:README.md,提交 c120869
工具
0版本歷史
1- v0.1.3最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分