@chrischall/mcp-utils 0.19.0 → 0.19.2

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
@@ -34,6 +34,7 @@ import light:
34
34
  | `@chrischall/mcp-utils` | core barrel: `server` + `response` + `errors` + `config` + `fs` + `http` + `concurrency` + `dates` + `zod` + `auth` + `scrape` |
35
35
  | `@chrischall/mcp-utils/session` | session registry, session store, state persistence, token manager, cookie-session manager |
36
36
  | `@chrischall/mcp-utils/fetchproxy` | fetchproxy transport adapter, bot-wall / retry / concurrency helpers |
37
+ | `@chrischall/mcp-utils/healthcheck` | credential-style healthcheck factory (no fetchproxy peer needed) |
37
38
  | `@chrischall/mcp-utils/html` | opt-in HTML scraping helpers (needs `node-html-parser`) |
38
39
  | `@chrischall/mcp-utils/scrape` | convenience alias for the zero-dep `scrape` module (also in the core barrel) |
39
40
  | `@chrischall/mcp-utils/test` | in-memory test harness for tool registration |
@@ -698,7 +699,16 @@ custom `{ kind, hint }` (e.g. an SSO bounce → `session_expired` with re-sign-i
698
699
  copy; its hint wins the result hint), and `hints` overrides the default copy
699
700
  per ladder arm (`{ timeout: 'DataDome may be challenging the tab — …' }`).
700
701
 
