@ni-c/mcp-hub 0.6.3 → 0.7.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/README.md +34 -6
  3. package/dist/auth/headers.js +33 -0
  4. package/dist/auth/headers.js.map +1 -0
  5. package/dist/auth/provider.js +4 -0
  6. package/dist/auth/provider.js.map +1 -1
  7. package/dist/auth/routes.js +4 -1
  8. package/dist/auth/routes.js.map +1 -1
  9. package/dist/auth/store.js +152 -35
  10. package/dist/auth/store.js.map +1 -1
  11. package/dist/config.js +209 -27
  12. package/dist/config.js.map +1 -1
  13. package/dist/docker-proxy/index.js +106 -0
  14. package/dist/docker-proxy/index.js.map +1 -0
  15. package/dist/docker-proxy/policy.js +278 -0
  16. package/dist/docker-proxy/policy.js.map +1 -0
  17. package/dist/docker-proxy/secrets.js +111 -0
  18. package/dist/docker-proxy/secrets.js.map +1 -0
  19. package/dist/docker-proxy/server.js +265 -0
  20. package/dist/docker-proxy/server.js.map +1 -0
  21. package/dist/health.js +11 -1
  22. package/dist/health.js.map +1 -1
  23. package/dist/hub.js +3 -6
  24. package/dist/hub.js.map +1 -1
  25. package/dist/index.js +9 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/mcp-limits.js +69 -0
  28. package/dist/mcp-limits.js.map +1 -0
  29. package/dist/proxy.js +4 -5
  30. package/dist/proxy.js.map +1 -1
  31. package/dist/sandbox/container-spec.js +115 -0
  32. package/dist/sandbox/container-spec.js.map +1 -0
  33. package/dist/sandbox/docker-client.js +291 -0
  34. package/dist/sandbox/docker-client.js.map +1 -0
  35. package/dist/sandbox/policy-protocol.js +11 -0
  36. package/dist/sandbox/policy-protocol.js.map +1 -0
  37. package/dist/supervisor.js +90 -17
  38. package/dist/supervisor.js.map +1 -1
  39. package/dist/transports/docker.js +163 -0
  40. package/dist/transports/docker.js.map +1 -0
  41. package/dist/transports/socket.js +59 -0
  42. package/dist/transports/socket.js.map +1 -0
  43. package/dist/transports/stream.js +102 -0
  44. package/dist/transports/stream.js.map +1 -0
  45. package/package.json +8 -4
