rivet-design 0.11.0 → 0.11.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.
Files changed (64) hide show
  1. package/dist/index.d.ts +7 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +25 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/mcp/agent-variants/areNaSourceContext.d.ts +21 -0
  6. package/dist/mcp/agent-variants/areNaSourceContext.d.ts.map +1 -0
  7. package/dist/mcp/agent-variants/areNaSourceContext.js +127 -0
  8. package/dist/mcp/agent-variants/areNaSourceContext.js.map +1 -0
  9. package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +1 -1
  10. package/dist/mcp/agent-variants/createZeroToOneTool.js +43 -4
  11. package/dist/mcp/agent-variants/createZeroToOneTool.js.map +1 -1
  12. package/dist/mcp/agent-variants/pinterestSourceContext.d.ts +4 -0
  13. package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +1 -1
  14. package/dist/mcp/agent-variants/pinterestSourceContext.js +7 -0
  15. package/dist/mcp/agent-variants/pinterestSourceContext.js.map +1 -1
  16. package/dist/mcp/agent-variants/tools.d.ts +6 -1
  17. package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
  18. package/dist/mcp/agent-variants/tools.js.map +1 -1
  19. package/dist/mcp/auth/httpOAuthProvider.d.ts +12 -12
  20. package/dist/mcp/auth/httpOAuthProvider.d.ts.map +1 -1
  21. package/dist/mcp/auth/httpOAuthProvider.js +348 -67
  22. package/dist/mcp/auth/httpOAuthProvider.js.map +1 -1
  23. package/dist/mcp/auth/tools.d.ts +1 -0
  24. package/dist/mcp/auth/tools.d.ts.map +1 -1
  25. package/dist/mcp/auth/tools.js +31 -10
  26. package/dist/mcp/auth/tools.js.map +1 -1
  27. package/dist/mcp/hostedServer.d.ts +13 -0
  28. package/dist/mcp/hostedServer.d.ts.map +1 -0
  29. package/dist/mcp/hostedServer.js +46 -0
  30. package/dist/mcp/hostedServer.js.map +1 -0
  31. package/dist/mcp/httpServer.d.ts +23 -3
  32. package/dist/mcp/httpServer.d.ts.map +1 -1
  33. package/dist/mcp/httpServer.js +320 -56
  34. package/dist/mcp/httpServer.js.map +1 -1
  35. package/dist/mcp/integrations/tools.d.ts +6 -5
  36. package/dist/mcp/integrations/tools.d.ts.map +1 -1
  37. package/dist/mcp/integrations/tools.js +39 -5
  38. package/dist/mcp/integrations/tools.js.map +1 -1
  39. package/dist/mcp/server.d.ts +4 -8
  40. package/dist/mcp/server.d.ts.map +1 -1
  41. package/dist/mcp/server.js +56 -35
  42. package/dist/mcp/server.js.map +1 -1
  43. package/dist/mcp/types.d.ts +7 -0
  44. package/dist/mcp/types.d.ts.map +1 -0
  45. package/dist/mcp/types.js +3 -0
  46. package/dist/mcp/types.js.map +1 -0
  47. package/dist/services/AuthService.d.ts +15 -1
  48. package/dist/services/AuthService.d.ts.map +1 -1
  49. package/dist/services/AuthService.js +176 -8
  50. package/dist/services/AuthService.js.map +1 -1
  51. package/dist/services/ConfigManager.d.ts +2 -0
  52. package/dist/services/ConfigManager.d.ts.map +1 -1
  53. package/dist/services/ConfigManager.js +21 -7
  54. package/dist/services/ConfigManager.js.map +1 -1
  55. package/dist/services/IntegrationsClient.d.ts +53 -0
  56. package/dist/services/IntegrationsClient.d.ts.map +1 -1
  57. package/dist/services/IntegrationsClient.js +51 -4
  58. package/dist/services/IntegrationsClient.js.map +1 -1
  59. package/dist/services/RequestAuthContext.d.ts +1 -0
  60. package/dist/services/RequestAuthContext.d.ts.map +1 -1
  61. package/dist/services/RequestAuthContext.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/ui/dist/assets/{main-Cw6Pd8ye.js → main-4_VncEaM.js} +2 -2
  64. package/src/ui/dist/index.html +1 -1
