@loop_ouroboros/mcp-hub-lite 1.2.8 → 1.2.9

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 (73) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/client/assets/{HomeView-CgEri1kD.js → HomeView-CGezWc0j.js} +1 -1
  3. package/dist/client/assets/{ResourceDetailView-B8Qo1_jK.js → ResourceDetailView-Bi5UsbFq.js} +1 -1
  4. package/dist/client/assets/{ResourceDetailView-DUJZbegl.css → ResourceDetailView-CDmWGdAK.css} +1 -1
  5. package/dist/client/assets/{ResourcesView-B12FzUdo.js → ResourcesView-B9anSm85.js} +1 -1
  6. package/dist/client/assets/{ServerDashboard-B3O-crvv.js → ServerDashboard-g5p4VC_-.js} +1 -1
  7. package/dist/client/assets/{ServerDetail-CXg8rI3q.css → ServerDetail-DCQH8HIb.css} +1 -1
  8. package/dist/client/assets/ServerDetail-DMoFqWCp.js +2 -0
  9. package/dist/client/assets/{ServerListView-SlZN8ppC.js → ServerListView-DZsy2gaQ.js} +1 -1
  10. package/dist/client/assets/{SettingsView-D8fiOG0O.js → SettingsView-DQSWb9xM.js} +1 -1
  11. package/dist/client/assets/{ToolCallDialog-DYEdhnCk.js → ToolCallDialog-BEyRp_J3.js} +1 -1
  12. package/dist/client/assets/ToolsView-BU7PKJwt.js +1 -0
  13. package/dist/client/assets/ToolsView-BkrQLjH9.css +1 -0
  14. package/dist/client/assets/{_baseClone-BYxCbA_9.js → _baseClone-DsVtZfPm.js} +1 -1
  15. package/dist/client/assets/{el-form-item-ySymCPMr.js → el-form-item-CTsVV8sm.js} +1 -1
  16. package/dist/client/assets/{el-input-C85p6Nqj.js → el-input-Bh1VGJTU.js} +1 -1
  17. package/dist/client/assets/{el-loading-DIjKEx81.js → el-loading-huOeK9cW.js} +1 -1
  18. package/dist/client/assets/{el-overlay-B_CxiSem.js → el-overlay-CR_KVhLU.js} +1 -1
  19. package/dist/client/assets/{el-radio-group-BjkTCPRf.js → el-radio-group-BSbtAW4k.js} +1 -1
  20. package/dist/client/assets/{el-skeleton-item-CupTKK6n.js → el-skeleton-item-BSxOLPFM.js} +1 -1
  21. package/dist/client/assets/{el-switch-BosIJ9jf.js → el-switch-BaQUQWTL.js} +1 -1
  22. package/dist/client/assets/{el-tab-pane-BydxdJoc.js → el-tab-pane-9JxLgdS7.js} +1 -1
  23. package/dist/client/assets/{el-table-column-DV5TZOUW.js → el-table-column-Du1l9Ww3.js} +1 -1
  24. package/dist/client/assets/{index-xJkq2euk.css → index-BNmwPGMT.css} +1 -1
  25. package/dist/client/assets/index-CsZoFRv1.js +2 -0
  26. package/dist/client/assets/{omit-DxDGRttI.js → omit-Btci9mp3.js} +1 -1
  27. package/dist/client/assets/{raf-Y9AoxecD.js → raf-tUu4BwZS.js} +1 -1
  28. package/dist/client/index.html +2 -2
  29. package/dist/server/src/api/web/search.d.ts +15 -0
  30. package/dist/server/src/api/web/search.d.ts.map +1 -1
  31. package/dist/server/src/api/web/search.js +22 -1
  32. package/dist/server/src/models/event.model.d.ts +0 -98
  33. package/dist/server/src/models/event.model.d.ts.map +1 -1
  34. package/dist/server/src/models/event.model.js +0 -4
  35. package/dist/server/src/models/server.model.d.ts +0 -2
  36. package/dist/server/src/models/server.model.d.ts.map +1 -1
  37. package/dist/server/src/models/system-tools.constants.d.ts +6 -2
  38. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  39. package/dist/server/src/models/system-tools.constants.js +3 -1
  40. package/dist/server/src/pid/types.d.ts +0 -5
  41. package/dist/server/src/pid/types.d.ts.map +1 -1
  42. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  43. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +28 -1
  44. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  45. package/dist/server/src/services/hub-manager.service.js +6 -2
  46. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -0
  47. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  48. package/dist/server/src/services/hub-tools/system-tool-definitions.js +25 -1
  49. package/dist/server/src/services/hub-tools.service.d.ts +21 -4
  50. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  51. package/dist/server/src/services/hub-tools.service.js +59 -1
  52. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  53. package/dist/server/src/services/system-tool-handler.js +9 -1
  54. package/dist/server/src/utils/instance-id.d.ts +0 -8
  55. package/dist/server/src/utils/instance-id.d.ts.map +1 -1
  56. package/dist/server/src/utils/instance-id.js +1 -1
  57. package/dist/server/src/utils/logger/index.d.ts +0 -22
  58. package/dist/server/src/utils/logger/index.d.ts.map +1 -1
  59. package/dist/server/src/utils/logger/index.js +0 -29
  60. package/dist/server/src/utils/sort-utils.d.ts +0 -16
  61. package/dist/server/src/utils/sort-utils.d.ts.map +1 -1
  62. package/dist/server/src/utils/sort-utils.js +0 -42
  63. package/dist/server/tests/unit/api/search.test.d.ts +2 -0
  64. package/dist/server/tests/unit/api/search.test.d.ts.map +1 -0
  65. package/dist/server/tests/unit/api/search.test.js +61 -0
  66. package/dist/server/tests/unit/services/hub-tools.service.test.js +2 -1
  67. package/dist/server/tests/unit/utils/logger.test.js +1 -23
  68. package/dist/server/tests/unit/utils/sort-utils.test.js +1 -92
  69. package/package.json +1 -1
  70. package/dist/client/assets/ServerDetail-Bz5_9yOY.js +0 -2
  71. package/dist/client/assets/ToolsView-BreAl-yn.js +0 -1
  72. package/dist/client/assets/ToolsView-BxgXvPC3.css +0 -1
  73. package/dist/client/assets/index-kC4mf0Vo.js +0 -2
