@chrischall/mcp-utils 2.7.1 → 2.9.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.
- package/README.md +48 -5
- package/dist/auth/index.js +3 -3
- package/dist/auth/index.js.map +1 -1
- package/dist/fetchproxy/index.d.ts +19 -2
- package/dist/fetchproxy/index.d.ts.map +1 -1
- package/dist/fetchproxy/index.js +171 -27
- package/dist/fetchproxy/index.js.map +1 -1
- package/dist/healthcheck/index.d.ts +6 -0
- package/dist/healthcheck/index.d.ts.map +1 -1
- package/dist/healthcheck/index.js +61 -13
- package/dist/healthcheck/index.js.map +1 -1
- package/dist/http/index.d.ts +46 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +133 -3
- package/dist/http/index.js.map +1 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +6 -1
- package/dist/session/index.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -490,8 +490,9 @@ clone of this repo: `node scripts/audit-fs-confinement.mjs ../your-mcp`.
|
|
|
490
490
|
`runBoundedBatch`, `createThrottle`, `createResponseCache`, `parseRetryAfterMs`,
|
|
491
491
|
`splitHost`, `buildUserAgent`, `parseContentDispositionFilename`, JWT helpers
|
|
492
492
|
(`decodeJwtExp`, `decodeJwtSessionId`, `decodeJwtClaim`, `validateJwtExpiry`),
|
|
493
|
-
and the `ApiError` / `UpstreamHttpError` /
|
|
494
|
-
`
|
|
493
|
+
`detectEdgeBlock`, and the `ApiError` / `UpstreamHttpError` /
|
|
494
|
+
`EdgeBlockedError` / `UnauthorizedError` / `RateLimitedError` /
|
|
495
|
+
`RequestTimeoutError` classes.
|
|
495
496
|
|
|
496
497
|
`decodeJwtClaim(token, claim)` is the generic single-claim reader — returns the
|
|
497
498
|
raw claim value (`unknown`) or `undefined` for an undecodable token / absent
|
|
@@ -546,6 +547,23 @@ status-carrying HTTP error — the manual-throw parallel to `ApiError` (which
|
|
|
546
547
|
path that doesn't route through `createApiClient` but still needs to branch on a
|
|
547
548
|
404.
|
|
548
549
|
|
|
550
|
+
`EdgeBlockedError` is what `createApiClient` throws instead of a plain
|
|
551
|
+
`ApiError` when a CDN/WAF in front of the API refused the request — a
|
|
552
|
+
CloudFront "request could not be satisfied" page, a Cloudflare block or
|
|
553
|
+
challenge (`cf-mitigated`), an Akamai or Imperva denial. It keeps the status and
|
|
554
|
+
`extends ApiError`, so existing branches are unchanged; it adds `vendor` and a
|
|
555
|
+
message saying the credential was never evaluated, rather than one that sends
|
|
556
|
+
someone to re-sign in. `detectEdgeBlock({ body, headers })` is the rule itself,
|
|
557
|
+
for a client that does not route through `createApiClient`. It matches each
|
|
558
|
+
vendor's own refusal page only: `x-cache: Error from cloudfront` is set on
|
|
559
|
+
every error CloudFront relays, the origin's own 401 included, so it is not
|
|
560
|
+
evidence of a block. Pass `status` when you have it: a refusal page counts only
|
|
561
|
+
on a 4xx, because CloudFront and Cloudflare show the same markers on their
|
|
562
|
+
502/504/52x outage pages, which mean the origin is down rather than that this
|
|
563
|
+
host is blocked; a challenge or `cf-mitigated` counts at any status.
|
|
564
|
+
`TokenManager` treats an `EdgeBlockedError` from a refresh as transient, so a
|
|
565
|
+
block never discards the refresh token.
|
|
566
|
+
|
|
549
567
|
```ts
|
|
550
568
|
import { runBoundedBatch } from '@chrischall/mcp-utils';
|
|
551
569
|
|
|
@@ -1096,6 +1114,21 @@ bridge produces when the relay dials the child before it binds. With
|
|
|
1096
1114
|
`@fetchproxy/server` 2.5.0+ the `bridge` block also carries `session_state`,
|
|
1097
1115
|
`pending_pair_code` and `extension_connected` from `bridgeHealth().session`.
|
|
1098
1116
|
|
|
1117
|
+
**When the browser can't serve a verb.** `@fetchproxy/server` 3.3+ tells a
|
|
1118
|
+
browser gap (`capability_unavailable` — e.g. Safari has no downloads; the MCP
|
|
1119
|
+
isn't at fault, and the fix is a browser that supports it, such as Chrome)
|
|
1120
|
+
apart from an MCP bug (`capability_denied` — the MCP used a capability it
|
|
1121
|
+
never declared). `bridgeErrorInfo` and the healthcheck both report these as
|
|
1122
|
+
their own kinds with their own hints, whichever server version is installed:
|
|
1123
|
+
the server's classifier files both under `'protocol'`, so they are detected
|
|
1124
|
+
from the error's class name, its `code`, the `unsupported-capability:` hello
|
|
1125
|
+
rejection, and the fixed wire wording (`… is not available in this browser`).
|
|
1126
|
+
With 3.3+ the `bridge` block also carries `unavailable_capabilities` and
|
|
1127
|
+
`platform` from `bridgeHealth().session`. The hints name the extension the user
|
|
1128
|
+
installs — **ContextMint Bridge** (from
|
|
1129
|
+
[its releases page](https://github.com/nullnet-app/contextmint-bridge/releases);
|
|
1130
|
+
in Safari it ships inside the ContextMint app).
|
|
1131
|
+
|
|
1099
1132
|
**Direct-first consumers** (hemnet, booli: a plain fetch that falls back to
|
|
1100
1133
|
the bridge when a bot wall answers) pass `path: () => ({ transport, mode })`
|
|
1101
1134
|
reporting which leg serves calls now, and may pass `transport` as a getter
|
|
@@ -1144,9 +1177,19 @@ registerCredentialHealthcheckTool({
|
|
|
1144
1177
|
```
|
|
1145
1178
|
|
|
1146
1179
|
Arms: `ok`, `no_credential`, `credential_rejected` (401/403),
|
|
1147
|
-
`session_expired`, `verification_pending`, `timeout`, `http`,
|
|
1148
|
-
`unknown` — with the same `classifyThrown` / `hints` hooks as the
|
|
1149
|
-
factory.
|
|
1180
|
+
`edge_blocked`, `session_expired`, `verification_pending`, `timeout`, `http`,
|
|
1181
|
+
`transport`, `unknown` — with the same `classifyThrown` / `hints` hooks as the
|
|
1182
|
+
bridge factory.
|
|
1183
|
+
|
|
1184
|
+
`edge_blocked` is decided BEFORE the status: a CDN/WAF block page answers 403
|
|
1185
|
+
exactly as a rejecting API does, and reporting it as `credential_rejected`
|
|
1186
|
+
sends people to re-sign in with a credential that was never looked at. It is
|
|
1187
|
+
read from an `EdgeBlockedError`, or from any thrown error's message,
|
|
1188
|
+
`body`/`bodyPreview`/`responseBody` and `headers` via `detectEdgeBlock`, so a
|
|
1189
|
+
connector with its own client is covered without a change, and so is a
|
|
1190
|
+
`sessionProbe` probe, which throws `EdgeBlockedError` for a refusal page. A resolver throw
|
|
1191
|
+
(a token refresh that met the same block) gets it too, instead of
|
|
1192
|
+
`no_credential`. `classifyThrown` still decides first.
|
|
1150
1193
|
|
|
1151
1194
|
#### Cookie-session connectors: `sessionProbe` / `sessionClassifier`
|
|
1152
1195
|
|
package/dist/auth/index.js
CHANGED
|
@@ -172,8 +172,8 @@ export function createAuthResolver(opts) {
|
|
|
172
172
|
// preserve; surface it verbatim (library-authored, not an untrusted
|
|
173
173
|
// upstream body — so no truncation that could clip the guidance).
|
|
174
174
|
if (typedHint !== undefined && isBridgeDown(e)) {
|
|
175
|
-
throw createHelpfulError(`Auth: no ${envVar} set, and
|
|
176
|
-
`(extension service worker unreachable). ${typedHint}`, { hint: typedHint });
|
|
175
|
+
throw createHelpfulError(`Auth: no ${envVar} set, and ContextMint Bridge is down ` +
|
|
176
|
+
`(its extension service worker is unreachable). ${typedHint}`, { hint: typedHint });
|
|
177
177
|
}
|
|
178
178
|
// The rest of the family — pairing not yet approved, a scope that
|
|
179
179
|
// changed, no matching tab — carries a remedy of its own. DEFER to it
|
|
@@ -229,7 +229,7 @@ export async function resolveAuthPattern(pattern) {
|
|
|
229
229
|
return resolver();
|
|
230
230
|
}
|
|
231
231
|
throw createHelpfulError('No auth configured. Provide a token, OAuth credentials, login credentials, ' +
|
|
232
|
-
'or sign in in your browser (
|
|
232
|
+
'or sign in in your browser (read via ContextMint Bridge).', { hint: 'Set one of the supported credential env vars, or sign in in your browser.' });
|
|
233
233
|
}
|
|
234
234
|
const DEFAULT_LOGIN_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0 Safari/537.36';
|
|
235
235
|
/** Node's `Headers` may carry multiple `Set-Cookie`s; prefer the spec'd getter. */
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -363,7 +363,13 @@ export interface CreateBootstrapOptsArgs {
|
|
|
363
363
|
export declare function createBootstrapOpts(args: CreateBootstrapOptsArgs): Pick<FetchproxyServerOpts, 'domains' | 'capabilities' | 'cookieKeys' | 'localStorageKeys' | 'sessionStorageKeys' | 'localStoragePointers' | 'sessionStoragePointers' | 'captureHeaders' | 'indexedDbScopes' | 'domSelectors'>;
|
|
364
364
|
/** Discriminated classification of a tool-boundary error. */
|
|
365
365
|
export interface BridgeErrorInfo {
|
|
366
|
-
|
|
366
|
+
/**
|
|
367
|
+
* `capability_unavailable` (the BROWSER can't serve the verb — not the
|
|
368
|
+
* MCP's fault) and `capability_denied` (the MCP used a capability it never
|
|
369
|
+
* declared — a bug in the MCP) arrived with @fetchproxy 3.3 support; a consumer that
|
|
370
|
+
* `switch`es exhaustively on this union gains two cases.
|
|
371
|
+
*/
|
|
372
|
+
type: 'session_not_ready' | 'bridge_down' | 'timeout' | 'http' | 'protocol' | 'capability_unavailable' | 'capability_denied' | 'unknown';
|
|
367
373
|
message: string;
|
|
368
374
|
hint?: string;
|
|
369
375
|
}
|
|
@@ -375,6 +381,10 @@ export interface BridgeErrorInfo {
|
|
|
375
381
|
* exists. The surfaced message is redacted + truncated. Use this when you want
|
|
376
382
|
* the structured envelope; use the re-exported `classifyBridgeError` for the raw
|
|
377
383
|
* string kind (drop-in compatible with `@fetchproxy/server`).
|
|
384
|
+
*
|
|
385
|
+
* `capability_unavailable` / `capability_denied` are detected ahead of the
|
|
386
|
+
* server's classifier, which files both under `'protocol'` (or, for a
|
|
387
|
+
* browser that refused the hello outright, `'hello_rejected'`).
|
|
378
388
|
*/
|
|
379
389
|
export declare function bridgeErrorInfo(err: unknown): BridgeErrorInfo;
|
|
380
390
|
/** The diagnostic result a `<prefix>_healthcheck` tool returns. */
|
|
@@ -392,6 +402,13 @@ export interface BridgeHealthcheckResult {
|
|
|
392
402
|
session_state?: 'not_listening' | 'linked' | 'pair_pending' | 'extension_disconnected' | 'no_session';
|
|
393
403
|
pending_pair_code?: string | null;
|
|
394
404
|
extension_connected?: boolean;
|
|
405
|
+
/**
|
|
406
|
+
* Capabilities the browser behind the current session said it cannot
|
|
407
|
+
* serve, and which browser that is (`@fetchproxy/server` 3.3+,
|
|
408
|
+
* `bridgeHealth().session`). Absent on older servers.
|
|
409
|
+
*/
|
|
410
|
+
unavailable_capabilities?: string[];
|
|
411
|
+
platform?: string | null;
|
|
395
412
|
};
|
|
396
413
|
/** Which leg served the probe — present when {@link RegisterBridgeHealthcheckToolArgs.path} is supplied. */
|
|
397
414
|
transport?: HealthcheckPath;
|
|
@@ -425,7 +442,7 @@ export interface BridgeHealthcheckResult {
|
|
|
425
442
|
hint: string;
|
|
426
443
|
}
|
|
427
444
|
/** The hint-ladder arms whose copy {@link RegisterBridgeHealthcheckToolArgs.hints} can override. */
|
|
428
|
-
export type HealthcheckHintArm = 'ok' | 'session_not_ready' | 'bridge_down' | 'no_role' | 'timeout' | 'protocol' | 'direct' | 'unknown';
|
|
445
|
+
export type HealthcheckHintArm = 'ok' | 'session_not_ready' | 'bridge_down' | 'no_role' | 'timeout' | 'protocol' | 'capability_unavailable' | 'capability_denied' | 'direct' | 'unknown';
|
|
429
446
|
/**
|
|
430
447
|
* Which leg a direct-first consumer is serving calls on. `transport` is the
|
|
431
448
|
* path the next call rides; `mode` is the configured pin (e.g. hemnet's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EACL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
|
package/dist/fetchproxy/index.js
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* `FetchproxyServer` instance (no NEW top-level `@fetchproxy/server` import),
|
|
35
35
|
* so the bundle-load smoke posture is unchanged.
|
|
36
36
|
*/
|
|
37
|
-
import { FetchproxyServer, FetchproxyBridgeDownError, FetchproxySessionNotReadyError, classifyBridgeError as classifyBridgeErrorKind, } from '@fetchproxy/server';
|
|
37
|
+
import { FetchproxyServer, FetchproxyBridgeDownError, FetchproxySessionNotReadyError, classifyBridgeError as classifyBridgeErrorKind, classifyFetchError as classifyFetchErrorKind, } from '@fetchproxy/server';
|
|
38
38
|
import { truncateErrorMessage, messageOf } from '../errors/index.js';
|
|
39
39
|
// ---------------------------------------------------------------------------
|
|
40
40
|
// Re-exports — single import site for the bridge primitives (design: re-export,
|
|
@@ -319,6 +319,94 @@ export function createBootstrapOpts(args) {
|
|
|
319
319
|
...(nonEmpty(b.domSelectors) ? { domSelectors: b.domSelectors } : {}),
|
|
320
320
|
};
|
|
321
321
|
}
|
|
322
|
+
/** Where users get the extension. No store listing exists yet — never invent one. */
|
|
323
|
+
const CONTEXTMINT_BRIDGE_RELEASES = 'https://github.com/nullnet-app/contextmint-bridge/releases';
|
|
324
|
+
/**
|
|
325
|
+
* The fixed wire wording for a capability the browser lacks
|
|
326
|
+
* (`@fetchproxy/protocol`'s `capabilityUnavailableMessage`), matched anywhere
|
|
327
|
+
* in the message because callers wrap it. Also accepts the pre-3.3 form that
|
|
328
|
+
* named no browser. Duplicated rather than imported so this works against a
|
|
329
|
+
* `@fetchproxy/server` that predates it.
|
|
330
|
+
*/
|
|
331
|
+
const CAPABILITY_UNAVAILABLE_RE = /capability "([^"]{1,64})" is not available in this browser(?: \(([^)]{1,32})\))?/;
|
|
332
|
+
/** The `hello-rejected` reason sent when NOTHING the MCP declared is servable here. */
|
|
333
|
+
const UNSUPPORTED_CAPABILITY_RE = /unsupported-capability:\s*([^()]+?)\s*\(not available in this browser\)/;
|
|
334
|
+
/** The extension's wording for a capability the MCP never declared (`capability_denied`). */
|
|
335
|
+
const CAPABILITY_DENIED_RE = /\bcapability \S.* not granted/;
|
|
336
|
+
/**
|
|
337
|
+
* The server-classifier kinds a capability error can arrive under: a bare or
|
|
338
|
+
* hinted protocol error, a refused hello, or (from a foreign copy of the
|
|
339
|
+
* package) nothing it recognises. Never an upstream HTTP error, a timeout or a
|
|
340
|
+
* dead service worker — their messages can quote anything.
|
|
341
|
+
*/
|
|
342
|
+
function mayBeCapabilityError(kind) {
|
|
343
|
+
return kind === 'protocol' || kind === 'hello_rejected' || kind === 'other';
|
|
344
|
+
}
|
|
345
|
+
function stringField(err, key) {
|
|
346
|
+
if (typeof err !== 'object' || err === null)
|
|
347
|
+
return undefined;
|
|
348
|
+
const v = err[key];
|
|
349
|
+
return typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Detect "this browser cannot serve that capability" (@fetchproxy 3.3+, #418)
|
|
353
|
+
* on ANY installed `@fetchproxy/server`: by the typed error's name and fields,
|
|
354
|
+
* by the wire `code`, by the `unsupported-capability:` hello rejection, and by
|
|
355
|
+
* the fixed wording — the last being all a pre-3.3 server passes through (as a
|
|
356
|
+
* bare `FetchproxyProtocolError`, which its classifier calls `'protocol'`).
|
|
357
|
+
* Duck-typed on purpose: importing the 3.3 classes would fail to link against
|
|
358
|
+
* the older servers the peer range still accepts.
|
|
359
|
+
*/
|
|
360
|
+
function capabilityGapOf(err) {
|
|
361
|
+
const name = err instanceof Error ? err.name : undefined;
|
|
362
|
+
const message = messageOf(err);
|
|
363
|
+
const originalError = stringField(err, 'originalError');
|
|
364
|
+
const platformField = stringField(err, 'platform') ?? null;
|
|
365
|
+
if (name === 'FetchproxyHelloRejectedError') {
|
|
366
|
+
const listed = err.unavailableCapabilities;
|
|
367
|
+
const parsed = UNSUPPORTED_CAPABILITY_RE.exec(stringField(err, 'reason') ?? message);
|
|
368
|
+
const capabilities = Array.isArray(listed) && listed.length > 0
|
|
369
|
+
? listed.map(String)
|
|
370
|
+
: parsed
|
|
371
|
+
? parsed[1].split(',').map((c) => c.trim()).filter(Boolean)
|
|
372
|
+
: [];
|
|
373
|
+
return capabilities.length > 0 ? { capabilities, platform: platformField } : null;
|
|
374
|
+
}
|
|
375
|
+
const wording = CAPABILITY_UNAVAILABLE_RE.exec(originalError ?? message);
|
|
376
|
+
const typed = name === 'FetchproxyCapabilityUnavailableError';
|
|
377
|
+
const coded = stringField(err, 'code') === 'capability_unavailable';
|
|
378
|
+
// The server's own string classifier, where the installed one knows the kind
|
|
379
|
+
// (3.3+). Harmless on older servers — it answers something else.
|
|
380
|
+
const classified = classifyFetchErrorKind(originalError ?? message) === 'capability_unavailable';
|
|
381
|
+
if (!typed && !coded && !wording && !classified)
|
|
382
|
+
return null;
|
|
383
|
+
const capability = stringField(err, 'capability') ?? wording?.[1];
|
|
384
|
+
return {
|
|
385
|
+
capabilities: capability ? [capability] : [],
|
|
386
|
+
platform: platformField ?? wording?.[2] ?? null,
|
|
387
|
+
...(originalError !== undefined ? { originalError } : {}),
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
/** `capability_denied`: the MCP asked for a capability it never declared. */
|
|
391
|
+
function isCapabilityDenied(err) {
|
|
392
|
+
const text = stringField(err, 'originalError') ?? messageOf(err);
|
|
393
|
+
if (CAPABILITY_UNAVAILABLE_RE.test(text))
|
|
394
|
+
return false;
|
|
395
|
+
return classifyFetchErrorKind(text) === 'capability_denied' || CAPABILITY_DENIED_RE.test(text);
|
|
396
|
+
}
|
|
397
|
+
function capabilityUnavailableHint(gap) {
|
|
398
|
+
const where = gap.platform ? `This browser (${gap.platform})` : 'This browser';
|
|
399
|
+
const what = gap.capabilities.length === 0
|
|
400
|
+
? 'what this tool needs'
|
|
401
|
+
: gap.capabilities.length === 1
|
|
402
|
+
? `the "${gap.capabilities[0]}" capability this tool needs`
|
|
403
|
+
: `the capabilities this MCP needs (${gap.capabilities.map((c) => `"${c}"`).join(', ')})`;
|
|
404
|
+
return (`${where} can't serve ${what} — ContextMint Bridge checked for the browser API and it is missing. ` +
|
|
405
|
+
`The MCP isn't at fault, and re-pairing or updating won't change it: use a browser that supports it ` +
|
|
406
|
+
`(for example Chrome) for this.`);
|
|
407
|
+
}
|
|
408
|
+
const CAPABILITY_DENIED_HINT = 'The MCP asked ContextMint Bridge for a capability it never declared, so the request was refused. ' +
|
|
409
|
+
'This is a bug in the MCP, not in your browser or pairing — please report it to the maintainer of the MCP.';
|
|
322
410
|
/**
|
|
323
411
|
* Thin discriminator over the `@fetchproxy/server` typed-error hierarchy. Folds
|
|
324
412
|
* the re-exported raw {@link classifyBridgeError} (which returns a bare kind
|
|
@@ -327,6 +415,10 @@ export function createBootstrapOpts(args) {
|
|
|
327
415
|
* exists. The surfaced message is redacted + truncated. Use this when you want
|
|
328
416
|
* the structured envelope; use the re-exported `classifyBridgeError` for the raw
|
|
329
417
|
* string kind (drop-in compatible with `@fetchproxy/server`).
|
|
418
|
+
*
|
|
419
|
+
* `capability_unavailable` / `capability_denied` are detected ahead of the
|
|
420
|
+
* server's classifier, which files both under `'protocol'` (or, for a
|
|
421
|
+
* browser that refused the hello outright, `'hello_rejected'`).
|
|
330
422
|
*/
|
|
331
423
|
export function bridgeErrorInfo(err) {
|
|
332
424
|
if (err instanceof FetchproxySessionNotReadyError) {
|
|
@@ -341,20 +433,37 @@ export function bridgeErrorInfo(err) {
|
|
|
341
433
|
};
|
|
342
434
|
}
|
|
343
435
|
const kind = classifyBridgeErrorKind(err);
|
|
436
|
+
const gap = mayBeCapabilityError(kind) ? capabilityGapOf(err) : null;
|
|
437
|
+
if (gap) {
|
|
438
|
+
return {
|
|
439
|
+
type: 'capability_unavailable',
|
|
440
|
+
// A hinted server error folds its own remedy into the message; keep the
|
|
441
|
+
// wire rejection so a consumer appending `hint` doesn't say it twice.
|
|
442
|
+
message: truncateErrorMessage(gap.originalError ?? messageOf(err)),
|
|
443
|
+
hint: capabilityUnavailableHint(gap),
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
if (mayBeCapabilityError(kind) && isCapabilityDenied(err)) {
|
|
447
|
+
return {
|
|
448
|
+
type: 'capability_denied',
|
|
449
|
+
message: truncateErrorMessage(stringField(err, 'originalError') ?? messageOf(err)),
|
|
450
|
+
hint: CAPABILITY_DENIED_HINT,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
344
453
|
const message = truncateErrorMessage(messageOf(err));
|
|
345
454
|
switch (kind) {
|
|
346
455
|
case 'timeout':
|
|
347
456
|
return {
|
|
348
457
|
type: 'timeout',
|
|
349
458
|
message,
|
|
350
|
-
hint: 'The
|
|
459
|
+
hint: 'The request through ContextMint Bridge timed out. Check the browser tab is open and responsive, then retry.',
|
|
351
460
|
};
|
|
352
461
|
case 'bridge_down': {
|
|
353
462
|
const hint = err instanceof FetchproxyBridgeDownError ? err.hint : undefined;
|
|
354
463
|
return {
|
|
355
464
|
type: 'bridge_down',
|
|
356
465
|
message,
|
|
357
|
-
hint: hint ?? '
|
|
466
|
+
hint: hint ?? 'ContextMint Bridge is offline. Open a signed-in tab so the extension can relay the request.',
|
|
358
467
|
};
|
|
359
468
|
}
|
|
360
469
|
case 'http':
|
|
@@ -363,7 +472,7 @@ export function bridgeErrorInfo(err) {
|
|
|
363
472
|
return {
|
|
364
473
|
type: 'protocol',
|
|
365
474
|
message,
|
|
366
|
-
hint: '
|
|
475
|
+
hint: 'ContextMint Bridge could not relay the request (e.g. no signed-in tab or denied domain).',
|
|
367
476
|
};
|
|
368
477
|
case 'other':
|
|
369
478
|
default:
|
|
@@ -389,20 +498,26 @@ function healthcheckHint(args) {
|
|
|
389
498
|
if (args.direct) {
|
|
390
499
|
return `Direct fetch round-tripped ${probePath} successfully — the browser bridge wasn't used for this probe. If real tools still fail, the problem is on the ${hostLabel} side (a bot wall answering some calls but not this one, a field that moved, …), not the transport.`;
|
|
391
500
|
}
|
|
392
|
-
return `Bridge round-tripped ${probePath} successfully. If real tools still fail, the problem is downstream of
|
|
501
|
+
return `Bridge round-tripped ${probePath} successfully. If real tools still fail, the problem is downstream of ContextMint Bridge (${hostLabel} redirecting on login, a bot-wall / behavioral challenge, etc.) — not the bridge.`;
|
|
502
|
+
}
|
|
503
|
+
if (args.errorKind === 'capability_unavailable') {
|
|
504
|
+
return capabilityUnavailableHint(args.capabilityGap ?? { capabilities: [], platform: null });
|
|
505
|
+
}
|
|
506
|
+
if (args.errorKind === 'capability_denied') {
|
|
507
|
+
return CAPABILITY_DENIED_HINT;
|
|
393
508
|
}
|
|
394
509
|
if (args.errorKind === 'session_not_ready') {
|
|
395
510
|
const s = args.session;
|
|
396
511
|
if (s?.pairCode) {
|
|
397
|
-
return `
|
|
512
|
+
return `ContextMint Bridge is waiting for you to approve pair code ${s.pairCode} for ${prefix}-mcp. Open the ContextMint Bridge popup, approve it, then retry.`;
|
|
398
513
|
}
|
|
399
514
|
if (s?.state === 'extension_disconnected') {
|
|
400
|
-
return `
|
|
515
|
+
return `ContextMint Bridge isn't attached to this bridge${portNote}. Open a browser with ContextMint Bridge installed and a ${hostLabel} tab, then retry. (Chrome: load the extension from ${CONTEXTMINT_BRIDGE_RELEASES}; Safari: it ships inside the ContextMint app.)`;
|
|
401
516
|
}
|
|
402
|
-
return `
|
|
517
|
+
return `ContextMint Bridge is attached but never confirmed a session for ${prefix}-mcp — its hello got no answer within the session-ready timeout. Reload the extension (chrome://extensions) or reopen the ${hostLabel} tab, then retry. On a hosted bridge this is also what a relay that dialled the child before it bound its port${portNote} looks like.`;
|
|
403
518
|
}
|
|
404
519
|
if (args.errorKind === 'bridge_down') {
|
|
405
|
-
const base = `The
|
|
520
|
+
const base = `The ContextMint Bridge extension's service worker is not responding. Chrome evicts extension service workers after ~30s idle by default — this looks like that case. Wake it by clicking the ContextMint Bridge icon in the toolbar (or opening any ${hostLabel} tab and reloading), then retry. If it keeps happening, reload the extension from chrome://extensions.`;
|
|
406
521
|
return args.bridgeHint ? `${args.bridgeHint} ${base}` : base;
|
|
407
522
|
}
|
|
408
523
|
if (args.direct) {
|
|
@@ -412,10 +527,10 @@ function healthcheckHint(args) {
|
|
|
412
527
|
return `The bridge never bound a role. listen() may have failed silently on startup. Check stderr from ${prefix}-mcp for an error during start, and confirm ${port === null ? 'the bridge port' : `port ${port}`} isn't blocked.`;
|
|
413
528
|
}
|
|
414
529
|
if (args.errorKind === 'timeout') {
|
|
415
|
-
return `Bridge is alive (role=${args.role}), but the request didn't get a response in time. Either (a)
|
|
530
|
+
return `Bridge is alive (role=${args.role}), but the request didn't get a response in time. Either (a) ContextMint Bridge isn't connected to this MCP yet — open the ContextMint Bridge popup and check for a green dot next to "${prefix}-mcp", or (b) the signed-in ${hostLabel} tab is sleeping / closed. Open ${hostLabel} in your browser, then retry.`;
|
|
416
531
|
}
|
|
417
532
|
if (args.errorKind === 'protocol' || args.errorKind === 'http') {
|
|
418
|
-
return `The bridge returned a protocol error before any HTTP response. Most commonly: no ${hostLabel} tab is open, or
|
|
533
|
+
return `The bridge returned a protocol error before any HTTP response. Most commonly: no ${hostLabel} tab is open, or ContextMint Bridge declined the request. Open ${hostLabel}, sign in, and retry.`;
|
|
419
534
|
}
|
|
420
535
|
return `Unexpected error — see the error.message field for details.`;
|
|
421
536
|
}
|
|
@@ -445,6 +560,11 @@ function projectBridgeStatus(health) {
|
|
|
445
560
|
session_state: session.state,
|
|
446
561
|
pending_pair_code: session.pairCode,
|
|
447
562
|
extension_connected: session.extensionConnected,
|
|
563
|
+
// 3.3+ only; absent keys stay absent on an older server.
|
|
564
|
+
...(session.unavailableCapabilities !== undefined
|
|
565
|
+
? { unavailable_capabilities: session.unavailableCapabilities }
|
|
566
|
+
: {}),
|
|
567
|
+
...(session.platform !== undefined ? { platform: session.platform } : {}),
|
|
448
568
|
}
|
|
449
569
|
: {}),
|
|
450
570
|
};
|
|
@@ -482,7 +602,7 @@ function probeDisplayUrl(hostLabel, probePath) {
|
|
|
482
602
|
return `https://${hostLabel}${probePath.startsWith('/') ? '' : '/'}${probePath}`;
|
|
483
603
|
}
|
|
484
604
|
export function bridgeHealthcheckDescription(hostLabel, probePath) {
|
|
485
|
-
return `Round-trips a small public ${hostLabel} URL (${probePath}) through
|
|
605
|
+
return `Round-trips a small public ${hostLabel} URL (${probePath}) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real ${hostLabel}-side problem'. Read-only, no auth required.`;
|
|
486
606
|
}
|
|
487
607
|
/**
|
|
488
608
|
* The bridge healthcheck's whole body, without the registration.
|
|
@@ -561,6 +681,7 @@ export async function runBridgeHealthcheck(args) {
|
|
|
561
681
|
let bridgeHint;
|
|
562
682
|
let customHint;
|
|
563
683
|
let customDetail;
|
|
684
|
+
let capabilityGap;
|
|
564
685
|
if (rawError) {
|
|
565
686
|
// `runProbe` (or classifyBridgeError on the direct route) already
|
|
566
687
|
// classified the throw in fetchproxy's raw vocabulary. Trust that as
|
|
@@ -575,6 +696,18 @@ export async function runBridgeHealthcheck(args) {
|
|
|
575
696
|
else if (thrown instanceof FetchproxyBridgeDownError) {
|
|
576
697
|
bridgeHint = thrown.hint;
|
|
577
698
|
}
|
|
699
|
+
else if (thrown !== undefined && mayBeCapabilityError(rawError.kind)) {
|
|
700
|
+
// The server's classifier files a browser gap under 'protocol' (or
|
|
701
|
+
// 'hello_rejected'); name it, so the ladder can say whose fault it isn't.
|
|
702
|
+
const gap = capabilityGapOf(thrown);
|
|
703
|
+
if (gap) {
|
|
704
|
+
kind = 'capability_unavailable';
|
|
705
|
+
capabilityGap = gap;
|
|
706
|
+
}
|
|
707
|
+
else if (isCapabilityDenied(thrown)) {
|
|
708
|
+
kind = 'capability_denied';
|
|
709
|
+
}
|
|
710
|
+
}
|
|
578
711
|
// A consumer classifier can re-kind the thrown error (e.g. workday's
|
|
579
712
|
// session_expired) and supply site-specific next-step copy.
|
|
580
713
|
if (thrown !== undefined && classifyThrown) {
|
|
@@ -600,19 +733,21 @@ export async function runBridgeHealthcheck(args) {
|
|
|
600
733
|
// so per-arm `hints` overrides land on the same arm the default copy would.
|
|
601
734
|
const arm = ok
|
|
602
735
|
? 'ok'
|
|
603
|
-
: error?.kind === '
|
|
604
|
-
?
|
|
605
|
-
: error?.kind === '
|
|
606
|
-
? '
|
|
607
|
-
:
|
|
608
|
-
? '
|
|
609
|
-
:
|
|
610
|
-
? '
|
|
611
|
-
:
|
|
612
|
-
? '
|
|
613
|
-
: error?.kind === '
|
|
614
|
-
? '
|
|
615
|
-
: '
|
|
736
|
+
: error?.kind === 'capability_unavailable' || error?.kind === 'capability_denied'
|
|
737
|
+
? error.kind
|
|
738
|
+
: error?.kind === 'session_not_ready'
|
|
739
|
+
? 'session_not_ready'
|
|
740
|
+
: error?.kind === 'bridge_down'
|
|
741
|
+
? 'bridge_down'
|
|
742
|
+
: direct
|
|
743
|
+
? 'direct'
|
|
744
|
+
: bridge === undefined || bridge.role === null
|
|
745
|
+
? 'no_role'
|
|
746
|
+
: error?.kind === 'timeout'
|
|
747
|
+
? 'timeout'
|
|
748
|
+
: error?.kind === 'protocol' || error?.kind === 'http'
|
|
749
|
+
? 'protocol'
|
|
750
|
+
: 'unknown';
|
|
616
751
|
const defaultHint = healthcheckHint({
|
|
617
752
|
ok,
|
|
618
753
|
role: bridge?.role ?? null,
|
|
@@ -629,6 +764,15 @@ export async function runBridgeHealthcheck(args) {
|
|
|
629
764
|
(thrown instanceof FetchproxySessionNotReadyError ? thrown.pairCode : null),
|
|
630
765
|
},
|
|
631
766
|
direct,
|
|
767
|
+
...(capabilityGap
|
|
768
|
+
? {
|
|
769
|
+
capabilityGap: {
|
|
770
|
+
capabilities: capabilityGap.capabilities,
|
|
771
|
+
// The error may not name the browser; the session snapshot can.
|
|
772
|
+
platform: capabilityGap.platform ?? bridge?.platform ?? null,
|
|
773
|
+
},
|
|
774
|
+
}
|
|
775
|
+
: {}),
|
|
632
776
|
});
|
|
633
777
|
const result = {
|
|
634
778
|
ok,
|
|
@@ -649,10 +793,10 @@ export async function runBridgeHealthcheck(args) {
|
|
|
649
793
|
*/
|
|
650
794
|
export function registerBridgeHealthcheckTool(args) {
|
|
651
795
|
args.server.registerTool(`${args.prefix}_healthcheck`, {
|
|
652
|
-
title: 'Verify the
|
|
796
|
+
title: 'Verify the ContextMint Bridge connection end-to-end',
|
|
653
797
|
description: `${bridgeHealthcheckDescription(args.hostLabel, args.probePath)} Call this when a real tool fails and you want to know which hop broke.`,
|
|
654
798
|
annotations: {
|
|
655
|
-
title: 'Verify the
|
|
799
|
+
title: 'Verify the ContextMint Bridge connection end-to-end',
|
|
656
800
|
readOnlyHint: true,
|
|
657
801
|
idempotentHint: true,
|
|
658
802
|
openWorldHint: true,
|