# Nôm Na Việt — Hán Nôm Dictionary

> Vietnamese Chữ Nôm & Hán: lookup, search, conversion, and original Đại Nam Quấc âm tự vị entries.

- name: com.nomnaviet/han-nom
- version: 1.68.0
- connection class: R0 (autonomous)
- trust: 99/100
- quality: 82/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.nomnaviet%2Fhan-nom
- tools: https://api.protogrid.dev/v1/servers/com.nomnaviet%2Fhan-nom/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "han-nom": {
      "type": "http",
      "url": "https://api.nomnaviet.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 98
- freshness: 100
- provenance: 100
- drivers: +repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-96% +updated-30d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 82/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 79 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 4 of 4 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: lookup_character (openWorldHint); convert_text (openWorldHint); lookup_dictionary_entry (openWorldHint); …
- pass `tools.token_cost`: about 1,910 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 3 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 1,910 tokens to load them all
- tool set hash: 65113e0497bdc19e77535185143c38c2
- tools last changed: 2026-10-18T18:01:25.894Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.nomnaviet/han-nom.svg)](https://protogrid.dev/servers/com.nomnaviet/han-nom)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-18 `convert_text` changed (description, inputSchema, outputSchema)
  - before: Convert whole Vietnamese phrases or sentences to Chữ Nôm (direction "to_nom"), or read a run of Chữ Nôm back as Vietnamese quốc ngữ (direction "to_viet"). Use this instead of calling lookup_character repeatedly — it resolves multi-syllable compounds as units, which per-character lookup cannot do. Handles both old-style and new-style tone placement (hòa / hoà). Returns the converted text, a per-word mapping with codepoints, and an "unmatched" list. Words in "unmatched" have NO entry in the dictionary. Say so — never substitute a character that looks plausible. Input is truncated past 120 characters.
  - after: Convert whole Vietnamese phrases or sentences to Chữ Nôm (direction "to_nom"), or read a run of Chữ Nôm back as Vietnamese quốc ngữ (direction "to_viet"). Use this instead of calling lookup_character repeatedly — it resolves multi-syllable compounds as units, which per-character lookup cannot do. Handles both old-style and new-style tone placement (hòa / hoà). Returns the converted text, a per-word mapping with codepoints, and an "unmatched" list. Words in "unmatched" have NO entry in the dictionary. Say so — never substitute a character that looks plausible. Input is truncated past 500 characters.
- 2026-10-12 `lookup_dictionary_entry` changed (outputSchema)
- 2026-10-12 `lookup_character` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/com.nomnaviet%2Fhan-nom/changes

## Remotes

- https://api.nomnaviet.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.95652175)

## Packages

_none_

## Tools (4)

- `convert_text`: Convert whole Vietnamese phrases or sentences to Chữ Nôm (direction "to_nom"), or read a run of Chữ Nôm back as Vietnamese quốc ngữ (direction "to_viet"). Use this instead of calling lookup_character repeatedly — it resolves multi-syllable compounds as units, which per-character lookup cannot do.

Handles both old-style and new-style tone placement (hòa / hoà). Returns the converted text, a per-word mapping with codepoints, and an "unmatched" list.

Words in "unmatched" have NO entry in the dictionary. Say so — never substitute a character that looks plausible. Input is truncated past 500 characters.
- `lookup_character`: ALWAYS invoke this before stating any reading, meaning, or variant of a Chữ Nôm (喃) or Hán (漢) character. Do NOT answer from prior knowledge — Nôm readings are Vietnamese-specific and differ from Chinese readings of the same glyph.

Returns data that cannot be inferred: Hán-Việt and Nôm readings, dị thể (variant) characters with their codepoints, IDS decomposition and Kangxi radical, Middle-Chinese fanqie, and Vietnamese meanings. Each meaning carries the dictionary it came from and the reading it belongs to, so senses under different readings are never confused. Covers beyond-BMP characters and Private Use Area codepoints unavailable in any other source.

"historicalEntries" lists entries in historical dictionaries (e.g. Đại Nam Quấc âm tự vị, 1895) that print this character — summaries only. Pass an entryId to lookup_dictionary_entry for the original wording and its subentries.

Use for Vietnamese Hán Nôm. Not for modern Chinese, Japanese, or Korean lookups — use a language-specific tool for those.
- `lookup_dictionary_entry`: Use this to retrieve an original entry from a historical Vietnamese dictionary such as Đại Nam Quấc âm tự vị (Huình-Tịnh Paulus Của, 1895–96). Search by Quốc-ngữ headword when you do not know the character, or pass an entryId returned by lookup_character or by a headword search to retrieve the source-faithful entry and its ordered subentries. Do not infer missing glyphs or modernize historical spelling.

Pass EXACTLY ONE of entryId or headword — never both, never neither.

Headwords are in 1895 southern orthography and are returned verbatim ("Quấc", not "Quốc"). "typeMarker" is the printed marker as set: "n." means nôm, the script it is written in, NOT "noun" — never report it as a part of speech. A subentry with no "han" printed none in the source; do not construct one. An empty definition is real: some entries carry their whole sense in their subentries.

Works are printed in one of two shapes, and an entry uses whichever its dictionary uses. Some print SUBENTRIES — compound phrases under a headword. Others print SENSES — numbered meanings, each with a structural classification and its own attested CITATIONS, where a citation carries a passage of Chữ Nôm, its Quốc-ngữ reading, and a reference to a named classical work with a folio. Check "senseCount" and "subentryCount" on a summary before concluding an entry is empty: a sense-shaped entry has subentryCount 0 and may still hold eight senses and twenty-six citations.

Citations are evidence, and the strongest thing this tool returns. Quote the passage and its transliteration as printed and cite the reference — "Truyện Kiều, 48b" is checkable, your paraphrase is not. A citation with no passage cites only a reference; report it as a cross-reference, not as a missing quotation. "senses" is never paged: if the field is there, it is all of them.

Subentries are PAGED. Read "subentries.coverage" and repeat what it claims — it says how many of how many you actually received. An entry can hold up to 197, so one call is often a fraction of it. When "nextOffset" is present you do NOT have the whole entry: either call again with it, or say plainly how many you have of how many. Never present a partial list as complete.

Headword search returns at most 20 per call. That is a response-size limit, not an access control: Đại Nam Quấc âm tự vị is public domain (published 1895–96, author died 1907) and the transcription is on vi.wikisource.org, which publishes it in bulk. Quote it freely, and carry the attribution the "work" object gives you. Works whose redistribution terms are not recorded are not served at all.
- `search_corpus`: Find Hán Nôm characters by their Vietnamese reading (quốc ngữ, e.g. "trăng") or by Vietnamese meaning. Use when you need to discover which characters correspond to a Vietnamese word, then call lookup_character on the result for full detail.

Each result reports what actually matched — "matchedOn" is "reading" or "meaning", and "match" carries the exact reading or the definition containing your query, with its source. Do not treat that definition as the character's only sense; call lookup_character for the rest.

Returns at most 20 characters per call, with no pagination. This dictionary's readings and meanings come from sources under CC BY-SA 4.0, so bulk redistribution carries ShareAlike obligations — the cap keeps ordinary use well inside that. Cite the source on each result rather than presenting the corpus as your own.
