rivet-design 0.11.1 → 0.11.3

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 (56) hide show
  1. package/dist/config/flags.d.ts +3 -0
  2. package/dist/config/flags.d.ts.map +1 -1
  3. package/dist/config/flags.js +4 -0
  4. package/dist/config/flags.js.map +1 -1
  5. package/dist/index.d.ts +7 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +25 -9
  8. package/dist/index.js.map +1 -1
  9. package/dist/mcp/auth/httpOAuthProvider.d.ts +12 -12
  10. package/dist/mcp/auth/httpOAuthProvider.d.ts.map +1 -1
  11. package/dist/mcp/auth/httpOAuthProvider.js +348 -67
  12. package/dist/mcp/auth/httpOAuthProvider.js.map +1 -1
  13. package/dist/mcp/auth/tools.d.ts +1 -0
  14. package/dist/mcp/auth/tools.d.ts.map +1 -1
  15. package/dist/mcp/auth/tools.js +31 -10
  16. package/dist/mcp/auth/tools.js.map +1 -1
  17. package/dist/mcp/branding.d.ts +4 -0
  18. package/dist/mcp/branding.d.ts.map +1 -0
  19. package/dist/mcp/branding.js +8 -0
  20. package/dist/mcp/branding.js.map +1 -0
  21. package/dist/mcp/hostedServer.d.ts +27 -0
  22. package/dist/mcp/hostedServer.d.ts.map +1 -0
  23. package/dist/mcp/hostedServer.js +64 -0
  24. package/dist/mcp/hostedServer.js.map +1 -0
  25. package/dist/mcp/httpServer.d.ts +30 -3
  26. package/dist/mcp/httpServer.d.ts.map +1 -1
  27. package/dist/mcp/httpServer.js +351 -56
  28. package/dist/mcp/httpServer.js.map +1 -1
  29. package/dist/mcp/server.d.ts +4 -8
  30. package/dist/mcp/server.d.ts.map +1 -1
  31. package/dist/mcp/server.js +43 -34
  32. package/dist/mcp/server.js.map +1 -1
  33. package/dist/mcp/types.d.ts +7 -0
  34. package/dist/mcp/types.d.ts.map +1 -0
  35. package/dist/mcp/types.js +3 -0
  36. package/dist/mcp/types.js.map +1 -0
  37. package/dist/services/AuthService.d.ts +15 -1
  38. package/dist/services/AuthService.d.ts.map +1 -1
  39. package/dist/services/AuthService.js +176 -8
  40. package/dist/services/AuthService.js.map +1 -1
  41. package/dist/services/ConfigManager.d.ts +2 -0
  42. package/dist/services/ConfigManager.d.ts.map +1 -1
  43. package/dist/services/ConfigManager.js +21 -7
  44. package/dist/services/ConfigManager.js.map +1 -1
  45. package/dist/services/IntegrationsClient.d.ts.map +1 -1
  46. package/dist/services/IntegrationsClient.js +15 -4
  47. package/dist/services/IntegrationsClient.js.map +1 -1
  48. package/dist/services/RequestAuthContext.d.ts +1 -0
  49. package/dist/services/RequestAuthContext.d.ts.map +1 -1
  50. package/dist/services/RequestAuthContext.js.map +1 -1
  51. package/package.json +3 -3
  52. package/src/ui/dist/assets/main-Dwk5LfCC.js +641 -0
  53. package/src/ui/dist/assets/main-E5hevKg2.css +1 -0
  54. package/src/ui/dist/index.html +2 -2
  55. package/src/ui/dist/assets/main-DkCj7b2K.css +0 -1
  56. package/src/ui/dist/assets/main-n7zyCCGw.js +0 -645
@@ -1,17 +1,51 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.startMCPServerHttp = exports.createMcpHttpApp = exports.OAUTH_CALLBACK_COMPLETE_PATH = exports.MCP_HTTP_PATH = exports.DEFAULT_MCP_HTTP_PORT = void 0;
39
+ exports.startMCPServerHttp = exports.createMcpHttpApp = exports.registerMcpHttpProcessHandlers = exports.getCurrentMcpHttpBaseUrl = exports.OAUTH_CALLBACK_COMPLETE_PATH = exports.OAUTH_CALLBACK_PATH = exports.MCP_HTTP_PATH = exports.DEFAULT_MCP_HTTP_PORT = void 0;
7
40
  const crypto_1 = require("crypto");
