Skip to main content
Glama
README.md
# tw-mcp|台灣在地工具箱(MCP server)

讓 **Claude Code、Claude Desktop、Cursor** 寫台灣的 App 或處理台灣的資料時,直接呼叫「台灣才有的計算」:

| 工具 | 做什麼 | 例子 |
|---|---|---|
| `labor_overtime` 勞基法加班費 | 平日延長工時、休息日、國定假日、例假日加班費,依條文分數(4/3、5/3)精確算法定最低,附業界 1.34 算法對照、公式、法條、警告 | 月薪 36,000、平日加班 2 小時 → 法定最低 **400 元**(業界 1.34 算法 402 元) |
| `tw_workdays` 台灣工作日 | 依人事行政總處辦公日曆表判斷上班日、國定假日、補假、補行上班;算區間工作日、推算第 N 個工作日 | 2026/2/13(週五)+1 個工作日 → **2026/2/23**(跳過春節) |
| `pii_mask` 個資遮罩 | 蓋掉台灣手機/市話(含 +886、全形、中文數字)、Email、身分證字號、LINE/IG/FB 帳號 | `LINE ID: wang123` → `LINE[已隱藏]` |
| `lvr_search` 實價登錄查詢 | 讀內政部實價登錄開放資料 CSV/ZIP,篩選並**預設排除親友、特殊關係、法拍等交易**,回傳單價中位數、四分位數、各區統計與明細 | 「臺中市西屯區 屋齡 10 年內大樓,近一年單價中位數?」 |
| `pdf_pages` PDF 轉圖 | PDF 指定頁轉 JPG/PNG 存在本機(謄本、合約貼 LINE 用),不上傳、不覆蓋既有檔 | `pages: "1-3,5"`、`dpi: 150` |

