vn-skills

Official registry Finance and payments

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

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

NPM package @vn-skills/mcp
Claude Code
claude mcp add vn-skills -- npx -y @vn-skills/mcp@0.7.0
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "vn-skills": {
            "command": "npx",
            "args": [
                "-y",
                "@vn-skills/mcp@0.7.0"
            ]
        }
    }
}

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. vn-skills
  2. Skills
  3. Install the skills
  4. MCP server
  5. Library
  6. Development
  7. Roadmap
  8. Community
  9. Disclaimer
  10. License

vn-skills

Teach your AI agent to work with VietQR, e-invoices, the new 34-province addresses and more — with one command.

Tiếng Việt · 5-minute quickstart

Coding agents (Claude Code, Codex, Cursor, …) get Vietnam-specific tasks wrong: they invent bank BINs, use the pre-2025 provinces and districts, misread amounts in words, or confuse the Chinese and Vietnamese lunar calendars. vn-skills fixes that with three layers built on one offline core:

LayerWhatInstall
Agent Skillsskills/*/SKILL.md following the Agent Skills speccopy a folder into your agent's skills directory
CLI@vn-skills/cli — npx -y @vn-skills/cli … (JSON output for agents)nothing; the skills call it
MCP server@vn-skills/mcp — the same functions as MCP toolsclaude mcp add vn-skills -- npx -y @vn-skills/mcp
Library@vn-skills/core — pure TypeScript, no network, data bundlednpm i @vn-skills/core

What it is: an offline toolkit. No accounts or API keys; it builds, parses and validates VietQR payloads and images. What it is not: a payment gateway. It does not collect payments or confirm transfers, and never calls bank or NAPAS APIs; pair it with a payment gateway for that.

Skills

SkillDoesExample
vietqrBuild/parse VietQR (NAPAS 247, EMVCo) payloads, CRC16, PNG/SVG, bank BIN lookupvn-skills vietqr build --bank VCB --account 0011001234567 --amount 500000 --note "don 123" --out qr.png
vn-addressParse/normalise addresses; convert 63-province + district addresses to the 34-province, 2-level structure (01/07/2025)vn-skills address convert "P. Bến Nghé, Q.1, TP.HCM" → Phường Sài Gòn, Thành phố Hồ Chí Minh
vn-tax-idValidate tax IDs (10 / 13 digits, check digit, branch suffix; 12-digit personal ID) offlinevn-skills taxid validate 0100233488-001
vn-idValidate/decode 12-digit CCCD (province, sex, birth year) and check 9-digit CMND format offlinevn-skills id parse 048090123456
vn-phoneNormalise phone numbers (+84, old 11-digit prefixes), carrier by prefix, landline area codesvn-skills phone 0912345678
vn-holidaysOfficial days off per year (announced notices, nghỉ bù, swaps), working-day check and add N working daysvn-skills holidays add 2026-02-12 3
vn-money-wordsAmount → Vietnamese words (nghìn/ngàn, lẻ/linh, mốt/lăm/tư, tỷ tỷ)vn-skills money words 1200000 → một triệu hai trăm nghìn đồng
vn-lunarSolar ↔ lunar, leap months, can chi, Tết, holidays (Meeus astronomical algorithms, UTC+7)vn-skills lunar tet 2027 → 2027-02-06 Đinh Mùi
vn-einvoiceE-invoice schema validation, VAT/totals, amount in words, mock provider; MISA/Viettel/VNPT adapter skeletonsvn-skills einvoice example > invoice.json && vn-skills einvoice totals invoice.json
vn-nameSplit họ / tên đệm / tên, compound surnames, Vietnamese collation sort, unaccented slugs and initialsvn-skills name split "Tôn Thất Tùng"
vn-number-formatFormat/parse Vietnamese numbers, ₫ amounts and dd/MM/yyyy dates; parse "1tr2", "500k", "1,5 tỷ"vn-skills numfmt parse "1tr2" → 1200000

Bulk-convert stored addresses (one per line → NDJSON, or a CSV column; exit code 2 if some rows fail):

vn-skills address convert-file addresses.txt
vn-skills address convert-file customers.csv --csv --column address > converted.csv

Install the skills

Claude Code plugin (all skills + the MCP server, one command):

/plugin marketplace add beiryu/vn-skills
/plugin install vn-skills@vn-skills

Claude Code (project or user scope):

git clone https://github.com/beiryu/vn-skills
cp -r vn-skills/skills/vietqr ~/.claude/skills/          # or .claude/skills/ inside your project

Then ask: "tạo QR chuyển 500k vào VCB số tài khoản 0011001234567" → Claude runs the skill and returns qr.png.

Or use the CLI (skills are bundled in the package):

npx -y @vn-skills/cli install vietqr --agent claude            # .claude/skills/vietqr (project)
npx -y @vn-skills/cli install all --agent cursor --global      # ~/.cursor/skills/*

--agent is claude, cursor or codex. Existing folders are not overwritten without --force; --dry-run prints the actions only.

Cursor / Codex / other agents: copy the same folders into the agent's skills directory (.cursor/skills/, .codex/skills/, or wherever your agent discovers SKILL.md). The skills only need Node.js 22+ because they call npx -y @vn-skills/cli.

Inside this repository run node packages/cli/dist/index.js … instead of npx -y @vn-skills/cli … to get clean JSON. pnpm vn-skills … also works but adds wrapper output (the echoed command and [ELIFECYCLE] on failures).

MCP server

claude mcp add vn-skills -- npx -y @vn-skills/mcp

Setup for other clients is in MCP client setup. Or in any MCP client config:

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

The server exposes 28 tools, grouped by skill:

SkillTools
vietqrvietqr_build, vietqr_parse, vietqr_decode, vietqr_banks
vn-addressvn_address_parse, vn_address_convert, vn_address_search_wards, vn_address_provinces, vn_address_province
vn-tax-idvn_tax_id_validate, vn_tax_id_check_digit
vn-idvn_id_parse
vn-phonevn_phone
vn-holidaysvn_holidays_year, vn_holidays_is_working_day, vn_holidays_add_working_days
vn-money-wordsvn_money_to_words
vn-lunarvn_lunar_from_solar, vn_lunar_to_solar, vn_lunar_holidays, vn_lunar_tet, vn_lunar_canchi
vn-einvoicevn_einvoice_validate, vn_einvoice_totals, vn_einvoice_mock_issue, vn_einvoice_example
vn-namevn_name
vn-number-formatvn_number_format
MCP client setup

Requires Node.js 22+. Each client has its own file and shape; check the linked docs for the exact location.

Claude Code:

claude mcp add vn-skills -- npx -y @vn-skills/mcp

Claude Desktop — claude_desktop_config.json:

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

Cursor — .cursor/mcp.json (project) or ~/.cursor/mcp.json (global), same mcpServers shape:

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

VS Code — .vscode/mcp.json (top-level servers, not mcpServers):

{
  "servers": {
    "vn-skills": { "type": "stdio", "command": "npx", "args": ["-y", "@vn-skills/mcp"] }
  }
}

Codex — ~/.codex/config.toml:

[mcp_servers.vn-skills]
command = "npx"
args = ["-y", "@vn-skills/mcp"]

Other clients: use the generic mcpServers block above.

Library

import {
  buildVietQR,
  convertAddress,
  validateTaxId,
  moneyToWords,
  lunarInfo,
  computeTotals,
} from '@vn-skills/core';

buildVietQR({ bank: 'VCB', account: '0011001234567', amount: 500000, note: 'don 123' }).payload;
convertAddress('12 Nguyễn Huệ, P. Bến Nghé, Q.1, TP.HCM').new.formatted; // "12 Nguyễn Huệ, Phường Sài Gòn, Thành phố Hồ Chí Minh"
validateTaxId('0100233488-001').kind; // "branch"
moneyToWords(1_200_000).words; // "một triệu hai trăm nghìn đồng"
lunarInfo(29, 1, 2025).text; // "Mùng 1 tháng Giêng năm Ất Tỵ"

Every function returns { ok: true, ... } or { ok: false, error: { code, message, hint } } — no exceptions for bad input.

Development

pnpm install && pnpm build && pnpm test
pnpm build-data          # refresh bundled datasets from pinned upstream commits (network)

Data sources, licenses and dates are listed in packages/core/data/SOURCES.md. See CONTRIBUTING.md.

Roadmap

Next up: a Python port and real e-invoice sandbox adapters. Full list with acceptance criteria: ROADMAP.md.

Community

Contributing · Governance · Code of Conduct · Security · Name & brand policy · Sponsor

Disclaimer

This project provides technical tooling only. It is not tax, legal or accounting advice, does not query or scrape any government system, and does not guarantee that a tax ID is registered or that an address is accepted by a carrier. Verify with the competent authority where it matters.

VietQR and NAPAS are trademarks of the National Payment Corporation of Vietnam (NAPAS); bank names belong to their owners. vn-skills is not affiliated with, endorsed by or certified by NAPAS, any bank or any Vietnamese authority.

License

MIT. Bundled data is derived from MIT-licensed community datasets (see SOURCES.md and their licences in THIRD_PARTY_NOTICES.md); the lunar calendar is an independent implementation of the formulas in Jean Meeus, Astronomical Algorithms.

Frequently asked questions

What is vn-skills?

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

How do I install vn-skills?

It runs on your machine. In Claude Code: claude mcp add vn-skills -- npx -y @vn-skills/mcp@0.7.0. For other clients, paste the JSON configuration from this page into their MCP settings.

Does vn-skills need an API key?

Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.

Is vn-skills open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains vn-skills?

It is published by beiryu. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.