Taiwan Jobs 台灣求職

io.github.HsuanC0921由 GitHub 帳號 HsuanC0921 發布v1.2.1更新於 Oct 26, 2026

Read-only Taiwan job search: 104, Yourator, and Greenhouse, Lever and Workday career sites.

概覽

AI 產生的概覽

唯讀的 MCP 伺服器,讓助理搜尋 104、Yourator 以及外商 Greenhouse、Lever、Workday 招募頁面上的台灣職缺。

可以做什麼
  • 跨 104、Yourator、Greenhouse/Lever 與 Workday 來源搜尋職缺並合併排序,可依關鍵字、地區、職類、薪資下限、經驗、學歷、工作類型、遠端與刊登時間篩選
  • 讀取完整職缺內容:描述、要求、薪資、工時、休假、福利及 HR 最近處理履歷的時間;104 上還可看應徵人數與背景分布、相似職缺
  • 查看公司簡介與目前職缺,可依關鍵字篩選
  • 對 104 搜尋結果的多頁資料統計薪資(中位數、四分位、最低、最高)
  • 檢查各來源是否可用,並依名稱查詢 104 地區或職類代碼
適用情境
適合讓助理尋找、比較與評估台灣的職缺,包括外商只在自己招募頁面刊登的職位,並在投遞前了解競爭情況與薪資區間。
執行需求
透過 uvx 以 stdio 在本機執行(需要 uv,首次執行會下載相依套件)。不需帳號或 API 金鑰。需要能連線各求職網站的網路。選用環境變數可設定傳輸方式、主機與連接埠、快取時間、招募網站清單與輸出格式。
安裝前請注意
非官方專案,與其讀取的網站沒有關聯;它呼叫這些網站頁面所用的公開端點,應維持低請求頻率並遵守各站條款。唯讀:不會登入、投遞或儲存任何內容。HTTP 傳輸沒有身分驗證,應僅限本機或私有網路。應徵人數是由比例推算的下限,薪資統計只取樣最相關的職缺。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Taiwan Jobs 台灣求職,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

tw-jobs-mcp

English · 繁體中文

[test] [PyPI] [License: MIT] [Python 3.11+]

Search Taiwan job postings from any AI assistant. tw-jobs-mcp is a read-only MCP server that covers 104 人力銀行, Yourator, and the Taiwan openings on foreign companies' own career sites (Greenhouse, Lever, and 38 employers on Workday). Ask in plain Chinese or English; the assistant turns the request into precise filters.

No account and no API key are needed.

bash
claude mcp add tw-jobs -s user -- uvx tw-jobs-mcp

Unofficial. Not affiliated with or endorsed by 104 or any other site it reads. It calls the same public endpoints the sites' own pages use. Keep the request rate low and follow each site's terms. No job data ships with this project.

What you can ask

Find .NET backend jobs in Taipei paying at least 50,000 a month, and tell me what the market pays.

I have two years of experience. Show remote backend postings in New Taipei, read the top three, and compare the companies.

Is this posting worth applying to? How many people applied, and what are their backgrounds?

Which foreign chip companies are hiring hardware engineers in Hsinchu?

Does this company have any data roles, even ones whose title does not say so?

Behind the scenes the assistant chains the tools. The output below is illustrative; companies and ids are made up.

text
search_jobs(keyword="後端工程師", keyword_en="backend engineer", area=["台北市"], salary_min=50000)共 812 筆,第 1/41 頁id|company_id|職稱|公司|薪資|地點|學歷|技能|刊登a1b2c|x9y8z7|後端工程師 Backend Engineer|甲科技股份有限公司|月55000~80000|台北市信義區|大學~碩士|C#/.NET/MS SQL|10-18d3e4f|w6v5u4|資深後端工程師|乙數位股份有限公司|月70000~100000|台北市內湖區|大學|Go/PostgreSQL/Docker|10-17…
get_job("a1b2c", applicants=true)後端工程師 Backend Engineer|甲科技股份有限公司|電腦軟體服務業 50人…HR:2 天內處理過履歷應徵分析(近兩週):至少 12 人(由比例推算)學歷:大學 66.7%、碩士 33.3%年資:1~3年 41.7%、3~5年 33.3%、無工作經驗 25%技能:C# 58.3%、MS SQL 41.7%、Docker 25%

