@winstonsayno/mcp-gateway 0.3.0 → 1.0.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 +41 -0
- package/README.md +280 -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 +99 -10
- package/dist/config/loader.js.map +1 -1
- package/dist/gateway/api.d.ts +30 -0
- package/dist/gateway/api.d.ts.map +1 -1
- package/dist/gateway/api.js +308 -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 +55 -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 +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -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 +25 -2
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +171 -16
- package/dist/proxy/index.js.map +1 -1
- package/dist/registry/index.d.ts +16 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +37 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/utils/tool-filter.d.ts +24 -0
- package/dist/utils/tool-filter.d.ts.map +1 -0
- package/dist/utils/tool-filter.js +48 -0
- package/dist/utils/tool-filter.js.map +1 -0
- package/dist/utils/types.d.ts +116 -2
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Downstream MCP endpoint — MCP Streamable HTTP server (spec 2025-06-18,
|
|
3
|
+
* 2025-03-26 accepted) that aggregates every upstream server behind one URL.
|
|
4
|
+
*
|
|
5
|
+
* - `POST <path>`: JSON-RPC requests / notifications / responses (batches
|
|
6
|
+
* accepted for 2025-03-26 clients). Answers with `application/json`.
|
|
7
|
+
* - `GET <path>`: server→client SSE stream for notifications
|
|
8
|
+
* (`notifications/tools/list_changed`).
|
|
9
|
+
* - `DELETE <path>`: ends the session.
|
|
10
|
+
*
|
|
11
|
+
* Sessions (`Mcp-Session-Id`) are bound to the authenticated client: a
|
|
12
|
+
* session id presented with another key is treated as unknown. Auth, rate
|
|
13
|
+
* limiting (per `tools/call`), `maxConcurrency`, timeouts, metrics and the
|
|
14
|
+
* request log are shared with the REST API.
|
|
15
|
+
*
|
|
16
|
+
* @module mcp/endpoint
|
|
17
|
+
*/
|
|
18
|
+
import express from 'express';
|
|
19
|
+
import type { Request, RequestHandler } from 'express';
|
|
20
|
+
import type { McpEndpointConfig } from '../utils/types.js';
|
|
21
|
+
import type { ServerRegistry } from '../registry/index.js';
|
|
22
|
+
import { type McpProxy } from '../proxy/index.js';
|
|
23
|
+
import type { MetricsCollector } from '../monitor/index.js';
|
|
24
|
+
import type { RateLimitDecision } from '../auth/ratelimit.js';
|
|
25
|
+
import { type AccessScope } from '../auth/scopes.js';
|
|
26
|
+
/** Protocol versions the endpoint speaks, newest first. */
|
|
27
|
+
export declare const DOWNSTREAM_PROTOCOL_VERSIONS: string[];
|
|
28
|
+
export declare const LATEST_PROTOCOL_VERSION: string;
|
|
29
|
+
export declare const JSONRPC_PARSE_ERROR = -32700;
|
|
30
|
+
export declare const JSONRPC_INVALID_REQUEST = -32600;
|
|
31
|
+
export declare const JSONRPC_METHOD_NOT_FOUND = -32601;
|
|
32
|
+
export declare const JSONRPC_INVALID_PARAMS = -32602;
|
|
33
|
+
export declare const JSONRPC_INTERNAL_ERROR = -32603;
|
|
34
|
+
/** Gateway rate limit hit on `tools/call` (`data.retryAfter` in seconds). */
|
|
35
|
+
export declare const ERR_RATE_LIMITED = -32029;
|
|
36
|
+
/** The caller's scopes do not allow this server / tool. */
|
|
37
|
+
export declare const ERR_FORBIDDEN = -32003;
|
|
38
|
+
export declare const DEFAULT_MCP_CONFIG: Required<Omit<McpEndpointConfig, 'allowedOrigins' | 'instructions'>>;
|
|
39
|
+
export interface McpSessionSummary {
|
|
40
|
+
id: string;
|
|
41
|
+
clientId?: string;
|
|
42
|
+
protocolVersion: string;
|
|
43
|
+
clientInfo?: {
|
|
44
|
+
name?: string;
|
|
45
|
+
version?: string;
|
|
46
|
+
};
|
|
47
|
+
createdAt: Date;
|
|
48
|
+
lastSeen: Date;
|
|
49
|
+
streams: number;
|
|
50
|
+
inflight: number;
|
|
51
|
+
}
|
|
52
|
+
export interface McpEndpointDeps {
|
|
53
|
+
registry: ServerRegistry;
|
|
54
|
+
proxy: McpProxy;
|
|
55
|
+
metrics: MetricsCollector;
|
|
56
|
+
/** Auth middleware (sets `clientId`). */
|
|
57
|
+
authenticate: RequestHandler;
|
|
58
|
+
/** Count one rate-limited call for the request. */
|
|
59
|
+
takeRateLimit: (req: Request) => RateLimitDecision | undefined;
|
|
60
|
+
/** Gateway CORS origins (used when `mcp.allowedOrigins` is unset). */
|
|
61
|
+
corsOrigins: () => readonly string[] | undefined;
|
|
62
|
+
/** Whether request logging is on. */
|
|
63
|
+
requestLog: () => boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Current scope of a client id, used to re-evaluate open sessions after an
|
|
66
|
+
* auth hot reload (`known: false` ends the session). Optional.
|
|
67
|
+
*/
|
|
68
|
+
resolveClient?: (clientId: string | undefined) => {
|
|
69
|
+
known: boolean;
|
|
70
|
+
scope?: AccessScope;
|
|
71
|
+
} | undefined;
|
|
72
|
+
}
|
|
73
|
+
export declare class McpEndpoint {
|
|
74
|
+
private readonly deps;
|
|
75
|
+
private cfg;
|
|
76
|
+
private readonly sessions;
|
|
77
|
+
private sweepTimer?;
|
|
78
|
+
private keepaliveTimer?;
|
|
79
|
+
private notifyTimer?;
|
|
80
|
+
private closed;
|
|
81
|
+
private readonly onRegistryChange;
|
|
82
|
+
constructor(config: McpEndpointConfig | undefined, deps: McpEndpointDeps);
|
|
83
|
+
get path(): string;
|
|
84
|
+
/** Apply hot-reloadable settings (everything except `enabled` and `path`). */
|
|
85
|
+
update(config: McpEndpointConfig | undefined): void;
|
|
86
|
+
/** Express router serving POST / GET / DELETE on the configured path. */
|
|
87
|
+
router(): express.Router;
|
|
88
|
+
/** Close every stream and session (gateway shutdown). */
|
|
89
|
+
close(): void;
|
|
90
|
+
getSessions(): McpSessionSummary[];
|
|
91
|
+
private checkOrigin;
|
|
92
|
+
private handlePost;
|
|
93
|
+
private initialize;
|
|
94
|
+
/** Validate session + protocol headers; on failure the response is already sent. */
|
|
95
|
+
private resolveSession;
|
|
96
|
+
private handleGet;
|
|
97
|
+
private handleDelete;
|
|
98
|
+
private handleNotification;
|
|
99
|
+
private handleRequest;
|
|
100
|
+
/** Tools visible to a client (server filters + its scope), with exposed names. */
|
|
101
|
+
private toolIndex;
|
|
102
|
+
private resources;
|
|
103
|
+
private templates;
|
|
104
|
+
private promptIndex;
|
|
105
|
+
private resourcesFingerprint;
|
|
106
|
+
private promptsFingerprint;
|
|
107
|
+
/** Cursor pagination over a list (same scheme as tools/list). */
|
|
108
|
+
private paginate;
|
|
109
|
+
/** Forward resources/read or prompts/get with shared rate limit, metrics and error mapping. */
|
|
110
|
+
private forward;
|
|
111
|
+
private readResource;
|
|
112
|
+
private getPrompt;
|
|
113
|
+
/** Count one call against the client's rate limit; returns an error reply when exceeded. */
|
|
114
|
+
private applyRateLimit;
|
|
115
|
+
private fingerprint;
|
|
116
|
+
private listTools;
|
|
117
|
+
private callTool;
|
|
118
|
+
private scheduleListChanged;
|
|
119
|
+
/** Re-evaluate every session's scope (after an auth hot reload) and notify changes. */
|
|
120
|
+
refreshClients(): void;
|
|
121
|
+
private sendListChanged;
|
|
122
|
+
/** Send a message on the session's most recent stream. */
|
|
123
|
+
private send;
|
|
124
|
+
private keepalive;
|
|
125
|
+
private sweep;
|
|
126
|
+
/** Evict the least recently used idle session; false if none is idle. */
|
|
127
|
+
private evictOne;
|
|
128
|
+
private endSession;
|
|
129
|
+
/** Test hook: expire idle sessions now. */
|
|
130
|
+
sweepNow(now?: number): void;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../src/mcp/endpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAA0B,cAAc,EAAE,MAAM,SAAS,CAAC;AAE/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAiD,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAcxF,2DAA2D;AAC3D,eAAO,MAAM,4BAA4B,UAA+B,CAAC;AACzE,eAAO,MAAM,uBAAuB,QAAmC,CAAC;AAGxE,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAC/C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,2DAA2D;AAC3D,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,cAAc,CAAC,CAOnG,CAAC;AA+CF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,yCAAyC;IACzC,YAAY,EAAE,cAAc,CAAC;IAC7B,mDAAmD;IACnD,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAC/D,sEAAsE;IACtE,WAAW,EAAE,MAAM,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,qCAAqC;IACrC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,SAAS,CAAC;CACvG;AA8BD,qBAAa,WAAW;IAWpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVvB,OAAO,CAAC,GAAG,CAAgD;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;gBAGnE,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACpB,IAAI,EAAE,eAAe;IAYxC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,8EAA8E;IAC9E,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI;IAUnD,yEAAyE;IACzE,MAAM,IAAI,OAAO,CAAC,MAAM;IA+BxB,yDAAyD;IACzD,KAAK,IAAI,IAAI;IAWb,WAAW,IAAI,iBAAiB,EAAE;IAelC,OAAO,CAAC,WAAW;YAcL,UAAU;IAuExB,OAAO,CAAC,UAAU;IAmDlB,oFAAoF;IACpF,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,kBAAkB;YAWZ,aAAa;IAwC3B,kFAAkF;IAClF,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,kBAAkB;IAI1B,iEAAiE;IACjE,OAAO,CAAC,QAAQ;IAehB,+FAA+F;YACjF,OAAO;IAsCrB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,SAAS;IAsBjB,4FAA4F;IAC5F,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,SAAS;YAmBH,QAAQ;IAmFtB,OAAO,CAAC,mBAAmB;IAO3B,uFAAuF;IACvF,cAAc,IAAI,IAAI;IAItB,OAAO,CAAC,eAAe;IA6BvB,0DAA0D;IAC1D,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,KAAK;IAUb,yEAAyE;IACzE,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,UAAU;IAQlB,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAG7B"}
|