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.

概覽

AI 產生的概覽

為 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。
安裝前請注意
即使採訪客模式,自動存取 LinkedIn 也違反其使用者協議;使用選用的 LINKEDIN_LI_AT 與 LINKEDIN_JSESSIONID Cookie 違反其服務條款,可能導致帳號被標記或限制,且這些 Cookie 約每月過期。職缺搜尋會從你自己的 IP 送往第三方求職網站。伺服器會寫入本機資料檔並改變看板與追蹤狀態。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Job Search MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

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.

[The ranked job board inside Claude Desktop — each job scored 0–100 for fit, with Applied/Skip buttons]


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:

json
{  "mcpServers": {    "job-search": {      "command": "npx",      "args": ["-y", "@servation/job-search-mcp"]    }  }}

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
bash
npm installnpm run build

Then point the config at this folder's dist/main.js instead:

json
{  "mcpServers": {    "job-search": {      "command": "node",      "args": ["D:\\job-search-mcp\\dist\\main.js"]    }  }}

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:

ToolWhat it does
find_jobsSearch the boards for your roles/location (with optional filters: seniority, type, recency, remote, salary, applicants, source).
evaluate_jobsClaude scores the found jobs 0–100 for fit (runs automatically after a search).
show_boardDisplay the ranked board (or your saved tracker).
set_statusApply / Skip / save a single job (also the card buttons).
bulk_statusTriage many at once by score or source, e.g. dismiss everything under 60.
whats_promisingList the current board as text (all scored jobs + anything still unscored).
review_savedYour tracker — jobs you've saved or applied to.
rescore_boardRe-score every job on the board from scratch.
clear_jobsDeclutter: clear unscored leftovers or the whole board (never touches applied/dismissed).
save_profileSave your resume profile (drives search + scoring).

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_DATA environment 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:

json
"job-search": {  "command": "npx",  "args": ["-y", "@servation/job-search-mcp"],  "env": {    "LINKEDIN_LI_AT": "<your li_at cookie>",    "LINKEDIN_JSESSIONID": "ajax:1234567890123456789"  }}

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 env block 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

bash
npm run typecheck    # type-check UI + server + harnessnpm run build        # build the UI bundle (vite single-file) + compile the server (tsc)npm run serve:stdio  # run the server from source (tsx) for local testingnpm run harness      # work on the review UI without Claude Desktop (see harness/)npm run canary       # check every job source is still returning postings

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
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分