Why this server

  • Reaches roles 104 does not have. Foreign companies often post Taiwan openings only on their own career sites. One search with source="all" covers 104, Yourator, Greenhouse and Lever boards (Appier, Stripe, MongoDB, Pinkoi and more), and Workday sites of chip, hardware, pharma and finance employers (NVIDIA, Micron, Applied Materials, KLA, Cisco, Intel, NXP, GSK and more). Results from every source are merged and ranked together.
  • Finds the posting you half remember. Results are reordered by how many of your words the title and company cover. On 40 test searches built from real postings, the intended one ranked first 35 times, against 18 with 104's own order.
  • Shows the competition. For a 104 posting, get_job(applicants=true) reports how many people applied in the last two weeks and how they break down by education, experience, age, major, language, skills and certificates. Every posting shows how recently the employer handled résumés, a fair hint of whether anyone reads applications.
  • Filters that really filter. Keyword, area, job category, salary floor (monthly, yearly, daily or hourly), years of experience, education, job type, remote, and posted in the last 7 days. Every filter was checked against the live site, and a source that cannot apply one says so under the results.
  • Made for capable models. Every allowed value is in the schema. The server instructions state principles, not long case lists. The server handles only what the model cannot see: it widens an ambiguous place name, turns an unmatched category into a keyword, and loosens filters one at a time when nothing matches. Each of these assumptions is listed under the results.
  • Light on context. Replies are compact tables, not JSON: 20 postings take about 2,000 characters, under a fifth of the same data as JSON. All six tool definitions together are under 3,000 characters. Long texts are clipped unless you ask for full.
  • Read-only and polite. It never logs in, applies or saves anything. It paces requests to each site (one per second on 104), caches responses for five minutes, and drops the two paid postings 104 pins to every page.

Install

Requires uv. These commands run the published package from PyPI. It is also listed in the official MCP Registry as io.github.HsuanC0921/tw-jobs-mcp.

Claude Code

bash
claude mcp add tw-jobs -s user -- uvx tw-jobs-mcp

OpenAI Codex CLI

bash
codex mcp add tw-jobs -- uvx tw-jobs-mcp

or in ~/.codex/config.toml:

toml
[mcp_servers.tw-jobs]command = "uvx"args = ["tw-jobs-mcp"]startup_timeout_sec = 60   # the first run downloads dependencies

Claude Desktop: download tw-jobs-mcp-<version>.mcpb from Releases and open it, or use the JSON below.

Gemini CLI, Cursor, Windsurf, Cline and other mcpServers clients: add to ~/.gemini/settings.json, ~/.cursor/mcp.json, Windsurf's mcp_config.json, or the client's equivalent:

json
{  "mcpServers": {    "tw-jobs": { "command": "uvx", "args": ["tw-jobs-mcp"] }  }}

VS Code (GitHub Copilot): .vscode/mcp.json uses servers and needs a type:

json
{  "servers": {    "tw-jobs": { "type": "stdio", "command": "uvx", "args": ["tw-jobs-mcp"] }  }}

Remote (HTTP) and Docker, for clients that connect by URL or a server shared by a team:

bash
uvx tw-jobs-mcp --transport streamable-http --port 8000   # http://127.0.0.1:8000/mcpdocker build -t tw-jobs-mcp . && docker run --rm -p 8000:8000 tw-jobs-mcp

The HTTP server has no authentication. Keep it on localhost or a private network, or put an authenticating reverse proxy in front.

Unreleased code: uvx --from git+https://github.com/HsuanC0921/tw-jobs-mcp tw-jobs-mcp.

Agent skill

The server already tells a model how to use it. skills/tw-jobs gives agents that load skills more guidance: turning a request into arguments, picking a source, reading the notes, and reporting honestly. It follows the open Agent Skills format.

  • Claude Code: /plugin marketplace add HsuanC0921/tw-jobs-mcp, then /plugin install tw-jobs@tw-jobs-mcp (bundles the server and the skill). Or copy skills/tw-jobs to ~/.claude/skills/.
  • Codex and other skill-aware agents: copy skills/tw-jobs to ~/.agents/skills/.

