@raytio/mcp-server 10.1.0 → 10.3.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.
Files changed (127) hide show
  1. package/contracts/persist/mcp_resource_contract.json +4 -4
  2. package/dist/authorization.d.ts.map +1 -1
  3. package/dist/authorization.js +4 -0
  4. package/dist/authorization.js.map +1 -1
  5. package/dist/generated-reads/guardrails.js +1 -1
  6. package/dist/generated-reads/guardrails.js.map +1 -1
  7. package/dist/generated-reads/resource-tools.d.ts.map +1 -1
  8. package/dist/generated-reads/resource-tools.js +8 -5
  9. package/dist/generated-reads/resource-tools.js.map +1 -1
  10. package/dist/tools/_shared/side-effect.js +2 -2
  11. package/dist/tools/_shared/side-effect.js.map +1 -1
  12. package/dist/tools/_shared/soft-deactivate.d.ts +2 -0
  13. package/dist/tools/_shared/soft-deactivate.d.ts.map +1 -1
  14. package/dist/tools/_shared/soft-deactivate.js +3 -0
  15. package/dist/tools/_shared/soft-deactivate.js.map +1 -1
  16. package/dist/tools/domains.d.ts.map +1 -1
  17. package/dist/tools/domains.js +36 -0
  18. package/dist/tools/domains.js.map +1 -1
  19. package/dist/tools/imports/index.d.ts +6 -6
  20. package/dist/tools/ixn/generated-reads.d.ts +5 -0
  21. package/dist/tools/ixn/generated-reads.d.ts.map +1 -0
  22. package/dist/tools/ixn/generated-reads.js +29 -0
  23. package/dist/tools/ixn/generated-reads.js.map +1 -0
  24. package/dist/tools/ixn/index.d.ts +5 -0
  25. package/dist/tools/ixn/index.d.ts.map +1 -0
  26. package/dist/tools/ixn/index.js +8 -0
  27. package/dist/tools/ixn/index.js.map +1 -0
  28. package/dist/tools/ixn/ixn-conversation-start.d.ts +22 -0
  29. package/dist/tools/ixn/ixn-conversation-start.d.ts.map +1 -0
  30. package/dist/tools/ixn/ixn-conversation-start.js +98 -0
  31. package/dist/tools/ixn/ixn-conversation-start.js.map +1 -0
  32. package/dist/tools/ixn/ixn-message-send.d.ts +28 -0
  33. package/dist/tools/ixn/ixn-message-send.d.ts.map +1 -0
  34. package/dist/tools/ixn/ixn-message-send.js +92 -0
  35. package/dist/tools/ixn/ixn-message-send.js.map +1 -0
  36. package/dist/tools/pbm/generated-reads.d.ts +5 -0
  37. package/dist/tools/pbm/generated-reads.d.ts.map +1 -0
  38. package/dist/tools/pbm/generated-reads.js +32 -0
  39. package/dist/tools/pbm/generated-reads.js.map +1 -0
  40. package/dist/tools/pbm/index.d.ts +5 -0
  41. package/dist/tools/pbm/index.d.ts.map +1 -0
  42. package/dist/tools/pbm/index.js +17 -0
  43. package/dist/tools/pbm/index.js.map +1 -0
  44. package/dist/tools/pbm/pbm-customer-entitlement-override-set.d.ts +26 -0
  45. package/dist/tools/pbm/pbm-customer-entitlement-override-set.d.ts.map +1 -0
  46. package/dist/tools/pbm/pbm-customer-entitlement-override-set.js +78 -0
  47. package/dist/tools/pbm/pbm-customer-entitlement-override-set.js.map +1 -0
  48. package/dist/tools/pbm/pbm-subscription-cancel.d.ts +21 -0
  49. package/dist/tools/pbm/pbm-subscription-cancel.d.ts.map +1 -0
  50. package/dist/tools/pbm/pbm-subscription-cancel.js +86 -0
  51. package/dist/tools/pbm/pbm-subscription-cancel.js.map +1 -0
  52. package/dist/tools/pbm/pbm-subscription-create.d.ts +20 -0
  53. package/dist/tools/pbm/pbm-subscription-create.d.ts.map +1 -0
  54. package/dist/tools/pbm/pbm-subscription-create.js +90 -0
  55. package/dist/tools/pbm/pbm-subscription-create.js.map +1 -0
  56. package/dist/tools/pbm/pbm-subscription-line-add.d.ts +13 -0
  57. package/dist/tools/pbm/pbm-subscription-line-add.d.ts.map +1 -0
  58. package/dist/tools/pbm/pbm-subscription-line-add.js +65 -0
  59. package/dist/tools/pbm/pbm-subscription-line-add.js.map +1 -0
  60. package/dist/tools/pbm/pbm-subscription-line-end.d.ts +12 -0
  61. package/dist/tools/pbm/pbm-subscription-line-end.d.ts.map +1 -0
  62. package/dist/tools/pbm/pbm-subscription-line-end.js +49 -0
  63. package/dist/tools/pbm/pbm-subscription-line-end.js.map +1 -0
  64. package/dist/tools/qom/generated-reads.d.ts +5 -0
  65. package/dist/tools/qom/generated-reads.d.ts.map +1 -0
  66. package/dist/tools/qom/generated-reads.js +22 -0
  67. package/dist/tools/qom/generated-reads.js.map +1 -0
  68. package/dist/tools/qom/index.d.ts +5 -0
  69. package/dist/tools/qom/index.d.ts.map +1 -0
  70. package/dist/tools/qom/index.js +23 -0
  71. package/dist/tools/qom/index.js.map +1 -0
  72. package/dist/tools/qom/qom-order-cancel.d.ts +16 -0
  73. package/dist/tools/qom/qom-order-cancel.d.ts.map +1 -0
  74. package/dist/tools/qom/qom-order-cancel.js +56 -0
  75. package/dist/tools/qom/qom-order-cancel.js.map +1 -0
  76. package/dist/tools/qom/qom-order-create.d.ts +24 -0
  77. package/dist/tools/qom/qom-order-create.d.ts.map +1 -0
  78. package/dist/tools/qom/qom-order-create.js +133 -0
  79. package/dist/tools/qom/qom-order-create.js.map +1 -0
  80. package/dist/tools/qom/qom-order-hold-place.d.ts +11 -0
  81. package/dist/tools/qom/qom-order-hold-place.d.ts.map +1 -0
  82. package/dist/tools/qom/qom-order-hold-place.js +50 -0
  83. package/dist/tools/qom/qom-order-hold-place.js.map +1 -0
  84. package/dist/tools/qom/qom-order-hold-release.d.ts +8 -0
  85. package/dist/tools/qom/qom-order-hold-release.d.ts.map +1 -0
  86. package/dist/tools/qom/qom-order-hold-release.js +42 -0
  87. package/dist/tools/qom/qom-order-hold-release.js.map +1 -0
  88. package/dist/tools/qom/qom-order-line-add.d.ts +18 -0
  89. package/dist/tools/qom/qom-order-line-add.d.ts.map +1 -0
  90. package/dist/tools/qom/qom-order-line-add.js +101 -0
  91. package/dist/tools/qom/qom-order-line-add.js.map +1 -0
  92. package/dist/tools/qom/qom-quote-create.d.ts +20 -0
  93. package/dist/tools/qom/qom-quote-create.d.ts.map +1 -0
  94. package/dist/tools/qom/qom-quote-create.js +142 -0
  95. package/dist/tools/qom/qom-quote-create.js.map +1 -0
  96. package/dist/tools/qom/qom-quote-line-add.d.ts +13 -0
  97. package/dist/tools/qom/qom-quote-line-add.d.ts.map +1 -0
  98. package/dist/tools/qom/qom-quote-line-add.js +92 -0
  99. package/dist/tools/qom/qom-quote-line-add.js.map +1 -0
  100. package/dist/tools/qom/qom-quote-version-create.d.ts +10 -0
  101. package/dist/tools/qom/qom-quote-version-create.d.ts.map +1 -0
  102. package/dist/tools/qom/qom-quote-version-create.js +69 -0
  103. package/dist/tools/qom/qom-quote-version-create.js.map +1 -0
  104. package/dist/tools/role-mapping.d.ts.map +1 -1
  105. package/dist/tools/role-mapping.js +21 -8
  106. package/dist/tools/role-mapping.js.map +1 -1
  107. package/dist/tools/xrm/generated-reads.d.ts +5 -0
  108. package/dist/tools/xrm/generated-reads.d.ts.map +1 -0
  109. package/dist/tools/xrm/generated-reads.js +37 -0
  110. package/dist/tools/xrm/generated-reads.js.map +1 -0
  111. package/dist/tools/xrm/index.d.ts +5 -0
  112. package/dist/tools/xrm/index.d.ts.map +1 -0
  113. package/dist/tools/xrm/index.js +13 -0
  114. package/dist/tools/xrm/index.js.map +1 -0
  115. package/dist/tools/xrm/xrm-inbound-email-rule-create.d.ts +21 -0
  116. package/dist/tools/xrm/xrm-inbound-email-rule-create.d.ts.map +1 -0
  117. package/dist/tools/xrm/xrm-inbound-email-rule-create.js +85 -0
  118. package/dist/tools/xrm/xrm-inbound-email-rule-create.js.map +1 -0
  119. package/dist/tools/xrm/xrm-merchant-create.d.ts +22 -0
  120. package/dist/tools/xrm/xrm-merchant-create.d.ts.map +1 -0
  121. package/dist/tools/xrm/xrm-merchant-create.js +85 -0
  122. package/dist/tools/xrm/xrm-merchant-create.js.map +1 -0
  123. package/dist/tools/xrm/xrm-merchant-update.d.ts +14 -0
  124. package/dist/tools/xrm/xrm-merchant-update.d.ts.map +1 -0
  125. package/dist/tools/xrm/xrm-merchant-update.js +61 -0
  126. package/dist/tools/xrm/xrm-merchant-update.js.map +1 -0
  127. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"role-mapping.d.ts","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA6CD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAuChE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,SAAS,EAAE,CAAC,CAEtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO7B"}
