@qinisolabs/qiniso 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  *Verified, trustworthy data tools for AI agents. "Qiniso" means "truth" in Zulu.*
10
10
 
11
- [Website](https://qinisolabs.github.io/qiniso/) · [GitHub](https://github.com/qinisolabs/qiniso) · [MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=qiniso)
11
+ [Website](https://qinisolabs.github.io/qiniso/) · [npm](https://www.npmjs.com/package/@qinisolabs/qiniso) · [GitHub](https://github.com/qinisolabs/qiniso) · [MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=qiniso)
12
12
 
13
13
  </div>
14
14
 
@@ -48,7 +48,7 @@ https://qiniso.qinisolabs.workers.dev/mcp
48
48
 
49
49
  Or run it locally over stdio: `npx -p @qinisolabs/qiniso qiniso-mcp`.
50
50
 
51
- ## What it verifies — 37 tools across 8 domains
51
+ ## What it verifies — 47 tools across 8 domains
52
52
 
53
53
  | Domain | Checks |
54
54
  | --- | --- |
@@ -56,7 +56,7 @@ Or run it locally over stdio: `npx -p @qinisolabs/qiniso qiniso-mcp`.
56
56
  | **Web / network** | TLD & domain (IANA root zone), IP, UUID, URL, email |
57
57
  | **Finance** | ISIN, CUSIP, SEDOL, LEI, US ABA routing |
58
58
  | **Crypto** | Ethereum (EIP-55), Bitcoin (Base58Check / Bech32) addresses |
59
- | **National & tax IDs** | Brazil CPF/CNPJ, South Africa ID, Spain DNI/NIE, India Aadhaar, EU/UK VAT |
59
+ | **National & tax IDs** | Brazil CPF/CNPJ, South Africa ID, Spain DNI/NIE, India Aadhaar, Italy Codice Fiscale, Poland PESEL, Netherlands BSN, Belgium NRN, Sweden personnummer, Norway fødselsnummer, Finland HETU, Portugal NIF, Turkey TCKN, China Resident ID, EU/UK VAT |
60
60
  | **Academic** | ISBN-10, ISSN, ORCID |
61
61
  | **Locale** | Phone (global), date parsing, currency, holidays (~200 countries), UK VAT-by-date |
62
62
  | **Addresses** | UK/US address parsing |
@@ -1336,6 +1336,225 @@ function validateAadhaar(input) {
1336
1336
  return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (Verhoeff)."] };
1337
1337
  }
1338
1338
 
1339
+ // ../national-id/dist/italy.js
1340
+ var ODD = [1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23];
1341
+ var cval = (c) => c >= "0" && c <= "9" ? c.charCodeAt(0) - 48 : c.charCodeAt(0) - 65;
1342
+ function validateCodiceFiscale(input) {
1343
+ const s = input.toUpperCase().replace(/\s/g, "");
1344
+ const base = {
1345
+ input,
1346
+ normalized: s,
1347
+ valid: false,
1348
+ country: "IT",
1349
+ idType: "Codice Fiscale",
1350
+ errors: []
1351
+ };
1352
+ if (!/^[A-Z0-9]{15}[A-Z]$/.test(s)) {
1353
+ return { ...base, errors: ["Codice Fiscale must be 15 alphanumerics followed by a letter check character."] };
1354
+ }
1355
+ let sum = 0;
1356
+ for (let i = 0; i < 15; i++) {
1357
+ const v = cval(s[i]);
1358
+ sum += i % 2 === 0 ? ODD[v] : v;
1359
+ }
1360
+ const expected = String.fromCharCode(65 + sum % 26);
1361
+ const ok = expected === s[15];
1362
+ return { ...base, valid: ok, errors: ok ? [] : [`Check character failed (mod-26): expected '${expected}'.`] };
1363
+ }
1364
+
1365
+ // ../national-id/dist/poland.js
1366
+ function validatePesel(input) {
1367
+ const clean = input.replace(/\D/g, "");
1368
+ const base = { input, normalized: clean, valid: false, country: "PL", idType: "PESEL", errors: [] };
1369
+ if (clean.length !== 11)
1370
+ return { ...base, errors: ["PESEL must be 11 digits."] };
1371
+ const d = clean.split("").map(Number);
1372
+ const w = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];
1373
+ let sum = 0;
1374
+ for (let i = 0; i < 10; i++)
1375
+ sum += w[i] * d[i];
1376
+ const check = (10 - sum % 10) % 10;
1377
+ const ok = check === d[10];
1378
+ return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (PESEL weighted mod-10)."] };
1379
+ }
1380
+
1381
+ // ../national-id/dist/netherlands.js
1382
+ function validateBsn(input) {
1383
+ let clean = input.replace(/\D/g, "");
1384
+ if (clean.length === 8)
1385
+ clean = "0" + clean;
1386
+ const base = { input, normalized: clean, valid: false, country: "NL", idType: "BSN", errors: [] };
1387
+ if (!/^\d{9}$/.test(clean))
1388
+ return { ...base, errors: ["BSN must be 8 or 9 digits."] };
1389
+ const d = clean.split("").map(Number);
1390
+ if (d.every((x) => x === 0))
1391
+ return { ...base, errors: ["Invalid BSN (all zeros)."] };
1392
+ let sum = 0;
1393
+ for (let i = 0; i < 8; i++)
1394
+ sum += (9 - i) * d[i];
1395
+ sum -= d[8];
1396
+ const ok = sum % 11 === 0;
1397
+ return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (BSN 11-test)."] };
1398
+ }
1399
+
1400
+ // ../national-id/dist/belgium.js
1401
+ function validateBeNrn(input) {
1402
+ const clean = input.replace(/\D/g, "");
1403
+ const base = {
1404
+ input,
1405
+ normalized: clean,
1406
+ valid: false,
1407
+ country: "BE",
1408
+ idType: "National Register Number",
1409
+ errors: []
1410
+ };
1411
+ if (clean.length !== 11)
1412
+ return { ...base, errors: ["Belgian NRN must be 11 digits."] };
1413
+ const d = clean.split("").map(Number);
1414
+ const last2 = d[9] * 10 + d[10];
1415
+ const baseNum = Number(clean.slice(0, 9));
1416
+ const c19 = 97 - baseNum % 97;
1417
+ const c20 = 97 - (2e9 + baseNum) % 97;
1418
+ const ok = last2 === c19 || last2 === c20;
1419
+ return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (NRN mod-97)."] };
1420
+ }
1421
+
1422
+ // ../national-id/dist/portugal.js
1423
+ function validateNifPt(input) {
1424
+ const clean = input.replace(/\D/g, "");
1425
+ const base = { input, normalized: clean, valid: false, country: "PT", idType: "NIF", errors: [] };
1426
+ if (clean.length !== 9)
1427
+ return { ...base, errors: ["Portuguese NIF must be 9 digits."] };
1428
+ const d = clean.split("").map(Number);
1429
+ let sum = 0;
1430
+ for (let i = 0; i < 8; i++)
1431
+ sum += d[i] * (9 - i);
1432
+ const r = sum % 11;
1433
+ const check = r < 2 ? 0 : 11 - r;
1434
+ const ok = check === d[8];
1435
+ return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (NIF mod-11)."] };
1436
+ }
1437
+
1438
+ // ../national-id/dist/turkey.js
1439
+ function validateTckn(input) {
1440
+ const clean = input.replace(/\D/g, "");
1441
+ const base = { input, normalized: clean, valid: false, country: "TR", idType: "TCKN", errors: [] };
1442
+ if (clean.length !== 11)
1443
+ return { ...base, errors: ["TCKN must be 11 digits."] };
1444
+ const d = clean.split("").map(Number);
1445
+ if (d[0] === 0)
1446
+ return { ...base, errors: ["TCKN cannot start with 0."] };
1447
+ const odd = d[0] + d[2] + d[4] + d[6] + d[8];
1448
+ const even = d[1] + d[3] + d[5] + d[7];
1449
+ const d10 = ((odd * 7 - even) % 10 + 10) % 10;
1450
+ let sum = 0;
1451
+ for (let i = 0; i < 10; i++)
1452
+ sum += d[i];
1453
+ const d11 = sum % 10;
1454
+ const ok = d10 === d[9] && d11 === d[10];
1455
+ return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (TCKN check digits)."] };
1456
+ }
1457
+
1458
+ // ../national-id/dist/china.js
1459
+ function validateChinaRic(input) {
1460
+ const s = input.toUpperCase().replace(/\s/g, "");
1461
+ const base = {
1462
+ input,
1463
+ normalized: s,
1464
+ valid: false,
1465
+ country: "CN",
1466
+ idType: "Resident Identity Card",
1467
+ errors: []
1468
+ };
1469
+ if (!/^\d{17}[0-9X]$/.test(s)) {
1470
+ return { ...base, errors: ["Chinese ID must be 17 digits followed by a check character (0-9 or X)."] };
1471
+ }
1472
+ const w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
1473
+ const map = "10X98765432";
1474
+ let sum = 0;
1475
+ for (let i = 0; i < 17; i++)
1476
+ sum += w[i] * (s.charCodeAt(i) - 48);
1477
+ const expected = map[sum % 11];
1478
+ const ok = expected === s[17];
1479
+ return { ...base, valid: ok, errors: ok ? [] : [`Check character failed (ISO 7064 MOD 11-2): expected '${expected}'.`] };
1480
+ }
1481
+
1482
+ // ../national-id/dist/nordics.js
1483
+ function validatePersonnummer(input) {
1484
+ const digits2 = input.replace(/[+\-\s]/g, "");
1485
+ const base = {
1486
+ input,
1487
+ normalized: digits2,
1488
+ valid: false,
1489
+ country: "SE",
1490
+ idType: "Personnummer",
1491
+ errors: []
1492
+ };
1493
+ if (!/^\d{10}$|^\d{12}$/.test(digits2))
1494
+ return { ...base, errors: ["Personnummer must be 10 or 12 digits."] };
1495
+ const ten = digits2.length === 12 ? digits2.slice(2) : digits2;
1496
+ const d = ten.split("").map(Number);
1497
+ let sum = 0;
1498
+ let dbl = true;
1499
+ for (let i = 0; i < 10; i++) {
1500
+ let x = d[i];
1501
+ if (dbl) {
1502
+ x *= 2;
1503
+ if (x > 9)
1504
+ x -= 9;
1505
+ }
1506
+ sum += x;
1507
+ dbl = !dbl;
1508
+ }
1509
+ const ok = sum % 10 === 0;
1510
+ return { ...base, valid: ok, errors: ok ? [] : ["Checksum failed (Luhn)."] };
1511
+ }
1512
+ function validateFodselsnummer(input) {
1513
+ const clean = input.replace(/\D/g, "");
1514
+ const base = {
1515
+ input,
1516
+ normalized: clean,
1517
+ valid: false,
1518
+ country: "NO",
1519
+ idType: "F\xF8dselsnummer",
1520
+ errors: []
1521
+ };
1522
+ if (clean.length !== 11)
1523
+ return { ...base, errors: ["F\xF8dselsnummer must be 11 digits."] };
1524
+ const d = clean.split("").map(Number);
1525
+ const w1 = [3, 7, 6, 1, 8, 9, 4, 5, 2];
1526
+ let s1 = 0;
1527
+ for (let i = 0; i < 9; i++)
1528
+ s1 += w1[i] * d[i];
1529
+ let k1 = 11 - s1 % 11;
1530
+ if (k1 === 11)
1531
+ k1 = 0;
1532
+ if (k1 === 10 || k1 !== d[9])
1533
+ return { ...base, errors: ["First control digit failed (mod-11)."] };
1534
+ const w2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
1535
+ let s2 = 0;
1536
+ for (let i = 0; i < 9; i++)
1537
+ s2 += w2[i] * d[i];
1538
+ s2 += w2[9] * k1;
1539
+ let k2 = 11 - s2 % 11;
1540
+ if (k2 === 11)
1541
+ k2 = 0;
1542
+ const ok = k2 !== 10 && k2 === d[10];
1543
+ return { ...base, valid: ok, errors: ok ? [] : ["Second control digit failed (mod-11)."] };
1544
+ }
1545
+ var HETU = "0123456789ABCDEFHJKLMNPRSTUVWXY";
1546
+ function validateHetu(input) {
1547
+ const s = input.toUpperCase().trim();
1548
+ const base = { input, normalized: s, valid: false, country: "FI", idType: "Henkil\xF6tunnus", errors: [] };
1549
+ const m = s.match(/^(\d{6})([+\-A-FYXWVU])(\d{3})([0-9A-Y])$/);
1550
+ if (!m)
1551
+ return { ...base, errors: ["HETU must be DDMMYY + century sign + 3 digits + check character."] };
1552
+ const num = Number(m[1] + m[3]);
1553
+ const expected = HETU[num % 31];
1554
+ const ok = expected === m[4];
1555
+ return { ...base, valid: ok, errors: ok ? [] : [`Check character failed (mod-31): expected '${expected}'.`] };
1556
+ }
1557
+
1339
1558
  // ../academic/dist/isbn10.js
1340
1559
  function validateIsbn10(input) {
1341
1560
  const s = input.replace(/[\s-]/g, "").toUpperCase();
@@ -2014,6 +2233,76 @@ var TOOLS = [
2014
2233
  argDescription: "The 12-digit Aadhaar number (spaces ignored).",
2015
2234
  run: (v) => validateAadhaar(v)
2016
2235
  },
2236
+ {
2237
+ name: "validate_codice_fiscale",
2238
+ description: "USE THIS to verify an Italian Codice Fiscale (personal tax code) before relying on it \u2014 do not guess the final check letter. Checks the 16-character format and the mod-26 check character. Validates structure only; does NOT confirm the code is registered with the Agenzia delle Entrate.",
2239
+ argName: "code",
2240
+ argDescription: "The 16-character Codice Fiscale (spaces ignored, case-insensitive).",
2241
+ run: (v) => validateCodiceFiscale(v)
2242
+ },
2243
+ {
2244
+ name: "validate_pesel",
2245
+ description: "USE THIS to verify a Polish PESEL (national identification number) before relying on it \u2014 never assume 11 digits are valid. Checks the weighted mod-10 check digit. Call this for KYC/onboarding of Polish individuals.",
2246
+ argName: "pesel",
2247
+ argDescription: "The 11-digit PESEL (spaces/dashes ignored).",
2248
+ run: (v) => validatePesel(v)
2249
+ },
2250
+ {
2251
+ name: "validate_bsn",
2252
+ description: "USE THIS to verify a Dutch BSN (burgerservicenummer / citizen service number) before relying on it. Checks the 8\u20139 digit form and the '11-test' (elfproef) checksum. Validates structure only; does NOT confirm the number is issued.",
2253
+ argName: "bsn",
2254
+ argDescription: "The 8- or 9-digit BSN (spaces/dots ignored).",
2255
+ run: (v) => validateBsn(v)
2256
+ },
2257
+ {
2258
+ name: "validate_be_nrn",
2259
+ description: "USE THIS to verify a Belgian National Register Number (Rijksregisternummer / Num\xE9ro de Registre National) before relying on it. Checks the 11-digit form and the mod-97 check (handling the born-from-2000 rule). Validates structure only.",
2260
+ argName: "nrn",
2261
+ argDescription: "The 11-digit Belgian National Register Number (punctuation ignored).",
2262
+ run: (v) => validateBeNrn(v)
2263
+ },
2264
+ {
2265
+ name: "validate_personnummer",
2266
+ description: "USE THIS to verify a Swedish personnummer (personal identity number) before relying on it \u2014 never assume the digits are valid. Accepts the 10- or 12-digit form and checks the Luhn check digit. Validates structure only; does NOT confirm the number is registered.",
2267
+ argName: "personnummer",
2268
+ argDescription: "The Swedish personnummer (10 or 12 digits; +/-/spaces ignored).",
2269
+ run: (v) => validatePersonnummer(v)
2270
+ },
2271
+ {
2272
+ name: "validate_fodselsnummer",
2273
+ description: "USE THIS to verify a Norwegian f\xF8dselsnummer (national identity number) before relying on it. Checks the 11-digit form and both mod-11 control digits. Validates structure only; does NOT confirm the number is registered.",
2274
+ argName: "fodselsnummer",
2275
+ argDescription: "The 11-digit Norwegian f\xF8dselsnummer (spaces ignored).",
2276
+ run: (v) => validateFodselsnummer(v)
2277
+ },
2278
+ {
2279
+ name: "validate_hetu",
2280
+ description: "USE THIS to verify a Finnish henkil\xF6tunnus (HETU / personal identity code) before relying on it \u2014 do not guess the check character. Checks the DDMMYY + century sign + individual number + mod-31 check character. Validates structure only.",
2281
+ argName: "hetu",
2282
+ argDescription: "The Finnish HETU, e.g. 131052-308T (case-insensitive).",
2283
+ run: (v) => validateHetu(v)
2284
+ },
2285
+ {
2286
+ name: "validate_nif_pt",
2287
+ description: "USE THIS to verify a Portuguese NIF (N\xFAmero de Identifica\xE7\xE3o Fiscal / tax number) before invoicing or onboarding \u2014 never assume 9 digits are valid. Checks the mod-11 check digit. For the Spanish tax ID use validate_dni.",
2288
+ argName: "nif",
2289
+ argDescription: "The 9-digit Portuguese NIF (spaces ignored).",
2290
+ run: (v) => validateNifPt(v)
2291
+ },
2292
+ {
2293
+ name: "validate_tckn",
2294
+ description: "USE THIS to verify a Turkish T.C. Kimlik No (TCKN / national identity number) before relying on it \u2014 never assume 11 digits are valid. Checks both algorithmic check digits and the leading-digit rule. Validates structure only; does NOT confirm the number is registered.",
2295
+ argName: "tckn",
2296
+ argDescription: "The 11-digit TCKN (spaces ignored).",
2297
+ run: (v) => validateTckn(v)
2298
+ },
2299
+ {
2300
+ name: "validate_china_ric",
2301
+ description: "USE THIS to verify a Chinese Resident Identity Card number (\u5C45\u6C11\u8EAB\u4EFD\u8BC1) before relying on it \u2014 do not guess the check character. Checks the 18-character form and the ISO 7064 MOD 11-2 check character (which may be 'X'). Validates structure only; does NOT confirm the number is registered.",
2302
+ argName: "id",
2303
+ argDescription: "The 18-character Chinese Resident ID (17 digits + check 0-9 or X).",
2304
+ run: (v) => validateChinaRic(v)
2305
+ },
2017
2306
  {
2018
2307
  name: "validate_isbn10",
2019
2308
  description: "USE THIS to verify an ISBN-10 (older book identifier) instead of trusting 10 characters. Checks the mod-11 check digit (which may be 'X'). For 13-digit ISBNs use validate_isbn.",
@@ -2109,7 +2398,7 @@ var TOOLS = [
2109
2398
  runArgs: (a) => validateVat(a.vat ?? "", a.country)
2110
2399
  }
2111
2400
  ];
2112
- var SERVER_INFO = { name: "qiniso", version: "0.3.0" };
2401
+ var SERVER_INFO = { name: "qiniso", version: "0.4.0" };
2113
2402
  var DEFAULT_PROTOCOL = "2025-06-18";
2114
2403
  function argList(t) {
2115
2404
  return t.args ?? [{ name: t.argName, description: t.argDescription }];
@@ -2227,6 +2516,16 @@ export {
2227
2516
  verhoeffValid,
2228
2517
  verhoeffGenerate,
2229
2518
  validateAadhaar,
2519
+ validateCodiceFiscale,
2520
+ validatePesel,
2521
+ validateBsn,
2522
+ validateBeNrn,
2523
+ validateNifPt,
2524
+ validateTckn,
2525
+ validateChinaRic,
2526
+ validatePersonnummer,
2527
+ validateFodselsnummer,
2528
+ validateHetu,
2230
2529
  validateIsbn10,
2231
2530
  validateIssn,
2232
2531
  validateOrcid,
package/dist/http.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  LOGO_SVG,
4
4
  handleRpc
5
- } from "./chunk-LVM6GAIC.js";
5
+ } from "./chunk-RMLPG7ZB.js";
6
6
 
7
7
  // src/http.ts
8
8
  import { createServer } from "http";
package/dist/index.d.ts CHANGED
@@ -25,7 +25,7 @@ interface ToolSpec {
25
25
  declare const TOOLS: ToolSpec[];
26
26
  declare const SERVER_INFO: {
27
27
  readonly name: "qiniso";
28
- readonly version: "0.3.0";
28
+ readonly version: "0.4.0";
29
29
  };
30
30
  declare function listTools(): {
31
31
  name: string;
package/dist/index.js CHANGED
@@ -24,17 +24,23 @@ import {
24
24
  supportedIbanCountries,
25
25
  validateAadhaar,
26
26
  validateAba,
27
+ validateBeNrn,
28
+ validateBsn,
27
29
  validateBtcAddress,
28
30
  validateCard,
31
+ validateChinaRic,
29
32
  validateCnpj,
33
+ validateCodiceFiscale,
30
34
  validateCpf,
31
35
  validateCusip,
32
36
  validateDni,
33
37
  validateDomain,
34
38
  validateEmail,
35
39
  validateEthAddress,
40
+ validateFodselsnummer,
36
41
  validateGln,
37
42
  validateGtin,
43
+ validateHetu,
38
44
  validateIban,
39
45
  validateImei,
40
46
  validateIp,
@@ -43,11 +49,15 @@ import {
43
49
  validateIsin,
44
50
  validateIssn,
45
51
  validateLei,
52
+ validateNifPt,
46
53
  validateOrcid,
54
+ validatePersonnummer,
55
+ validatePesel,
47
56
  validatePhone,
48
57
  validateSaId,
49
58
  validateSedol,
50
59
  validateSscc,
60
+ validateTckn,
51
61
  validateTld,
52
62
  validateUrl,
53
63
  validateUuid,
@@ -57,7 +67,7 @@ import {
57
67
  verhoeffGenerate,
58
68
  verhoeffValid,
59
69
  vinCheckDigit
60
- } from "./chunk-LVM6GAIC.js";
70
+ } from "./chunk-RMLPG7ZB.js";
61
71
  export {
62
72
  SERVER_INFO,
63
73
  TOOLS,
@@ -84,17 +94,23 @@ export {
84
94
  supportedIbanCountries,
85
95
  validateAadhaar,
86
96
  validateAba,
97
+ validateBeNrn,
98
+ validateBsn,
87
99
  validateBtcAddress,
88
100
  validateCard,
101
+ validateChinaRic,
89
102
  validateCnpj,
103
+ validateCodiceFiscale,
90
104
  validateCpf,
91
105
  validateCusip,
92
106
  validateDni,
93
107
  validateDomain,
94
108
  validateEmail,
95
109
  validateEthAddress,
110
+ validateFodselsnummer,
96
111
  validateGln,
97
112
  validateGtin,
113
+ validateHetu,
98
114
  validateIban,
99
115
  validateImei,
100
116
  validateIp,
@@ -103,11 +119,15 @@ export {
103
119
  validateIsin,
104
120
  validateIssn,
105
121
  validateLei,
122
+ validateNifPt,
106
123
  validateOrcid,
124
+ validatePersonnummer,
125
+ validatePesel,
107
126
  validatePhone,
108
127
  validateSaId,
109
128
  validateSedol,
110
129
  validateSscc,
130
+ validateTckn,
111
131
  validateTld,
112
132
  validateUrl,
113
133
  validateUuid,
package/dist/server.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  SERVER_INFO,
4
4
  TOOLS
5
- } from "./chunk-LVM6GAIC.js";
5
+ } from "./chunk-RMLPG7ZB.js";
6
6
 
7
7
  // src/server.ts
8
8
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qinisolabs/qiniso",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "mcpName": "io.github.qinisolabs/qiniso",
5
5
  "description": "The deterministic fact-verification layer for AI agents — verify identifiers, locale and more against authoritative ground truth.",
6
6
  "homepage": "https://qinisolabs.github.io/qiniso/",
@@ -48,7 +48,12 @@
48
48
  "upc",
49
49
  "ean",
50
50
  "iban",
51
- "vat"
51
+ "vat",
52
+ "national-id",
53
+ "kyc",
54
+ "pesel",
55
+ "codice-fiscale",
56
+ "tckn"
52
57
  ],
53
58
  "license": "Apache-2.0",
54
59
  "author": "Qiniso",