@loop_ouroboros/mcp-hub-lite 1.2.4 → 1.2.6

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 (41) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  3. package/dist/server/src/api/web/hub-tools.js +15 -0
  4. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  5. package/dist/server/src/api/web/mcp-status.js +4 -0
  6. package/dist/server/src/cli/commands/status.js +13 -3
  7. package/dist/server/src/cli/commands/tool-use.d.ts +5 -1
  8. package/dist/server/src/cli/commands/tool-use.d.ts.map +1 -1
  9. package/dist/server/src/cli/commands/tool-use.js +27 -4
  10. package/dist/server/src/cli/server.d.ts +2 -0
  11. package/dist/server/src/cli/server.d.ts.map +1 -1
  12. package/dist/server/src/cli/server.js +2 -0
  13. package/dist/server/src/models/system-tools.constants.d.ts +6 -2
  14. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  15. package/dist/server/src/models/system-tools.constants.js +3 -1
  16. package/dist/server/src/services/connection/connection-manager.d.ts +6 -0
  17. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  18. package/dist/server/src/services/connection/connection-manager.js +23 -0
  19. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  20. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +28 -1
  21. package/dist/server/src/services/gateway/tool-list-generator.js +1 -1
  22. package/dist/server/src/services/hub-tools/instance-selector.d.ts +8 -1
  23. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -1
  24. package/dist/server/src/services/hub-tools/instance-selector.js +24 -10
  25. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  26. package/dist/server/src/services/hub-tools/resource-generator.js +17 -13
  27. package/dist/server/src/services/hub-tools/server-selector.d.ts +2 -2
  28. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  29. package/dist/server/src/services/hub-tools/server-selector.js +4 -3
  30. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  31. package/dist/server/src/services/hub-tools/system-tool-definitions.js +23 -3
  32. package/dist/server/src/services/hub-tools.service.d.ts +29 -7
  33. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  34. package/dist/server/src/services/hub-tools.service.js +96 -36
  35. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  36. package/dist/server/src/services/system-tool-handler.js +21 -8
  37. package/dist/server/src/utils/name-converter.d.ts.map +1 -1
  38. package/dist/server/src/utils/name-converter.js +2 -0
  39. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +21 -16
  40. package/dist/server/tests/unit/services/hub-tools.service.test.js +42 -40
  41. package/package.json +1 -1
@@ -36,6 +36,7 @@ describe('HubToolsService', () => {
36
36
  instances: [
37
37
  {
38
38
  id: 'test-server-1-instance',
39
+ index: 0,
39
40
  enabled: true,
40
41
  args: [],
41
42
  env: {},
@@ -62,6 +63,7 @@ describe('HubToolsService', () => {
62
63
  instances: [
63
64
  {
64
65
  id: 'test-server-2-instance',
66
+ index: 0,
65
67
  enabled: true,
66
68
  args: [],
67
69
  env: {},
@@ -82,20 +84,18 @@ describe('HubToolsService', () => {
82
84
  const server = mockServers.find((s) => s.name === name);
83
85
  return server?.config;
84
86
  });
85
- vi.mocked(mcpConnectionManager.getStatusByName).mockImplementation(() => {
86
- return {
87
- connected: true,
88
- lastCheck: Date.now(),
89
- toolsCount: 0,
90
- resourcesCount: 0
91
- };
87
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockImplementation(() => {
88
+ return [0];
89
+ });
90
+ vi.mocked(mcpConnectionManager.getStatus).mockImplementation(() => {
91
+ return { connected: true, lastCheck: Date.now(), toolsCount: 0, resourcesCount: 0 };
92
92
  });
93
93
  // Act
94
94
  const servers = await hubToolsService.listServers();
95
95
  // Assert
96
96
  expect(servers).toEqual({
97
97
  'Test Server 1': 'File system operations',
98
- 'Test Server 2': 'Connected MCP server: Test Server 2'
98
+ 'Test Server 2': 'Test Server 2 (You can check the tool list to understand its capabilities and update the description.)'
99
99
  });
100
100
  expect(hubManager.getAllServers).toHaveBeenCalledTimes(1);
101
101
  });
@@ -118,6 +118,7 @@ describe('HubToolsService', () => {
118
118
  instances: [
119
119
  {
120
120
  id: 'server1-instance',
121
+ index: 0,
121
122
  enabled: true,
122
123
  args: [],
123
124
  env: {},
@@ -138,19 +139,17 @@ describe('HubToolsService', () => {
138
139
  const server = mockServers.find((s) => s.name === name);
139
140
  return server?.config;
140
141
  });
141
- vi.mocked(mcpConnectionManager.getStatusByName).mockImplementation(() => {
142
- return {
143
- connected: true,
144
- lastCheck: Date.now(),
145
- toolsCount: 0,
146
- resourcesCount: 0
147
- };
142
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockImplementation(() => {
143
+ return [0];
144
+ });
145
+ vi.mocked(mcpConnectionManager.getStatus).mockImplementation(() => {
146
+ return { connected: true, lastCheck: Date.now(), toolsCount: 0, resourcesCount: 0 };
148
147
  });
149
148
  // Act
150
149
  const servers = await hubToolsService.listServers();
151
150
  // Assert
152
151
  expect(servers).toEqual({
153
- server1: 'Connected MCP server: server1'
152
+ server1: 'server1 (You can check the tool list to understand its capabilities and update the description.)'
154
153
  });
155
154
  });
156
155
  it('should use provided description when available', async () => {
@@ -173,6 +172,7 @@ describe('HubToolsService', () => {
173
172
  instances: [
174
173
  {
175
174
  id: 'filesystem-instance',
175
+ index: 0,
176
176
  enabled: true,
177
177
  args: [],
178
178
  env: {},
@@ -200,6 +200,7 @@ describe('HubToolsService', () => {
200
200
  instances: [
201
201
  {
202
202
  id: 'time-instance',
203
+ index: 0,
203
204
  enabled: true,
204
205
  args: [],
205
206
  env: {},
@@ -220,13 +221,11 @@ describe('HubToolsService', () => {
220
221
  const server = mockServers.find((s) => s.name === name);
221
222
  return server?.config;
222
223
  });
223
- vi.mocked(mcpConnectionManager.getStatusByName).mockImplementation(() => {
224
- return {
225
- connected: true,
226
- lastCheck: Date.now(),
227
- toolsCount: 0,
228
- resourcesCount: 0
229
- };
224
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockImplementation(() => {
225
+ return [0];
226
+ });
227
+ vi.mocked(mcpConnectionManager.getStatus).mockImplementation(() => {
228
+ return { connected: true, lastCheck: Date.now(), toolsCount: 0, resourcesCount: 0 };
230
229
  });
231
230
  // Act
232
231
  const servers = await hubToolsService.listServers();
@@ -256,6 +255,7 @@ describe('HubToolsService', () => {
256
255
  instances: [
257
256
  {
258
257
  id: 'connected-server-instance',
258
+ index: 0,
259
259
  enabled: true,
260
260
  args: [],
261
261
  env: {},
@@ -303,21 +303,14 @@ describe('HubToolsService', () => {
303
303
  const server = mockServers.find((s) => s.name === name);
304
304
  return server?.config;
305
305
  });
306
- vi.mocked(mcpConnectionManager.getStatusByName).mockImplementation((name) => {
306
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockImplementation((name) => {
307
307
  if (name === 'Connected Server') {
308
- return {
309
- connected: true,
310
- lastCheck: Date.now(),
311
- toolsCount: 0,
312
- resourcesCount: 0
313
- };
308
+ return [0];
314
309
  }
315
- return {
316
- connected: false,
317
- lastCheck: Date.now(),
318
- toolsCount: 0,
319
- resourcesCount: 0
320
- };
310
+ return [];
311
+ });
312
+ vi.mocked(mcpConnectionManager.getStatus).mockImplementation(() => {
313
+ return { connected: true, lastCheck: Date.now(), toolsCount: 0, resourcesCount: 0 };
321
314
  });
322
315
  // Act
323
316
  const servers = await hubToolsService.listServers();
@@ -380,6 +373,7 @@ describe('HubToolsService', () => {
380
373
  tagDefinitions: []
381
374
  });
382
375
  vi.mocked(mcpConnectionManager.getToolsByServerName).mockReturnValue(mockTools);
376
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockReturnValue([0]);
383
377
  // Act
384
378
  const result = await hubToolsService.listToolsInServer({ serverName });
385
379
  // Assert
@@ -392,7 +386,7 @@ describe('HubToolsService', () => {
392
386
  it('should throw error if server not found', async () => {
393
387
  // Arrange
394
388
  const serverName = 'Non-existent Server';
395
- vi.mocked(mcpConnectionManager.getToolsByServerName).mockReturnValue([]);
389
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockReturnValue([]);
396
390
  // Act & Assert
397
391
  await expect(hubToolsService.listToolsInServer({ serverName })).rejects.toThrow(`Server not found: ${serverName}`);
398
392
  });
@@ -440,6 +434,7 @@ describe('HubToolsService', () => {
440
434
  tagDefinitions: []
441
435
  });
442
436
  vi.mocked(mcpConnectionManager.getToolsByServerName).mockReturnValue(mockTools);
437
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockReturnValue([0]);
443
438
  // Act
444
439
  const tool = await hubToolsService.getTool({ serverName, toolName });
445
440
  // Assert
@@ -480,6 +475,8 @@ describe('HubToolsService', () => {
480
475
  instances: [mockInstance],
481
476
  tagDefinitions: []
482
477
  });
478
+ vi.mocked(mcpConnectionManager.getToolsByServerName).mockReturnValue(mockTools);
479
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockReturnValue([0]);
483
480
  vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
484
481
  // Act
485
482
  const tool = await hubToolsService.getTool({ serverName, toolName });
@@ -610,14 +607,15 @@ describe('HubToolsService', () => {
610
607
  // Assert - System tools under mcp-hub-lite
611
608
  expect(allTools).toHaveProperty('mcp-hub-lite');
612
609
  expect(Array.isArray(allTools['mcp-hub-lite'].tools)).toBe(true);
613
- // Assert system tools - should have 5 tools now
610
+ // Assert system tools - should have 6 tools now
614
611
  const systemToolNames = allTools['mcp-hub-lite'].tools.map((t) => t.name);
615
612
  expect(systemToolNames).toContain('list_servers');
616
613
  expect(systemToolNames).toContain('list_tools');
617
614
  expect(systemToolNames).toContain('get_tool');
618
615
  expect(systemToolNames).toContain('call_tool');
619
616
  expect(systemToolNames).toContain('update_server_description');
620
- expect(systemToolNames).toHaveLength(5);
617
+ expect(systemToolNames).toContain('list_tags');
618
+ expect(systemToolNames).toHaveLength(6);
621
619
  // Assert server tools - should have only name and description
622
620
  expect(allTools['Server 1'].tools).toEqual(expectedToolSummariesServer1);
623
621
  expect(allTools['Server 2'].tools).toEqual(expectedToolSummariesServer2);
@@ -680,6 +678,7 @@ describe('HubToolsService', () => {
680
678
  vi.mocked(mcpConnectionManager.getResources).mockReturnValue([
681
679
  { uri: 'test://resource', name: 'Test Resource' }
682
680
  ]);
681
+ vi.mocked(mcpConnectionManager.getConnectedIndexes).mockReturnValue([0]);
683
682
  // Act
684
683
  const resources = await hubToolsService.listResources();
685
684
  // Assert - the resource list should include use-guide and at least the server resource
@@ -746,6 +745,7 @@ describe('HubToolsService', () => {
746
745
  instances: [
747
746
  {
748
747
  id: 'test-instance',
748
+ index: 0,
749
749
  enabled: true,
750
750
  args: [],
751
751
  env: {},
@@ -783,7 +783,7 @@ describe('HubToolsService', () => {
783
783
  lastHeartbeat: mockInstance.lastHeartbeat,
784
784
  // @ts-expect-error - Accessing extra fields on mock
785
785
  uptime: mockInstance.uptime,
786
- description: `Connected MCP server: ${serverName}`
786
+ description: `${serverName} (You can check the tool list to understand its capabilities and update the description.)`
787
787
  });
788
788
  });
789
789
  it('should return tools list for tools URI', async () => {
@@ -791,6 +791,7 @@ describe('HubToolsService', () => {
791
791
  const serverName = 'Test Server';
792
792
  const mockInstance = {
793
793
  id: '1',
794
+ index: 0,
794
795
  enabled: true,
795
796
  args: [],
796
797
  env: {},
@@ -816,6 +817,7 @@ describe('HubToolsService', () => {
816
817
  const serverName = 'Test Server';
817
818
  const mockInstance = {
818
819
  id: '1',
820
+ index: 0,
819
821
  enabled: true,
820
822
  args: [],
821
823
  env: {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loop_ouroboros/mcp-hub-lite",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "description": "A lightweight MCP management platform designed for independent developers",
5
5
  "license": "MIT",
6
6
  "author": "loop_ouroboros",