Taiwan Health MCP Server¶
An MCP server for Taiwan medical and health data — a Node.js service built on the official TypeScript MCP SDK (@modelcontextprotocol/sdk), exposing 70 tools across 12 tool groups covering international terminologies, Taiwan-local datasets, clinical calculators, and FHIR R4 IG authoring / validation.
Current capabilities¶
- ICD-10 (the complete ICD-10-CM 2026-04-01 CMS edition with 7th characters, ICD-10-PCS; FHIR validation can also use WHO ICD-10): diagnosis and procedure code search, nearby codes, category browsing, complication inference, diagnosis / procedure conflict checks.
- LOINC: lab test search, reference range lookup, single and batch lab result interpretation.
- SNOMED CT: concept search, concept details, relationship (hierarchy / attribute) queries, SNOMED ↔ ICD-10 mapping.
- Drugs (Taiwan FDA / TFDA): drug search (name / ingredient / license number / ATC), pill identification, drug details, document asset download links.
- Health supplements (Taiwan FDA): search by keyword, license number, or disease mapping.
- Food nutrition (Taiwan FDA): nutrient lookup, ingredient lookup, find foods by nutrient, meal nutrition analysis.
- FHIR R4: Condition / Medication generation and validation.
- FHIR IG (multi-IG): profile / ValueSet lookup and expansion, terminology lookup and validation, reference resolution, Bundle assembly, skeleton-fill resource generation and validation, plus checking a Bundle against the source record for faithfulness (grounding) and gaps (completeness).
- FHIR servers: external FHIR server registration, status queries, and CRUD operations.
- Clinical calculators: validated clinical scores common in Taiwan practice (CHA₂DS₂-VASc, Wells, DAS28, BMI, eGFR, HAS-BLED, CURB-65, qSOFA, GCS, etc.) — pure functions, always registered.
Architecture at a glance¶
- Runtime: the backend is entirely Node.js / TypeScript (
node-server/); the admin front-end isweb-v2/(a static Vite + React + Mantine SPA served by theweb-v2container's nginx). The old Next.jsweb/is kept only in the compose profilelegacy-webfor rollback. - Front door: a single nginx entry point (default
:8080) routes/mcp,/openapi.json,/tools/*,/admin/api/*,/admin/ws,/fhir-client/*and/fhir-oauth/*toapp, and everything else (the/adminpages) toweb-v2. - Infrastructure: PostgreSQL 16 (pgvector), pgBouncer, Redis, MinIO, Prometheus, plus an optional embedding service (Ollama by default).
- Dynamic tool registration: of the 70 tools, the module-gated ones are enabled / disabled automatically according to each module's data-load status (row-count thresholds); FHIR servers, clinical calculators and
health_checkare always registered. The registered set is whateverGET /openapi.jsonor the console's MCP tools page shows. - Semantic / hybrid search: embedding vectors strengthen search, with a keyword-only fallback when embeddings are unavailable.
- Admin console and background worker: the Admin Console (on by default — the only way to import data) and
admin-workerhandle data imports, scheduling, model endpoints (provider accounts + profiles) and the MCP tool catalog / playground.