@xrpl-utilities/mcp 0.1.6

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 (41) hide show
  1. package/README.md +109 -0
  2. package/dist/dispatch.d.ts +53 -0
  3. package/dist/dispatch.js +158 -0
  4. package/dist/dispatch.js.map +1 -0
  5. package/dist/index.d.ts +13 -0
  6. package/dist/index.js +70 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/jsonschema.d.ts +19 -0
  9. package/dist/jsonschema.js +7 -0
  10. package/dist/jsonschema.js.map +1 -0
  11. package/dist/server.d.ts +9 -0
  12. package/dist/server.js +93 -0
  13. package/dist/server.js.map +1 -0
  14. package/dist/services/index.d.ts +28 -0
  15. package/dist/services/index.js +25 -0
  16. package/dist/services/index.js.map +1 -0
  17. package/dist/services/pulse.d.ts +12 -0
  18. package/dist/services/pulse.js +66 -0
  19. package/dist/services/pulse.js.map +1 -0
  20. package/dist/services/sentinel.d.ts +11 -0
  21. package/dist/services/sentinel.js +84 -0
  22. package/dist/services/sentinel.js.map +1 -0
  23. package/dist/services/telemetry.d.ts +21 -0
  24. package/dist/services/telemetry.js +118 -0
  25. package/dist/services/telemetry.js.map +1 -0
  26. package/dist/services/trust.d.ts +11 -0
  27. package/dist/services/trust.js +140 -0
  28. package/dist/services/trust.js.map +1 -0
  29. package/dist/transport/http.d.ts +18 -0
  30. package/dist/transport/http.js +106 -0
  31. package/dist/transport/http.js.map +1 -0
  32. package/dist/transport/stdio.d.ts +17 -0
  33. package/dist/transport/stdio.js +28 -0
  34. package/dist/transport/stdio.js.map +1 -0
  35. package/dist/types.d.ts +86 -0
  36. package/dist/types.js +11 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/validate.d.ts +29 -0
  39. package/dist/validate.js +88 -0
  40. package/dist/validate.js.map +1 -0
  41. package/package.json +50 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * XR-Pulse: normalized XRPL signal feed bridging public-source news,
