@samanhappy/mcphub 1.0.37 → 1.0.38

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.
Files changed (73) hide show
  1. package/dist/constants/oauthServerDefaults.js +1 -0
  2. package/dist/constants/oauthServerDefaults.js.map +1 -1
  3. package/dist/controllers/oauthDynamicRegistrationController.js +6 -32
  4. package/dist/controllers/oauthDynamicRegistrationController.js.map +1 -1
  5. package/dist/controllers/serverController.js +28 -3
  6. package/dist/controllers/serverController.js.map +1 -1
  7. package/dist/dao/OAuthClientDaoDbImpl.js +3 -0
  8. package/dist/dao/OAuthClientDaoDbImpl.js.map +1 -1
  9. package/dist/db/entities/OAuthClient.js +4 -0
  10. package/dist/db/entities/OAuthClient.js.map +1 -1
  11. package/dist/models/OAuth.js +98 -1
  12. package/dist/models/OAuth.js.map +1 -1
  13. package/dist/services/mcpService.js +128 -5
  14. package/dist/services/mcpService.js.map +1 -1
  15. package/dist/utils/cacheUtils.js +133 -5
  16. package/dist/utils/cacheUtils.js.map +1 -1
  17. package/dist/utils/migration.js +1 -0
  18. package/dist/utils/migration.js.map +1 -1
  19. package/dist/utils/smartRouting.js +1 -1
  20. package/dist/utils/smartRouting.js.map +1 -1
  21. package/frontend/dist/assets/{ActivityPage-Bx5-Jrxq.js → ActivityPage-BZNq-eGE.js} +2 -2
  22. package/frontend/dist/assets/{ActivityPage-Bx5-Jrxq.js.map → ActivityPage-BZNq-eGE.js.map} +1 -1
  23. package/frontend/dist/assets/{CredentialsPage-BGbk_kBx.js → CredentialsPage-7kyDJLsX.js} +2 -2
  24. package/frontend/dist/assets/{CredentialsPage-BGbk_kBx.js.map → CredentialsPage-7kyDJLsX.js.map} +1 -1
  25. package/frontend/dist/assets/{Dashboard-gHeXLPEn.js → Dashboard-CElNx820.js} +2 -2
  26. package/frontend/dist/assets/{Dashboard-gHeXLPEn.js.map → Dashboard-CElNx820.js.map} +1 -1
  27. package/frontend/dist/assets/{EndpointCopy-BRwX7Dpv.js → EndpointCopy-8jW5Xtka.js} +2 -2
  28. package/frontend/dist/assets/{EndpointCopy-BRwX7Dpv.js.map → EndpointCopy-8jW5Xtka.js.map} +1 -1
  29. package/frontend/dist/assets/GroupsPage-dUkvX_iB.js +33 -0
  30. package/frontend/dist/assets/GroupsPage-dUkvX_iB.js.map +1 -0
  31. package/frontend/dist/assets/{LoginPage-C7-m2jmB.js → LoginPage-D23s7oM0.js} +2 -2
  32. package/frontend/dist/assets/{LoginPage-C7-m2jmB.js.map → LoginPage-D23s7oM0.js.map} +1 -1
  33. package/frontend/dist/assets/{LogsPage-B00XTokA.js → LogsPage-BuQMkmV-.js} +2 -2
  34. package/frontend/dist/assets/{LogsPage-B00XTokA.js.map → LogsPage-BuQMkmV-.js.map} +1 -1
  35. package/frontend/dist/assets/{MarketPage-CVJMdSDD.js → MarketPage-g9vEYzIq.js} +2 -2
  36. package/frontend/dist/assets/{MarketPage-CVJMdSDD.js.map → MarketPage-g9vEYzIq.js.map} +1 -1
  37. package/frontend/dist/assets/{OAuthConsentPage-znW3HtpR.js → OAuthConsentPage-BiX1lpJR.js} +2 -2
  38. package/frontend/dist/assets/{OAuthConsentPage-znW3HtpR.js.map → OAuthConsentPage-BiX1lpJR.js.map} +1 -1
  39. package/frontend/dist/assets/{PromptsPage-DGcNS3fO.js → PromptsPage-g8SRFY6s.js} +2 -2
  40. package/frontend/dist/assets/{PromptsPage-DGcNS3fO.js.map → PromptsPage-g8SRFY6s.js.map} +1 -1
  41. package/frontend/dist/assets/{ResourcesPage-CfyZoadu.js → ResourcesPage-Ddhxi9Sf.js} +2 -2
  42. package/frontend/dist/assets/{ResourcesPage-CfyZoadu.js.map → ResourcesPage-Ddhxi9Sf.js.map} +1 -1
  43. package/frontend/dist/assets/{ServersPage-BlC0RdIu.js → ServersPage-DAmKvrPV.js} +8 -8
  44. package/frontend/dist/assets/ServersPage-DAmKvrPV.js.map +1 -0
  45. package/frontend/dist/assets/SettingsPage-DZXjQZXS.js +12 -0
  46. package/frontend/dist/assets/SettingsPage-DZXjQZXS.js.map +1 -0
  47. package/frontend/dist/assets/{StatusDot-DYO56shE.js → StatusDot-CdzMqjTi.js} +2 -2
  48. package/frontend/dist/assets/{StatusDot-DYO56shE.js.map → StatusDot-CdzMqjTi.js.map} +1 -1
  49. package/frontend/dist/assets/{ToggleGroup-r8yGt_Fq.js → ToggleGroup-CJd8X_31.js} +2 -2
  50. package/frontend/dist/assets/{ToggleGroup-r8yGt_Fq.js.map → ToggleGroup-CJd8X_31.js.map} +1 -1
  51. package/frontend/dist/assets/{UsersPage-B3muXE90.js → UsersPage-CkP_x9Rt.js} +2 -2
  52. package/frontend/dist/assets/{UsersPage-B3muXE90.js.map → UsersPage-CkP_x9Rt.js.map} +1 -1
  53. package/frontend/dist/assets/index-Bu4XuAH4.js +3 -0
  54. package/frontend/dist/assets/index-Bu4XuAH4.js.map +1 -0
  55. package/frontend/dist/assets/{resourceService-CSXOSi7M.js → resourceService-w-cZ31FD.js} +2 -2
  56. package/frontend/dist/assets/{resourceService-CSXOSi7M.js.map → resourceService-w-cZ31FD.js.map} +1 -1
  57. package/frontend/dist/assets/{useCostData-BOxUFQAH.js → useCostData-C72NC0PQ.js} +2 -2
  58. package/frontend/dist/assets/{useCostData-BOxUFQAH.js.map → useCostData-C72NC0PQ.js.map} +1 -1
  59. package/frontend/dist/assets/useSettingsData-JTEMu74D.js +2 -0
  60. package/frontend/dist/assets/{useSettingsData-DmpLlRI6.js.map → useSettingsData-JTEMu74D.js.map} +1 -1
  61. package/frontend/dist/assets/{variableDetection-cmwwuSWB.js → variableDetection-DfhNyFy-.js} +2 -2
  62. package/frontend/dist/assets/{variableDetection-cmwwuSWB.js.map → variableDetection-DfhNyFy-.js.map} +1 -1
  63. package/frontend/dist/index.html +1 -1
  64. package/mcp_settings.json +2 -1
  65. package/package.json +1 -1
  66. package/frontend/dist/assets/GroupsPage-grCAx55k.js +0 -33
  67. package/frontend/dist/assets/GroupsPage-grCAx55k.js.map +0 -1
  68. package/frontend/dist/assets/ServersPage-BlC0RdIu.js.map +0 -1
  69. package/frontend/dist/assets/SettingsPage-CiVNDyr_.js +0 -12
  70. package/frontend/dist/assets/SettingsPage-CiVNDyr_.js.map +0 -1
  71. package/frontend/dist/assets/index-B-aT0HW5.js +0 -3
  72. package/frontend/dist/assets/index-B-aT0HW5.js.map +0 -1
  73. package/frontend/dist/assets/useSettingsData-DmpLlRI6.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"OAuthClient.js","sourceRoot":"","sources":["../../../src/db/entities/OAuthClient.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAW;CA4CvB,CAAA;AA1CC;IADC,sBAAsB,CAAC,MAAM,CAAC;;uCACpB;AAGX;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;6CACzD;AAGjB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDAC1D;AAGtB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;yCAC5B;AAGb;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;iDAChC;AAGvB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;2CACf;AAGjB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CAC9B;AAGlB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CAC1C;AAGf;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAY9C;AAGF;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACjD,IAAI;8CAAC;AAGhB;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACjD,IAAI;8CAAC;AA3CL,WAAW;IADvB,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;GACrB,WAAW,CA4CvB;;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"OAuthClient.js","sourceRoot":"","sources":["../../../src/db/entities/OAuthClient.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAW;CA+CvB,CAAA;AA7CC;IADC,sBAAsB,CAAC,MAAM,CAAC;;uCACpB;AAGX;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;6CACzD;AAGjB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDAC1D;AAGtB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;yCAC5B;AAGb;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;iDAChC;AAGvB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;2CACf;AAGjB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CAC9B;AAGlB;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CAC1C;AAGf;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAC3C;AAG1B;IADC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAY9C;AAGF;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACjD,IAAI;8CAAC;AAGhB;IADC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACjD,IAAI;8CAAC;AA9CL,WAAW;IADvB,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;GACrB,WAAW,CA+CvB;;AAED,eAAe,WAAW,CAAC"}
@@ -1,10 +1,17 @@
1
1
  import crypto from 'crypto';
2
- import { getOAuthClientDao, getOAuthTokenDao } from '../dao/index.js';
2
+ import { getOAuthClientDao, getOAuthTokenDao, getSystemConfigDao } from '../dao/index.js';
3
3
  import { logger } from '../utils/logger.js';
4
4
  // In-memory storage for authorization codes (short-lived, no persistence needed)
5
5
  const authorizationCodes = new Map();
6
6
  // In-memory cache for tokens (also persisted via DAO)
7
7
  const tokensCache = new Map();
8
+ // In-memory registration access tokens (RFC 7591 §3.2). Expiry is enforced
9
+ // lazily on verification; cleanupExpired() sweeps entries that are never used
10
+ // again so expired tokens do not accumulate for the lifetime of the process.
11
+ const registrationTokens = new Map();
12
+ const REGISTRATION_TOKEN_TTL_MS = 30 * 24 * 60 * 60 * 1000; // 30 days
13
+ // Default idle TTL for dynamically-registered clients (see oauthServerDefaults).
14
+ const DEFAULT_DYNAMIC_CLIENT_TTL_SECONDS = 30 * 24 * 60 * 60; // 30 days
8
15
  // Flag to track if we've initialized from DAO
9
16
  let initialized = false;
10
17
  /**
@@ -71,6 +78,43 @@ export const deleteOAuthClient = async (clientId) => {
71
78
  const clientDao = getOAuthClientDao();
72
79
  return clientDao.delete(clientId);
73
80
  };
81
+ /**
82
+ * Generate a registration access token for a dynamically-registered client
83
+ * (RFC 7591 §3.2). The token is stored in memory and expires after `ttlMs`.
84
+ */
85
+ export const createRegistrationToken = (clientId, ttlMs = REGISTRATION_TOKEN_TTL_MS) => {
86
+ const token = crypto.randomBytes(32).toString('hex');
87
+ registrationTokens.set(token, {
88
+ clientId,
89
+ expiresAt: new Date(Date.now() + ttlMs),
90
+ });
91
+ return token;
92
+ };
93
+ /**
94
+ * Verify a registration access token. Returns the client ID it was issued to,
95
+ * or null if the token is unknown or expired (expired tokens are removed).
96
+ */
97
+ export const verifyRegistrationToken = (token) => {
98
+ const data = registrationTokens.get(token);
99
+ if (!data) {
100
+ return null;
101
+ }
102
+ if (new Date() > data.expiresAt) {
103
+ registrationTokens.delete(token);
104
+ return null;
105
+ }
106
+ return data.clientId;
107
+ };
108
+ /**
109
+ * Delete a registration access token (e.g. when the client registration is deleted)
110
+ */
111
+ export const deleteRegistrationToken = (token) => {
112
+ registrationTokens.delete(token);
113
+ };
114
+ /**
115
+ * Number of registration access tokens currently held in memory (for diagnostics/tests)
116
+ */
117
+ export const countRegistrationTokens = () => registrationTokens.size;
74
118
  /**
75
119
  * Generate a secure random token
76
120
  */
@@ -238,6 +282,59 @@ export const cleanupExpired = async () => {
238
282
  catch (error) {
239
283
  logger.error('Failed to cleanup persisted OAuth tokens:', error);
240
284
  }
285
+ // Sweep expired registration access tokens that were never verified again
286
+ for (const [token, data] of registrationTokens.entries()) {
287
+ if (data.expiresAt < now) {
288
+ registrationTokens.delete(token);
289
+ }
290
+ }
291
+ await cleanupIdleDynamicClients(now);
292
+ };
293
+ /**
294
+ * Reap dynamically-registered OAuth clients that are idle: older than the
295
+ * configured `oauthServer.dynamicRegistration.clientTtl` with no live token and
296
+ * no in-progress authorization flow. Reclaimed clients must register again.
297
+ * Legacy records without `clientIdIssuedAt` are never treated as expired.
298
+ * A `clientTtl` of 0 disables cleanup entirely.
299
+ */
300
+ const cleanupIdleDynamicClients = async (now) => {
301
+ try {
302
+ // Client IDs that are still in use: they have a live token or an unexpired
303
+ // authorization code (an in-progress authorization flow).
304
+ const liveClientIds = new Set();
305
+ for (const [, authCode] of authorizationCodes.entries()) {
306
+ liveClientIds.add(authCode.clientId);
307
+ }
308
+ for (const [, token] of tokensCache.entries()) {
309
+ liveClientIds.add(token.clientId);
310
+ }
311
+ const persistedTokens = await getOAuthTokenDao().findAll();
312
+ for (const token of persistedTokens) {
313
+ liveClientIds.add(token.clientId);
314
+ }
315
+ // Read the configured idle-client TTL. 0 disables cleanup entirely.
316
+ const systemConfig = await getSystemConfigDao().get();
317
+ const clientTtl = systemConfig?.oauthServer?.dynamicRegistration?.clientTtl;
318
+ if (clientTtl !== undefined && clientTtl <= 0) {
319
+ return;
320
+ }
321
+ const ttlSeconds = clientTtl ?? DEFAULT_DYNAMIC_CLIENT_TTL_SECONDS;
322
+ const clientDao = getOAuthClientDao();
323
+ const dynamicClients = await clientDao.findByOwner('dynamic-registration');
324
+ const cutoff = Math.floor(now.getTime() / 1000) - ttlSeconds;
325
+ const stale = dynamicClients.filter((client) => typeof client.clientIdIssuedAt === 'number' &&
326
+ client.clientIdIssuedAt < cutoff &&
327
+ !liveClientIds.has(client.clientId));
328
+ for (const client of stale) {
329
+ await clientDao.delete(client.clientId);
330
+ }
331
+ if (stale.length > 0) {
332
+ logger.log(`Reaped ${stale.length} idle dynamically-registered OAuth client(s)`);
333
+ }
334
+ }
335
+ catch (error) {
336
+ logger.error('Failed to cleanup idle dynamically-registered OAuth clients:', error);
337
+ }
241
338
  };
242
339
  // Run cleanup every 5 minutes in production
243
340
  let cleanupIntervalId = null;
@@ -1 +1 @@
1
- {"version":3,"file":"OAuth.js","sourceRoot":"","sources":["../../src/models/OAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OAuth.js","sourceRoot":"","sources":["../../src/models/OAuth.ts"],"names":[],"mappings":"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"}
@@ -525,6 +525,82 @@ const normalizeResourceForCache = (resource) => {
525
525
  };
526
526
  // Store all server information
527
527
  let serverInfos = [];
528
+ /**
529
+ * How many upstream connections an initialization pass may open at once.
530
+ * Unset, empty or `0` keeps the previous behaviour of connecting every enabled
531
+ * server in parallel. Read per pass so a restart is enough to change it.
532
+ */
533
+ const resolveStartupConcurrency = () => {
534
+ const raw = process.env.STARTUP_CONNECT_CONCURRENCY?.trim();
535
+ if (!raw) {
536
+ return 0;
537
+ }
538
+ const parsed = Number(raw);
539
+ if (!Number.isInteger(parsed) || parsed < 0) {
540
+ logger.warn(`Ignoring invalid STARTUP_CONNECT_CONCURRENCY="${raw}"; expected a non-negative integer. Connecting without a limit.`);
541
+ return 0;
542
+ }
543
+ return parsed;
544
+ };
545
+ /**
546
+ * Rejection reason for a queued connection that was dropped before it started,
547
+ * because the server it belonged to was disabled, removed or superseded while
548
+ * it waited for a slot. Not a connection failure: nothing was spawned and there
549
+ * is nothing wrong with the server, so callers report it as a cancellation
550
+ * rather than marking the server as failed.
551
+ */
552
+ class QueuedConnectCancelledError extends Error {
553
+ constructor() {
554
+ super('Queued connection was cancelled before it started');
555
+ this.name = 'QueuedConnectCancelledError';
556
+ }
557
+ }
558
+ /**
559
+ * Defers the *invocation* of a connect rather than wrapping its promise, so a
560
+ * server waiting for a slot has not started its request yet and its timeout
561
+ * budget is not spent queueing. A limit of 0 runs everything immediately.
562
+ *
563
+ * Because work waits here, what the operator wants can change while it waits -
564
+ * a queued server may be disabled, removed or replaced by a later pass. The
565
+ * `isStillWanted` guard is therefore evaluated when the slot is granted, not
566
+ * when the work is queued; a queued entry that is no longer wanted is cancelled
567
+ * and its slot handed straight to the next in line.
568
+ */
569
+ const createConnectGate = (limit) => {
570
+ if (limit <= 0) {
571
+ // Nothing queues, so nothing can go stale while it waits.
572
+ return { run: (start) => start() };
573
+ }
574
+ let active = 0;
575
+ const waiting = [];
576
+ const startNextWaiting = () => {
577
+ waiting.shift()?.();
578
+ };
579
+ const release = () => {
580
+ active -= 1;
581
+ startNextWaiting();
582
+ };
583
+ return {
584
+ run: (start, isStillWanted) => new Promise((resolve, reject) => {
585
+ const begin = () => {
586
+ if (isStillWanted && !isStillWanted()) {
587
+ // The slot was never taken, so pass it on rather than release it.
588
+ reject(new QueuedConnectCancelledError());
589
+ startNextWaiting();
590
+ return;
591
+ }
592
+ active += 1;
593
+ start().then(resolve, reject).finally(release);
594
+ };
595
+ if (active < limit) {
596
+ begin();
597
+ }
598
+ else {
599
+ waiting.push(begin);
600
+ }
601
+ }),
602
+ };
603
+ };
528
604
  // Bumped by every initializeClientsFromSettings pass. Connections are started
529
605
  // fire-and-forget and settle long after the pass that started them returned, so
530
606
  // a callback needs to know whether a later pass has run before it writes its
@@ -1206,6 +1282,15 @@ export const initializeClientsFromSettings = async (isInit, serverName, options)
1206
1282
  const existingServerInfos = serverInfos;
1207
1283
  const nextServerInfos = [];
1208
1284
  const generation = ++initGeneration;
1285
+ const concurrency = resolveStartupConcurrency();
1286
+ const connectGate = createConnectGate(concurrency);
1287
+ // Set once this pass swaps its entries into `serverInfos`. Until then a
1288
+ // queued server cannot have been retired by anyone, because the entry that
1289
+ // `closeServer`/`toggleServerStatus` would act on is not published yet.
1290
+ let entriesPublished = false;
1291
+ if (isInit && concurrency > 0) {
1292
+ logger.log(`Connecting upstream servers with a concurrency limit of ${concurrency}`);
1293
+ }
1209
1294
  try {
1210
1295
  for (const conf of allServers) {
1211
1296
  const { name } = conf;
@@ -1500,7 +1585,33 @@ export const initializeClientsFromSettings = async (isInit, serverName, options)
1500
1585
  const current = serverInfos.find((si) => si.name === name);
1501
1586
  return current && current.client === client ? current : undefined;
1502
1587
  };
1503
- connectClientWithDiagnostics(client, transport, initRequestOptions || requestOptions)
1588
+ // A queued connection has not spawned anything yet, so cancelling it is
1589
+ // free - and necessary: `closeServerRuntime` clears the client/transport
1590
+ // references that would later own the child process, so connecting after
1591
+ // a disable strands a process nothing can clean up.
1592
+ const connectStillWanted = () => {
1593
+ // Until this pass publishes its entries, nothing else can have retired
1594
+ // this server: the entry a disable would act on does not exist yet.
1595
+ if (!entriesPublished)
1596
+ return true;
1597
+ const current = serverInfos.find((si) => si.name === name);
1598
+ // Gone from the configuration while it waited.
1599
+ if (!current)
1600
+ return false;
1601
+ // Client identity, not the generation, decides whether anyone is still
1602
+ // waiting on this connect - the same rule liveServerInfo() applies to
1603
+ // the result. A later pass that *preserved* this server spreads our
1604
+ // client into its entry and relies on this very connect to complete it
1605
+ // (a scoped reload preserves every other server whatever its status,
1606
+ // see #921), so cancelling on generation alone would strand it on
1607
+ // 'connecting' for good - the failure #1150 was about. A later pass
1608
+ // that rebuilt the server carries a client of its own, and disabling
1609
+ // closes the runtime before replacing the entry, so in both of those
1610
+ // cases the published entry no longer carries our client.
1611
+ return current.client === client && current.enabled !== false;
1612
+ };
1613
+ connectGate
1614
+ .run(() => connectClientWithDiagnostics(client, transport, initRequestOptions || requestOptions), connectStillWanted)
1504
1615
  .then(() => {
1505
1616
  const info = liveServerInfo();
1506
1617
  if (!info) {
@@ -1593,6 +1704,11 @@ export const initializeClientsFromSettings = async (isInit, serverName, options)
1593
1704
  }
1594
1705
  })
1595
1706
  .catch(async (error) => {
1707
+ if (error instanceof QueuedConnectCancelledError) {
1708
+ logger.log(`Cancelled queued connection for server: ${name} (disabled, removed or superseded while queued)`);
1709
+ closeServerRuntime(serverInfo);
1710
+ return;
1711
+ }
1596
1712
  const info = liveServerInfo();
1597
1713
  if (!info) {
1598
1714
  logger.log(`Discarding superseded connection failure for server: ${name}`);
@@ -1632,10 +1748,11 @@ export const initializeClientsFromSettings = async (isInit, serverName, options)
1632
1748
  throw error;
1633
1749
  }
1634
1750
  serverInfos = nextServerInfos;
1751
+ entriesPublished = true;
1635
1752
  // Populate the tool cache for on-demand stdio servers so their tools are
1636
1753
  // visible to agents, then put them back to sleep. Running here (rather than
1637
1754
  // only at startup) also covers servers added/enabled/reloaded after startup.
1638
- const primePromise = primeOnDemandServers();
1755
+ const primePromise = primeOnDemandServers(connectGate);
1639
1756
  // At full startup (no serverName) keep prime fire-and-forget so a slow or
1640
1757
  // broken on-demand server does not block init. For a targeted reload/edit
1641
1758
  // (serverName set), await it so the caller - and the dashboard refresh that
@@ -1877,7 +1994,9 @@ export const reinstallServer = async (serverName) => {
1877
1994
  try {
1878
1995
  // For npx, clear cache directory synchronously before reconnect.
1879
1996
  // For uvx, this is a no-op — refresh is handled via --refresh flag injection.
1880
- await clearRunnerCache(command);
1997
+ // Pass the server's own arguments so the npx clear can be scoped to this
1998
+ // server's package instead of discarding every npx server's install.
1999
+ await clearRunnerCache(command, serverConfig.args || []);
1881
2000
  // Close and reconnect (will pick up pendingReinstalls flag for uvx)
1882
2001
  await reconnectServer(serverName);
1883
2002
  logger.log(`Successfully initiated reinstall for server: ${serverName}`);
@@ -2261,7 +2380,7 @@ const isStdioServer = (conf) => !!conf && (conf.type === 'stdio' || (!conf.type
2261
2380
  * does not block init. Each server is isolated so one failure does not affect
2262
2381
  * the others. See #1029 / #1032.
2263
2382
  */
2264
- const primeOnDemandServers = () => {
2383
+ const primeOnDemandServers = (gate) => {
2265
2384
  const targets = serverInfos.filter((si) => si.config?.startOnDemand === true &&
2266
2385
  !hasCredentialTemplate(si.config) &&
2267
2386
  isStdioServer(si.config) &&
@@ -2270,9 +2389,13 @@ const primeOnDemandServers = () => {
2270
2389
  if (targets.length === 0)
2271
2390
  return Promise.resolve();
2272
2391
  logger.log(`Priming ${targets.length} on-demand server(s) for tool discovery…`);
2392
+ // Priming happens right after init, so it competes for the same machine.
2393
+ // Share the pass's concurrency limit rather than waking every sleeping server
2394
+ // at once and undoing the pacing above.
2395
+ const run = gate ? gate.run : (start) => start();
2273
2396
  return Promise.allSettled(targets.map(async (si) => {
2274
2397
  try {
2275
- await ensureServerReady(si);
2398
+ await run(() => ensureServerReady(si));
2276
2399
  // Sleep the child unless a tool call is using it; keep the cached tool list.
2277
2400
  shutdownOnDemandServer(si);
2278
2401
  logger.log('On-demand server tool cache primed');