@xrpl-utilities/mcp 0.2.167 → 0.2.170

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
@@ -51,7 +51,9 @@ provider attestation. The attestation rides on the tool result's
51
51
  `_meta.hSeal`, so a caller can anchor a tamper-evident, independently
52
52
  verifiable on-chain receipt of the interaction. When either var is unset the
53
53
  feature is inert and responses are unchanged. Never hardcode the key — env
54
- only. See `src/hSeal.ts`.
54
+ only. See `src/hSeal.ts` and the ops runbook
55
+ [`docs/hseal-provider.md`](docs/hseal-provider.md) (current identity, the
56
+ ed25519 curve gotcha, and how to rotate/recover the key).
55
57
 
56
58
  ## Use it
57
59
 
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 2-party H-Seal receipt assembly.
3
+ *
4
+ * When a backend co-signs its own output (returning an `hSealAttestation` on the
5
+ * result), the MCP is the CALLER: it signs a receipt binding
6
+ * caller = the MCP (this gateway identity)
7
+ * provider = the backend that computed + attested the result
8
+ * and re-verifies it against the H-Seal service. The signed receipt body plus
9
+ * the verdict ride on the tool result's `_meta.hSealReceipt`.
10
+ *
11
+ * An H-Seal receipt carries caller + exactly ONE provider, so this is distinct
12
+ * from the MCP's own gateway attestation (`_meta.hSeal`), which stays as
13
+ * supplementary metadata.
14
+ *
15
+ * Caller identity/key come from MCP_IDENTITY / MCP_KEY_RAW, falling back to the
16
+ * gateway PROVIDER_IDENTITY / PROVIDER_KEY_RAW (same key, caller role here) so
17
+ * no new secret is required. Inert when unset. NB: the H-Seal API host is
18
+ * h-seal.xr-utilities.ai (the .com host is a browser-only, Cloudflare-challenged
19
+ * surface and returns 403 to server clients).
20
+ */
21
+ export declare const hSealReceiptEnabled: boolean;
22
+ export interface HSealReceiptResult {
23
+ body: unknown;
24
+ verdict?: unknown;
25
+ verifyError?: string;
26
+ }
27
+ /**
28
+ * Build + verify a 2-party receipt from a backend provider attestation. Always
29
+ * returns the signed `body` (valid + independently verifiable) when signing
30
+ * succeeds; `verdict` is best-effort — if the H-Seal service is unreachable the
31
+ * body still stands and `verifyError` records why. Returns undefined only when
32
+ * H-Seal isn't configured or the attestation is malformed. Never throws.
33
+ */
34
+ export declare function buildReceipt(opts: {
35
+ serviceEndpoint: string;
36
+ attestation: unknown;
37
+ startedAt: number;
38
+ completedAt: number;
39
+ latencyMs: number;
40
+ }): Promise<HSealReceiptResult | undefined>;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * 2-party H-Seal receipt assembly.
3
+ *
4
+ * When a backend co-signs its own output (returning an `hSealAttestation` on the
5
+ * result), the MCP is the CALLER: it signs a receipt binding
6
+ * caller = the MCP (this gateway identity)
7
+ * provider = the backend that computed + attested the result
8
+ * and re-verifies it against the H-Seal service. The signed receipt body plus
9
+ * the verdict ride on the tool result's `_meta.hSealReceipt`.
10
+ *
11
+ * An H-Seal receipt carries caller + exactly ONE provider, so this is distinct
12
+ * from the MCP's own gateway attestation (`_meta.hSeal`), which stays as
13
+ * supplementary metadata.
14
+ *
15
+ * Caller identity/key come from MCP_IDENTITY / MCP_KEY_RAW, falling back to the
16
+ * gateway PROVIDER_IDENTITY / PROVIDER_KEY_RAW (same key, caller role here) so
17
+ * no new secret is required. Inert when unset. NB: the H-Seal API host is
18
+ * h-seal.xr-utilities.ai (the .com host is a browser-only, Cloudflare-challenged
19
+ * surface and returns 403 to server clients).
20
+ */
21
+ import { randomUUID } from "node:crypto";
22
+ import { signReceipt, attachAttestation, HSealClient, ed25519Signer, } from "@xr-utilities/h-seal-provider";
23
+ const HSEAL_API = process.env["HSEAL_ENDPOINT"] ?? "https://h-seal.xr-utilities.ai";
24
+ const RECEIPT_TOPIC = process.env["HSEAL_RECEIPT_TOPIC"] ?? "0.0.10500472";
25
+ const callerIdentity = process.env["MCP_IDENTITY"] ?? process.env["PROVIDER_IDENTITY"];
26
+ const callerKeyRaw = process.env["MCP_KEY_RAW"] ?? process.env["PROVIDER_KEY_RAW"];
27
+ export const hSealReceiptEnabled = Boolean(callerIdentity && callerKeyRaw);
28
+ function looksLikeAttestation(a) {
29
+ return (typeof a === "object" && a !== null &&
30
+ typeof a["requestHash"] === "string" &&
31
+ typeof a["responseHash"] === "string" &&
32
+ typeof a["providerIdentity"] === "string");
33
+ }
34
+ /**
35
+ * Build + verify a 2-party receipt from a backend provider attestation. Always
36
+ * returns the signed `body` (valid + independently verifiable) when signing
37
+ * succeeds; `verdict` is best-effort — if the H-Seal service is unreachable the
38
+ * body still stands and `verifyError` records why. Returns undefined only when
39
+ * H-Seal isn't configured or the attestation is malformed. Never throws.
40
+ */
41
+ export async function buildReceipt(opts) {
42
+ if (!hSealReceiptEnabled)
43
+ return undefined;
44
+ if (!looksLikeAttestation(opts.attestation))
45
+ return undefined;
46
+ const att = opts.attestation;
47
+ try {
48
+ const signed = await signReceipt({
49
+ receipt: {
50
+ taskId: randomUUID(),
51
+ serviceEndpoint: opts.serviceEndpoint,
52
+ requestHash: att.requestHash, // MUST equal the attestation's
53
+ responseHash: att.responseHash, // MUST equal the attestation's
54
+ resultStatus: "success",
55
+ startedAt: opts.startedAt,
56
+ completedAt: opts.completedAt,
57
+ latencyMs: opts.latencyMs,
58
+ callerIdentity: callerIdentity, // signed verbatim
59
+ providerIdentity: att.providerIdentity,
60
+ receiptTopicId: RECEIPT_TOPIC,
61
+ },
62
+ signer: ed25519Signer(callerKeyRaw),
63
+ network: "mainnet",
64
+ });
65
+ const body = attachAttestation(signed.body, att);
66
+ try {
67
+ const verdict = await new HSealClient({ endpoint: HSEAL_API }).verify(body);
68
+ return { body, verdict };
69
+ }
70
+ catch (err) {
71
+ return { body, verifyError: err.message };
72
+ }
73
+ }
74
+ catch (err) {
75
+ console.error(`[hSealReceipt] sign failed: ${err.message}`);
76
+ return undefined;
77
+ }
78
+ }
79
+ //# sourceMappingURL=hSealReceipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hSealReceipt.js","sourceRoot":"","sources":["../src/hSealReceipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,GAEd,MAAM,+BAA+B,CAAC;AAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,gCAAgC,CAAC;AACpF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,cAAc,CAAC;AAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACvF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,mBAAmB,GAAY,OAAO,CAAC,cAAc,IAAI,YAAY,CAAC,CAAC;AAQpF,SAAS,oBAAoB,CAAC,CAAU;IACtC,OAAO,CACL,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QACnC,OAAQ,CAA6B,CAAC,aAAa,CAAC,KAAK,QAAQ;QACjE,OAAQ,CAA6B,CAAC,cAAc,CAAC,KAAK,QAAQ;QAClE,OAAQ,CAA6B,CAAC,kBAAkB,CAAC,KAAK,QAAQ,CACvE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAMlC;IACC,IAAI,CAAC,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,OAAO,EAAE;gBACP,MAAM,EAAE,UAAU,EAAE;gBACpB,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,WAAW,EAAE,GAAG,CAAC,WAAW,EAAI,+BAA+B;gBAC/D,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,+BAA+B;gBAC/D,YAAY,EAAE,SAAS;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,cAAc,EAAE,cAAwB,EAAI,kBAAkB;gBAC9D,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;gBACtC,cAAc,EAAE,aAAa;aAC9B;YACD,MAAM,EAAE,aAAa,CAAC,YAAsB,CAAC;YAC7C,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,WAAW,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAAgC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/dist/server.js CHANGED
@@ -9,6 +9,7 @@ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSche
9
9
  import { ALL_TOOLS, SERVICES } from "./services/index.js";
10
10
  import { dispatchTool } from "./dispatch.js";
11
11
  import { attest } from "./hSeal.js";
12
+ import { buildReceipt } from "./hSealReceipt.js";
12
13
  import { SERVER_VERSION } from "./version.js";
13
14
  const SERVER_NAME = "xrpl-utilities";
14
15
  export function buildServer(opts = {}) {
@@ -38,7 +39,9 @@ export function buildServer(opts = {}) {
38
39
  server.setRequestHandler(CallToolRequestSchema, async (req) => {
39
40
  const args = (req.params.arguments ?? {});
40
41
  try {
42
+ const startedMs = Date.now();
41
43
  const result = await dispatchTool(req.params.name, args, opts);
44
+ const endedMs = Date.now();
42
45
  // Co-sign the (request, response) pair so the caller can anchor a
43
46
  // tamper-evident H-Seal receipt carrying our attestation that we served
44
47
  // it. Strip transport-only secrets from the signed request so the
@@ -47,15 +50,41 @@ export function buildServer(opts = {}) {
47
50
  const signedArgs = { ...args };
48
51
  delete signedArgs["payment_signature"];
49
52
  delete signedArgs["_bypass_key"];
50
- const attestation = await attest({ tool: req.params.name, args: signedArgs }, result);
53
+ // If the backend co-signed its OWN output, build a 2-party receipt:
54
+ // caller = this MCP, provider = that backend. Split the provider
55
+ // attestation out of the displayed result and into _meta.hSealReceipt.
56
+ // Two shapes carry it: `hSealAttestation` (backend attaches it via its
57
+ // own /attest call) or `_hSeal` (the H-Seal v0.3.0 proxy sidecar merges
58
+ // it into every response). Accept either; prefer hSealAttestation.
59
+ let displayResult = result;
60
+ let hSealReceipt;
61
+ if (result &&
62
+ typeof result === "object" &&
63
+ ("hSealAttestation" in result || "_hSeal" in result)) {
64
+ const { hSealAttestation, _hSeal, ...clean } = result;
65
+ displayResult = clean;
66
+ hSealReceipt = await buildReceipt({
67
+ serviceEndpoint: "https://mcp.xrpl-utilities.io",
68
+ attestation: hSealAttestation ?? _hSeal,
69
+ startedAt: Math.floor(startedMs / 1000),
70
+ completedAt: Math.floor(endedMs / 1000),
71
+ latencyMs: endedMs - startedMs,
72
+ });
73
+ }
74
+ const attestation = await attest({ tool: req.params.name, args: signedArgs }, displayResult);
75
+ const meta = {};
76
+ if (attestation)
77
+ meta.hSeal = attestation;
78
+ if (hSealReceipt)
79
+ meta.hSealReceipt = hSealReceipt;
51
80
  return {
52
81
  content: [
53
82
  {
54
83
  type: "text",
55
- text: typeof result === "string" ? result : JSON.stringify(result, null, 2),
84
+ text: typeof displayResult === "string" ? displayResult : JSON.stringify(displayResult, null, 2),
56
85
  },
57
86
  ],
58
- ...(attestation ? { _meta: { hSeal: attestation } } : {}),
87
+ ...(Object.keys(meta).length ? { _meta: meta } : {}),
59
88
  };
60
89
  }
61
90
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export const sentinel = {
12
12
  label: "XR-Sentinel",
13
13
  baseUrl: "https://sentinel.xrpl-utilities.io",
14
14
  manifestUrl: "https://sentinel.xrpl-utilities.io/agents.json",
15
- knownSchemaVersions: ["2026-09", "2.8.0", "2.9.0", "2.10.0", "2.11.0", "2.12.0", "2.13.0", "2.14.0", "2.15.0", "2.16.0", "2.17.0", "2.18.0", "2.19.0", "2.19.1", "2.19.2", "2.19.3", "2.20.0", "2.20.1", "2.21.0", "2.22.0", "2.23.0", "2.24.0", "2.25.0", "2.26.0", "2.27.0", "2.28.0", "2.29.0", "2.30.0", "2.31.0", "2.32.0", "2.33.0"],
15
+ knownSchemaVersions: ["2026-09", "2.8.0", "2.9.0", "2.10.0", "2.11.0", "2.12.0", "2.13.0", "2.14.0", "2.15.0", "2.16.0", "2.17.0", "2.18.0", "2.19.0", "2.19.1", "2.19.2", "2.19.3", "2.20.0", "2.20.1", "2.21.0", "2.22.0", "2.23.0", "2.24.0", "2.25.0", "2.26.0", "2.27.0", "2.28.0", "2.29.0", "2.30.0", "2.31.0", "2.32.0", "2.33.0", "2.33.1"],
16
16
  tools: [
17
17
  {
18
18
  name: "xrpl_sentinel_scan",
@@ -1 +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,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC1U,KAAK,EAAE;QACL;YACE,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,oBAAoB;gBACpB,wFAAwF;gBACxF,uFAAuF;YACzF,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,iBAAiB;wBAC9B,OAAO,EAAE,gCAAgC;qBAC1C;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sBAAsB;qBACpC;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,oBAAoB;gBACpB,yFAAyF;YAC3F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,iBAAiB;wBAC9B,OAAO,EAAE,gCAAgC;qBAC1C;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sBAAsB;qBACpC;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"}
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,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACpV,KAAK,EAAE;QACL;YACE,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,oBAAoB;gBACpB,wFAAwF;gBACxF,uFAAuF;YACzF,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,iBAAiB;wBAC9B,OAAO,EAAE,gCAAgC;qBAC1C;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sBAAsB;qBACpC;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,oBAAoB;gBACpB,yFAAyF;YAC3F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,iBAAiB;wBAC9B,OAAO,EAAE,gCAAgC;qBAC1C;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sBAAsB;qBACpC;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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xrpl-utilities/mcp",
3
- "version": "0.2.167",
3
+ "version": "0.2.170",
4
4
  "mcpName": "io.github.XRPL-Utilities/mcp",
5
5
  "description": "Model Context Protocol server for the XRPL-Utilities portfolio: Sentinel (wallet classifier), Pulse (signal feed), Telemetry (supply + utility floor), Trust (XLS-70/80/81 directory), Vault (RWA tracker), and Flows (ETF AUM vs XRPL flow correlation). Exposes each service's read endpoints as MCP tools so AI agents can discover and use them via stdio (Claude Desktop) or HTTP/SSE (hosted at mcp.xrpl-utilities.io). Stateless passthrough. Caller provides their own x402 payment header.",
6
6
  "license": "MIT",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@modelcontextprotocol/sdk": "^1.0.0",
25
- "@xr-utilities/h-seal-provider": "github:XR-Utilities/h-seal-provider#v0.1.0",
25
+ "@xr-utilities/h-seal-provider": "github:XR-Utilities/h-seal-provider#v0.2.0",
26
26
  "express": "^4.21.0"
27
27
  },
28
28
  "devDependencies": {