3
+ * on-chain whale activity, and XLS-70/80/81 permissioned-domain
4
+ * lifecycle events into one time-ordered stream.
5
+ *
6
+ * News carries a four-hour XRPL price-window correlation. Whale rows
7
+ * carry sender + receiver addresses with XRPScan institutional
8
+ * labels. Permissioned-domain rows mirror XR-Trust's /events with
9
+ * cross-product enrichment. Paid via x402 ($0.10 USD per query).
10
+ */
11
+ export const pulse = {
12
+ id: "pulse",
13
+ label: "XR-Pulse",
14
+ baseUrl: "https://pulse.xrpl-utilities.io",
15
+ manifestUrl: "https://pulse.xrpl-utilities.io/agents.json",
16
+ knownSchemaVersions: ["1.10.0", "1.10.1"],
17
+ tools: [
18
+ {
19
+ name: "xrpl_pulse_recent_events",
20
+ description: "Return the most-recent normalized XRPL signal events newest-first. " +
21
+ "Mixes three streams: public-source news (regulatory press + " +
22
+ "central banks + crypto media filtered for XRP/RLUSD/XRPL/Ripple), " +
23
+ "on-chain whale activity (every Payment above the storage " +
24
+ "threshold), and XLS-70/80/81 permissioned-domain lifecycle " +
25
+ "events sourced from XR-Trust. Each event carries title, brief, " +
26
+ "published_at, source_appearances[], correlation (news only), " +
27
+ "active_utility (per-source canonical shape), and " +
28
+ "target_addresses[]. Costs $0.10 USD per call paid via XRPL x402.",
29
+ inputSchema: {
30
+ type: "object",
31
+ properties: {
32
+ limit: {
33
+ type: "integer",
34
+ description: "Max events to return (1-500). Default 50.",
35
+ minimum: 1,
36
+ maximum: 500,
37
+ default: 50,
38
+ },
39
+ since_iso: {
40
+ type: "string",
41
+ description: "ISO 8601 timestamp; only events with published_at >= this " +
42
+ "are returned. Optional.",
43
+ },
44
+ min_whale_usd: {
45
+ type: "number",
46
+ description: "Suppress whale events below this USD threshold. Default " +
47
+ "$500,000 (whale-grade only). Pass 0 to see the full " +
48
+ "$50k+ activity stream.",
49
+ minimum: 0,
50
+ },
51
+ payment_signature: {
52
+ type: "string",
53
+ description: "x402 v2 PAYMENT-SIGNATURE header.",
54
+ },
55
+ },
56
+ additionalProperties: false,
57
+ },
58
+ method: "POST",
59
+ path: "/events/recent",
60
+ authMode: "inline_x402",
61
+ bodyFromArgs: true,
62
+ stripArgs: ["payment_signature"],
63
+ },
64
+ ],
65
+ };
66
+ //# sourceMappingURL=pulse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pulse.js","sourceRoot":"","sources":["../../src/services/pulse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,CAAC,MAAM,KAAK,GAAe;IAC/B,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,iCAAiC;IAC1C,WAAW,EAAE,6CAA6C;IAC1D,mBAAmB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACzC,KAAK,EAAE;QACL;YACE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EACT,qEAAqE;gBACrE,8DAA8D;gBAC9D,oEAAoE;gBACpE,2DAA2D;gBAC3D,6DAA6D;gBAC7D,iEAAiE;gBACjE,+DAA+D;gBAC/D,mDAAmD;gBACnD,kEAAkE;YACpE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE;wBACL,IAAI,EAAE,SAAS;wBACf,WAAW,EAAE,2CAA2C;wBACxD,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,EAAE;qBACZ;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,4DAA4D;4BAC5D,yBAAyB;qBAC5B;oBACD,aAAa,EAAE;wBACb,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,0DAA0D;4BAC1D,sDAAsD;4BACtD,wBAAwB;wBAC1B,OAAO,EAAE,CAAC;qBACX;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,aAAa;YACvB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,CAAC,mBAAmB,CAAC;SACjC;KACF;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * XR-Sentinel: XRPL wallet activity-pattern classifier.
3
+ *
4
+ * Returns a 0-100 activity_score, an activity_level (Low / Medium /
5
+ * High / Dormant / Unknown), a confidence tier, an array of
6
+ * behavioral signals from a published catalog, and an AI-generated
7
+ * narrative reasoning. Free for the marketing-site origin; paid via
8
+ * x402 ($0.10 USD) for agents.
9
+ */
10
+ import type { ServiceDef } from "../types.js";
11
+ export declare const sentinel: ServiceDef;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * XR-Sentinel: XRPL wallet activity-pattern classifier.
3
+ *
4
+ * Returns a 0-100 activity_score, an activity_level (Low / Medium /
5
+ * High / Dormant / Unknown), a confidence tier, an array of
6
+ * behavioral signals from a published catalog, and an AI-generated
7
+ * narrative reasoning. Free for the marketing-site origin; paid via
8
+ * x402 ($0.10 USD) for agents.
9
+ */
10
+ export const sentinel = {
11
+ id: "sentinel",
12
+ label: "XR-Sentinel",
13
+ baseUrl: "https://sentinel.xrpl-utilities.io",
14
+ manifestUrl: "https://sentinel.xrpl-utilities.io/agents.json",
15
+ knownSchemaVersions: ["2026-05"],
16
+ tools: [
17
+ {
18
+ name: "xrpl_sentinel_scan",
19
+ description: "Classify an XRPL wallet by its on-chain activity pattern. Returns " +
20
+ "activity_score (0-100, higher = more automated/service-like), " +
21
+ "activity_level (Low/Medium/High/Dormant/Unknown), confidence, " +
22
+ "signals[] from a 22-entry behavioral catalog, top_counterparties[] " +
23
+ "with XRPScan labels, an AI-generated reasoning narrative, and a " +
24
+ "_delta block when prior recorded scans exist. Costs $0.10 USD per " +
25
+ "call paid via XRPL x402 (XRP or RLUSD). Pass payment_signature " +
26
+ "from your x402-xrpl client.",
27
+ inputSchema: {
28
+ type: "object",
29
+ properties: {
30
+ address: {
31
+ type: "string",
32
+ description: "XRPL classic address (r-prefixed, base58).",
33
+ pattern: "^r[1-9A-HJ-NP-Za-km-z]{24,34}$",
34
+ },
35
+ payment_signature: {
36
+ type: "string",
37
+ description: "x402 v2 PAYMENT-SIGNATURE header (base64-encoded JSON of a " +
38
+ "signed XRPL Payment matching one of the requirements returned " +
39
+ "by an initial unauthenticated probe). Omit for free " +
40
+ "marketing-site preview, supply for the paid agent path.",
41
+ },
42
+ },
43
+ required: ["address"],
44
+ additionalProperties: false,
45
+ },
46
+ method: "POST",
47
+ path: "/scan",
48
+ authMode: "inline_x402",
49
+ bodyFromArgs: true,
50
+ stripArgs: ["payment_signature"],
51
+ },
52
+ {
53
+ name: "xrpl_sentinel_scan_history",
54
+ description: "Return up to 25 prior recorded scans for an address so an agent " +
55
+ "can read trajectory without scanning the wallet N times. Each " +
56
+ "history row carries score, level, signals, features, and " +
57
+ "scanned_at. Costs $0.10 USD per call paid via XRPL x402. " +
58
+ "Recording began with schema 2.1.0; older paid scans were not " +
59
+ "persisted.",
60
+ inputSchema: {
61
+ type: "object",
62
+ properties: {
63
+ address: {
64
+ type: "string",
65
+ description: "XRPL classic address.",
66
+ pattern: "^r[1-9A-HJ-NP-Za-km-z]{24,34}$",
67
+ },
68
+ payment_signature: {
69
+ type: "string",
70
+ description: "x402 v2 PAYMENT-SIGNATURE header.",
71
+ },
72
+ },
73
+ required: ["address"],
74
+ additionalProperties: false,
75
+ },
76
+ method: "POST",
77
+ path: "/scan/history",
78
+ authMode: "inline_x402",
79
+ bodyFromArgs: true,
80
+ stripArgs: ["payment_signature"],
81
+ },
82
+ ],
83
+ };
84
+ //# sourceMappingURL=sentinel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentinel.js","sourceRoot":"","sources":["../../src/services/sentinel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,CAAC,MAAM,QAAQ,GAAe;IAClC,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,oCAAoC;IAC7C,WAAW,EAAE,gDAAgD;IAC7D,mBAAmB,EAAE,CAAC,SAAS,CAAC;IAChC,KAAK,EAAE;QACL;YACE,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,oEAAoE;gBACpE,gEAAgE;gBAChE,gEAAgE;gBAChE,qEAAqE;gBACrE,kEAAkE;gBAClE,oEAAoE;gBACpE,iEAAiE;gBACjE,6BAA6B;YAC/B,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4CAA4C;wBACzD,OAAO,EAAE,gCAAgC;qBAC1C;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,6DAA6D;4BAC7D,gEAAgE;4BAChE,sDAAsD;4BACtD,yDAAyD;qBAC5D;iBACF;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;gBACrB,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,aAAa;YACvB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,CAAC,mBAAmB,CAAC;SACjC;QACD;YACE,IAAI,EAAE,4BAA4B;YAClC,WAAW,EACT,kEAAkE;gBAClE,gEAAgE;gBAChE,2DAA2D;gBAC3D,2DAA2D;gBAC3D,+DAA+D;gBAC/D,YAAY;YACd,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,uBAAuB;wBACpC,OAAO,EAAE,gCAAgC;qBAC1C;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;gBACrB,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,aAAa;YACvB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,CAAC,mBAAmB,CAAC;SACjC;KACF;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * XR-Telemetry: XRPL macro snapshot — supply, liquidity, AMM, derived
3
+ * Active Float (3-second settlement supply), and the Burst Math
4
+ * utility floor.
5
+ *
6
+ * Two payment flows are exposed:
7
+ *
8
+ * 1. The async invoice flow (quote → pay → status → results), which
9
+ * mirrors how a human user buys a snapshot. Useful for agents
10
+ * that hold a wallet and can do the polling themselves.
11
+ *
12
+ * 2. The one-shot /scan endpoint, which uses the standard x402
13
+ * verify-then-work-then-settle pattern (caller provides
14
+ * PAYMENT-SIGNATURE in the request, server verifies, runs the
15
+ * snapshot, settles, returns).
16
+ *
17
+ * MCP exposes both — agents pick the path that matches their wallet
18
+ * abstraction. $0.10 USD per call.
19
+ */
20
+ import type { ServiceDef } from "../types.js";
21
+ export declare const telemetry: ServiceDef;
@@ -0,0 +1,118 @@
1
+ /**
2
+ * XR-Telemetry: XRPL macro snapshot — supply, liquidity, AMM, derived
3
+ * Active Float (3-second settlement supply), and the Burst Math
4
+ * utility floor.
5
+ *
6
+ * Two payment flows are exposed:
7
+ *
8
+ * 1. The async invoice flow (quote → pay → status → results), which
9
+ * mirrors how a human user buys a snapshot. Useful for agents
10
+ * that hold a wallet and can do the polling themselves.
11
+ *
12
+ * 2. The one-shot /scan endpoint, which uses the standard x402
13
+ * verify-then-work-then-settle pattern (caller provides
14
+ * PAYMENT-SIGNATURE in the request, server verifies, runs the
15
+ * snapshot, settles, returns).
16
+ *
17
+ * MCP exposes both — agents pick the path that matches their wallet
18
+ * abstraction. $0.10 USD per call.
19
+ */
20
+ export const telemetry = {
21
+ id: "telemetry",
22
+ label: "XR-Telemetry",
23
+ baseUrl: "https://telemetry.xrpl-utilities.io",
24
+ manifestUrl: "https://telemetry.xrpl-utilities.io/agents.json",
25
+ knownSchemaVersions: ["1.1.0"],
26
+ tools: [
27
+ {
28
+ name: "xrpl_telemetry_snapshot",
29
+ description: "One-shot XRPL macro snapshot. Returns supply (total / circulating " +
30
+ "/ escrowed / dormant / AMM-locked / exchange omnibus / DEX " +
31
+ "orderbook depth), liquidity (per-region 24h flows), amm (top " +
32
+ "pairs + vaults), derived_models.active_float (modeled supply " +
33
+ "available for 3-second settlement, with the full additive " +
34
+ "mathematical_bridge), and utility_floor (baseline equilibrium " +
35
+ "price + premium ratio). Standard x402 verify-then-work-then-" +
36
+ "settle. $0.10 USD per call. Pass payment_signature.",
37
+ inputSchema: {
38
+ type: "object",
39
+ properties: {
40
+ payment_signature: {
41
+ type: "string",
42
+ description: "x402 v2 PAYMENT-SIGNATURE header.",
43
+ },
44
+ },
45
+ additionalProperties: false,
46
+ },
47
+ method: "POST",
48
+ path: "/scan",
49
+ authMode: "inline_x402",
50
+ bodyFromArgs: true,
51
+ stripArgs: ["payment_signature"],
52
+ },
53
+ {
54
+ name: "xrpl_telemetry_get_quote",
55
+ description: "Start the async invoice flow: returns invoice_id, amount in " +
56
+ "drops, payTo address, deepLink + QR, and expiry. The caller " +
57
+ "pays the XRPL Payment to that address from any wallet, then " +
58
+ "polls xrpl_telemetry_get_status until paid: true, then calls " +
59
+ "xrpl_telemetry_get_results. The MCP wrapper itself doesn't " +
60
+ "require a payment_signature header, but the snapshot still " +
61
+ "costs $0.10 USD - the payment just happens out-of-band as a " +
62
+ "regular XRPL Payment instead of an inline x402 header.",
63
+ inputSchema: {
64
+ type: "object",
65
+ properties: {},
66
+ additionalProperties: false,
67
+ },
68
+ method: "POST",
69
+ path: "/quote",
70
+ authMode: "async_invoice",
71
+ bodyFromArgs: true,
72
+ },
73
+ {
74
+ name: "xrpl_telemetry_get_status",
75
+ description: "Poll the status of an invoice from xrpl_telemetry_get_quote. " +
76
+ "Returns paid (bool), amount, ledger_index when settled, and " +
77
+ "expiry. The MCP wrapper itself doesn't require a payment header " +
78
+ "(the operator's check is just reading the validated XRPL ledger " +
79
+ "for the deposit transaction).",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {
83
+ invoice_id: {
84
+ type: "string",
85
+ description: "Invoice id from the /quote response.",
86
+ },
87
+ },
88
+ required: ["invoice_id"],
89
+ additionalProperties: false,
90
+ },
91
+ method: "GET",
92
+ path: "/status/{invoice_id}",
93
+ authMode: "async_invoice",
94
+ },
95
+ {
96
+ name: "xrpl_telemetry_get_results",
97
+ description: "Fetch the full TelemetryPayload for an invoice once paid. Same " +
98
+ "shape as xrpl_telemetry_snapshot. The MCP wrapper doesn't need " +
99
+ "a payment header here because the $0.10 already settled when " +
100
+ "the caller paid the deeplink in step 2 of the flow.",
101
+ inputSchema: {
102
+ type: "object",
103
+ properties: {
104
+ invoice_id: {
105
+ type: "string",
106
+ description: "Paid invoice id.",
107
+ },
108
+ },
109
+ required: ["invoice_id"],
110
+ additionalProperties: false,
111
+ },
112
+ method: "GET",
113
+ path: "/results/{invoice_id}",
114
+ authMode: "async_invoice",
115
+ },
116
+ ],
117
+ };
118
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/services/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,qCAAqC;IAC9C,WAAW,EAAE,iDAAiD;IAC9D,mBAAmB,EAAE,CAAC,OAAO,CAAC;IAC9B,KAAK,EAAE;QACL;YACE,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EACT,oEAAoE;gBACpE,6DAA6D;gBAC7D,+DAA+D;gBAC/D,+DAA+D;gBAC/D,4DAA4D;gBAC5D,gEAAgE;gBAChE,8DAA8D;gBAC9D,qDAAqD;YACvD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,aAAa;YACvB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,CAAC,mBAAmB,CAAC;SACjC;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EACT,8DAA8D;gBAC9D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,+DAA+D;gBAC/D,6DAA6D;gBAC7D,6DAA6D;gBAC7D,8DAA8D;gBAC9D,wDAAwD;YAC1D,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;gBACd,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,eAAe;YACzB,YAAY,EAAE,IAAI;SACnB;QACD;YACE,IAAI,EAAE,2BAA2B;YACjC,WAAW,EACT,+DAA+D;gBAC/D,8DAA8D;gBAC9D,kEAAkE;gBAClE,kEAAkE;gBAClE,+BAA+B;YACjC,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sCAAsC;qBACpD;iBACF;gBACD,QAAQ,EAAE,CAAC,YAAY,CAAC;gBACxB,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,eAAe;SAC1B;QACD;YACE,IAAI,EAAE,4BAA4B;YAClC,WAAW,EACT,iEAAiE;gBACjE,iEAAiE;gBACjE,+DAA+D;gBAC/D,qDAAqD;YACvD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,kBAAkB;qBAChC;iBACF;gBACD,QAAQ,EAAE,CAAC,YAAY,CAAC;gBACxB,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,eAAe;SAC1B;KACF;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * XR-Trust: directory + drill-down for XRPL permissioned-asset stack
3
+ * (XLS-70 Credentials, XLS-80 PermissionedDomains, XLS-81 Permissioned
4
+ * DEX), with XLS-40 DID identity bridge.
5
+ *
6
+ * /domains, /domain/{id}, /credentials/issuers, and /events are all
7
+ * x402-paid for agents ($0.10 USD per call). The marketing site uses
8
+ * the web-origin bypass; MCP callers pay normally.
9
+ */
10
+ import type { ServiceDef } from "../types.js";
11
+ export declare const trust: ServiceDef;
@@ -0,0 +1,140 @@
1
+ /**
2
+ * XR-Trust: directory + drill-down for XRPL permissioned-asset stack
3
+ * (XLS-70 Credentials, XLS-80 PermissionedDomains, XLS-81 Permissioned
4
+ * DEX), with XLS-40 DID identity bridge.
5
+ *
6
+ * /domains, /domain/{id}, /credentials/issuers, and /events are all
7
+ * x402-paid for agents ($0.10 USD per call). The marketing site uses
8
+ * the web-origin bypass; MCP callers pay normally.
9
+ */
10
+ export const trust = {
11
+ id: "trust",
12
+ label: "XR-Trust",
13
+ baseUrl: "https://trust.xrpl-utilities.io",
14
+ manifestUrl: "https://trust.xrpl-utilities.io/agents.json",
15
+ knownSchemaVersions: ["2026-11"],
16
+ tools: [
17
+ {
18
+ name: "xrpl_trust_list_domains",
19
+ description: "Enumerate all XRPL PermissionedDomain (XLS-80) ledger objects on " +
20
+ "validated mainnet. Each record carries domain_id, owner_address, " +
21
+ "owner_label (XRPScan), accepted_credentials[] (with hex-decoded " +
22
+ "credential_type when ASCII-printable), institutional_issuer_count, " +
23
+ "and full ledger metadata. Walk_status indicates snapshot " +
24
+ "completeness. $0.10 USD per call paid via x402.",
25
+ inputSchema: {
26
+ type: "object",
27
+ properties: {
28
+ limit: {
29
+ type: "integer",
30
+ minimum: 1,
31
+ maximum: 500,
32
+ default: 100,
33
+ },
34
+ offset: {
35
+ type: "integer",
36
+ minimum: 0,
37
+ default: 0,
38
+ },
39
+ payment_signature: {
40
+ type: "string",
41
+ description: "x402 v2 PAYMENT-SIGNATURE header.",
42
+ },
43
+ },
44
+ additionalProperties: false,
45
+ },
46
+ method: "GET",
47
+ path: "/domains",
48
+ authMode: "inline_x402",
49
+ },
50
+ {
51
+ name: "xrpl_trust_get_domain",
52
+ description: "Drill down on a single PermissionedDomain by 64-hex LedgerIndex. " +
53
+ "Returns the list-view fields plus lifecycle (created_at, " +
54
+ "last_modified_at, modification_count, walked from PreviousTxnID " +
55
+ "meta chain), permissioned_market (XLS-81 owner-side offers + " +
56
+ "AMMs), and identity (XLS-40 DID + parsed .well-known/" +
57
+ "xrp-ledger.toml when published). $0.10 USD per call.",
58
+ inputSchema: {
59
+ type: "object",
60
+ properties: {
61
+ domain_id: {
62
+ type: "string",
63
+ description: "64-character hex LedgerIndex of the PermissionedDomain object.",
64
+ pattern: "^[A-Fa-f0-9]{64}$",
65
+ },
66
+ payment_signature: {
67
+ type: "string",
68
+ description: "x402 v2 PAYMENT-SIGNATURE header.",
69
+ },
70
+ },
71
+ required: ["domain_id"],
72
+ additionalProperties: false,
73
+ },
74
+ method: "GET",
75
+ path: "/domain/{domain_id}",
76
+ authMode: "inline_x402",
77
+ },
78
+ {
79
+ name: "xrpl_trust_credential_issuers",
80
+ description: "Aggregated view of every distinct credential issuer referenced " +
81
+ "across all PermissionedDomain objects. Each entry: issuer_address, " +
82
+ "issuer_label, domains_referencing (count), credential_types_issued " +
83
+ "(sorted unique). Useful for ranking which institutional issuers " +
84
+ "are most adopted on-chain. $0.10 USD per call.",
85
+ inputSchema: {
86
+ type: "object",
87
+ properties: {
88
+ payment_signature: {
89
+ type: "string",
90
+ description: "x402 v2 PAYMENT-SIGNATURE header.",
91
+ },
92
+ },
93
+ additionalProperties: false,
94
+ },
95
+ method: "GET",
96
+ path: "/credentials/issuers",
97
+ authMode: "inline_x402",
98
+ },
99
+ {
100
+ name: "xrpl_trust_recent_events",
101
+ description: "XLS-70/80/81 lifecycle event stream sourced from XR-Trust's " +
102
+ "long-lived XRPL WebSocket subscribe loop. Each event carries " +
103
+ "tx_type (PermissionedDomainSet/Delete, CredentialCreate/Accept/" +
104
+ "Delete, OfferCreate/OfferCancel, AMMCreate/etc.), tx_hash, " +
105
+ "account, domain_id, ledger_index, and tx_type-specific payload " +
106
+ "(credential_type for XLS-70, taker_gets/pays for XLS-81). " +
107
+ "Cursor via since=trust_lifecycle_<n>. $0.10 USD per call.",
108
+ inputSchema: {
109
+ type: "object",
110
+ properties: {
111
+ since: {
112
+ type: "string",
113
+ description: "Event-id cursor (e.g. 'trust_lifecycle_42'); only events " +
114
+ "after this id are returned. Optional.",
115
+ },
116
+ limit: {
117
+ type: "integer",
118
+ minimum: 1,
119
+ maximum: 500,
120
+ default: 100,
121
+ },
122
+ tx_type: {
123
+ type: "string",
124
+ description: "Comma-separated filter on TransactionType (e.g. " +
125
+ "'PermissionedDomainSet,CredentialCreate'). Optional.",
126
+ },
127
+ payment_signature: {
128
+ type: "string",
129
+ description: "x402 v2 PAYMENT-SIGNATURE header.",
130
+ },
131
+ },
132
+ additionalProperties: false,
133
+ },
134
+ method: "GET",
135
+ path: "/events",
136
+ authMode: "inline_x402",
137
+ },
138
+ ],
139
+ };
140
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/services/trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,CAAC,MAAM,KAAK,GAAe;IAC/B,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,iCAAiC;IAC1C,WAAW,EAAE,6CAA6C;IAC1D,mBAAmB,EAAE,CAAC,SAAS,CAAC;IAChC,KAAK,EAAE;QACL;YACE,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EACT,mEAAmE;gBACnE,mEAAmE;gBACnE,kEAAkE;gBAClE,qEAAqE;gBACrE,2DAA2D;gBAC3D,iDAAiD;YACnD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE;wBACL,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,GAAG;qBACb;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;qBACX;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,aAAa;SACxB;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EACT,mEAAmE;gBACnE,2DAA2D;gBAC3D,kEAAkE;gBAClE,+DAA+D;gBAC/D,uDAAuD;gBACvD,sDAAsD;YACxD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,gEAAgE;wBAClE,OAAO,EAAE,mBAAmB;qBAC7B;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;gBACvB,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,aAAa;SACxB;QACD;YACE,IAAI,EAAE,+BAA+B;YACrC,WAAW,EACT,iEAAiE;gBACjE,qEAAqE;gBACrE,qEAAqE;gBACrE,kEAAkE;gBAClE,gDAAgD;YAClD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,aAAa;SACxB;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,WAAW,EACT,8DAA8D;gBAC9D,+DAA+D;gBAC/D,iEAAiE;gBACjE,6DAA6D;gBAC7D,iEAAiE;gBACjE,4DAA4D;gBAC5D,2DAA2D;YAC7D,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,2DAA2D;4BAC3D,uCAAuC;qBAC1C;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,GAAG;qBACb;oBACD,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,kDAAkD;4BAClD,sDAAsD;qBACzD;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mCAAmC;qBACjD;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,aAAa;SACxB;KACF;CACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * HTTP/SSE transport. Used when the MCP server runs as a hosted
3
+ * service (Railway, etc.) that remote MCP clients connect to over
4
+ * the network.
5
+ *
6
+ * Endpoints:
7
+ *
8
+ * GET / - service banner + manifest pointer
9
+ * GET /healthz - liveness probe + service ping summary
10
+ * POST /mcp - MCP JSON-RPC (streamable-http transport)
11
+ * GET /mcp - MCP JSON-RPC SSE (legacy clients)
12
+ *
13
+ * Auth: every paid tool call still requires the caller to provide
14
+ * their own payment_signature in the tool args. The hosted endpoint
15
+ * is a transparent proxy, NOT a subsidy. Operator-issued bypass via
16
+ * MCP_BYPASS_KEY env var is rate-limited per-IP at the proxy layer.
17
+ */
18
+ export declare function runHttp(port: number): Promise<void>;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * HTTP/SSE transport. Used when the MCP server runs as a hosted
3
+ * service (Railway, etc.) that remote MCP clients connect to over
4
+ * the network.
5
+ *
6
+ * Endpoints:
7
+ *
8
+ * GET / - service banner + manifest pointer
9
+ * GET /healthz - liveness probe + service ping summary
10
+ * POST /mcp - MCP JSON-RPC (streamable-http transport)
11
+ * GET /mcp - MCP JSON-RPC SSE (legacy clients)
12
+ *
13
+ * Auth: every paid tool call still requires the caller to provide
14
+ * their own payment_signature in the tool args. The hosted endpoint
15
+ * is a transparent proxy, NOT a subsidy. Operator-issued bypass via
16
+ * MCP_BYPASS_KEY env var is rate-limited per-IP at the proxy layer.
17
+ */
18
+ import express from "express";
19
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
20
+ import { buildServer } from "../server.js";
21
+ const RATE_WINDOW_MS = 60_000;
22
+ const RATE_LIMIT_PER_WINDOW = 60; // generous; agents typically fire bursts
23
+ const rateBuckets = new Map();
24
+ function rateLimit(req, res) {
25
+ const ip = (req.headers["x-forwarded-for"] ?? req.socket.remoteAddress ?? "unknown")
26
+ .toString()
27
+ .split(",")[0]
28
+ .trim();
29
+ const now = Date.now();
30
+ let bucket = rateBuckets.get(ip);
31
+ if (!bucket || bucket.resetAt < now) {
32
+ bucket = { count: 0, resetAt: now + RATE_WINDOW_MS };
33
+ rateBuckets.set(ip, bucket);
34
+ }
35
+ bucket.count += 1;
36
+ if (bucket.count > RATE_LIMIT_PER_WINDOW) {
37
+ res.status(429).json({ error: "rate_limited", retry_after_s: Math.ceil((bucket.resetAt - now) / 1000) });
38
+ return false;
39
+ }
40
+ return true;
41
+ }
42
+ export async function runHttp(port) {
43
+ const app = express();
44
+ app.use(express.json({ limit: "1mb" }));
45
+ app.get("/", (_req, res) => {
46
+ res.json({
47
+ service: "xrpl-utilities-mcp",
48
+ description: "MCP server for the XRPL-Utilities portfolio (Sentinel, Pulse, Telemetry, Trust). Connect any MCP client to /mcp.",
49
+ version: "0.1.6",
50
+ mcp_endpoint: "/mcp",
51
+ docs: "https://github.com/XRPL-Utilities/xrpl-utilities-mcp",
52
+ portfolio: "https://xrpl-utilities.com",
53
+ });
54
+ });
55
+ app.get("/healthz", async (_req, res) => {
56
+ res.json({ status: "ok", service: "xrpl-utilities-mcp", version: "0.1.6" });
57
+ });
58
+ // Stateless mode: each /mcp request gets a fresh Server + Transport
59
+ // pair. The MCP SDK's streamable-http transport, even with
60
+ // sessionIdGenerator: undefined, doesn't reliably handle a shared
61
+ // transport instance across multiple unrelated requests - the second
62
+ // call returns 500 because the transport's internal state is still
63
+ // tied to the first request. The recommended stateless pattern is
64
+ // build-connect-handle-close per request. Cheap: the Server object
65
+ // is just function pointers, no expensive state.
66
+ app.all("/mcp", async (req, res) => {
67
+ if (!rateLimit(req, res))
68
+ return;
69
+ let transport = null;
70
+ try {
71
+ const mcpServer = buildServer({
72
+ bypassKey: process.env["MCP_BYPASS_KEY"],
73
+ userAgent: `xrpl-utilities-mcp/0.1.6 (http)`,
74
+ });
75
+ transport = new StreamableHTTPServerTransport({
76
+ sessionIdGenerator: undefined, // stateless
77
+ });
78
+ // Make sure the transport is torn down when the response closes,
79
+ // so a long-running SSE stream doesn't leak file descriptors.
80
+ res.on("close", () => {
81
+ transport?.close().catch(() => { });
82
+ mcpServer.close().catch(() => { });
83
+ });
84
+ await mcpServer.connect(transport);
85
+ await transport.handleRequest(req, res, req.body);
86
+ }
87
+ catch (e) {
88
+ // eslint-disable-next-line no-console
89
+ console.error("[mcp] handleRequest threw:", e.stack ?? e);
90
+ if (!res.headersSent) {
91
+ res.status(500).json({ error: "mcp_handle_failed", detail: e.message });
92
+ }
93
+ }
94
+ });
95
+ // Surface unhandled rejections in the dispatcher / SDK so we don't get
96
+ // mystery 500s from Express's default error handler with no body.
97
+ process.on("unhandledRejection", (reason) => {
98
+ // eslint-disable-next-line no-console
99
+ console.error("[mcp] unhandledRejection:", reason);
100
+ });
101
+ app.listen(port, () => {
102
+ // eslint-disable-next-line no-console
103
+ console.log(`xrpl-utilities-mcp listening on :${port} (http)`);
104
+ });
105
+ }
106
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * stdio transport. Used when Claude Desktop (or any MCP client that
3
+ * launches the server as a subprocess) spawns this binary directly.
4
+ *
5
+ * {
6
+ * "mcpServers": {
7
+ * "xrpl-utilities": {
8
+ * "command": "npx",
9
+ * "args": ["-y", "@xrpl-utilities/mcp", "--transport", "stdio"]
10
+ * }
11
+ * }
12
+ * }
13
+ *
14
+ * Single-tenant: the user's MCP_BYPASS_KEY (if set) and any pre-signed
15
+ * payment_signature live on their machine, never leave it.
16
+ */
17
+ export declare function runStdio(): Promise<void>;