Skip to main content
Glama
hkopenai

Hong Kong Health Data MCP Server

by hkopenai

Hong Kong Health Data MCP Server

GitHub Repository License: MIT

This is an MCP server that provides access to health related data in Hong Kong through a FastMCP interface.

Features

  1. Get current Accident and Emergency Department waiting times by hospital in Hong Kong

  2. Get current waiting times for new case bookings for specialist outpatient services by specialty and cluster in Hong Kong

  3. Get average number of general outpatient clinic quotas for the preceding 4 weeks across 18 districts in Hong Kong

Related MCP server: MCP Medical Appointments Demo

Examples

  • As a news reporter, you are interested in knowing the current waiting times at hospitals in Hong Kong. Please remind the audience not to abuse the service. Report in Chinese.

  • As a healthcare professional, you need to check the current waiting times for specialist outpatient services in different clusters to advise patients on the best options for timely care.

Data Source

  • Hong Kong Hospital Authority

Setup

  1. Clone this repository

  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Run the server:

    python server.py

Running Options

  • Default stdio mode: python server.py

  • SSE mode (port 8000): python server.py --sse

Cline Integration

To connect this MCP server to Cline using stdio:

  1. Add this configuration to your Cline MCP settings (cline_mcp_settings.json):

{
  "hk-health": {
    "disabled": false,
    "timeout": 3,
    "type": "stdio",
    "command": "uvx",
    "args": [
      "hkopenai.hk-health-mcp-server"
    ]
  }
}

Testing

Tests are available in the tests/ directory. Run with:

pytest

Available Tools

3 tools
get_aed_waiting_timesA

Get current Accident and Emergency Department waiting times by hospital in Hong Kong

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLanguage (en/tc/sc) English, Traditional Chinese, Simplified Chinese. Default Englishen

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description is the only source of behavioral context. It notes 'current' waiting times, indicating real-time data, but provides no details about update frequency, rate limits, or response format. This is minimal but sufficient for a simple read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the verb, resource, and scope without any redundant words. It is concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple tool with one optional parameter and an output schema. The description covers purpose and scope completely; no additional context about return values or prerequisites is necessary for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the only parameter 'lang' with an enum, default, and description, covering 100% of parameters. The tool description adds no extra parameter details, so the schema carries the full semantic burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'Get', the resource 'Accident and Emergency Department waiting times', and the geographic scope 'by hospital in Hong Kong'. This distinctly separates it from sibling tools like get_specialist_waiting_times, which focus on specialist waits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only states what the tool does; it does not explicitly mention when to use it or compare with alternatives. While the purpose implies usage for AED wait times, no direct guidance is given about when not to use it or when to prefer sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pas_gopc_avg_quotaA

Get average number of general outpatient clinic quotas for the preceding 4 weeks across 18 districts in Hong Kong

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLanguage (en/tc/sc) English, Traditional Chinese, Simplified Chinese. Default Englishen
districtNoOptional: Filter by district name (e.g., 'Tuen Mun'). If not provided, data for all districts will be returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states what the tool gets but does not disclose behavioral details such as how averages are computed, data freshness, pagination behavior, or response structure. For a read operation, key expectations like return format are omitted, leaving the agent with limited understanding of side effects or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words. It efficiently communicates the tool's core action, metric, time window, and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional params, no required fields, output schema present), the description covers the essential context: what metric is returned, the time window, and geographic scope. It does not explain return value structure, but the output schema covers that. Minor gap: it does not clarify whether the average is per district or overall, though 'across 18 districts' suggests district-level data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both parameters (lang, district) fully described in the schema. The tool description adds no parameter-specific meaning beyond what the schema already provides (e.g., it mentions '18 districts' but does not link to the district parameter explicitly). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and clearly identifies the resource ('average number of general outpatient clinic quotas') with temporal and geographic scope (preceding 4 weeks, 18 districts in Hong Kong). This distinguishes it from sibling tools like get_aed_waiting_times and get_specialist_waiting_times.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: this tool is for average GOPC quotas over a 4-week period, which implies use when needing that specific metric. However, it does not explicitly state when not to use it or mention alternatives (e.g., 'use this instead of waiting times tools'). The absence of exclusions keeps it slightly below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_specialist_waiting_timesA

Get current waiting times for new case bookings for specialist outpatient services by specialty and cluster in Hong Kong

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLanguage (en/tc/sc) English, Traditional Chinese, Simplified Chinese. Default Englishen

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It only states what data is retrieved and does not mention side effects, data update frequency, pagination, or any limitations. The verb "Get" implies read-only, but no explicit behavioral traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that immediately communicates the tool's purpose and scope. Every word contributes to understanding, with no redundant or vague phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and an output schema, the description is largely sufficient. It clearly states the domain (specialist outpatient), the booking type (new case), and the geographic scope (Hong Kong). The only minor gap is the mention of "by specialty and cluster" without a parameter to filter them, which could be ambiguous, though the schema clarifies that only language is configurable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'lang' is fully documented in the schema with an enum and default, achieving 100% coverage. The description does not add any extra semantics or usage details about the parameter, so it meets the baseline but provides no additional value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb "Get" and clearly identifies the resource: "waiting times for new case bookings for specialist outpatient services." It also specifies the scope "by specialty and cluster in Hong Kong," which distinguishes it from sibling tools like get_aed_waiting_times (emergency) and get_pas_gopc_avg_quota (general outpatient).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by specifying it is for "new case bookings for specialist outpatient services," which implies it is not for emergency or general outpatient settings. However, it does not explicitly mention alternatives or exclusions, so it stops short of fully guiding the agent on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a distinct health service resource: AED waiting times, specialist outpatient waiting times, and general outpatient clinic quotas. There is no overlap in purpose or data returned.

Naming Consistency4/5

The first two tools follow a clear 'get_<service>_waiting_times' pattern, but the third tool deviates with 'get_pas_gopc_avg_quota' using a different structure. Still, all use the 'get_' prefix and are readable.

Tool Count5/5

With only three tools, the server is tightly focused on Hong Kong public health waiting times and quotas. Each tool addresses a distinct data need, making the count well-scoped for its niche purpose.

Completeness4/5

The server covers the main public waiting time categories: A&E, specialist outpatient, and general outpatient clinics. Minor gaps exist such as private healthcare or specific procedure wait times, but the core domain is reasonably complete.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables access to Hong Kong government's official open data portal (DATA.GOV.HK) through natural language queries. Supports searching datasets, browsing categories, and retrieving detailed information about Hong Kong's public data resources.
    8
    8
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables users to manage medical appointments by searching for doctors, checking availability, and booking sessions through a natural language interface. It serves as a reference implementation for advanced MCP features like symptom-based specialist recommendations and multi-step scheduling workflows.
    10
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hkopenai/hk-health-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server