@@ -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-kC4mf0Vo.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-CsZoFRv1.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/vue-vendor-Dwcr0jep.js">
10
- <link rel="stylesheet" crossorigin href="/assets/index-xJkq2euk.css">
10
+ <link rel="stylesheet" crossorigin href="/assets/index-BNmwPGMT.css">
11
11
  </head>
12
12
  <body>
13
13
  <div id="app"></div>
@@ -1,4 +1,19 @@
1
1
  import { FastifyInstance } from 'fastify';
2
+ import type { ServerConfig } from '../../config/config-manager.js';
3
+ /**
4
+ * Filters tools by aggregatedTools configuration.
5
+ * Only includes tools from servers that have aggregatedTools configured
6
+ * AND the tool is in that list.
7
+ */
8
+ export declare function filterByAggregatedTools(tools: Array<{
9
+ name: string;
10
+ description?: string;
11
+ serverName: string;
12
+ }>, getServerConfig: (name: string) => ServerConfig | undefined): Array<{
13
+ name: string;
14
+ description?: string;
15
+ serverName: string;
16
+ }>;
2
17
  /**
3
18
  * Tool Search API Routes
4
19
  *
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAsC7D"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EACxE,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,GAC1D,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAQnE;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBA6C7D"}
@@ -1,4 +1,21 @@
1
1
  import { mcpConnectionManager } from '../../services/mcp-connection-manager.js';
2
+ import { hubManager } from '../../services/hub-manager.service.js';
3
+ /**
4
+ * Filters tools by aggregatedTools configuration.
5
+ * Only includes tools from servers that have aggregatedTools configured
6
+ * AND the tool is in that list.
7
+ */
8
+ export function filterByAggregatedTools(tools, getServerConfig) {
9
+ return tools.filter((tool) => {
10
+ const serverConfig = getServerConfig(tool.serverName);
11
+ if (!serverConfig)
12
+ return false;
13
+ const aggregatedTools = serverConfig.template?.aggregatedTools;
14
+ if (!aggregatedTools || aggregatedTools.length === 0)
15
+ return false;
16
+ return aggregatedTools.includes(tool.name);
17
+ });
18
+ }
2
19
  /**
3
20
  * Tool Search API Routes
4
21
  *
@@ -14,13 +31,17 @@ export async function webSearchRoutes(fastify) {
14
31
  const { q, limit = 50 } = request.query;
15
32
  const allTools = mcpConnectionManager.getAllTools();
16
33
  const query = q?.toLowerCase() || '';
17
- const filtered = allTools.filter((tool) => {
34
+ // Filter by search query
35
+ const queryMatched = allTools.filter((tool) => {
18
36
  if (!query)
19
37
  return true;
20
38
  const nameMatch = tool.name.toLowerCase().includes(query);
21
39
  const descMatch = tool.description?.toLowerCase().includes(query);
22
40
  return nameMatch || descMatch;
23
41
  });
42
+ // Filter by aggregatedTools — only include tools from servers that have
43
+ // aggregatedTools configured AND the tool is in that list
44
+ const filtered = filterByAggregatedTools(queryMatched, (name) => hubManager.getServerByName(name));
24
45
  const results = filtered.slice(0, limit);
25
46
  return {
26
47
  results: results.map((tool) => ({
@@ -1,100 +1,2 @@
1
- /**
2
- * Event data models
3
- * Contains all data interface definitions used by the event bus
4
- */
5
- import type { ServerConfig, ServerInstanceConfig } from '../config/config.schema.js';
6
- import type { Tool } from '../../shared/models/tool.model.js';
7
- import type { Resource } from '../../shared/models/resource.model.js';
8
- import type { LogLevel } from '../../shared/types/common.types.js';
9
- export interface ServerAddedEventData {
10
- name: string;
11
- config: ServerConfig;
12
- }
13
- export interface ServerUpdatedEventData {
14
- name: string;
15
- config: ServerConfig;
16
- }
17
- export type ServerDeletedEventData = string;
18
- export interface ServerInstanceAddedEventData {
19
- name: string;
20
- instance: ServerInstanceConfig;
21
- }
22
- export interface ServerInstanceUpdatedEventData {
23
- name: string;
24
- index: number;
25
- updates: Partial<ServerInstanceConfig>;
26
- }
27
- export interface ServerInstanceDeletedEventData {
28
- name: string;
29
- index: number;
30
- }
31
- export interface ServerConnectedEventData {
32
- serverName: string;
33
- serverIndex: number;
34
- status: 'online';
35
- timestamp: number;
36
- }
37
- export interface ServerDisconnectedEventData {
38
- serverName: string;
39
- serverIndex: number;
40
- status: 'offline';
41
- timestamp: number;
42
- }
43
- export interface ServerStatusChangeEventData {
44
- serverName: string;
45
- serverIndex: number;
46
- status: 'online' | 'offline' | 'error';
47
- error?: string;
48
- timestamp: number;
49
- }
50
- export interface ToolsUpdatedEventData {
51
- serverName: string;
52
- serverIndex: number;
53
- tools: Tool[];
54
- }
55
- export interface ToolCallStartedEventData {
56
- requestId: string;
57
- serverName: string;
58
- serverIndex: number;
59
- toolName: string;
60
- timestamp: number;
61
- args: Record<string, unknown>;
62
- }
63
- export interface ToolCallCompletedEventData {
64
- requestId: string;
65
- serverName: string;
66
- serverIndex: number;
67
- toolName: string;
68
- timestamp: number;
69
- result: unknown;
70
- }
71
- export interface ToolCallErrorEventData {
72
- requestId: string;
73
- serverName: string;
74
- serverIndex: number;
75
- toolName: string;
76
- timestamp: number;
77
- error: string;
78
- stack?: string;
79
- }
80
- export interface ResourcesUpdatedEventData {
81
- serverName: string;
82
- serverIndex: number;
83
- resources: Resource[];
84
- }
85
- export interface LogEntryEventData {
86
- serverName: string;
87
- serverIndex: number;
88
- logs: Array<{
89
- level: LogLevel;
90
- message: string;
91
- timestamp: number;
92
- }>;
93
- }
94
- export interface ConfigurationUpdatedEventData {
95
- timestamp: number;
96
- config: unknown;
97
- changes?: unknown;
98
- }
99
1
  export type EventData = unknown;
100
2
  //# 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":"AAEA,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC"}
@@ -1,5 +1 @@
1
- /**
2
- * Event data models
3
- * Contains all data interface definitions used by the event bus
4
- */
5
1
  export {};
@@ -1,4 +1,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';
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 };
3
1
  export { InstanceSelectionStrategy } from '../../shared/models/server.model.js';
4
2
  //# 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,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
+ {"version":3,"file":"server.model.d.ts","sourceRoot":"","sources":["../../../../src/models/server.model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -35,18 +35,22 @@ export interface UpdateServerDescriptionParams {
35
35
  export interface ListTagsParams {
36
36
  serverName: string;
37
37
  }
38
- export type SystemToolArgs = ListServersParams | ListToolsInServerParams | GetToolParams | CallToolParams | UpdateServerDescriptionParams | ListTagsParams;
38
+ export interface SearchToolsParams {
39
+ query: string;
40
+ }
41
+ export type SystemToolArgs = ListServersParams | ListToolsInServerParams | GetToolParams | CallToolParams | UpdateServerDescriptionParams | ListTagsParams | SearchToolsParams;
39
42
  export declare const LIST_SERVERS_TOOL = "list_servers";
40
43
  export declare const LIST_TOOLS_TOOL = "list_tools";
41
44
  export declare const GET_TOOL_TOOL = "get_tool";
42
45
  export declare const CALL_TOOL_TOOL = "call_tool";
43
46
  export declare const UPDATE_SERVER_DESCRIPTION_TOOL = "update_server_description";
44
47
  export declare const LIST_TAGS_TOOL = "list_tags";
48
+ export declare const SEARCH_TOOLS_TOOL = "search_tools";
45
49
  /**
46
50
  * List of all system tool names
47
51
  * This array is used to identify system tools across the application
48
52
  */
49
- export declare const SYSTEM_TOOL_NAMES: readonly ["list_servers", "list_tools", "get_tool", "call_tool", "update_server_description", "list_tags"];
53
+ export declare const SYSTEM_TOOL_NAMES: readonly ["list_servers", "list_tools", "get_tool", "call_tool", "update_server_description", "list_tags", "search_tools"];
50
54
  /**
51
55
  * Type definition for system tool names
52
56
  * Provides type safety when working with system tool names
@@ -1 +1 @@
1
- {"version":3,"file":"system-tools.constants.d.ts","sourceRoot":"","sources":["../../../../src/models/system-tools.constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,aAAa,GACb,cAAc,GACd,6BAA6B,GAC7B,cAAc,CAAC;AAGnB,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,4GAOpB,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGhE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,iBAAiB,CAAC"}
1
+ {"version":3,"file":"system-tools.constants.d.ts","sourceRoot":"","sources":["../../../../src/models/system-tools.constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,aAAa,GACb,cAAc,GACd,6BAA6B,GAC7B,cAAc,GACd,iBAAiB,CAAC;AAGtB,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,4HAQpB,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGhE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,iBAAiB,CAAC"}
@@ -9,6 +9,7 @@ export const GET_TOOL_TOOL = 'get_tool';
9
9
  export const CALL_TOOL_TOOL = 'call_tool';
10
10
  export const UPDATE_SERVER_DESCRIPTION_TOOL = 'update_server_description';
11
11
  export const LIST_TAGS_TOOL = 'list_tags';
12
+ export const SEARCH_TOOLS_TOOL = 'search_tools';
12
13
  /**
13
14
  * List of all system tool names
14
15
  * This array is used to identify system tools across the application
@@ -19,7 +20,8 @@ export const SYSTEM_TOOL_NAMES = [
19
20
  GET_TOOL_TOOL,
20
21
  CALL_TOOL_TOOL,
21
22
  UPDATE_SERVER_DESCRIPTION_TOOL,
22
- LIST_TAGS_TOOL
23
+ LIST_TAGS_TOOL,
24
+ SEARCH_TOOLS_TOOL
23
25
  ];
24
26
  // Individual gateway server name constant
25
27
  /**
@@ -1,11 +1,6 @@
1
1
  /**
2
2
  * PID management related type definitions
3
3
  */
4
- export interface PidInfo {
5
- pid: number;
6
- timestamp: number;
7
- port?: number;
8
- }
9
4
  export interface PidFileOptions {
10
5
  configDir?: string;
11
6
  filename?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/pid/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/pid/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-tools-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/services/gateway/request-handlers/system-tools-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmNnE"}
1
+ {"version":3,"file":"system-tools-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/services/gateway/request-handlers/system-tools-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6OnE"}
@@ -6,7 +6,7 @@ import { McpError } from '@modelcontextprotocol/sdk/types.js';
6
6
  import { logger } from '../../../utils/index.js';
7
7
  import { LOG_MODULES } from '../../../utils/logger/log-modules.js';
8
8
  import { hubToolsService } from '../../hub-tools.service.js';
9
- import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL } from '../../../models/system-tools.constants.js';
9
+ import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL } from '../../../models/system-tools.constants.js';
10
10
  /**
11
11
  * Register system tools handlers on the MCP server.
12
12
  *
@@ -219,4 +219,31 @@ export function registerSystemToolsHandlers(server) {
219
219
  }
220
220
  }
221
221
  });
222
+ // Search tools across all servers
223
+ const SearchToolsRequestSchema = z.object({
224
+ method: z.literal(SEARCH_TOOLS_TOOL),
225
+ params: z.object({
226
+ query: z.string()
227
+ }),
228
+ id: z.union([z.string(), z.number()]),
229
+ jsonrpc: z.literal('2.0')
230
+ });
231
+ server.server.setRequestHandler(SearchToolsRequestSchema, async (request) => {
232
+ try {
233
+ const result = await hubToolsService.searchTools(request.params.query);
234
+ return result;
235
+ }
236
+ catch (error) {
237
+ logger.error(`Search tools error:`, error, LOG_MODULES.SYSTEM_TOOLS_HANDLER);
238
+ if (error instanceof McpError) {
239
+ throw error;
240
+ }
241
+ else if (error instanceof Error) {
242
+ throw new McpError(-32802, error.message);
243
+ }
244
+ else {
245
+ throw new McpError(-32802, String(error));
246
+ }
247
+ }
248
+ });
222
249
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hub-manager.service.d.ts","sourceRoot":"","sources":["../../../../src/services/hub-manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,gCAAgC,CAAC;AAKxC;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,OAAO,GAAE,aAA6B;IAIlD;;OAEG;IACG,0BAA0B,CAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC;IAUhB;;OAEG;IACG,gCAAgC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E;;OAEG;IACG,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BlE;;OAEG;IACH,aAAa,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC;IAI9D;;OAEG;IACH,aAAa,CACX,EAAE,EAAE,MAAM,GACT;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,cAAc,CAAA;KAAE,GAAG,SAAS;IAe/E;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIvD;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAIxD;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAStD;;OAEG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAQtF;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAOrF;;;;OAIG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC;IAQ1B;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAkBhG;;OAEG;IACG,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC;IAShB;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlD;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetE;;OAEG;IACG,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7D;;OAEG;IACG,qCAAqC,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAwBhC;AAED,eAAO,MAAM,UAAU,mBAA0B,CAAC"}
1
+ {"version":3,"file":"hub-manager.service.d.ts","sourceRoot":"","sources":["../../../../src/services/hub-manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,gCAAgC,CAAC;AAKxC;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,OAAO,GAAE,aAA6B;IAIlD;;OAEG;IACG,0BAA0B,CAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC;IAUhB;;OAEG;IACG,gCAAgC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E;;OAEG;IACG,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BlE;;OAEG;IACH,aAAa,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC;IAI9D;;OAEG;IACH,aAAa,CACX,EAAE,EAAE,MAAM,GACT;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,cAAc,CAAA;KAAE,GAAG,SAAS;IAe/E;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIvD;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAIxD;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAStD;;OAEG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAQtF;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAOrF;;;;OAIG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC;IAQ1B;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAkBhG;;OAEG;IACG,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC;IAShB;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBlD;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtE;;OAEG;IACG,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7D;;OAEG;IACG,qCAAqC,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAwBhC;AAED,eAAO,MAAM,UAAU,mBAA0B,CAAC"}
@@ -174,7 +174,9 @@ export class HubManagerService {
174
174
  }
175
175
  const instances = this.getServerInstancesByName(name);
176
176
  for (const instance of instances) {
177
- await mcpConnectionManager.disconnect(name, instance.index ?? 0).catch(() => { });
177
+ await mcpConnectionManager
178
+ .disconnect(name, instance.index ?? 0)
179
+ .catch((err) => logger.debug(`Disconnect error during server removal: ${err}`, LOG_MODULES.HUB_MANAGER));
178
180
  }
179
181
  await this.configManager.removeServer(name);
180
182
  logger.info(`Server removed: ${name}`, LOG_MODULES.HUB_MANAGER);
@@ -188,7 +190,9 @@ export class HubManagerService {
188
190
  const instances = this.getServerInstancesByName(name);
189
191
  const instance = instances.find((inst) => inst.index === index);
190
192
  if (instance) {
191
- await mcpConnectionManager.disconnect(name, instance.index ?? 0).catch(() => { });
193
+ await mcpConnectionManager
194
+ .disconnect(name, instance.index ?? 0)
195
+ .catch((err) => logger.debug(`Disconnect error during instance removal: ${err}`, LOG_MODULES.HUB_MANAGER));
192
196
  }
193
197
  await this.configManager.removeServerInstance(name, index);
194
198
  logger.info(`Server instance removed for server: [${name}] at index: ${index}`, LOG_MODULES.HUB_MANAGER);
@@ -31,6 +31,7 @@ export interface SystemToolDefinition {
31
31
  * - get-tool: Get complete tool schema
32
32
  * - call-tool: Call a specific tool from a specific server
33
33
  * - update-server-description: Update the description of a specific MCP server
34
+ * - search-tools: Search for tools across all connected servers
34
35
  *
35
36
  * @returns {Array<{ name: string; description: string; inputSchema: JsonSchema; annotations?: ToolAnnotations }>}
36
37
  * Array of system tool configurations
@@ -1 +1 @@
1
- {"version":3,"file":"system-tool-definitions.d.ts","sourceRoot":"","sources":["../../../../../src/services/hub-tools/system-tool-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAW/D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,IAAI,oBAAoB,EAAE,CAiKvD"}
1
+ {"version":3,"file":"system-tool-definitions.d.ts","sourceRoot":"","sources":["../../../../../src/services/hub-tools/system-tool-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAY/D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,IAAI,oBAAoB,EAAE,CAwLvD"}
@@ -1,4 +1,4 @@
1
- import { SYSTEM_TOOL_NAMES, LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL } from '../../models/system-tools.constants.js';
1
+ import { SYSTEM_TOOL_NAMES, LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL } from '../../models/system-tools.constants.js';
2
2
  /**
3
3
  * Retrieves the complete list of system tools provided by this service.
4
4
  *
@@ -12,6 +12,7 @@ import { SYSTEM_TOOL_NAMES, LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, C
12
12
  * - get-tool: Get complete tool schema
13
13
  * - call-tool: Call a specific tool from a specific server
14
14
  * - update-server-description: Update the description of a specific MCP server
15
+ * - search-tools: Search for tools across all connected servers
15
16
  *
16
17
  * @returns {Array<{ name: string; description: string; inputSchema: JsonSchema; annotations?: ToolAnnotations }>}
17
18
  * Array of system tool configurations
@@ -174,6 +175,29 @@ export function getSystemTools() {
174
175
  }
175
176
  });
176
177
  break;
178
+ case SEARCH_TOOLS_TOOL:
179
+ systemTools.push({
180
+ name: toolName,
181
+ description: 'Search for tools across all connected MCP servers by name or description',
182
+ inputSchema: {
183
+ type: 'object',
184
+ properties: {
185
+ query: {
186
+ type: 'string',
187
+ description: 'Search query to match against tool names and descriptions'
188
+ }
189
+ },
190
+ required: ['query']
191
+ },
192
+ annotations: {
193
+ title: 'Search Tools',
194
+ readOnlyHint: true,
195
+ destructiveHint: false,
196
+ idempotentHint: true,
197
+ openWorldHint: false
198
+ }
199
+ });
200
+ break;
177
201
  default:
178
202
  // This should never happen due to TypeScript type checking
179
203
  throw new Error(`Unknown system tool: ${toolName}`);
@@ -1,7 +1,7 @@
1
1
  import type { Tool, ToolSummary } from '../../shared/models/tool.model.js';
2
2
  import type { Resource } from '../../shared/models/resource.model.js';
3
- import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL } from '../models/system-tools.constants.js';
4
- import type { SystemToolName, ListServersParams, ListToolsInServerParams, GetToolParams, CallToolParams, UpdateServerDescriptionParams, ListTagsParams } from '../models/system-tools.constants.js';
3
+ import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL } from '../models/system-tools.constants.js';
4
+ import type { SystemToolName, ListServersParams, ListToolsInServerParams, GetToolParams, CallToolParams, UpdateServerDescriptionParams, ListTagsParams, SearchToolsParams } from '../models/system-tools.constants.js';
5
5
  /**
6
6
  * Central service for managing system tools and MCP server interactions in the MCP Hub Lite gateway.
7
7
  *
@@ -149,7 +149,7 @@ export declare class HubToolsService {
149
149
  * @returns {Promise<ConditionalReturnType>} Tool execution result with accurate type safety matching actual method return types
150
150
  * @throws {Error} If the system tool is not found or execution fails
151
151
  */
152
- callSystemTool<T extends SystemToolName>(toolName: T, toolArgs: T extends typeof LIST_SERVERS_TOOL ? ListServersParams : T extends typeof LIST_TOOLS_TOOL ? ListToolsInServerParams : T extends typeof GET_TOOL_TOOL ? GetToolParams : T extends typeof CALL_TOOL_TOOL ? CallToolParams : T extends typeof UPDATE_SERVER_DESCRIPTION_TOOL ? UpdateServerDescriptionParams : T extends typeof LIST_TAGS_TOOL ? ListTagsParams : never): Promise<T extends typeof LIST_SERVERS_TOOL ? Record<string, string> : T extends typeof LIST_TOOLS_TOOL ? {
152
+ callSystemTool<T extends SystemToolName>(toolName: T, toolArgs: T extends typeof LIST_SERVERS_TOOL ? ListServersParams : T extends typeof LIST_TOOLS_TOOL ? ListToolsInServerParams : T extends typeof GET_TOOL_TOOL ? GetToolParams : T extends typeof CALL_TOOL_TOOL ? CallToolParams : T extends typeof UPDATE_SERVER_DESCRIPTION_TOOL ? UpdateServerDescriptionParams : T extends typeof LIST_TAGS_TOOL ? ListTagsParams : T extends typeof SEARCH_TOOLS_TOOL ? SearchToolsParams : never): Promise<T extends typeof LIST_SERVERS_TOOL ? Record<string, string> : T extends typeof LIST_TOOLS_TOOL ? {
153
153
  serverName: string;
154
154
  tools: ToolSummary[];
155
155
  } : T extends typeof GET_TOOL_TOOL ? Tool | undefined : T extends typeof CALL_TOOL_TOOL ? unknown : T extends typeof UPDATE_SERVER_DESCRIPTION_TOOL ? {
@@ -163,7 +163,10 @@ export declare class HubToolsService {
163
163
  id: string;
164
164
  tags: Record<string, string>;
165
165
  }>;
166
- } : never>;
166
+ } : T extends typeof SEARCH_TOOLS_TOOL ? Record<string, {
167
+ description: string;
168
+ tools: ToolSummary[];
169
+ }> : never>;
167
170
  /**
168
171
  * Calls a specific tool from a specific MCP server with comprehensive event tracking.
169
172
  *
@@ -189,6 +192,20 @@ export declare class HubToolsService {
189
192
  listAllTools(): Promise<Record<string, {
190
193
  tools: ToolSummary[];
191
194
  }>>;
195
+ /**
196
+ * Searches for tools matching the query across all connected MCP servers.
197
+ *
198
+ * Results are grouped by server name, and only servers with at least one
199
+ * matching tool are included. Matching is case-insensitive on tool name and description.
200
+ *
201
+ * @param {string} query - Search query string for matching tool names and descriptions
202
+ * @returns {Promise<Record<string, { description: string; tools: ToolSummary[] }>>}
203
+ * Object mapping server names to their descriptions and matching tools
204
+ */
205
+ searchTools(query: string): Promise<Record<string, {
206
+ description: string;
207
+ tools: ToolSummary[];
208
+ }>>;
192
209
  /**
193
210
  * Lists all dynamically generated Hub resources based on connected MCP servers.
194
211
  *
@@ -1 +1 @@
1
- {"version":3,"file":"hub-tools.service.d.ts","sourceRoot":"","sources":["../../../../src/services/hub-tools.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-tools.service.d.ts","sourceRoot":"","sources":["../../../../src/services/hub-tools.service.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { logger, LOG_MODULES } from '../utils/logger.js';
6
6
  import { stringifyForLogging } from '../utils/json-utils.js';
7
7
  import { normalizeToolName } from '../utils/name-converter.js';
8
8
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
9
- import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
9
+ import { MCP_HUB_LITE_SERVER, LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL, SYSTEM_TOOL_NAMES } from '../models/system-tools.constants.js';
10
10
  import { ToolArgsParser } from '../utils/tool-args-parser.js';
11
11
  import { hasValidId, selectBestInstance, getServerDescription, getSystemTools, generateDynamicResources, readResource as readResourceUtil } from './hub-tools/index.js';
12
12
  import { InstanceSelector } from './hub-tools/instance-selector.js';
@@ -309,6 +309,14 @@ export class HubToolsService {
309
309
  result = await this.listTags(toolArgs);
310
310
  break;
311
311
  }
312
+ case SEARCH_TOOLS_TOOL: {
313
+ const searchArgs = toolArgs;
314
+ if (!searchArgs.query) {
315
+ throw new Error('query is required for search_tools');
316
+ }
317
+ result = await this.searchTools(searchArgs.query);
318
+ break;
319
+ }
312
320
  default:
313
321
  throw new Error(`System tool "${toolName}" not found`);
314
322
  }
@@ -579,6 +587,56 @@ export class HubToolsService {
579
587
  }
580
588
  return allTools;
581
589
  }
590
+ /**
591
+ * Searches for tools matching the query across all connected MCP servers.
592
+ *
593
+ * Results are grouped by server name, and only servers with at least one
594
+ * matching tool are included. Matching is case-insensitive on tool name and description.
595
+ *
596
+ * @param {string} query - Search query string for matching tool names and descriptions
597
+ * @returns {Promise<Record<string, { description: string; tools: ToolSummary[] }>>}
598
+ * Object mapping server names to their descriptions and matching tools
599
+ */
600
+ async searchTools(query) {
601
+ if (!query || typeof query !== 'string') {
602
+ throw new Error('query is required and must be a non-empty string');
603
+ }
604
+ const normalizedQuery = query.toLowerCase();
605
+ const servers = hubManager.getAllServers();
606
+ const result = {};
607
+ for (const server of servers) {
608
+ if (!hasValidId(server)) {
609
+ continue;
610
+ }
611
+ const indexes = mcpConnectionManager.getConnectedIndexes(server.name);
612
+ if (indexes.length === 0) {
613
+ continue;
614
+ }
615
+ const description = getServerDescription(server.config, server.name);
616
+ const tools = mcpConnectionManager.getToolsByServerName(server.name);
617
+ if (tools.length === 0) {
618
+ continue;
619
+ }
620
+ const matchingTools = tools
621
+ .filter((tool) => {
622
+ const nameMatch = tool.name.toLowerCase().includes(normalizedQuery);
623
+ const descMatch = tool.description?.toLowerCase().includes(normalizedQuery);
624
+ return nameMatch || descMatch;
625
+ })
626
+ .map((tool) => ({
627
+ name: tool.name,
628
+ description: tool.description,
629
+ serverName: server.name
630
+ }));
631
+ if (matchingTools.length > 0) {
632
+ result[server.name] = {
633
+ description,
634
+ tools: matchingTools
635
+ };
636
+ }
637
+ }
638
+ return result;
639
+ }
582
640
  /**
583
641
  * Lists all dynamically generated Hub resources based on connected MCP servers.
584
642
  *
@@ -1 +1 @@
1
- {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CA2EpB"}
1
+ {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CAmFpB"}
@@ -1,7 +1,7 @@
1
1
  import { hubToolsService } from './hub-tools.service.js';
2
2
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
3
3
  import { logger, LOG_MODULES } from '../utils/logger.js';
4
- import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL } from '../models/system-tools.constants.js';
4
+ import { LIST_SERVERS_TOOL, LIST_TOOLS_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, LIST_TAGS_TOOL, SEARCH_TOOLS_TOOL } from '../models/system-tools.constants.js';
5
5
  import { stringifyForLogging } from '../utils/json-utils.js';
6
6
  /**
7
7
  * Unified system tool call handler
@@ -58,6 +58,14 @@ export class SystemToolHandler {
58
58
  result = await hubToolsService.listTags(listTagsArgs);
59
59
  break;
60
60
  }
61
+ case SEARCH_TOOLS_TOOL: {
62
+ const searchArgs = toolArgs;
63
+ if (!searchArgs.query) {
64
+ throw new McpError(-32802, 'query is required for search_tools');
65
+ }
66
+ result = await hubToolsService.searchTools(searchArgs.query);
67
+ break;
68
+ }
61
69
  default:
62
70
  throw new McpError(-32801, `Unknown system tool: ${toolName}`);
63
71
  }
@@ -2,14 +2,6 @@
2
2
  * Instance ID generation utilities using content-based hashing.
3
3
  */
4
4
  import type { ServerInstance } from '../config/config.schema.js';
5
- /**
6
- * Generates a stable 8-character hash from an object.
7
- * Uses SHA-256 and returns the first 8 hex characters.
8
- *
9
- * @param obj - The object to hash
10
- * @returns An 8-character hex string
11
- */
12
- export declare function generateInstanceHash(obj: Record<string, unknown>): string;
13
5
  /**
14
6
  * Generates a deterministic instance ID based on server name and instance configuration.
15
7
  * The ID format is: ${serverName}-${hash}
@@ -1 +1 @@
1
- {"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../../../src/utils/instance-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyBzE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GACtC,MAAM,CAiBR"}
1
+ {"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../../../src/utils/instance-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAoC/D;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GACtC,MAAM,CAiBR"}