Back to Browse

Vn Skills MCP Server

by Beiryu
Developer ToolsLow Risk9.7MCP RegistryLocal
Free

Server data from the Official MCP Registry

Vietnam tools: VietQR, addresses, tax IDs, CCCD, holidays, money in words, lunar calendar, e-invoice

About

Vietnam tools: VietQR, addresses, tax IDs, CCCD, holidays, money in words, lunar calendar, e-invoice

Security Report

9.7
Low Risk9.7Low Risk

Valid MCP server (3 strong, 3 medium validity signals). No known CVEs in dependencies. ⚠️ Package registry links to a different repository than scanned source. Imported from the Official MCP Registry. 1 finding(s) downgraded by scanner intelligence.

13 files analyzed · 1 issue found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

file_system

Check that this permission is expected for this type of plugin.

HTTP Network Access

Connects to external APIs or services over the internet.

How to Install

Add this to your MCP configuration file:

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

Documentation

View on GitHub

From the project's GitHub README.

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, codex, agents or copilot (.github/skills/, or ~/.copilot/skills/ with --global). 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. .agents/skills/ is read by Codex (docs), Cursor (docs), Gemini CLI (docs) and GitHub Copilot in VS Code, Copilot CLI and the cloud agent (docs); install there with --agent agents. For the Copilot cloud agent, install in project scope (--agent agents without --global), because the cloud agent does not load personal skills.

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.

Reviews

No reviews yet

Be the first to review this server!