cyanheads avatar

Who Gho Mcp Server

cyanheads/who-gho-mcp-server

A clean interface to the WHO Global Health Observatory's 3,059 health indicators across 194 member states. You get six tools that handle the full query workflow: search indicators by keyword, fetch metadata to see which dimensions an indicator supports, then pull actual data rows with filters for country, region, year, and sex. The server wraps the WHO GHO OData API and handles things like pagination limits, uncertainty intervals, and filter validation. Runs via stdio locally or connects to a public hosted instance at who-gho.caseyjhand.com. Built on the mcp-ts-core framework, so it includes structured error recovery and works identically in Claude Desktop, Cursor, or any MCP client. Reach for this when you need programmatic access to comparative health statistics without manually parsing WHO's web interface.

GitHub stars
3
tools
6
transport
STDIO, HTTP
env vars
7
last updated
Oct 26, 2026

Install

From registry metadata
$ npx add-mcp https://who-gho.caseyjhand.com/mcp --name who-gho

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http who-gho https://who-gho.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 6 tools

Verified live against the running server on Nov 6, 2026.

who_list_dimensionsList all dimension type codes and human-readable titles available in the WHO Global Health Observatory API. Use this to discover valid dimension codes before calling who_list_dimension_values. Common dimensions include COUNTRY, REGION, SEX, WORLDBANKINCOMEGROUP, and AGEGROUP,...

List all dimension type codes and human-readable titles available in the WHO Global Health Observatory API. Use this to discover valid dimension codes before calling who_list_dimension_values. Common dimensions include COUNTRY, REGION, SEX, WORLDBANKINCOMEGROUP, and AGEGROUP,...

No parameters. Call it with no arguments.

who_list_dimension_valuesList valid codes and labels for a WHO GHO dimension type such as COUNTRY, REGION, SEX, WORLDBANKINCOMEGROUP, or AGEGROUP. Use this to discover valid filter values before calling who_query_indicator_data, or to confirm the WHO code for a country, including historical codes. Use...4 params

List valid codes and labels for a WHO GHO dimension type such as COUNTRY, REGION, SEX, WORLDBANKINCOMEGROUP, or AGEGROUP. Use this to discover valid filter values before calling who_query_indicator_data, or to confirm the WHO code for a country, including historical codes. Use...

Parameters* required
dimension*string
Dimension type code. Use who_list_dimensions to discover all available codes. Common values: COUNTRY, REGION, SEX, WORLDBANKINCOMEGROUP, AGEGROUP.
limitinteger
Number of values to return per page. Default 100, max 500.default: 100
offsetinteger
Zero-based offset into the values for this dimension and filter. Default 0. Read hasMore and nextOffset from the response to continue paging. An offset at or beyond totalCount returns an empty valu...default: 0
parent_codestring
Restrict results to values under one parent, e.g. dimension="COUNTRY" with parent_code="EUR" for the countries in the WHO European Region. Only hierarchical dimensions carry a parent; a filter that...
who_search_indicatorsSearch the WHO Global Health Observatory indicator catalog by words in the indicator name. Every whitespace-separated word must match independently as a case-insensitive substring, in any order; try "tuberculosis incidence", "sanitation basic", or "HIV". When no names match, a...3 params

Search the WHO Global Health Observatory indicator catalog by words in the indicator name. Every whitespace-separated word must match independently as a case-insensitive substring, in any order; try "tuberculosis incidence", "sanitation basic", or "HIV". When no names match, a...

Parameters* required
limitinteger
Maximum number of indicators to return. Default 20, max 100.default: 20
offsetinteger
Zero-based offset into the matches for this query. Default 0. Read hasMore and nextOffset from the response to continue paging. An offset at or beyond totalCount returns an empty indicators array,...default: 0
query*string
Words to match independently in indicator names, or an exact indicator code.
who_list_indicatorsBrowse the WHO Global Health Observatory indicator catalog with pagination. Use when you want to explore indicators without a keyword, or to page through the full catalog. Use who_search_indicators when you have a keyword to narrow the results.2 params

Browse the WHO Global Health Observatory indicator catalog with pagination. Use when you want to explore indicators without a keyword, or to page through the full catalog. Use who_search_indicators when you have a keyword to narrow the results.

