@ni-c/mcp-hub 0.9.1 → 0.10.0
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/CHANGELOG.md +258 -0
- package/README.md +114 -53
- package/dist/admin.js +231 -7
- package/dist/admin.js.map +1 -1
- package/dist/auth/address.js +89 -0
- package/dist/auth/address.js.map +1 -0
- package/dist/auth/cimd.js +367 -0
- package/dist/auth/cimd.js.map +1 -0
- package/dist/auth/consent-page.js +4 -7
- package/dist/auth/consent-page.js.map +1 -1
- package/dist/auth/login-page.js +4 -7
- package/dist/auth/login-page.js.map +1 -1
- package/dist/auth/page.js +22 -0
- package/dist/auth/page.js.map +1 -1
- package/dist/auth/pinned-fetch.js +129 -0
- package/dist/auth/pinned-fetch.js.map +1 -0
- package/dist/auth/private-key-jwt.js +213 -0
- package/dist/auth/private-key-jwt.js.map +1 -0
- package/dist/auth/provider.js +102 -45
- package/dist/auth/provider.js.map +1 -1
- package/dist/auth/rate-limit.js +43 -0
- package/dist/auth/rate-limit.js.map +1 -0
- package/dist/auth/redirect-uri.js +58 -0
- package/dist/auth/redirect-uri.js.map +1 -0
- package/dist/auth/registration.js +146 -0
- package/dist/auth/registration.js.map +1 -0
- package/dist/auth/routes.js +67 -41
- package/dist/auth/routes.js.map +1 -1
- package/dist/auth/signed-token.js +49 -0
- package/dist/auth/signed-token.js.map +1 -0
- package/dist/auth/store.js +357 -5
- package/dist/auth/store.js.map +1 -1
- package/dist/auth/text.js +51 -0
- package/dist/auth/text.js.map +1 -0
- package/dist/config.js +130 -4
- package/dist/config.js.map +1 -1
- package/dist/health.js +22 -3
- package/dist/health.js.map +1 -1
- package/dist/hub.js +28 -0
- package/dist/hub.js.map +1 -1
- package/dist/index.js +132 -12
- package/dist/index.js.map +1 -1
- package/dist/limits.js +36 -9
- package/dist/limits.js.map +1 -1
- package/dist/proxy.js +25 -3
- package/dist/proxy.js.map +1 -1
- package/dist/stdio.js +27 -2
- package/dist/stdio.js.map +1 -1
- package/dist/supervisor.js +152 -8
- package/dist/supervisor.js.map +1 -1
- package/dist/tool-filter.js +58 -0
- package/dist/tool-filter.js.map +1 -0
- package/dist/upstream/auth.js +435 -0
- package/dist/upstream/auth.js.map +1 -0
- package/dist/upstream/login.js +94 -0
- package/dist/upstream/login.js.map +1 -0
- package/dist/upstream/provider.js +286 -0
- package/dist/upstream/provider.js.map +1 -0
- package/dist/upstream/routes.js +96 -0
- package/dist/upstream/routes.js.map +1 -0
- package/package.json +5 -2
package/dist/index.js
CHANGED
|
@@ -3,20 +3,26 @@ import path from 'node:path';
|
|
|
3
3
|
import express from 'express';
|
|
4
4
|
import { requireBearerAuth } from '@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js';
|
|
5
5
|
import { loadConfig, ConfigWatcher, warnMutableDockerImages } from './config.js';
|
|
6
|
-
import { Supervisor } from './supervisor.js';
|
|
6
|
+
import { Supervisor, UpstreamAuthRegistry } from './supervisor.js';
|
|
7
7
|
import { ToolCache } from './tool-cache.js';
|
|
8
8
|
import { warnSingleFileMount } from './mount-check.js';
|
|
9
9
|
import { serverRequestHandler, handleMcpRequest } from './proxy.js';
|
|
10
10
|
import { buildHubServer } from './hub.js';
|
|
11
|
-
import { AuthStore } from './auth/store.js';
|
|
11
|
+
import { AuthStore, DEFAULT_CLIENT_LIMITS } from './auth/store.js';
|
|
12
|
+
import { CimdResolver } from './auth/cimd.js';
|
|
12
13
|
import { HubOAuthProvider } from './auth/provider.js';
|
|
13
14
|
import { createAuthRoutes } from './auth/routes.js';
|
|
15
|
+
import { createUpstreamRoutes } from './upstream/routes.js';
|
|
14
16
|
import { healthHandler } from './health.js';
|
|
15
17
|
import { installFileLogging } from './logfile.js';
|
|
16
18
|
import { canonicalResourceUrl, resourceUrlForRoute } from './auth/resource.js';
|
|
17
19
|
import { ClientRequestGate } from './limits.js';
|
|
18
20
|
import { runStdio } from './stdio.js';
|
|
19
21
|
import { isMainModule } from './main-module.js';
|
|
22
|
+
/** How often the hub looks for registrations that have aged out. The windows
|
|
23
|
+
* are a day and three months, so this only has to be far below those. */
|
|
24
|
+
const CLIENT_PRUNE_INTERVAL_MS = 15 * 60_000;
|
|
25
|
+
export const CLIENT_REGISTRATION_MECHANISMS = ['cimd', 'dcr'];
|
|
20
26
|
export async function createHub(options) {
|
|
21
27
|
// Canonical issuer identifier: URL.href form ('https://host/' for a root
|
|
22
28
|
// URL), so JWT iss/aud, AS metadata issuer and PRM authorization_servers all
|
|
@@ -27,10 +33,16 @@ export async function createHub(options) {
|
|
|
27
33
|
throw new Error('EXTERNAL_URL must be an origin without a path, query or fragment');
|
|
28
34
|
const requestsPerMinute = options.mcpRequestsPerMinute ?? 120;
|
|
29
35
|
const maxConcurrentRequests = options.mcpMaxConcurrentRequests ?? 4;
|
|
36
|
+
// One per connected session, not per unit of work, so the budget is much
|
|
37
|
+
// larger than the in-flight one: a client with several open sessions (an
|
|
38
|
+
// editor, a CLI and a web connector) must not lock itself out.
|
|
39
|
+
const maxConcurrentStreams = options.mcpMaxConcurrentStreams ?? 32;
|
|
30
40
|
if (!Number.isSafeInteger(requestsPerMinute) || requestsPerMinute < 1)
|
|
31
41
|
throw new Error('mcpRequestsPerMinute must be a positive integer');
|
|
32
42
|
if (!Number.isSafeInteger(maxConcurrentRequests) || maxConcurrentRequests < 1)
|
|
33
43
|
throw new Error('mcpMaxConcurrentRequests must be a positive integer');
|
|
44
|
+
if (!Number.isSafeInteger(maxConcurrentStreams) || maxConcurrentStreams < 1)
|
|
45
|
+
throw new Error('mcpMaxConcurrentStreams must be a positive integer');
|
|
34
46
|
if (!/^\d+(?:b|kb|mb)$/i.test(options.mcpBodyLimit ?? '1mb'))
|
|
35
47
|
throw new Error('mcpBodyLimit must use b, kb or mb units');
|
|
36
48
|
// Bound tokens are the default: an unbound token reaches every MCP path, so
|
|
@@ -55,7 +67,25 @@ export async function createHub(options) {
|
|
|
55
67
|
console.warn(`mcp-hub: tool cache ${cache.filePath} is not writable — on-demand servers warm-start at every boot instead of sleeping through it`);
|
|
56
68
|
}
|
|
57
69
|
}
|
|
58
|
-
const
|
|
70
|
+
const clientLimits = {
|
|
71
|
+
maxClients: options.dcrMaxClients ?? DEFAULT_CLIENT_LIMITS.maxClients,
|
|
72
|
+
pendingTtlSeconds: (options.dcrPendingTtlHours ?? 24) * 3600,
|
|
73
|
+
inactiveSeconds: (options.dcrInactiveDays ?? 90) * 86_400
|
|
74
|
+
};
|
|
75
|
+
const store = new AuthStore(options.dataPath, clientLimits);
|
|
76
|
+
// Recorded so `mcp-hub-admin upstream login` can build a redirect URI: the
|
|
77
|
+
// image sets CONFIG_PATH and DATA_PATH, but never EXTERNAL_URL.
|
|
78
|
+
store.rememberExternalUrl(externalUrl);
|
|
79
|
+
// A metadata document has to be fetchable over https by a third party, so
|
|
80
|
+
// this mode cannot work behind a plain-http issuer. Say so at boot rather
|
|
81
|
+
// than at the first login attempt.
|
|
82
|
+
for (const [name, server] of config) {
|
|
83
|
+
if (server.kind === 'remote' && server.oauth?.mode === 'cimd' && new URL(externalUrl).protocol !== 'https:') {
|
|
84
|
+
throw new Error(`Server "${name}": oauth mode "cimd" needs an https EXTERNAL_URL, because the upstream fetches the document`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const upstreamAuth = new UpstreamAuthRegistry(store, externalUrl);
|
|
88
|
+
const supervisor = new Supervisor(config, { idleTimeoutMinutes, cache, upstreamAuth });
|
|
59
89
|
// start() before reapOrphans(): reaping spares the container of any server
|
|
60
90
|
// that is not asleep, so it must see the boot states. Deliberately not
|
|
61
91
|
// awaited: an unreachable Docker endpoint must not hold up the HTTP listener
|
|
@@ -73,11 +103,21 @@ export async function createHub(options) {
|
|
|
73
103
|
});
|
|
74
104
|
watcher.on('error', error => console.error(`mcp-hub: ignoring broken config update: ${error.message}`));
|
|
75
105
|
watcher.start();
|
|
76
|
-
|
|
106
|
+
// Both mechanisms are on by default: CIMD is what the MCP specification now
|
|
107
|
+
// prefers, and dynamic registration is what every client written against the
|
|
108
|
+
// earlier revisions still uses.
|
|
109
|
+
const mechanisms = options.clientRegistration ?? CLIENT_REGISTRATION_MECHANISMS;
|
|
110
|
+
if (mechanisms.length === 0)
|
|
111
|
+
throw new Error('clientRegistration must name at least one mechanism');
|
|
112
|
+
const cimd = mechanisms.includes('cimd')
|
|
113
|
+
? new CimdResolver({ allowedOrigins: options.cimdAllowedOrigins, allowPrivateAddresses: options.cimdAllowPrivateAddresses })
|
|
114
|
+
: undefined;
|
|
77
115
|
const provider = new HubOAuthProvider(store, externalUrl, {
|
|
78
116
|
requireResource,
|
|
79
117
|
resolveResource: resource => canonicalResourceUrl(resource, origin, watcher.current),
|
|
80
|
-
defaultResource: options.defaultResource !== undefined ? resourceUrlForRoute(origin, options.defaultResource) : undefined
|
|
118
|
+
defaultResource: options.defaultResource !== undefined ? resourceUrlForRoute(origin, options.defaultResource) : undefined,
|
|
119
|
+
cimd,
|
|
120
|
+
allowDynamicRegistration: mechanisms.includes('dcr')
|
|
81
121
|
});
|
|
82
122
|
const app = express();
|
|
83
123
|
if (!options.trustedProxies?.length) {
|
|
@@ -90,7 +130,30 @@ export async function createHub(options) {
|
|
|
90
130
|
// A liveness check intentionally carries no topology. Detailed child state
|
|
91
131
|
// lives behind OAuth at /health.
|
|
92
132
|
app.get('/livez', (_req, res) => res.status(200).json({ status: 'ok' }));
|
|
93
|
-
app.use(createAuthRoutes({ provider, externalUrl, passwordHash: options.passwordHash, password: options.password }));
|
|
133
|
+
app.use(createAuthRoutes({ provider, store, externalUrl, passwordHash: options.passwordHash, password: options.password, cimd }));
|
|
134
|
+
// The upstream callback and the hub's own client metadata document. Mounted
|
|
135
|
+
// after the auth routes so it inherits nothing from them but sits ahead of
|
|
136
|
+
// the /:name catch-all.
|
|
137
|
+
app.use(createUpstreamRoutes({ store, provider, registry: upstreamAuth, supervisor, watcher, externalUrl }));
|
|
138
|
+
// Registrations age out on a clock, not on traffic, so this cannot wait for
|
|
139
|
+
// the next write to state.json — an idle hub would never clean up at all.
|
|
140
|
+
// The first pass runs at boot, which is also what gives clients from a state
|
|
141
|
+
// file written before activity was tracked their starting timestamp.
|
|
142
|
+
const sweepClients = () => {
|
|
143
|
+
try {
|
|
144
|
+
const { pending, inactive } = store.pruneClients();
|
|
145
|
+
if (pending.length > 0 || inactive.length > 0) {
|
|
146
|
+
console.log(`mcp-hub: dropped ${pending.length} unconfirmed and ${inactive.length} unused client registration(s)`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.warn(`mcp-hub: could not prune client registrations: ${error.message}`);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
sweepClients();
|
|
154
|
+
const pruneTimer = setInterval(sweepClients, CLIENT_PRUNE_INTERVAL_MS);
|
|
155
|
+
pruneTimer.unref(); // never a reason to keep the process alive
|
|
156
|
+
const stopMaintenance = () => clearInterval(pruneTimer);
|
|
94
157
|
// Bearer auth for the MCP endpoints, advertising the path-scoped RFC 9728
|
|
95
158
|
// metadata document in WWW-Authenticate so clients discover the AS.
|
|
96
159
|
const bearer = (req, res, next) => requireBearerAuth({
|
|
@@ -114,12 +177,12 @@ export async function createHub(options) {
|
|
|
114
177
|
// every authenticated route: bearer first so only authenticated clients
|
|
115
178
|
// create gate state, gate before the resource check so rejected-resource
|
|
116
179
|
// requests count as load too — they cost the same work.
|
|
117
|
-
const gate = new ClientRequestGate(requestsPerMinute, maxConcurrentRequests);
|
|
180
|
+
const gate = new ClientRequestGate(requestsPerMinute, maxConcurrentRequests, maxConcurrentStreams);
|
|
118
181
|
// /health reports the same fleet-wide view as the /hub aggregate — every
|
|
119
182
|
// server's name, state and tool count — so it takes the same resource. A
|
|
120
183
|
// token for one server must not be able to enumerate the others.
|
|
121
184
|
const hubResource = resourceUrlForRoute(origin, 'hub');
|
|
122
|
-
app.get('/health', bearer, gate.
|
|
185
|
+
app.get('/health', bearer, gate.requestMiddleware, requireResourceFor(() => hubResource), healthHandler(supervisor));
|
|
123
186
|
const requireRouteResource = requireResourceFor(req => resourceUrlForRoute(origin, String(req.params.name)));
|
|
124
187
|
const parseMcpJson = express.json({ limit: options.mcpBodyLimit ?? '1mb' });
|
|
125
188
|
const dispatch = (name) => async (req, res, next) => {
|
|
@@ -152,7 +215,7 @@ export async function createHub(options) {
|
|
|
152
215
|
}
|
|
153
216
|
res.status(500).json({ jsonrpc: '2.0', error: { code: -32603, message: 'Internal error' }, id: null });
|
|
154
217
|
});
|
|
155
|
-
return { app, supervisor, watcher, provider, store };
|
|
218
|
+
return { app, supervisor, watcher, provider, store, upstreamAuth, stopMaintenance };
|
|
156
219
|
}
|
|
157
220
|
function requireEnv(name) {
|
|
158
221
|
const value = process.env[name];
|
|
@@ -173,6 +236,44 @@ function positiveIntegerEnv(name, fallback) {
|
|
|
173
236
|
}
|
|
174
237
|
return value;
|
|
175
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* CLIENT_REGISTRATION names the mechanisms a client may use to obtain a
|
|
241
|
+
* client_id, as a comma-separated list. It is deliberately a positive list
|
|
242
|
+
* rather than a "disable" switch: an operator reading their compose file
|
|
243
|
+
* should see what is allowed, not what is not.
|
|
244
|
+
*/
|
|
245
|
+
function clientRegistrationEnv() {
|
|
246
|
+
const raw = process.env.CLIENT_REGISTRATION;
|
|
247
|
+
if (raw === undefined)
|
|
248
|
+
return CLIENT_REGISTRATION_MECHANISMS;
|
|
249
|
+
const values = raw.split(',').map(s => s.trim().toLowerCase()).filter(Boolean);
|
|
250
|
+
const unknown = values.filter(value => !CLIENT_REGISTRATION_MECHANISMS.includes(value));
|
|
251
|
+
if (values.length === 0 || unknown.length > 0) {
|
|
252
|
+
console.error(`mcp-hub: CLIENT_REGISTRATION must be a comma-separated list of ${CLIENT_REGISTRATION_MECHANISMS.join(', ')}`);
|
|
253
|
+
process.exit(1);
|
|
254
|
+
}
|
|
255
|
+
return [...new Set(values)];
|
|
256
|
+
}
|
|
257
|
+
/** Origins are compared verbatim against a client_id's origin, so anything
|
|
258
|
+
* with a path, a query or a non-https scheme is a configuration mistake. */
|
|
259
|
+
function cimdAllowedOriginsEnv() {
|
|
260
|
+
const entries = process.env.CIMD_ALLOWED_ORIGINS?.split(',').map(s => s.trim()).filter(Boolean) ?? [];
|
|
261
|
+
for (const entry of entries) {
|
|
262
|
+
let url;
|
|
263
|
+
try {
|
|
264
|
+
url = new URL(entry);
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
console.error(`mcp-hub: CIMD_ALLOWED_ORIGINS entry "${entry}" is not a URL`);
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
if (url.protocol !== 'https:' || url.origin !== entry.replace(/\/$/, '')) {
|
|
271
|
+
console.error(`mcp-hub: CIMD_ALLOWED_ORIGINS entry "${entry}" must be a bare https origin, e.g. https://chatgpt.com`);
|
|
272
|
+
process.exit(1);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return entries.map(entry => new URL(entry).origin);
|
|
276
|
+
}
|
|
176
277
|
function nonNegativeIntegerEnv(name, fallback) {
|
|
177
278
|
const raw = process.env[name];
|
|
178
279
|
if (raw === undefined)
|
|
@@ -194,7 +295,10 @@ if (isMain && process.argv.includes('--stdio')) {
|
|
|
194
295
|
await runStdio({
|
|
195
296
|
configPath: process.env.CONFIG_PATH ?? path.resolve('mcp.json'),
|
|
196
297
|
idleTimeoutMinutes: nonNegativeIntegerEnv('IDLE_TIMEOUT_MINUTES', 60),
|
|
197
|
-
toolCachePath: process.env.TOOL_CACHE_PATH || undefined
|
|
298
|
+
toolCachePath: process.env.TOOL_CACHE_PATH || undefined,
|
|
299
|
+
// Optional here, unlike over HTTP: only a server with an `oauth` block
|
|
300
|
+
// needs it, to reuse a token authorized against the HTTP hub.
|
|
301
|
+
dataPath: process.env.DATA_PATH || undefined
|
|
198
302
|
});
|
|
199
303
|
}
|
|
200
304
|
else if (isMain) {
|
|
@@ -204,7 +308,8 @@ else if (isMain) {
|
|
|
204
308
|
installFileLogging(process.env.LOG_FILE);
|
|
205
309
|
console.log(`mcp-hub: mirroring log output to ${process.env.LOG_FILE}`);
|
|
206
310
|
}
|
|
207
|
-
const
|
|
311
|
+
const clientRegistration = clientRegistrationEnv();
|
|
312
|
+
const { app, supervisor, watcher, stopMaintenance } = await createHub({
|
|
208
313
|
externalUrl: requireEnv('EXTERNAL_URL'),
|
|
209
314
|
configPath: process.env.CONFIG_PATH ?? '/config/mcp.json',
|
|
210
315
|
dataPath: process.env.DATA_PATH ?? '/data',
|
|
@@ -216,9 +321,23 @@ else if (isMain) {
|
|
|
216
321
|
mcpBodyLimit: process.env.MCP_BODY_LIMIT ?? '1mb',
|
|
217
322
|
mcpRequestsPerMinute: positiveIntegerEnv('MCP_REQUESTS_PER_MINUTE', 120),
|
|
218
323
|
mcpMaxConcurrentRequests: positiveIntegerEnv('MCP_MAX_CONCURRENT_REQUESTS', 4),
|
|
324
|
+
mcpMaxConcurrentStreams: positiveIntegerEnv('MCP_MAX_CONCURRENT_STREAMS', 32),
|
|
219
325
|
idleTimeoutMinutes: nonNegativeIntegerEnv('IDLE_TIMEOUT_MINUTES', 60),
|
|
220
|
-
toolCachePath: process.env.TOOL_CACHE_PATH || undefined
|
|
326
|
+
toolCachePath: process.env.TOOL_CACHE_PATH || undefined,
|
|
327
|
+
clientRegistration,
|
|
328
|
+
dcrMaxClients: positiveIntegerEnv('DCR_MAX_CLIENTS', 500),
|
|
329
|
+
dcrPendingTtlHours: positiveIntegerEnv('DCR_PENDING_TTL_HOURS', 24),
|
|
330
|
+
dcrInactiveDays: positiveIntegerEnv('DCR_INACTIVE_DAYS', 90),
|
|
331
|
+
cimdAllowedOrigins: cimdAllowedOriginsEnv(),
|
|
332
|
+
cimdAllowPrivateAddresses: process.env.CIMD_ALLOW_PRIVATE_ADDRESSES === 'true' || process.env.CIMD_ALLOW_PRIVATE_ADDRESSES === '1'
|
|
221
333
|
});
|
|
334
|
+
console.log(`mcp-hub: client registration via ${clientRegistration.join(' and ')}`);
|
|
335
|
+
if (!clientRegistration.includes('dcr')) {
|
|
336
|
+
console.warn('mcp-hub: dynamic client registration is off — clients without Client ID Metadata Document support cannot connect');
|
|
337
|
+
}
|
|
338
|
+
if (process.env.CIMD_ALLOW_PRIVATE_ADDRESSES === 'true' || process.env.CIMD_ALLOW_PRIVATE_ADDRESSES === '1') {
|
|
339
|
+
console.warn('mcp-hub: CIMD_ALLOW_PRIVATE_ADDRESSES is enabled — client metadata documents may be fetched from private addresses. Do not use in production.');
|
|
340
|
+
}
|
|
222
341
|
if (process.env.RESOURCE_BOUND_TOKENS === 'false' || process.env.RESOURCE_BOUND_TOKENS === '0') {
|
|
223
342
|
console.warn('mcp-hub: RESOURCE_BOUND_TOKENS is disabled — unbound access tokens may call every MCP path. ' +
|
|
224
343
|
'This is a migration mode for deployments from 0.4 and earlier; remove the setting once every connector has re-authorized.');
|
|
@@ -232,6 +351,7 @@ else if (isMain) {
|
|
|
232
351
|
const shutdown = async (signal, code = 0) => {
|
|
233
352
|
console.log(`mcp-hub: received ${signal}, shutting down`);
|
|
234
353
|
watcher.stop();
|
|
354
|
+
stopMaintenance();
|
|
235
355
|
httpServer.close();
|
|
236
356
|
await supervisor.stop();
|
|
237
357
|
process.exit(code);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/limits.js
CHANGED
|
@@ -2,23 +2,43 @@
|
|
|
2
2
|
* Bounds authenticated MCP traffic by OAuth client. This protects child
|
|
3
3
|
* servers from one connector monopolising every proxy slot while avoiding an
|
|
4
4
|
* IP-based key that would collapse all clients behind the same reverse proxy.
|
|
5
|
+
*
|
|
6
|
+
* Streamable HTTP has two shapes of request and they need separate budgets. A
|
|
7
|
+
* POST carries JSON-RPC and ends when the answer does — that is the work a
|
|
8
|
+
* child server performs, and `maxConcurrent` bounds it. A GET opens the
|
|
9
|
+
* server-to-client SSE channel and stays open for the whole session; it costs
|
|
10
|
+
* a socket and nothing else. Counting those as in-flight work meant every
|
|
11
|
+
* connected session permanently held a slot, so the fifth session against a
|
|
12
|
+
* default of four got `429` on connect while the hub was otherwise idle.
|
|
5
13
|
*/
|
|
6
14
|
export class ClientRequestGate {
|
|
7
15
|
requestsPerMinute;
|
|
8
16
|
maxConcurrent;
|
|
17
|
+
maxStreams;
|
|
9
18
|
clients = new Map();
|
|
10
19
|
lastSweep = 0;
|
|
11
|
-
constructor(requestsPerMinute, maxConcurrent) {
|
|
20
|
+
constructor(requestsPerMinute, maxConcurrent, maxStreams) {
|
|
12
21
|
this.requestsPerMinute = requestsPerMinute;
|
|
13
22
|
this.maxConcurrent = maxConcurrent;
|
|
23
|
+
this.maxStreams = maxStreams;
|
|
14
24
|
}
|
|
15
|
-
|
|
25
|
+
/**
|
|
26
|
+
* For MCP routes, where a GET is the standing SSE listening channel by
|
|
27
|
+
* definition — the spec has no other use for it.
|
|
28
|
+
*/
|
|
29
|
+
middleware = this.gate(req => req.method === 'GET');
|
|
30
|
+
/** For routes that only ever answer one request, such as `/health`. */
|
|
31
|
+
requestMiddleware = this.gate(() => false);
|
|
32
|
+
gate(isListeningStream) {
|
|
33
|
+
return (req, res, next) => this.admit(req, res, next, isListeningStream(req));
|
|
34
|
+
}
|
|
35
|
+
admit(req, res, next, listening) {
|
|
16
36
|
const now = Date.now();
|
|
17
37
|
this.sweep(now);
|
|
18
38
|
const clientId = req.auth?.clientId ?? 'unknown';
|
|
19
39
|
let window = this.clients.get(clientId);
|
|
20
40
|
if (!window) {
|
|
21
|
-
window = { startedAt: now, requests: 0, inFlight: 0 };
|
|
41
|
+
window = { startedAt: now, requests: 0, inFlight: 0, streams: 0 };
|
|
22
42
|
this.clients.set(clientId, window);
|
|
23
43
|
}
|
|
24
44
|
else if (now - window.startedAt >= 60_000) {
|
|
@@ -31,30 +51,37 @@ export class ClientRequestGate {
|
|
|
31
51
|
res.status(429).json({ jsonrpc: '2.0', error: { code: -32000, message: 'MCP request rate limit exceeded' }, id: null });
|
|
32
52
|
return;
|
|
33
53
|
}
|
|
34
|
-
if (window.inFlight >= this.maxConcurrent) {
|
|
54
|
+
if (listening ? window.streams >= this.maxStreams : window.inFlight >= this.maxConcurrent) {
|
|
35
55
|
res.set('Retry-After', '1');
|
|
36
|
-
|
|
56
|
+
const message = listening ? 'Too many concurrent MCP streams' : 'Too many concurrent MCP requests';
|
|
57
|
+
res.status(429).json({ jsonrpc: '2.0', error: { code: -32000, message }, id: null });
|
|
37
58
|
return;
|
|
38
59
|
}
|
|
39
60
|
window.requests++;
|
|
40
|
-
|
|
61
|
+
if (listening)
|
|
62
|
+
window.streams++;
|
|
63
|
+
else
|
|
64
|
+
window.inFlight++;
|
|
41
65
|
let released = false;
|
|
42
66
|
const release = () => {
|
|
43
67
|
if (released)
|
|
44
68
|
return;
|
|
45
69
|
released = true;
|
|
46
|
-
|
|
70
|
+
if (listening)
|
|
71
|
+
window.streams = Math.max(0, window.streams - 1);
|
|
72
|
+
else
|
|
73
|
+
window.inFlight = Math.max(0, window.inFlight - 1);
|
|
47
74
|
};
|
|
48
75
|
res.once('finish', release);
|
|
49
76
|
res.once('close', release);
|
|
50
77
|
next();
|
|
51
|
-
}
|
|
78
|
+
}
|
|
52
79
|
sweep(now) {
|
|
53
80
|
if (now - this.lastSweep < 60_000)
|
|
54
81
|
return;
|
|
55
82
|
this.lastSweep = now;
|
|
56
83
|
for (const [clientId, window] of this.clients) {
|
|
57
|
-
if (window.inFlight === 0 && now - window.startedAt >= 60_000)
|
|
84
|
+
if (window.inFlight === 0 && window.streams === 0 && now - window.startedAt >= 60_000)
|
|
58
85
|
this.clients.delete(clientId);
|
|
59
86
|
}
|
|
60
87
|
}
|
package/dist/limits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
2
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
3
|
-
import { CallToolRequestSchema, CallToolResultSchema, CompleteRequestSchema, CompleteResultSchema, GetPromptRequestSchema, GetPromptResultSchema, ListPromptsRequestSchema, ListPromptsResultSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ListToolsRequestSchema, ListToolsResultSchema, ReadResourceRequestSchema, ReadResourceResultSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { CallToolRequestSchema, CallToolResultSchema, CompleteRequestSchema, CompleteResultSchema, GetPromptRequestSchema, GetPromptResultSchema, ListPromptsRequestSchema, ListPromptsResultSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ErrorCode, ListToolsRequestSchema, ListToolsResultSchema, McpError, ReadResourceRequestSchema, ReadResourceResultSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
4
4
|
import { ABSOLUTE_CALL_OPTIONS, assertForwardedResultSize } from './mcp-limits.js';
|
|
5
|
+
import { filterTools, loggableToolName, toolAllowed } from './tool-filter.js';
|
|
5
6
|
/**
|
|
6
7
|
* The child's capabilities minus what this proxy does not actually serve.
|
|
7
8
|
*
|
|
@@ -53,8 +54,29 @@ function buildProxyServer(managed) {
|
|
|
53
54
|
// all hub paths configured enumerates them on connect, so answering from
|
|
54
55
|
// the cached snapshot (instead of waking) is what keeps a fleet of
|
|
55
56
|
// sleeping servers asleep. Neither branch counts as usage.
|
|
56
|
-
server.setRequestHandler(ListToolsRequestSchema,
|
|
57
|
-
|
|
57
|
+
server.setRequestHandler(ListToolsRequestSchema, async (req) => {
|
|
58
|
+
// managed.tools is filtered on the way in, but the live branch forwards
|
|
59
|
+
// the upstream's own answer and never consults it — so it has to filter
|
|
60
|
+
// too. Missing this is the obvious bug here: the filter would appear to
|
|
61
|
+
// work on a sleeping server and vanish the moment it woke.
|
|
62
|
+
if (managed.state !== 'up' || !managed.client)
|
|
63
|
+
return { tools: managed.tools };
|
|
64
|
+
const live = (await forwardLive(req, ListToolsResultSchema));
|
|
65
|
+
return { ...live, tools: filterTools(managed.config, live.tools) };
|
|
66
|
+
});
|
|
67
|
+
server.setRequestHandler(CallToolRequestSchema, req => {
|
|
68
|
+
// Hiding is not a boundary on this path: the hub forwards by name, so a
|
|
69
|
+
// client holding a stale schema would still reach it. Refused before
|
|
70
|
+
// use(), so a forbidden name cannot wake a sleeping server either. The
|
|
71
|
+
// message is the neutral one a server gives for a tool it does not have —
|
|
72
|
+
// announcing what was hidden would be a disclosure in itself.
|
|
73
|
+
if (!toolAllowed(managed.config, req.params.name)) {
|
|
74
|
+
const logged = loggableToolName(req.params.name);
|
|
75
|
+
console.warn(`[${managed.name}] refused tools/call "${logged}": not permitted by allowTools/denyTools`);
|
|
76
|
+
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${req.params.name}`);
|
|
77
|
+
}
|
|
78
|
+
return use(req, CallToolResultSchema);
|
|
79
|
+
});
|
|
58
80
|
}
|
|
59
81
|
if (caps.resources) {
|
|
60
82
|
server.setRequestHandler(ListResourcesRequestSchema, req => use(req, ListResourcesResultSchema));
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,iCAAiC,EACjC,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/stdio.js
CHANGED
|
@@ -3,7 +3,8 @@ import fs from 'node:fs';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
5
5
|
import { loadConfig, parseConfig, ConfigWatcher, warnMutableDockerImages } from './config.js';
|
|
6
|
-
import { Supervisor } from './supervisor.js';
|
|
6
|
+
import { Supervisor, UpstreamAuthRegistry } from './supervisor.js';
|
|
7
|
+
import { AuthStore } from './auth/store.js';
|
|
7
8
|
import { ToolCache } from './tool-cache.js';
|
|
8
9
|
import { buildHubServer } from './hub.js';
|
|
9
10
|
import { isMainModule } from './main-module.js';
|
|
@@ -51,6 +52,29 @@ function loadOrEmpty(configPath) {
|
|
|
51
52
|
* Codex, …). Everything HTTP-only — OAuth, tokens, rate limiting, /health —
|
|
52
53
|
* has no counterpart here; the trust boundary is the local user account.
|
|
53
54
|
*/
|
|
55
|
+
/**
|
|
56
|
+
* Outbound OAuth only works here when a state directory was given: there is
|
|
57
|
+
* nowhere else to read a token from, and no HTTP listener for a browser to
|
|
58
|
+
* come back to. Without one, such a server simply cannot connect, so say why
|
|
59
|
+
* once rather than leaving an unexplained failure in the log.
|
|
60
|
+
*/
|
|
61
|
+
function buildUpstreamAuth(config, dataPath) {
|
|
62
|
+
const oauthServers = [...config].filter(([, server]) => server.kind === 'remote' && server.oauth !== undefined);
|
|
63
|
+
if (oauthServers.length === 0)
|
|
64
|
+
return undefined;
|
|
65
|
+
if (!dataPath) {
|
|
66
|
+
console.warn(`mcp-hub: ${oauthServers.map(([name]) => name).join(', ')} need an upstream OAuth token, but this mode has no state directory. ` +
|
|
67
|
+
'Set DATA_PATH to the hub\'s /data to reuse a token authorized there.');
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const store = new AuthStore(dataPath);
|
|
71
|
+
const externalUrl = store.getExternalUrl();
|
|
72
|
+
if (!externalUrl) {
|
|
73
|
+
console.warn(`mcp-hub: ${dataPath} holds no upstream credentials yet; authorize them against the HTTP hub first`);
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
return new UpstreamAuthRegistry(store, externalUrl);
|
|
77
|
+
}
|
|
54
78
|
export function createStdioHub(options) {
|
|
55
79
|
const config = loadOrEmpty(options.configPath);
|
|
56
80
|
warnMutableDockerImages(config);
|
|
@@ -69,7 +93,8 @@ export function createStdioHub(options) {
|
|
|
69
93
|
console.warn(`mcp-hub: tool cache ${cache.filePath} is not writable — on-demand servers warm-start at every launch instead of sleeping through it`);
|
|
70
94
|
}
|
|
71
95
|
}
|
|
72
|
-
const
|
|
96
|
+
const upstreamAuth = buildUpstreamAuth(config, options.dataPath);
|
|
97
|
+
const supervisor = new Supervisor(config, { idleTimeoutMinutes, cache, upstreamAuth });
|
|
73
98
|
supervisor.start(); // children come up (or hydrate into `sleeping`) in the background
|
|
74
99
|
void supervisor
|
|
75
100
|
.reapOrphans()
|
package/dist/stdio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,uBAAuB,EAAkB,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":"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"}
|