
Taiwan Health MCP Server
台灣醫療健康資料整合 MCP 伺服器 整合 ICD-10-CM/PCS、SNOMED CT、LOINC、台灣 FDA 藥品 / 健康補充品 / 食品營養、臨床指引,以及 FHIR R4 IG 授權與驗證工具
以官方 mcp SDK(mcp.server.fastmcp.FastMCP)建構,對外提供約 51 個工具,涵蓋 12 個工具群組。專為高吞吐量的生產級 SaaS 部署設計。
專案特色
-
台灣在地化資料:台灣 FDA 藥品(含仿單 / 外觀 / OCR 分析)、健康補充品、食品營養、臨床指引、TWCore IG。
-
國際術語支援:ICD-10-CM/PCS 2025、SNOMED CT International、LOINC 2.80、FHIR R4。
-
FHIR IG 授權工具:多 IG(package-scoped)剖面 / ValueSet 查詢、術語驗證、骨架填值(skeleton-fill)資源產生與驗證。
-
語意 / 混合搜尋:以 Ollama 嵌入模型(
qwen3-embedding)為基礎,無嵌入時自動退回關鍵字搜尋。 -
動態工具啟用:依各模組資料載入狀態自動註冊 / 移除可用 MCP 工具。
-
管理後台:可選的 Admin Console(上傳來源檔、執行 / 排程匯入、管理設定與外部 FHIR 伺服器、即時監控背景工作)。
-
生產部署設計:PostgreSQL 16(pgvector)、pgBouncer、Redis、MinIO、Prometheus、背景 worker。
快速開始
git clone https://github.com/audi0417/Taiwan-Health-MCP.git
cd Taiwan-Health-MCP
cp .env.example .env # 設定 POSTGRES_PASSWORD、ADMIN_* 等
docker compose up -d # postgres / pgbouncer / redis / minio / app / admin-worker
載入資料(透過管理後台)
資料匯入由 Admin Console 觸發、交由 admin-worker 背景執行(不再有獨立的 CLI data-loader 容器)。
在 .env 啟用管理後台:
ADMIN_ENABLED=true
ADMIN_USERNAME=admin
# python -c "import hashlib; print('sha256$' + hashlib.sha256(b'change-me').hexdigest())"
ADMIN_PASSWORD_HASH=sha256$...
ADMIN_SESSION_SECRET=change_this_admin_session_secret
重新啟動 app(docker compose up -d)後,於 http://<host>:8000/admin 登入。
在 Modules 頁籤依模組匯入資料:
-
需上傳來源檔(在 Sources / Modules 上傳後按匯入):ICD-10-CM/PCS、LOINC、SNOMED CT、FHIR IG(
package.tgz)。 -
由 API 自動抓取(直接按匯入或設定排程):藥品(TFDA,三階段:索引 → 爬取豐富 → OCR/LLM 分析)、健康補充品、食品營養。
-
內建種子資料(直接執行):臨床指引。
嵌入(語意搜尋)會在各模組匯入後自動回填,也可於模組頁面單獨重建。
匯入進度、步驟時間軸與即時日誌可在 Tasks 頁籤查看。詳見管理後台文件與背景工作與排程。
工具群組
群組 工具
ICD-10 search_medical_codes、infer_complications、get_nearby_codes、check_medical_conflict、browse_icd_category
藥品 / TFDA search_drug、identify_unknown_pill、get_drug_details、get_drug_asset_links
檢驗 / LOINC search_loinc、query_loinc、interpret_lab_result、batch_interpret_lab_results
臨床指引 search_clinical_guideline、query_guideline
SNOMED CT search_snomed_concept、query_snomed_concept、get_snomed_relationships、query_snomed_mapping
FHIR Condition query_fhir_condition、validate_fhir_condition
FHIR Medication query_fhir_medication、validate_fhir_medication
FHIR IG(授權 / 驗證) fhir_list_igs、fhir_get_ig、fhir_list_artifacts、fhir_search_artifacts、fhir_list_resource_profiles、fhir_rank_resource_profiles、fhir_get_profile、fhir_get_profile_elements、fhir_get_valueset、fhir_expand_valueset、fhir_lookup_code、fhir_validate_code、fhir_normalize_code、fhir_resolve_reference、fhir_build_bundle、fhir_validate_resource、fhir_validate_bundle、fhir_get_resource_skeleton、fhir_finalize_resource
健康補充品 search_health_supplements
食品營養 query_food_nutrition、query_food_ingredient、search_foods_by_nutrient、analyze_meal_nutrition
FHIR 伺服器 list_fhir_servers、get_fhir_server_status、crud_fhir_server
系統 health_check
模組相關工具會依資料載入狀態自動啟用 / 停用;FHIR 伺服器與系統工具則永遠註冊。
連接客戶端
伺服器同時提供兩種介面,皆在同一個 app 容器、同一個埠(預設 8000):
介面 端點 適用客戶端
MCP(streamable-http) http://<host>:8000/mcp 原生 MCP 客戶端(Claude Desktop、Open WebUI v0.6.31+ 的 MCP 連線等)
OpenAPI bridge GET http://<host>:8000/openapi.json、POST http://<host>:8000/tools/<工具名> 僅支援 OpenAPI 工具伺服器的客戶端(如 Open WebUI 的 External Tools / OpenAPI 類型)
-
MCP:客戶端填
http://<host>:8000/mcp。 -
OpenAPI:
/openapi.json依「目前已啟用的工具」動態產生 OpenAPI 3.1 規格;每個工具對應POST /tools/<工具名>,以 JSON body 當參數呼叫。客戶端只要填基底網址http://<host>:8000,會自動抓/openapi.json。
例:在 Open WebUI → Settings → Tools 以 OpenAPI 類型新增工具伺服器,URL 填 http://<host>:8000 即可列出全部工具。
注意:這兩個介面目前皆未強制驗證(與既有設計一致);對外開放時請在前面加反向代理或 token。
資料庫 Schema
audit | admin | icd | drug | health_supplements | food_nutrition | loinc | guideline | fhir(multi-IG)| snomed | rxnorm
完整定義見 db/schema.sql(PostgreSQL 容器首次啟動時自動套用),增量變更見 db/migrations/。
管理後台(選用)
預設停用。於 .env 設定 ADMIN_ENABLED=true 並提供 ADMIN_USERNAME / ADMIN_PASSWORD_HASH / ADMIN_SESSION_SECRET 後,可於 /admin 存取 Admin Console,用於上傳來源檔、執行與排程資料匯入、管理設定與外部 FHIR 伺服器,以及監控由 admin-worker 執行的背景工作。詳見 docs/admin/。
開發與測試
pip install -r requirements.txt
pip install pytest pytest-asyncio
python -m pytest tests/ -v
文件
完整文件請見 docs/ 與 MkDocs 設定(mkdocs.yml)。
致謝
-
台灣衛生福利部、TFDA
-
Regenstrief Institute(LOINC)
-
SNOMED International
-
National Library of Medicine(RxNorm / UMLS)
-
HL7 International(FHIR)
-
WHO
pip install -r requirements.txt
pip install pytest pytest-asyncio
python -m pytest tests/ -vBefore it works, you'll need: ADMIN_SESSION_SECRET
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.