701
- **Credential-healthcheck tool factory.** `registerCredentialHealthcheckTool({
702
+ ### `healthcheck` credential healthchecks *(subpath, no optional peers)*
703
+
704
+ ```ts
705
+ import { registerCredentialHealthcheckTool } from '@chrischall/mcp-utils/healthcheck';
706
+ ```
707
+
708
+ Its own subpath rather than `/fetchproxy`, which pulls the optional
709
+ `@fetchproxy/server` peer that most callers of this factory do not install.
710
+
711
+ `registerCredentialHealthcheckTool({
702
712
  server, prefix, hostLabel, probePath?, resolveCredential, probeFn })` is the
703
713
  twin for connectors whose health is about a **credential** rather than a
704
714
  browser bridge: OAuth connectors, API-key connectors, and the fetchproxy MCPs
@@ -383,105 +383,13 @@ export interface RegisterBridgeHealthcheckToolArgs {
383
383
  */
384
384
  export declare function registerBridgeHealthcheckTool(args: RegisterBridgeHealthcheckToolArgs): void;
385
385
  /**
386
- * Ladder arms for {@link registerCredentialHealthcheckTool}. Ordered by the
387
- * question each answers: is there a credential at all, did the far side accept
388
- * it, and did the round-trip work.
389
- */
390
- export type CredentialHealthcheckArm = 'ok' | 'no_credential' | 'credential_rejected' | 'timeout' | 'http' | 'transport' | 'unknown';
391
- /** What a consumer's resolver reports. NEVER the credential value itself. */
392
- export interface CredentialState {
393
- /**
394
- * Which source supplied the credential — `'env'`, `'fetchproxy'`, `'cache'`,
395
- * a connector field name, etc. `null` means nothing resolved, which short-
396
- * circuits the probe.
397
- */
398
- source: string | null;
399
- /**
400
- * Non-secret facts worth reporting: age, expiry, account label, which
401
- * district was selected. This is echoed into the tool result verbatim, so
402
- * it MUST NOT carry the credential, any part of it, or anything that would
403
- * identify it beyond a label — a healthcheck is the tool people paste into
404
- * chats when something is broken.
405
- */
406
- detail?: Record<string, unknown>;
407
- }
408
- /**
409
- * Options for {@link registerCredentialHealthcheckTool} — the credential-side
410
- * twin of {@link RegisterBridgeHealthcheckToolArgs}. The per-connector bits are
411
- * `prefix`, `hostLabel`, the optional `probePath`, and the two functions that
412
- * reach the outside world (`resolveCredential`, `probeFn`).
413
- */
414
- export interface RegisterCredentialHealthcheckToolArgs {
415
- server: {
416
- registerTool: (name: string, config: unknown, handler: () => Promise<unknown>) => void;
417
- };
418
- /** Tool-name prefix; the tool is `${prefix}_healthcheck`. */
419
- prefix: string;
420
- /** Display host for the probe URL and hint copy, e.g. `'api.freshbooks.com'`. */
421
- hostLabel: string;
422
- /** Optional path, for display only: the probe URL is `https://<hostLabel><probePath>`. */
423
- probePath?: string;
424
- /**
425
- * Resolve the credential the way the real tools do — same cache, same
426
- * fallback order — so a passing healthcheck means real tools work. Throwing
427
- * is treated as `no_credential` with the throw's message, because a resolver
428
- * that cannot produce one has answered the question.
429
- */
430
- resolveCredential: () => Promise<CredentialState>;
431
- /** One authenticated round-trip. Only called when a credential resolved. */
432
- probeFn: () => Promise<unknown>;
433
- /** Re-kind a thrown error and supply site-specific copy. */
434
- classifyThrown?: (err: unknown) => {
435
- kind: string;
436
- hint?: string;
437
- detail?: Record<string, unknown>;
438
- } | undefined;
439
- /** Per-arm copy overrides. */
440
- hints?: Partial<Record<CredentialHealthcheckArm, string>>;
441
- }
442
- /**
443
- * The JSON body `${prefix}_healthcheck` returns for a credential-style
444
- * connector, mirroring {@link BridgeHealthcheckResult}'s envelope: `ok`, the
445
- * per-subject block (here `credential` rather than `bridge`), the `probe`
446
- * measurements, an optional typed `error`, and always a human-readable `hint`.
447
- *
448
- * `credential` never carries the credential itself — only the source label and
449
- * whatever non-secret `detail` the resolver chose to report.
450
- */
451
- export interface CredentialHealthcheckResult {
452
- ok: boolean;
453
- credential: {
454
- source: string | null;
455
- resolved: boolean;
456
- detail?: Record<string, unknown>;
457
- };
458
- probe: {
459
- url?: string;
460
- elapsed_ms: number;
461
- status?: number;
462
- };
463
- error?: {
464
- kind: string;
465
- message: string;
466
- detail?: Record<string, unknown>;
467
- };
468
- hint: string;
469
- }
470
- /**
471
- * Register `${prefix}_healthcheck` for a connector whose health is about a
472
- * CREDENTIAL rather than a browser bridge — OAuth connectors, API-key
473
- * connectors, and the fetchproxy MCPs that only BOOTSTRAP a token and then
474
- * talk to an API directly.
475
- *
476
- * It exists because those three failures are indistinguishable today and have
477
- * different fixes: nothing minted a credential, something minted one the far
478
- * side rejects, and the far side is simply down. The bridge helper
479
- * ({@link registerBridgeHealthcheckTool}) answers the equivalent question for
480
- * MCPs where every request rides the bridge.
386
+ * @deprecated Import from `@chrischall/mcp-utils/healthcheck` instead.
481
387
  *
482
- * The probe is SKIPPED when no credential resolved — probing without one
483
- * produces a 401 that reads like a rejected credential and points at the wrong
484
- * fix.
388
+ * `registerCredentialHealthcheckTool` shipped here in 0.19.0–0.19.1 and moved
389
+ * out because this module imports the optional `@fetchproxy/server` peer,
390
+ * which most of its callers do not install. Re-exported so those releases keep
391
+ * working rather than breaking under a patch-level change; it will be removed
392
+ * in the next minor.
485
393
  */
486
- export declare function registerCredentialHealthcheckTool(args: RegisterCredentialHealthcheckToolArgs): void;
394
+ export { registerCredentialHealthcheckTool, type RegisterCredentialHealthcheckToolArgs, type CredentialHealthcheckResult, type CredentialHealthcheckArm, type CredentialState, } from '../healthcheck/index.js';
487
395
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
@@ -434,152 +434,14 @@ export function registerBridgeHealthcheckTool(args) {
434
434
  };
435
435
  });
436
436
  }
437
- /** HTTP status off a thrown error, when the thrower attached one. */
438
- function statusOf(err) {
439
- if (typeof err !== 'object' || err === null)
440
- return undefined;
441
- const s = err.status ??
442
- err.statusCode;
443
- return typeof s === 'number' ? s : undefined;
444
- }
445
- function credentialHint(arm, prefix, hostLabel, source) {
446
- switch (arm) {
447
- case 'ok':
448
- return `Credential from '${source}' works: ${hostLabel} accepted an authenticated request. If a real tool still fails, the problem is that tool, not auth.`;
449
- case 'no_credential':
450
- return `No credential resolved. Nothing was available to authenticate with — sign in and reconnect the connector so ${prefix} receives a token, or set the documented environment variable.`;
451
- case 'credential_rejected':
452
- return `${hostLabel} rejected the credential from '${source}'. It is present but no longer valid — most often expired or revoked upstream. Re-authenticate and reconnect; retrying will not fix it.`;
453
- case 'timeout':
454
- return `The credential from '${source}' resolved, but ${hostLabel} did not answer in time. Usually transient — retry. If it persists, ${hostLabel} is slow or unreachable from here.`;
455
- case 'http':
456
- return `${hostLabel} answered with an error status that is not an auth rejection. That is USUALLY a ${hostLabel}-side problem rather than an auth one — but a 404 here more often means the probe path is wrong than that ${hostLabel} is broken, so check error.message and probe.url before concluding anything about the credential.`;
457
- case 'transport':
458
- return `Could not reach ${hostLabel} at all. Check network egress; the credential itself was never judged.`;
459
- default:
460
- return `Unexpected failure — see error.message.`;
461
- }
462
- }
463
437
  /**
464
- * Register `${prefix}_healthcheck` for a connector whose health is about a
465
- * CREDENTIAL rather than a browser bridge — OAuth connectors, API-key
466
- * connectors, and the fetchproxy MCPs that only BOOTSTRAP a token and then
467
- * talk to an API directly.
468
- *
469
- * It exists because those three failures are indistinguishable today and have
470
- * different fixes: nothing minted a credential, something minted one the far
471
- * side rejects, and the far side is simply down. The bridge helper
472
- * ({@link registerBridgeHealthcheckTool}) answers the equivalent question for
473
- * MCPs where every request rides the bridge.
438
+ * @deprecated Import from `@chrischall/mcp-utils/healthcheck` instead.
474
439
  *
475
- * The probe is SKIPPED when no credential resolved — probing without one
476
- * produces a 401 that reads like a rejected credential and points at the wrong
477
- * fix.
440
+ * `registerCredentialHealthcheckTool` shipped here in 0.19.0–0.19.1 and moved
441
+ * out because this module imports the optional `@fetchproxy/server` peer,
442
+ * which most of its callers do not install. Re-exported so those releases keep
443
+ * working rather than breaking under a patch-level change; it will be removed
444
+ * in the next minor.
478
445
  */
479
- export function registerCredentialHealthcheckTool(args) {
480
- const { server, prefix, hostLabel, probePath, resolveCredential, probeFn, classifyThrown, hints } = args;
481
- const probeUrl = probePath ? `https://${hostLabel}${probePath}` : undefined;
482
- server.registerTool(`${prefix}_healthcheck`, {
483
- title: 'Verify credentials and upstream reachability',
484
- description: `Resolves the credential the way real tools do, then makes one authenticated request to ${hostLabel}. Reports which source supplied the credential, whether ${hostLabel} accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a ${hostLabel}-side problem'. Call this when a real tool fails and you want to know which hop broke. Read-only; never returns the credential itself.`,
485
- annotations: {
486
- title: 'Verify credentials and upstream reachability',
487
- readOnlyHint: true,
488
- idempotentHint: true,
489
- openWorldHint: true,
490
- },
491
- inputSchema: {},
492
- }, async () => {
493
- // Timed from just BEFORE the probe, never from the top: resolving a
494
- // credential can mint a token or drive the browser bridge, and folding
495
- // that into `probe.elapsed_ms` reports it as far-side latency.
496
- let probeStarted = 0;
497
- let state;
498
- try {
499
- state = await resolveCredential();
500
- }
501
- catch (e) {
502
- const result = {
503
- ok: false,
504
- credential: { source: null, resolved: false },
505
- // No `url`: nothing was probed, and naming one implies it was tried.
506
- probe: { elapsed_ms: 0 },
507
- error: { kind: 'no_credential', message: truncateErrorMessage(messageOf(e)) },
508
- hint: hints?.no_credential ?? credentialHint('no_credential', prefix, hostLabel, null),
509
- };
510
- return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
511
- }
512
- const credential = {
513
- source: state.source,
514
- resolved: state.source !== null,
515
- ...(state.detail !== undefined ? { detail: state.detail } : {}),
516
- };
517
- // No credential: answer without probing. A probe here 401s and reads as
518
- // "rejected", which points at re-authenticating a credential that does
519
- // not exist.
520
- if (!credential.resolved) {
521
- const result = {
522
- ok: false,
523
- credential,
524
- probe: { elapsed_ms: 0 },
525
- error: { kind: 'no_credential', message: 'no credential source resolved' },
526
- hint: hints?.no_credential ?? credentialHint('no_credential', prefix, hostLabel, null),
527
- };
528
- return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
529
- }
530
- let arm = 'ok';
531
- let error;
532
- let status;
533
- let customHint;
534
- probeStarted = Date.now();
535
- try {
536
- await probeFn();
537
- }
538
- catch (e) {
539
- status = statusOf(e);
540
- // `AbortError` is matched on `err.name`, as src/http/index.ts does — a
541
- // bare AbortController abort carries it there and NOT in the message,
542
- // so matching the text alone classified those as 'unknown'.
543
- const aborted = e instanceof Error && e.name === 'AbortError';
544
- arm =
545
- status === 401 || status === 403
546
- ? 'credential_rejected'
547
- : status !== undefined
548
- ? 'http'
549
- : aborted || /timeout|timed out|ETIMEDOUT/i.test(messageOf(e))
550
- ? 'timeout'
551
- : /fetch failed|ENOTFOUND|ECONNREFUSED|ECONNRESET|network/i.test(messageOf(e))
552
- ? 'transport'
553
- : 'unknown';
554
- let kind = arm;
555
- let detail;
556
- const custom = classifyThrown?.(e);
557
- if (custom) {
558
- kind = custom.kind;
559
- customHint = custom.hint;
560
- detail = custom.detail;
561
- }
562
- error = {
563
- kind,
564
- // Redacted AND bounded before it reaches the result: an upstream
565
- // failure routinely quotes what it was sent, and a healthcheck is
566
- // the tool people paste into a chat when something is broken.
567
- message: truncateErrorMessage(messageOf(e)),
568
- ...(detail !== undefined ? { detail } : {}),
569
- };
570
- }
571
- const result = {
572
- ok: error === undefined,
573
- credential,
574
- probe: {
575
- ...(probeUrl ? { url: probeUrl } : {}),
576
- elapsed_ms: Date.now() - probeStarted,
577
- ...(status !== undefined ? { status } : {}),
578
- },
579
- ...(error ? { error } : {}),
580
- hint: customHint ?? hints?.[arm] ?? credentialHint(arm, prefix, hostLabel, state.source),
581
- };
582
- return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
583
- });
584
- }
446
+ export { registerCredentialHealthcheckTool, } from '../healthcheck/index.js';
585
447
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * `@chrischall/mcp-utils/healthcheck` — the credential-style healthcheck
3
+ * factory.
4
+ *
5
+ * It lives in its OWN subpath rather than beside the bridge factory in
6
+ * `/fetchproxy` because that module imports `@fetchproxy/server`, an optional
7
+ * peer. Most connectors this helper is for — API-key and OAuth ones like
8
+ * splitwise, gemini and freshbooks — have no fetchproxy dependency at all, and
9
+ * importing it from `/fetchproxy` failed at runtime with
10
+ * `Cannot find package '@fetchproxy/server'`. Nothing here touches fetchproxy.
11
+ */
12
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
13
+ /**
14
+ * Ladder arms for {@link registerCredentialHealthcheckTool}. Ordered by the
15
+ * question each answers: is there a credential at all, did the far side accept
16
+ * it, and did the round-trip work.
17
+ */
18
+ export type CredentialHealthcheckArm = 'ok' | 'no_credential' | 'credential_rejected' | 'timeout' | 'http' | 'transport' | 'unknown';
19
+ /** What a consumer's resolver reports. NEVER the credential value itself. */
20
+ export interface CredentialState {
21
+ /**
22
+ * Which source supplied the credential — `'env'`, `'fetchproxy'`, `'cache'`,
23
+ * a connector field name, etc. `null` means nothing resolved, which short-
24
+ * circuits the probe.
25
+ */
26
+ source: string | null;
27
+ /**
28
+ * Non-secret facts worth reporting: age, expiry, account label, which
29
+ * district was selected. This is echoed into the tool result verbatim, so
30
+ * it MUST NOT carry the credential, any part of it, or anything that would
31
+ * identify it beyond a label — a healthcheck is the tool people paste into
32
+ * chats when something is broken.
33
+ */
34
+ detail?: Record<string, unknown>;
35
+ }
36
+ /**
37
+ * Options for {@link registerCredentialHealthcheckTool} — the credential-side
38
+ * twin of `RegisterBridgeHealthcheckToolArgs` (in `../fetchproxy/`; not an
39
+ * `{@link}` because this module deliberately cannot import that one). The per-connector bits are
40
+ * `prefix`, `hostLabel`, the optional `probePath`, and the two functions that
41
+ * reach the outside world (`resolveCredential`, `probeFn`).
42
+ */
43
+ export interface RegisterCredentialHealthcheckToolArgs {
44
+ /**
45
+ * The `McpServer` to register the tool on — the same type
46
+ * `RegisterBridgeHealthcheckToolArgs` takes. NOT a structural
47
+ * `{ registerTool }` shape: `McpServer.registerTool` is generic over its
48
+ * schema arguments, so a loose signature with `config: unknown` is not
49
+ * assignable from the real method and every caller fails to typecheck.
50
+ */
51
+ server: McpServer;
52
+ /** Tool-name prefix; the tool is `${prefix}_healthcheck`. */
53
+ prefix: string;
54
+ /** Display host for the probe URL and hint copy, e.g. `'api.freshbooks.com'`. */
55
+ hostLabel: string;
56
+ /** Optional path, for display only: the probe URL is `https://<hostLabel><probePath>`. */
57
+ probePath?: string;
58
+ /**
59
+ * Resolve the credential the way the real tools do — same cache, same
60
+ * fallback order — so a passing healthcheck means real tools work. Throwing
61
+ * is treated as `no_credential` with the throw's message, because a resolver
62
+ * that cannot produce one has answered the question.
63
+ */
64
+ resolveCredential: () => Promise<CredentialState>;
65
+ /** One authenticated round-trip. Only called when a credential resolved. */
66
+ probeFn: () => Promise<unknown>;
67
+ /** Re-kind a thrown error and supply site-specific copy. */
68
+ classifyThrown?: (err: unknown) => {
69
+ kind: string;
70
+ hint?: string;
71
+ detail?: Record<string, unknown>;
72
+ } | undefined;
73
+ /** Per-arm copy overrides. */
74
+ hints?: Partial<Record<CredentialHealthcheckArm, string>>;
75
+ }
76
+ /**
77
+ * The JSON body `${prefix}_healthcheck` returns for a credential-style
78
+ * connector, mirroring `BridgeHealthcheckResult`'s envelope: `ok`, the
79
+ * per-subject block (here `credential` rather than `bridge`), the `probe`
80
+ * measurements, an optional typed `error`, and always a human-readable `hint`.
81
+ *
82
+ * `credential` never carries the credential itself — only the source label and
83
+ * whatever non-secret `detail` the resolver chose to report.
84
+ */
85
+ export interface CredentialHealthcheckResult {
86
+ ok: boolean;
87
+ credential: {
88
+ source: string | null;
89
+ resolved: boolean;
90
+ detail?: Record<string, unknown>;
91
+ };
92
+ probe: {
93
+ url?: string;
94
+ elapsed_ms: number;
95
+ status?: number;
96
+ };
97
+ error?: {
98
+ kind: string;
99
+ message: string;
100
+ detail?: Record<string, unknown>;
101
+ };
102
+ hint: string;
103
+ }
104
+ /**
105
+ * Register `${prefix}_healthcheck` for a connector whose health is about a
106
+ * CREDENTIAL rather than a browser bridge — OAuth connectors, API-key
107
+ * connectors, and the fetchproxy MCPs that only BOOTSTRAP a token and then
108
+ * talk to an API directly.
109
+ *
110
+ * It exists because those three failures are indistinguishable today and have
111
+ * different fixes: nothing minted a credential, something minted one the far
112
+ * side rejects, and the far side is simply down. The bridge helper
113
+ * (`registerBridgeHealthcheckTool`, in `../fetchproxy/`) answers the equivalent question for
114
+ * MCPs where every request rides the bridge.
115
+ *
116
+ * The probe is SKIPPED when no credential resolved — probing without one
117
+ * produces a 401 that reads like a rejected credential and points at the wrong
118
+ * fix.
119
+ */
120
+ export declare function registerCredentialHealthcheckTool(args: RegisterCredentialHealthcheckToolArgs): void;
121
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/healthcheck/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAChC,IAAI,GACJ,eAAe,GACf,qBAAqB,GACrB,SAAS,GACT,MAAM,GACN,WAAW,GACX,SAAS,CAAC;AAEd,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qCAAqC;IACpD;;;;;;OAMG;IACH,MAAM,EAAE,SAAS,CAAC;IAClB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAClD,4EAA4E;IAC5E,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,CACf,GAAG,EAAE,OAAO,KACT;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC;IACnF,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,CAAC;CAC3D;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3F,KAAK,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC5E,IAAI,EAAE,MAAM,CAAC;CACd;AAkCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,qCAAqC,GAC1C,IAAI,CAqHN"}
@@ -0,0 +1,150 @@
1
+ import { truncateErrorMessage, messageOf } from '../errors/index.js';
2
+ /** HTTP status off a thrown error, when the thrower attached one. */
3
+ function statusOf(err) {
4
+ if (typeof err !== 'object' || err === null)
5
+ return undefined;
6
+ const s = err.status ??
7
+ err.statusCode;
8
+ return typeof s === 'number' ? s : undefined;
9
+ }
10
+ function credentialHint(arm, prefix, hostLabel, source) {
11
+ switch (arm) {
12
+ case 'ok':
13
+ return `Credential from '${source}' works: ${hostLabel} accepted an authenticated request. If a real tool still fails, the problem is that tool, not auth.`;
14
+ case 'no_credential':
15
+ return `No credential resolved. Nothing was available to authenticate with — sign in and reconnect the connector so ${prefix} receives a token, or set the documented environment variable.`;
16
+ case 'credential_rejected':
17
+ return `${hostLabel} rejected the credential from '${source}'. It is present but no longer valid — most often expired or revoked upstream. Re-authenticate and reconnect; retrying will not fix it.`;
18
+ case 'timeout':
19
+ return `The credential from '${source}' resolved, but ${hostLabel} did not answer in time. Usually transient — retry. If it persists, ${hostLabel} is slow or unreachable from here.`;
20
+ case 'http':
21
+ return `${hostLabel} answered with an error status that is not an auth rejection. That is USUALLY a ${hostLabel}-side problem rather than an auth one — but a 404 here more often means the probe path is wrong than that ${hostLabel} is broken, so check error.message and probe.url before concluding anything about the credential.`;
22
+ case 'transport':
23
+ return `Could not reach ${hostLabel} at all. Check network egress; the credential itself was never judged.`;
24
+ default:
25
+ return `Unexpected failure — see error.message.`;
26
+ }
27
+ }
28
+ /**
29
+ * Register `${prefix}_healthcheck` for a connector whose health is about a
30
+ * CREDENTIAL rather than a browser bridge — OAuth connectors, API-key
31
+ * connectors, and the fetchproxy MCPs that only BOOTSTRAP a token and then
32
+ * talk to an API directly.
33
+ *
34
+ * It exists because those three failures are indistinguishable today and have
35
+ * different fixes: nothing minted a credential, something minted one the far
36
+ * side rejects, and the far side is simply down. The bridge helper
37
+ * (`registerBridgeHealthcheckTool`, in `../fetchproxy/`) answers the equivalent question for
38
+ * MCPs where every request rides the bridge.
39
+ *
40
+ * The probe is SKIPPED when no credential resolved — probing without one
41
+ * produces a 401 that reads like a rejected credential and points at the wrong
42
+ * fix.
43
+ */
44
+ export function registerCredentialHealthcheckTool(args) {
45
+ const { server, prefix, hostLabel, probePath, resolveCredential, probeFn, classifyThrown, hints } = args;
46
+ const probeUrl = probePath ? `https://${hostLabel}${probePath}` : undefined;
47
+ server.registerTool(`${prefix}_healthcheck`, {
48
+ title: 'Verify credentials and upstream reachability',
49
+ description: `Resolves the credential the way real tools do, then makes one authenticated request to ${hostLabel}. Reports which source supplied the credential, whether ${hostLabel} accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a ${hostLabel}-side problem'. Call this when a real tool fails and you want to know which hop broke. Read-only; never returns the credential itself.`,
50
+ annotations: {
51
+ title: 'Verify credentials and upstream reachability',
52
+ readOnlyHint: true,
53
+ idempotentHint: true,
54
+ openWorldHint: true,
55
+ },
56
+ inputSchema: {},
57
+ }, async () => {
58
+ // Timed from just BEFORE the probe, never from the top: resolving a
59
+ // credential can mint a token or drive the browser bridge, and folding
60
+ // that into `probe.elapsed_ms` reports it as far-side latency.
61
+ let probeStarted = 0;
62
+ let state;
63
+ try {
64
+ state = await resolveCredential();
65
+ }
66
+ catch (e) {
67
+ const result = {
68
+ ok: false,
69
+ credential: { source: null, resolved: false },
70
+ // No `url`: nothing was probed, and naming one implies it was tried.
71
+ probe: { elapsed_ms: 0 },
72
+ error: { kind: 'no_credential', message: truncateErrorMessage(messageOf(e)) },
73
+ hint: hints?.no_credential ?? credentialHint('no_credential', prefix, hostLabel, null),
74
+ };
75
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
76
+ }
77
+ const credential = {
78
+ source: state.source,
79
+ resolved: state.source !== null,
80
+ ...(state.detail !== undefined ? { detail: state.detail } : {}),
81
+ };
82
+ // No credential: answer without probing. A probe here 401s and reads as
83
+ // "rejected", which points at re-authenticating a credential that does
84
+ // not exist.
85
+ if (!credential.resolved) {
86
+ const result = {
87
+ ok: false,
88
+ credential,
89
+ probe: { elapsed_ms: 0 },
90
+ error: { kind: 'no_credential', message: 'no credential source resolved' },
91
+ hint: hints?.no_credential ?? credentialHint('no_credential', prefix, hostLabel, null),
92
+ };
93
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
94
+ }
95
+ let arm = 'ok';
96
+ let error;
97
+ let status;
98
+ let customHint;
99
+ probeStarted = Date.now();
100
+ try {
101
+ await probeFn();
102
+ }
103
+ catch (e) {
104
+ status = statusOf(e);
105
+ // `AbortError` is matched on `err.name`, as src/http/index.ts does — a
106
+ // bare AbortController abort carries it there and NOT in the message,
107
+ // so matching the text alone classified those as 'unknown'.
108
+ const aborted = e instanceof Error && e.name === 'AbortError';
109
+ arm =
110
+ status === 401 || status === 403
111
+ ? 'credential_rejected'
112
+ : status !== undefined
113
+ ? 'http'
114
+ : aborted || /timeout|timed out|ETIMEDOUT/i.test(messageOf(e))
115
+ ? 'timeout'
116
+ : /fetch failed|ENOTFOUND|ECONNREFUSED|ECONNRESET|network/i.test(messageOf(e))
117
+ ? 'transport'
118
+ : 'unknown';
119
+ let kind = arm;
120
+ let detail;
121
+ const custom = classifyThrown?.(e);
122
+ if (custom) {
123
+ kind = custom.kind;
124
+ customHint = custom.hint;
125
+ detail = custom.detail;
126
+ }
127
+ error = {
128
+ kind,
129
+ // Redacted AND bounded before it reaches the result: an upstream
130
+ // failure routinely quotes what it was sent, and a healthcheck is
131
+ // the tool people paste into a chat when something is broken.
132
+ message: truncateErrorMessage(messageOf(e)),
133
+ ...(detail !== undefined ? { detail } : {}),
134
+ };
135
+ }
136
+ const result = {
137
+ ok: error === undefined,
138
+ credential,
139
+ probe: {
140
+ ...(probeUrl ? { url: probeUrl } : {}),
141
+ elapsed_ms: Date.now() - probeStarted,
142
+ ...(status !== undefined ? { status } : {}),
143
+ },
144
+ ...(error ? { error } : {}),
145
+ hint: customHint ?? hints?.[arm] ?? credentialHint(arm, prefix, hostLabel, state.source),
146
+ };
147
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
148
+ });
149
+ }
150
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/healthcheck/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chrischall/mcp-utils",
3
- "version": "0.19.0",
3
+ "version": "0.19.2",
4
4
  "description": "Shared scaffolding for the chrischall MCP fleet — server bootstrap, tool-result formatting, helpful errors, hardened env/config, a bearer API-client kit, zod atoms, session registries, a fetchproxy transport adapter, auth resolver skeletons, an in-memory test harness, and opt-in HTML helpers. The generic MCP glue hoisted out of ~19 sibling servers.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -35,6 +35,10 @@
35
35
  "./html": {
36
36
  "import": "./dist/html/index.js",
37
37
  "types": "./dist/html/index.d.ts"
38
+ },
39
+ "./healthcheck": {
40
+ "import": "./dist/healthcheck/index.js",
41
+ "types": "./dist/healthcheck/index.d.ts"
38
42
  }
39
43
  },
40
44
  "files": [