1
+ {"version":3,"file":"role-mapping.d.ts","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAyDD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAuChE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,SAAS,EAAE,CAAC,CAEtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO7B"}
@@ -39,6 +39,18 @@ const ROLE_TO_DOMAINS = {
39
39
  'Booking administrator': ['bkm'],
40
40
  'Booking user': ['bkm'],
41
41
  'Booking viewer': ['bkm-readonly'],
42
+ 'Merchant administrator': ['xrm'],
43
+ 'Merchant user': ['xrm'],
44
+ 'Merchant viewer': ['xrm-readonly'],
45
+ 'Interaction administrator': ['ixn'],
46
+ 'Interaction user': ['ixn'],
47
+ 'Interaction viewer': ['ixn-readonly'],
48
+ 'Order administrator': ['qom'],
49
+ 'Order user': ['qom'],
50
+ 'Order viewer': ['qom-readonly'],
51
+ 'Billing administrator': ['pbm'],
52
+ 'Billing user': ['pbm'],
53
+ 'Billing viewer': ['pbm-readonly'],
42
54
  };
43
55
  /**
44
56
  * Given a list of user group names, resolve the set of tool domain IDs
@@ -57,14 +69,9 @@ export function mapRolesToDomains(groupNames) {
57
69
  }
58
70
  }
59
71
  // Full access is a superset of readonly — drop readonly if full access is present
60
- if (domains.has('ppm') && domains.has('ppm-readonly')) {
61
- domains.delete('ppm-readonly');
62
- }
63
- if (domains.has('wrm') && domains.has('wrm-readonly')) {
64
- domains.delete('wrm-readonly');
65
- }
66
- if (domains.has('sfa') && domains.has('sfa-readonly')) {
67
- domains.delete('sfa-readonly');
72
+ for (const parent of ['ppm', 'wrm', 'sfa', 'qom', 'pbm']) {
73
+ if (domains.has(parent))
74
+ domains.delete(`${parent}-readonly`);
68
75
  }
69
76
  if (domains.has('fxm') && domains.has('fxm-readonly')) {
70
77
  domains.delete('fxm-readonly');
@@ -84,6 +91,12 @@ export function mapRolesToDomains(groupNames) {
84
91
  if (domains.has('bkm') && domains.has('bkm-readonly')) {
85
92
  domains.delete('bkm-readonly');
86
93
  }
94
+ if (domains.has('xrm') && domains.has('xrm-readonly')) {
95
+ domains.delete('xrm-readonly');
96
+ }
97
+ if (domains.has('ixn') && domains.has('ixn-readonly')) {
98
+ domains.delete('ixn-readonly');
99
+ }
87
100
  return [...domains];
88
101
  }
89
102
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"role-mapping.js","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role-mapping.js","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Tool } from '../registry.js';
2
+ import { CatalogueReport } from '../../generated-reads/index.js';
3
+ export declare const xrmGeneratedReadReport: CatalogueReport;
4
+ export declare const xrmGeneratedReadTools: Tool[];
5
+ //# sourceMappingURL=generated-reads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-reads.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/generated-reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAGL,eAAe,EAChB,MAAM,gCAAgC,CAAC;AAqCxC,eAAO,MAAM,sBAAsB,EAAE,eAC8B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,EAAE,IAAI,EAGvC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { buildGeneratedReadCatalogue, buildGeneratedReadCatalogueReport, } from '../../generated-reads/index.js';
2
+ import { loadPersistResourceContract } from '../../contracts/persist-resource-contract.js';
3
+ /**
4
+ * Bounded read tools for the XRM module (WI-0003508).
5
+ *
6
+ * The schema-driven catalogue (WI-0003500) emits describe/list/get for
7
+ * every `normal`-sensitivity XRM resource that declares a read
8
+ * operation and has no side effects. The pinned Persist contract
9
+ * already excludes credential material via the standard credentials
10
+ * guardrail — `xrm_merchant_authentication_configuration_details`
11
+ * and `xrm_merchant_payment_processor_credentials` are never surfaced
12
+ * — so this module gets bounded reads for the safe subset:
13
+ *
14
+ * - `xrm_merchants` — marketplace merchants (organisation records).
15
+ * - `xrm_merchant_classifications` — merchant-to-classification
16
+ * mapping used by marketplace faceting.
17
+ * - `xrm_merchant_countries` — countries a merchant operates in.
18
+ * - `xrm_merchant_items` — merchant-to-item catalogue mapping.
19
+ * - `xrm_inbound_domain_rules` / `xrm_inbound_email_addresses` /
20
+ * `xrm_inbound_email_rules` — inbound-email routing metadata used
21
+ * to configure how incoming messages are dispatched.
22
+ * - `xrm_inbound_email_quarantine_items` — the read side of the
23
+ * inbound-email quarantine so callers can inspect quarantined
24
+ * messages.
25
+ *
26
+ * The four inbound resources get `describe` only for now: their `list`
27
+ * and `get` tools need a SELECT capability that no role holds yet
28
+ * (WI-0009403), so they appear once Persist adds it.
29
+ *
30
+ * Every write on a merchant / rule row lives in a dedicated hand-
31
+ * written tool with explicit confirmation semantics (see
32
+ * `xrm-merchant-*`, `xrm-inbound-email-rule-*`).
33
+ */
34
+ const contract = loadPersistResourceContract();
35
+ export const xrmGeneratedReadReport = buildGeneratedReadCatalogueReport(contract, { modules: ['xrm'] });
36
+ export const xrmGeneratedReadTools = buildGeneratedReadCatalogue(contract, { modules: ['xrm'] });
37
+ //# sourceMappingURL=generated-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-reads.js","sourceRoot":"","sources":["../../../src/tools/xrm/generated-reads.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAElC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GACjC,iCAAiC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,qBAAqB,GAAW,2BAA2B,CACtE,QAAQ,EACR,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Tool } from '../registry.js';
2
+ export declare const xrmTools: Tool[];
3
+ /** Read-only slice used by the `xrm-readonly` selectable sub-domain. */
4
+ export declare const xrmReadOnlyTools: Tool[];
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAYtC,eAAO,MAAM,QAAQ,EAAE,IAAI,EAAiD,CAAC;AAE7E,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAA0B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { xrmGeneratedReadTools } from './generated-reads.js';
2
+ import { xrmMerchantCreateTool } from './xrm-merchant-create.js';
3
+ import { xrmMerchantUpdateTool } from './xrm-merchant-update.js';
4
+ import { xrmInboundEmailRuleCreateTool } from './xrm-inbound-email-rule-create.js';
5
+ const xrmWriteTools = [
6
+ xrmMerchantCreateTool,
7
+ xrmMerchantUpdateTool,
8
+ xrmInboundEmailRuleCreateTool,
9
+ ];
10
+ export const xrmTools = [...xrmGeneratedReadTools, ...xrmWriteTools];
11
+ /** Read-only slice used by the `xrm-readonly` selectable sub-domain. */
12
+ export const xrmReadOnlyTools = xrmGeneratedReadTools;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/xrm/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,MAAM,aAAa,GAAW;IAC5B,qBAAqB;IACrB,qBAAqB;IACrB,6BAA6B;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAW,CAAC,GAAG,qBAAqB,EAAE,GAAG,aAAa,CAAC,CAAC;AAE7E,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAW,qBAAqB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Tool } from '../registry.js';
2
+ /**
3
+ * State-change semantic tool: create an inbound email routing rule
4
+ * (`xrm_inbound_email_rules`). Adding a rule changes how future
5
+ * incoming email is dispatched (or quarantined) for a given inbound
6
+ * email address, so the tool requires:
7
+ *
8
+ * - `confirm: true` to prevent a model wiring routing changes into
9
+ * live mail delivery accidentally;
10
+ * - the target `email_id`, the match rule, and the local-part
11
+ * pattern set. Persist validates the match type and the FK. It does
12
+ * not validate the match rule: IXN capture only recognises `DROP`
13
+ * (or `D`), so any other value is stored and has no effect there.
14
+ *
15
+ * Not deduplicated: the table's only unique key is its id, so a retry
16
+ * creates a second rule. Callers cannot check first through MCP yet,
17
+ * because no role holds SELECT on the inbound email tables, so the
18
+ * generated reads do not appear (WI-0009403). The description says so.
19
+ */
20
+ export declare const xrmInboundEmailRuleCreateTool: Tool;
21
+ //# sourceMappingURL=xrm-inbound-email-rule-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xrm-inbound-email-rule-create.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-inbound-email-rule-create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAStC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,6BAA6B,EAAE,IAsE3C,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { z } from 'zod';
2
+ import { API_ERROR, errorResponse, successResponse } from '../types.js';
3
+ import { cap } from '../../capabilities/tool-capability.js';
4
+ import { confirmFlagSchema, unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
5
+ /**
6
+ * State-change semantic tool: create an inbound email routing rule
7
+ * (`xrm_inbound_email_rules`). Adding a rule changes how future
8
+ * incoming email is dispatched (or quarantined) for a given inbound
9
+ * email address, so the tool requires:
10
+ *
11
+ * - `confirm: true` to prevent a model wiring routing changes into
12
+ * live mail delivery accidentally;
13
+ * - the target `email_id`, the match rule, and the local-part
14
+ * pattern set. Persist validates the match type and the FK. It does
15
+ * not validate the match rule: IXN capture only recognises `DROP`
16
+ * (or `D`), so any other value is stored and has no effect there.
17
+ *
18
+ * Not deduplicated: the table's only unique key is its id, so a retry
19
+ * creates a second rule. Callers cannot check first through MCP yet,
20
+ * because no role holds SELECT on the inbound email tables, so the
21
+ * generated reads do not appear (WI-0009403). The description says so.
22
+ */
23
+ export const xrmInboundEmailRuleCreateTool = {
24
+ name: 'xrm_inbound_email_rule_create',
25
+ description: 'Create an inbound email routing rule (xrm_inbound_email_rules). Requires confirm=true, ' +
26
+ 'the target email_id, a match rule, and the local-part patterns to match. Changes how ' +
27
+ 'future incoming mail is dispatched. Not deduplicated: calling it again creates another ' +
28
+ 'rule, and MCP cannot read existing rules or look up an email_id yet, so do not retry ' +
29
+ 'after an unclear result: ask a person to check instead.',
30
+ inputSchema: z.object({
31
+ email_id: z
32
+ .string()
33
+ .min(1)
34
+ .describe('UUID of the xrm_inbound_email_addresses row this rule attaches to'),
35
+ inbound_sender_email_match_rule: z
36
+ .string()
37
+ .max(16)
38
+ .describe('Match rule. DROP (or D) stops matched mail being captured by IXN. Persist does not ' +
39
+ 'validate this field, and IXN capture recognises no other value.'),
40
+ inbound_sender_email_local_part_matches_text: z
41
+ .array(z.string().min(1))
42
+ .min(1)
43
+ .describe('Local-part patterns the rule matches on'),
44
+ inbound_sender_email_match_type: z
45
+ .string()
46
+ .max(16)
47
+ .optional()
48
+ .describe('Match type from the XRM_SENDER_MATCH_TYPE lookup (EXACT, REGEX). Defaults to EXACT.'),
49
+ inbound_sender_email_match_destinations: z
50
+ .array(z.string().min(1))
51
+ .optional()
52
+ .describe('Optional set of destinations the matched mail is dispatched to'),
53
+ metadata: z.record(z.unknown()).optional(),
54
+ confirm: confirmFlagSchema,
55
+ idempotency_key: unenforcedIdempotencyKeySchema,
56
+ }),
57
+ capabilities: [cap('xrm_inbound_email_rules', 'INSERT')],
58
+ sideEffect: 'state_change',
59
+ confirmation: 'caller_confirms',
60
+ idempotency: 'not_idempotent',
61
+ handler: async (args, ctx) => {
62
+ const input = args;
63
+ const body = {
64
+ email_id: input.email_id,
65
+ inbound_sender_email_match_rule: input.inbound_sender_email_match_rule,
66
+ inbound_sender_email_local_part_matches_text: input.inbound_sender_email_local_part_matches_text,
67
+ };
68
+ for (const field of [
69
+ 'inbound_sender_email_match_type',
70
+ 'inbound_sender_email_match_destinations',
71
+ 'metadata',
72
+ ]) {
73
+ if (input[field] !== undefined)
74
+ body[field] = input[field];
75
+ }
76
+ try {
77
+ const rows = await ctx.apiClient.post(`${ctx.apiClient.dbBasePath}/xrm_inbound_email_rules?select=*`, body, { headers: writeHeadersWithIdempotency(input.idempotency_key) });
78
+ return successResponse(rows[0]);
79
+ }
80
+ catch (error) {
81
+ return errorResponse(API_ERROR, `Failed to create XRM inbound email rule: ${error.message}`);
82
+ }
83
+ },
84
+ };
85
+ //# sourceMappingURL=xrm-inbound-email-rule-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xrm-inbound-email-rule-create.js","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-inbound-email-rule-create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Tool } from '../registry.js';
2
+ /**
3
+ * Provisioning semantic tool: create a new marketplace merchant
4
+ * (`xrm_merchants`) linked to an existing PRM party. Creating a
5
+ * merchant makes it discoverable to buyers and causes downstream
6
+ * provisioning (search indexing, listings), so the tool requires:
7
+ *
8
+ * - `confirm: true` to prevent accidental invocation;
9
+ * - a `party_id` (natural key — the merchant's owning PRM party).
10
+ * (party_id, tenant_id) is unique, so a retry fails with a
11
+ * duplicate-key error rather than provisioning a duplicate.
12
+ *
13
+ * `merchant_approval_status_code` is deliberately not an input:
14
+ * approving a merchant is a separate decision from creating one.
15
+ *
16
+ * Provider credentials (`xrm_merchant_authentication_configuration_details`
17
+ * and `xrm_merchant_payment_processor_credentials`) are EXCLUDED from
18
+ * the MCP surface by the credentials guardrail and are never written
19
+ * or returned by this tool.
20
+ */
21
+ export declare const xrmMerchantCreateTool: Tool;
22
+ //# sourceMappingURL=xrm-merchant-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xrm-merchant-create.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAStC;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,IA+DnC,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { z } from 'zod';
2
+ import { API_ERROR, errorResponse, successResponse } from '../types.js';
3
+ import { cap } from '../../capabilities/tool-capability.js';
4
+ import { confirmFlagSchema, unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
5
+ /**
6
+ * Provisioning semantic tool: create a new marketplace merchant
7
+ * (`xrm_merchants`) linked to an existing PRM party. Creating a
8
+ * merchant makes it discoverable to buyers and causes downstream
9
+ * provisioning (search indexing, listings), so the tool requires:
10
+ *
11
+ * - `confirm: true` to prevent accidental invocation;
12
+ * - a `party_id` (natural key — the merchant's owning PRM party).
13
+ * (party_id, tenant_id) is unique, so a retry fails with a
14
+ * duplicate-key error rather than provisioning a duplicate.
15
+ *
16
+ * `merchant_approval_status_code` is deliberately not an input:
17
+ * approving a merchant is a separate decision from creating one.
18
+ *
19
+ * Provider credentials (`xrm_merchant_authentication_configuration_details`
20
+ * and `xrm_merchant_payment_processor_credentials`) are EXCLUDED from
21
+ * the MCP surface by the credentials guardrail and are never written
22
+ * or returned by this tool.
23
+ */
24
+ export const xrmMerchantCreateTool = {
25
+ name: 'xrm_merchant_create',
26
+ description: 'Provision a new marketplace merchant (xrm_merchants). Requires confirm=true and a ' +
27
+ 'party_id linking the merchant to its owning PRM party. Provider credentials are ' +
28
+ 'never written through this tool. One merchant per party: a retry for the same party ' +
29
+ 'fails with a duplicate-key error instead of creating a second merchant.',
30
+ inputSchema: z.object({
31
+ party_id: z
32
+ .string()
33
+ .min(1)
34
+ .describe('UUID of the prm_parties row this merchant is owned by. One merchant per party.'),
35
+ merchant_name: z.string().min(1).max(256).describe('Display name of the merchant'),
36
+ merchant_common_name: z
37
+ .string()
38
+ .max(256)
39
+ .optional()
40
+ .describe('Short / common name of the merchant'),
41
+ merchant_description: z.string().optional(),
42
+ merchant_type_code: z.string().max(32).optional(),
43
+ merchant_class_code: z.string().max(32).optional(),
44
+ merchant_status_code: z.string().max(32).optional(),
45
+ merchant_image_url_logo: z.string().url().optional(),
46
+ merchant_image_url_thumbnail: z.string().url().optional(),
47
+ display_order: z.number().int().optional(),
48
+ metadata: z.record(z.unknown()).optional(),
49
+ confirm: confirmFlagSchema,
50
+ idempotency_key: unenforcedIdempotencyKeySchema,
51
+ }),
52
+ capabilities: [cap('xrm_merchants', 'INSERT')],
53
+ sideEffect: 'provisioning',
54
+ confirmation: 'caller_confirms',
55
+ idempotency: 'natural_key',
56
+ handler: async (args, ctx) => {
57
+ const input = args;
58
+ const body = {
59
+ party_id: input.party_id,
60
+ merchant_name: input.merchant_name,
61
+ };
62
+ for (const field of [
63
+ 'merchant_common_name',
64
+ 'merchant_description',
65
+ 'merchant_type_code',
66
+ 'merchant_class_code',
67
+ 'merchant_status_code',
68
+ 'merchant_image_url_logo',
69
+ 'merchant_image_url_thumbnail',
70
+ 'display_order',
71
+ 'metadata',
72
+ ]) {
73
+ if (input[field] !== undefined)
74
+ body[field] = input[field];
75
+ }
76
+ try {
77
+ const rows = await ctx.apiClient.post(`${ctx.apiClient.dbBasePath}/xrm_merchants?select=*`, body, { headers: writeHeadersWithIdempotency(input.idempotency_key) });
78
+ return successResponse(rows[0]);
79
+ }
80
+ catch (error) {
81
+ return errorResponse(API_ERROR, `Failed to create XRM merchant: ${error.message}`);
82
+ }
83
+ },
84
+ };
85
+ //# sourceMappingURL=xrm-merchant-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xrm-merchant-create.js","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Tool } from '../registry.js';
2
+ /**
3
+ * Explicit-schema update for `xrm_merchants` — safe metadata fields
4
+ * only. `party_id` (natural key) is intentionally not writable through
5
+ * this tool; retargeting a merchant to a different party is not a
6
+ * rename operation. `merchant_approval_status_code` is not writable
7
+ * either: this tool needs no confirmation, so it must not be able to
8
+ * approve a merchant. Provider credentials are in an excluded table and
9
+ * are never touched.
10
+ *
11
+ * Retry-safe (converges on the same target state).
12
+ */
13
+ export declare const xrmMerchantUpdateTool: Tool;
14
+ //# sourceMappingURL=xrm-merchant-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xrm-merchant-update.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAQtC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,IAqDnC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ import { API_ERROR, errorResponse, successResponse } from '../types.js';
3
+ import { cap } from '../../capabilities/tool-capability.js';
4
+ import { unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
5
+ /**
6
+ * Explicit-schema update for `xrm_merchants` — safe metadata fields
7
+ * only. `party_id` (natural key) is intentionally not writable through
8
+ * this tool; retargeting a merchant to a different party is not a
9
+ * rename operation. `merchant_approval_status_code` is not writable
10
+ * either: this tool needs no confirmation, so it must not be able to
11
+ * approve a merchant. Provider credentials are in an excluded table and
12
+ * are never touched.
13
+ *
14
+ * Retry-safe (converges on the same target state).
15
+ */
16
+ export const xrmMerchantUpdateTool = {
17
+ name: 'xrm_merchant_update',
18
+ description: 'Update marketplace merchant metadata (xrm_merchants) with an explicit safe field set. ' +
19
+ 'party_id and merchant_approval_status_code are not writable. Provider credentials live ' +
20
+ 'in an excluded table and cannot be set through MCP. Retry-safe.',
21
+ inputSchema: z.object({
22
+ id: z.string().min(1).describe('UUID of the merchant'),
23
+ merchant_name: z.string().min(1).max(256).optional(),
24
+ merchant_common_name: z.string().max(256).nullable().optional(),
25
+ merchant_description: z.string().nullable().optional(),
26
+ merchant_type_code: z.string().max(32).nullable().optional(),
27
+ merchant_class_code: z.string().max(32).nullable().optional(),
28
+ merchant_status_code: z.string().max(32).nullable().optional(),
29
+ merchant_image_url_logo: z.string().url().nullable().optional(),
30
+ merchant_image_url_thumbnail: z.string().url().nullable().optional(),
31
+ display_order: z.number().int().nullable().optional(),
32
+ metadata: z.record(z.unknown()).nullable().optional(),
33
+ idempotency_key: unenforcedIdempotencyKeySchema,
34
+ }),
35
+ capabilities: [cap('xrm_merchants', 'UPDATE')],
36
+ sideEffect: 'state_change',
37
+ confirmation: 'none',
38
+ idempotency: 'natural_key',
39
+ handler: async (args, ctx) => {
40
+ const { id, idempotency_key, ...rest } = args;
41
+ const body = {};
42
+ for (const [k, v] of Object.entries(rest)) {
43
+ if (v !== undefined)
44
+ body[k] = v;
45
+ }
46
+ if (Object.keys(body).length === 0) {
47
+ return errorResponse(API_ERROR, 'Update payload is empty — supply at least one field to change.');
48
+ }
49
+ try {
50
+ const rows = await ctx.apiClient.patch(`${ctx.apiClient.dbBasePath}/xrm_merchants?id=eq.${id}&select=*`, body, { headers: writeHeadersWithIdempotency(idempotency_key) });
51
+ if (!rows || rows.length === 0) {
52
+ return errorResponse(API_ERROR, `XRM merchant ${id} not found or not accessible`);
53
+ }
54
+ return successResponse(rows[0]);
55
+ }
56
+ catch (error) {
57
+ return errorResponse(API_ERROR, `Failed to update XRM merchant: ${error.message}`);
58
+ }
59
+ },
60
+ };
61
+ //# sourceMappingURL=xrm-merchant-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xrm-merchant-update.js","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raytio/mcp-server",
3
- "version": "10.1.0",
3
+ "version": "10.3.0",
4
4
  "description": "MCP server for secure AI agent access to Raytio user data",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",