@winstonsayno/mcp-gateway 0.0.0-stage → 0.3.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 (114) hide show
  1. package/CHANGELOG.md +124 -0
  2. package/LICENSE +21 -0
  3. package/README.md +377 -2
  4. package/dashboard/README.md +27 -0
  5. package/dashboard/index.html +415 -0
  6. package/dist/auth/middleware.d.ts +24 -0
  7. package/dist/auth/middleware.d.ts.map +1 -0
  8. package/dist/auth/middleware.js +108 -0
  9. package/dist/auth/middleware.js.map +1 -0
  10. package/dist/auth/ratelimit.d.ts +19 -0
  11. package/dist/auth/ratelimit.d.ts.map +1 -0
  12. package/dist/auth/ratelimit.js +81 -0
  13. package/dist/auth/ratelimit.js.map +1 -0
  14. package/dist/cli.d.ts +6 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +129 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config/loader.d.ts +13 -0
  19. package/dist/config/loader.d.ts.map +1 -0
  20. package/dist/config/loader.js +268 -0
  21. package/dist/config/loader.js.map +1 -0
  22. package/dist/config/watcher.d.ts +29 -0
  23. package/dist/config/watcher.d.ts.map +1 -0
  24. package/dist/config/watcher.js +96 -0
  25. package/dist/config/watcher.js.map +1 -0
  26. package/dist/gateway/api.d.ts +29 -0
  27. package/dist/gateway/api.d.ts.map +1 -0
  28. package/dist/gateway/api.js +280 -0
  29. package/dist/gateway/api.js.map +1 -0
  30. package/dist/gateway/index.d.ts +49 -0
  31. package/dist/gateway/index.d.ts.map +1 -0
  32. package/dist/gateway/index.js +260 -0
  33. package/dist/gateway/index.js.map +1 -0
  34. package/dist/gateway/supervisor.d.ts +58 -0
  35. package/dist/gateway/supervisor.d.ts.map +1 -0
  36. package/dist/gateway/supervisor.js +205 -0
  37. package/dist/gateway/supervisor.js.map +1 -0
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +12 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/middleware/cors.d.ts +19 -0
  43. package/dist/middleware/cors.d.ts.map +1 -0
  44. package/dist/middleware/cors.js +65 -0
  45. package/dist/middleware/cors.js.map +1 -0
  46. package/dist/middleware/error-handler.d.ts +40 -0
  47. package/dist/middleware/error-handler.d.ts.map +1 -0
  48. package/dist/middleware/error-handler.js +98 -0
  49. package/dist/middleware/error-handler.js.map +1 -0
  50. package/dist/middleware/request-id.d.ts +23 -0
  51. package/dist/middleware/request-id.d.ts.map +1 -0
  52. package/dist/middleware/request-id.js +30 -0
  53. package/dist/middleware/request-id.js.map +1 -0
  54. package/dist/middleware/timeout.d.ts +12 -0
  55. package/dist/middleware/timeout.d.ts.map +1 -0
  56. package/dist/middleware/timeout.js +39 -0
  57. package/dist/middleware/timeout.js.map +1 -0
  58. package/dist/monitor/index.d.ts +49 -0
  59. package/dist/monitor/index.d.ts.map +1 -0
  60. package/dist/monitor/index.js +204 -0
  61. package/dist/monitor/index.js.map +1 -0
  62. package/dist/proxy/index.d.ts +86 -0
  63. package/dist/proxy/index.d.ts.map +1 -0
  64. package/dist/proxy/index.js +389 -0
  65. package/dist/proxy/index.js.map +1 -0
  66. package/dist/registry/index.d.ts +41 -0
  67. package/dist/registry/index.d.ts.map +1 -0
  68. package/dist/registry/index.js +157 -0
  69. package/dist/registry/index.js.map +1 -0
  70. package/dist/transport/channel.d.ts +61 -0
  71. package/dist/transport/channel.d.ts.map +1 -0
  72. package/dist/transport/channel.js +38 -0
  73. package/dist/transport/channel.js.map +1 -0
  74. package/dist/transport/sse-parser.d.ts +30 -0
  75. package/dist/transport/sse-parser.d.ts.map +1 -0
  76. package/dist/transport/sse-parser.js +107 -0
  77. package/dist/transport/sse-parser.js.map +1 -0
  78. package/dist/transport/sse.d.ts +39 -0
  79. package/dist/transport/sse.d.ts.map +1 -0
  80. package/dist/transport/sse.js +142 -0
  81. package/dist/transport/sse.js.map +1 -0
  82. package/dist/transport/stdio.d.ts +35 -0
  83. package/dist/transport/stdio.d.ts.map +1 -0
  84. package/dist/transport/stdio.js +149 -0
  85. package/dist/transport/stdio.js.map +1 -0
  86. package/dist/transport/streamable-http.d.ts +45 -0
  87. package/dist/transport/streamable-http.d.ts.map +1 -0
  88. package/dist/transport/streamable-http.js +183 -0
  89. package/dist/transport/streamable-http.js.map +1 -0
  90. package/dist/transport/websocket.d.ts +38 -0
  91. package/dist/transport/websocket.d.ts.map +1 -0
  92. package/dist/transport/websocket.js +172 -0
  93. package/dist/transport/websocket.js.map +1 -0
  94. package/dist/utils/logger.d.ts +16 -0
  95. package/dist/utils/logger.d.ts.map +1 -0
  96. package/dist/utils/logger.js +60 -0
  97. package/dist/utils/logger.js.map +1 -0
  98. package/dist/utils/mutex.d.ts +25 -0
  99. package/dist/utils/mutex.d.ts.map +1 -0
  100. package/dist/utils/mutex.js +62 -0
  101. package/dist/utils/mutex.js.map +1 -0
  102. package/dist/utils/semaphore.d.ts +16 -0
  103. package/dist/utils/semaphore.d.ts.map +1 -0
  104. package/dist/utils/semaphore.js +42 -0
  105. package/dist/utils/semaphore.js.map +1 -0
  106. package/dist/utils/types.d.ts +215 -0
  107. package/dist/utils/types.d.ts.map +1 -0
  108. package/dist/utils/types.js +5 -0
  109. package/dist/utils/types.js.map +1 -0
  110. package/dist/utils/version.d.ts +6 -0
  111. package/dist/utils/version.d.ts.map +1 -0
  112. package/dist/utils/version.js +18 -0
  113. package/dist/utils/version.js.map +1 -0
  114. package/package.json +78 -4
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Counting semaphore used to enforce per-server `maxConcurrency`.
3
+ *
4
+ * @module utils/semaphore
5
+ */
6
+ export declare class Semaphore {
7
+ private readonly max;
8
+ private active;
9
+ private readonly waiters;
10
+ constructor(max: number);
11
+ /** Resolves with a release function once a slot is free. */
12
+ acquire(): Promise<() => void>;
13
+ get pending(): number;
14
+ get inFlight(): number;
15
+ }
16
+ //# sourceMappingURL=semaphore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semaphore.d.ts","sourceRoot":"","sources":["../../src/utils/semaphore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAEpB,GAAG,EAAE,MAAM;IAIxC,4DAA4D;IAC5D,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;IAiB9B,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Counting semaphore used to enforce per-server `maxConcurrency`.
3
+ *
4
+ * @module utils/semaphore
5
+ */
6
+ export class Semaphore {
7
+ max;
8
+ active = 0;
9
+ waiters = [];
10
+ constructor(max) {
11
+ this.max = max;
12
+ if (!Number.isFinite(max) || max < 1)
13
+ this.max = Infinity;
14
+ }
15
+ /** Resolves with a release function once a slot is free. */
16
+ acquire() {
17
+ return new Promise((resolve) => {
18
+ const grant = () => {
19
+ this.active++;
20
+ let released = false;
21
+ resolve(() => {
22
+ if (released)
23
+ return;
24
+ released = true;
25
+ this.active--;
26
+ this.waiters.shift()?.();
27
+ });
28
+ };
29
+ if (this.active < this.max)
30
+ grant();
31
+ else
32
+ this.waiters.push(grant);
33
+ });
34
+ }
35
+ get pending() {
36
+ return this.waiters.length;
37
+ }
38
+ get inFlight() {
39
+ return this.active;
40
+ }
41
+ }
42
+ //# sourceMappingURL=semaphore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semaphore.js","sourceRoot":"","sources":["../../src/utils/semaphore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,OAAO,SAAS;IAIS;IAHrB,MAAM,GAAG,CAAC,CAAC;IACF,OAAO,GAAsB,EAAE,CAAC;IAEjD,YAA6B,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;IAC5D,CAAC;IAED,4DAA4D;IAC5D,OAAO;QACL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,GAAG,EAAE;gBACjB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,OAAO,CAAC,GAAG,EAAE;oBACX,IAAI,QAAQ;wBAAE,OAAO;oBACrB,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;gBAC3B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG;gBAAE,KAAK,EAAE,CAAC;;gBAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Core type definitions for mcp-gateway
3
+ */
4
+ export type ServerTransport = 'stdio' | 'sse' | 'websocket' | 'streamable-http';
5
+ /**
6
+ * - `online`: connected and answering
7
+ * - `degraded`: connected but the last health ping failed
8
+ * - `reconnecting`: connection lost, an automatic reconnect is scheduled / running
9
+ * - `offline`: not connected and no reconnect pending (disabled, or gave up)
10
+ */
11
+ export type ServerStatus = 'online' | 'offline' | 'degraded' | 'reconnecting' | 'unknown';
12
+ export interface ReconnectConfig {
13
+ /** Reconnect servers that crash or disconnect (default true). */
14
+ enabled: boolean;
15
+ /** Delay before the first retry (ms, default 1000). */
16
+ initialDelayMs: number;
17
+ /** Upper bound for the delay (ms, default 60000). */
18
+ maxDelayMs: number;
19
+ /** Growth factor per failed attempt (default 2). */
20
+ multiplier: number;
21
+ /** Random jitter as a fraction of the delay, 0-1 (default 0.2). */
22
+ jitter: number;
23
+ /** Give up after this many consecutive failures; 0 = retry forever (default 0). */
24
+ maxAttempts: number;
25
+ }
26
+ export interface ReconnectState {
27
+ state: 'idle' | 'scheduled' | 'connecting' | 'gave-up' | 'disabled';
28
+ /** Consecutive failed attempts since the last successful connection. */
29
+ attempt: number;
30
+ /** Successful reconnects since the gateway started. */
31
+ reconnects: number;
32
+ nextAttemptAt?: Date;
33
+ lastError?: string;
34
+ lastDisconnectAt?: Date;
35
+ }
36
+ export interface McpServerConfig {
37
+ /** Unique identifier for this server */
38
+ id: string;
39
+ /** Human-readable display name */
40
+ name: string;
41
+ /** Optional description */
42
+ description?: string;
43
+ /** Transport type */
44
+ transport: ServerTransport;
45
+ /** For stdio: command to run */
46
+ command?: string;
47
+ /** For stdio: command arguments */
48
+ args?: string[];
49
+ /** For sse/websocket/streamable-http: URL to connect to */
50
+ url?: string;
51
+ /** For sse/websocket/streamable-http: extra HTTP headers (supports ${VAR}) */
52
+ headers?: Record<string, string>;
53
+ /** For websocket: subprotocol to request (default "mcp"; "" for none) */
54
+ subprotocol?: string;
55
+ /** Per-server overrides for automatic reconnect */
56
+ reconnect?: Partial<ReconnectConfig>;
57
+ /** Environment variables to pass to the server process */
58
+ env?: Record<string, string>;
59
+ /** Tags for grouping and filtering */
60
+ tags?: string[];
61
+ /** Whether this server is enabled */
62
+ enabled?: boolean;
63
+ /** Timeout in milliseconds for tool calls */
64
+ timeout?: number;
65
+ /** Maximum concurrent requests */
66
+ maxConcurrency?: number;
67
+ }
68
+ export interface ServerHealth {
69
+ serverId: string;
70
+ status: ServerStatus;
71
+ lastChecked: Date;
72
+ latencyMs?: number;
73
+ errorMessage?: string;
74
+ toolCount?: number;
75
+ /** When the current session was established. */
76
+ connectedSince?: Date;
77
+ /** Automatic reconnect bookkeeping. */
78
+ reconnect?: ReconnectState;
79
+ }
80
+ export interface GatewayConfig {
81
+ /** Gateway HTTP port */
82
+ port: number;
83
+ /** Host to bind to */
84
+ host: string;
85
+ /** Authentication configuration */
86
+ auth?: AuthConfig;
87
+ /** Rate limiting configuration */
88
+ rateLimit?: RateLimitConfig;
89
+ /** Monitoring configuration */
90
+ monitor?: MonitorConfig;
91
+ /** Registered MCP servers */
92
+ servers: McpServerConfig[];
93
+ /** CORS origins */
94
+ corsOrigins?: string[];
95
+ /** Log level */
96
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
97
+ /** Automatic reconnect of crashed / disconnected servers */
98
+ reconnect?: Partial<ReconnectConfig>;
99
+ /** Interval between health pings (ms, default 30000) */
100
+ healthCheckIntervalMs?: number;
101
+ /** Web dashboard */
102
+ dashboard?: {
103
+ enabled?: boolean;
104
+ };
105
+ }
106
+ export type AuthStrategy = 'none' | 'api-key' | 'jwt' | 'oauth2';
107
+ export interface AuthConfig {
108
+ strategy: AuthStrategy;
109
+ /** For api-key: list of valid keys */
110
+ apiKeys?: string[];
111
+ /** For jwt: secret or public key */
112
+ jwtSecret?: string;
113
+ /**
114
+ * Endpoints that are public by default and can be put behind auth.
115
+ * The dashboard page itself is a static shell; when auth is on it asks for
116
+ * a key and sends it with every API call.
117
+ */
118
+ protect?: {
119
+ /** Require auth for GET /api/v1/health (default false). /api/v1/health/live stays public. */
120
+ health?: boolean;
121
+ /** Require auth for GET /api/v1/metrics, incl. Prometheus scrapes (default false). */
122
+ metrics?: boolean;
123
+ };
124
+ /** For oauth2: provider config */
125
+ oauth2?: {
126
+ issuer: string;
127
+ audience: string;
128
+ };
129
+ }
130
+ export interface RateLimitConfig {
131
+ /** Requests per window */
132
+ limit: number;
133
+ /** Window duration in seconds */
134
+ windowSeconds: number;
135
+ /** Whether to apply per-key or globally */
136
+ perKey?: boolean;
137
+ }
138
+ export interface MonitorConfig {
139
+ /** Enable Prometheus metrics endpoint */
140
+ prometheus?: boolean;
141
+ /** Enable request logging */
142
+ requestLog?: boolean;
143
+ /** Retention period for metrics (hours) */
144
+ retentionHours?: number;
145
+ }
146
+ export interface RequestMetric {
147
+ id: string;
148
+ timestamp: Date;
149
+ serverId: string;
150
+ toolName: string;
151
+ durationMs: number;
152
+ success: boolean;
153
+ errorMessage?: string;
154
+ clientId?: string;
155
+ tokenCount?: number;
156
+ }
157
+ export interface AggregatedMetrics {
158
+ totalRequests: number;
159
+ successRate: number;
160
+ avgLatencyMs: number;
161
+ p95LatencyMs: number;
162
+ p99LatencyMs: number;
163
+ requestsPerMinute: number;
164
+ topTools: Array<{
165
+ name: string;
166
+ count: number;
167
+ }>;
168
+ topServers: Array<{
169
+ id: string;
170
+ count: number;
171
+ }>;
172
+ errorsByServer: Record<string, number>;
173
+ }
174
+ export interface ProxyRequest {
175
+ serverId: string;
176
+ method: string;
177
+ params?: unknown;
178
+ requestId?: string | number;
179
+ }
180
+ export interface ProxyResponse {
181
+ success: boolean;
182
+ result?: unknown;
183
+ error?: {
184
+ code: number;
185
+ message: string;
186
+ data?: unknown;
187
+ };
188
+ durationMs: number;
189
+ }
190
+ export interface ToolInfo {
191
+ name: string;
192
+ description?: string;
193
+ inputSchema?: Record<string, unknown>;
194
+ serverId: string;
195
+ serverName: string;
196
+ }
197
+ export interface MCPRequest {
198
+ jsonrpc: '2.0';
199
+ id?: string | number;
200
+ method: string;
201
+ params?: unknown;
202
+ }
203
+ export interface MCPResponse {
204
+ jsonrpc: '2.0';
205
+ id?: string | number;
206
+ result?: unknown;
207
+ error?: {
208
+ code: number;
209
+ message: string;
210
+ data?: unknown;
211
+ };
212
+ method?: string;
213
+ params?: unknown;
214
+ }
215
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,KAAK,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAChF;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAE1F,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;IACpE,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAID,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,kCAAkC;IAClC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,+BAA+B;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,6BAA6B;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,wDAAwD;IACxD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB;IACpB,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACnC;AAID,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,6FAA6F;QAC7F,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,sFAAsF;QACtF,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,kCAAkC;IAClC,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAID,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAID,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core type definitions for mcp-gateway
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Package version, read once from package.json at runtime so the CLI,
3
+ * health endpoint and MCP handshake never drift from the published version.
4
+ */
5
+ export declare const VERSION: string;
6
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,eAAO,MAAM,OAAO,QAAgB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Package version, read once from package.json at runtime so the CLI,
3
+ * health endpoint and MCP handshake never drift from the published version.
4
+ */
5
+ import { createRequire } from 'module';
6
+ function readVersion() {
7
+ try {
8
+ // Works from both src/utils (tsx) and dist/utils (compiled): ../../package.json
9
+ const require = createRequire(import.meta.url);
10
+ const pkg = require('../../package.json');
11
+ return pkg.version ?? '0.0.0';
12
+ }
13
+ catch {
14
+ return '0.0.0';
15
+ }
16
+ }
17
+ export const VERSION = readVersion();
18
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,gFAAgF;QAChF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAyB,CAAC;QAClE,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,80 @@
1
1
  {
2
2
  "name": "@winstonsayno/mcp-gateway",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.3.0",
4
+ "description": "A lightweight, open-source gateway for managing, routing, and monitoring multiple MCP (Model Context Protocol) servers.",
5
+ "keywords": [
6
+ "mcp",
7
+ "model-context-protocol",
8
+ "ai-agents",
9
+ "gateway",
10
+ "proxy",
11
+ "llm",
12
+ "ai",
13
+ "developer-tools",
14
+ "observability",
15
+ "typescript"
16
+ ],
17
+ "homepage": "https://github.com/HarrisonCN/mcp-gateway",
18
+ "bugs": {
19
+ "url": "https://github.com/HarrisonCN/mcp-gateway/issues"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/HarrisonCN/mcp-gateway.git"
24
+ },
25
+ "license": "MIT",
26
+ "author": "HarrisonCN",
27
+ "type": "module",
28
+ "main": "dist/index.js",
29
+ "types": "dist/index.d.ts",
30
+ "bin": {
31
+ "mcp-gateway": "dist/cli.js"
32
+ },
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "dev": "tsx watch src/cli.ts",
36
+ "start": "node dist/cli.js",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "test:coverage": "vitest run --coverage",
40
+ "typecheck": "tsc --noEmit",
41
+ "prepublishOnly": "npm run typecheck && npm test && npm run build"
42
+ },
43
+ "dependencies": {
44
+ "commander": "^12.1.0",
45
+ "dotenv": "^16.4.5",
46
+ "express": "^4.19.2",
47
+ "jose": "^5.4.0",
48
+ "ws": "^8.18.0",
49
+ "yaml": "^2.4.5",
50
+ "zod": "^3.23.8"
51
+ },
52
+ "devDependencies": {
53
+ "@modelcontextprotocol/sdk": "^1.32.1",
54
+ "@types/express": "^4.17.21",
55
+ "@types/node": "^20.14.0",
56
+ "@types/ws": "^8.5.10",
57
+ "tsx": "^4.15.6",
58
+ "typescript": "^5.5.2",
59
+ "vitest": "^1.6.0"
60
+ },
61
+ "engines": {
62
+ "node": ">=20.0.0"
63
+ },
64
+ "files": [
65
+ "dist",
66
+ "dashboard/index.html",
67
+ "README.md",
68
+ "LICENSE",
69
+ "CHANGELOG.md"
70
+ ],
71
+ "exports": {
72
+ ".": {
73
+ "types": "./dist/index.d.ts",
74
+ "import": "./dist/index.js"
75
+ }
76
+ },
77
+ "publishConfig": {
78
+ "access": "public"
79
+ }
80
+ }