41
+ const async_hooks_1 = require("async_hooks");
8
42
  const express_1 = __importDefault(require("express"));
9
43
  const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
10
44
  const router_js_1 = require("@modelcontextprotocol/sdk/server/auth/router.js");
11
45
  const bearerAuth_js_1 = require("@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js");
12
46
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
13
47
  const httpOAuthProvider_1 = require("./auth/httpOAuthProvider");
14
- const server_1 = require("./server");
48
+ const branding_1 = require("./branding");
15
49
  const ConfigManager_1 = require("../services/ConfigManager");
16
50
  const RequestAuthContext_1 = require("../services/RequestAuthContext");
17
51
  const logger_1 = require("../utils/logger");
@@ -19,18 +53,21 @@ const skillWriter_1 = require("../utils/skillWriter");
19
53
  const log = (0, logger_1.createLogger)('mcp-http');
20
54
  exports.DEFAULT_MCP_HTTP_PORT = 5891;
21
55
  exports.MCP_HTTP_PATH = '/mcp';
56
+ exports.OAUTH_CALLBACK_PATH = '/mcp/oauth/callback';
22
57
  exports.OAUTH_CALLBACK_COMPLETE_PATH = '/oauth/callback/complete';
23
58
  const MCP_OAUTH_SCOPE = 'rivet';
24
59
  const MCP_HTTP_HOST = '127.0.0.1';
60
+ const REGISTER_RATE_LIMIT_WINDOW_MS = 60_000;
61
+ const REGISTER_RATE_LIMIT_MAX_REQUESTS = 30;
62
+ const TRUSTED_PROXY_HOPS = 1;
63
+ const MCP_CLIENT_IDLE_TIMEOUT_MS = 5 * 60_000;
25
64
  /**
26
- * Browser page served at `/` as the OAuth callback. The proxy only accepts
27
- * bare localhost origins as `redirectOrigin` (no custom paths), so it
28
- * redirects the browser to `/?session=` with the Supabase tokens in the URL
29
- * hash; this page forwards them to the local server, which finishes the
30
- * login and replies with the MCP client's redirect URL (carrying the
31
- * authorization code) to navigate to.
65
+ * Browser page served as the OAuth callback. The proxy redirects to either the
66
+ * bare server origin or the hosted callback path with Supabase hash tokens; this
67
+ * page forwards those tokens to the OAuth provider and returns the MCP client's
68
+ * authorization-code redirect.
32
69
  */
33
- const getOAuthCallbackHtml = (completePath) => `<!doctype html>
70
+ const getOAuthCallbackHtml = (completePath, localAuthBridgeUrl, fallbackSessionId) => `<!doctype html>
34
71
  <html>
35
72
  <head>
36
73
  <meta charset="utf-8" />
@@ -61,7 +98,10 @@ const getOAuthCallbackHtml = (completePath) => `<!doctype html>
61
98
  <script>
62
99
  const params = new URLSearchParams(window.location.search);
63
100
  const hash = new URLSearchParams(window.location.hash.slice(1));
64
- if (!params.get('session') || !hash.get('access_token')) {
101
+ const localAuthBridgeUrl = ${JSON.stringify(localAuthBridgeUrl)};
102
+ const fallbackSessionId = ${JSON.stringify(fallbackSessionId ?? '')};
103
+ const sessionId = params.get('session') || fallbackSessionId;
104
+ if (!sessionId || !hash.get('access_token')) {
65
105
  document.querySelector('h1').textContent = 'Rivet MCP server is running';
66
106
  document.querySelector('p').textContent =
67
107
  'Connect from your MCP client (e.g. Cursor) to sign in.';
@@ -76,15 +116,38 @@ const getOAuthCallbackHtml = (completePath) => `<!doctype html>
76
116
  }
