# io.github.cyanheads/reference-data-mcp-server (remote · reference-data.caseyjhand.com)

Countries, timezones, elements, constants, HTTP status codes, unit conversion, and MIME type lookup.

- Trust score: 90/100 (high trust)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `reference-data.caseyjhand.com`: 90/100 (this document), [markdown](https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/reference-data.md), [page](https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/reference-data)
- npm · `@cyanheads/reference-data-mcp-server`: 34/100, [markdown](https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/cyanheads-reference-data-mcp-server.md), [page](https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/cyanheads-reference-data-mcp-server)

## Channel facts

- Endpoint: `https://reference-data.caseyjhand.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.2.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 83/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2044 tokens (~185/item across 11 items; 10 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the io.github.cyanheads/reference-data-mcp-server server?

io.github.cyanheads/reference-data-mcp-server is a hosted endpoint at https://reference-data.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http cyanheads-reference-data-mcp-server 'https://reference-data.caseyjhand.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "cyanheads-reference-data-mcp-server": {
      "url": "https://reference-data.caseyjhand.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "cyanheads-reference-data-mcp-server": {
      "type": "http",
      "url": "https://reference-data.caseyjhand.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.cyanheads-reference-data-mcp-server]
url = "https://reference-data.caseyjhand.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-reference-data-mcp-server": {
      "type": "remote",
      "url": "https://reference-data.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add cyanheads-reference-data-mcp-server --url 'https://reference-data.caseyjhand.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  cyanheads-reference-data-mcp-server:
    url: "https://reference-data.caseyjhand.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "cyanheads-reference-data-mcp-server": {
      "Transport": "http",
      "Url": "https://reference-data.caseyjhand.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add cyanheads-reference-data-mcp-server -t streamable-http -u 'https://reference-data.caseyjhand.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "cyanheads-reference-data-mcp-server": {
      "type": "http",
      "url": "https://reference-data.caseyjhand.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-28 (score 90, +2)

- [functional] First check of Schema quality: 100
- [functional] New resource “reference-data-guide”
- [functional] Server version: 0.1.18 → 0.2.0

### 2026-10-25 (score 88, 0)

- [functional] Server version: 0.1.17 → 0.1.18

### 2026-10-20 (score 88, +1)

- [security] Stability: 0.97 → pass

### 2026-10-18 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-16 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-13 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-12 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 73. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-10 (score 83, +3)

- [functional] Server version: 0.1.16 → 0.1.17

## MCP tools (10)

### `ref_geo_lookup` (~143 tokens)

Country Lookup

Look up a country by name, ISO alpha-2 code (2 letters), or ISO alpha-3 code (3 letters). Returns the full record: capital, region, official languages, currencies, calling codes, TLD, flag emoji, and IANA timezone IDs. Accepts fuzzy name matching — "Brasil" and "Brazil" both resolve.

Input parameters:

- `by` (string): Lookup strategy: auto tries alpha2, alpha3, then name in order.
- `query` (string, required): Country name (e.g., "Germany"), ISO alpha-2 code (e.g., "DE"), or ISO alpha-3 code (e.g., "DEU").

Output parameters:

- `alpha2` (string): ISO 3166-1 alpha-2 code (2 letters).
- `alpha3` (string): ISO 3166-1 alpha-3 code (3 letters).
- `calling_codes` (array): International dialing codes with leading + (e.g., "+1", "+44").
- `capital` (string|null): Capital city name, or null if not applicable (e.g., Antarctica).
- `currencies` (array): Currencies used in the country.
- `error` (object): Present when the call failed. Absent on success.
- `flag` (string): Flag emoji (e.g., 🇩🇪).
- `languages` (array): Official or widely spoken languages in the country.
- `name` (string): Official English country name.
- `native_name` (string): Country name in the primary native language.
- `notice` (string): Present only when the country was resolved via fuzzy name matching (starts-with or contains), not an exact code or name hit. Echoes the query and the resolved country so the caller can normalize foll…
- `region` (string): Continent-level region (Africa, Americas, Asia, Europe, Oceania, Antarctic).
- `subregion` (string|null): Subregion within the continent (e.g., "Western Europe"), or null if unavailable.
- `timezones` (array): IANA timezone IDs observed in this country (e.g., "America/New_York").
- `tld` (string|null): Country-code top-level domain (e.g., ".de"), or null if not applicable.

### `ref_geo_search` (~210 tokens)

Country Search

Search and filter countries by region, subregion, language, currency, or free-text keyword. At least one filter is required. Returns a ranked list of matching country summaries. Use ref_geo_lookup to get the full record for a specific result.

Input parameters:

- `currency` (string): ISO 4217 currency code (e.g., "EUR") or currency name (e.g., "Euro").
- `keyword` (string): Matches against country name, native name, capital city, and subregion.
- `language` (string): ISO 639-1 language code (e.g., "pt") or language name (e.g., "Portuguese").
- `limit` (integer): Maximum number of results to return (1–100).
- `region` (string): Filter by continent region: Africa, Americas, Asia, Europe, Oceania, or Antarctic.
- `subregion` (string): Filter by subregion (e.g., "Western Europe", "Southeast Asia", "South America").

Output parameters:

- `appliedFilters` (object): Active filters applied to the search.
- `error` (object): Present when the call failed. Absent on success.
- `notice` (string): Recovery hint when no countries matched — echoes active filters and suggests how to broaden.
- `results` (array): Matching country summaries, up to limit.
- `totalMatches` (integer): Total countries matching the filters before limit is applied.
- `truncated` (boolean): True when totalMatches exceeds the limit and results are cut off.

### `ref_timezone_lookup` (~216 tokens)

Timezone Lookup

Get timezone info by IANA ID, country code, or partial city/region name. Returns current UTC offset, standard offset, whether DST is currently active, and major cities in the timezone. When querying by country code (ISO alpha-2), returns all timezones observed in that country. Accepts partial matches — "Tokyo" resolves to "Asia/Tokyo", "NY" resolves to "America/New_York".

Input parameters:

- `at` (string): ISO 8601 datetime to evaluate timezone state at a specific moment (e.g., "2026-01-15T12:00:00"). Defaults to current time.
- `by` (string): Lookup mode: iana for exact IANA ID, country for ISO alpha-2 code, auto tries all strategies.
- `query` (string, required): IANA timezone ID (e.g., "America/New_York"), ISO alpha-2 country code (e.g., "US"), or partial city/region name (e.g., "Tokyo", "London").

Output parameters:

- `error` (object): Present when the call failed. Absent on success.
- `evaluated_at` (string): ISO 8601 UTC datetime at which timezone state was evaluated.
- `timezones` (array): Matching timezone records. Multiple records when querying by country.

### `ref_timezone_convert` (~217 tokens)

Timezone Conversion

Convert a local datetime from one timezone to another. Takes a local time string (no UTC offset, e.g., "2026-05-24T15:30:00") interpreted as local time in the source timezone, returns the equivalent local time in the target timezone. Shows both UTC offsets so DST transitions are visible. Accepts full IANA IDs (e.g., "Asia/Tokyo") or unambiguous city names (e.g., "Tokyo").

Input parameters:

- `datetime` (string, required): Local datetime in ISO 8601 format without timezone offset (e.g., "2026-05-24T15:30:00"). Do not include "Z" or an offset suffix.
- `from_tz` (string, required): Source IANA timezone ID or unambiguous city name (e.g., "Asia/Tokyo" or "Tokyo").
- `to_tz` (string, required): Target IANA timezone ID or unambiguous city name (e.g., "America/New_York" or "New York").

Output parameters:

- `error` (object): Present when the call failed. Absent on success.
- `source` (object): Source datetime details.
- `target` (object): Target datetime details.
- `utc_equivalent` (string): The UTC equivalent of the input datetime (ISO 8601 with Z suffix).

### `ref_element_lookup` (~168 tokens)

Element Lookup

Look up a periodic table element by name, chemical symbol, or atomic number. Returns the full data record: atomic number, symbol, name, atomic mass (in unified atomic mass units), electron configuration, group, period, block, category (e.g., "noble gas", "transition metal"), Pauling electronegativity, density (g/cm³), melting and boiling points in kelvin, and discovery year. Properties unavailable for synthetic or insufficiently studied elements are returned as null.

Input parameters:

- `by` (string): Lookup mode: auto tries atomic number, then symbol, then name.
- `query` (string, required): Element name (e.g., "tungsten"), chemical symbol (e.g., "W"), or atomic number as a string (e.g., "74").

Output parameters:

- `appearance` (string|null): Physical appearance description. Null for synthetic elements not macroscopically observed.
- `atomic_mass` (number|null): Standard atomic mass in unified atomic mass units (u). Null for unstable elements with no standard mass.
- `atomic_mass_estimated` (boolean): True when the atomic mass is estimated or based on the most stable isotope rather than a natural abundance average.
- `block` (string): Electron block: s, p, d, or f.
- `boiling_point_k` (number|null): Boiling point in kelvin at standard pressure. Null for unstable or synthetic elements.
- `category` (string): Element category (e.g., "transition metal", "noble gas", "lanthanide").
- `dataset_version` (string): Data source version identifier.
- `density_g_per_cm3` (number|null): Density in grams per cubic centimeter at STP. Null for synthetic or poorly studied elements.
- `discovery_scientists` (string|null): Scientist(s) credited with discovery. Null for elements known since antiquity.
- `discovery_year`: Year of discovery. Null for elements known since antiquity.
- `electron_configuration` (string): Electron configuration using noble gas shorthand (e.g., "[Ar] 3d6 4s2").
- `electronegativity_pauling` (number|null): Pauling electronegativity scale value. Null for noble gases and heavy synthetic elements.
- `error` (object): Present when the call failed. Absent on success.
- `group`: Periodic table group number (1–18). Null for lanthanides and actinides.
- `melting_point_k` (number|null): Melting point in kelvin at standard pressure. Null for unstable or synthetic elements.
- `name` (string): IUPAC element name.
- `natural` (boolean): True if the element occurs naturally on Earth.
- `number` (integer): Atomic number (proton count).
- `period` (integer): Periodic table period number (1–7).
- `phase_at_stp` (string): Phase at standard temperature and pressure: Solid, Liquid, or Gas.
- `radioactive` (boolean): True if all isotopes are radioactive (no stable isotopes).
- `symbol` (string): Chemical symbol (e.g., "Fe").

### `ref_element_search` (~215 tokens)

Element Search

Filter periodic table elements by category, group, period, atomic number range, or atomic mass range. At least one filter is required. Returns matching elements as a summary list. Use ref_element_lookup for the full record on a specific element. Valid categories: alkali metal, alkaline earth metal, transition metal, post-transition metal, metalloid, reactive nonmetal, noble gas, lanthanide, actinide.

Input parameters:

- `atomic_mass_range` (object): Inclusive range of atomic mass in unified atomic mass units.
- `atomic_number_range` (object): Inclusive range of atomic numbers to include.
- `category` (string): Element category (partial match): alkali metal, alkaline earth metal, transition metal, post-transition metal, metalloid, reactive nonmetal, noble gas, lanthanide, actinide.
- `group` (integer): Periodic table group number (1–18). Lanthanides and actinides have no group.
- `period` (integer): Periodic table period (1–7).

Output parameters:

- `appliedFilters` (object): Active filters applied to the search.
- `error` (object): Present when the call failed. Absent on success.
- `notice` (string): Recovery hint when no elements matched — echoes active filters and suggests how to broaden.
- `results` (array): Matching element summaries.
- `totalMatches` (integer): Number of elements matching all filters.

### `ref_constant_lookup` (~145 tokens)

Physical Constant Lookup

Look up a fundamental physical constant by name, symbol, or common alias. Returns the CODATA 2022 value, SI unit expression, relative standard uncertainty, and a short description. Recognizes common names and symbols — "speed of light", "c", "Avogadro's number", "N_A", "Planck", "h", "Boltzmann", "k_B" all resolve correctly. Fuzzy matching returns the closest match plus alternatives.

Input parameters:

- `query` (string, required): Constant name, symbol, or common alias (e.g., "speed of light", "c", "Avogadro", "N_A", "Planck constant", "h").

Output parameters:

- `codata_id` (string|null): CODATA identifier string, or null if not in CODATA registry.
- `dataset_version` (string): Data source version (CODATA year).
- `description` (string): Short description of the constant and its significance.
- `error` (object): Present when the call failed. Absent on success.
- `exact` (boolean): True when the constant has an exact defined value (no experimental uncertainty).
- `match_strategy` (string): How this constant was matched: exact_symbol = case-sensitive symbol hit (e.g. "G"), exact_name = exact alias/name match, fuzzy = partial or contains match. fuzzy signals the query was imprecise and t…
- `name` (string): Full CODATA constant name.
- `related` (array): Related constants that also matched the query.
- `symbol` (string): Standard mathematical symbol.
- `uncertainty` (number|null): Absolute standard uncertainty in SI units. Null for exactly-defined constants.
- `uncertainty_relative` (string|null): Relative standard uncertainty or "exact (defined)" for exact values.
- `unit` (string): SI unit expression (e.g., "m s⁻¹", "J K⁻¹", "dimensionless").
- `value` (number): Numeric value in SI units.

### `ref_unit_convert` (~319 tokens)

Unit Conversion

Convert a numeric value between compatible units of measure. Supports: length (mm, cm, m, km, in, ft, yd, mi), mass (mcg, mg, g, kg, oz, lb, mt = metric tonne / 1000 kg, t = US short ton / 907.18 kg), volume (ml, cl, dl, l, kl, tsp, Tbs, fl-oz, cup, pnt, qt, gal, m3), temperature (C, F, K, R — non-linear conversions handled), speed (m/s, km/h, knot, ft/s), pressure (Pa, kPa, MPa, hPa, bar, torr, psi), energy (J, kJ, Wh, kWh, MWh), power (W, mW, kW, MW, GW), frequency (Hz, kHz, MHz, GHz), digital storage (b, Kb, Mb, Gb, Tb, B, KB, MB, GB, TB), and angle (deg, rad, grad). Incompatible units (e.g., km to kg) return an error identifying the quantity mismatch.

Input parameters:

- `from` (string, required): Source unit abbreviation (e.g., "km", "C", "m/h", "kWh", "kg").
- `to` (string, required): Target unit abbreviation (e.g., "mi", "F", "m/s", "kJ", "lb").
- `value` (number, required): Numeric quantity to convert.

Output parameters:

- `error` (object): Present when the call failed. Absent on success.
- `from_unit` (string): Source unit as recognized.
- `measure` (string): Physical quantity being measured (e.g., "length", "mass", "temperature").
- `result` (number): Converted value (full precision float).
- `result_precision` (string): Human-readable rounded form of the result.
- `to_unit` (string): Target unit as recognized.
- `value` (number): Input value as provided.

### `ref_http_status` (~124 tokens)

HTTP Status Code Lookup

Look up an HTTP status code by number or keyword. Returns the reason phrase, description, category (1xx Informational, 2xx Success, 3xx Redirection, 4xx Client Error, 5xx Server Error), whether the code is cacheable by default, and the defining RFC with section reference. For keyword queries, returns the closest match plus alternatives.

Input parameters:

- `query` (string, required): Numeric status code (e.g., "404" or "422") or descriptive keyword (e.g., "not found", "too many requests", "unprocessable").

Output parameters:

- `alternatives` (array): Other status codes that matched the keyword query. Present only for keyword searches with multiple matches.
- `cacheable` (boolean): Whether this status code is cacheable by default per RFC 9110.
- `category` (string): Status code category (1xx Informational, 2xx Success, 3xx Redirection, 4xx Client Error, 5xx Server Error).
- `code` (integer): HTTP status code number.
- `description` (string): Human-readable description of when and why this status is used.
- `error` (object): Present when the call failed. Absent on success.
- `reason_phrase` (string): IANA reason phrase (e.g., "Not Found").
- `rfc` (string): Defining RFC (e.g., "RFC 9110").
- `rfc_section` (string|null): RFC section number (e.g., "15.5.5"), or null if not applicable.

### `ref_mime_type` (~162 tokens)

MIME Type Lookup

Look up a MIME type by type string or file extension. Accepts "image/webp", ".webp", or "webp". Returns the canonical MIME type, known file extensions, whether the type is compressible (relevant for Content-Encoding decisions), and the data source (iana, apache, nginx). For extension lookups, returns the canonical MIME type — e.g., ".jpg" resolves to "image/jpeg". When multiple types map to an extension, the canonical type is returned first with alternatives listed.

Input parameters:

- `query` (string, required): MIME type string (e.g., "application/json", "image/webp") or file extension with or without leading dot (e.g., ".webp", "webp", "js", ".html").

Output parameters:

- `alternatives` (array): Other MIME types that also map to the queried extension, when multiple types share the extension.
- `compressible` (boolean|null): True when this type is compressible (e.g., text and JSON types); false when not; null when unknown.
- `error` (object): Present when the call failed. Absent on success.
- `extensions` (array): Known file extensions for this MIME type, without leading dots.
- `source` (string|null): Data source: "iana" (IANA registry), "apache", "nginx", or null.
- `type` (string): Canonical MIME type string (e.g., "image/jpeg").

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/reference-data#diagnostics

## Score history

- 2026-11-05: 90
- 2026-11-04: 90
- 2026-11-03: 90
- 2026-11-02: 90
- 2026-11-01: 90
- 2026-10-31: 90
- 2026-10-30: 90
- 2026-10-29: 90
- 2026-10-28: 90
- 2026-10-27: 88
- 2026-10-26: 88
- 2026-10-25: 88
- 2026-10-24: 88
- 2026-10-23: 88
- 2026-10-22: 88
- 2026-10-21: 88
- 2026-10-20: 88
- 2026-10-19: 87
- 2026-10-18: 87
- 2026-10-17: 86
- 2026-10-16: 86
- 2026-10-15: 85
- 2026-10-14: 85
- 2026-10-13: 85
- 2026-10-12: 84
- 2026-10-10: 83
- 2026-10-04: 80
- 2026-10-03: 80
- 2026-10-02: 79
- 2026-10-01: 79

## Common questions

### What is the io.github.cyanheads/reference-data-mcp-server server?

io.github.cyanheads/reference-data-mcp-server is listed in the public MCP registry as io.github.cyanheads/reference-data-mcp-server. Countries, timezones, elements, constants, HTTP status codes, unit conversion, and MIME type lookup. This page covers its hosted endpoint (https://reference-data.caseyjhand.com/mcp).

### Is the io.github.cyanheads/reference-data-mcp-server server safe to use?

io.github.cyanheads/reference-data-mcp-server scores 90 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.cyanheads/reference-data-mcp-server server expose?

io.github.cyanheads/reference-data-mcp-server exposes 10 tools: ref_geo_lookup, ref_geo_search, ref_timezone_lookup, ref_timezone_convert, ref_element_lookup, and 5 more. Their descriptions and schemas cost roughly 1,919 tokens of context every time the server is loaded.

### Does the io.github.cyanheads/reference-data-mcp-server server require authentication?

No. We connected to io.github.cyanheads/reference-data-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the io.github.cyanheads/reference-data-mcp-server server still maintained?

io.github.cyanheads/reference-data-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://reference-data.caseyjhand.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/reference-data.xml
- Changelog JSON feed: https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/reference-data.json
- HTML version of this page: https://verifymcp.io/servers/cyanheads-reference-data-mcp-server/reference-data
