vn-skills

io.github.beiryuPublished by GitHub account beiryuv0.8.0Updated Nov 6, 2026

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

Overview

AI-generated overview

Offline Vietnamese data toolkit: builds and decodes VietQR codes, parses addresses, validates tax IDs and e-invoices, and handles lunar dates and holidays.

What you can do
  • Build, parse and decode VietQR bank-transfer QR payloads, and search the NAPAS bank list
  • Parse Vietnamese free-text addresses, convert pre-2025 addresses to the new two-level structure, and look up provinces and wards
  • Validate Vietnamese tax IDs and CCCD/CMND numbers, normalise phone numbers, and split or sort personal names
  • Convert VND amounts to and from Vietnamese words, format numbers and dates, and rewrite text for speech
  • Convert between solar and lunar dates, resolve Vietnamese date phrases, and list holidays, working days and iCalendar exports
  • Validate e-invoices against Decree 123/2020, compute VAT and totals, and issue mock invoices
When to use it
Useful when an assistant works with Vietnamese business or personal data: generating payment QR codes, cleaning or migrating address lists after the 2025 administrative change, checking tax IDs and invoices, or scheduling around Vietnamese holidays and lunar dates.
Requirements
Runs locally over stdio, typically started with npx from the @vn-skills/mcp npm package, so Node.js and network access for the first install are needed. No accounts, API keys or environment variables are declared.
Before you install
Most tools are offline and do not query authorities, so validation results do not prove an ID, tax number or address is real. The mock e-invoice tool issues nothing real and persists nothing. Address conversion and batch tools return mapping results that should be reviewed before use.

Installation

In SourceWeft

  1. Open vn-skills in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@vn-skills/mcp

MCP server (stdio) exposing the vn-skills functions as tools.

bash
claude mcp add vn-skills -- npx -y @vn-skills/mcp
json
{ "mcpServers": { "vn-skills": { "command": "npx", "args": ["-y", "@vn-skills/mcp"] } } }

Tools: vietqr_build, vietqr_parse, vietqr_decode, vietqr_banks, vn_address_parse, vn_address_convert, vn_address_search_wards, vn_tax_id_validate, vn_money_to_words, vn_lunar_from_solar, vn_lunar_to_solar, vn_lunar_holidays, vn_einvoice_validate, vn_einvoice_totals, vn_einvoice_mock_issue, vn_name.

Source: packages/mcp/README.md at commit ab515bc

Tools

37

vietqr_build

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).

Parametersbankrequirednoteimageamountaccountrequired

vietqr_parse

Parse VietQR

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

Parameterspayloadrequired

vietqr_decode

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.

Parameterspathrequired

vietqr_banks

Search banks

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

Parametersquery

vn_address_parse

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.

Parametersmodetextrequired

vn_address_convert_batch

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.

Parametersaddressesrequired

vn_address_convert

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).

Parameterstextwardstreetdistrictprovince

vn_address_search_wards

Search wards

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

Parameterslimitqueryrequiredprovince

vn_tax_id_validate

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.

ParameterstaxIdrequired

vn_id_parse

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.

Parametersidrequired

vn_phone

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.

Parametersphonerequired

vn_name

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.

Parametersnameasciinames

vn_money_to_words

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.

Parametersoddchanunitplainamountrequiredthousandcapitalize

vn_text_speech_normalize

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.

Parameterstextrequired

vn_money_parse

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.

Parameterstextrequired

vn_number_format

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).

Parametersmoderequiredvaluerequired

vn_lunar_from_solar

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).

Parametersdaterequiredhour

vn_lunar_to_solar

Lunar to solar date

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

Parametersdayrequiredleapyearrequiredmonthrequired

vn_lunar_parse_date

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.

Parametersreftextrequired

vn_lunar_month

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.

Parametersyearrequiredmonthrequired

vn_lunar_holidays

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.

ParametersyearrequiredpublicOnly

vn_holidays_year

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.

Parametersyearrequired

vn_holidays_ics

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.

ParametersyearrequiredincludeWorkingSaturdays

vn_holidays_is_working_day

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.

Parametersdayrequiredyearrequiredmonthrequired

vn_holidays_add_working_days

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.

Parametersnrequireddayrequiredyearrequiredmonthrequired

vn_holidays_count_working_days

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.

Parameterstorequiredfromrequired

vn_einvoice_validate

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).

Parametersinvoicerequired

vn_einvoice_totals

Compute e-invoice totals

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

Parametersinvoicerequiredthousand

vn_einvoice_vat

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).

Parametersraterequiredamountrequiredinclusive

vn_einvoice_mock_issue

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.

Parametersinvoicerequired

vn_lunar_tet

Date of Tết

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

Parametersyearrequired

vn_lunar_canchi

Can chi of a year

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

Parametersyearrequired

vn_tax_id_check_digit

Tax ID check digit

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

Parametersfirst9required

vn_address_provinces

List provinces

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

Takes no parameters.

vn_address_history

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.

Parameterswardrequiredprovince

vn_address_province

Look up a province

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

Parametersqueryrequired

vn_einvoice_example

Example e-invoice

Return a valid example invoice object to start from.

Takes no parameters.

Version history

3
  1. v0.8.0LatestOct 30, 2026
  2. v0.7.0Oct 25, 2026
  3. v0.6.0Oct 23, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts