revclamp-mcp 1.20.12 → 1.20.13

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
@@ -59,13 +59,13 @@ curl -sS -X POST https://api.revclamp.com/api/mcp \
59
59
 
60
60
  ```bash
61
61
  # Run a <60s local CLI smoke check (verifies all 9 tool schemas & executes a local_engine.mjs sample audit with zero API key)
62
- npx -y github:lhphong09t2/revclamp-mcp#v1.20.12 --self-test
62
+ npx -y github:lhphong09t2/revclamp-mcp#v1.20.13 --self-test
63
63
 
64
64
  # Provision a free Cloud Workspace (or reuse REVCLAMP_API_KEY) & send a 6-digit login OTP
65
- npx -y revclamp-mcp@1.20.12 --init-workspace you@company.com
65
+ npx -y revclamp-mcp@1.20.13 --init-workspace you@company.com
66
66
 
67
67
  # Verify the 6-digit OTP using REVCLAMP_API_KEY from environment
68
- REVCLAMP_API_KEY="rg_live_..." npx -y revclamp-mcp@1.20.12 --verify-otp you@company.com 123456
68
+ REVCLAMP_API_KEY="rg_live_..." npx -y revclamp-mcp@1.20.13 --verify-otp you@company.com 123456
69
69
 
70
70
  # List all 9 MCP tools and JSON schemas (runs locally in-process)
71
71
  node index.mjs --list-tools
package/index.mjs CHANGED
@@ -33,7 +33,7 @@ export {
33
33
  executeLocalMcpJsonRpc,
34
34
  };
35
35
 
36
- export const PACKAGE_VERSION = "1.20.12";
36
+ export const PACKAGE_VERSION = "1.20.13";
37
37
  export const DEFAULT_MCP_ENDPOINT = "https://api.revclamp.com/api/mcp";
38
38
  export const ALLOWED_MCP_ORIGINS = Object.freeze(
39
39
  new Set([
package/local_engine.mjs CHANGED
@@ -1913,7 +1913,7 @@ export const LOCAL_STATELESS_CLOUD_UPGRADE_HINT = Object.freeze({
1913
1913
  message:
1914
1914
  "Running in stateless local mode. Provision a free or paid Cloud Workspace for 90-day event persistence, automated webhook revocation, and Slack/Email alerts.",
1915
1915
  command: "npx --yes revclamp-mcp --init-workspace <work_email>",
1916
- cliActivateCommand: "npx -y revclamp-mcp@1.20.12 --init-workspace you@company.com",
1916
+ cliActivateCommand: "npx -y revclamp-mcp@1.20.13 --init-workspace you@company.com",
1917
1917
  upgradeUrl: "https://revclamp.com/pricing?source=mcp_cli",
1918
1918
  });
1919
1919
 
@@ -2954,15 +2954,34 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
2954
2954
  const norm = normalizeVatId(args.buyerVatId || "");
2955
2955
  const viesMode = String(args.viesMode || "FORMAT_ONLY").toUpperCase();
2956
2956
  const isDemo = args.demo === true;
2957
+ const crossBorder = Boolean(norm.validFormat && sellerCountry !== norm.memberState);
2958
+ const goodsOnlyProtocol = Boolean(
2959
+ crossBorder && (sellerCountry === "XI" || norm.memberState === "XI")
2960
+ );
2961
+ const xiServicesNotice =
2962
+ EU_VIES_STATUTORY_TERMINOLOGY_MAP.XI.statutoryReverseChargeClause;
2963
+ const rawBuyerTerminology = norm.validFormat
2964
+ ? getEuViesStatutoryTerminology(norm.memberState)
2965
+ : null;
2966
+ const rawSellerTerminology = getEuViesStatutoryTerminology(sellerCountry);
2967
+ const statutoryTerminology = rawBuyerTerminology
2968
+ ? goodsOnlyProtocol
2969
+ ? {
2970
+ ...rawBuyerTerminology,
2971
+ statutoryReverseChargeClause:
2972
+ norm.memberState === "XI"
2973
+ ? xiServicesNotice
2974
+ : `${rawBuyerTerminology.statutoryReverseChargeClause} [Windsor Framework XI: N/A for B2B services; VIES applies to goods only under Art. 138(1)]`,
2975
+ }
2976
+ : rawBuyerTerminology
2977
+ : null;
2978
+ const sellerStatutoryTerminology = rawSellerTerminology
2979
+ ? goodsOnlyProtocol
2980
+ ? { ...rawSellerTerminology, statutoryReverseChargeClause: xiServicesNotice }
2981
+ : rawSellerTerminology
2982
+ : null;
2957
2983
 
2958
- if (
2959
- norm.validFormat &&
2960
- sellerCountry !== norm.memberState &&
2961
- supplyType === "SERVICES" &&
2962
- (sellerCountry === "XI" || norm.memberState === "XI")
2963
- ) {
2964
- const statutoryTerminology = getEuViesStatutoryTerminology(norm.memberState);
2965
- const sellerStatutoryTerminology = getEuViesStatutoryTerminology(sellerCountry);
2984
+ if (goodsOnlyProtocol && supplyType === "SERVICES") {
2966
2985
  return {
2967
2986
  ok: true,
2968
2987
  executionMode: "local_open_source_engine",
@@ -2970,6 +2989,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
2970
2989
  valid: null,
2971
2990
  formatValid: true,
2972
2991
  supplyType,
2992
+ goodsOnlyProtocol: true,
2973
2993
  status: "HOLD_XI_SERVICES_OUTSIDE_EU_VIES",
2974
2994
  action: "APPLY_UK_OR_NON_EU_SERVICES_VAT_RULES",
2975
2995
  reason: "WINDSOR_FRAMEWORK_XI_B2B_SERVICES_EXCLUDED_FROM_VIES",
@@ -3016,6 +3036,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3016
3036
  valid: false,
3017
3037
  formatValid: false,
3018
3038
  supplyType,
3039
+ goodsOnlyProtocol: false,
3019
3040
  status: "HOLD_INVALID_VAT",
3020
3041
  reason: "INVALID_EU_VAT_FORMAT",
3021
3042
  sellerCountry,
@@ -3026,9 +3047,6 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3026
3047
  };
3027
3048
  }
3028
3049
 
3029
- const crossBorder = sellerCountry !== norm.memberState;
3030
- const statutoryTerminology = getEuViesStatutoryTerminology(norm.memberState);
3031
- const sellerStatutoryTerminology = getEuViesStatutoryTerminology(sellerCountry);
3032
3050
  const callerConsultationId =
3033
3051
  typeof args.consultationNumber === "string" && args.consultationNumber.trim().length > 0
3034
3052
  ? args.consultationNumber.trim().slice(0, 64)
@@ -3041,6 +3059,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3041
3059
  valid: null,
3042
3060
  formatValid: true,
3043
3061
  supplyType,
3062
+ goodsOnlyProtocol,
3044
3063
  status: "FORMAT_VALID_UNVERIFIED",
3045
3064
  action: crossBorder ? "FORMAT_VALID_UNVERIFIED" : "APPLY_DOMESTIC_STANDARD_VAT",
3046
3065
  reason: "LOCAL_FORMAT_CHECK_ONLY_NO_LIVE_VIES_CONSULTATION",
@@ -3089,6 +3108,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3089
3108
  valid: null,
3090
3109
  formatValid: true,
3091
3110
  supplyType,
3111
+ goodsOnlyProtocol,
3092
3112
  status: "PENDING_ASYNC_RETRY",
3093
3113
  reason: `VIES_SOFT_FAULT_${viesMode}`,
3094
3114
  sellerCountry,
@@ -3112,6 +3132,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3112
3132
  valid: null,
3113
3133
  formatValid: true,
3114
3134
  supplyType,
3135
+ goodsOnlyProtocol,
3115
3136
  status: "HOLD_UNVERIFIED_VIES_FAULT",
3116
3137
  reason: `VIES_GATEWAY_FAULT_${viesMode}`,
3117
3138
  sellerCountry,
@@ -3135,6 +3156,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3135
3156
  valid: false,
3136
3157
  formatValid: true,
3137
3158
  supplyType,
3159
+ goodsOnlyProtocol,
3138
3160
  status: "HOLD_INVALID_VAT",
3139
3161
  reason: viesMode === "INVALID" ? "VIES_DEFINITE_INVALID" : `VIES_${viesMode}`,
3140
3162
  sellerCountry,
@@ -3158,6 +3180,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3158
3180
  valid: null,
3159
3181
  formatValid: true,
3160
3182
  supplyType,
3183
+ goodsOnlyProtocol,
3161
3184
  status: "HOLD_UNVERIFIED_VIES_FAULT",
3162
3185
  reason: "UNRECOGNIZED_VIES_SIMULATION_MODE",
3163
3186
  sellerCountry,
@@ -3191,6 +3214,7 @@ function executeLocalMcpToolCore(toolName, rawArgs = {}) {
3191
3214
  valid: true,
3192
3215
  formatValid: true,
3193
3216
  supplyType,
3217
+ goodsOnlyProtocol,
3194
3218
  status: crossBorder ? "VERIFIED_ZERO_RATED" : "DOMESTIC_TAXABLE_SUPPLY",
3195
3219
  action: crossBorder ? "ALLOW_ZERO_RATED_REVERSE_CHARGE" : "APPLY_DOMESTIC_STANDARD_VAT",
3196
3220
  reason: crossBorder ? "VALID_CROSS_BORDER_REVERSE_CHARGE" : "SAME_MEMBER_STATE_DOMESTIC",
@@ -3985,7 +4009,7 @@ function toSafeLocalRpcId(rawId) {
3985
4009
 
3986
4010
  export function executeLocalMcpJsonRpc(
3987
4011
  rpcRequest,
3988
- packageVersion = "1.20.12",
4012
+ packageVersion = "1.20.13",
3989
4013
  options = {}
3990
4014
  ) {
3991
4015
  if (!rpcRequest || typeof rpcRequest !== "object" || Array.isArray(rpcRequest)) {
package/mcp-config.json CHANGED
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "manifest": {
28
28
  "name": "revclamp-mcp",
29
- "version": "1.20.12",
29
+ "version": "1.20.13",
30
30
  "tools": [
31
31
  "revclamp_audit_revenue_leakage",
32
32
  "revclamp_evaluate_ghost_usage",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "revclamp-mcp",
3
3
  "mcpName": "com.revclamp/revclamp-mcp",
4
- "version": "1.20.12",
4
+ "version": "1.20.13",
5
5
  "description": "Model Context Protocol (MCP) server and CLI for Stripe 2025-03-31.basil entitlement checks, Visa CE 3.0 dispute staging (submit: false), EU/XI VIES VAT validation, Shopify Plus B2B Net-15/30/60 reconciliation, webhook HMAC-SHA256 verification, 0% take-rate ROI calculation, 72-hour webhook replay & out-of-order state-machine simulation, and Stripe dispute evidence 18,000 UTF-16 code unit & CE 3.0 completeness linting.",
6
6
  "type": "module",
7
7
  "main": "./index.mjs",
@@ -46,6 +46,6 @@
46
46
  "node": ">=20.0.0"
47
47
  },
48
48
  "revclamp": {
49
- "engineSha256": "c67f214211284a479fbe10857dfef984b45e3c3403c37d5d834dcd5a5b326b60"
49
+ "engineSha256": "aacc34998abb464fc647d3029fecc0b6caf1f8638f7cdfdf12c09f35a2319323"
50
50
  }
51
51
  }
package/server.json CHANGED
@@ -7,13 +7,13 @@
7
7
  "url": "https://github.com/lhphong09t2/revclamp-mcp",
8
8
  "source": "github"
9
9
  },
10
- "version": "1.20.12",
10
+ "version": "1.20.13",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "revclamp-mcp",
16
- "version": "1.20.12",
16
+ "version": "1.20.13",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },