lazy-mcp 2.6.0 → 2.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -34,16 +34,14 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  };
35
35
  })();
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
- const os = __importStar(require("os"));
38
37
  const fs = __importStar(require("fs"));
39
- const path = __importStar(require("path"));
40
38
  const server_1 = require("./server");
41
39
  const config_1 = require("./config");
42
40
  const server_manager_1 = require("./server-manager");
43
41
  const version_1 = require("./version");
44
42
  const oauth_manager_1 = require("./oauth-manager");
45
43
  const logger_1 = require("./logger");
46
- const DEFAULT_CONFIG_PATH = path.join(os.homedir(), '.config', 'lazy-mcp', 'servers.json');
44
+ const paths_1 = require("./paths");
47
45
  /**
48
46
  * Known CLI flags and their value types.
49
47
  * Flags not in this set are rejected as unexpected positional args.
@@ -234,11 +232,12 @@ async function main() {
234
232
  process.exit(0);
235
233
  }
236
234
  const { flags, unexpected } = parseArgs(args);
235
+ const defaultConfigPath = (0, paths_1.getDefaultConfigPath)();
237
236
  if (unexpected.length > 0) {
238
237
  console.error(`Error: Unexpected arguments: ${unexpected.join(' ')}`);
239
238
  console.error('');
240
239
  console.error('Single-server mode has been removed. Use a config file instead:');
241
- console.error(` 1. Create ${DEFAULT_CONFIG_PATH} with your server(s)`);
240
+ console.error(` 1. Create ${defaultConfigPath} with your server(s)`);
242
241
  console.error(' 2. Run: lazy-mcp');
243
242
  console.error('');
244
243
  console.error('See https://gitlab.com/gitlab-org/ai/lazy-mcp#usage');
@@ -270,15 +269,15 @@ async function main() {
270
269
  else if (process.env.LAZY_MCP_CONFIG) {
271
270
  configPath = process.env.LAZY_MCP_CONFIG;
272
271
  }
273
- else if (fs.existsSync(DEFAULT_CONFIG_PATH)) {
274
- configPath = DEFAULT_CONFIG_PATH;
272
+ else if (fs.existsSync(defaultConfigPath)) {
273
+ configPath = defaultConfigPath;
275
274
  }
276
275
  if (!configPath) {
277
276
  console.error('Error: No config file found.');
278
- console.error(`Default location: ${DEFAULT_CONFIG_PATH}`);
277
+ console.error(`Default location: ${defaultConfigPath}`);
279
278
  console.error('');
280
279
  console.error('Options:');
281
- console.error(` 1. Create ${DEFAULT_CONFIG_PATH}`);
280
+ console.error(` 1. Create ${defaultConfigPath}`);
282
281
  console.error(' 2. lazy-mcp --config <path-to-config>');
283
282
  console.error(' 3. LAZY_MCP_CONFIG=<path> lazy-mcp');
284
283
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -69,7 +69,7 @@ class MultiServerProxyImpl {
69
69
  message: decision.message,
70
70
  });
71
71
  throw new types_1.MCPException(types_1.MCPErrorCode.POLICY_BLOCKED, `Tool '${server}:${commandName}' is blocked by lazy-mcp policy`, server, decision.message ?? 'No additional details.', `To allow this, remove the matching deny rule from your lazy-mcp config ` +
72
- `(~/.config/lazy-mcp/servers.json) and reload with: kill -HUP ${process.pid}`);
72
+ `(${this.serverManager.getConfigFile()}) and reload with: kill -HUP ${process.pid}`);
73
73
  }
74
74
  // decision.action === 'allow' — original path.
75
75
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"multi-proxy.js","sourceRoot":"","sources":["../src/multi-proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multi-proxy.js","sourceRoot":"","sources":["../src/multi-proxy.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,16 @@ import { OAuthClientProvider } from '@modelcontextprotocol/sdk/client/auth.js';
3
3
  import { OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
4
4
  import { OAuthConfig } from './types';
5
5
  declare const DEFAULT_CALLBACK_ADDRESS = "127.0.0.1:0";
6
+ /**
7
+ * Computes a stable storage key from the server identity (name + URL).
8
+ *
9
+ * Used to key OAuth tokens, client info, and code verifiers so that two MCP
10
+ * servers configured with the same name but different URLs don't collide.
11
+ * The key is the first 32 hex characters of sha256(name + '\0' + url) —
12
+ * short enough to keep storage files readable, long enough (128 bits) to
13
+ * make birthday-bound collisions astronomically unlikely.
14
+ */
15
+ export declare function computeStorageKey(serverName: string, serverUrl: string): string;
6
16
  /**
7
17
  * Implements OAuthClientProvider from the MCP SDK.
8
18
  *
@@ -15,15 +25,31 @@ declare const DEFAULT_CALLBACK_ADDRESS = "127.0.0.1:0";
15
25
  * SDK's `auth()` / lower-level functions. OAuth server endpoints are discovered
16
26
  * automatically via RFC 8414 (/.well-known/oauth-authorization-server).
17
27
  *
18
- * Storage layout in ~/.config/lazy-mcp/:
19
- * tokens.json — { [serverName]: OAuthTokens }
20
- * client-info.json — { [serverName]: OAuthClientInformationFull }
21
- * (code verifiers are kept in-memory only; they live for one callback round-trip)
28
+ * Storage layout in $XDG_CONFIG_HOME/lazy-mcp/ (defaults to ~/.config/lazy-mcp/):
29
+ * tokens.json — { [storageKey]: OAuthTokens }
30
+ * client-info.json — { [storageKey]: OAuthClientInformationFull }
31
+ * code-verifier.json — { [storageKey]: string } (PKCE verifier for the
32
+ * current in-flight flow; cleared after callback)
33
+ *
34
+ * The `storageKey` is a stable hash of `serverName + serverUrl` so that two
35
+ * MCP servers configured with the same name but different URLs (e.g. two
36
+ * projects each defining a `"gitlab"` server pointing at different instances)
37
+ * get distinct token slots and don't clobber each other.
38
+ *
39
+ * For backward compatibility with installations that stored credentials under
40
+ * the plain server name, reads fall back to the legacy key and migrate the
41
+ * entry to the hashed key on the next write.
22
42
  */
23
43
  export declare class OAuthManager implements OAuthClientProvider {
24
44
  private readonly serverName;
25
45
  private readonly serverUrl;
26
46
  private readonly config;
47
+ /**
48
+ * Hashed key used in storage files. Derived from `serverName + serverUrl`
49
+ * so that servers sharing a name but pointing at different URLs get
50
+ * distinct token slots.
51
+ */
52
+ private readonly storageKey;
27
53
  /** In-memory cache of the PKCE code verifier for the current in-flight flow. */
28
54
  private _codeVerifier;
29
55
  /** The authorization URL captured inside redirectToAuthorization(). */
@@ -42,6 +68,20 @@ export declare class OAuthManager implements OAuthClientProvider {
42
68
  */
43
69
  private _startingFlow;
44
70
  constructor(serverName: string, serverUrl: string, config: OAuthConfig);
71
+ /**
72
+ * Reads an entry from a keyed JSON store. Prefers the hashed `storageKey`.
73
+ * Falls back to the legacy plain-name key for backward compatibility with
74
+ * tokens written before the hashed-key migration. Callers that subsequently
75
+ * write the entry use the hashed key, so the next save effectively migrates
76
+ * the entry without the user having to re-authenticate.
77
+ */
78
+ private readKeyed;
79
+ /**
80
+ * Deletes an entry from a keyed JSON store. Removes both the hashed key and
81
+ * the legacy plain-name key so stale legacy entries don't linger after an
82
+ * invalidation.
83
+ */
84
+ private deleteKeyed;
45
85
  /** Parsed host and port from callbackAddress (or legacy callbackPort fallback). */
46
86
  private get callbackAddressParts();
47
87
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-manager.d.ts","sourceRoot":"","sources":["../src/oauth-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-manager.d.ts","sourceRoot":"","sources":["../src/oauth-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,EAEL,mBAAmB,EACpB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,WAAW,EACZ,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAA8B,WAAW,EAAE,MAAM,SAAS,CAAC;AAUlE,QAAA,MAAM,wBAAwB,gBAAgB,CAAC;AAyO/C;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAM/E;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,YAAa,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,gFAAgF;IAChF,OAAO,CAAC,aAAa,CAAc;IAEnC,uEAAuE;IACvE,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,aAAa,CAAuB;IAE5C,6EAA6E;IAC7E,OAAO,CAAC,mBAAmB,CAA6B;IAExD,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAGR;IAER;;;;;;OAMG;IACH,OAAO,CAAC,aAAa,CAAgC;gBAEzC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAOtE;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAOjB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAOnB,mFAAmF;IACnF,OAAO,KAAK,oBAAoB,GAW/B;IAED;;;OAGG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAOrD;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAiB1D;;;;;;;;;;;;;OAaG;IACH,SAAS,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE;IA2DvE;;;;;;;OAOG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,CAAC;IA0D3F,mEAAmE;IACnE,UAAU,IAAI,IAAI;IAQlB,yEAAyE;IACzE,YAAY,IAAI,IAAI;IAQpB,IAAI,WAAW,IAAI,MAAM,CAaxB;IAED,IAAI,cAAc,IAAI,mBAAmB,CASxC;IAED,iBAAiB,IAAI,0BAA0B,GAAG,SAAS;IAc3D,qBAAqB,CAAC,IAAI,EAAE,0BAA0B,GAAG,IAAI;IAS7D,MAAM,IAAI,WAAW,GAAG,SAAS;IAIjC,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IASrC;;;;OAIG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI;IAkDpD,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAa5C,YAAY,IAAI,MAAM;IAStB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI;IAmB5E,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;YAKL,YAAY;YAIZ,sBAAsB;IA8D9B,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3G,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,oBAAoB;CAS7B;AAuBD,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -34,15 +34,17 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.DEFAULT_CALLBACK_ADDRESS = exports.OAuthManager = void 0;
37
+ exports.computeStorageKey = computeStorageKey;
37
38
  exports.releaseCallbackLock = releaseCallbackLock;
39
+ const crypto = __importStar(require("crypto"));
38
40
  const fs = __importStar(require("fs"));
39
41
  const http = __importStar(require("http"));
40
- const os = __importStar(require("os"));
41
42
  const path = __importStar(require("path"));
42
43
  const url = __importStar(require("url"));
43
44
  const auth_js_1 = require("@modelcontextprotocol/sdk/client/auth.js");
44
45
  const types_1 = require("./types");
45
46
  const pid_lock_1 = require("./pid-lock");
47
+ const paths_1 = require("./paths");
46
48
  // ─── Constants ────────────────────────────────────────────────────────────────
47
49
  // Port 0 tells the OS to pick an ephemeral port. This prevents port conflicts
48
50
  // between multiple lazy-mcp instances (e.g. from previous crashed sessions).
@@ -50,11 +52,13 @@ const pid_lock_1 = require("./pid-lock");
50
52
  // that read it — the host is still 127.0.0.1 but the port is now 0.
51
53
  const DEFAULT_CALLBACK_ADDRESS = '127.0.0.1:0';
52
54
  exports.DEFAULT_CALLBACK_ADDRESS = DEFAULT_CALLBACK_ADDRESS;
53
- const CONFIG_DIR = path.join(os.homedir(), '.config', 'lazy-mcp');
54
- const TOKENS_FILE = path.join(CONFIG_DIR, 'tokens.json');
55
- const CLIENT_INFO_FILE = path.join(CONFIG_DIR, 'client-info.json');
56
- const CODE_VERIFIER_FILE = path.join(CONFIG_DIR, 'code-verifier.json');
57
- const PENDING_FLOW_FILE = path.join(CONFIG_DIR, 'pending-oauth-flows.json');
55
+ // Storage paths are resolved lazily so that `XDG_CONFIG_HOME` (and the home
56
+ // directory) can be overridden at runtime — useful for tests and for users
57
+ // who want per-project token isolation via direnv/mise.
58
+ const tokensFile = () => path.join((0, paths_1.getConfigDir)(), 'tokens.json');
59
+ const clientInfoFile = () => path.join((0, paths_1.getConfigDir)(), 'client-info.json');
60
+ const codeVerifierFile = () => path.join((0, paths_1.getConfigDir)(), 'code-verifier.json');
61
+ const pendingFlowFile = () => path.join((0, paths_1.getConfigDir)(), 'pending-oauth-flows.json');
58
62
  class OAuthCallbackServer {
59
63
  constructor() {
60
64
  this.server = null;
@@ -152,7 +156,7 @@ class OAuthCallbackServer {
152
156
  const state = query.state ?? '';
153
157
  const handler = this.handlers.get(state);
154
158
  if (!handler) {
155
- const pendingFlows = readJsonFile(PENDING_FLOW_FILE) ?? {};
159
+ const pendingFlows = readJsonFile(pendingFlowFile()) ?? {};
156
160
  const pendingFlow = pendingFlows[state];
157
161
  if (!pendingFlow) {
158
162
  res.writeHead(400, { 'Content-Type': 'text/html' });
@@ -244,6 +248,23 @@ function writeJsonFile(filePath, data) {
244
248
  }
245
249
  fs.writeFileSync(filePath, JSON.stringify(data, null, 2), { mode: 0o600 });
246
250
  }
251
+ // ─── Storage key helper ───────────────────────────────────────────────────────
252
+ /**
253
+ * Computes a stable storage key from the server identity (name + URL).
254
+ *
255
+ * Used to key OAuth tokens, client info, and code verifiers so that two MCP
256
+ * servers configured with the same name but different URLs don't collide.
257
+ * The key is the first 32 hex characters of sha256(name + '\0' + url) —
258
+ * short enough to keep storage files readable, long enough (128 bits) to
259
+ * make birthday-bound collisions astronomically unlikely.
260
+ */
261
+ function computeStorageKey(serverName, serverUrl) {
262
+ return crypto
263
+ .createHash('sha256')
264
+ .update(`${serverName}\0${serverUrl}`)
265
+ .digest('hex')
266
+ .slice(0, 32);
267
+ }
247
268
  // ─── OAuthManager ─────────────────────────────────────────────────────────────
248
269
  /**
249
270
  * Implements OAuthClientProvider from the MCP SDK.
@@ -257,10 +278,20 @@ function writeJsonFile(filePath, data) {
257
278
  * SDK's `auth()` / lower-level functions. OAuth server endpoints are discovered
258
279
  * automatically via RFC 8414 (/.well-known/oauth-authorization-server).
259
280
  *
260
- * Storage layout in ~/.config/lazy-mcp/:
261
- * tokens.json — { [serverName]: OAuthTokens }
262
- * client-info.json — { [serverName]: OAuthClientInformationFull }
263
- * (code verifiers are kept in-memory only; they live for one callback round-trip)
281
+ * Storage layout in $XDG_CONFIG_HOME/lazy-mcp/ (defaults to ~/.config/lazy-mcp/):
282
+ * tokens.json — { [storageKey]: OAuthTokens }
283
+ * client-info.json — { [storageKey]: OAuthClientInformationFull }
284
+ * code-verifier.json — { [storageKey]: string } (PKCE verifier for the
285
+ * current in-flight flow; cleared after callback)
286
+ *
287
+ * The `storageKey` is a stable hash of `serverName + serverUrl` so that two
288
+ * MCP servers configured with the same name but different URLs (e.g. two
289
+ * projects each defining a `"gitlab"` server pointing at different instances)
290
+ * get distinct token slots and don't clobber each other.
291
+ *
292
+ * For backward compatibility with installations that stored credentials under
293
+ * the plain server name, reads fall back to the legacy key and migrate the
294
+ * entry to the hashed key on the next write.
264
295
  */
265
296
  class OAuthManager {
266
297
  constructor(serverName, serverUrl, config) {
@@ -284,6 +315,29 @@ class OAuthManager {
284
315
  this.serverName = serverName;
285
316
  this.serverUrl = serverUrl;
286
317
  this.config = config;
318
+ this.storageKey = computeStorageKey(serverName, serverUrl);
319
+ }
320
+ /**
321
+ * Reads an entry from a keyed JSON store. Prefers the hashed `storageKey`.
322
+ * Falls back to the legacy plain-name key for backward compatibility with
323
+ * tokens written before the hashed-key migration. Callers that subsequently
324
+ * write the entry use the hashed key, so the next save effectively migrates
325
+ * the entry without the user having to re-authenticate.
326
+ */
327
+ readKeyed(store) {
328
+ if (store[this.storageKey] !== undefined) {
329
+ return store[this.storageKey];
330
+ }
331
+ return store[this.serverName];
332
+ }
333
+ /**
334
+ * Deletes an entry from a keyed JSON store. Removes both the hashed key and
335
+ * the legacy plain-name key so stale legacy entries don't linger after an
336
+ * invalidation.
337
+ */
338
+ deleteKeyed(store) {
339
+ delete store[this.storageKey];
340
+ delete store[this.serverName];
287
341
  }
288
342
  // ─── Public API ─────────────────────────────────────────────────────────────
289
343
  /** Parsed host and port from callbackAddress (or legacy callbackPort fallback). */
@@ -353,6 +407,7 @@ class OAuthManager {
353
407
  const done = new Promise((resolve, reject) => {
354
408
  this._waiters.push({ resolve, reject });
355
409
  });
410
+ done.catch(() => undefined);
356
411
  return { authUrl: this._pendingAuthUrl.toString(), done };
357
412
  }
358
413
  // Registration with the callback server happens inside redirectToAuthorization(),
@@ -360,6 +415,7 @@ class OAuthManager {
360
415
  const done = new Promise((resolve, reject) => {
361
416
  this._waiters.push({ resolve, reject });
362
417
  });
418
+ done.catch(() => undefined);
363
419
  // Run the SDK auth flow asynchronously — it will call redirectToAuthorization()
364
420
  // which registers the callback handler, sets _pendingAuthUrl, and throws AUTH_REQUIRED.
365
421
  this._runAuthFlow().catch((err) => {
@@ -432,6 +488,7 @@ class OAuthManager {
432
488
  const done = new Promise((resolve, reject) => {
433
489
  this._waiters.push({ resolve, reject });
434
490
  });
491
+ done.catch(() => undefined);
435
492
  // If a flow is already starting or running, reuse it
436
493
  if (this._startingFlow) {
437
494
  const authUrl = await this._startingFlow;
@@ -463,15 +520,16 @@ class OAuthManager {
463
520
  /** Cancel any in-flight flow and shut down the callback server. */
464
521
  cancelFlow() {
465
522
  this._startingFlow = null;
523
+ this.invalidateCredentials('verifier');
466
524
  this._rejectAll(new Error('OAuth flow cancelled'));
467
525
  this._closeCallbackServer();
468
526
  this._pendingAuthUrl = null;
469
527
  }
470
528
  /** Delete stored tokens for this server (e.g. after a confirmed 401). */
471
529
  deleteTokens() {
472
- const store = readJsonFile(TOKENS_FILE) ?? {};
473
- delete store[this.serverName];
474
- writeJsonFile(TOKENS_FILE, store);
530
+ const store = readJsonFile(tokensFile()) ?? {};
531
+ this.deleteKeyed(store);
532
+ writeJsonFile(tokensFile(), store);
475
533
  }
476
534
  // ─── OAuthClientProvider implementation ─────────────────────────────────────
477
535
  get redirectUrl() {
@@ -499,8 +557,8 @@ class OAuthManager {
499
557
  };
500
558
  }
501
559
  clientInformation() {
502
- const store = readJsonFile(CLIENT_INFO_FILE) ?? {};
503
- const info = store[this.serverName];
560
+ const store = readJsonFile(clientInfoFile()) ?? {};
561
+ const info = this.readKeyed(store);
504
562
  // If a clientId is explicitly configured, always use that (skip dynamic registration)
505
563
  if (!info && this.config.clientId) {
506
564
  return {
@@ -512,17 +570,23 @@ class OAuthManager {
512
570
  return info;
513
571
  }
514
572
  saveClientInformation(info) {
515
- const store = readJsonFile(CLIENT_INFO_FILE) ?? {};
516
- store[this.serverName] = info;
517
- writeJsonFile(CLIENT_INFO_FILE, store);
573
+ const store = readJsonFile(clientInfoFile()) ?? {};
574
+ // Migrate any legacy plain-name entry by removing it before writing the
575
+ // hashed key. This keeps the file clean and avoids two parallel entries.
576
+ delete store[this.serverName];
577
+ store[this.storageKey] = info;
578
+ writeJsonFile(clientInfoFile(), store);
518
579
  }
519
580
  tokens() {
520
581
  return this.loadTokens() ?? undefined;
521
582
  }
522
583
  saveTokens(tokens) {
523
- const store = readJsonFile(TOKENS_FILE) ?? {};
524
- store[this.serverName] = tokens;
525
- writeJsonFile(TOKENS_FILE, store);
584
+ const store = readJsonFile(tokensFile()) ?? {};
585
+ // Migrate any legacy plain-name entry by removing it before writing the
586
+ // hashed key. This keeps the file clean and avoids two parallel entries.
587
+ delete store[this.serverName];
588
+ store[this.storageKey] = tokens;
589
+ writeJsonFile(tokensFile(), store);
526
590
  }
527
591
  /**
528
592
  * Called by the SDK instead of opening a browser.
@@ -530,18 +594,31 @@ class OAuthManager {
530
594
  * the URL for dispatch), captures the URL, and throws AUTH_REQUIRED.
531
595
  */
532
596
  redirectToAuthorization(authorizationUrl) {
597
+ // Some authorization servers (e.g. incident.io) require the `state`
598
+ // parameter and reject the request with a 422 if it's missing. The MCP SDK
599
+ // only includes `state` when it's explicitly provided, so inject a random
600
+ // one here when absent. Using a real value (instead of the previous empty
601
+ // string) also makes the callback dispatch keyed correctly per-flow.
602
+ //
603
+ // CSRF protection: this 128-bit random `state` doubles as the callback
604
+ // dispatch key (see `handlers.get(query.state)` below). A forged or unknown
605
+ // `state` on the callback matches no pending handler and is rejected, so
606
+ // dispatch-by-random-state *is* the CSRF guarantee for this flow.
607
+ if (!authorizationUrl.searchParams.get('state')) {
608
+ authorizationUrl.searchParams.set('state', crypto.randomBytes(16).toString('hex'));
609
+ }
533
610
  this._pendingAuthUrl = authorizationUrl;
534
611
  // Register this manager's handler with the singleton callback server,
535
612
  // keyed by the state param so callbacks are dispatched correctly.
536
613
  const state = authorizationUrl.searchParams.get('state') ?? '';
537
614
  this._pendingState = state;
538
- const pendingFlows = readJsonFile(PENDING_FLOW_FILE) ?? {};
615
+ const pendingFlows = readJsonFile(pendingFlowFile()) ?? {};
539
616
  pendingFlows[state] = {
540
617
  serverName: this.serverName,
541
618
  serverUrl: this.serverUrl,
542
619
  state,
543
620
  };
544
- writeJsonFile(PENDING_FLOW_FILE, pendingFlows);
621
+ writeJsonFile(pendingFlowFile(), pendingFlows);
545
622
  const { host, port } = this.callbackAddressParts;
546
623
  globalCallbackServer.setAddress(host, port);
547
624
  this._unregisterCallback = globalCallbackServer.register(state, {
@@ -560,38 +637,39 @@ class OAuthManager {
560
637
  // verifier with a new one, causing a PKCE mismatch at the token endpoint.
561
638
  if (!this._codeVerifier) {
562
639
  this._codeVerifier = codeVerifier;
563
- const store = readJsonFile(CODE_VERIFIER_FILE) ?? {};
564
- store[this.serverName] = codeVerifier;
565
- writeJsonFile(CODE_VERIFIER_FILE, store);
640
+ const store = readJsonFile(codeVerifierFile()) ?? {};
641
+ delete store[this.serverName];
642
+ store[this.storageKey] = codeVerifier;
643
+ writeJsonFile(codeVerifierFile(), store);
566
644
  }
567
645
  }
568
646
  codeVerifier() {
569
647
  if (this._codeVerifier) {
570
648
  return this._codeVerifier;
571
649
  }
572
- const store = readJsonFile(CODE_VERIFIER_FILE) ?? {};
573
- return store[this.serverName] ?? '';
650
+ const store = readJsonFile(codeVerifierFile()) ?? {};
651
+ return this.readKeyed(store) ?? '';
574
652
  }
575
653
  invalidateCredentials(scope) {
576
654
  if (scope === 'all' || scope === 'tokens') {
577
655
  this.deleteTokens();
578
656
  }
579
657
  if (scope === 'all' || scope === 'client') {
580
- const store = readJsonFile(CLIENT_INFO_FILE) ?? {};
581
- delete store[this.serverName];
582
- writeJsonFile(CLIENT_INFO_FILE, store);
658
+ const store = readJsonFile(clientInfoFile()) ?? {};
659
+ this.deleteKeyed(store);
660
+ writeJsonFile(clientInfoFile(), store);
583
661
  }
584
662
  if (scope === 'all' || scope === 'verifier') {
585
663
  this._codeVerifier = '';
586
- const store = readJsonFile(CODE_VERIFIER_FILE) ?? {};
587
- delete store[this.serverName];
588
- writeJsonFile(CODE_VERIFIER_FILE, store);
664
+ const store = readJsonFile(codeVerifierFile()) ?? {};
665
+ this.deleteKeyed(store);
666
+ writeJsonFile(codeVerifierFile(), store);
589
667
  }
590
668
  }
591
669
  // ─── Private helpers ────────────────────────────────────────────────────────
592
670
  loadTokens() {
593
- const store = readJsonFile(TOKENS_FILE) ?? {};
594
- return store[this.serverName] ?? null;
671
+ const store = readJsonFile(tokensFile()) ?? {};
672
+ return this.readKeyed(store) ?? null;
595
673
  }
596
674
  isExpired(tokens) {
597
675
  if (!tokens.expires_in)
@@ -625,14 +703,18 @@ class OAuthManager {
625
703
  const msg = `OAuth error: ${error}${error_description ? ` — ${error_description}` : ''}`;
626
704
  res.writeHead(400, { 'Content-Type': 'text/html' });
627
705
  res.end(htmlPage('Authorization Failed', `<p>${msg}</p>`));
706
+ this.invalidateCredentials('verifier');
628
707
  this._closeCallbackServer();
708
+ this._pendingAuthUrl = null;
629
709
  this._rejectAll(new Error(msg));
630
710
  return;
631
711
  }
632
712
  if (!code) {
633
713
  res.writeHead(400, { 'Content-Type': 'text/html' });
634
714
  res.end(htmlPage('Authorization Failed', '<p>No authorization code received.</p>'));
715
+ this.invalidateCredentials('verifier');
635
716
  this._closeCallbackServer();
717
+ this._pendingAuthUrl = null;
636
718
  this._rejectAll(new Error('No authorization code in callback'));
637
719
  return;
638
720
  }
@@ -659,7 +741,9 @@ class OAuthManager {
659
741
  else {
660
742
  res.writeHead(400, { 'Content-Type': 'text/html' });
661
743
  res.end(htmlPage('Authorization Failed', '<p>Unexpected auth result. Please retry.</p>'));
744
+ this.invalidateCredentials('verifier');
662
745
  this._closeCallbackServer();
746
+ this._pendingAuthUrl = null;
663
747
  this._rejectAll(new Error('Unexpected auth result after code exchange'));
664
748
  }
665
749
  }
@@ -667,7 +751,9 @@ class OAuthManager {
667
751
  const msg = err instanceof Error ? err.message : String(err);
668
752
  res.writeHead(500, { 'Content-Type': 'text/html' });
669
753
  res.end(htmlPage('Token Exchange Failed', `<p>${msg}</p>`));
754
+ this.invalidateCredentials('verifier');
670
755
  this._closeCallbackServer();
756
+ this._pendingAuthUrl = null;
671
757
  this._rejectAll(err instanceof Error ? err : new Error(msg));
672
758
  }
673
759
  }
@@ -677,9 +763,9 @@ class OAuthManager {
677
763
  deletePendingFlow(state) {
678
764
  if (!state)
679
765
  return;
680
- const pendingFlows = readJsonFile(PENDING_FLOW_FILE) ?? {};
766
+ const pendingFlows = readJsonFile(pendingFlowFile()) ?? {};
681
767
  delete pendingFlows[state];
682
- writeJsonFile(PENDING_FLOW_FILE, pendingFlows);
768
+ writeJsonFile(pendingFlowFile(), pendingFlows);
683
769
  }
684
770
  _closeCallbackServer() {
685
771
  this._startingFlow = null;