tainan-mental
by scatjay
README.md
# 臺南心理衛生資源 MCP
把散在台南市衛生局十幾層選單裡的心理資源,變成**一句話就查得到**的東西。
```
你說:我們機構在哪幾份官方名單上?
它做:查四個來源 → 寬欣心理治療所 + 芯寬欣,兩個據點都在,
而且你們在「免費諮商合作名單」裡,每週一至五 8:00-21:00
```
---
## 這支存在的理由
這些資料 **手動都查得到**。問題是那些網址長這樣:
```
https://health.tainan.gov.tw/page.asp?mainid=0A3943E7-033E-4686-8514-7BD39368D32D
```
**沒有語意,只有一串 GUID。** 你不可能用猜的,只能從首頁一層一層點。
所以這支的價值不在「取得資料」,在 **把跨來源的交叉比對自動化**:
- 三份官方名單互相漏收了誰?
- 一個行政區到底歸哪一處心衛中心管?
- 免費諮商的時段集中在星期幾、哪幾天等於沒有?
這些手動要花半天,而且下個月資料一動就得重做。
---
## 五分鐘裝好
```bash
git clone https://github.com/scatjay/kxmind-tainan-mental-mcp.git
cd kxmind-tainan-mental-mcp
pip install -r requirements.txt
```
`claude_desktop_config.json` 加:
```json
{
"mcpServers": {
"tainan-mental": {
"command": "python",
"args": ["C:/你的路徑/kxmind-tainan-mental-mcp/server.py"]
}
}
}
```
重開 Claude,然後說「**跑一下 ping**」。看到資料筆數就代表通了。
**沒有帳號要註冊,沒有金鑰要申請。** repo 裡已經附好資料快照。
---
## 九支工具
### 讀取層
| 工具 | 做什麼 |
|---|---|
| `ping` | 確認接上了,順便看快照多新 |
| `find_myself` | **查一家機構出現在哪幾份名單上** |
| `list_clinics` | 列治療所/諮商所/精神科診所,可依區、依類型 |
| `find_free_counseling` | 找免費諮商,可指定行政區與星期 |
| `which_center` | 這個行政區的社區心衛中心是哪一處 |
| `list_datasets` | 接了哪些來源、何時抓的 |
### 分析層 —— 這一層才是重點
| 工具 | 手動要多久 |
|---|---|
| `diff_clinic_sources` | **40–60 分鐘**(3 個分頁、80 筆抄進 Excel、正規化名稱、兩次 VLOOKUP) |
| `free_slots_by_weekday` | **50 分鐘以上**(58 筆逐筆讀時段文字、手動歸類、再按區 group) |
| `count_by_layer` | 這件事一般不會有人去做 —— 因為要開 5 個來源、發現數字不一樣、然後放棄 |
---
## 三個現場跑得動的實例
### 1. `find_myself("寬欣")` — 查自己
```
「寬欣」出現在 6 個地方:
【地圖/心理治療、諮商所】寬欣心理治療所 北區育德一街227號1、2樓 (06)2510966
【地圖/心理治療、諮商所】芯寬欣心理治療所 北區北安路一段273號 (06)2510560
【免費諮商合作名單】 寬欣心理治療所 週一 每週一至五 8:00-21:00
【衛生局名冊】…
```
### 2. `diff_clinic_sources()` — 三份官方名單互相漏收誰
```
衛生局名冊 32 家 / 資源地圖 26 家 / 兩邊都有 24 家
只在名冊、地圖沒有(8 家)
誼仁、欣空間、欣橋、星語、愛相會、好心情、山實、沐盼
只在地圖、名冊沒有(2 家)
心物語、李慧芳
```
**這不是單向漏收,是兩份官方文件互相不知道對方。**
### 3. `which_center("永康區")` — 沒人猜得對的那題
```
永康區 → 善化區社區心理衛生中心 (06)581-0105
```
不是永康自己。6 處中心的服務區域加起來 **剛好 37 區,不重不漏**,
所以任何行政區都查得到答案,demo 不會開天窗。
---
## 🔴 現場紀律:預設讀快照,不要全班同時打政府網站
`data/` 裡放的是 **2026-08-27 抓的快照**,附抓取時間戳。所有工具預設讀它。
理由:一場工作坊十幾個人、同一個 IP、同一時間。一起打政府網站有觸發速率限制的
風險,而且場地 WiFi 品質通常不明。
要更新資料:
```bash
python fetch_snapshot.py
```
或呼叫 `refresh_snapshot()` —— **但現場只由講師示範一次,其餘人讀快照。**
---
## 資料來源
全部是公開資料,**不需要申請任何權限**。每一筆都在 2026-08-27 經過
獨立的對抗性查核(100 筆通過、22 筆因網址失效或內容對不上被剔除)。
| 來源 | 內容 |
|---|---|
| [臺南市心理健康資源地圖](https://www.google.com/maps/d/kml?mid=1YhZw1eQCaI3gtDb_E8WBO1XP_-E&forcekml=1) | KML,141 個標點、4 圖層 |
| [心理諮商所、心理治療所名冊](https://health.tainan.gov.tw/page.asp?mainid=0A3943E7-033E-4686-8514-7BD39368D32D) | 治療所 12 + 諮商所 20 |
| [免付費諮商-公部門地點](https://health.tainan.gov.tw/page.asp?mainid=586CAFE0-5DA5-49E6-831F-1D54499B808C) | 40 個點 |
| [免付費諮商-需場地費地點](https://health.tainan.gov.tw/page.asp?mainid=499FD2AD-07B9-4A27-AA13-E0397489855A) | 22 家民間機構 |
| [社區心理衛生中心據點](https://health.tainan.gov.tw/page.asp?mainid=%7B6048F242-90E2-4CC2-9DAB-45D4CCB2ACAD%7D) | 6 處,涵蓋 37 區 |
| [免費諮商據點 CSV](https://data.tainan.gov.tw/File/ResourceCsvDownload/351ee754-b3ca-4efc-bdc0-5ecb4c0ec57b) / [各區代碼 CSV](https://data.tainan.gov.tw/File/ResourceCsvDownload/5b389f60-dee6-425a-8a40-f5cb2f949cf1) | 43 筆/37 區 |
---
## 資料品質:這些坑寫在程式碼裡
寫這支的時候踩到、而且都留在註解裡:
- **免費諮商那 58 筆,`<name>` 全部是同一個字串**「預約免費心理諮商」。
真正的地點在 ExtendedData 的「諮商地點」欄。直接讀 name 會得到 58 個一模一樣的點。
- **CSV 有雙重 BOM**(`EF BB BF EF BB BF`)。`utf-8-sig` 只剝一層,第一個欄名會殘留看不見的字元。
- **心衛中心的服務區域**:第一版我用「在中心名稱附近 900 字元裡 regex 撈所有 XX區」,
結果善化中心變成 26 區,還混進「服務區」「願景園區」「社區」這種假的。
查詢**碰巧**會對 —— 但碰巧對的工具不能拿去教人。改成照 `服務區域:` 那一行讀,
現在 6 處加起來剛好 37 區。
- **機構名要正規化才比得起來**:台南/臺南、有沒有「社團法人」前綴。
---
## ⚠️ 使用上的提醒
- 這裡的資料是**公開資訊的快照**,不是即時系統。轉介前建議先打電話確認。
- 「臺南有幾家精神醫療機構」沒有單一答案 —— `count_by_layer()` 會告訴你為什麼,
而且 **能收強制住院的「指定機構」只有 7 家,不是 41 家**。
- 本工具不處理任何個案資料。查詢的是機構,不是人。
## 授權
MIT。資料版權屬臺南市政府衛生局與臺南市政府資料開放平臺。
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues