@xrpl-utilities/mcp 0.2.195 → 0.2.201
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 +30 -2
- package/dist/dispatch.d.ts +16 -0
- package/dist/dispatch.js +108 -5
- package/dist/dispatch.js.map +1 -1
- package/dist/hSealReceipt.d.ts +35 -6
- package/dist/hSealReceipt.js +184 -17
- package/dist/hSealReceipt.js.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/server.js +25 -1
- package/dist/server.js.map +1 -1
- package/dist/services/flows.js +1 -1
- package/dist/services/flows.js.map +1 -1
- package/dist/services/pulse.js +27 -1
- package/dist/services/pulse.js.map +1 -1
- package/dist/services/sentinel.js +35 -1
- package/dist/services/sentinel.js.map +1 -1
- package/dist/services/telemetry.js +1 -1
- package/dist/services/telemetry.js.map +1 -1
- package/dist/services/trust.js +33 -1
- package/dist/services/trust.js.map +1 -1
- package/dist/services/vault.js +1 -1
- package/dist/services/vault.js.map +1 -1
- package/dist/transport/http.d.ts +63 -2
- package/dist/transport/http.js +253 -13
- package/dist/transport/http.js.map +1 -1
- package/dist/validate.d.ts +12 -3
- package/dist/validate.js +75 -11
- package/dist/validate.js.map +1 -1
- package/package.json +5 -4
package/dist/transport/http.js
CHANGED
|
@@ -13,8 +13,20 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Auth: every paid tool call still requires the caller to provide
|
|
15
15
|
* their own payment_signature in the tool args. The hosted endpoint
|
|
16
|
-
* is a transparent proxy, NOT a subsidy.
|
|
17
|
-
*
|
|
16
|
+
* is a transparent proxy, NOT a subsidy.
|
|
17
|
+
*
|
|
18
|
+
* Two separate budgets guard the operator-issued MCP_BYPASS_KEY path:
|
|
19
|
+
* a generous per-IP request limit, and a much tighter per-IP budget on
|
|
20
|
+
* FAILED `_bypass_key` attempts. The failed-attempt budget is enforced at
|
|
21
|
+
* the point of the guess (see dispatch's isBypassBlocked) and only 429s
|
|
22
|
+
* requests that carry a key - a batched body is thousands of guesses in one
|
|
23
|
+
* request, and a blanket 429 on the bucket key is an outage, not a limit. The request limit alone is not an
|
|
24
|
+
* access control on a secret - 60 guesses a minute is still online
|
|
25
|
+
* guessing - and both are only as good as the client key, so see
|
|
26
|
+
* clientKey() for why the left-most X-Forwarded-For entry must never
|
|
27
|
+
* be used. The transport also refuses to boot behind a bypass key shorter
|
|
28
|
+
* than 32 bytes (assertBypassKeyStrength), so those budgets are a second
|
|
29
|
+
* layer rather than the only one.
|
|
18
30
|
*/
|
|
19
31
|
import express from "express";
|
|
20
32
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
@@ -33,26 +45,239 @@ const NON_CHARGING_FLOW_STEPS = new Set([
|
|
|
33
45
|
]);
|
|
34
46
|
const RATE_WINDOW_MS = 60_000;
|
|
35
47
|
const RATE_LIMIT_PER_WINDOW = 60; // generous; agents typically fire bursts
|
|
48
|
+
// Failed `_bypass_key` attempts get their own, far tighter budget. An operator
|
|
49
|
+
// who was given the key never trips this; anyone enumerating it does so within
|
|
50
|
+
// a handful of tries.
|
|
51
|
+
// An hour, not ten minutes. The window is the denominator of the online
|
|
52
|
+
// guessing budget against MCP_BYPASS_KEY: at ten minutes a persistent guesser
|
|
53
|
+
// gets ~1,584 tries a day, at an hour ~264. The collateral the shorter window
|
|
54
|
+
// was bought to relieve had already been removed by scoping the lockout to
|
|
55
|
+
// key-carrying requests - all that is left is that an operator sharing a bucket
|
|
56
|
+
// key with a guesser cannot use their own bypass key until the window expires,
|
|
57
|
+
// which is narrow and self-resolving. A short key is now refused at boot
|
|
58
|
+
// rather than warned about, but the budget stays small: it is what bounds
|
|
59
|
+
// online guessing against a key that is long and still unlucky.
|
|
60
|
+
const BYPASS_FAIL_WINDOW_MS = 3_600_000;
|
|
61
|
+
const BYPASS_FAIL_LIMIT = 10;
|
|
62
|
+
// A single JSON-RPC array is dispatched message by message, so at the 1mb body
|
|
63
|
+
// cap one POST otherwise carries roughly 5,000 tool calls.
|
|
64
|
+
const MAX_BATCH_MESSAGES = 20;
|
|
65
|
+
// Hard ceiling on tracked keys. Buckets are swept on a timer, but a burst of
|
|
66
|
+
// distinct addresses inside one window must not be able to grow the heap
|
|
67
|
+
// without bound: an unbounded Map on the public endpoint is an OOM away from
|
|
68
|
+
// taking mcp.xrpl-utilities.io down.
|
|
69
|
+
const MAX_TRACKED_KEYS = 50_000;
|
|
70
|
+
/**
|
|
71
|
+
* How many proxy hops in front of this container are ours. Railway's edge
|
|
72
|
+
* APPENDS the real peer to X-Forwarded-For, it does not replace what the
|
|
73
|
+
* client sent, so the trustworthy entry is counted from the RIGHT. Default 1;
|
|
74
|
+
* override only after counting the entries on a request you made yourself
|
|
75
|
+
* against the live deploy. Too high re-opens the spoof; too low used to
|
|
76
|
+
* collapse every caller into one bucket keyed on an internal proxy IP, which
|
|
77
|
+
* clientKey() now degrades out of rather than shares - a safety net, not a
|
|
78
|
+
* substitute for the real count.
|
|
79
|
+
*/
|
|
80
|
+
const TRUST_PROXY_HOPS = Math.max(0, Number(process.env["TRUST_PROXY_HOPS"] ?? "1") || 0);
|
|
36
81
|
const rateBuckets = new Map();
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
82
|
+
const bypassFailBuckets = new Map();
|
|
83
|
+
// Addresses that can never be a real caller on a public endpoint. An entry
|
|
84
|
+
// matching this means TRUST_PROXY_HOPS is pointing at an internal proxy, not at
|
|
85
|
+
// the client.
|
|
86
|
+
//
|
|
87
|
+
// RFC1918 and loopback are not the whole set: container platforms put RFC 6598
|
|
88
|
+
// CGNAT space (100.64.0.0/10) in X-Forwarded-For, and Google's load balancers -
|
|
89
|
+
// which Railway sits behind - source from 35.191.0.0/16 and 130.211.0.0/22,
|
|
90
|
+
// both of which are publicly routable. Leaving those out made the left-walk
|
|
91
|
+
// return on its first iteration and collapse every caller into one bucket
|
|
92
|
+
// keyed on the proxy, which is the availability regression the walk exists to
|
|
93
|
+
// close. None of these ranges can be the source address of a real client of
|
|
94
|
+
// this endpoint, so skipping past them opens no spoof window: the entry to
|
|
95
|
+
// their left is the one the platform appended, not one the caller typed.
|
|
96
|
+
const PRIVATE = /^(::1|0\.0\.0\.0$|127\.|10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.|169\.254\.|100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\.|35\.191\.|130\.211\.[0-3]\.|f[cd][0-9a-f]{2}:|fe80:)/i;
|
|
97
|
+
const norm = (s) => s.replace(/^::ffff:/i, "").replace(/^\[|\]$/g, "");
|
|
98
|
+
// One line per process, not one per request: a per-request console.error on a
|
|
99
|
+
// misconfigured hop count is its own amplifier.
|
|
100
|
+
let warnedAllPrivate = false;
|
|
101
|
+
/**
|
|
102
|
+
* The address to charge for this request. The socket peer is the trustworthy
|
|
103
|
+
* value and the header is only a hint: reading X-Forwarded-For[0] takes
|
|
104
|
+
* whatever the client typed, so a fresh value per request buys a fresh bucket
|
|
105
|
+
* and the limiter never fires (and setting a victim's address burns theirs).
|
|
106
|
+
*/
|
|
107
|
+
export function clientKey(req) {
|
|
108
|
+
const socketIp = req.socket?.remoteAddress ?? "unknown";
|
|
109
|
+
if (TRUST_PROXY_HOPS === 0)
|
|
110
|
+
return socketIp;
|
|
111
|
+
const raw = req.headers["x-forwarded-for"];
|
|
112
|
+
const entries = (Array.isArray(raw) ? raw.join(",") : raw ?? "")
|
|
113
|
+
.split(",")
|
|
114
|
+
.map((s) => s.trim())
|
|
115
|
+
.filter(Boolean);
|
|
116
|
+
// Fewer entries than trusted hops means the request did not come through the
|
|
117
|
+
// proxy chain we configured for; fall back to the peer rather than to a
|
|
118
|
+
// caller-supplied entry.
|
|
119
|
+
if (entries.length < TRUST_PROXY_HOPS)
|
|
120
|
+
return socketIp;
|
|
121
|
+
// Start at the hop we were told to trust, then walk LEFT past anything
|
|
122
|
+
// private. An under-counted TRUST_PROXY_HOPS otherwise lands on an internal
|
|
123
|
+
// proxy address and collapses every caller into one bucket - which turns the
|
|
124
|
+
// failed-bypass lockout into a whole-endpoint outage. Walking left is not a
|
|
125
|
+
// spoof window: Railway appends the real peer, so the first PUBLIC entry from
|
|
126
|
+
// the right is the earliest one an attacker cannot have written.
|
|
127
|
+
for (let i = entries.length - TRUST_PROXY_HOPS; i >= 0; i--) {
|
|
128
|
+
const candidate = norm(entries[i]);
|
|
129
|
+
if (candidate && !PRIVATE.test(candidate))
|
|
130
|
+
return candidate;
|
|
131
|
+
}
|
|
132
|
+
if (!warnedAllPrivate) {
|
|
133
|
+
warnedAllPrivate = true;
|
|
134
|
+
// eslint-disable-next-line no-console
|
|
135
|
+
console.error(`[mcp] every X-Forwarded-For entry is private (trust_proxy_hops=${TRUST_PROXY_HOPS}); ` +
|
|
136
|
+
`keying the limiter on the socket peer. Measure the real hop count on the live deploy.`);
|
|
137
|
+
}
|
|
138
|
+
return socketIp;
|
|
139
|
+
}
|
|
140
|
+
function sweep(map, now) {
|
|
141
|
+
for (const [k, b] of map) {
|
|
142
|
+
if (b.resetAt < now)
|
|
143
|
+
map.delete(k);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Fetch (or open) this key's bucket. Never clear() the whole map on hitting the
|
|
148
|
+
* cap: that zeroes every live counter and hands an attacker a free limiter
|
|
149
|
+
* reset. Expired entries go first, then oldest-first (Map preserves insertion
|
|
150
|
+
* order).
|
|
151
|
+
*/
|
|
152
|
+
function bucketFor(map, key, windowMs, now) {
|
|
153
|
+
const existing = map.get(key);
|
|
154
|
+
if (existing && existing.resetAt >= now)
|
|
155
|
+
return existing;
|
|
156
|
+
if (map.size >= MAX_TRACKED_KEYS) {
|
|
157
|
+
sweep(map, now);
|
|
158
|
+
for (const k of map.keys()) {
|
|
159
|
+
if (map.size < MAX_TRACKED_KEYS)
|
|
160
|
+
break;
|
|
161
|
+
map.delete(k);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const fresh = { count: 0, resetAt: now + windowMs };
|
|
165
|
+
map.set(key, fresh);
|
|
166
|
+
return fresh;
|
|
167
|
+
}
|
|
168
|
+
// unref'd so it never holds the process open - this module graph is shared with
|
|
169
|
+
// the stdio/CLI entry point.
|
|
170
|
+
const sweepTimer = setInterval(() => {
|
|
171
|
+
const now = Date.now();
|
|
172
|
+
sweep(rateBuckets, now);
|
|
173
|
+
sweep(bypassFailBuckets, now);
|
|
174
|
+
}, RATE_WINDOW_MS);
|
|
175
|
+
sweepTimer.unref();
|
|
176
|
+
/**
|
|
177
|
+
* Does this JSON-RPC body actually carry a `_bypass_key`? The failed-bypass
|
|
178
|
+
* lockout is scoped to these: 429ing everything from the bucket key would let
|
|
179
|
+
* eleven wrong keys take tools/list, initialize, the free tools and every paid
|
|
180
|
+
* x402 call offline for the whole window - and with an unmeasured
|
|
181
|
+
* TRUST_PROXY_HOPS that bucket key can be one shared proxy address, i.e. the
|
|
182
|
+
* whole endpoint. Guesses always carry the key, so the guard still stops 100%
|
|
183
|
+
* of guessing. Parsed off the envelope rather than probed loosely so a
|
|
184
|
+
* `_bypass_key` sitting somewhere else in the payload cannot self-lock.
|
|
185
|
+
*/
|
|
186
|
+
export function carriesBypassKey(body) {
|
|
187
|
+
const one = (m) => typeof m?.params?.arguments?._bypass_key === "string" ||
|
|
188
|
+
typeof m?.params?._bypass_key === "string";
|
|
189
|
+
return Array.isArray(body) ? body.some(one) : one(body);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Same predicate rateLimit() uses, exported so dispatch can consult it at the
|
|
193
|
+
* point of the guess. One definition: a second copy would drift.
|
|
194
|
+
*/
|
|
195
|
+
export function isBypassBlocked(ip) {
|
|
196
|
+
const b = bypassFailBuckets.get(ip);
|
|
197
|
+
return !!b && b.resetAt >= Date.now() && b.count > BYPASS_FAIL_LIMIT;
|
|
198
|
+
}
|
|
199
|
+
export function rateLimit(req, res) {
|
|
200
|
+
const ip = clientKey(req);
|
|
42
201
|
const now = Date.now();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
202
|
+
// A caller who has burned through the failed-bypass budget is guessing at the
|
|
203
|
+
// operator secret; hold them off for the rest of the window regardless of
|
|
204
|
+
// their request count - but only on the requests that carry a key, so the
|
|
205
|
+
// lockout cannot become a denial of service against everyone else sharing
|
|
206
|
+
// the bucket key.
|
|
207
|
+
const fails = bypassFailBuckets.get(ip);
|
|
208
|
+
if (fails && fails.resetAt >= now && fails.count > BYPASS_FAIL_LIMIT && carriesBypassKey(req.body)) {
|
|
209
|
+
res.status(429).json({ error: "rate_limited", retry_after_s: Math.ceil((fails.resetAt - now) / 1000) });
|
|
210
|
+
return false;
|
|
47
211
|
}
|
|
48
|
-
bucket
|
|
212
|
+
const bucket = bucketFor(rateBuckets, ip, RATE_WINDOW_MS, now);
|
|
213
|
+
// A batched body is N calls, not one request: charging it as one let a single
|
|
214
|
+
// POST buy the whole window's worth of upstream fan-out.
|
|
215
|
+
bucket.count += Array.isArray(req.body) ? Math.max(1, req.body.length) : 1;
|
|
49
216
|
if (bucket.count > RATE_LIMIT_PER_WINDOW) {
|
|
50
217
|
res.status(429).json({ error: "rate_limited", retry_after_s: Math.ceil((bucket.resetAt - now) / 1000) });
|
|
51
218
|
return false;
|
|
52
219
|
}
|
|
53
220
|
return true;
|
|
54
221
|
}
|
|
222
|
+
/** Count one wrong `_bypass_key` against this caller. */
|
|
223
|
+
export function recordBypassFailure(ip) {
|
|
224
|
+
const now = Date.now();
|
|
225
|
+
const bucket = bucketFor(bypassFailBuckets, ip, BYPASS_FAIL_WINDOW_MS, now);
|
|
226
|
+
bucket.count += 1;
|
|
227
|
+
// Slide the window on every recorded failure so a caller who keeps guessing
|
|
228
|
+
// never ages into a fresh budget, while a bucket that goes quiet still
|
|
229
|
+
// expires on its own. Only real failures slide it: refused requests are not
|
|
230
|
+
// counted, so an operator retrying a valid key cannot extend their own hold.
|
|
231
|
+
bucket.resetAt = now + BYPASS_FAIL_WINDOW_MS;
|
|
232
|
+
// `>= limit+1 && !logged` rather than `=== limit+1`: a batch that records
|
|
233
|
+
// several failures in a row steps straight over the equality and the alert
|
|
234
|
+
// never fires.
|
|
235
|
+
if (bucket.count >= BYPASS_FAIL_LIMIT + 1 && !bucket.logged) {
|
|
236
|
+
bucket.logged = true;
|
|
237
|
+
// eslint-disable-next-line no-console
|
|
238
|
+
console.error(`[mcp] ${ip} exceeded the failed _bypass_key budget ` +
|
|
239
|
+
`(${BYPASS_FAIL_LIMIT} per ${Math.round(BYPASS_FAIL_WINDOW_MS / 60_000)}min); throttling`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Minimum MCP_BYPASS_KEY strength, in bytes. 32 random bytes is the same floor
|
|
244
|
+
* the Python services put on X402_REPLAY_HMAC_KEY, which raises at import
|
|
245
|
+
* rather than warning.
|
|
246
|
+
*/
|
|
247
|
+
export const MIN_BYPASS_KEY_BYTES = 32;
|
|
248
|
+
/**
|
|
249
|
+
* Refuse to boot the public HTTP transport behind a guessable bypass key.
|
|
250
|
+
*
|
|
251
|
+
* This used to be a console warning. A warning on a deploy nobody is reading
|
|
252
|
+
* the logs of is not a control, and it left the two request budgets above
|
|
253
|
+
* load-bearing: they are the only thing between a short key and an online
|
|
254
|
+
* guesser. A key too weak to stand on its own is an operator mistake that has
|
|
255
|
+
* to be fixed before the endpoint is reachable, not after.
|
|
256
|
+
*
|
|
257
|
+
* Scoped to the HTTP transport on purpose. stdio is single-tenant, runs on the
|
|
258
|
+
* user's own machine, and exposes no network guessing surface, so the same
|
|
259
|
+
* floor there would only break local dev for no gain.
|
|
260
|
+
*
|
|
261
|
+
* Never logs or embeds the key, only its length.
|
|
262
|
+
*/
|
|
263
|
+
export function assertBypassKeyStrength(rawKey) {
|
|
264
|
+
if (!rawKey)
|
|
265
|
+
return; // unset is fine: the bypass path is simply off.
|
|
266
|
+
const bytes = Buffer.byteLength(rawKey, "utf8");
|
|
267
|
+
if (bytes >= MIN_BYPASS_KEY_BYTES)
|
|
268
|
+
return;
|
|
269
|
+
throw new Error(`MCP_BYPASS_KEY is ${bytes} bytes; the HTTP transport requires at least ` +
|
|
270
|
+
`${MIN_BYPASS_KEY_BYTES}. It is an operator secret on a public endpoint, ` +
|
|
271
|
+
"and a short one is guessable online. Generate a new one with " +
|
|
272
|
+
"`openssl rand -hex 32`, set it on this service, and rotate it per " +
|
|
273
|
+
"service rather than sharing one across them. To run without the bypass " +
|
|
274
|
+
"path, unset MCP_BYPASS_KEY entirely; callers pay with their own " +
|
|
275
|
+
"payment_signature either way.");
|
|
276
|
+
}
|
|
55
277
|
export async function runHttp(port) {
|
|
278
|
+
// Before anything binds a port. A boot that refuses is recoverable; a boot
|
|
279
|
+
// that serves a weak operator key is not.
|
|
280
|
+
assertBypassKeyStrength(process.env["MCP_BYPASS_KEY"]);
|
|
56
281
|
const app = express();
|
|
57
282
|
app.use(express.json({ limit: "1mb" }));
|
|
58
283
|
app.get("/", (_req, res) => {
|
|
@@ -271,13 +496,26 @@ export async function runHttp(port) {
|
|
|
271
496
|
// build-connect-handle-close per request. Cheap: the Server object
|
|
272
497
|
// is just function pointers, no expensive state.
|
|
273
498
|
app.all("/mcp", async (req, res) => {
|
|
499
|
+
// Complement to the per-guess gate below, not a substitute for it: batching
|
|
500
|
+
// was dropped in MCP spec 2025-06-18 but the SDK still maps batched
|
|
501
|
+
// messages for back-compat, so cap the array rather than banning it and
|
|
502
|
+
// breaking legacy 2025-03-26 clients.
|
|
503
|
+
if (Array.isArray(req.body) && req.body.length > MAX_BATCH_MESSAGES) {
|
|
504
|
+
res.status(413).json({ error: "batch_too_large", max_messages: MAX_BATCH_MESSAGES });
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
274
507
|
if (!rateLimit(req, res))
|
|
275
508
|
return;
|
|
509
|
+
const ip = clientKey(req);
|
|
276
510
|
let transport = null;
|
|
277
511
|
try {
|
|
278
512
|
const mcpServer = buildServer({
|
|
279
513
|
bypassKey: process.env["MCP_BYPASS_KEY"],
|
|
280
514
|
userAgent: `xrpl-utilities-mcp/${SERVER_VERSION} (http)`,
|
|
515
|
+
onBypassFailure: () => recordBypassFailure(ip),
|
|
516
|
+
// Per-message, so a batched body cannot spend thousands of guesses
|
|
517
|
+
// between two request-level checks.
|
|
518
|
+
isBypassBlocked: () => isBypassBlocked(ip),
|
|
281
519
|
});
|
|
282
520
|
transport = new StreamableHTTPServerTransport({
|
|
283
521
|
sessionIdGenerator: undefined, // stateless
|
|
@@ -305,9 +543,11 @@ export async function runHttp(port) {
|
|
|
305
543
|
// eslint-disable-next-line no-console
|
|
306
544
|
console.error("[mcp] unhandledRejection:", reason);
|
|
307
545
|
});
|
|
546
|
+
// Key strength is checked at the top of runHttp, before anything binds, and
|
|
547
|
+
// is a refusal rather than the warning that used to sit here.
|
|
308
548
|
app.listen(port, () => {
|
|
309
549
|
// eslint-disable-next-line no-console
|
|
310
|
-
console.log(`xrpl-utilities-mcp listening on :${port} (http)`);
|
|
550
|
+
console.log(`xrpl-utilities-mcp listening on :${port} (http, trust_proxy_hops=${TRUST_PROXY_HOPS})`);
|
|
311
551
|
});
|
|
312
552
|
}
|
|
313
553
|
//# sourceMappingURL=http.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.d.ts
CHANGED
|
@@ -13,13 +13,21 @@
|
|
|
13
13
|
* block. If a service renames /scan to /scan/v2 we want to fail
|
|
14
14
|
* LOUD here, not silently 404 every agent call.
|
|
15
15
|
*
|
|
16
|
-
* On dev / first-launch we
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* On dev / first-launch we tolerate manifest fetch failures (so the MCP
|
|
17
|
+
* server still starts when networking is flaky). STRICT_VALIDATE=1 turns a
|
|
18
|
+
* fetch failure into an error instead of a warning; it is opt-in, NOT the
|
|
19
|
+
* default for HTTP, because railway.json restarts ON_FAILURE and failing
|
|
20
|
+
* closed would crash-loop the whole endpoint - taking the other five healthy
|
|
21
|
+
* services' tools with it - whenever one backend is cold at boot.
|
|
22
|
+
*
|
|
23
|
+
* Either way `checked` records whether a manifest was actually read. "Could
|
|
24
|
+
* not check" and "checked, all clear" must never produce the same result.
|
|
19
25
|
*/
|
|
20
26
|
export interface ValidationResult {
|
|
21
27
|
service: string;
|
|
22
28
|
ok: boolean;
|
|
29
|
+
/** False when no manifest could be read, so nothing was verified. */
|
|
30
|
+
checked: boolean;
|
|
23
31
|
warnings: string[];
|
|
24
32
|
errors: string[];
|
|
25
33
|
}
|
|
@@ -27,3 +35,4 @@ export declare function validateAllServices(opts: {
|
|
|
27
35
|
strict: boolean;
|
|
28
36
|
fetchTimeoutMs?: number;
|
|
29
37
|
}): Promise<ValidationResult[]>;
|
|
38
|
+
export declare function isTransientFetchError(e: unknown, depth?: number): boolean;
|
package/dist/validate.js
CHANGED
|
@@ -13,28 +13,86 @@
|
|
|
13
13
|
* block. If a service renames /scan to /scan/v2 we want to fail
|
|
14
14
|
* LOUD here, not silently 404 every agent call.
|
|
15
15
|
*
|
|
16
|
-
* On dev / first-launch we
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* On dev / first-launch we tolerate manifest fetch failures (so the MCP
|
|
17
|
+
* server still starts when networking is flaky). STRICT_VALIDATE=1 turns a
|
|
18
|
+
* fetch failure into an error instead of a warning; it is opt-in, NOT the
|
|
19
|
+
* default for HTTP, because railway.json restarts ON_FAILURE and failing
|
|
20
|
+
* closed would crash-loop the whole endpoint - taking the other five healthy
|
|
21
|
+
* services' tools with it - whenever one backend is cold at boot.
|
|
22
|
+
*
|
|
23
|
+
* Either way `checked` records whether a manifest was actually read. "Could
|
|
24
|
+
* not check" and "checked, all clear" must never produce the same result.
|
|
19
25
|
*/
|
|
20
26
|
import { SERVICES } from "./services/index.js";
|
|
21
27
|
export async function validateAllServices(opts) {
|
|
22
|
-
const results = await Promise.all(SERVICES.map((s) => validateService(s, opts.fetchTimeoutMs ?? 8_000)));
|
|
28
|
+
const results = await Promise.all(SERVICES.map((s) => validateService(s, opts.fetchTimeoutMs ?? 8_000, opts.strict)));
|
|
23
29
|
return results;
|
|
24
30
|
}
|
|
25
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Codes that mean "the connection did not happen", not "the service answered
|
|
33
|
+
* badly". Node's fetch reports every one of these as the same opaque
|
|
34
|
+
* `TypeError: fetch failed` and hangs the real code off err.cause, so a
|
|
35
|
+
* message-substring test never sees ECONNREFUSED/ENOTFOUND - the exact
|
|
36
|
+
* cold-start shape the retry exists for.
|
|
37
|
+
*/
|
|
38
|
+
const TRANSIENT_CODES = new Set([
|
|
39
|
+
"ECONNRESET", "ETIMEDOUT", "ECONNREFUSED", "ENOTFOUND", "EAI_AGAIN",
|
|
40
|
+
"EPIPE", "EHOSTUNREACH", "ENETUNREACH",
|
|
41
|
+
"UND_ERR_CONNECT_TIMEOUT", "UND_ERR_HEADERS_TIMEOUT",
|
|
42
|
+
"UND_ERR_BODY_TIMEOUT", "UND_ERR_SOCKET",
|
|
43
|
+
]);
|
|
44
|
+
export function isTransientFetchError(e, depth = 0) {
|
|
45
|
+
if (!e || typeof e !== "object" || depth > 5)
|
|
46
|
+
return false;
|
|
47
|
+
const err = e;
|
|
48
|
+
if (err.name === "AbortError" || err.name === "TimeoutError")
|
|
49
|
+
return true;
|
|
50
|
+
if (typeof err.code === "string" && TRANSIENT_CODES.has(err.code))
|
|
51
|
+
return true;
|
|
52
|
+
// undici wraps multi-address (A + AAAA) connect failures in an AggregateError
|
|
53
|
+
if (Array.isArray(err.errors) && err.errors.some((x) => isTransientFetchError(x, depth + 1)))
|
|
54
|
+
return true;
|
|
55
|
+
if (err.cause && isTransientFetchError(err.cause, depth + 1))
|
|
56
|
+
return true;
|
|
57
|
+
// Last-resort message match: keeps non-undici throwers and existing callers working.
|
|
58
|
+
const msg = typeof err.message === "string" ? err.message : "";
|
|
59
|
+
return /aborted|ETIMEDOUT|ECONNRESET|ECONNREFUSED|ENOTFOUND|EAI_AGAIN/.test(msg);
|
|
60
|
+
}
|
|
61
|
+
async function fetchManifestOnce(url, timeoutMs) {
|
|
62
|
+
const ctl = new AbortController();
|
|
63
|
+
const tId = setTimeout(() => ctl.abort(), timeoutMs);
|
|
64
|
+
try {
|
|
65
|
+
return await fetch(url, { signal: ctl.signal });
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
clearTimeout(tId);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function validateService(svc, timeoutMs, strict) {
|
|
26
72
|
const out = {
|
|
27
73
|
service: svc.label,
|
|
28
74
|
ok: true,
|
|
75
|
+
checked: false,
|
|
29
76
|
warnings: [],
|
|
30
77
|
errors: [],
|
|
31
78
|
};
|
|
32
79
|
let manifest = null;
|
|
33
80
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
81
|
+
let r;
|
|
82
|
+
try {
|
|
83
|
+
r = await fetchManifestOnce(svc.manifestUrl, timeoutMs);
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
// One retry on a transient blip, same contract the contract scrubber
|
|
87
|
+
// uses. Without it STRICT_VALIDATE=1 is unusable: a cold backend at boot
|
|
88
|
+
// would fail the whole start.
|
|
89
|
+
if (!isTransientFetchError(e))
|
|
90
|
+
throw e;
|
|
91
|
+
// Cold containers need real time to come up; an immediate retry re-hits
|
|
92
|
+
// the same refused socket.
|
|
93
|
+
await new Promise((r) => setTimeout(r, 750));
|
|
94
|
+
r = await fetchManifestOnce(svc.manifestUrl, timeoutMs);
|
|
95
|
+
}
|
|
38
96
|
if (!r.ok) {
|
|
39
97
|
out.warnings.push(`manifest fetch returned HTTP ${r.status}`);
|
|
40
98
|
}
|
|
@@ -46,10 +104,16 @@ async function validateService(svc, timeoutMs) {
|
|
|
46
104
|
out.warnings.push(`manifest fetch failed: ${e.message}`);
|
|
47
105
|
}
|
|
48
106
|
if (!manifest) {
|
|
49
|
-
// No live manifest -
|
|
50
|
-
//
|
|
107
|
+
// No live manifest - nothing was verified. checked stays false so the
|
|
108
|
+
// caller can tell this apart from a clean run; under strict it is an
|
|
109
|
+
// error, not a warning.
|
|
110
|
+
if (strict) {
|
|
111
|
+
out.errors.push(`no live manifest from ${svc.manifestUrl}; STRICT_VALIDATE=1 treats an unverified service as drift`);
|
|
112
|
+
out.ok = false;
|
|
113
|
+
}
|
|
51
114
|
return out;
|
|
52
115
|
}
|
|
116
|
+
out.checked = true;
|
|
53
117
|
const liveVersion = String(manifest["schema_version"] ?? "");
|
|
54
118
|
if (liveVersion && !svc.knownSchemaVersions.includes(liveVersion)) {
|
|
55
119
|
const msg = `${svc.label} reports schema_version=${liveVersion}; this MCP build ` +
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xrpl-utilities/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.201",
|
|
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",
|
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
"start:stdio": "node dist/index.js --transport stdio",
|
|
19
19
|
"start:http": "node dist/index.js --transport http",
|
|
20
20
|
"dev": "tsc --watch",
|
|
21
|
-
"prepublishOnly": "npm run build"
|
|
21
|
+
"prepublishOnly": "npm run build",
|
|
22
|
+
"test": "npm run build && node --test tests/*.test.mjs"
|
|
22
23
|
},
|
|
23
24
|
"dependencies": {
|
|
24
|
-
"@modelcontextprotocol/sdk": "
|
|
25
|
-
"@xr-utilities/h-seal-provider": "github:XR-Utilities/h-seal-provider#
|
|
25
|
+
"@modelcontextprotocol/sdk": "~1.29.0",
|
|
26
|
+
"@xr-utilities/h-seal-provider": "github:XR-Utilities/h-seal-provider#e266eeaccc916339eb329012eaf9557368bebbe0",
|
|
26
27
|
"express": "^4.21.0"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|