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.
- package/dist/config/flags.d.ts +3 -0
- package/dist/config/flags.d.ts.map +1 -1
- package/dist/config/flags.js +4 -0
- package/dist/config/flags.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/mcp/auth/httpOAuthProvider.d.ts +12 -12
- package/dist/mcp/auth/httpOAuthProvider.d.ts.map +1 -1
- package/dist/mcp/auth/httpOAuthProvider.js +348 -67
- package/dist/mcp/auth/httpOAuthProvider.js.map +1 -1
- package/dist/mcp/auth/tools.d.ts +1 -0
- package/dist/mcp/auth/tools.d.ts.map +1 -1
- package/dist/mcp/auth/tools.js +31 -10
- package/dist/mcp/auth/tools.js.map +1 -1
- package/dist/mcp/branding.d.ts +4 -0
- package/dist/mcp/branding.d.ts.map +1 -0
- package/dist/mcp/branding.js +8 -0
- package/dist/mcp/branding.js.map +1 -0
- package/dist/mcp/hostedServer.d.ts +27 -0
- package/dist/mcp/hostedServer.d.ts.map +1 -0
- package/dist/mcp/hostedServer.js +64 -0
- package/dist/mcp/hostedServer.js.map +1 -0
- package/dist/mcp/httpServer.d.ts +30 -3
- package/dist/mcp/httpServer.d.ts.map +1 -1
- package/dist/mcp/httpServer.js +351 -56
- package/dist/mcp/httpServer.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -8
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +43 -34
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/types.d.ts +7 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +3 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/services/AuthService.d.ts +15 -1
- package/dist/services/AuthService.d.ts.map +1 -1
- package/dist/services/AuthService.js +176 -8
- package/dist/services/AuthService.js.map +1 -1
- package/dist/services/ConfigManager.d.ts +2 -0
- package/dist/services/ConfigManager.d.ts.map +1 -1
- package/dist/services/ConfigManager.js +21 -7
- package/dist/services/ConfigManager.js.map +1 -1
- package/dist/services/IntegrationsClient.d.ts.map +1 -1
- package/dist/services/IntegrationsClient.js +15 -4
- package/dist/services/IntegrationsClient.js.map +1 -1
- package/dist/services/RequestAuthContext.d.ts +1 -0
- package/dist/services/RequestAuthContext.d.ts.map +1 -1
- package/dist/services/RequestAuthContext.js.map +1 -1
- package/package.json +3 -3
- package/src/ui/dist/assets/main-Dwk5LfCC.js +641 -0
- package/src/ui/dist/assets/main-E5hevKg2.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/src/ui/dist/assets/main-DkCj7b2K.css +0 -1
- package/src/ui/dist/assets/main-n7zyCCGw.js +0 -645
package/dist/mcp/httpServer.js
CHANGED
|
@@ -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
|
|
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
|
|
27
|
-
* bare
|
|
28
|
-
*
|
|
29
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
|
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('/', (
|
|
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(
|
|
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)(
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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: () =>
|
|
295
|
-
|
|
296
|
-
|
|
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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"}
|