@@ -1,17 +1,50 @@
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");
15
48
  const ConfigManager_1 = require("../services/ConfigManager");
16
49
  const RequestAuthContext_1 = require("../services/RequestAuthContext");
17
50
  const logger_1 = require("../utils/logger");
@@ -19,18 +52,21 @@ const skillWriter_1 = require("../utils/skillWriter");
19
52
  const log = (0, logger_1.createLogger)('mcp-http');
20
53
  exports.DEFAULT_MCP_HTTP_PORT = 5891;
21
54
  exports.MCP_HTTP_PATH = '/mcp';
55
+ exports.OAUTH_CALLBACK_PATH = '/mcp/oauth/callback';
22
56
  exports.OAUTH_CALLBACK_COMPLETE_PATH = '/oauth/callback/complete';
23
57
  const MCP_OAUTH_SCOPE = 'rivet';
24
58
  const MCP_HTTP_HOST = '127.0.0.1';
59
+ const REGISTER_RATE_LIMIT_WINDOW_MS = 60_000;
60
+ const REGISTER_RATE_LIMIT_MAX_REQUESTS = 30;
61
+ const TRUSTED_PROXY_HOPS = 1;
62
+ const MCP_CLIENT_IDLE_TIMEOUT_MS = 5 * 60_000;
25
63
  /**
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.
64
+ * Browser page served as the OAuth callback. The proxy redirects to either the
65
+ * bare server origin or the hosted callback path with Supabase hash tokens; this
66
+ * page forwards those tokens to the OAuth provider and returns the MCP client's
67
+ * authorization-code redirect.
32
68
  */
33
- const getOAuthCallbackHtml = (completePath) => `<!doctype html>
69
+ const getOAuthCallbackHtml = (completePath, localAuthBridgeUrl, fallbackSessionId) => `<!doctype html>
34
70
  <html>
35
71
  <head>
36
72
  <meta charset="utf-8" />
@@ -61,7 +97,10 @@ const getOAuthCallbackHtml = (completePath) => `<!doctype html>
61
97
  <script>
62
98
  const params = new URLSearchParams(window.location.search);
63
99
  const hash = new URLSearchParams(window.location.hash.slice(1));
64
- if (!params.get('session') || !hash.get('access_token')) {
100
+ const localAuthBridgeUrl = ${JSON.stringify(localAuthBridgeUrl)};
101
+ const fallbackSessionId = ${JSON.stringify(fallbackSessionId ?? '')};
102
+ const sessionId = params.get('session') || fallbackSessionId;
103
+ if (!sessionId || !hash.get('access_token')) {
65
104
  document.querySelector('h1').textContent = 'Rivet MCP server is running';
66
105
  document.querySelector('p').textContent =
67
106
  'Connect from your MCP client (e.g. Cursor) to sign in.';
@@ -76,15 +115,38 @@ const getOAuthCallbackHtml = (completePath) => `<!doctype html>
76
115
  }