Parameters* required
limitinteger
Number of indicators to return per page. Default 50, max 500.default: 50
offsetinteger
Zero-based offset for pagination. Default 0.default: 0
who_get_indicator_metadataFetch metadata for WHO GHO indicator codes: the canonical code, full name, and supported dimensions (e.g. COUNTRY, REGION, SEX, YEAR, WORLDBANKINCOMEGROUP, AGEGROUP). Call this before who_query_indicator_data to confirm valid filter dimensions. Processes the first 10 entries a...1 params

Fetch metadata for WHO GHO indicator codes: the canonical code, full name, and supported dimensions (e.g. COUNTRY, REGION, SEX, YEAR, WORLDBANKINCOMEGROUP, AGEGROUP). Call this before who_query_indicator_data to confirm valid filter dimensions. Processes the first 10 entries a...

Parameters* required
indicator_codes*array
Indicator codes, e.g. ["WHOSIS_000001", "MDG_0000000026"]. Processes the first ten and returns remaining entries for the next call; at most 1000 entries.
who_query_indicator_dataQuery data rows for a single WHO GHO indicator with optional spatial, temporal, and dimension filters. Returns rows with numeric values, uncertainty intervals (Low/High), and spatial/time metadata. This is the primary data-fetching tool in the find-then-query workflow: use who...14 params

Query data rows for a single WHO GHO indicator with optional spatial, temporal, and dimension filters. Returns rows with numeric values, uncertainty intervals (Low/High), and spatial/time metadata. This is the primary data-fetching tool in the find-then-query workflow: use who...

Parameters* required
country_codesarray
WHO country codes to filter on, e.g. ["JPN","USA","BRA"], including historical codes such as ME1 and SDN736. Discover codes with who_list_dimension_values dimension="COUNTRY". Mutually exclusive wi...
dim1_valuestring
Value filter for indicators whose first cross-cutting dimension is not SEX (e.g. an AGEGROUP code like "YEARS05-14"). Ignored when sex is also provided.
dim2_valuestring
Value filter for the second cross-cutting dimension, e.g. AGEGROUP_DAYS0-27. Discover the position from returned dim2Type/dim2 pairs; metadata does not identify the slot. Empty strings are ignored...
dim3_valuestring
Value filter for the third cross-cutting dimension, e.g. CHILDCAUSE_CH9. Discover the position from returned dim3Type/dim3 pairs; metadata does not identify the slot. Empty strings are ignored with...
include_uncertaintyboolean
Include Low and High uncertainty interval bounds in output. Default true.default: true
income_group_codesarray
World Bank income group codes, e.g. ["WB_HI","WB_LMI","WB_LI","WB_UMI"]. Use who_list_dimension_values with dimension="WORLDBANKINCOMEGROUP" to see all valid codes. Mutually exclusive with country_...
indicator_code*string
Indicator code to query, e.g. "WHOSIS_000001". Use who_search_indicators to find codes.
limitinteger
Maximum number of data rows to return. Default 200, max 1000.default: 200
offsetinteger
Zero-based row offset for pagination. Default 0. Pages are stable because rows are returned in a deterministic order — read hasMore and nextOffset from the response to continue. An offset at or bey...default: 0
region_codesarray
WHO region codes to filter on, e.g. ["AFR","EUR","AMR","EMR","SEAR","WPR"]. Returns the aggregate row for each named WHO region. To get country-level data for a region, use who_list_dimension_value...
sexstring
Filter on sex dimension: SEX_BTSX (both sexes), SEX_FMLE (female), SEX_MLE (male). Only applies when the indicator uses SEX as its first cross-cutting dimension.one of SEX_BTSX · SEX_FMLE · SEX_MLE
sortstring
Row ordering: "year_desc" (default) returns the most recent years first, "year_asc" the earliest first. Ties are broken by spatial code, then dimension, then row id.one of year_desc · year_ascdefault: year_desc
year_frominteger
Start year (inclusive) for the time range filter, e.g. 2015.
year_tointeger
End year (inclusive) for the time range filter, e.g. 2023.

Sponsors

Configuration

GHO_CLAMP_LIMITSdefault: true

Clamp oversized read pages and metadata batches; false restores strict ceiling rejection.

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/who-gho-mcp-server

Query WHO Global Health Observatory data — 3,102 indicators across 194 member states with country, region, year, and sex filters via MCP. STDIO or Streamable HTTP.

6 Tools • 4 Data Resources • 1 Skill

Details

Repository
github.com/cyanheads/who-gho-mcp-server
Package
@cyanheads/who-gho-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
1
Tools verified
Nov 6, 2026

More from cyanheads