@winstonsayno/mcp-gateway 0.4.0 → 1.0.1
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 +46 -0
- package/README.md +225 -19
- package/dashboard/index.html +79 -22
- package/dist/auth/middleware.d.ts +21 -2
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +63 -13
- package/dist/auth/middleware.js.map +1 -1
- package/dist/auth/ratelimit.d.ts +16 -1
- package/dist/auth/ratelimit.d.ts.map +1 -1
- package/dist/auth/ratelimit.js +15 -8
- package/dist/auth/ratelimit.js.map +1 -1
- package/dist/auth/scopes.d.ts +40 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +76 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +91 -10
- package/dist/config/loader.js.map +1 -1
- package/dist/gateway/api.d.ts +12 -0
- package/dist/gateway/api.d.ts.map +1 -1
- package/dist/gateway/api.js +264 -11
- package/dist/gateway/api.js.map +1 -1
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +54 -2
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/supervisor.d.ts +1 -0
- package/dist/gateway/supervisor.d.ts.map +1 -1
- package/dist/gateway/supervisor.js +12 -1
- package/dist/gateway/supervisor.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/catalog.d.ts +30 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +78 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/endpoint.d.ts +132 -0
- package/dist/mcp/endpoint.d.ts.map +1 -0
- package/dist/mcp/endpoint.js +714 -0
- package/dist/mcp/endpoint.js.map +1 -0
- package/dist/mcp/llm-schemas.d.ts +36 -0
- package/dist/mcp/llm-schemas.d.ts.map +1 -0
- package/dist/mcp/llm-schemas.js +69 -0
- package/dist/mcp/llm-schemas.js.map +1 -0
- package/dist/mcp/naming.d.ts +53 -0
- package/dist/mcp/naming.d.ts.map +1 -0
- package/dist/mcp/naming.js +71 -0
- package/dist/mcp/naming.js.map +1 -0
- package/dist/middleware/cors.d.ts +2 -0
- package/dist/middleware/cors.d.ts.map +1 -1
- package/dist/middleware/cors.js +25 -19
- package/dist/middleware/cors.js.map +1 -1
- package/dist/monitor/audit.d.ts +60 -0
- package/dist/monitor/audit.d.ts.map +1 -0
- package/dist/monitor/audit.js +155 -0
- package/dist/monitor/audit.js.map +1 -0
- package/dist/monitor/index.d.ts +19 -0
- package/dist/monitor/index.d.ts.map +1 -1
- package/dist/monitor/index.js +88 -0
- package/dist/monitor/index.js.map +1 -1
- package/dist/proxy/index.d.ts +26 -2
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +175 -18
- package/dist/proxy/index.js.map +1 -1
- package/dist/registry/index.d.ts +8 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +22 -0
- package/dist/registry/index.js.map +1 -1
- package/dist/utils/types.d.ts +108 -2
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/gateway/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/gateway/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAA0B,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAqB,KAAK,iBAAiB,EAAoB,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAoE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMvH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG;IACvC,KAAK,IAAI,IAAI,CAAC;IACd;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,+FAA+F;IAC/F,YAAY,EAAE,cAAc,CAAC;IAC7B,wFAAwF;IACxF,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC3D,mFAAmF;IACnF,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,SAAS,CAAC;CAClG,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,QAAQ,EACf,GAAG,CAAC,EAAE,MAAM,EACZ,YAAY,UAAQ,GACnB,SAAS,CAaX;AAUD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAOrE;AAiBD,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,GAAG,iBAAiB,EAAE,CAYjG;AAiBD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,gBAAqB,GAC7B,SAAS,CA0iBX"}
|
package/dist/gateway/api.js
CHANGED
|
@@ -6,7 +6,10 @@ import express from 'express';
|
|
|
6
6
|
import { ERR_TIMEOUT } from '../proxy/index.js';
|
|
7
7
|
import { createAuthMiddleware } from '../auth/middleware.js';
|
|
8
8
|
import { createRateLimiter } from '../auth/ratelimit.js';
|
|
9
|
+
import { filterToolsByScope, isRestricted, isServerInScope, isToolInScope } from '../auth/scopes.js';
|
|
9
10
|
import { logger } from '../utils/logger.js';
|
|
11
|
+
import { dedupeResources, routeResource } from '../mcp/catalog.js';
|
|
12
|
+
import { LLM_SCHEMA_FORMATS, toLlmToolSchemas } from '../mcp/llm-schemas.js';
|
|
10
13
|
import { VERSION } from '../utils/version.js';
|
|
11
14
|
/**
|
|
12
15
|
* Readiness for load balancers / Kubernetes: ready when at least `min`
|
|
@@ -94,12 +97,38 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
94
97
|
// Built eagerly so a misconfiguration fails at startup (fail closed).
|
|
95
98
|
let authMw = createAuthMiddleware(cfg.auth);
|
|
96
99
|
let rateLimiter = createRateLimiter(cfg.rateLimit);
|
|
100
|
+
// Keys with their own `rateLimit` get their own limiter (created lazily).
|
|
101
|
+
let keyLimiters = new Map();
|
|
102
|
+
const resetKeyLimiters = () => {
|
|
103
|
+
for (const l of keyLimiters.values())
|
|
104
|
+
l.close();
|
|
105
|
+
keyLimiters = new Map();
|
|
106
|
+
};
|
|
107
|
+
const limiterFor = (req) => {
|
|
108
|
+
const { scope, clientId } = req;
|
|
109
|
+
if (!scope?.rateLimit)
|
|
110
|
+
return rateLimiter;
|
|
111
|
+
const id = clientId ?? 'anonymous';
|
|
112
|
+
let l = keyLimiters.get(id);
|
|
113
|
+
if (!l) {
|
|
114
|
+
l = createRateLimiter(scope.rateLimit);
|
|
115
|
+
keyLimiters.set(id, l);
|
|
116
|
+
}
|
|
117
|
+
return l;
|
|
118
|
+
};
|
|
119
|
+
const scopeOf = (req) => req.scope;
|
|
97
120
|
// Stable wrappers: routes keep pointing at these while the inner
|
|
98
121
|
// middleware is swapped on hot reload.
|
|
99
122
|
const auth = (req, res, next) => authMw(req, res, next);
|
|
100
|
-
const rateLimit = (req, res, next) =>
|
|
123
|
+
const rateLimit = (req, res, next) => limiterFor(req)(req, res, next);
|
|
101
124
|
const protectable = (flag) => (req, res, next) => cfg.auth?.protect?.[flag] ? authMw(req, res, next) : next();
|
|
102
|
-
router.close = () =>
|
|
125
|
+
router.close = () => {
|
|
126
|
+
rateLimiter.close();
|
|
127
|
+
resetKeyLimiters();
|
|
128
|
+
};
|
|
129
|
+
router.authenticate = auth;
|
|
130
|
+
router.takeRateLimit = (req) => limiterFor(req).take(req);
|
|
131
|
+
router.resolveClient = (clientId) => authMw.resolveClient?.(clientId);
|
|
103
132
|
router.update = (next) => {
|
|
104
133
|
const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
105
134
|
let nextAuth = cfg.auth;
|
|
@@ -107,6 +136,7 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
107
136
|
try {
|
|
108
137
|
authMw = createAuthMiddleware(next.auth);
|
|
109
138
|
nextAuth = next.auth;
|
|
139
|
+
resetKeyLimiters();
|
|
110
140
|
logger.info(`Auth settings reloaded (strategy: ${next.auth?.strategy ?? 'none'})`);
|
|
111
141
|
}
|
|
112
142
|
catch (err) {
|
|
@@ -121,7 +151,7 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
121
151
|
? `Rate limit reloaded: ${next.rateLimit.limit} per ${next.rateLimit.windowSeconds}s`
|
|
122
152
|
: 'Rate limit disabled');
|
|
123
153
|
}
|
|
124
|
-
cfg = { ...cfg, auth: nextAuth, rateLimit: next.rateLimit, monitor: next.monitor };
|
|
154
|
+
cfg = { ...cfg, auth: nextAuth, rateLimit: next.rateLimit, monitor: next.monitor, mcp: next.mcp };
|
|
125
155
|
};
|
|
126
156
|
// ─── Health & Status ────────────────────────────────────────────────────────
|
|
127
157
|
// Liveness probe: always public, reveals nothing (for Docker / k8s).
|
|
@@ -167,18 +197,23 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
167
197
|
res.json({ ...metrics.aggregate(windowMs), servers: samples });
|
|
168
198
|
});
|
|
169
199
|
// ─── Server Registry ────────────────────────────────────────────────────────
|
|
170
|
-
router.get('/servers', auth, (
|
|
171
|
-
const
|
|
200
|
+
router.get('/servers', auth, (req, res) => {
|
|
201
|
+
const scope = scopeOf(req);
|
|
202
|
+
const servers = registry
|
|
203
|
+
.getAllServers()
|
|
204
|
+
.filter((s) => isServerInScope(scope, s.id))
|
|
205
|
+
.map((s) => ({
|
|
172
206
|
...redactServer(s),
|
|
173
207
|
health: registry.getHealth(s.id),
|
|
174
208
|
session: proxy.getSessionInfo(s.id),
|
|
175
|
-
toolCount: registry.getTools(s.id).length,
|
|
209
|
+
toolCount: filterToolsByScope(scope, registry.getTools(s.id)).length,
|
|
176
210
|
}));
|
|
177
211
|
res.json({ servers, total: servers.length });
|
|
178
212
|
});
|
|
179
213
|
router.get('/servers/:id', auth, (req, res) => {
|
|
180
214
|
const server = registry.getServer(req.params.id);
|
|
181
|
-
|
|
215
|
+
// Out-of-scope servers are hidden from discovery.
|
|
216
|
+
if (!server || !isServerInScope(scopeOf(req), server.id)) {
|
|
182
217
|
res.status(404).json({ error: 'Server not found' });
|
|
183
218
|
return;
|
|
184
219
|
}
|
|
@@ -186,7 +221,7 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
186
221
|
...redactServer(server),
|
|
187
222
|
health: registry.getHealth(server.id),
|
|
188
223
|
session: proxy.getSessionInfo(server.id),
|
|
189
|
-
tools: registry.getTools(server.id),
|
|
224
|
+
tools: filterToolsByScope(scopeOf(req), registry.getTools(server.id)),
|
|
190
225
|
});
|
|
191
226
|
});
|
|
192
227
|
// Force an immediate (re)connect, resetting any backoff.
|
|
@@ -196,6 +231,10 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
196
231
|
res.status(404).json({ error: 'Server not found' });
|
|
197
232
|
return;
|
|
198
233
|
}
|
|
234
|
+
if (!isServerInScope(scopeOf(req), server.id)) {
|
|
235
|
+
res.status(403).json({ error: 'Forbidden', message: `Server "${server.id}" is not allowed for this client` });
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
199
238
|
if (!options.supervisor) {
|
|
200
239
|
res.status(501).json({ error: 'Not Implemented', message: 'Reconnect is not available' });
|
|
201
240
|
return;
|
|
@@ -216,6 +255,20 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
216
255
|
const taggedServerIds = new Set(registry.getServersByTag(tag).map((s) => s.id));
|
|
217
256
|
tools = tools.filter((t) => taggedServerIds.has(t.serverId));
|
|
218
257
|
}
|
|
258
|
+
tools = filterToolsByScope(scopeOf(req), tools);
|
|
259
|
+
// ?format=openai|openai-responses|anthropic → LLM function-calling schemas
|
|
260
|
+
const format = req.query.format;
|
|
261
|
+
if (format !== undefined && format !== 'mcp') {
|
|
262
|
+
if (typeof format !== 'string' || !LLM_SCHEMA_FORMATS.includes(format)) {
|
|
263
|
+
res.status(400).json({
|
|
264
|
+
error: 'Bad Request',
|
|
265
|
+
message: `"format" must be one of: mcp, ${LLM_SCHEMA_FORMATS.join(', ')}`,
|
|
266
|
+
});
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
res.json(toLlmToolSchemas(tools, format, cfg.mcp?.toolNaming ?? 'auto'));
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
219
272
|
res.json({ tools, total: tools.length });
|
|
220
273
|
});
|
|
221
274
|
// ─── Tool Invocation ────────────────────────────────────────────────────────
|
|
@@ -235,14 +288,22 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
235
288
|
res.status(400).json({ error: 'Bad Request', message: '"arguments" must be an object' });
|
|
236
289
|
return;
|
|
237
290
|
}
|
|
291
|
+
const scope = scopeOf(req);
|
|
292
|
+
const forbidden = (message) => res.status(403).json({ error: 'Forbidden', message });
|
|
238
293
|
// Resolve server: use explicit serverId or auto-discover from tool name
|
|
239
294
|
let targetServerId = serverId;
|
|
240
295
|
if (!targetServerId) {
|
|
241
|
-
const
|
|
242
|
-
if (
|
|
296
|
+
const all = registry.findTools(tool);
|
|
297
|
+
if (all.length === 0) {
|
|
243
298
|
res.status(404).json({ error: 'Not Found', message: `Tool "${tool}" not found in any server` });
|
|
244
299
|
return;
|
|
245
300
|
}
|
|
301
|
+
// Only servers the client may use take part in auto-routing.
|
|
302
|
+
const candidates = all.filter((c) => isToolInScope(scope, c.serverId, c.name));
|
|
303
|
+
if (candidates.length === 0) {
|
|
304
|
+
forbidden(`Tool "${tool}" is not allowed for this client`);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
246
307
|
if (candidates.length > 1) {
|
|
247
308
|
// Previously the first match was used silently, so a call could hit
|
|
248
309
|
// an unintended server depending on registration order.
|
|
@@ -260,6 +321,10 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
260
321
|
res.status(404).json({ error: 'Not Found', message: `Server "${targetServerId}" not found` });
|
|
261
322
|
return;
|
|
262
323
|
}
|
|
324
|
+
if (!isServerInScope(scope, targetServerId)) {
|
|
325
|
+
forbidden(`Server "${targetServerId}" is not allowed for this client`);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
263
328
|
// Enforced here too: an explicit "server" must not bypass the filter.
|
|
264
329
|
if (!registry.isToolExposed(targetServerId, tool)) {
|
|
265
330
|
res.status(403).json({
|
|
@@ -268,6 +333,10 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
268
333
|
});
|
|
269
334
|
return;
|
|
270
335
|
}
|
|
336
|
+
if (!isToolInScope(scope, targetServerId, tool)) {
|
|
337
|
+
forbidden(`Tool "${tool}" on server "${targetServerId}" is not allowed for this client`);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
271
340
|
if (!proxy.isConnected(targetServerId)) {
|
|
272
341
|
const health = registry.getHealth(targetServerId);
|
|
273
342
|
const retryAt = health?.reconnect?.state === 'scheduled' ? health.reconnect.nextAttemptAt : undefined;
|
|
@@ -290,6 +359,7 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
290
359
|
success: result.success,
|
|
291
360
|
errorMessage: result.error?.message,
|
|
292
361
|
clientId: req.clientId,
|
|
362
|
+
via: 'rest',
|
|
293
363
|
});
|
|
294
364
|
if (cfg.monitor?.requestLog !== false) {
|
|
295
365
|
logger.info(`${tool} → ${targetServerId} ${result.success ? 'ok' : 'failed'} ${result.durationMs}ms`);
|
|
@@ -314,10 +384,193 @@ export function createApiRouter(config, registry, proxy, metrics, options = {})
|
|
|
314
384
|
durationMs: result.durationMs,
|
|
315
385
|
});
|
|
316
386
|
}));
|
|
387
|
+
// ─── Resources & Prompts ────────────────────────────────────────────────────
|
|
388
|
+
const serverFilter = (req) => (typeof req.query.server === 'string' ? req.query.server : undefined);
|
|
389
|
+
const visible = (req, items) => {
|
|
390
|
+
const only = serverFilter(req);
|
|
391
|
+
return items.filter((i) => isServerInScope(scopeOf(req), i.serverId) && (!only || i.serverId === only));
|
|
392
|
+
};
|
|
393
|
+
router.get('/resources', auth, (req, res) => {
|
|
394
|
+
const resources = dedupeResources(visible(req, registry.getAllResources()));
|
|
395
|
+
res.json({ resources, total: resources.length });
|
|
396
|
+
});
|
|
397
|
+
router.get('/resources/templates', auth, (req, res) => {
|
|
398
|
+
const resourceTemplates = visible(req, registry.getAllResourceTemplates());
|
|
399
|
+
res.json({ resourceTemplates, total: resourceTemplates.length });
|
|
400
|
+
});
|
|
401
|
+
router.get('/prompts', auth, (req, res) => {
|
|
402
|
+
const prompts = visible(req, registry.getAllPrompts());
|
|
403
|
+
res.json({ prompts, total: prompts.length });
|
|
404
|
+
});
|
|
405
|
+
/** Forward one upstream request with the shared checks, metrics and status mapping. */
|
|
406
|
+
async function forward(req, res, serverId, method, params, kind, label, reply) {
|
|
407
|
+
const server = registry.getServer(serverId);
|
|
408
|
+
if (!server) {
|
|
409
|
+
res.status(404).json({ error: 'Not Found', message: `Server "${serverId}" not found` });
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
if (!isServerInScope(scopeOf(req), serverId)) {
|
|
413
|
+
res.status(403).json({ error: 'Forbidden', message: `Server "${serverId}" is not allowed for this client` });
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
if (!proxy.isConnected(serverId)) {
|
|
417
|
+
res.status(503).json({
|
|
418
|
+
error: 'Service Unavailable',
|
|
419
|
+
message: `Server "${serverId}" is not connected`,
|
|
420
|
+
status: registry.getHealth(serverId)?.status,
|
|
421
|
+
});
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const result = await proxy.request(serverId, method, params, server.timeout);
|
|
425
|
+
metrics.record({
|
|
426
|
+
serverId,
|
|
427
|
+
toolName: label,
|
|
428
|
+
durationMs: result.durationMs,
|
|
429
|
+
success: result.success,
|
|
430
|
+
errorMessage: result.error?.message,
|
|
431
|
+
clientId: req.clientId,
|
|
432
|
+
via: 'rest',
|
|
433
|
+
kind,
|
|
434
|
+
});
|
|
435
|
+
if (cfg.monitor?.requestLog !== false) {
|
|
436
|
+
logger.info(`${method} ${label} → ${serverId} ${result.success ? 'ok' : 'failed'} ${result.durationMs}ms`);
|
|
437
|
+
}
|
|
438
|
+
if (res.headersSent)
|
|
439
|
+
return;
|
|
440
|
+
if (!result.success) {
|
|
441
|
+
const status = result.error?.code === ERR_TIMEOUT ? 504 : 502;
|
|
442
|
+
res.status(status).json({
|
|
443
|
+
error: status === 504 ? 'Gateway Timeout' : 'Upstream Error',
|
|
444
|
+
message: result.error?.message,
|
|
445
|
+
code: result.error?.code,
|
|
446
|
+
durationMs: result.durationMs,
|
|
447
|
+
});
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
res.json(reply(result.result, result.durationMs));
|
|
451
|
+
}
|
|
452
|
+
router.post('/resources/read', auth, rateLimit, asyncHandler(async (req, res) => {
|
|
453
|
+
const body = (req.body ?? {});
|
|
454
|
+
const { uri, server } = body;
|
|
455
|
+
if (typeof uri !== 'string' || uri.length === 0) {
|
|
456
|
+
res.status(400).json({ error: 'Bad Request', message: '"uri" must be a non-empty string' });
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
if (server !== undefined && typeof server !== 'string') {
|
|
460
|
+
res.status(400).json({ error: 'Bad Request', message: '"server" must be a string' });
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
let target = server;
|
|
464
|
+
if (!target) {
|
|
465
|
+
const scope = scopeOf(req);
|
|
466
|
+
const inScope = (id) => isServerInScope(scope, id);
|
|
467
|
+
target = routeResource(uri, registry.getAllResources().filter((r) => inScope(r.serverId)), registry.getAllResourceTemplates().filter((t) => inScope(t.serverId)), registry.getEnabledServers().map((s) => s.id).filter((id) => inScope(id) && proxy.hasCapability(id, 'resources')));
|
|
468
|
+
if (!target) {
|
|
469
|
+
res.status(404).json({ error: 'Not Found', message: `No server provides resource "${uri}"; pass "server"` });
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
await forward(req, res, target, 'resources/read', { uri }, 'resource', uri, (result, durationMs) => ({
|
|
474
|
+
result,
|
|
475
|
+
server: target,
|
|
476
|
+
uri,
|
|
477
|
+
durationMs,
|
|
478
|
+
}));
|
|
479
|
+
}));
|
|
480
|
+
router.post('/prompts/get', auth, rateLimit, asyncHandler(async (req, res) => {
|
|
481
|
+
const body = (req.body ?? {});
|
|
482
|
+
const { name, server } = body;
|
|
483
|
+
const args = body.arguments ?? {};
|
|
484
|
+
if (typeof name !== 'string' || name.length === 0) {
|
|
485
|
+
res.status(400).json({ error: 'Bad Request', message: '"name" must be a non-empty string' });
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
if (server !== undefined && typeof server !== 'string') {
|
|
489
|
+
res.status(400).json({ error: 'Bad Request', message: '"server" must be a string' });
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
if (typeof args !== 'object' || args === null || Array.isArray(args)) {
|
|
493
|
+
res.status(400).json({ error: 'Bad Request', message: '"arguments" must be an object' });
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
let target = server;
|
|
497
|
+
if (!target) {
|
|
498
|
+
const all = registry.getAllPrompts().filter((p) => p.name === name);
|
|
499
|
+
if (all.length === 0) {
|
|
500
|
+
res.status(404).json({ error: 'Not Found', message: `Prompt "${name}" not found in any server` });
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
const allowed = all.filter((p) => isServerInScope(scopeOf(req), p.serverId));
|
|
504
|
+
if (allowed.length === 0) {
|
|
505
|
+
res.status(403).json({ error: 'Forbidden', message: `Prompt "${name}" is not allowed for this client` });
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
if (allowed.length > 1) {
|
|
509
|
+
res.status(409).json({
|
|
510
|
+
error: 'Conflict',
|
|
511
|
+
message: `Prompt "${name}" is provided by several servers; pass "server" to choose one`,
|
|
512
|
+
servers: allowed.map((p) => p.serverId),
|
|
513
|
+
});
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
target = allowed[0].serverId;
|
|
517
|
+
}
|
|
518
|
+
await forward(req, res, target, 'prompts/get', { name, arguments: args }, 'prompt', name, (result, durationMs) => ({
|
|
519
|
+
result,
|
|
520
|
+
server: target,
|
|
521
|
+
name,
|
|
522
|
+
durationMs,
|
|
523
|
+
}));
|
|
524
|
+
}));
|
|
317
525
|
// ─── Recent Requests ────────────────────────────────────────────────────────
|
|
526
|
+
// History: in-memory log, or the persistent audit log when `audit.enabled`.
|
|
527
|
+
// Filters: server, tool, client, success, via, kind, since, until (ISO or ms), cursor.
|
|
318
528
|
router.get('/requests', auth, (req, res) => {
|
|
319
529
|
const limit = parseIntParam(req.query.limit, 50, 1, 500);
|
|
320
|
-
|
|
530
|
+
const str = (k) => (typeof req.query[k] === 'string' && req.query[k] !== '' ? req.query[k] : undefined);
|
|
531
|
+
const bad = (message) => res.status(400).json({ error: 'Bad Request', message });
|
|
532
|
+
const time = (k) => {
|
|
533
|
+
const v = str(k);
|
|
534
|
+
if (v === undefined)
|
|
535
|
+
return undefined;
|
|
536
|
+
const t = /^\d+$/.test(v) ? Number(v) : Date.parse(v);
|
|
537
|
+
return Number.isFinite(t) ? t : null;
|
|
538
|
+
};
|
|
539
|
+
const since = time('since');
|
|
540
|
+
const until = time('until');
|
|
541
|
+
if (since === null || until === null)
|
|
542
|
+
return void bad('"since" / "until" must be ISO dates or epoch milliseconds');
|
|
543
|
+
const success = str('success');
|
|
544
|
+
if (success !== undefined && success !== 'true' && success !== 'false')
|
|
545
|
+
return void bad('"success" must be true or false');
|
|
546
|
+
const via = str('via');
|
|
547
|
+
if (via !== undefined && via !== 'rest' && via !== 'mcp')
|
|
548
|
+
return void bad('"via" must be rest or mcp');
|
|
549
|
+
const kind = str('kind');
|
|
550
|
+
if (kind !== undefined && !['tool', 'resource', 'prompt'].includes(kind))
|
|
551
|
+
return void bad('"kind" must be tool, resource or prompt');
|
|
552
|
+
// Restricted clients only see their own calls.
|
|
553
|
+
const own = isRestricted(scopeOf(req)) ? req.clientId ?? '' : undefined;
|
|
554
|
+
try {
|
|
555
|
+
const page = metrics.queryRequests({
|
|
556
|
+
limit,
|
|
557
|
+
cursor: str('cursor'),
|
|
558
|
+
since,
|
|
559
|
+
until,
|
|
560
|
+
server: str('server'),
|
|
561
|
+
tool: str('tool'),
|
|
562
|
+
clientId: own ?? str('client'),
|
|
563
|
+
success: success === undefined ? undefined : success === 'true',
|
|
564
|
+
via: via,
|
|
565
|
+
kind: kind,
|
|
566
|
+
});
|
|
567
|
+
res.json(page);
|
|
568
|
+
}
|
|
569
|
+
catch (err) {
|
|
570
|
+
if (err instanceof RangeError)
|
|
571
|
+
return void bad('invalid "cursor"');
|
|
572
|
+
throw err;
|
|
573
|
+
}
|
|
321
574
|
});
|
|
322
575
|
return router;
|
|
323
576
|
}
|
package/dist/gateway/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/gateway/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/gateway/api.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import type { AddressInfo } from 'net';
|
|
5
5
|
import type { GatewayConfig } from '../utils/types.js';
|
|
6
6
|
import { ServerRegistry } from '../registry/index.js';
|
|
7
|
+
import { McpEndpoint } from '../mcp/endpoint.js';
|
|
7
8
|
export declare class Gateway {
|
|
8
9
|
private config;
|
|
9
10
|
private readonly app;
|
|
@@ -13,6 +14,7 @@ export declare class Gateway {
|
|
|
13
14
|
private readonly metrics;
|
|
14
15
|
private readonly supervisor;
|
|
15
16
|
private router?;
|
|
17
|
+
private mcp?;
|
|
16
18
|
private cors;
|
|
17
19
|
private readonly reloadLock;
|
|
18
20
|
private started;
|
|
@@ -43,6 +45,8 @@ export declare class Gateway {
|
|
|
43
45
|
*/
|
|
44
46
|
reload(next: GatewayConfig): Promise<void>;
|
|
45
47
|
private connectServers;
|
|
48
|
+
/** The downstream MCP endpoint (undefined when `mcp.enabled` is false or before start). */
|
|
49
|
+
getMcpEndpoint(): McpEndpoint | undefined;
|
|
46
50
|
/** Server registry (read-only use when embedding). */
|
|
47
51
|
getRegistry(): ServerRegistry;
|
|
48
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAIvC,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAIvC,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAWtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUjD,qBAAa,OAAO;IAcN,OAAO,CAAC,MAAM;IAb1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,GAAG,CAAC,CAAc;IAC1B,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAgB;gBAEb,MAAM,EAAE,aAAa;IAQnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqG5B,uDAAuD;IACvD,OAAO,IAAI,WAAW,GAAG,SAAS;IAKlC,kFAAkF;IAClF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAKP,KAAK;IAkBnB;;;;OAIG;YACW,WAAW;YAkBX,iBAAiB;IAkB/B;;;;;;;;;OASG;IACG,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA6ElC,cAAc;IAiB5B,2FAA2F;IAC3F,cAAc,IAAI,WAAW,GAAG,SAAS;IAIzC,sDAAsD;IACtD,WAAW,IAAI,cAAc;CAG9B"}
|
package/dist/gateway/index.js
CHANGED
|
@@ -17,6 +17,8 @@ import { errorHandler, notFoundHandler } from '../middleware/error-handler.js';
|
|
|
17
17
|
import { logger } from '../utils/logger.js';
|
|
18
18
|
import { Mutex } from '../utils/mutex.js';
|
|
19
19
|
import { VERSION } from '../utils/version.js';
|
|
20
|
+
import { McpEndpoint } from '../mcp/endpoint.js';
|
|
21
|
+
import { SqliteAuditStore } from '../monitor/audit.js';
|
|
20
22
|
function findDashboard() {
|
|
21
23
|
// src/gateway → ../../dashboard (tsx) and dist/gateway → ../../dashboard (built)
|
|
22
24
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
@@ -32,6 +34,7 @@ export class Gateway {
|
|
|
32
34
|
metrics;
|
|
33
35
|
supervisor;
|
|
34
36
|
router;
|
|
37
|
+
mcp;
|
|
35
38
|
cors;
|
|
36
39
|
reloadLock = new Mutex();
|
|
37
40
|
started = false;
|
|
@@ -60,6 +63,21 @@ export class Gateway {
|
|
|
60
63
|
// Access-Control-Allow-Origin value, which browsers reject.
|
|
61
64
|
// Indirection so CORS origins can be hot reloaded.
|
|
62
65
|
this.app.use((req, res, next) => this.cors(req, res, next));
|
|
66
|
+
// Downstream MCP endpoint (parses its own body so JSON errors become JSON-RPC errors).
|
|
67
|
+
if (this.config.mcp?.enabled !== false) {
|
|
68
|
+
const router = this.router;
|
|
69
|
+
this.mcp = new McpEndpoint(this.config.mcp, {
|
|
70
|
+
registry: this.registry,
|
|
71
|
+
proxy: this.proxy,
|
|
72
|
+
metrics: this.metrics,
|
|
73
|
+
authenticate: router.authenticate,
|
|
74
|
+
takeRateLimit: (req) => router.takeRateLimit(req),
|
|
75
|
+
corsOrigins: () => this.config.corsOrigins,
|
|
76
|
+
resolveClient: (clientId) => router.resolveClient(clientId),
|
|
77
|
+
requestLog: () => this.config.monitor?.requestLog !== false,
|
|
78
|
+
});
|
|
79
|
+
this.app.use(this.mcp.router());
|
|
80
|
+
}
|
|
63
81
|
this.app.use(express.json({ limit: '10mb' }));
|
|
64
82
|
this.app.use('/api/v1', this.router);
|
|
65
83
|
const dashboard = this.config.dashboard?.enabled === false ? undefined : findDashboard();
|
|
@@ -71,6 +89,7 @@ export class Gateway {
|
|
|
71
89
|
name: 'mcp-gateway',
|
|
72
90
|
version: VERSION,
|
|
73
91
|
docs: '/api/v1/health',
|
|
92
|
+
mcp: this.mcp ? this.mcp.path : 'disabled',
|
|
74
93
|
dashboard: dashboard
|
|
75
94
|
? '/dashboard'
|
|
76
95
|
: this.config.dashboard?.enabled === false
|
|
@@ -81,6 +100,17 @@ export class Gateway {
|
|
|
81
100
|
this.app.use(notFoundHandler);
|
|
82
101
|
this.app.use(errorHandler);
|
|
83
102
|
this.metrics.start();
|
|
103
|
+
if (this.config.audit?.enabled) {
|
|
104
|
+
try {
|
|
105
|
+
const store = new SqliteAuditStore(this.config.audit.path ?? 'mcp-gateway-audit.db');
|
|
106
|
+
this.metrics.setAuditStore(store, this.config.audit.retentionDays ?? 30);
|
|
107
|
+
logger.info(`Audit log: ${store.path}`);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
await this.shutdownInternals();
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
84
114
|
await this.connectServers(this.config.servers);
|
|
85
115
|
this.registry.startHealthChecks((serverId) => this.checkHealth(serverId));
|
|
86
116
|
// Reject on listen errors (EADDRINUSE, EACCES) instead of hanging forever
|
|
@@ -161,9 +191,20 @@ export class Gateway {
|
|
|
161
191
|
this.registry.updateHealth(serverId, 'offline', undefined, prev?.errorMessage);
|
|
162
192
|
}
|
|
163
193
|
async shutdownInternals() {
|
|
194
|
+
this.mcp?.close();
|
|
164
195
|
this.supervisor.stop();
|
|
165
196
|
this.registry.stopHealthChecks();
|
|
166
197
|
this.metrics.stop();
|
|
198
|
+
const audit = this.metrics.getAuditStore();
|
|
199
|
+
if (audit) {
|
|
200
|
+
this.metrics.setAuditStore(undefined);
|
|
201
|
+
try {
|
|
202
|
+
audit.close();
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
/* already closed */
|
|
206
|
+
}
|
|
207
|
+
}
|
|
167
208
|
this.router?.close();
|
|
168
209
|
await this.proxy.disconnectAll();
|
|
169
210
|
}
|
|
@@ -192,7 +233,7 @@ export class Gateway {
|
|
|
192
233
|
return !prev || key(prev) !== key(s);
|
|
193
234
|
});
|
|
194
235
|
const applied = [];
|
|
195
|
-
for (const field of ['port', 'host', 'healthCheckIntervalMs', 'dashboard']) {
|
|
236
|
+
for (const field of ['port', 'host', 'healthCheckIntervalMs', 'dashboard', 'audit']) {
|
|
196
237
|
if (!same(this.config[field], next[field])) {
|
|
197
238
|
logger.warn(`Config "${field}" changed — restart required for it to take effect`);
|
|
198
239
|
}
|
|
@@ -202,12 +243,18 @@ export class Gateway {
|
|
|
202
243
|
}
|
|
203
244
|
// Router-level settings (auth may be rejected and kept; the router logs that).
|
|
204
245
|
this.router?.update(next);
|
|
205
|
-
if (!same(this.config.auth, next.auth))
|
|
246
|
+
if (!same(this.config.auth, next.auth)) {
|
|
206
247
|
applied.push('auth');
|
|
248
|
+
this.mcp?.refreshClients();
|
|
249
|
+
}
|
|
207
250
|
if (!same(this.config.rateLimit, next.rateLimit))
|
|
208
251
|
applied.push('rateLimit');
|
|
209
252
|
if (!same(this.config.monitor, next.monitor))
|
|
210
253
|
applied.push('monitor');
|
|
254
|
+
if (!same(this.config.mcp, next.mcp)) {
|
|
255
|
+
this.mcp?.update(next.mcp);
|
|
256
|
+
applied.push('mcp');
|
|
257
|
+
}
|
|
211
258
|
if (!same(this.config.corsOrigins, next.corsOrigins)) {
|
|
212
259
|
this.cors = corsMiddleware({ origins: next.corsOrigins ?? ['*'] });
|
|
213
260
|
applied.push('corsOrigins');
|
|
@@ -234,6 +281,7 @@ export class Gateway {
|
|
|
234
281
|
monitor: next.monitor ? { ...next.monitor, retentionHours: this.config.monitor?.retentionHours } : next.monitor,
|
|
235
282
|
corsOrigins: next.corsOrigins,
|
|
236
283
|
reconnect: next.reconnect,
|
|
284
|
+
mcp: next.mcp,
|
|
237
285
|
};
|
|
238
286
|
await this.connectServers(toConnect);
|
|
239
287
|
logger.info(`Hot reload applied: ${toConnect.length} (re)connected, ${toRemove.length} removed` +
|
|
@@ -253,6 +301,10 @@ export class Gateway {
|
|
|
253
301
|
const succeeded = outcomes.filter(Boolean).length;
|
|
254
302
|
logger.info(`Connected: ${succeeded}/${enabled.length} servers (${enabled.length - succeeded} failed)`);
|
|
255
303
|
}
|
|
304
|
+
/** The downstream MCP endpoint (undefined when `mcp.enabled` is false or before start). */
|
|
305
|
+
getMcpEndpoint() {
|
|
306
|
+
return this.mcp;
|
|
307
|
+
}
|
|
256
308
|
/** Server registry (read-only use when embedding). */
|
|
257
309
|
getRegistry() {
|
|
258
310
|
return this.registry;
|