77
117
  fetch('${completePath}', {
78
118
  method: 'POST',
119
+ credentials: 'same-origin',
79
120
  headers: { 'Content-Type': 'application/json' },
80
121
  body: JSON.stringify({
81
- sessionId: params.get('session'),
122
+ sessionId,
82
123
  accessToken: hash.get('access_token'),
83
124
  refreshToken: hash.get('refresh_token')
84
125
  })
85
126
  }).then(async (response) => {
86
127
  const result = await response.json().catch(() => null);
87
128
  if (response.ok && result && result.redirectUrl) {
129
+ const bridgePayload = JSON.stringify({
130
+ sessionId,
131
+ accessToken: hash.get('access_token'),
132
+ refreshToken: hash.get('refresh_token')
133
+ });
134
+ try {
135
+ let didQueueBeacon = false;
136
+ if (navigator.sendBeacon && localAuthBridgeUrl) {
137
+ didQueueBeacon = navigator.sendBeacon(localAuthBridgeUrl, bridgePayload);
138
+ }
139
+ if (!didQueueBeacon && localAuthBridgeUrl) {
140
+ fetch(localAuthBridgeUrl, {
141
+ method: 'POST',
142
+ mode: 'cors',
143
+ keepalive: true,
144
+ headers: { 'Content-Type': 'text/plain;charset=UTF-8' },
145
+ body: bridgePayload
146
+ }).catch(() => {});
147
+ }
148
+ } catch {
149
+ // Local bridge sync is best-effort.
150
+ }
88
151
  document.querySelector('h1').textContent = 'Rivet sign in complete';
89
152
  window.location.replace(result.redirectUrl);
90
153
  } else {
@@ -96,14 +159,48 @@ const getOAuthCallbackHtml = (completePath) => `<!doctype html>
96
159
  </script>
97
160
  </body>
98
161
  </html>`;
162
+ const requestBaseUrlStorage = new async_hooks_1.AsyncLocalStorage();
163
+ /** Returns the public MCP base URL for the active HTTP request. */
164
+ const getCurrentMcpHttpBaseUrl = () => requestBaseUrlStorage.getStore();
165
+ exports.getCurrentMcpHttpBaseUrl = getCurrentMcpHttpBaseUrl;
99
166
  const getAuthExtraString = (req, key) => {
100
167
  const value = req.auth?.extra?.[key];
101
168
  return typeof value === 'string' ? value : undefined;
102
169
  };
170
+ const getCookieValue = (req, name) => {
171
+ const cookieHeader = req.headers.cookie;
172
+ if (typeof cookieHeader !== 'string') {
173
+ return undefined;
174
+ }
175
+ for (const cookie of cookieHeader.split(';')) {
176
+ const [rawName, ...rawValueParts] = cookie.trim().split('=');
177
+ if (rawName !== name) {
178
+ continue;
179
+ }
180
+ const rawValue = rawValueParts.join('=');
181
+ try {
182
+ return decodeURIComponent(rawValue);
183
+ }
184
+ catch {
185
+ return rawValue;
186
+ }
187
+ }
188
+ return undefined;
189
+ };
190
+ /** Reads the OAuth browser session bound to the approval-page nonce cookie. */
191
+ const getMcpBrowserSessionIdFromCookie = (req) => {
192
+ const cookieValue = getCookieValue(req, httpOAuthProvider_1.MCP_BROWSER_AUTH_COOKIE_NAME);
193
+ if (!cookieValue) {
194
+ return undefined;
195
+ }
196
+ const [sessionId] = cookieValue.split(':');
197
+ return sessionId || undefined;
198
+ };
103
199
  /** Builds the request-scoped credentials used by services during MCP tools. */
104
200
  const getRequestAuthContextValue = (req) => ({
105
201
  token: req.auth?.token,
106
202
  refreshToken: getAuthExtraString(req, 'refreshToken'),
203
+ mcpAccessToken: getAuthExtraString(req, 'mcpAccessToken'),
107
204
  email: getAuthExtraString(req, 'email'),
108
205
  userId: getAuthExtraString(req, 'userId'),
109
206
  });
@@ -111,20 +208,119 @@ const getRequestAuthContextValue = (req) => ({
111
208
  const handleMcpRequestWithAuthContext = (req, callback) => {
112
209
  return (0, RequestAuthContext_1.runWithRequestAuthContext)(getRequestAuthContextValue(req), callback);
113
210
  };
211
+ const setMetadataCorsHeaders = (res) => {
212
+ res.setHeader('Access-Control-Allow-Origin', '*');
213
+ };
214
+ const getOAuthMetadata = (requestBaseUrl) => ({
215
+ issuer: requestBaseUrl.href,
216
+ authorization_endpoint: new URL('/authorize', requestBaseUrl).href,
217
+ logo_uri: (0, branding_1.getRivetIconUrl)(requestBaseUrl),
218
+ response_types_supported: ['code'],
219
+ code_challenge_methods_supported: ['S256'],
220
+ token_endpoint: new URL('/token', requestBaseUrl).href,
221
+ token_endpoint_auth_methods_supported: ['client_secret_post', 'none'],
222
+ grant_types_supported: ['authorization_code', 'refresh_token'],
223
+ scopes_supported: [MCP_OAUTH_SCOPE],
224
+ revocation_endpoint: new URL('/revoke', requestBaseUrl).href,
225
+ revocation_endpoint_auth_methods_supported: ['client_secret_post'],
226
+ registration_endpoint: new URL('/register', requestBaseUrl).href,
227
+ });
228
+ const getProtectedResourceMetadata = (requestBaseUrl) => ({
229
+ resource: new URL(exports.MCP_HTTP_PATH, requestBaseUrl).href,
230
+ authorization_servers: [requestBaseUrl.href],
231
+ scopes_supported: [MCP_OAUTH_SCOPE],
232
+ resource_name: 'Rivet',
233
+ resource_documentation: branding_1.RIVET_WEBSITE_URL,
234
+ });
235
+ /** Registers local HTTP MCP process cleanup around all active per-user handles. */
236
+ const registerMcpHttpProcessHandlers = (params) => {
237
+ const processLike = params.processLike ?? process;
238
+ let shutdownPromise = null;
239
+ const shutdown = () => {
240
+ shutdownPromise ??= (async () => {
241
+ await params.shutdownMcpClients();
242
+ await new Promise((resolve, reject) => {
243
+ params.server.close((error) => (error ? reject(error) : resolve()));
244
+ });
245
+ })();
246
+ return shutdownPromise;
247
+ };
248
+ const handleSignal = async () => {
249
+ try {
250
+ await shutdown();
251
+ processLike.exit(0);
252
+ }
253
+ catch (error) {
254
+ log.warn('HTTP MCP shutdown failed:', error);
255
+ processLike.exit(1);
256
+ }
257
+ };
258
+ processLike.on('SIGTERM', () => handleSignal());
259
+ processLike.on('SIGINT', () => handleSignal());
260
+ processLike.on('beforeExit', () => shutdown());
261
+ };
262
+ exports.registerMcpHttpProcessHandlers = registerMcpHttpProcessHandlers;
114
263
  /**
115
264
  * Creates the Express app exposing the Rivet MCP server over streamable HTTP
116
265
  * with native MCP OAuth support:
117
266
  * - `/.well-known/oauth-protected-resource/mcp` + `/.well-known/oauth-authorization-server`
118
267
  * - `/authorize`, `/token`, `/register` (dynamic client registration)
119
- * - `/oauth/callback` browser landing page for the proxy Google flow
268
+ * - `/` and `/mcp/oauth/callback` browser landing pages for the proxy Google flow
120
269
  * - `/mcp` streamable HTTP endpoint guarded by bearer auth (401 +
121
270
  * WWW-Authenticate with resource metadata when unauthenticated)
122
271
  */
123
272
  const createMcpHttpApp = (options) => {
124
- const { baseUrl, provider, createMcp } = options;
273
+ const { baseUrl, resolveBaseUrl, provider, createMcp } = options;
274
+ const stateless = options.stateless ?? false;
275
+ const clientIdleTimeoutMs = options.clientIdleTimeoutMs ?? MCP_CLIENT_IDLE_TIMEOUT_MS;
125
276
  const mcpUrl = new URL(exports.MCP_HTTP_PATH, baseUrl);
126
277
  const app = (0, express_1.default)();
278
+ app.set('trust proxy', TRUSTED_PROXY_HOPS);
127
279
  app.use(express_1.default.json());
280
+ const getRequestBaseUrl = (req) => resolveBaseUrl?.(req) ?? baseUrl;
281
+ app.use((req, _res, next) => {
282
+ requestBaseUrlStorage.run(getRequestBaseUrl(req), next);
283
+ });
284
+ const registerRateLimits = new Map();
285
+ app.use('/register', (req, res, next) => {
286
+ if (req.method !== 'POST') {
287
+ next();
288
+ return;
289
+ }
290
+ const now = Date.now();
291
+ const key = req.ip || req.socket.remoteAddress || 'unknown';
292
+ const current = registerRateLimits.get(key);
293
+ const record = current && current.resetAt > now
294
+ ? current
295
+ : { count: 0, resetAt: now + REGISTER_RATE_LIMIT_WINDOW_MS };
296
+ record.count += 1;
297
+ registerRateLimits.set(key, record);
298
+ if (record.count <= REGISTER_RATE_LIMIT_MAX_REQUESTS) {
299
+ next();
300
+ return;
301
+ }
302
+ res.setHeader('Retry-After', String(Math.ceil((record.resetAt - now) / 1000)));
303
+ res.status(429).json({
304
+ error: 'too_many_requests',
305
+ error_description: 'Too many OAuth client registration attempts.',
306
+ });
307
+ });
308
+ app.options('/.well-known/oauth-authorization-server', (_req, res) => {
309
+ setMetadataCorsHeaders(res);
310
+ res.status(204).send();
311
+ });
312
+ app.get('/.well-known/oauth-authorization-server', (req, res) => {
313
+ setMetadataCorsHeaders(res);
314
+ res.status(200).json(getOAuthMetadata(getRequestBaseUrl(req)));
315
+ });
316
+ app.options(`/.well-known/oauth-protected-resource${exports.MCP_HTTP_PATH}`, (_req, res) => {
317
+ setMetadataCorsHeaders(res);
318
+ res.status(204).send();
319
+ });
320
+ app.get(`/.well-known/oauth-protected-resource${exports.MCP_HTTP_PATH}`, (req, res) => {
321
+ setMetadataCorsHeaders(res);
322
+ res.status(200).json(getProtectedResourceMetadata(getRequestBaseUrl(req)));
323
+ });
128
324
  app.use((0, router_js_1.mcpAuthRouter)({
129
325
  provider,
130
326
  issuerUrl: baseUrl,
@@ -132,15 +328,24 @@ const createMcpHttpApp = (options) => {
132
328
  resourceName: 'Rivet',
133
329
  scopesSupported: [MCP_OAUTH_SCOPE],
134
330
  }));
135
- app.get('/', (_req, res) => {
331
+ app.get('/', (req, res) => {
332
+ res
333
+ .status(200)
334
+ .type('html')
335
+ .send(getOAuthCallbackHtml(exports.OAUTH_CALLBACK_COMPLETE_PATH, options.localAuthBridgeUrl ?? '', getMcpBrowserSessionIdFromCookie(req)));
336
+ });
337
+ app.get(exports.OAUTH_CALLBACK_PATH, (req, res) => {
136
338
  res
137
339
  .status(200)
138
340
  .type('html')
139
- .send(getOAuthCallbackHtml(exports.OAUTH_CALLBACK_COMPLETE_PATH));
341
+ .send(getOAuthCallbackHtml(exports.OAUTH_CALLBACK_COMPLETE_PATH, options.localAuthBridgeUrl ?? '', getMcpBrowserSessionIdFromCookie(req)));
140
342
  });
141
343
  app.post(exports.OAUTH_CALLBACK_COMPLETE_PATH, async (req, res) => {
142
344
  try {
143
- const { redirectUrl } = await provider.completeBrowserCallback(req.body ?? {});
345
+ const { redirectUrl } = await provider.completeBrowserCallback({
346
+ ...(req.body ?? {}),
347
+ browserAuthCookie: getCookieValue(req, httpOAuthProvider_1.MCP_BROWSER_AUTH_COOKIE_NAME),
348
+ });
144
349
  res.json({ success: true, redirectUrl });
145
350
  }
146
351
  catch (error) {
@@ -151,92 +356,176 @@ const createMcpHttpApp = (options) => {
151
356
  });
152
357
  }
153
358
  });
154
- const bearerAuth = (0, bearerAuth_js_1.requireBearerAuth)({
359
+ const bearerAuth = (req, res, next) => (0, bearerAuth_js_1.requireBearerAuth)({
155
360
  verifier: provider,
156
- resourceMetadataUrl: (0, router_js_1.getOAuthProtectedResourceMetadataUrl)(mcpUrl),
157
- });
158
- // The Rivet MCP server holds long-lived session state (visual editor
159
- // bridge, telemetry), so a single instance is shared across MCP sessions:
160
- // a new initialize request closes the previous session's transport and
161
- // reconnects the server to the new one.
162
- let mcpHandle = null;
163
- const transports = new Map();
164
- let initializeRequestChain = Promise.resolve();
165
- let activeSessionPostRequestCount = 0;
166
- const activeSessionPostRequestIdleResolvers = new Set();
361
+ resourceMetadataUrl: (0, router_js_1.getOAuthProtectedResourceMetadataUrl)(new URL(exports.MCP_HTTP_PATH, getRequestBaseUrl(req))),
362
+ })(req, res, next);
363
+ const clientStates = new Map();
364
+ const getMcpClientKey = (req) => getAuthExtraString(req, 'userId') ?? req.auth?.token ?? 'anonymous';
365
+ const getClientState = (key) => {
366
+ const existing = clientStates.get(key);
367
+ if (existing) {
368
+ return existing;
369
+ }
370
+ const created = {
371
+ mcpHandle: null,
372
+ transports: new Map(),
373
+ initializeRequestChain: Promise.resolve(),
374
+ activeSessionPostRequestCount: 0,
375
+ activeSessionPostRequestIdleResolvers: new Set(),
376
+ idleTimer: null,
377
+ };
378
+ clientStates.set(key, created);
379
+ return created;
380
+ };
381
+ const clearClientStateIdleTimer = (state) => {
382
+ if (state.idleTimer) {
383
+ clearTimeout(state.idleTimer);
384
+ state.idleTimer = null;
385
+ }
386
+ };
167
387
  /** Waits until active MCP tool/resource POST requests have finished. */
168
- const waitForActiveSessionPostRequests = () => {
169
- if (activeSessionPostRequestCount === 0) {
388
+ const waitForActiveSessionPostRequests = (state) => {
389
+ if (state.activeSessionPostRequestCount === 0) {
170
390
  return Promise.resolve();
171
391
  }
172
392
  return new Promise((resolve) => {
173
- activeSessionPostRequestIdleResolvers.add(resolve);
393
+ state.activeSessionPostRequestIdleResolvers.add(resolve);
174
394
  });
175
395
  };
176
396
  /** Tracks active session POSTs so reconnects do not close in-flight work. */
177
- const handleActiveSessionPostRequest = async (req, callback) => {
397
+ const handleActiveSessionPostRequest = async (state, req, callback) => {
178
398
  if (req.method !== 'POST') {
179
399
  await callback();
180
400
  return;
181
401
  }
182
- activeSessionPostRequestCount += 1;
402
+ state.activeSessionPostRequestCount += 1;
183
403
  try {
184
404
  await callback();
185
405
  }
186
406
  finally {
187
- activeSessionPostRequestCount -= 1;
188
- if (activeSessionPostRequestCount === 0) {
189
- for (const resolve of activeSessionPostRequestIdleResolvers) {
407
+ state.activeSessionPostRequestCount -= 1;
408
+ if (state.activeSessionPostRequestCount === 0) {
409
+ for (const resolve of state.activeSessionPostRequestIdleResolvers) {
190
410
  resolve();
191
411
  }
192
- activeSessionPostRequestIdleResolvers.clear();
412
+ state.activeSessionPostRequestIdleResolvers.clear();
193
413
  }
194
414
  }
195
415
  };
416
+ const closeClientState = async (state) => {
417
+ clearClientStateIdleTimer(state);
418
+ await state.initializeRequestChain.catch(() => undefined);
419
+ await waitForActiveSessionPostRequests(state);
420
+ for (const transport of state.transports.values()) {
421
+ await transport.close();
422
+ }
423
+ state.transports.clear();
424
+ await state.mcpHandle?.shutdown();
425
+ state.mcpHandle = null;
426
+ };
427
+ /** Schedules idle per-user MCP handles for eviction from long-running hosts. */
428
+ const scheduleClientStateEviction = (key, state) => {
429
+ clearClientStateIdleTimer(state);
430
+ state.idleTimer = setTimeout(() => {
431
+ void (async () => {
432
+ if (clientStates.get(key) !== state) {
433
+ return;
434
+ }
435
+ clientStates.delete(key);
436
+ await closeClientState(state);
437
+ })().catch((error) => {
438
+ log.warn('Failed to evict idle HTTP MCP client:', error);
439
+ });
440
+ }, clientIdleTimeoutMs);
441
+ state.idleTimer.unref?.();
442
+ };
443
+ /** Closes every per-user MCP handle owned by this HTTP app. */
444
+ const shutdownMcpClients = async () => {
445
+ const states = Array.from(clientStates.values());
446
+ clientStates.clear();
447
+ await Promise.all(states.map((state) => closeClientState(state)));
448
+ };
449
+ app.locals.shutdownMcpClients = shutdownMcpClients;
450
+ /**
451
+ * Serves a single hosted MCP request without server-side session continuity.
452
+ *
453
+ * Hosted deployments run on ephemeral, restartable, possibly recycled
454
+ * single-instance infrastructure where an in-memory session map cannot
455
+ * survive between requests, so a cached `Mcp-Session-Id` would fail every
456
+ * follow-up request once the process restarts or the handle idle-evicts. The
457
+ * hosted surface only exposes session-less identity and cloud-integration
458
+ * tools, so each request gets its own short-lived session-less transport and
459
+ * MCP handle, torn down when the response closes.
460
+ */
461
+ const handleStatelessMcpRequest = async (req, res) => {
462
+ const mcpHandle = createMcp();
463
+ const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
464
+ sessionIdGenerator: undefined,
465
+ });
466
+ res.once('close', () => {
467
+ void transport.close();
468
+ void mcpHandle.shutdown();
469
+ });
470
+ await mcpHandle.mcp.connect(transport);
471
+ await handleMcpRequestWithAuthContext(req, () => transport.handleRequest(req, res, req.body));
472
+ };
196
473
  app.all(exports.MCP_HTTP_PATH, bearerAuth, async (req, res) => {
197
474
  try {
475
+ if (stateless) {
476
+ await handleStatelessMcpRequest(req, res);
477
+ return;
478
+ }
479
+ const clientKey = getMcpClientKey(req);
480
+ const clientState = getClientState(clientKey);
481
+ clearClientStateIdleTimer(clientState);
482
+ res.once('finish', () => {
483
+ if (clientStates.get(clientKey) === clientState) {
484
+ scheduleClientStateEviction(clientKey, clientState);
485
+ }
486
+ });
198
487
  const sessionId = req.headers['mcp-session-id'];
199
488
  const existingTransport = sessionId
200
- ? transports.get(sessionId)
489
+ ? clientState.transports.get(sessionId)
201
490
  : undefined;
202
491
  if (existingTransport) {
203
- await handleActiveSessionPostRequest(req, () => handleMcpRequestWithAuthContext(req, () => existingTransport.handleRequest(req, res, req.body)));
492
+ await handleActiveSessionPostRequest(clientState, req, () => handleMcpRequestWithAuthContext(req, () => existingTransport.handleRequest(req, res, req.body)));
204
493
  return;
205
494
  }
206
495
  if (req.method === 'POST' && (0, types_js_1.isInitializeRequest)(req.body)) {
207
496
  const handleInitializeRequest = async () => {
208
- await waitForActiveSessionPostRequests();
209
- for (const transport of transports.values()) {
497
+ await waitForActiveSessionPostRequests(clientState);
498
+ for (const transport of clientState.transports.values()) {
210
499
  await transport.close();
211
500
  }
212
- transports.clear();
213
- if (!mcpHandle) {
214
- mcpHandle = createMcp();
501
+ clientState.transports.clear();
502
+ if (!clientState.mcpHandle) {
503
+ clientState.mcpHandle = createMcp();
215
504
  }
216
505
  else {
217
- await mcpHandle.closeActiveSession();
506
+ await clientState.mcpHandle.closeActiveSession();
218
507
  }
219
508
  const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
220
509
  sessionIdGenerator: () => (0, crypto_1.randomUUID)(),
221
510
  onsessioninitialized: (newSessionId) => {
222
- transports.set(newSessionId, transport);
511
+ clientState.transports.set(newSessionId, transport);
223
512
  },
224
513
  });
225
- await mcpHandle.mcp.connect(transport);
514
+ await clientState.mcpHandle.mcp.connect(transport);
226
515
  // Protocol.connect installs its own onclose; chain ours after it so
227
516
  // closed sessions drop out of the transport map.
228
517
  const protocolOnClose = transport.onclose;
229
518
  transport.onclose = () => {
230
519
  const closedSessionId = transport.sessionId;
231
520
  if (closedSessionId) {
232
- transports.delete(closedSessionId);
521
+ clientState.transports.delete(closedSessionId);
233
522
  }
234
523
  protocolOnClose?.();
235
524
  };
236
525
  await handleMcpRequestWithAuthContext(req, () => transport.handleRequest(req, res, req.body));
237
526
  };
238
- const initializeRequest = initializeRequestChain.then(handleInitializeRequest, handleInitializeRequest);
239
- initializeRequestChain = initializeRequest.catch(() => undefined);
527
+ const initializeRequest = clientState.initializeRequestChain.then(handleInitializeRequest, handleInitializeRequest);
528
+ clientState.initializeRequestChain = initializeRequest.catch(() => undefined);
240
529
  await initializeRequest;
241
530
  return;
242
531
  }
@@ -277,10 +566,9 @@ const startMCPServerHttp = async (options = {}) => {
277
566
  if (options.mcpEditor === 'claude' || options.mcpEditor === undefined) {
278
567
  (0, skillWriter_1.writeSkillFileIfNeeded)();
279
568
  }
569
+ const { createRivetMcp } = await Promise.resolve().then(() => __importStar(require('./server')));
280
570
  const provider = new httpOAuthProvider_1.RivetOAuthServerProvider({
281
571
  proxyUrl: configManager.getProxyUrl(),
282
- // The proxy only accepts bare localhost origins; the callback page is
283
- // served at `/`.
284
572
  callbackUrl: baseUrl.origin,
285
573
  mcpEditor: options.mcpEditor,
286
574
  persistTokens: ({ token, refreshToken, user }) => {
@@ -291,15 +579,22 @@ const startMCPServerHttp = async (options = {}) => {
291
579
  const app = (0, exports.createMcpHttpApp)({
292
580
  baseUrl,
293
581
  provider,
294
- createMcp: () => (0, server_1.createRivetMcp)({
295
- mcpEditor: options.mcpEditor,
296
- revokeBearerToken: (token) => provider.revokeAccessToken(token),
297
- }),
582
+ createMcp: () => {
583
+ return createRivetMcp({
584
+ mcpEditor: options.mcpEditor,
585
+ registerProcessHandlers: false,
586
+ revokeBearerToken: (token) => provider.revokeAccessToken(token),
587
+ });
588
+ },
298
589
  });
299
590
  const server = await new Promise((resolve, reject) => {
300
591
  const listening = app.listen(port, MCP_HTTP_HOST, () => resolve(listening));
301
592
  listening.on('error', reject);
302
593
  });
594
+ (0, exports.registerMcpHttpProcessHandlers)({
595
+ server,
596
+ shutdownMcpClients: app.locals.shutdownMcpClients,
597
+ });
303
598
  log.info(`Rivet MCP server (streamable HTTP) listening at ${baseUrl.href.replace(/\/$/, '')}${exports.MCP_HTTP_PATH}`);
304
599
  return server;
305
600
  };
@@ -1 +1 @@
1
- {"version":3,"file":"httpServer.js","sourceRoot":"","sources":["../../src/mcp/httpServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"httpServer.js","sourceRoot":"","sources":["../../src/mcp/httpServer.ts"],"names":[],"mappings":"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"}