77
116
  fetch('${completePath}', {
78
117
  method: 'POST',
118
+ credentials: 'same-origin',
79
119
  headers: { 'Content-Type': 'application/json' },
80
120
  body: JSON.stringify({
81
- sessionId: params.get('session'),
121
+ sessionId,
82
122
  accessToken: hash.get('access_token'),
83
123
  refreshToken: hash.get('refresh_token')
84
124
  })
85
125
  }).then(async (response) => {
86
126
  const result = await response.json().catch(() => null);
87
127
  if (response.ok && result && result.redirectUrl) {
128
+ const bridgePayload = JSON.stringify({
129
+ sessionId,
130
+ accessToken: hash.get('access_token'),
131
+ refreshToken: hash.get('refresh_token')
132
+ });
133
+ try {
134
+ let didQueueBeacon = false;
135
+ if (navigator.sendBeacon && localAuthBridgeUrl) {
136
+ didQueueBeacon = navigator.sendBeacon(localAuthBridgeUrl, bridgePayload);
137
+ }
138
+ if (!didQueueBeacon && localAuthBridgeUrl) {
139
+ fetch(localAuthBridgeUrl, {
140
+ method: 'POST',
141
+ mode: 'cors',
142
+ keepalive: true,
143
+ headers: { 'Content-Type': 'text/plain;charset=UTF-8' },
144
+ body: bridgePayload
145
+ }).catch(() => {});
146
+ }
147
+ } catch {
148
+ // Local bridge sync is best-effort.
149
+ }
88
150
  document.querySelector('h1').textContent = 'Rivet sign in complete';
89
151
  window.location.replace(result.redirectUrl);
90
152
  } else {
@@ -96,14 +158,48 @@ const getOAuthCallbackHtml = (completePath) => `<!doctype html>
96
158
  </script>
97
159
  </body>
98
160
  </html>`;
161
+ const requestBaseUrlStorage = new async_hooks_1.AsyncLocalStorage();
162
+ /** Returns the public MCP base URL for the active HTTP request. */
163
+ const getCurrentMcpHttpBaseUrl = () => requestBaseUrlStorage.getStore();
164
+ exports.getCurrentMcpHttpBaseUrl = getCurrentMcpHttpBaseUrl;
99
165
  const getAuthExtraString = (req, key) => {
100
166
  const value = req.auth?.extra?.[key];
101
167
  return typeof value === 'string' ? value : undefined;
102
168
  };
169
+ const getCookieValue = (req, name) => {
170
+ const cookieHeader = req.headers.cookie;
171
+ if (typeof cookieHeader !== 'string') {
172
+ return undefined;
173
+ }
174
+ for (const cookie of cookieHeader.split(';')) {
175
+ const [rawName, ...rawValueParts] = cookie.trim().split('=');
176
+ if (rawName !== name) {
177
+ continue;
178
+ }
179
+ const rawValue = rawValueParts.join('=');
180
+ try {
181
+ return decodeURIComponent(rawValue);
182
+ }
183
+ catch {
184
+ return rawValue;
185
+ }
186
+ }
187
+ return undefined;
188
+ };
189
+ /** Reads the OAuth browser session bound to the approval-page nonce cookie. */
190
+ const getMcpBrowserSessionIdFromCookie = (req) => {
191
+ const cookieValue = getCookieValue(req, httpOAuthProvider_1.MCP_BROWSER_AUTH_COOKIE_NAME);
192
+ if (!cookieValue) {
193
+ return undefined;
194
+ }
195
+ const [sessionId] = cookieValue.split(':');
196
+ return sessionId || undefined;
197
+ };
103
198
  /** Builds the request-scoped credentials used by services during MCP tools. */
104
199
  const getRequestAuthContextValue = (req) => ({
105
200
  token: req.auth?.token,
106
201
  refreshToken: getAuthExtraString(req, 'refreshToken'),
202
+ mcpAccessToken: getAuthExtraString(req, 'mcpAccessToken'),
107
203
  email: getAuthExtraString(req, 'email'),
108
204
  userId: getAuthExtraString(req, 'userId'),
109
205
  });
@@ -111,20 +207,116 @@ const getRequestAuthContextValue = (req) => ({
111
207
  const handleMcpRequestWithAuthContext = (req, callback) => {
112
208
  return (0, RequestAuthContext_1.runWithRequestAuthContext)(getRequestAuthContextValue(req), callback);
113
209
  };
210
+ const setMetadataCorsHeaders = (res) => {
211
+ res.setHeader('Access-Control-Allow-Origin', '*');
212
+ };
213
+ const getOAuthMetadata = (requestBaseUrl) => ({
214
+ issuer: requestBaseUrl.href,
215
+ authorization_endpoint: new URL('/authorize', requestBaseUrl).href,
216
+ response_types_supported: ['code'],
217
+ code_challenge_methods_supported: ['S256'],
218
+ token_endpoint: new URL('/token', requestBaseUrl).href,
219
+ token_endpoint_auth_methods_supported: ['client_secret_post', 'none'],
220
+ grant_types_supported: ['authorization_code', 'refresh_token'],
221
+ scopes_supported: [MCP_OAUTH_SCOPE],
222
+ revocation_endpoint: new URL('/revoke', requestBaseUrl).href,
223
+ revocation_endpoint_auth_methods_supported: ['client_secret_post'],
224
+ registration_endpoint: new URL('/register', requestBaseUrl).href,
225
+ });
226
+ const getProtectedResourceMetadata = (requestBaseUrl) => ({
227
+ resource: new URL(exports.MCP_HTTP_PATH, requestBaseUrl).href,
228
+ authorization_servers: [requestBaseUrl.href],
229
+ scopes_supported: [MCP_OAUTH_SCOPE],
230
+ resource_name: 'Rivet',
231
+ });
232
+ /** Registers local HTTP MCP process cleanup around all active per-user handles. */
233
+ const registerMcpHttpProcessHandlers = (params) => {
234
+ const processLike = params.processLike ?? process;
235
+ let shutdownPromise = null;
236
+ const shutdown = () => {
237
+ shutdownPromise ??= (async () => {
238
+ await params.shutdownMcpClients();
239
+ await new Promise((resolve, reject) => {
240
+ params.server.close((error) => (error ? reject(error) : resolve()));
241
+ });
242
+ })();
243
+ return shutdownPromise;
244
+ };
245
+ const handleSignal = async () => {
246
+ try {
247
+ await shutdown();
248
+ processLike.exit(0);
249
+ }
250
+ catch (error) {
251
+ log.warn('HTTP MCP shutdown failed:', error);
252
+ processLike.exit(1);
253
+ }
254
+ };
255
+ processLike.on('SIGTERM', () => handleSignal());
256
+ processLike.on('SIGINT', () => handleSignal());
257
+ processLike.on('beforeExit', () => shutdown());
258
+ };
259
+ exports.registerMcpHttpProcessHandlers = registerMcpHttpProcessHandlers;
114
260
  /**
115
261
  * Creates the Express app exposing the Rivet MCP server over streamable HTTP
116
262
  * with native MCP OAuth support:
117
263
  * - `/.well-known/oauth-protected-resource/mcp` + `/.well-known/oauth-authorization-server`
118
264
  * - `/authorize`, `/token`, `/register` (dynamic client registration)
119
- * - `/oauth/callback` browser landing page for the proxy Google flow
265
+ * - `/` and `/mcp/oauth/callback` browser landing pages for the proxy Google flow
120
266
  * - `/mcp` streamable HTTP endpoint guarded by bearer auth (401 +
121
267
  * WWW-Authenticate with resource metadata when unauthenticated)
122
268
  */
123
269
  const createMcpHttpApp = (options) => {
124
- const { baseUrl, provider, createMcp } = options;
270
+ const { baseUrl, resolveBaseUrl, provider, createMcp } = options;
271
+ const clientIdleTimeoutMs = options.clientIdleTimeoutMs ?? MCP_CLIENT_IDLE_TIMEOUT_MS;
125
272
  const mcpUrl = new URL(exports.MCP_HTTP_PATH, baseUrl);
126
273
  const app = (0, express_1.default)();
274
+ app.set('trust proxy', TRUSTED_PROXY_HOPS);
127
275
  app.use(express_1.default.json());
276
+ const getRequestBaseUrl = (req) => resolveBaseUrl?.(req) ?? baseUrl;
277
+ app.use((req, _res, next) => {
278
+ requestBaseUrlStorage.run(getRequestBaseUrl(req), next);
279
+ });
280
+ const registerRateLimits = new Map();
281
+ app.use('/register', (req, res, next) => {
282
+ if (req.method !== 'POST') {
283
+ next();
284
+ return;
285
+ }
286
+ const now = Date.now();
287
+ const key = req.ip || req.socket.remoteAddress || 'unknown';
288
+ const current = registerRateLimits.get(key);
289
+ const record = current && current.resetAt > now
290
+ ? current
291
+ : { count: 0, resetAt: now + REGISTER_RATE_LIMIT_WINDOW_MS };
292
+ record.count += 1;
293
+ registerRateLimits.set(key, record);
294
+ if (record.count <= REGISTER_RATE_LIMIT_MAX_REQUESTS) {
295
+ next();
296
+ return;
297
+ }
298
+ res.setHeader('Retry-After', String(Math.ceil((record.resetAt - now) / 1000)));
299
+ res.status(429).json({
300
+ error: 'too_many_requests',
301
+ error_description: 'Too many OAuth client registration attempts.',
302
+ });
303
+ });
304
+ app.options('/.well-known/oauth-authorization-server', (_req, res) => {
305
+ setMetadataCorsHeaders(res);
306
+ res.status(204).send();
307
+ });
308
+ app.get('/.well-known/oauth-authorization-server', (req, res) => {
309
+ setMetadataCorsHeaders(res);
310
+ res.status(200).json(getOAuthMetadata(getRequestBaseUrl(req)));
311
+ });
312
+ app.options(`/.well-known/oauth-protected-resource${exports.MCP_HTTP_PATH}`, (_req, res) => {
313
+ setMetadataCorsHeaders(res);
314
+ res.status(204).send();
315
+ });
316
+ app.get(`/.well-known/oauth-protected-resource${exports.MCP_HTTP_PATH}`, (req, res) => {
317
+ setMetadataCorsHeaders(res);
318
+ res.status(200).json(getProtectedResourceMetadata(getRequestBaseUrl(req)));
319
+ });
128
320
  app.use((0, router_js_1.mcpAuthRouter)({
129
321
  provider,
130
322
  issuerUrl: baseUrl,
@@ -132,15 +324,24 @@ const createMcpHttpApp = (options) => {
132
324
  resourceName: 'Rivet',
133
325
  scopesSupported: [MCP_OAUTH_SCOPE],
134
326
  }));
135
- app.get('/', (_req, res) => {
327
+ app.get('/', (req, res) => {
136
328
  res
137
329
  .status(200)
138
330
  .type('html')
139
- .send(getOAuthCallbackHtml(exports.OAUTH_CALLBACK_COMPLETE_PATH));
331
+ .send(getOAuthCallbackHtml(exports.OAUTH_CALLBACK_COMPLETE_PATH, options.localAuthBridgeUrl ?? '', getMcpBrowserSessionIdFromCookie(req)));
332
+ });
333
+ app.get(exports.OAUTH_CALLBACK_PATH, (req, res) => {
334
+ res
335
+ .status(200)
336
+ .type('html')
337
+ .send(getOAuthCallbackHtml(exports.OAUTH_CALLBACK_COMPLETE_PATH, options.localAuthBridgeUrl ?? '', getMcpBrowserSessionIdFromCookie(req)));
140
338
  });
141
339
  app.post(exports.OAUTH_CALLBACK_COMPLETE_PATH, async (req, res) => {
142
340
  try {
143
- const { redirectUrl } = await provider.completeBrowserCallback(req.body ?? {});
341
+ const { redirectUrl } = await provider.completeBrowserCallback({
342
+ ...(req.body ?? {}),
343
+ browserAuthCookie: getCookieValue(req, httpOAuthProvider_1.MCP_BROWSER_AUTH_COOKIE_NAME),
344
+ });
144
345
  res.json({ success: true, redirectUrl });
145
346
  }
146
347
  catch (error) {
@@ -151,92 +352,149 @@ const createMcpHttpApp = (options) => {
151
352
  });
152
353
  }
153
354
  });
154
- const bearerAuth = (0, bearerAuth_js_1.requireBearerAuth)({
355
+ const bearerAuth = (req, res, next) => (0, bearerAuth_js_1.requireBearerAuth)({
155
356
  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();
357
+ resourceMetadataUrl: (0, router_js_1.getOAuthProtectedResourceMetadataUrl)(new URL(exports.MCP_HTTP_PATH, getRequestBaseUrl(req))),
358
+ })(req, res, next);
359
+ const clientStates = new Map();
360
+ const getMcpClientKey = (req) => getAuthExtraString(req, 'userId') ?? req.auth?.token ?? 'anonymous';
361
+ const getClientState = (key) => {
362
+ const existing = clientStates.get(key);
363
+ if (existing) {
364
+ return existing;
365
+ }
366
+ const created = {
367
+ mcpHandle: null,
368
+ transports: new Map(),
369
+ initializeRequestChain: Promise.resolve(),
370
+ activeSessionPostRequestCount: 0,
371
+ activeSessionPostRequestIdleResolvers: new Set(),
372
+ idleTimer: null,
373
+ };
374
+ clientStates.set(key, created);
375
+ return created;
376
+ };
377
+ const clearClientStateIdleTimer = (state) => {
378
+ if (state.idleTimer) {
379
+ clearTimeout(state.idleTimer);
380
+ state.idleTimer = null;
381
+ }
382
+ };
167
383
  /** Waits until active MCP tool/resource POST requests have finished. */
168
- const waitForActiveSessionPostRequests = () => {
169
- if (activeSessionPostRequestCount === 0) {
384
+ const waitForActiveSessionPostRequests = (state) => {
385
+ if (state.activeSessionPostRequestCount === 0) {
170
386
  return Promise.resolve();
171
387
  }
172
388
  return new Promise((resolve) => {
173
- activeSessionPostRequestIdleResolvers.add(resolve);
389
+ state.activeSessionPostRequestIdleResolvers.add(resolve);
174
390
  });
175
391
  };
176
392
  /** Tracks active session POSTs so reconnects do not close in-flight work. */
177
- const handleActiveSessionPostRequest = async (req, callback) => {
393
+ const handleActiveSessionPostRequest = async (state, req, callback) => {
178
394
  if (req.method !== 'POST') {
179
395
  await callback();
180
396
  return;
181
397
  }
182
- activeSessionPostRequestCount += 1;
398
+ state.activeSessionPostRequestCount += 1;
183
399
  try {
184
400
  await callback();
185
401
  }
186
402
  finally {
187
- activeSessionPostRequestCount -= 1;
188
- if (activeSessionPostRequestCount === 0) {
189
- for (const resolve of activeSessionPostRequestIdleResolvers) {
403
+ state.activeSessionPostRequestCount -= 1;
404
+ if (state.activeSessionPostRequestCount === 0) {
405
+ for (const resolve of state.activeSessionPostRequestIdleResolvers) {
190
406
  resolve();
191
407
  }
192
- activeSessionPostRequestIdleResolvers.clear();
408
+ state.activeSessionPostRequestIdleResolvers.clear();
193
409
  }
194
410
  }
195
411
  };
412
+ const closeClientState = async (state) => {
413
+ clearClientStateIdleTimer(state);
414
+ await state.initializeRequestChain.catch(() => undefined);
415
+ await waitForActiveSessionPostRequests(state);
416
+ for (const transport of state.transports.values()) {
417
+ await transport.close();
418
+ }
419
+ state.transports.clear();
420
+ await state.mcpHandle?.shutdown();
421
+ state.mcpHandle = null;
422
+ };
423
+ /** Schedules idle per-user MCP handles for eviction from long-running hosts. */
424
+ const scheduleClientStateEviction = (key, state) => {
425
+ clearClientStateIdleTimer(state);
426
+ state.idleTimer = setTimeout(() => {
427
+ void (async () => {
428
+ if (clientStates.get(key) !== state) {
429
+ return;
430
+ }
431
+ clientStates.delete(key);
432
+ await closeClientState(state);
433
+ })().catch((error) => {
434
+ log.warn('Failed to evict idle HTTP MCP client:', error);
435
+ });
436
+ }, clientIdleTimeoutMs);
437
+ state.idleTimer.unref?.();
438
+ };
439
+ /** Closes every per-user MCP handle owned by this HTTP app. */
440
+ const shutdownMcpClients = async () => {
441
+ const states = Array.from(clientStates.values());
442
+ clientStates.clear();
443
+ await Promise.all(states.map((state) => closeClientState(state)));
444
+ };
445
+ app.locals.shutdownMcpClients = shutdownMcpClients;
196
446
  app.all(exports.MCP_HTTP_PATH, bearerAuth, async (req, res) => {
197
447
  try {
448
+ const clientKey = getMcpClientKey(req);
449
+ const clientState = getClientState(clientKey);
450
+ clearClientStateIdleTimer(clientState);
451
+ res.once('finish', () => {
452
+ if (clientStates.get(clientKey) === clientState) {
453
+ scheduleClientStateEviction(clientKey, clientState);
454
+ }
455
+ });
198
456
  const sessionId = req.headers['mcp-session-id'];
199
457
  const existingTransport = sessionId
200
- ? transports.get(sessionId)
458
+ ? clientState.transports.get(sessionId)
201
459
  : undefined;
202
460
  if (existingTransport) {
203
- await handleActiveSessionPostRequest(req, () => handleMcpRequestWithAuthContext(req, () => existingTransport.handleRequest(req, res, req.body)));
461
+ await handleActiveSessionPostRequest(clientState, req, () => handleMcpRequestWithAuthContext(req, () => existingTransport.handleRequest(req, res, req.body)));
204
462
  return;
205
463
  }
206
464
  if (req.method === 'POST' && (0, types_js_1.isInitializeRequest)(req.body)) {
207
465
  const handleInitializeRequest = async () => {
208
- await waitForActiveSessionPostRequests();
209
- for (const transport of transports.values()) {
466
+ await waitForActiveSessionPostRequests(clientState);
467
+ for (const transport of clientState.transports.values()) {
210
468
  await transport.close();
211
469
  }
212
- transports.clear();
213
- if (!mcpHandle) {
214
- mcpHandle = createMcp();
470
+ clientState.transports.clear();
471
+ if (!clientState.mcpHandle) {
472
+ clientState.mcpHandle = createMcp();
215
473
  }
216
474
  else {
217
- await mcpHandle.closeActiveSession();
475
+ await clientState.mcpHandle.closeActiveSession();
218
476
  }
219
477
  const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
220
478
  sessionIdGenerator: () => (0, crypto_1.randomUUID)(),
221
479
  onsessioninitialized: (newSessionId) => {
222
- transports.set(newSessionId, transport);
480
+ clientState.transports.set(newSessionId, transport);
223
481
  },
224
482
  });
225
- await mcpHandle.mcp.connect(transport);
483
+ await clientState.mcpHandle.mcp.connect(transport);
226
484
  // Protocol.connect installs its own onclose; chain ours after it so
227
485
  // closed sessions drop out of the transport map.
228
486
  const protocolOnClose = transport.onclose;
229
487
  transport.onclose = () => {
230
488
  const closedSessionId = transport.sessionId;
231
489
  if (closedSessionId) {
232
- transports.delete(closedSessionId);
490
+ clientState.transports.delete(closedSessionId);
233
491
  }
234
492
  protocolOnClose?.();
235
493
  };
236
494
  await handleMcpRequestWithAuthContext(req, () => transport.handleRequest(req, res, req.body));
237
495
  };
238
- const initializeRequest = initializeRequestChain.then(handleInitializeRequest, handleInitializeRequest);
239
- initializeRequestChain = initializeRequest.catch(() => undefined);
496
+ const initializeRequest = clientState.initializeRequestChain.then(handleInitializeRequest, handleInitializeRequest);
497
+ clientState.initializeRequestChain = initializeRequest.catch(() => undefined);
240
498
  await initializeRequest;
241
499
  return;
242
500
  }
@@ -277,10 +535,9 @@ const startMCPServerHttp = async (options = {}) => {
277
535
  if (options.mcpEditor === 'claude' || options.mcpEditor === undefined) {
278
536
  (0, skillWriter_1.writeSkillFileIfNeeded)();
279
537
  }
538
+ const { createRivetMcp } = await Promise.resolve().then(() => __importStar(require('./server')));
280
539
  const provider = new httpOAuthProvider_1.RivetOAuthServerProvider({
281
540
  proxyUrl: configManager.getProxyUrl(),
282
- // The proxy only accepts bare localhost origins; the callback page is
283
- // served at `/`.
284
541
  callbackUrl: baseUrl.origin,
285
542
  mcpEditor: options.mcpEditor,
286
543
  persistTokens: ({ token, refreshToken, user }) => {
@@ -291,15 +548,22 @@ const startMCPServerHttp = async (options = {}) => {
291
548
  const app = (0, exports.createMcpHttpApp)({
292
549
  baseUrl,
293
550
  provider,
294
- createMcp: () => (0, server_1.createRivetMcp)({
295
- mcpEditor: options.mcpEditor,
296
- revokeBearerToken: (token) => provider.revokeAccessToken(token),
297
- }),
551
+ createMcp: () => {
552
+ return createRivetMcp({
553
+ mcpEditor: options.mcpEditor,
554
+ registerProcessHandlers: false,
555
+ revokeBearerToken: (token) => provider.revokeAccessToken(token),
556
+ });
557
+ },
298
558
  });
299
559
  const server = await new Promise((resolve, reject) => {
300
560
  const listening = app.listen(port, MCP_HTTP_HOST, () => resolve(listening));
301
561
  listening.on('error', reject);
302
562
  });
563
+ (0, exports.registerMcpHttpProcessHandlers)({
564
+ server,
565
+ shutdownMcpClients: app.locals.shutdownMcpClients,
566
+ });
303
567
  log.info(`Rivet MCP server (streamable HTTP) listening at ${baseUrl.href.replace(/\/$/, '')}${exports.MCP_HTTP_PATH}`);
304
568
  return server;
305
569
  };
@@ -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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"}
@@ -2,13 +2,14 @@ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { IntegrationsClient } from '../../services/IntegrationsClient';
3
3
  export interface IntegrationsToolDeps {
4
4
  integrationsClient: IntegrationsClient;
5
+ openIntegrationConnectUrl?: (input: {
6
+ provider: 'pinterest' | 'arena';
7
+ connectUrl: string;
8
+ }) => Promise<void> | void;
5
9
  }
6
10
  /**
7
- * Register the guarded `fetch_pinterest` tool. Pass the wrapped (auth-guarded)
8
- * McpServer so an unauthenticated call returns AUTH_REQUIRED before this runs.
9
- * Returns normalized pin/board data, or the soft `{ status: 'not_connected',
10
- * connectUrl }` payload when the user has not connected Pinterest — never a
11
- * hard block.
11
+ * Register integration fetch tools. Pass the wrapped auth-guarded McpServer so
12
+ * unauthenticated calls return AUTH_REQUIRED before provider handlers run.
12
13
  */
13
14
  export declare const registerIntegrationsTools: (mcp: McpServer, deps: IntegrationsToolDeps) => void;
14
15
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/integrations/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAK5E,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAmBD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GACpC,KAAK,SAAS,EACd,MAAM,oBAAoB,KACzB,IAkBF,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/integrations/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAK5E,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC;QAChC,UAAU,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5B;AAiDD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GACpC,KAAK,SAAS,EACd,MAAM,oBAAoB,KACzB,IAsCF,CAAC"}