rivet-design 0.11.1 → 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.
- 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/hostedServer.d.ts +13 -0
- package/dist/mcp/hostedServer.d.ts.map +1 -0
- package/dist/mcp/hostedServer.js +46 -0
- package/dist/mcp/hostedServer.js.map +1 -0
- package/dist/mcp/httpServer.d.ts +23 -3
- package/dist/mcp/httpServer.d.ts.map +1 -1
- package/dist/mcp/httpServer.js +320 -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 +1 -1
- package/src/ui/dist/assets/{main-n7zyCCGw.js → main-4_VncEaM.js} +2 -2
- package/src/ui/dist/index.html +1 -1
package/dist/mcp/httpServer.js
CHANGED
|
@@ -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
|
|
27
|
-
* bare
|
|
28
|
-
*
|
|
29
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
|
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('/', (
|
|
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(
|
|
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)(
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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: () =>
|
|
295
|
-
|
|
296
|
-
|
|
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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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
1
|
import { type ImageContent } from './changeBatchClassification';
|
|
3
2
|
import type { ChangeRequest, StaticPreviewChangeTarget } from '../types/change-request-types';
|
|
3
|
+
import type { RivetMcpHandle } from './types';
|
|
4
4
|
/**
|
|
5
5
|
* Watches for MCP clients disappearing without closing stdio cleanly.
|
|
6
6
|
* A parent PID transition to init means the original client process is gone
|
|
@@ -34,20 +34,16 @@ export declare const buildMixedVariantBatchResponse: (rejectedRequest: ChangeReq
|
|
|
34
34
|
export declare const buildVariantRequestBatchResponse: (consumedRequest: ChangeRequest | null | undefined) => MCPChangeResponse;
|
|
35
35
|
export declare const collectStaticPreviewRefineTargetInstructions: (request: ChangeRequest) => StaticPreviewRefineTargetInstruction[];
|
|
36
36
|
export declare const buildStaticPreviewRefineResponse: (consumedRequest: ChangeRequest | null | undefined) => MCPChangeResponse;
|
|
37
|
-
export type RivetMcpHandle = {
|
|
38
|
-
mcp: McpServer;
|
|
39
|
-
closeActiveSession: () => Promise<void>;
|
|
40
|
-
shutdown: () => Promise<void>;
|
|
41
|
-
};
|
|
42
37
|
export type RivetMcpOptions = {
|
|
43
38
|
mcpEditor?: string;
|
|
44
39
|
revokeBearerToken?: (token: string) => void;
|
|
40
|
+
registerProcessHandlers?: boolean;
|
|
45
41
|
};
|
|
46
42
|
/**
|
|
47
43
|
* Builds the fully configured Rivet MCP server (tools, auth gating, session
|
|
48
44
|
* bridge, telemetry) without binding it to a transport. Shared by the stdio
|
|
49
|
-
* and streamable-HTTP entry points.
|
|
50
|
-
*
|
|
45
|
+
* and streamable-HTTP entry points. By default it registers process-level
|
|
46
|
+
* signal handlers for stdio cleanup; HTTP hosts own shutdown externally.
|
|
51
47
|
*/
|
|
52
48
|
export declare const createRivetMcp: (options?: RivetMcpOptions) => RivetMcpHandle;
|
|
53
49
|
export declare const startMCPServer: (mcpEditor?: string) => Promise<void>;
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAiDA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,aAAa,EAEb,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA0F9C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ;IAChD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,KAAG,CAAC,MAAM,IAAI,CAyBd,CAAC;AAiXF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,KAAK,oCAAoC,GAAG;IAC1C,MAAM,EAAE,yBAAyB,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAeF,eAAO,MAAM,8BAA8B,GACzC,iBAAiB,aAAa,GAAG,IAAI,GAAG,SAAS,KAChD,eAmBF,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,iBAAiB,aAAa,GAAG,IAAI,GAAG,SAAS,KAChD,iBAqBF,CAAC;AAWF,eAAO,MAAM,4CAA4C,GACvD,SAAS,aAAa,KACrB,oCAAoC,EAqBtC,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,iBAAiB,aAAa,GAAG,IAAI,GAAG,SAAS,KAChD,iBA0BF,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU,eAAe,KAAG,cA6wC1D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAqCrE,CAAC"}
|