- 全部在你的電腦上計算,**不需要任何金鑰、不連外部 API**。
- 另有 `about` 工具:介紹各工具、資料來源、授權與作者聯絡方式。
- Python 3.10 以上;用 [uv](https://docs.astral.sh/uv/) 一行安裝。

## 安裝

先裝 uv(已經有就跳過):Windows `powershell -c "irm https://astral.sh/uv/install.ps1 | iex"`;macOS/Linux `curl -LsSf https://astral.sh/uv/install.sh | sh`。

### Claude Code

```bash
claude mcp add tw -- uvx --from git+https://github.com/Larryveryhandsome/tw-mcp tw-mcp
```

下載到本機的話(例如放在 `~/tw-mcp`):

```bash
claude mcp add tw -- uvx --from ~/tw-mcp tw-mcp
```

裝好後在 Claude Code 輸入 `/mcp` 應該看到 `tw` 已連線、5 個工具+`about`。

### Claude Desktop

設定 → 開發者 → 編輯設定(`claude_desktop_config.json`),加入:

```json
{
  "mcpServers": {
    "tw": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/Larryveryhandsome/tw-mcp", "tw-mcp"]
    }
  }
}
```

存檔後重開 Claude Desktop。

### Cursor

`~/.cursor/mcp.json`(或專案裡的 `.cursor/mcp.json`)內容同上(`mcpServers` → `tw`)。

> 尚未上架 PyPI,所以用 `--from git+https://…` 或本機路徑安裝。

## 怎麼用(直接用中文問)

**勞基法加班費**

> 月薪 36,000,平日加班 2 小時,加班費多少?

```json
{"amount": 400, "legal_minimum": 400,
 "formula": "每小時工資額=月薪 36,000 ÷ 240 = 150.00 元;150.00×2h×4/3 = 400 元",
 "common_practice": {"amount": 402, "rates": "1.34/1.67/2.67(業界常用的進位倍率,高於法定最低)"},
 "law": "勞動基準法第 24 條第 1 項(平日延長工時:2 小時以內加給 1/3 以上……)、第 32 條(每日合計不得超過 12 小時)"}
```

- `day_type`:`weekday` 平日(hours=超過 8 小時的部分)、`rest_day` 休息日、`holiday` 國定假日、`regular_leave` 例假日(後三種 hours=當天出勤總時數)。
- 給 `date` 的話,2026 年會自動辨識國定假日(例如休息日剛好是國慶日,會改用國定假日計算並提醒),也會檢查是否低於當年度基本工資。
- `amount` 是**法定最低**:勞基法寫「加給三分之一以上」「三分之二以上」,所以用分數 4/3、5/3、8/3 精確計算(Fraction),最後才四捨五入到元;`common_practice` 另附業界常用的 1.34/1.67/2.67 進位算法,金額會略高。
- 月薪制每小時工資額=月薪 ÷ 240。

**台灣工作日**

> 2026 年 2 月有幾個工作天? / 今天起 10 個工作天後是幾號? / 2026-10-09 要上班嗎?

- 只給 `start`:查那一天(上班日/週末/國定假日/補假/補行上班)。
- `start`+`end`:算區間(含頭尾)有幾個工作日,列出期間的國定假日。
- `start`+`add`:推算第 N 個工作日(負數往回推)。
- 內建 **2025~2027 年**;超出範圍會明確報錯,不會自己猜。

**個資遮罩**

> 把這段客戶留言的電話、Email、LINE 蓋掉再貼給我:「請找王先生 0900-000-678,LINE ID: wang123」

```json
{"masked": "請找王先生 [電話已隱藏],LINE[已隱藏]", "found": {"phone": 1, "social": 1}, "total": 2}
```

另可傳 `contacts: ["0900-000-101"]` 取得列表用的部分遮罩 `0900-***-101`。

**實價登錄查詢**

1. 到 [內政部不動產交易實價查詢服務網 → 開放資料下載](https://plvr.land.moi.gov.tw/DownloadOpenData) 下載「不動產買賣」CSV(例如臺中市是 `b_lvr_land_a.csv`),或整包 ZIP。
2. 問:

> 用 C:\data\b_lvr_land_a.csv 查西屯區 2025 年以後的大樓,單價中位數多少?列 10 筆最近的。

- 預設排除備註含「親友、員工、特殊關係、瑕疵、凶宅、債權、急買急賣、含裝潢、政府機關、法拍」的交易(`excluded_special` 會告訴你排除幾筆),要看全部設 `include_special: true`。
- 預設只算有建物的交易(排除純土地、純車位)。單價為萬元/坪(開放資料已扣車位)。
- 日期可用西元 `2025-01-01` 或民國 `1140101`。
- **沒給檔案時用內建的虛構示範資料**(回傳 `demo_data: true`,地址都是「示範○區」),只能拿來試用。

**PDF 轉圖**

> 把 D:\文件\謄本.pdf 第 1~2 頁轉成 JPG

圖檔預設存在 PDF 旁邊的 `謄本_pages\` 資料夾(`謄本_p001.jpg`…),同名不覆蓋(自動加 `(2)`);有密碼的 PDF 傳 `password`。一次最多 200 頁、DPI 36~600。

## 資料來源與每年更新

| 資料 | 來源 | 授權 | 更新方式 |
|---|---|---|---|
| 辦公日曆(`tw_workdays`) | 行政院人事行政總處「中華民國政府行政機關辦公日曆表」,[data.gov.tw dataset 14718](https://data.gov.tw/dataset/14718) | 政府資料開放授權條款-第 1 版 | 每年約 6 月公告次年度;下載 CSV 後 `python tools/build_calendar.py 新年度.csv` |
| 國定假日、基本工資(`labor_overtime`) | 勞動部公告、紀念日及節日實施條例 | — | 編輯 `src/tw_mcp/data/labor_calendar.json` 加一個年度 |
| 實價登錄(`lvr_search`) | 內政部不動產交易實價查詢服務網開放資料(使用者自行下載) | 政府資料開放授權條款-第 1 版 | 每月 1、11、21 日發布,自行下載新檔即可 |

工具邏輯移植自同作者的開源專案:[tw-shop-staff](https://github.com/Larryveryhandsome/tw-shop-staff)(算薪)、[tw-duty-roster](https://github.com/Larryveryhandsome/tw-duty-roster)(日期工具)、[tw-local-needs](https://github.com/Larryveryhandsome/tw-local-needs)(個資遮罩)、[tw-lvr-map](https://github.com/Larryveryhandsome/tw-lvr-map)(實價登錄)、[tw-pdf2jpg](https://github.com/Larryveryhandsome/tw-pdf2jpg)(PDF 轉圖)。

## 開發與測試

```bash
git clone https://github.com/Larryveryhandsome/tw-mcp && cd tw-mcp
uv run --with pytest pytest -q
```

測試含:示範值 400 元(法定最低)與 402 元(1.34 對照)、分數精確計算、休息日/國定假日倍率、國定假日自動辨識、2026 春節工作日、跨年推算、個資遮罩的全形/+886/中文數字/at-dot 變形與不誤傷一般數字、實價登錄 Big5/ZIP/重複編號/特殊交易排除、PDF 頁碼範圍與不覆蓋,以及 MCP 層實際列出並呼叫 5 個工具+about,確認工具結果不附廣告。

## 免責聲明

- 加班費、工作日、實價登錄統計**原則上僅供參考**,不構成法律、稅務、估價或投資意見;實際以勞動部函釋、勞資約定、主管機關認定、公司公告為準。
- 民間企業依勞基法放國定假日,補假、調移日期可能與公務機關辦公日曆不同。
- 個資遮罩擋的是常見格式,無法保證百分之百;對外公開前仍建議人工再看一遍。
- 實價登錄為政府公開資料的整理;內建示範資料完全虛構。

## 已知問題

- 尚未上架 PyPI(用 git 或本機路徑安裝)。
- 國定假日/基本工資只內建 2026 年;辦公日曆內建 2025~2027 年。
- `lvr_search` 不會自動下載開放資料(要先自己下載 CSV/ZIP);整包全國 ZIP 很大,建議指定 `county`。
- 不含土地增值稅試算。

## 授權

程式碼:[Apache License 2.0](LICENSE),轉散布請保留 [NOTICE](NOTICE)。辦公日曆與實價登錄資料依政府資料開放授權條款利用。

完整的發布前檢查(八道閘門)見 [RELEASE_CHECK.md](RELEASE_CHECK.md)。

## 🛠️ 需要客製化?

這個工具是開源的,可以免費使用。如果你想要:
- 加上你們公司自己的計算(獎金、抽成、排班、報價……)包成 AI 能直接呼叫的工具
- 串接你現在在用的系統(LINE、Google 表單、POS、會計軟體……)
- 幫你安裝、教學,或長期維護

歡迎加 LINE 跟我們聊。我們會依需求的範圍與複雜度報價,原則上以實際報價單為準。

<a href="https://line.me/ti/p/xzHT2IywOM"><img src="https://scdn.line-apps.com/n/line_add_friends/btn/zh-Hant.png" alt="加入好友" height="36"></a>

- 💬 LINE:[林其衞](https://line.me/ti/p/xzHT2IywOM)(請註明「tw-mcp 客製化」)
- 📞 電話:0928-880-392
- 🏢 留白事務所:網頁設計、AI 自動化、遠端助理
- 👤 作者:[留白事務所](https://github.com/Larryveryhandsome)

TDQS

A4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a completely different resource and action: property transaction lookup, PII redaction, overtime calculation, workday calendar, PDF page rendering, and self-description. An agent can pick the right tool from the name alone, with no overlapping boundaries.

Naming Consistency3/5

All names are snake_case, which is good, but the internal convention is mixed: lvr_search is an abbreviation plus verb, pii_mask is noun+verb, while labor_overtime and pdf_pages are noun+noun and 'about' is a bare word. There is no verb_noun pattern across the set, though each name is still readable.

Tool Count4/5

Six tools is a lean, well-scoped set where each entry provides a self-contained utility. The one caveat is that the set is a grab-bag of unrelated Taiwan-oriented helpers rather than a coherent domain, which makes the scope slightly hard to characterize.

Completeness3/5

Each tool is a single-shot function with no lifecycle to complete, and 'about' aids discovery, but there are noticeable gaps for the apparent 'Taiwan local utility' theme: only overtime pay (no leave, severance, or pension calculations), only PDF-to-image (no text extraction), and no general TW ID or address validation. Agents can work around these, but the surface feels selective rather than complete.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues