@loop_ouroboros/mcp-hub-lite 1.2.6 → 1.2.8

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 (101) hide show
  1. package/CHANGELOG.md +666 -640
  2. package/dist/client/assets/HomeView-CgEri1kD.js +1 -0
  3. package/dist/client/assets/{ResourceDetailView-BGBtmsyc.js → ResourceDetailView-B8Qo1_jK.js} +1 -1
  4. package/dist/client/assets/ResourcesView-B12FzUdo.js +1 -0
  5. package/dist/client/assets/ServerDashboard-B3O-crvv.js +1 -0
  6. package/dist/client/assets/ServerDetail-Bz5_9yOY.js +2 -0
  7. package/dist/client/assets/{ServerDetail-CtnNKJGx.css → ServerDetail-CXg8rI3q.css} +1 -1
  8. package/dist/client/assets/{ServerListView-C7kcd4GC.js → ServerListView-SlZN8ppC.js} +2 -2
  9. package/dist/client/assets/{ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js → ServerStatusTags.vue_vue_type_script_setup_true_lang-DmGg4uuV.js} +1 -1
  10. package/dist/client/assets/SettingsView-D8fiOG0O.js +1 -0
  11. package/dist/client/assets/ToolCallDialog-DYEdhnCk.js +1 -0
  12. package/dist/client/assets/ToolsView-BreAl-yn.js +1 -0
  13. package/dist/client/assets/{_baseClone-kbJbcBJT.js → _baseClone-BYxCbA_9.js} +1 -1
  14. package/dist/client/assets/{el-form-item-iQ0G8e97.js → el-form-item-ySymCPMr.js} +2 -2
  15. package/dist/client/assets/el-input-C85p6Nqj.js +1 -0
  16. package/dist/client/assets/el-loading-DIjKEx81.js +1 -0
  17. package/dist/client/assets/{el-overlay-Cy5xg31y.js → el-overlay-B_CxiSem.js} +1 -1
  18. package/dist/client/assets/el-radio-group-BjkTCPRf.js +1 -0
  19. package/dist/client/assets/el-skeleton-item-CupTKK6n.js +1 -0
  20. package/dist/client/assets/{el-switch-KpjV93lm.js → el-switch-BosIJ9jf.js} +1 -1
  21. package/dist/client/assets/el-tab-pane-BydxdJoc.js +1 -0
  22. package/dist/client/assets/{el-table-column-fofd_2n-.js → el-table-column-DV5TZOUW.js} +1 -1
  23. package/dist/client/assets/index-kC4mf0Vo.js +2 -0
  24. package/dist/client/assets/{index-DpH6ZSbs.css → index-xJkq2euk.css} +1 -1
  25. package/dist/client/assets/omit-DxDGRttI.js +1 -0
  26. package/dist/client/assets/{raf-MWAHt9ca.js → raf-Y9AoxecD.js} +1 -1
  27. package/dist/client/assets/{vue-vendor-CbgVSHIh.js → vue-vendor-Dwcr0jep.js} +1 -1
  28. package/dist/client/index.html +3 -3
  29. package/dist/server/shared/types/websocket.types.d.ts +28 -19
  30. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  31. package/dist/server/shared/types/websocket.types.js +3 -2
  32. package/dist/server/src/api/web/health.d.ts.map +1 -1
  33. package/dist/server/src/api/web/health.js +5 -0
  34. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  35. package/dist/server/src/api/ws/ws-handler.js +4 -3
  36. package/dist/server/src/app.d.ts +7 -0
  37. package/dist/server/src/app.d.ts.map +1 -1
  38. package/dist/server/src/app.js +87 -0
  39. package/dist/server/src/models/event.model.d.ts +0 -13
  40. package/dist/server/src/models/event.model.d.ts.map +1 -1
  41. package/dist/server/src/models/server.model.d.ts +0 -29
  42. package/dist/server/src/models/server.model.d.ts.map +1 -1
  43. package/dist/server/src/models/types.d.ts +1 -70
  44. package/dist/server/src/models/types.d.ts.map +1 -1
  45. package/dist/server/src/models/types.js +1 -67
  46. package/dist/server/src/server/dev-server.js +24 -6
  47. package/dist/server/src/services/connection/connection-manager.d.ts +13 -0
  48. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  49. package/dist/server/src/services/connection/connection-manager.js +122 -5
  50. package/dist/server/src/services/event-bus.service.d.ts +0 -4
  51. package/dist/server/src/services/event-bus.service.d.ts.map +1 -1
  52. package/dist/server/src/services/event-bus.service.js +1 -6
  53. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  54. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +1 -0
  55. package/dist/server/src/services/mcp-oauth/index.d.ts +5 -0
  56. package/dist/server/src/services/mcp-oauth/index.d.ts.map +1 -0
  57. package/dist/server/src/services/mcp-oauth/index.js +3 -0
  58. package/dist/server/src/services/mcp-oauth/oauth-callback-server.d.ts +19 -0
  59. package/dist/server/src/services/mcp-oauth/oauth-callback-server.d.ts.map +1 -0
  60. package/dist/server/src/services/mcp-oauth/oauth-callback-server.js +100 -0
  61. package/dist/server/src/services/mcp-oauth/oauth-provider.d.ts +42 -0
  62. package/dist/server/src/services/mcp-oauth/oauth-provider.d.ts.map +1 -0
  63. package/dist/server/src/services/mcp-oauth/oauth-provider.js +121 -0
  64. package/dist/server/src/services/mcp-oauth/oauth-token-storage.d.ts +23 -0
  65. package/dist/server/src/services/mcp-oauth/oauth-token-storage.d.ts.map +1 -0
  66. package/dist/server/src/services/mcp-oauth/oauth-token-storage.js +92 -0
  67. package/dist/server/src/services/mcp-oauth/oauth-types.d.ts +21 -0
  68. package/dist/server/src/services/mcp-oauth/oauth-types.d.ts.map +1 -0
  69. package/dist/server/src/services/mcp-oauth/oauth-types.js +4 -0
  70. package/dist/server/src/utils/network-security.d.ts +33 -0
  71. package/dist/server/src/utils/network-security.d.ts.map +1 -0
  72. package/dist/server/src/utils/network-security.js +83 -0
  73. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +12 -1
  74. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  75. package/dist/server/src/utils/transports/streamable-http-transport.js +20 -1
  76. package/dist/server/src/utils/transports/transport-factory.d.ts +2 -0
  77. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  78. package/dist/server/src/utils/transports/transport-factory.js +17 -2
  79. package/dist/server/src/utils/transports/transport.interface.d.ts +2 -0
  80. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  81. package/dist/server/tests/unit/utils/network-security.test.d.ts +2 -0
  82. package/dist/server/tests/unit/utils/network-security.test.d.ts.map +1 -0
  83. package/dist/server/tests/unit/utils/network-security.test.js +123 -0
  84. package/dist/server/vite.config.js +1 -1
  85. package/package.json +111 -111
  86. package/dist/client/assets/HomeView-BnO4yIT9.js +0 -1
  87. package/dist/client/assets/ResourcesView-B5Xg0ynh.js +0 -1
  88. package/dist/client/assets/ServerDashboard-DYAVrrUk.js +0 -1
  89. package/dist/client/assets/ServerDetail-q94ZFfjL.js +0 -2
  90. package/dist/client/assets/SettingsView-BM6P5yrT.js +0 -1
  91. package/dist/client/assets/ToolCallDialog-BoAGxlB5.js +0 -1
  92. package/dist/client/assets/ToolsView-lqFhr7Bk.js +0 -1
  93. package/dist/client/assets/el-input-DkJq57wP.js +0 -1
  94. package/dist/client/assets/el-loading-C3v6a9xV.js +0 -1
  95. package/dist/client/assets/el-radio-group-C9QUL5mm.js +0 -1
  96. package/dist/client/assets/el-skeleton-item-Bbmpc0Xz.js +0 -1
  97. package/dist/client/assets/el-tab-pane-YsYuBcem.js +0 -1
  98. package/dist/client/assets/index-5tzIwwtS.js +0 -1
  99. package/dist/client/assets/index-MqHvQjDP.js +0 -2
  100. package/dist/client/assets/omit-CB4hTeTH.js +0 -1
  101. package/dist/client/assets/typescript-Bp3YSIOJ.js +0 -1
@@ -5,9 +5,9 @@
5
5
  <link rel="icon" href="/favicon.ico" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>MCP Server Manager</title>
8
- <script type="module" crossorigin src="/assets/index-MqHvQjDP.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/vue-vendor-CbgVSHIh.js">
10
- <link rel="stylesheet" crossorigin href="/assets/index-DpH6ZSbs.css">
8
+ <script type="module" crossorigin src="/assets/index-kC4mf0Vo.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/vue-vendor-Dwcr0jep.js">
10
+ <link rel="stylesheet" crossorigin href="/assets/index-xJkq2euk.css">
11
11
  </head>
12
12
  <body>
13
13
  <div id="app"></div>
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import type { Tool } from '../models/tool.model';
6
6
  import type { Resource } from '../models/resource.model';
7
+ import type { ServerInstance } from '../models/server.model';
7
8
  import type { LogLevel } from './common.types';
8
9
  export declare const WEB_SOCKET_EVENT_TYPES: {
9
10
  readonly SERVER_STATUS: "server-status";
@@ -13,17 +14,18 @@ export declare const WEB_SOCKET_EVENT_TYPES: {
13
14
  readonly SERVER_ADDED: "server-added";
14
15
  readonly SERVER_UPDATED: "server-updated";
15
16
  readonly SERVER_DELETED: "server-deleted";
17
+ readonly SERVER_INSTANCE_ADDED: "server-instance-added";
18
+ readonly SERVER_INSTANCE_UPDATED: "server-instance-updated";
19
+ readonly SERVER_INSTANCE_DELETED: "server-instance-deleted";
16
20
  readonly SERVER_CONNECTED: "server-connected";
17
21
  readonly SERVER_DISCONNECTED: "server-disconnected";
18
22
  readonly TOOL_CALL_STARTED: "tool-call-started";
19
23
  readonly TOOL_CALL_COMPLETED: "tool-call-completed";
20
24
  readonly TOOL_CALL_ERROR: "tool-call-error";
21
25
  readonly CONFIGURATION_UPDATED: "configuration-updated";
22
- readonly CLIENT_CONNECTED: "client-connected";
23
- readonly CLIENT_DISCONNECTED: "client-disconnected";
24
26
  readonly PONG: "pong";
25
27
  };
26
- export declare const VALID_WS_EVENT_TYPES: ("server-status" | "server-connected" | "server-disconnected" | "server-added" | "server-updated" | "server-deleted" | "tools" | "tool-call-started" | "tool-call-completed" | "tool-call-error" | "resources" | "log" | "configuration-updated" | "client-connected" | "client-disconnected" | "pong")[];
28
+ export declare const VALID_WS_EVENT_TYPES: ("server-status" | "server-connected" | "server-disconnected" | "server-added" | "server-updated" | "server-deleted" | "server-instance-added" | "server-instance-updated" | "server-instance-deleted" | "tools" | "tool-call-started" | "tool-call-completed" | "tool-call-error" | "resources" | "log" | "configuration-updated" | "pong")[];
27
29
  export type WebSocketEventType = (typeof VALID_WS_EVENT_TYPES)[number];
28
30
  export interface SubscribeMessage {
29
31
  type: 'subscribe';
@@ -95,6 +97,28 @@ export interface ServerDeletedEvent {
95
97
  type: 'server-deleted';
96
98
  data: string;
97
99
  }
100
+ export interface ServerInstanceAddedEvent {
101
+ type: 'server-instance-added';
102
+ data: {
103
+ name: string;
104
+ instance: ServerInstance;
105
+ };
106
+ }
107
+ export interface ServerInstanceUpdatedEvent {
108
+ type: 'server-instance-updated';
109
+ data: {
110
+ name: string;
111
+ index: number;
112
+ updates: Partial<ServerInstance>;
113
+ };
114
+ }
115
+ export interface ServerInstanceDeletedEvent {
116
+ type: 'server-instance-deleted';
117
+ data: {
118
+ name: string;
119
+ index: number;
120
+ };
121
+ }
98
122
  export interface ServerConnectedEvent {
99
123
  type: 'server-connected';
100
124
  data: {
@@ -159,26 +183,11 @@ export interface ConfigurationUpdatedEvent {
159
183
  changes?: unknown;
160
184
  };
161
185
  }
162
- export interface ClientConnectedEvent {
163
- type: 'client-connected';
164
- data: {
165
- timestamp: number;
166
- client: unknown;
167
- };
168
- }
169
- export interface ClientDisconnectedEvent {
170
- type: 'client-disconnected';
171
- data: {
172
- timestamp: number;
173
- clientId: string;
174
- client?: unknown;
175
- };
176
- }
177
186
  export interface ErrorMessage {
178
187
  type: 'error';
179
188
  data: {
180
189
  message: string;
181
190
  };
182
191
  }
183
- export type ServerMessage = ServerStatusEvent | LogEvent | ToolsEvent | ResourcesEvent | ServerAddedEvent | ServerUpdatedEvent | ServerDeletedEvent | ServerConnectedEvent | ServerDisconnectedEvent | PongMessage | ToolCallStartedEvent | ToolCallCompletedEvent | ToolCallErrorEvent | ConfigurationUpdatedEvent | ClientConnectedEvent | ClientDisconnectedEvent | ErrorMessage;
192
+ export type ServerMessage = ServerStatusEvent | LogEvent | ToolsEvent | ResourcesEvent | ServerAddedEvent | ServerUpdatedEvent | ServerDeletedEvent | ServerInstanceAddedEvent | ServerInstanceUpdatedEvent | ServerInstanceDeletedEvent | ServerConnectedEvent | ServerDisconnectedEvent | PongMessage | ToolCallStartedEvent | ToolCallCompletedEvent | ToolCallErrorEvent | ConfigurationUpdatedEvent | ErrorMessage;
184
193
  //# sourceMappingURL=websocket.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.types.d.ts","sourceRoot":"","sources":["../../../../shared/types/websocket.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.types.d.ts","sourceRoot":"","sources":["../../../../shared/types/websocket.types.ts"],"names":[],"mappings":"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"}
@@ -11,14 +11,15 @@ export const WEB_SOCKET_EVENT_TYPES = {
11
11
  SERVER_ADDED: 'server-added',
12
12
  SERVER_UPDATED: 'server-updated',
13
13
  SERVER_DELETED: 'server-deleted',
14
+ SERVER_INSTANCE_ADDED: 'server-instance-added',
15
+ SERVER_INSTANCE_UPDATED: 'server-instance-updated',
16
+ SERVER_INSTANCE_DELETED: 'server-instance-deleted',
14
17
  SERVER_CONNECTED: 'server-connected',
15
18
  SERVER_DISCONNECTED: 'server-disconnected',
16
19
  TOOL_CALL_STARTED: 'tool-call-started',
17
20
  TOOL_CALL_COMPLETED: 'tool-call-completed',
18
21
  TOOL_CALL_ERROR: 'tool-call-error',
19
22
  CONFIGURATION_UPDATED: 'configuration-updated',
20
- CLIENT_CONNECTED: 'client-connected',
21
- CLIENT_DISCONNECTED: 'client-disconnected',
22
23
  PONG: 'pong'
23
24
  };
24
25
  // Valid event type array
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAK7D"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAU7D"}
@@ -1,3 +1,4 @@
1
+ import { getConnectionStats } from '../../app.js';
1
2
  /**
2
3
  * Health Check API Routes
3
4
  *
@@ -21,4 +22,8 @@ export async function webHealthRoutes(fastify) {
21
22
  fastify.get('/web/health', async () => {
22
23
  return { status: 'ok', timestamp: new Date().toISOString() };
23
24
  });
25
+ // GET /health/connections - diagnostic endpoint for connection counters
26
+ fastify.get('/health/connections', async () => {
27
+ return getConnectionStats();
28
+ });
24
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ws-handler.d.ts","sourceRoot":"","sources":["../../../../../src/api/ws/ws-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAc,MAAM,gCAAgC,CAAC;AAgC7E,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,iBAAiB,CAAC,CAAiB;gBAGjC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe;IAGnC;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,aAAa;CAKtB"}
1
+ {"version":3,"file":"ws-handler.d.ts","sourceRoot":"","sources":["../../../../../src/api/ws/ws-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAc,MAAM,gCAAgC,CAAC;AAiC7E,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,iBAAiB,CAAC,CAAiB;gBAGjC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe;IAGnC;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,aAAa;CAKtB"}
@@ -36,15 +36,16 @@ const eventTypeMap = {
36
36
  [EventTypes.SERVER_ADDED]: WEB_SOCKET_EVENT_TYPES.SERVER_ADDED,
37
37
  [EventTypes.SERVER_UPDATED]: WEB_SOCKET_EVENT_TYPES.SERVER_UPDATED,
38
38
  [EventTypes.SERVER_DELETED]: WEB_SOCKET_EVENT_TYPES.SERVER_DELETED,
39
+ [EventTypes.SERVER_INSTANCE_ADDED]: WEB_SOCKET_EVENT_TYPES.SERVER_INSTANCE_ADDED,
40
+ [EventTypes.SERVER_INSTANCE_UPDATED]: WEB_SOCKET_EVENT_TYPES.SERVER_INSTANCE_UPDATED,
41
+ [EventTypes.SERVER_INSTANCE_DELETED]: WEB_SOCKET_EVENT_TYPES.SERVER_INSTANCE_DELETED,
39
42
  [EventTypes.TOOLS_UPDATED]: WEB_SOCKET_EVENT_TYPES.TOOLS,
40
43
  [EventTypes.RESOURCES_UPDATED]: WEB_SOCKET_EVENT_TYPES.RESOURCES,
41
44
  [EventTypes.LOG_ENTRY]: WEB_SOCKET_EVENT_TYPES.LOG,
42
45
  [EventTypes.TOOL_CALL_STARTED]: WEB_SOCKET_EVENT_TYPES.TOOL_CALL_STARTED,
43
46
  [EventTypes.TOOL_CALL_COMPLETED]: WEB_SOCKET_EVENT_TYPES.TOOL_CALL_COMPLETED,
44
47
  [EventTypes.TOOL_CALL_ERROR]: WEB_SOCKET_EVENT_TYPES.TOOL_CALL_ERROR,
45
- [EventTypes.CONFIGURATION_UPDATED]: WEB_SOCKET_EVENT_TYPES.CONFIGURATION_UPDATED,
46
- [EventTypes.CLIENT_CONNECTED]: WEB_SOCKET_EVENT_TYPES.CLIENT_CONNECTED,
47
- [EventTypes.CLIENT_DISCONNECTED]: WEB_SOCKET_EVENT_TYPES.CLIENT_DISCONNECTED
48
+ [EventTypes.CONFIGURATION_UPDATED]: WEB_SOCKET_EVENT_TYPES.CONFIGURATION_UPDATED
48
49
  };
49
50
  export class WebSocketHandler {
50
51
  socket;
@@ -1,3 +1,10 @@
1
+ /** Expose connection stats for diagnostic endpoints */
2
+ export declare function getConnectionStats(): {
3
+ currentConnections: number;
4
+ currentConcurrentRequests: number;
5
+ maxConnections: number;
6
+ maxConcurrentConnections: number;
7
+ };
1
8
  /**
2
9
  * Creates and configures a Fastify application instance for the MCP Hub Lite service.
3
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,QAAQ,mWAmE7B"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app.ts"],"names":[],"mappings":"AAmCA,uDAAuD;AACvD,wBAAgB,kBAAkB;;;;;EAQjC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,QAAQ,mWAyJ7B"}
@@ -4,6 +4,8 @@ import path from 'path';
4
4
  import { fileURLToPath } from 'url';
5
5
  import { configManager } from './config/config-manager.js';
6
6
  import { setJsonPrettyConfigGetter } from './utils/json-utils.js';
7
+ import { isIpAllowed } from './utils/network-security.js';
8
+ import { logger, LOG_MODULES } from './utils/logger.js';
7
9
  // MCP Protocol Routes
8
10
  import { mcpGatewayRoutes } from './api/mcp/gateway.js';
9
11
  // Web API Routes
@@ -20,6 +22,20 @@ import { webSocketRoutes } from './api/ws/events.js';
20
22
  // Get __dirname equivalent in ESM
21
23
  const __filename = fileURLToPath(import.meta.url);
22
24
  const __dirname = path.dirname(__filename);
25
+ // Connection tracking counters (module-scoped, shared across all requests)
26
+ let currentConnections = 0;
27
+ let currentConcurrentRequests = 0;
28
+ const CONCURRENT_DECREMENTED = Symbol('concurrentDecremented');
29
+ /** Expose connection stats for diagnostic endpoints */
30
+ export function getConnectionStats() {
31
+ const cfg = configManager.getConfig().security;
32
+ return {
33
+ currentConnections,
34
+ currentConcurrentRequests,
35
+ maxConnections: cfg.maxConnections,
36
+ maxConcurrentConnections: cfg.maxConcurrentConnections
37
+ };
38
+ }
23
39
  /**
24
40
  * Creates and configures a Fastify application instance for the MCP Hub Lite service.
25
41
  *
@@ -55,6 +71,77 @@ export async function buildApp() {
55
71
  const idleTimeout = config.security.idleConnectionTimeout;
56
72
  fastify.server.keepAliveTimeout = idleTimeout;
57
73
  fastify.server.headersTimeout = idleTimeout + 5000; // headersTimeout must be longer than keepAliveTimeout
74
+ // ===== Security: per-socket timeout + maxConnections =====
75
+ fastify.server.on('connection', (socket) => {
76
+ socket.setTimeout(config.security.connectionTimeout);
77
+ socket.on('timeout', () => {
78
+ socket.destroy(new Error('Connection timeout'));
79
+ });
80
+ currentConnections++;
81
+ socket.on('close', () => {
82
+ currentConnections--;
83
+ });
84
+ socket.on('error', (err) => {
85
+ logger.debug(`Socket error (will be closed): ${err.message}`, LOG_MODULES.SERVER);
86
+ });
87
+ if (currentConnections > config.security.maxConnections) {
88
+ socket.destroy();
89
+ }
90
+ });
91
+ // ===== Security: IP allowlist =====
92
+ fastify.addHook('onRequest', (request, reply, done) => {
93
+ const allowed = config.security.allowedNetworks;
94
+ if (allowed.length > 0 && !isIpAllowed(request.ip, allowed)) {
95
+ reply.code(403).send({
96
+ error: 'Forbidden',
97
+ message: `Access denied: ${request.ip} is not allowed`
98
+ });
99
+ return;
100
+ }
101
+ done();
102
+ });
103
+ // ===== Security: concurrent request limit =====
104
+ fastify.addHook('onRequest', (_request, reply, done) => {
105
+ if (currentConcurrentRequests >= config.security.maxConcurrentConnections) {
106
+ reply.code(503).send({
107
+ error: 'Service Unavailable',
108
+ message: 'Too many concurrent requests'
109
+ });
110
+ return;
111
+ }
112
+ currentConcurrentRequests++;
113
+ // Safety net: decrement on premature connection close (e.g. SSE timeout).
114
+ // Prevents counter drift for hijacked long-lived connections whose
115
+ // onResponse hook may not fire when the socket is destroyed by timeout.
116
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
+ reply.raw[CONCURRENT_DECREMENTED] = false;
118
+ reply.raw.on('close', () => {
119
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
+ if (!reply.raw[CONCURRENT_DECREMENTED]) {
121
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
122
+ reply.raw[CONCURRENT_DECREMENTED] = true;
123
+ currentConcurrentRequests--;
124
+ }
125
+ });
126
+ // Warn when approaching the configured limit
127
+ if (currentConcurrentRequests > config.security.maxConcurrentConnections * 0.8) {
128
+ logger.warn(`High concurrent requests: ${currentConcurrentRequests}/${config.security.maxConcurrentConnections}`, LOG_MODULES.SERVER);
129
+ }
130
+ done();
131
+ });
132
+ fastify.addHook('onResponse', (_request, reply, done) => {
133
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
+ if (!reply.raw[CONCURRENT_DECREMENTED]) {
135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+ reply.raw[CONCURRENT_DECREMENTED] = true;
137
+ currentConcurrentRequests--;
138
+ if (currentConcurrentRequests < 0) {
139
+ logger.warn('currentConcurrentRequests went negative in onResponse, resetting to 0', LOG_MODULES.SERVER);
140
+ currentConcurrentRequests = 0;
141
+ }
142
+ }
143
+ done();
144
+ });
58
145
  // Simple CORS for dev
59
146
  fastify.addHook('onRequest', (request, reply, done) => {
60
147
  reply.header('Access-Control-Allow-Origin', '*');
@@ -91,23 +91,10 @@ export interface LogEntryEventData {
91
91
  timestamp: number;
92
92
  }>;
93
93
  }
94
- export interface LogsClearedEventData {
95
- serverName: string;
96
- serverIndex: number;
97
- }
98
94
  export interface ConfigurationUpdatedEventData {
99
95
  timestamp: number;
100
96
  config: unknown;
101
97
  changes?: unknown;
102
98
  }
103
- export interface ClientConnectedEventData {
104
- timestamp: number;
105
- client: unknown;
106
- }
107
- export interface ClientDisconnectedEventData {
108
- timestamp: number;
109
- clientId: string;
110
- client?: unknown;
111
- }
112
99
  export type EventData = unknown;
113
100
  //# sourceMappingURL=event.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.model.d.ts","sourceRoot":"","sources":["../../../../src/models/event.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event.model.d.ts","sourceRoot":"","sources":["../../../../src/models/event.model.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,4 @@
1
- import type { ServerStatus, ServerTransport } from '../../shared/types/common.types.js';
2
1
  import type { ServerConfig as SharedServerConfig, ServerTemplate as SharedServerTemplate, ServerInstance as SharedServerInstance, ServerRuntimeConfig as SharedServerRuntimeConfig, ServerInstanceConfig as SharedServerInstanceConfig, TagDefinition as SharedTagDefinition, SystemConfig as SharedSystemConfig, LoggingConfig as SharedLoggingConfig, SecurityConfig as SharedSecurityConfig, Server as SharedServer, StatusInfo as SharedStatusInfo, LogEntry as SharedLogEntry } from '../../shared/models/server.model.js';
3
2
  export type { SharedServerConfig as ServerConfig, SharedServerTemplate as ServerTemplate, SharedServerInstance as ServerInstance, SharedServerRuntimeConfig as ServerRuntimeConfig, SharedServerInstanceConfig as ServerInstanceConfig, SharedTagDefinition as TagDefinition, SharedSystemConfig as SystemConfig, SharedLoggingConfig as LoggingConfig, SharedSecurityConfig as SecurityConfig, SharedServer as Server, SharedStatusInfo as StatusInfo, SharedLogEntry as LogEntry };
4
3
  export { InstanceSelectionStrategy } from '../../shared/models/server.model.js';
5
- /**
6
- * @deprecated Use ServerConfig from @shared-models/server.model instead
7
- * Backend server configuration interface, extending shared configuration
8
- */
9
- export interface LegacyBackendServerConfig extends Omit<SharedServerConfig, 'type'> {
10
- id: string;
11
- name: string;
12
- command: string;
13
- args: string[];
14
- type: ServerTransport;
15
- enabled: boolean;
16
- }
17
- /**
18
- * @deprecated Use appropriate types from @shared-models/server.model instead
19
- * Server state interface
20
- */
21
- export interface ServerState {
22
- status: ServerStatus;
23
- lastCheck: number;
24
- error?: string;
25
- pid?: number;
26
- }
27
- /**
28
- * @deprecated Use Server from @shared-models/server.model instead
29
- * Backend server model interface, extending shared server model
30
- */
31
- export interface LegacyBackendServer extends LegacyBackendServerConfig, ServerState {
32
- }
33
4
  //# sourceMappingURL=server.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.model.d.ts","sourceRoot":"","sources":["../../../../src/models/server.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,KAAK,EACV,YAAY,IAAI,kBAAkB,EAClC,cAAc,IAAI,oBAAoB,EACtC,cAAc,IAAI,oBAAoB,EACtC,mBAAmB,IAAI,yBAAyB,EAChD,oBAAoB,IAAI,0BAA0B,EAClD,aAAa,IAAI,mBAAmB,EACpC,YAAY,IAAI,kBAAkB,EAClC,aAAa,IAAI,mBAAmB,EACpC,cAAc,IAAI,oBAAoB,EACtC,MAAM,IAAI,YAAY,EACtB,UAAU,IAAI,gBAAgB,EAC9B,QAAQ,IAAI,cAAc,EAC3B,MAAM,gCAAgC,CAAC;AAKxC,YAAY,EACV,kBAAkB,IAAI,YAAY,EAClC,oBAAoB,IAAI,cAAc,EACtC,oBAAoB,IAAI,cAAc,EACtC,yBAAyB,IAAI,mBAAmB,EAChD,0BAA0B,IAAI,oBAAoB,EAClD,mBAAmB,IAAI,aAAa,EACpC,kBAAkB,IAAI,YAAY,EAClC,mBAAmB,IAAI,aAAa,EACpC,oBAAoB,IAAI,cAAc,EACtC,YAAY,IAAI,MAAM,EACtB,gBAAgB,IAAI,UAAU,EAC9B,cAAc,IAAI,QAAQ,EAC3B,CAAC;AAGF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAI3E;;;GAGG;AACH,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACjF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB,EAAE,WAAW;CAAG"}
1
+ {"version":3,"file":"server.model.d.ts","sourceRoot":"","sources":["../../../../src/models/server.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,IAAI,kBAAkB,EAClC,cAAc,IAAI,oBAAoB,EACtC,cAAc,IAAI,oBAAoB,EACtC,mBAAmB,IAAI,yBAAyB,EAChD,oBAAoB,IAAI,0BAA0B,EAClD,aAAa,IAAI,mBAAmB,EACpC,YAAY,IAAI,kBAAkB,EAClC,aAAa,IAAI,mBAAmB,EACpC,cAAc,IAAI,oBAAoB,EACtC,MAAM,IAAI,YAAY,EACtB,UAAU,IAAI,gBAAgB,EAC9B,QAAQ,IAAI,cAAc,EAC3B,MAAM,gCAAgC,CAAC;AAKxC,YAAY,EACV,kBAAkB,IAAI,YAAY,EAClC,oBAAoB,IAAI,cAAc,EACtC,oBAAoB,IAAI,cAAc,EACtC,yBAAyB,IAAI,mBAAmB,EAChD,0BAA0B,IAAI,oBAAoB,EAClD,mBAAmB,IAAI,aAAa,EACpC,kBAAkB,IAAI,YAAY,EAClC,mBAAmB,IAAI,aAAa,EACpC,oBAAoB,IAAI,cAAc,EACtC,YAAY,IAAI,MAAM,EACtB,gBAAgB,IAAI,UAAU,EAC9B,cAAc,IAAI,QAAQ,EAC3B,CAAC;AAGF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -1,74 +1,5 @@
1
- export declare const CMDErrors: {
2
- readonly SystemErrors: {
3
- readonly DATABASE_CONNECTION_FAILED: 1001;
4
- readonly MEMORY_INSUFFICIENT: 1002;
5
- readonly NETWORK_UNREACHABLE: 1003;
6
- readonly DISK_FULL: 1004;
7
- readonly SERVICE_UNAVAILABLE: 1005;
8
- readonly INTERNAL_SERVER_ERROR: 1500;
9
- };
10
- readonly SecurityErrors: {
11
- readonly UNAUTHORIZED: 2001;
12
- readonly FORBIDDEN: 2003;
13
- readonly TOKEN_EXPIRED: 2004;
14
- readonly INVALID_CREDENTIALS: 2005;
15
- readonly ACCESS_DENIED: 2006;
16
- readonly RATE_LIMIT_EXCEEDED: 2007;
17
- };
18
- readonly BusinessErrors: {
19
- readonly VALIDATION_FAILED: 3001;
20
- readonly RESOURCE_NOT_FOUND: 3004;
21
- readonly RESOURCE_ALREADY_EXISTS: 3009;
22
- readonly INVALID_OPERATION: 3009;
23
- readonly GROUP_CONSTRAINT_VIOLATION: 3010;
24
- readonly SERVER_STATUS_CONFLICT: 3011;
25
- readonly CONFIGURATION_INVALID: 3012;
26
- };
27
- readonly APIErrors: {
28
- readonly INVALID_REQUEST_FORMAT: 4000;
29
- readonly MISSING_REQUIRED_PARAMETER: 4001;
30
- readonly INVALID_PARAMETER_VALUE: 4002;
31
- readonly UNSUPPORTED_MEDIA_TYPE: 4003;
32
- readonly BAD_REQUEST: 4000;
33
- };
34
- readonly MCPProtocolErrors: {
35
- readonly MCP_SERVER_UNREACHABLE: -32001;
36
- readonly MCP_REQUEST_TIMEOUT: -32002;
37
- readonly MCP_INVALID_RESPONSE: -32003;
38
- readonly MCP_TOOL_NOT_FOUND: -32801;
39
- readonly MCP_EXECUTION_FAILED: -32802;
40
- readonly MCP_INITIALIZATION_FAILED: -32803;
41
- readonly MCP_INVALID_CONFIGURATION: -32804;
42
- readonly MCP_RATE_LIMIT_EXCEEDED: -32805;
43
- readonly MCP_AUTHENTICATION_FAILED: -32806;
44
- readonly MCP_AUTHORIZATION_FAILED: -32807;
45
- readonly MCP_RESOURCE_EXHAUSTED: -32808;
46
- readonly MCP_PRECONDITION_FAILED: -32809;
47
- readonly MCP_CONTENT_MODIFIED: -32810;
48
- readonly MCP_LOOP_DETECTED: -32811;
49
- readonly MCP_NOT_IMPLEMENTED: -32812;
50
- readonly MCP_NOT_SUPPORTED: -32813;
51
- readonly MCP_TOO_BUSY: -32814;
52
- readonly MCP_SERVER_SHUTDOWN: -32815;
53
- };
54
- };
55
- export type AllErrorCodes = (typeof CMDErrors.SystemErrors)[keyof typeof CMDErrors.SystemErrors] | (typeof CMDErrors.SecurityErrors)[keyof typeof CMDErrors.SecurityErrors] | (typeof CMDErrors.BusinessErrors)[keyof typeof CMDErrors.BusinessErrors] | (typeof CMDErrors.APIErrors)[keyof typeof CMDErrors.APIErrors] | (typeof CMDErrors.MCPProtocolErrors)[keyof typeof CMDErrors.MCPProtocolErrors] | 6000 | 6001 | 6002 | 6003 | 6004 | 6005;
56
- export interface CMDBaseResponse<T = unknown> {
57
- code: number;
58
- message: string;
59
- data?: T;
60
- timestamp: string;
61
- requestId?: string;
62
- }
63
- export type CMDSuccess<T = unknown> = {
64
- code: 200 | 201 | 204;
65
- message: string;
66
- data: T;
67
- timestamp: string;
68
- requestId?: string;
69
- };
70
1
  export type CMDError = {
71
- code: AllErrorCodes;
2
+ code: number;
72
3
  message: string;
73
4
  data: null;
74
5
  timestamp: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/models/types.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEZ,CAAC;AAGX,MAAM,MAAM,aAAa,GACrB,CAAC,OAAO,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,YAAY,CAAC,GACpE,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,cAAc,CAAC,GACxE,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,cAAc,CAAC,GACxE,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,SAAS,CAAC,GAC9D,CAAC,OAAO,SAAS,CAAC,iBAAiB,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,iBAAiB,CAAC,GAC9E,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAGT,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI;IACpC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QAEN,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,cAAc,CAAC;QAEtE,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAE9C,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAElC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/models/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QAEN,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,cAAc,CAAC;QAEtE,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAE9C,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAElC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC"}
@@ -1,67 +1 @@
1
- // CMD error type hierarchy definition
2
- export const CMDErrors = {
3
- // === System-level errors (1000-1999) ===
4
- // Infrastructure failures, runtime errors
5
- SystemErrors: {
6
- DATABASE_CONNECTION_FAILED: 1001,
7
- MEMORY_INSUFFICIENT: 1002,
8
- NETWORK_UNREACHABLE: 1003,
9
- DISK_FULL: 1004,
10
- SERVICE_UNAVAILABLE: 1005,
11
- INTERNAL_SERVER_ERROR: 1500
12
- },
13
- // === Security errors (2000-2999) ===
14
- // Authentication, authorization, security policy related
15
- SecurityErrors: {
16
- UNAUTHORIZED: 2001,
17
- FORBIDDEN: 2003,
18
- TOKEN_EXPIRED: 2004,
19
- INVALID_CREDENTIALS: 2005,
20
- ACCESS_DENIED: 2006,
21
- RATE_LIMIT_EXCEEDED: 2007
22
- },
23
- // === Business logic errors (3000-3999) ===
24
- // Business rule validation, resource status, etc.
25
- BusinessErrors: {
26
- VALIDATION_FAILED: 3001,
27
- RESOURCE_NOT_FOUND: 3004,
28
- RESOURCE_ALREADY_EXISTS: 3009,
29
- INVALID_OPERATION: 3009,
30
- GROUP_CONSTRAINT_VIOLATION: 3010,
31
- SERVER_STATUS_CONFLICT: 3011,
32
- CONFIGURATION_INVALID: 3012
33
- },
34
- // === API errors (4000-4999) ===
35
- // Request format, parameter validation
36
- APIErrors: {
37
- INVALID_REQUEST_FORMAT: 4000,
38
- MISSING_REQUIRED_PARAMETER: 4001,
39
- INVALID_PARAMETER_VALUE: 4002,
40
- UNSUPPORTED_MEDIA_TYPE: 4003,
41
- BAD_REQUEST: 4000
42
- },
43
- // === MCP protocol errors (according to MCP standard specification) ===
44
- // Error code definitions based on MCP protocol standard (https://modelcontextprotocol.io/specification/2025-11-25)
45
- MCPProtocolErrors: {
46
- // Standard JSON-RPC 2.0 error code range (-32099 to -32000)
47
- MCP_SERVER_UNREACHABLE: -32001, // Service unreachable
48
- MCP_REQUEST_TIMEOUT: -32002, // Request timeout
49
- MCP_INVALID_RESPONSE: -32003, // Invalid response
50
- // MCP specific error code range (-32899 to -32800)
51
- MCP_TOOL_NOT_FOUND: -32801, // Tool not found (corresponds to toolNotFound in MCP specification)
52
- MCP_EXECUTION_FAILED: -32802, // Execution failed
53
- MCP_INITIALIZATION_FAILED: -32803, // Initialization failed
54
- MCP_INVALID_CONFIGURATION: -32804, // Invalid configuration
55
- MCP_RATE_LIMIT_EXCEEDED: -32805, // Rate limit exceeded
56
- MCP_AUTHENTICATION_FAILED: -32806, // Authentication failed
57
- MCP_AUTHORIZATION_FAILED: -32807, // Authorization failed
58
- MCP_RESOURCE_EXHAUSTED: -32808, // Resource exhausted
59
- MCP_PRECONDITION_FAILED: -32809, // Precondition failed
60
- MCP_CONTENT_MODIFIED: -32810, // Content modified
61
- MCP_LOOP_DETECTED: -32811, // Loop detected
62
- MCP_NOT_IMPLEMENTED: -32812, // Not implemented
63
- MCP_NOT_SUPPORTED: -32813, // Not supported
64
- MCP_TOO_BUSY: -32814, // Overloaded
65
- MCP_SERVER_SHUTDOWN: -32815 // Server shutdown
66
- }
67
- };
1
+ export {};
@@ -65,12 +65,30 @@ async function startDevServer() {
65
65
  logger.info('------------------------------------------------', LOG_MODULES.DEV_SERVER);
66
66
  app = await buildApp();
67
67
  const config = configManager.getConfig();
68
- // Start listening FIRST, then trigger connection tasks
69
- await app.listen({
70
- port: config.system.port,
71
- host: config.system.host
72
- });
73
- logger.info(`MCP Hub Lite Dev Server running at http://${config.system.host}:${config.system.port}`, LOG_MODULES.DEV_SERVER);
68
+ const host = config.system.host;
69
+ let port = config.system.port;
70
+ const maxPortAttempts = 10;
71
+ // Auto-increment port if occupied (dev mode only — no hard fail)
72
+ for (let attempt = 0; attempt < maxPortAttempts; attempt++) {
73
+ try {
74
+ await app.listen({ port, host });
75
+ break;
76
+ }
77
+ catch (err) {
78
+ const error = err;
79
+ if (error.code === 'EADDRINUSE' && attempt < maxPortAttempts - 1) {
80
+ logger.warn(`Port ${port} is already in use, trying port ${port + 1}...`, LOG_MODULES.DEV_SERVER);
81
+ port++;
82
+ }
83
+ else {
84
+ throw err;
85
+ }
86
+ }
87
+ }
88
+ if (port !== config.system.port) {
89
+ logger.info(`Dev server using alternate port ${port} (default ${config.system.port} was occupied)`, LOG_MODULES.DEV_SERVER);
90
+ }
91
+ logger.info(`MCP Hub Lite Dev Server running at http://${host}:${port}`, LOG_MODULES.DEV_SERVER);
74
92
  // Write PID file after server starts successfully
75
93
  PidManager.writePid();
76
94
  // Auto-create instances for enabled servers without existing instances
@@ -117,6 +117,19 @@ export declare class McpConnectionManager {
117
117
  * Refreshes server tools and resources (only for bidirectional transports).
118
118
  */
119
119
  private refreshServerResources;
120
+ /**
121
+ * Sends logging/setLevel request to downstream server to start receiving log notifications.
122
+ * This is a best-effort request — servers that don't support logging will silently ignore it.
123
+ */
124
+ private requestLoggingFromServer;
125
+ /**
126
+ * Handles the OAuth authorization flow for Streamable HTTP servers.
127
+ * Starts a local callback server, waits for the user to complete auth in the browser,
128
+ * then finishes the auth on the transport.
129
+ *
130
+ * @returns true if OAuth was handled successfully, false otherwise
131
+ */
132
+ private handleOAuthFlow;
120
133
  /**
121
134
  * Handles connection error with logging and retry delay.
122
135
  */
@@ -1 +1 @@
1
- {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/connection-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../../../../src/services/connection/connection-manager.ts"],"names":[],"mappings":"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"}