# vn-skills (npm · @vn-skills/mcp)

Vietnam: VietQR, address, tax ID, CCCD, phone, holiday, names, number/date format, lunar, e-invoice

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

## Components

- npm · `@vn-skills/mcp`: 86/100 (this document), [markdown](https://verifymcp.io/servers/beiryu-vn-skills/vn-skills-mcp.md), [page](https://verifymcp.io/servers/beiryu-vn-skills/vn-skills-mcp)

## Channel facts

- Registry: `npm`
- Package: `@vn-skills/mcp`
- Version: `0.8.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 43 of 126 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to beiryu/vn-skills).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 5 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **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 (good).
  - Tool/resource definitions use about 3720 tokens (~50/item across 74 items; 37 tools + 37 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 43/100
  - Stability observed for 13 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 80/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 40% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 37 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### How do I install the vn-skills MCP server?

vn-skills runs locally as an npm package, launched with npx -y @vn-skills/mcp. 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 beiryu-vn-skills -- npx -y @vn-skills/mcp
```

### Cursor

```json
{
  "mcpServers": {
    "beiryu-vn-skills": {
      "command": "npx",
      "args": [
        "-y",
        "@vn-skills/mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "beiryu-vn-skills": {
      "command": "npx",
      "args": [
        "-y",
        "@vn-skills/mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add beiryu-vn-skills -- npx -y @vn-skills/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "beiryu-vn-skills": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@vn-skills/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add beiryu-vn-skills --command npx --arg -y --arg @vn-skills/mcp
```

### Hermes

```yaml
mcp_servers:
  beiryu-vn-skills:
    command: "npx"
    args: ["-y", "@vn-skills/mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "beiryu-vn-skills": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@vn-skills/mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add beiryu-vn-skills -t stdio -c npx -a -y @vn-skills/mcp
```

### Other

```json
{
  "mcpServers": {
    "beiryu-vn-skills": {
      "command": "npx",
      "args": [
        "-y",
        "@vn-skills/mcp"
      ]
    }
  }
}
```

## 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-11-03 (score 86, +1)

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

### 2026-11-01 (score 85, +1)

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

### 2026-10-31 (score 84, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-30 (score 69, −12)

- [security regression] Malware scan: pass → unverified
- [functional improvement] Schema quality: 75 → 50
- [functional] First check of Capabilities: pass
- [functional] First check of Schema quality: 100
- [functional] Package version: 0.7.0 → 0.8.0

### 2026-10-28 (score 81, +1)

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

### 2026-10-25 (score 80, +1)

- [security regression] Tool safety: pass → unverified
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Stability: unverified → 0.07
- [functional] First check of Schema quality: unverified
- [functional] Package version: 0.6.0 → 0.7.0

### 2026-10-24 (score 79, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-23 (score 64)

First indexed and scored.

## MCP tools (37)

### `vietqr_build` (~169 tokens)

Build VietQR

Create a VietQR (NAPAS 247) bank-transfer QR payload. Returns the EMVCo string, CRC and optionally a PNG image. Bank accepts BIN (970436), code (VCB) or name (Vietcombank). Amount is integer VND; note is sanitized (no diacritics, max 25 chars).

Input parameters:

- `account` (string, required): Beneficiary account number
- `amount` (number|string): Amount in VND (integer). Omit for a static QR.
- `bank` (string, required): Bank BIN, code or name, e.g. "VCB", "970436", "Vietcombank"
- `image` (boolean): Also return a PNG image (base64). Default false.
- `note` (string): Transfer note / purpose

### `vietqr_parse` (~53 tokens)

Parse VietQR

Decode a VietQR / EMVCo QR payload string: bank, account, amount, note, and whether the CRC is valid.

Input parameters:

- `payload` (string, required): The decoded QR text, starting with 000201

### `vietqr_decode` (~76 tokens)

Decode VietQR image

Read the QR code in a PNG image file and decode it like vietqr_parse: bank, account, amount, note, CRC validity. Returns READ_ERROR for an unreadable/non-PNG file and NO_QR when no QR code is found.

Input parameters:

- `path` (string, required): Path to a PNG image containing a VietQR code

### `vietqr_banks` (~75 tokens)

Search banks

Search the NAPAS bank list by BIN, code, short name, full name or SWIFT/BIC code. Empty query lists all banks.

Input parameters:

- `query` (string): e.g. "vietcombank", "VCB", "9704", "BFTVVNVX" (SWIFT/BIC)

### `vn_address_parse` (~96 tokens)

Parse Vietnamese address

Parse a free-text Vietnamese address into province / ward / street using the post-01/07/2025 catalogue (34 provinces, no districts). Handles missing diacritics and abbreviations (TP.HCM, Q.1, P. Bến Nghé). Set mode "legacy" for pre-2025 addresses with districts.

Input parameters:

- `mode` (string): Default auto
- `text` (string, required): Free-text address

### `vn_address_convert_batch` (~122 tokens)

Convert many old addresses to new (2025)

Convert up to 1000 pre-July-2025 Vietnamese free-text addresses (63 provinces, districts, wards) into the new 2-level structure (34 provinces, wards) in one call. Returns per-row results plus a summary of converted and failed rows. Null, empty or non-string entries do not fail the call: they come back as failed rows (ok:false with an error code) and are counted in summary.failed.

Input parameters:

- `addresses` (array, required): Free-text old addresses (max 1000); null or empty entries become failed rows

### `vn_address_convert` (~137 tokens)

Convert old address to new (2025)

Convert a pre-July-2025 Vietnamese address (63 provinces, districts, wards) into the new 2-level structure (34 provinces, wards). Returns the new ward/province, mapping type (unchanged/merged/divided) and all candidates when the old ward was split. When the client supports elicitation, the server may ask the user to pick the new ward for a split old ward (chosenBy: user|default).

Input parameters:

- `district` (string)
- `province` (string)
- `street` (string)
- `text` (string): Free-text old address
- `ward` (string)

### `vn_address_search_wards` (~49 tokens)

Search wards

Find current (post-2025) wards by name, optionally within a province.

Input parameters:

- `limit` (integer)
- `province` (string)
- `query` (string, required)

### `vn_tax_id_validate` (~77 tokens)

Validate tax ID

Offline validation of a Vietnamese tax ID (mã số thuế): 10 digits (enterprise), 13 digits (branch, e.g. 0100233488-001) with check-digit verification, or 12-digit personal ID (format only). Does not query the tax authority.

Input parameters:

- `taxId` (string, required)

### `vn_id_parse` (~64 tokens)

Parse citizen ID

Offline validation and decoding of a 12-digit CCCD (province, sex, birth year; legacy province mapped to 2025 province) or format check of a 9-digit CMND. Format validity does not prove the identity exists.

Input parameters:

- `id` (string, required)

### `vn_phone` (~65 tokens)

Vietnamese phone number

Normalise a Vietnamese phone number (0/84/+84, old 11-digit 01xx mobile prefixes) to national and E.164 forms and classify it: mobile (original carrier) or landline (area code, province). Offline.

Input parameters:

- `phone` (string, required)

### `vn_name` (~84 tokens)

Vietnamese name tools

Split a Vietnamese full name into họ / tên đệm / tên (handles Tôn Thất, Nguyễn Phúc), plus slug and initials; or sort a list of names by tên with Vietnamese collation.

Input parameters:

- `ascii` (boolean): Strip diacritics from initials
- `name` (string): Full name to split
- `names` (array): Names to sort

### `vn_money_to_words` (~169 tokens)

Amount in Vietnamese words

Read an integer VND amount in Vietnamese words, e.g. 1200000 -> "một triệu hai trăm nghìn đồng". Also reads plain numbers without a unit with plain: true, e.g. 30 -> "ba mươi". Options: thousand "nghìn"/"ngàn", odd "lẻ"/"linh", capitalize, unit.

Input parameters:

- `amount` (number|string, required)
- `capitalize` (boolean)
- `chan` (boolean): Append "chẵn" for round amounts
- `odd` (string)
- `plain` (boolean): Read a plain number without a unit (default false); not with unit/chan
- `thousand` (string)
- `unit` (string): Default "đồng"; "" for none

### `vn_text_speech_normalize` (~77 tokens)

Rewrite text as spoken Vietnamese for TTS

Rewrite numbers, VND amounts (1.250.000đ, 500k), percentages, phone numbers and dd/mm/yyyy dates in text as spoken Vietnamese for text-to-speech. Decimals and partial dates are left unchanged and listed in skipped. Returns text, changes, skipped.

Input parameters:

- `text` (string, required)

### `vn_money_parse` (~59 tokens)

Vietnamese number words to digits

Parse an amount written in Vietnamese words back to digits, e.g. "một triệu hai trăm nghìn đồng" -> "1200000". Returns value (digit string), negative, unit, chan.

Input parameters:

- `text` (string, required)

### `vn_number_format` (~90 tokens)

Vietnamese number formatting and parsing

Format numbers/VND/dates the Vietnamese way (1.234.567,89; 1.200.000 ₫; 1,2 triệu; dd/MM/yyyy) or parse typed amounts ("1tr2", "500k", "1,5 tỷ"; "1.500" = 1500).

Input parameters:

- `mode` (string, required)
- `value` (number|string, required)

### `vn_lunar_from_solar` (~89 tokens)

Solar to lunar date

Convert a Gregorian date (dd/mm/yyyy or yyyy-mm-dd) to the Vietnamese lunar date with can chi (e.g. Ất Tỵ), zodiac, leap-month flag and solar term. Optional hour (0-23) adds hourCanChi, hourBranch, hourRange (giờ sinh).

Input parameters:

- `date` (string, required)
- `hour` (integer)

### `vn_lunar_to_solar` (~63 tokens)

Lunar to solar date

Convert a Vietnamese lunar date to the Gregorian date. Set leap=true for the leap (nhuận) month.

Input parameters:

- `day` (integer, required)
- `leap` (boolean)
- `month` (integer, required)
- `year` (integer, required)

### `vn_lunar_parse_date` (~95 tokens)

Parse Vietnamese date phrase

Turn a Vietnamese date phrase into a solar date: lunar ("rằm tháng Giêng năm sau", "mùng 1 Tết", "23 tháng Chạp"), relative ("ngày mai", "3 ngày nữa", "thứ Sáu tuần sau") or Gregorian. ref (yyyy-mm-dd) defaults to today in UTC+7.

Input parameters:

- `ref` (string)
- `text` (string, required)

### `vn_lunar_month` (~61 tokens)

Lunar month calendar

Calendar of a Gregorian month: each day with lunar date (leap flag, mùng 1, rằm), day can chi, solar term starts and holidays/days off.

Input parameters:

- `month` (integer, required)
- `year` (integer, required)

### `vn_lunar_holidays` (~80 tokens)

Vietnamese holidays

List Vietnamese holidays for a solar year (Tết, Giỗ Tổ Hùng Vương, 30/4, 1/5, 2/9, Trung thu...). Lunar holidays are resolved to solar dates. publicOnly limits to official days off.

Input parameters:

- `publicOnly` (boolean)
- `year` (integer, required)

### `vn_holidays_year` (~120 tokens)

Vietnam official days off for a year

Official days off for public-sector staff in a year (2023-2199): Tết Dương lịch, Tết Âm lịch, Giỗ Tổ Hùng Vương, 30/4, 1/5, Quốc khánh, Ngày Văn hóa Việt Nam 24/11 (from 2026), with nghỉ bù and swapped working Saturdays from the Government notice. Unannounced years return the statutory days, announced: false and the pending Tết / National Day days.

Input parameters:

- `year` (integer, required)

### `vn_holidays_ics` (~92 tokens)

Export Vietnam days off as an iCalendar file

Export the official days off of a year (2023-2199) as iCalendar (RFC 5545) text for Google Calendar, Outlook or Apple Calendar: holidays, nghỉ bù, swapped days and (optionally) working Saturdays. Unannounced years omit pending days and list them in warnings.

Input parameters:

- `includeWorkingSaturdays` (boolean)
- `year` (integer, required)

### `vn_holidays_is_working_day` (~83 tokens)

Is it a working day in Vietnam?

Whether a date is a working day for public-sector staff (Monday-Friday minus holidays and nghỉ bù, plus swapped Saturdays). certain: false when the year is not announced and the date may still become a Tết or National Day day off.

Input parameters:

- `day` (integer, required)
- `month` (integer, required)
- `year` (integer, required)

### `vn_holidays_add_working_days` (~86 tokens)

Add Vietnamese working days

The date n working days after (or before, n < 0) a date, skipping weekends, holidays and nghỉ bù; the start date is not counted. certain: false if unannounced days were crossed.

Input parameters:

- `day` (integer, required)
- `month` (integer, required)
- `n` (integer, required)
- `year` (integer, required)

### `vn_holidays_count_working_days` (~82 tokens)

Count Vietnamese working days

Number of working days in (from, to]: the start date is not counted, the end date is; negative if to is before from. Skips weekends, holidays and nghỉ bù. certain: false if unannounced Tết or National Day days were crossed.

Input parameters:

- `from` (string, required)
- `to` (string, required)

### `vn_einvoice_validate` (~102 tokens)

Validate e-invoice

Validate an e-invoice (hóa đơn điện tử) object against the mandatory contents of Decree 123/2020 (series, date, seller tax ID, lines, VAT rates 0/5/8/10/KCT/KKKNT).

Input parameters:

- `invoice` (object, required): Invoice object: {series, issueDate, seller{name,taxId,address}, buyer{...}, lines[{name,quantity,unitPrice,vatRate}]}

### `vn_einvoice_totals` (~78 tokens)

Compute e-invoice totals

Validate an invoice and compute line amounts, VAT per rate, grand total and the total in Vietnamese words.

Input parameters:

- `invoice` (object, required): Invoice object: {series, issueDate, seller{name,taxId,address}, buyer{...}, lines[{name,quantity,unitPrice,vatRate}]}
- `thousand` (string)

### `vn_einvoice_vat` (~134 tokens)

Apply or split VAT

Apply VAT to a net amount, or with inclusive=true split a VAT-inclusive price (giá đã gồm VAT) into net (tiền hàng) and VAT. Rates 0/5/8/10/KCT/KKKNT. Net is rounded half away from zero and the leftover đồng goes to VAT (library convention).

Input parameters:

- `amount` (number, required): Integer VND amount
- `inclusive` (boolean): true: amount already includes VAT
- `rate` (number|string, required): VAT rate: 0, 5, 8, 10, "KCT" or "KKKNT"

### `vn_einvoice_mock_issue` (~84 tokens)

Issue invoice (mock)

Issue an invoice through the in-memory MOCK provider (no real API, nothing persisted). Useful for testing integrations before wiring MISA/Viettel/VNPT sandbox adapters.

Input parameters:

- `invoice` (object, required): Invoice object: {series, issueDate, seller{name,taxId,address}, buyer{...}, lines[{name,quantity,unitPrice,vatRate}]}

### `vn_lunar_tet` (~48 tokens)

Date of Tết

Solar date of Tết (lunar new year) for a year, with can chi and leap month.

Input parameters:

- `year` (integer, required): Year, e.g. 2026

### `vn_lunar_canchi` (~49 tokens)

Can chi of a year

Can chi (e.g. Giáp Thìn) of a lunar year, with its leap month if any.

Input parameters:

- `year` (integer, required): Year, e.g. 2024

### `vn_tax_id_check_digit` (~42 tokens)

Tax ID check digit

Compute the 10th check digit of a Vietnamese tax ID from its first 9 digits.

Input parameters:

- `first9` (string, required): Exactly 9 digits

### `vn_address_provinces` (~32 tokens)

List provinces

List the 34 current Vietnamese provinces (since 01/07/2025) with ward counts.

### `vn_address_history` (~57 tokens)

Former wards of a current ward

List the pre-01/07/2025 wards (with district and province) that became a current ward, by ward code or name.

Input parameters:

- `province` (string)
- `ward` (string, required): Current ward code or name

### `vn_address_province` (~47 tokens)

Look up a province

Look up one current province by name, alias (e.g. "TP.HCM") or 2-digit code.

Input parameters:

- `query` (string, required): Province name, alias or code

### `vn_einvoice_example` (~20 tokens)

Example e-invoice

Return a valid example invoice object to start from.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/beiryu-vn-skills/vn-skills-mcp#diagnostics

## Score history

- 2026-11-05: 86
- 2026-11-04: 86
- 2026-11-03: 86
- 2026-11-02: 85
- 2026-11-01: 85
- 2026-10-31: 84
- 2026-10-30: 69
- 2026-10-29: 81
- 2026-10-28: 81
- 2026-10-27: 80
- 2026-10-26: 80
- 2026-10-25: 80
- 2026-10-24: 79
- 2026-10-23: 64

## Common questions

### What is the vn-skills MCP server?

vn-skills is an MCP server listed in the public MCP registry as io.github.beiryu/vn-skills. Vietnam: VietQR, address, tax ID, CCCD, phone, holiday, names, number/date format, lunar, e-invoice. This page covers its npm package (@vn-skills/mcp).

### Is the vn-skills MCP server safe to use?

vn-skills scores 86 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 vn-skills MCP server expose?

vn-skills exposes 37 tools: vietqr_build, vietqr_parse, vietqr_decode, vietqr_banks, vn_address_parse, and 32 more. Their descriptions and schemas cost roughly 3,006 tokens of context every time the server is loaded.

### Is the vn-skills MCP server still maintained?

vn-skills 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.

### What licence is the vn-skills MCP server under?

vn-skills declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the vn-skills MCP server?

VerifyMCP ran 17 checks on vn-skills, covering Malware scan, Known CVEs, Install scripts, Dependency health and 13 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/@vn-skills/mcp
- Socket report: https://socket.dev/npm/package/@vn-skills/mcp
- Repository: https://github.com/beiryu/vn-skills
- Changelog RSS feed: https://verifymcp.io/servers/beiryu-vn-skills/vn-skills-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/beiryu-vn-skills/vn-skills-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/beiryu-vn-skills/vn-skills-mcp.json
- HTML version of this page: https://verifymcp.io/servers/beiryu-vn-skills/vn-skills-mcp
