@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.
- package/CHANGELOG.md +17 -0
- package/dist/client/assets/{HomeView-CgEri1kD.js → HomeView-CGezWc0j.js} +1 -1
- package/dist/client/assets/{ResourceDetailView-B8Qo1_jK.js → ResourceDetailView-Bi5UsbFq.js} +1 -1
- package/dist/client/assets/{ResourceDetailView-DUJZbegl.css → ResourceDetailView-CDmWGdAK.css} +1 -1
- package/dist/client/assets/{ResourcesView-B12FzUdo.js → ResourcesView-B9anSm85.js} +1 -1
- package/dist/client/assets/{ServerDashboard-B3O-crvv.js → ServerDashboard-g5p4VC_-.js} +1 -1
- package/dist/client/assets/{ServerDetail-CXg8rI3q.css → ServerDetail-DCQH8HIb.css} +1 -1
- package/dist/client/assets/ServerDetail-DMoFqWCp.js +2 -0
- package/dist/client/assets/{ServerListView-SlZN8ppC.js → ServerListView-DZsy2gaQ.js} +1 -1
- package/dist/client/assets/{SettingsView-D8fiOG0O.js → SettingsView-DQSWb9xM.js} +1 -1
- package/dist/client/assets/{ToolCallDialog-DYEdhnCk.js → ToolCallDialog-BEyRp_J3.js} +1 -1
- package/dist/client/assets/ToolsView-BU7PKJwt.js +1 -0
- package/dist/client/assets/ToolsView-BkrQLjH9.css +1 -0
- package/dist/client/assets/{_baseClone-BYxCbA_9.js → _baseClone-DsVtZfPm.js} +1 -1
- package/dist/client/assets/{el-form-item-ySymCPMr.js → el-form-item-CTsVV8sm.js} +1 -1
- package/dist/client/assets/{el-input-C85p6Nqj.js → el-input-Bh1VGJTU.js} +1 -1
- package/dist/client/assets/{el-loading-DIjKEx81.js → el-loading-huOeK9cW.js} +1 -1
- package/dist/client/assets/{el-overlay-B_CxiSem.js → el-overlay-CR_KVhLU.js} +1 -1
- package/dist/client/assets/{el-radio-group-BjkTCPRf.js → el-radio-group-BSbtAW4k.js} +1 -1
- package/dist/client/assets/{el-skeleton-item-CupTKK6n.js → el-skeleton-item-BSxOLPFM.js} +1 -1
- package/dist/client/assets/{el-switch-BosIJ9jf.js → el-switch-BaQUQWTL.js} +1 -1
- package/dist/client/assets/{el-tab-pane-BydxdJoc.js → el-tab-pane-9JxLgdS7.js} +1 -1
- package/dist/client/assets/{el-table-column-DV5TZOUW.js → el-table-column-Du1l9Ww3.js} +1 -1
- package/dist/client/assets/{index-xJkq2euk.css → index-BNmwPGMT.css} +1 -1
- package/dist/client/assets/index-CsZoFRv1.js +2 -0
- package/dist/client/assets/{omit-DxDGRttI.js → omit-Btci9mp3.js} +1 -1
- package/dist/client/assets/{raf-Y9AoxecD.js → raf-tUu4BwZS.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/src/api/web/search.d.ts +15 -0
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +22 -1
- package/dist/server/src/models/event.model.d.ts +0 -98
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/event.model.js +0 -4
- package/dist/server/src/models/server.model.d.ts +0 -2
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.d.ts +6 -2
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +3 -1
- package/dist/server/src/pid/types.d.ts +0 -5
- package/dist/server/src/pid/types.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +28 -1
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +6 -2
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -0
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +25 -1
- package/dist/server/src/services/hub-tools.service.d.ts +21 -4
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +59 -1
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +9 -1
- package/dist/server/src/utils/instance-id.d.ts +0 -8
- package/dist/server/src/utils/instance-id.d.ts.map +1 -1
- package/dist/server/src/utils/instance-id.js +1 -1
- package/dist/server/src/utils/logger/index.d.ts +0 -22
- package/dist/server/src/utils/logger/index.d.ts.map +1 -1
- package/dist/server/src/utils/logger/index.js +0 -29
- package/dist/server/src/utils/sort-utils.d.ts +0 -16
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -1
- package/dist/server/src/utils/sort-utils.js +0 -42
- package/dist/server/tests/unit/api/search.test.d.ts +2 -0
- package/dist/server/tests/unit/api/search.test.d.ts.map +1 -0
- package/dist/server/tests/unit/api/search.test.js +61 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +2 -1
- package/dist/server/tests/unit/utils/logger.test.js +1 -23
- package/dist/server/tests/unit/utils/sort-utils.test.js +1 -92
- package/package.json +1 -1
- package/dist/client/assets/ServerDetail-Bz5_9yOY.js +0 -2
- package/dist/client/assets/ToolsView-BreAl-yn.js +0 -1
- package/dist/client/assets/ToolsView-BxgXvPC3.css +0 -1
- package/dist/client/assets/index-kC4mf0Vo.js +0 -2
package/dist/client/index.html
CHANGED
|
@@ -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-
|
|
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-
|
|
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,
|
|
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
|
-
|
|
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":"
|
|
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,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":"
|
|
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
|
|
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;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/pid/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,
|
|
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;
|
|
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;
|
|
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
|
|
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
|
|
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;
|
|
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
|
-
} :
|
|
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":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAOjE,OAAO,EAEL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,8BAA8B,EAC9B,cAAc,
|
|
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":"
|
|
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;
|
|
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"}
|