hs-code-classifier-mcp 1.0.17 → 1.0.18

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.
@@ -0,0 +1,104 @@
1
+ import { queryHSPing, AxiosError } from '../services/hsping-client.js';
2
+ import { validateWithAI } from '../services/claude-client.js';
3
+ import { ResponseFormat } from '../schemas/validate.js';
4
+ import { nowISO, LEGAL_DISCLAIMER } from '../constants.js';
5
+ function normalizeHsCode(code) {
6
+ return code.replace(/[\s.]/g, '');
7
+ }
8
+ function buildMarkdown(out) {
9
+ const lines = [
10
+ `## HS Code Validation`,
11
+ `**Verdict:** ${out.verdict}`,
12
+ `**HS Code Checked:** ${out.hs_code_checked}`,
13
+ `**Product Match Score:** ${(out.product_match_score * 100).toFixed(0)}%`,
14
+ `**Risk Level:** ${out.risk_level}`,
15
+ out.mismatch_reason ? `**Mismatch Reason:** ${out.mismatch_reason}` : '',
16
+ out.correct_code_suggestion ? `**Suggested Correct Code:** ${out.correct_code_suggestion}` : '',
17
+ `**Country:** ${out.country}`,
18
+ `**Source:** ${out.source} (v${out.version})`,
19
+ `**Agent Action:** ${out.agent_action}`,
20
+ `**Checked At:** ${out.checked_at}`
21
+ ].filter(Boolean);
22
+ lines.push(`\n---\n*${out._disclaimer}*`);
23
+ return lines.join('\n');
24
+ }
25
+ export async function runValidate(params) {
26
+ const normalizedCode = normalizeHsCode(params.hs_code);
27
+ let hspingData;
28
+ try {
29
+ hspingData = await queryHSPing(params.product_description, params.country);
30
+ }
31
+ catch (err) {
32
+ if (err instanceof AxiosError) {
33
+ return {
34
+ output: null,
35
+ error: {
36
+ error: `HSPing API error: HTTP ${err.response?.status ?? 'timeout'}`,
37
+ likely_cause: 'HSPing API is temporarily unavailable or HSPING_API_KEY is invalid',
38
+ agent_action: 'Retry validation once after 30 seconds. If error persists, check status at kordagencies.com.',
39
+ category: 'upstream_unavailable',
40
+ retryable: true,
41
+ retry_after_ms: 30000,
42
+ fallback_tool: 'hs_validate_code',
43
+ trace_id: Math.random().toString(36).slice(2, 10)
44
+ }
45
+ };
46
+ }
47
+ return {
48
+ output: null,
49
+ error: {
50
+ error: err instanceof Error ? err.message : String(err),
51
+ likely_cause: 'Unexpected error querying tariff database',
52
+ agent_action: 'Retry once. If error persists, contact support at ojas@kordagencies.com.',
53
+ category: 'upstream_unavailable',
54
+ retryable: true,
55
+ retry_after_ms: 120000,
56
+ fallback_tool: 'hs_validate_code',
57
+ trace_id: Math.random().toString(36).slice(2, 10)
58
+ }
59
+ };
60
+ }
61
+ const aiResult = await validateWithAI(normalizedCode, params.product_description, params.country, hspingData.results);
62
+ const sourceResult = hspingData.results[0];
63
+ const out = {
64
+ verdict: aiResult.verdict,
65
+ agent_action: aiResult.agent_action,
66
+ hs_code_checked: normalizedCode,
67
+ product_match_score: aiResult.product_match_score,
68
+ ...(aiResult.mismatch_reason ? { mismatch_reason: aiResult.mismatch_reason } : {}),
69
+ ...(aiResult.correct_code_suggestion ? { correct_code_suggestion: aiResult.correct_code_suggestion } : {}),
70
+ risk_level: aiResult.risk_level,
71
+ source: sourceResult
72
+ ? sourceResult.source
73
+ : 'HSPing API (api.hsping.com) -- no direct match found for product',
74
+ source_url: 'https://api.hsping.com',
75
+ version: sourceResult ? sourceResult.version : 'N/A',
76
+ country: params.country,
77
+ checked_at: nowISO(),
78
+ analysis_type: 'AI-powered mismatch detection -- NOT a simple database lookup',
79
+ token_count: 0,
80
+ _disclaimer: LEGAL_DISCLAIMER
81
+ };
82
+ if (out.verdict === 'MISMATCH') {
83
+ out.hold_reason = aiResult.mismatch_reason || 'HS code ' + normalizedCode + ' does not match product description in ' + params.country + ' tariff schedule';
84
+ out.retry_after = null;
85
+ out.escalation_path = aiResult.correct_code_suggestion
86
+ ? 'Use suggested code ' + aiResult.correct_code_suggestion + ' instead and verify with customs broker before submitting declaration'
87
+ : 'Escalate to licensed customs broker to identify correct HS code before submitting declaration';
88
+ }
89
+ else if (out.verdict === 'OUTDATED') {
90
+ out.hold_reason = 'HS code ' + normalizedCode + ' has been updated or reclassified in the ' + params.country + ' tariff schedule';
91
+ out.retry_after = null;
92
+ out.escalation_path = aiResult.correct_code_suggestion
93
+ ? 'Use updated code ' + aiResult.correct_code_suggestion + ' -- verify current classification with customs authority before submitting'
94
+ : 'Verify current HS code classification with customs authority or broker before submitting declaration';
95
+ }
96
+ out.token_count = Math.ceil(JSON.stringify(out).length / 4);
97
+ return { output: out };
98
+ }
99
+ export function formatValidateResponse(out, format) {
100
+ if (format === ResponseFormat.MARKDOWN)
101
+ return buildMarkdown(out);
102
+ return JSON.stringify(out, null, 2);
103
+ }
104
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,GAAmB;IACxC,MAAM,KAAK,GAAa;QACtB,uBAAuB;QACvB,gBAAgB,GAAG,CAAC,OAAO,EAAE;QAC7B,wBAAwB,GAAG,CAAC,eAAe,EAAE;QAC7C,4BAA4B,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QACzE,mBAAmB,GAAG,CAAC,UAAU,EAAE;QACnC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE;QACxE,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,+BAA+B,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE;QAC/F,gBAAgB,GAAG,CAAC,OAAO,EAAE;QAC7B,eAAe,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG;QAC7C,qBAAqB,GAAG,CAAC,YAAY,EAAE;QACvC,mBAAmB,GAAG,CAAC,UAAU,EAAE;KACpC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAqB;IAErB,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE;oBACL,KAAK,EAAE,0BAA0B,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE;oBACpE,YAAY,EAAE,oEAAoE;oBAClF,YAAY,EAAE,8FAA8F;oBAC5G,QAAQ,EAAE,sBAAsB;oBAChC,SAAS,EAAE,IAAI;oBACf,cAAc,EAAE,KAAK;oBACrB,aAAa,EAAE,kBAAkB;oBACjC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBAClD;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE;gBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,YAAY,EAAE,2CAA2C;gBACzD,YAAY,EAAE,0EAA0E;gBACxF,QAAQ,EAAE,sBAAsB;gBAChC,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,MAAM;gBACtB,aAAa,EAAE,kBAAkB;gBACjC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aAClD;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,cAAc,EACd,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,OAAO,EACd,UAAU,CAAC,OAAO,CACnB,CAAC;IAEF,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAmB;QAC1B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,eAAe,EAAE,cAAc;QAC/B,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;QACjD,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1G,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,MAAM,EAAE,YAAY;YAClB,CAAC,CAAC,YAAY,CAAC,MAAM;YACrB,CAAC,CAAC,kEAAkE;QACtE,UAAU,EAAE,wBAAwB;QACpC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;QACpD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,EAAE;QACpB,aAAa,EAAE,+DAA+D;QAC9E,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,gBAAgB;KAC9B,CAAC;IACF,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAC/B,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,eAAe,IAAI,UAAU,GAAG,cAAc,GAAG,yCAAyC,GAAG,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC;QAC5J,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;QACvB,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC,uBAAuB;YACpD,CAAC,CAAC,qBAAqB,GAAG,QAAQ,CAAC,uBAAuB,GAAG,uEAAuE;YACpI,CAAC,CAAC,+FAA+F,CAAC;IACtG,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACtC,GAAG,CAAC,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,2CAA2C,GAAG,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC;QAClI,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;QACvB,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC,uBAAuB;YACpD,CAAC,CAAC,mBAAmB,GAAG,QAAQ,CAAC,uBAAuB,GAAG,4EAA4E;YACvI,CAAC,CAAC,sGAAsG,CAAC;IAC7G,CAAC;IACD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAmB,EAAE,MAAsB;IAChF,IAAI,MAAM,KAAK,cAAc,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hs-code-classifier-mcp",
3
- "version": "1.0.17",
3
+ "version": "1.0.18",
4
4
  "description": "HS code classifier for AI agents. Classifies products to official 6-digit tariff codes before customs declarations or duty calculations. VERIFIED verdict in one call.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",