@@ -0,0 +1,265 @@
1
+ import http from 'node:http';
2
+ import { authorize } from './policy.js';
3
+ import { SecretStore } from './secrets.js';
4
+ import { OWNER_LABEL, OWNER_VALUE, SERVER_LABEL } from '../sandbox/container-spec.js';
5
+ import { DOCKER_POLICY_NAME, DOCKER_POLICY_PATH, DOCKER_POLICY_VERSION } from '../sandbox/policy-protocol.js';
6
+ const MAX_BODY_BYTES = 1024 * 1024;
7
+ const UPSTREAM_TIMEOUT_MS = 15 * 60_000;
8
+ const POLICY_CHECK_TIMEOUT_MS = 5_000;
9
+ const MAX_INSPECT_BYTES = 1024 * 1024;
10
+ function refuse(response, status, reason, closeConnection = false) {
11
+ const body = JSON.stringify({ message: `mcp-hub-docker-proxy: ${reason}` });
12
+ response.writeHead(status, {
13
+ 'Content-Type': 'application/json',
14
+ 'Content-Length': Buffer.byteLength(body),
15
+ ...(closeConnection ? { Connection: 'close' } : {})
16
+ });
17
+ response.end(body);
18
+ }
19
+ function readBody(request) {
20
+ return new Promise((resolve, reject) => {
21
+ const chunks = [];
22
+ let size = 0;
23
+ let settled = false;
24
+ const settle = (value) => {
25
+ if (settled)
26
+ return;
27
+ settled = true;
28
+ resolve(value);
29
+ };
30
+ request.on('data', (chunk) => {
31
+ size += chunk.length;
32
+ if (size > MAX_BODY_BYTES) {
33
+ // Stop reading, but leave the socket alive: destroying it here would
34
+ // reach the caller as a connection reset instead of the 413 that says
35
+ // what went wrong. The response closes the connection instead.
36
+ request.pause();
37
+ settle({ tooLarge: true });
38
+ return;
39
+ }
40
+ chunks.push(chunk);
41
+ });
42
+ request.on('end', () => settle(Buffer.concat(chunks)));
43
+ request.on('error', reject);
44
+ });
45
+ }
46
+ function daemonRequest(options, method, path, maxBytes, timeoutMs) {
47
+ return new Promise((resolve, reject) => {
48
+ const request = http.request({ socketPath: options.dockerSocket, method, path, headers: { Host: 'docker' } }, response => {
49
+ const chunks = [];
50
+ let size = 0;
51
+ response.on('data', (chunk) => {
52
+ size += chunk.length;
53
+ if (size > maxBytes) {
54
+ response.destroy(new Error(`daemon response exceeds ${maxBytes} bytes`));
55
+ return;
56
+ }
57
+ chunks.push(chunk);
58
+ });
59
+ response.on('end', () => resolve({ status: response.statusCode ?? 0, body: Buffer.concat(chunks) }));
60
+ });
61
+ request.setTimeout(timeoutMs, () => request.destroy(new Error('timed out')));
62
+ request.on('error', reject);
63
+ request.end();
64
+ });
65
+ }
66
+ async function policyHandshake(options) {
67
+ const ping = await daemonRequest(options, 'GET', '/_ping', 1024, POLICY_CHECK_TIMEOUT_MS);
68
+ if (ping.status !== 200 || ping.body.toString('utf8').trim() !== 'OK') {
69
+ throw new Error(`Docker daemon ping failed with status ${ping.status}`);
70
+ }
71
+ return { name: DOCKER_POLICY_NAME, policyVersion: DOCKER_POLICY_VERSION, daemon: 'ok' };
72
+ }
73
+ async function verifyContainer(options, decision) {
74
+ if (!decision.container)
75
+ return undefined;
76
+ const version = /^\/v\d+\.\d+/.exec(decision.path)?.[0] ?? '';
77
+ const inspected = await daemonRequest(options, 'GET', `${version}/containers/${encodeURIComponent(decision.container.id)}/json`, MAX_INSPECT_BYTES, POLICY_CHECK_TIMEOUT_MS);
78
+ if (inspected.status !== 200) {
79
+ return {
80
+ status: inspected.status === 404 ? 404 : 403,
81
+ reason: `cannot inspect container "${decision.container.id}" (status ${inspected.status})`
82
+ };
83
+ }
84
+ let labels;
85
+ try {
86
+ const parsed = JSON.parse(inspected.body.toString('utf8'));
87
+ labels = parsed.Config?.Labels;
88
+ }
89
+ catch {
90
+ return { status: 403, reason: `inspect response for container "${decision.container.id}" is not valid JSON` };
91
+ }
92
+ if (labels?.[OWNER_LABEL] !== OWNER_VALUE || labels?.[SERVER_LABEL] !== decision.container.server) {
93
+ return { status: 403, reason: `container "${decision.container.id}" does not have the exact mcp-hub owner and server labels` };
94
+ }
95
+ return undefined;
96
+ }
97
+ /**
98
+ * A Docker socket proxy that enforces mcp-hub's sandbox policy.
99
+ *
100
+ * Two properties are worth stating outright, because they are what make this
101
+ * different from the usual path-filtering socket proxies:
102
+ *
103
+ * 1. Requests are never forwarded verbatim. Every allowed request is rebuilt
104
+ * — method, path, query, body — from the decision the policy made. Nothing
105
+ * the caller sent can ride along: not a duplicate query parameter, not an
106
+ * extra JSON key, not a second Content-Length.
107
+ * 2. The daemon connection carries only the headers this file writes.
108
+ *
109
+ * The only request that keeps a caller-supplied stream is `attach`, where the
110
+ * whole point is the raw bidirectional connection — and by then the policy has
111
+ * already decided which container it belongs to.
112
+ */
113
+ export function createDockerProxy(options) {
114
+ const secrets = new SecretStore(options.secretsDir);
115
+ const context = () => ({ config: options.config(), secrets });
116
+ const decide = (method, url, body) => {
117
+ const decision = authorize(method, url, body, context());
118
+ // The URL is caller-controlled and this log is read by fail2ban: a
119
+ // percent-encoded newline in a container name would otherwise let the
120
+ // caller write its own log lines.
121
+ const safeUrl = url.replace(/[\u0000-\u001f\u007f]/g, '?').slice(0, 500);
122
+ if (!decision.allow)
123
+ console.warn(`docker-proxy: DENY ${method} ${safeUrl}: ${decision.reason}`);
124
+ else
125
+ console.log(`docker-proxy: allow ${decision.method} ${decision.path.split('?')[0]}`);
126
+ return decision;
127
+ };
128
+ const server = http.createServer((request, response) => {
129
+ void (async () => {
130
+ const raw = await readBody(request);
131
+ if ('tooLarge' in raw) {
132
+ refuse(response, 413, `request body exceeds ${MAX_BODY_BYTES} bytes`, true);
133
+ response.on('finish', () => request.socket?.destroy());
134
+ return;
135
+ }
136
+ let body;
137
+ if (raw.length > 0) {
138
+ try {
139
+ body = JSON.parse(raw.toString('utf8'));
140
+ }
141
+ catch {
142
+ refuse(response, 400, 'request body is not valid JSON');
143
+ return;
144
+ }
145
+ }
146
+ if (request.method === 'GET' && request.url === DOCKER_POLICY_PATH && raw.length === 0) {
147
+ try {
148
+ const handshake = Buffer.from(JSON.stringify(await policyHandshake(options)), 'utf8');
149
+ response.writeHead(200, { 'Content-Type': 'application/json', 'Content-Length': String(handshake.length) });
150
+ response.end(handshake);
151
+ }
152
+ catch (error) {
153
+ refuse(response, 503, `policy proxy cannot reach Docker daemon: ${error.message}`);
154
+ }
155
+ return;
156
+ }
157
+ const decision = decide(request.method ?? 'GET', request.url ?? '/', body);
158
+ if (!decision.allow) {
159
+ refuse(response, decision.status, decision.reason);
160
+ return;
161
+ }
162
+ const ownershipError = await verifyContainer(options, decision);
163
+ if (ownershipError) {
164
+ refuse(response, ownershipError.status, ownershipError.reason);
165
+ return;
166
+ }
167
+ const payload = decision.body === undefined ? undefined : Buffer.from(JSON.stringify(decision.body), 'utf8');
168
+ const upstream = http.request({
169
+ socketPath: options.dockerSocket,
170
+ method: decision.method,
171
+ path: decision.path,
172
+ headers: {
173
+ Host: 'docker',
174
+ 'Content-Type': 'application/json',
175
+ 'Content-Length': String(payload?.length ?? 0)
176
+ }
177
+ }, upstreamResponse => {
178
+ response.writeHead(upstreamResponse.statusCode ?? 502, {
179
+ 'Content-Type': upstreamResponse.headers['content-type'] ?? 'application/json'
180
+ });
181
+ upstreamResponse.pipe(response);
182
+ });
183
+ upstream.setTimeout(UPSTREAM_TIMEOUT_MS, () => upstream.destroy(new Error('timed out')));
184
+ upstream.on('error', error => {
185
+ console.error(`docker-proxy: upstream error on ${decision.method} ${decision.path}: ${error.message}`);
186
+ if (!response.headersSent)
187
+ refuse(response, 502, `docker daemon unreachable: ${error.message}`);
188
+ else
189
+ response.end();
190
+ });
191
+ if (payload)
192
+ upstream.write(payload);
193
+ upstream.end();
194
+ })().catch(error => {
195
+ console.error(`docker-proxy: request failed: ${error.message}`);
196
+ if (!response.headersSent)
197
+ refuse(response, 500, 'internal error');
198
+ });
199
+ });
200
+ // `attach` is an HTTP upgrade: the daemon answers 101 and the connection
201
+ // becomes the container's stdio. Both sides are hijacked and spliced.
202
+ server.on('upgrade', (request, clientSocket, head) => {
203
+ void (async () => {
204
+ const decision = decide(request.method ?? 'GET', request.url ?? '/', undefined);
205
+ // An upgrade is answered on the raw socket, and a refused one must not
206
+ // leave the caller holding a half-open connection: write, then destroy.
207
+ const hangUp = (status, reason) => clientSocket.end(`HTTP/1.1 ${status} ${status === 403 ? 'Forbidden' : 'Bad Gateway'}\r\nConnection: close\r\nContent-Length: ${Buffer.byteLength(reason)}\r\n\r\n${reason}`, () => clientSocket.destroy());
208
+ if (!decision.allow || !decision.upgrade) {
209
+ hangUp(decision.allow ? 403 : decision.status, decision.allow ? 'this endpoint does not support upgrades' : decision.reason);
210
+ return;
211
+ }
212
+ const ownershipError = await verifyContainer(options, decision);
213
+ if (ownershipError) {
214
+ hangUp(ownershipError.status, ownershipError.reason);
215
+ return;
216
+ }
217
+ const upstream = http.request({
218
+ socketPath: options.dockerSocket,
219
+ method: decision.method,
220
+ path: decision.path,
221
+ headers: { Host: 'docker', 'Content-Type': 'application/json', Connection: 'Upgrade', Upgrade: 'tcp' }
222
+ });
223
+ upstream.on('upgrade', (_response, upstreamSocket, upstreamHead) => {
224
+ clientSocket.write('HTTP/1.1 101 UPGRADED\r\nContent-Type: application/vnd.docker.raw-stream\r\nConnection: Upgrade\r\nUpgrade: tcp\r\n\r\n');
225
+ if (upstreamHead?.length)
226
+ clientSocket.write(upstreamHead);
227
+ if (head?.length)
228
+ upstreamSocket.write(head);
229
+ // An MCP session is idle most of the time; neither side may time out.
230
+ upstreamSocket.setTimeout(0);
231
+ clientSocket.setTimeout?.(0);
232
+ clientSocket.pipe(upstreamSocket);
233
+ upstreamSocket.pipe(clientSocket);
234
+ // Either half going away ends the session, and both halves are torn down
235
+ // on the spot. Relying on the pipe to propagate the end is not enough:
236
+ // a peer that only half-closes (FIN without closing) would leave this
237
+ // process holding the other socket for as long as it runs, and a proxy
238
+ // that leaks a socket per restart of a crash-looping sandbox is a slow
239
+ // file-descriptor leak in the one component that must stay up.
240
+ const drop = () => {
241
+ clientSocket.destroy();
242
+ upstreamSocket.destroy();
243
+ };
244
+ for (const event of ['end', 'close', 'error']) {
245
+ clientSocket.on(event, drop);
246
+ upstreamSocket.on(event, drop);
247
+ }
248
+ });
249
+ upstream.on('response', upstreamResponse => {
250
+ upstreamResponse.resume();
251
+ hangUp(502, `docker daemon answered ${upstreamResponse.statusCode} instead of upgrading`);
252
+ });
253
+ upstream.on('error', error => {
254
+ console.error(`docker-proxy: upstream error on attach: ${error.message}`);
255
+ hangUp(502, `docker daemon unreachable: ${error.message}`);
256
+ });
257
+ upstream.end();
258
+ })().catch(error => {
259
+ console.error(`docker-proxy: attach authorization failed: ${error.message}`);
260
+ clientSocket.destroy();
261
+ });
262
+ });
263
+ return server;
264
+ }
265
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/docker-proxy/server.ts"],"names":[],"mappings":"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"}
package/dist/health.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { containerName } from './sandbox/container-spec.js';
1
2
  /**
2
3
  * Unauthenticated on purpose (Docker's HEALTHCHECK needs it), so it reports
3
4
  * state only: lastError carries upstream URLs and spawn paths and stays in the
@@ -7,7 +8,16 @@ export function healthHandler(supervisor) {
7
8
  return (_req, res) => {
8
9
  const servers = Object.fromEntries([...supervisor.servers.values()].map(s => [
9
10
  s.name,
10
- { state: s.state, restarts: s.restarts, tools: s.tools.length, hub: s.config.hub }
11
+ {
12
+ state: s.state,
13
+ kind: s.config.kind,
14
+ restarts: s.restarts,
15
+ tools: s.tools.length,
16
+ hub: s.config.hub,
17
+ // The image is the one detail that turns "scraper is down" into something
18
+ // actionable for a sandbox; it is a local tag, not a credential.
19
+ ...(s.config.kind === 'docker' ? { image: s.config.image, container: containerName(s.name) } : {})
20
+ }
11
21
  ]));
12
22
  const allUp = Object.values(servers).every(s => s.state === 'up');
13
23
  res.status(allUp ? 200 : 503).json({ status: allUp ? 'ok' : 'degraded', servers });
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsB;IAClD,OAAO,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,CAAC,CAAC,IAAI;YACN,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;SACnF,CAAC,CACH,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsB;IAClD,OAAO,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,CAAC,CAAC,IAAI;YACN;gBACE,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;gBACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;gBACrB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG;gBACjB,0EAA0E;gBAC1E,iEAAiE;gBACjE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnG;SACF,CAAC,CACH,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC"}
package/dist/hub.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { z } from 'zod';
3
3
  import { VERSION } from './version.js';
4
- const CALL_TIMEOUT_MS = 5 * 60_000;
4
+ import { ABSOLUTE_CALL_OPTIONS, assertForwardedResultSize } from './mcp-limits.js';
5
5
  function text(value) {
6
6
  return { content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }] };
7
7
  }
@@ -79,11 +79,8 @@ export function buildHubServer(supervisor) {
79
79
  if (managed.state !== 'up' || !managed.client)
80
80
  return toolError(`Server "${server}" is ${managed.state}, try again later.`);
81
81
  try {
82
- const result = await managed.client.callTool({ name: tool, arguments: (args ?? {}) }, undefined, {
83
- timeout: CALL_TIMEOUT_MS,
84
- resetTimeoutOnProgress: true
85
- });
86
- return result;
82
+ const result = await managed.client.callTool({ name: tool, arguments: (args ?? {}) }, undefined, ABSOLUTE_CALL_OPTIONS);
83
+ return assertForwardedResultSize(result);
87
84
  }
88
85
  catch (error) {
89
86
  return toolError(`Tool call failed: ${error.message}`);
package/dist/hub.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import express from 'express';
3
3
  import { requireBearerAuth } from '@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js';
4
- import { loadConfig, ConfigWatcher } from './config.js';
4
+ import { loadConfig, ConfigWatcher, warnMutableDockerImages } from './config.js';
5
5
  import { Supervisor } from './supervisor.js';
6
6
  import { serverRequestHandler, handleMcpRequest } from './proxy.js';
7
7
  import { buildHubServer } from './hub.js';
@@ -32,6 +32,7 @@ export async function createHub(options) {
32
32
  // the safe behaviour must be the one you get without asking for it.
33
33
  const requireResource = options.requireResourceBoundTokens ?? true;
34
34
  const config = loadConfig(options.configPath);
35
+ warnMutableDockerImages(config);
35
36
  if (options.defaultResource !== undefined) {
36
37
  const name = options.defaultResource;
37
38
  if (name !== 'hub' && !config.has(name)) {
@@ -39,9 +40,16 @@ export async function createHub(options) {
39
40
  }
40
41
  }
41
42
  const supervisor = new Supervisor(config);
43
+ // Deliberately not awaited: an unreachable Docker endpoint must not hold up
44
+ // the HTTP listener or the stdio children, and reaping only ever touches
45
+ // containers whose server is no longer configured.
46
+ void supervisor
47
+ .reapOrphans()
48
+ .catch(error => console.error(`mcp-hub: could not reap sandbox containers: ${error.message}`));
42
49
  supervisor.start(); // children come up in the background; paths answer 503 until then
43
50
  const watcher = new ConfigWatcher(options.configPath, config);
44
51
  watcher.on('change', (next, diff) => {
52
+ warnMutableDockerImages(next);
45
53
  console.log(`mcp-hub: config changed (added: ${diff.added.join(',') || '-'} removed: ${diff.removed.join(',') || '-'} changed: ${diff.changed.join(',') || '-'})`);
46
54
  void supervisor.applyDiff(next, diff);
47
55
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gEAAgE,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkBhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAmB;IACjD,yEAAyE;IACzE,6EAA6E;IAC7E,2DAA2D;IAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,WAAW,KAAK,GAAG,MAAM,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtH,MAAM,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,IAAI,GAAG,CAAC;IAC9D,MAAM,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,IAAI,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC1I,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,qBAAqB,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACtJ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACzH,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,eAAe,GAAG,OAAO,CAAC,0BAA0B,IAAI,IAAI,CAAC;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;QACrC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,4CAA4C,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1C,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,kEAAkE;IAEtF,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QACnK,KAAK,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,2CAA4C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnH,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE;QACxD,eAAe;QACf,eAAe,EAAE,QAAQ,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;QACpF,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;KAC1H,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACpC,yEAAyE;QACzE,uEAAuE;QACvE,OAAO,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;IAClH,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;IACxD,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE5B,2EAA2E;IAC3E,iCAAiC;IACjC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAErH,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,MAAM,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE,CACjE,iBAAiB,CAAC;QAChB,QAAQ,EAAE,QAAQ;QAClB,mBAAmB,EAAE,GAAG,MAAM,wCAAwC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;KACzG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAErB,8EAA8E;IAC9E,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,kBAAkB,GAAG,CAAC,QAA+B,EAAE,EAAE,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QACxH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,+FAA+F,CAAC,CAAC;YAC7H,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,6CAA6C,EAAE,CAAC,CAAC;YACnH,OAAO;QACT,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAE7E,yEAAyE;IACzE,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvD,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAE9G,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC3F,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,EAAE,CAAC,CAAC,sBAAsB;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE,CAC9H,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,wEAAwE;IACxE,2EAA2E;IAC3E,GAAG,CAAC,GAAG,CAAC,CAAC,KAAkC,EAAE,IAAa,EAAE,GAAa,EAAE,KAAmB,EAAE,EAAE;QAChG,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/G,OAAO;QACT,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kDAAkD,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,6BAA6B,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC;AAC9F,IAAI,MAAM,EAAE,CAAC;IACX,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IAC9C,mEAAmE;IACnE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzB,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC;QACnD,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC;QACvC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,kBAAkB;QACzD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO;QAC1C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;QAC9B,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC1F,0BAA0B,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;QACtH,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS;QAC1D,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK;QACjD,oBAAoB,EAAE,kBAAkB,CAAC,yBAAyB,EAAE,GAAG,CAAC;QACxE,wBAAwB,EAAE,kBAAkB,CAAC,6BAA6B,EAAE,CAAC,CAAC;KAC/E,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,EAAE,CAAC;QAC/F,OAAO,CAAC,IAAI,CACV,8FAA8F;YAC5F,2HAA2H,CAC9H,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,kEAAkE,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC;IACjH,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,CAAC;IACxF,UAAU,CAAC,cAAc,GAAG,kBAAkB,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAClF,UAAU,CAAC,cAAc,GAAG,kBAAkB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE;QAClD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,iBAAiB,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpD,0EAA0E;IAC1E,uEAAuE;IACvE,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE;QACtC,OAAO,CAAC,KAAK,CAAC,gCAAgC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,KAAK,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Budgets for everything a child server sends back.
3
+ *
4
+ * The hub forwards what an MCP server produces, so an oversized or endless
5
+ * response is the child's way of exhausting the hub's memory and, through it,
6
+ * every other server's availability. These are the ceilings; they are not
7
+ * meant to be reached by anything legitimate.
8
+ */
9
+ export const MAX_TOOL_LIST_PAGES = 100;
10
+ export const MAX_TOOLS = 10_000;
11
+ export const MAX_TOOL_METADATA_BYTES = 16 * 1024 * 1024;
12
+ export const MAX_FORWARDED_RESULT_BYTES = 8 * 1024 * 1024;
13
+ export const DEFAULT_CALL_TIMEOUT_MS = 5 * 60_000;
14
+ /**
15
+ * How long one forwarded call may take.
16
+ *
17
+ * The default deadline is absolute: `resetTimeoutOnProgress` would let a child
18
+ * hold a request open forever by emitting a progress notification every few
19
+ * seconds, and a stuck call holds one of the per-client concurrency slots. A
20
+ * deployment that genuinely runs long tools — a build, a large crawl — can
21
+ * raise the deadline with `MCP_CALL_TIMEOUT_MS` or opt back into progress
22
+ * extending it with `MCP_RESET_TIMEOUT_ON_PROGRESS=true`. Both are read once,
23
+ * here, because the options are used by the per-server proxy and the /hub
24
+ * aggregate alike and threading two numbers through the supervisor would buy
25
+ * nothing.
26
+ */
27
+ export const ABSOLUTE_CALL_TIMEOUT_MS = positiveIntegerEnv('MCP_CALL_TIMEOUT_MS', DEFAULT_CALL_TIMEOUT_MS);
28
+ export const ABSOLUTE_CALL_OPTIONS = {
29
+ timeout: ABSOLUTE_CALL_TIMEOUT_MS,
30
+ resetTimeoutOnProgress: booleanEnv('MCP_RESET_TIMEOUT_ON_PROGRESS', false)
31
+ };
32
+ /**
33
+ * Warn and fall back rather than exit: this module is imported by the request
34
+ * path and by the tests, and index.ts is the only place allowed to end the
35
+ * process over a bad environment.
36
+ */
37
+ function positiveIntegerEnv(name, fallback) {
38
+ const raw = process.env[name];
39
+ if (raw === undefined || raw === '')
40
+ return fallback;
41
+ const value = Number(raw);
42
+ if (!Number.isSafeInteger(value) || value < 1) {
43
+ console.error(`mcp-hub: ${name} must be a positive integer, using ${fallback}`);
44
+ return fallback;
45
+ }
46
+ return value;
47
+ }
48
+ function booleanEnv(name, fallback) {
49
+ const raw = process.env[name]?.trim().toLowerCase();
50
+ if (raw === undefined || raw === '')
51
+ return fallback;
52
+ if (raw === 'true' || raw === '1')
53
+ return true;
54
+ if (raw === 'false' || raw === '0')
55
+ return false;
56
+ console.error(`mcp-hub: ${name} must be true or false, using ${fallback}`);
57
+ return fallback;
58
+ }
59
+ export function jsonSize(value) {
60
+ return Buffer.byteLength(JSON.stringify(value), 'utf8');
61
+ }
62
+ export function assertForwardedResultSize(result) {
63
+ const size = jsonSize(result);
64
+ if (size > MAX_FORWARDED_RESULT_BYTES) {
65
+ throw new Error(`MCP result exceeds the ${MAX_FORWARDED_RESULT_BYTES} byte forwarding limit`);
66
+ }
67
+ return result;
68
+ }
69
+ //# sourceMappingURL=mcp-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-limits.js","sourceRoot":"","sources":["../src/mcp-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAChC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,MAAM,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;AAC3G,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO,EAAE,wBAAwB;IACjC,sBAAsB,EAAE,UAAU,CAAC,+BAA+B,EAAE,KAAK,CAAC;CAClE,CAAC;AAEX;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,sCAAsC,QAAQ,EAAE,CAAC,CAAC;QAChF,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,QAAiB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,iCAAiC,QAAQ,EAAE,CAAC,CAAC;IAC3E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAI,MAAS;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,IAAI,GAAG,0BAA0B,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,0BAA0B,wBAAwB,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/proxy.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
3
3
  import { CallToolRequestSchema, CallToolResultSchema, CompleteRequestSchema, CompleteResultSchema, GetPromptRequestSchema, GetPromptResultSchema, ListPromptsRequestSchema, ListPromptsResultSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ListToolsRequestSchema, ListToolsResultSchema, ReadResourceRequestSchema, ReadResourceResultSchema } from '@modelcontextprotocol/sdk/types.js';
4
- const CALL_TIMEOUT_MS = 5 * 60_000;
4
+ import { ABSOLUTE_CALL_OPTIONS, assertForwardedResultSize } from './mcp-limits.js';
5
5
  /**
6
6
  * The child's capabilities minus what this proxy does not actually serve.
7
7
  *
@@ -35,10 +35,9 @@ function buildProxyServer(managed) {
35
35
  const client = managed.client;
36
36
  if (!client)
37
37
  throw new Error(`Server "${managed.name}" is not running`);
38
- return client.request(request, resultSchema, {
39
- timeout: CALL_TIMEOUT_MS,
40
- resetTimeoutOnProgress: true
41
- });
38
+ return client
39
+ .request(request, resultSchema, ABSOLUTE_CALL_OPTIONS)
40
+ .then(assertForwardedResultSize);
42
41
  };
43
42
  const caps = managed.capabilities ?? {};
44
43
  if (caps.tools) {
package/dist/proxy.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}