Tools

ToolWhat it does
search_jobsSearch postings. Returns a table: id, company_id, title, company, pay, location, education, skills, posted date.
get_jobThe full posting: description, requirements, pay, hours, leave, welfare, and how recently HR handled résumés. 104 only: applicants=true adds the applicant count and background breakdown, similar=true adds similar postings.
get_companyCompany profile. with_openings=true adds current openings; keyword lists only matching openings, and on 104 it also matches the job description.
salary_overviewPay statistics (median, quartiles, min, max) over 1 to 5 pages of a 104 search, grouped by pay unit.
sourcesLive check of which sources are reachable and which are blocked.
lookup_codeFind a 104 area or category code by name, or browse the tree.

search_jobs arguments, all optional:

ArgumentMeaning
keyword, keyword_en1 to 3 short terms. Chinese in keyword for 104, English in keyword_en for the foreign sites, each a translation of the other. The assistant fills both, so a Chinese request also finds foreign postings.
source104 (default), yourator, boards, workday, or all
area, jobcatChinese names, e.g. ["台北市", "新北市"], ["軟體工程師"]
salary_min, salary_unitSalary floor and its unit: 月薪 (default), 年薪, 日薪, 時薪
include_negotiableWith salary_min, also list postings that do not state a salary (104 leaves them out by default)
my_yearsThe user's years of experience; lists postings asking for no more, 經驗不拘 included
education高中職, 專科, 大學, 碩士, 博士
job_type全職, 兼職, 高階, 派遣
remote_only, new_onlyRemote only; posted within 7 days
sortrelevance (default), newest, salary
page, per_pagePaging, up to 30 per page

Sources

sourceCoversFilters it applies
104Taiwan's largest job boardall
youratorStart-ups and foreign-company officeskeyword, area, sort=newest
boardsTaiwan roles on companies' Greenhouse and Lever boardskeyword, area, remote_only
workdayTaiwan roles at 38 foreign employers on Workdaykeyword, area
allAll of the above, merged and rankedper source; a failing source is noted, not fatal

Ids tell where a posting lives: a bare id is 104, y: Yourator, g: / l: Greenhouse / Lever, w: Workday. Pass them back as listed.

Add or remove career sites with TW_JOBS_BOARDS (g:gitlab,l:kraken,-g:stripe) and TW_JOBS_WORKDAY (acme.wd1/External,-micron); a leading - removes one. Each Workday search reads the first 60 rows per company, so narrow deep searches with a keyword.

Left out on purpose: 1111 (the same kind of board as 104, smaller), Cake (a Cloudflare challenge on every request) and LinkedIn (its terms forbid automated access).

Configuration

VariableDefaultMeaning
TW_JOBS_TRANSPORTstdiostdio or streamable-http (same as --transport)
TW_JOBS_HOST, TW_JOBS_PORT127.0.0.1, 8000Bind address for HTTP
TW_JOBS_CACHE_TTL300Seconds to keep responses; 0 turns the cache off
TW_JOBS_BOARDS, TW_JOBS_WORKDAYbuilt-in listsCareer sites to add or remove (see Sources)
TW_JOBS_FORMATtextjson returns every field as compact JSON

How it works and its limits

104 sits behind Cloudflare, which answers ordinary HTTP clients with a 403. curl_cffi presents a real Chrome TLS fingerprint and gets through. Area and category names are resolved locally against 104's public code tables.

  • Read-only. No login, applying or bookmarking. Giving an AI your job-board password is not worth the risk.
  • No company-name search. 104 blocks that endpoint to scripts. Reach a company through the company_id on a posting, or put its name in keyword.
  • The applicant count is inferred. 104 publishes only percentages, so the count is the smallest number that fits them, a floor rather than an exact figure.
  • salary_overview samples the most relevant postings rather than the whole site, and many postings do not publish pay.

Development

bash
uv syncuv run pytest                  # offline unit and protocol testsuv run pytest -m live          # against the real sitesuv run python scripts/update_codes.py   # refresh 104's area and category tables

License

MIT. Provided as is, without warranty.

來源:README.md,提交 ea17a35

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v1.2.1最新Oct 20, 2026
  2. v1.1.2Oct 16, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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