@loop_ouroboros/mcp-hub-lite 1.2.9 → 1.3.1
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 +82 -0
- package/README.md +405 -331
- package/dist/client/assets/{HomeView-CGezWc0j.js → HomeView-DplI3V-h.js} +1 -1
- package/dist/client/assets/{ResourceDetailView-CDmWGdAK.css → ResourceDetailView-BkTSg91z.css} +1 -1
- package/dist/client/assets/ResourceDetailView-CeHPn99Y.js +1 -0
- package/dist/client/assets/ResourcesView-C1ObRhYS.js +1 -0
- package/dist/client/assets/ResourcesView-zgV8Nq7w.css +1 -0
- package/dist/client/assets/{ServerDashboard-g5p4VC_-.js → ServerDashboard-D7wG4Gvt.js} +1 -1
- package/dist/client/assets/{ServerDetail-DCQH8HIb.css → ServerDetail-CPNAFBPM.css} +1 -1
- package/dist/client/assets/ServerDetail-G23phOcJ.js +2 -0
- package/dist/client/assets/{ServerListView-DZsy2gaQ.js → ServerListView-BFiZLtPO.js} +1 -1
- package/dist/client/assets/{ServerStatusTags.vue_vue_type_script_setup_true_lang-DmGg4uuV.js → ServerStatusTags.vue_vue_type_script_setup_true_lang-Deb_SbFw.js} +1 -1
- package/dist/client/assets/SettingsView-QBFLZ6fP.js +1 -0
- package/dist/client/assets/ToolCallDialog-BQ9UJZ_-.css +1 -0
- package/dist/client/assets/ToolCallDialog-DYS-ADCL.js +1 -0
- package/dist/client/assets/ToolsView-DYwgtm7W.js +1 -0
- package/dist/client/assets/ToolsView-cO61nMNr.css +1 -0
- package/dist/client/assets/_baseClone-DQno9YO3.js +1 -0
- package/dist/client/assets/{el-form-item-CTsVV8sm.js → el-form-item-DF0zzQdH.js} +2 -2
- package/dist/client/assets/el-input-C_p2Qw42.js +1 -0
- package/dist/client/assets/el-loading-BaenpNzU.js +1 -0
- package/dist/client/assets/el-overlay-MbIUXSQ7.js +1 -0
- package/dist/client/assets/el-radio-group-COnCjCcz.js +1 -0
- package/dist/client/assets/el-skeleton-item-qj0eQP4s.js +1 -0
- package/dist/client/assets/el-switch-BZbXqB3_.js +1 -0
- package/dist/client/assets/el-tab-pane-w7RltRLd.js +1 -0
- package/dist/client/assets/el-table-column-OD8zhFcD.js +1 -0
- package/dist/client/assets/index-DwhULJXZ.js +2 -0
- package/dist/client/assets/{index-BNmwPGMT.css → index-UtsV0Cvh.css} +1 -1
- package/dist/client/assets/{omit-Btci9mp3.js → omit-BAJQlviJ.js} +1 -1
- package/dist/client/assets/raf-B1Ry7ruA.js +1 -0
- package/dist/client/assets/{vue-vendor-Dwcr0jep.js → vue-vendor-ClSvefnQ.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/constants.d.ts +8 -0
- package/dist/server/shared/models/constants.d.ts.map +1 -0
- package/dist/server/shared/models/constants.js +6 -0
- package/dist/server/shared/models/index.d.ts +1 -0
- package/dist/server/shared/models/index.d.ts.map +1 -1
- package/dist/server/shared/models/index.js +1 -0
- package/dist/server/shared/models/server.model.d.ts +14 -0
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +27 -4
- package/dist/server/shared/types/index.d.ts +0 -1
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +0 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +1 -1
- package/dist/server/src/api/mcp/gateway.d.ts +10 -6
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +235 -87
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +11 -0
- package/dist/server/src/api/web/mcp-status.js +2 -2
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +22 -30
- package/dist/server/src/api/web/servers.js +1 -1
- package/dist/server/src/api/web/sessions.d.ts +1 -27
- package/dist/server/src/api/web/sessions.d.ts.map +1 -1
- package/dist/server/src/api/web/sessions.js +8 -97
- package/dist/server/src/api/ws/events.js +1 -1
- package/dist/server/src/api/ws/ws-handler.js +1 -1
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +6 -1
- package/dist/server/src/cli/commands/status.js +39 -1
- package/dist/server/src/cli/commands/tool-use.d.ts +10 -3
- package/dist/server/src/cli/commands/tool-use.d.ts.map +1 -1
- package/dist/server/src/cli/commands/tool-use.js +69 -30
- package/dist/server/src/cli/commands/use-guide.d.ts +0 -8
- package/dist/server/src/cli/commands/use-guide.d.ts.map +1 -1
- package/dist/server/src/cli/commands/use-guide.js +28 -170
- package/dist/server/src/cli/server.d.ts +10 -0
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/cli/server.js +31 -1
- package/dist/server/src/config/config-change-logger.js +1 -1
- package/dist/server/src/config/config-loader.js +1 -1
- package/dist/server/src/config/config-manager.js +1 -1
- package/dist/server/src/config/config-migrator.d.ts +4 -48
- package/dist/server/src/config/config-migrator.d.ts.map +1 -1
- package/dist/server/src/config/config-migrator.js +2 -103
- package/dist/server/src/config/config-saver.js +1 -1
- package/dist/server/src/config/server-config-manager.js +1 -1
- package/dist/server/src/models/system-tools.constants.d.ts +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +2 -1
- package/dist/server/src/pid/manager.js +1 -1
- package/dist/server/src/server/dev-server.js +4 -2
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +4 -2
- package/dist/server/src/server/startup.js +2 -2
- package/dist/server/src/services/connection/connection-manager.d.ts +2 -0
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +10 -8
- package/dist/server/src/services/event-bus.service.d.ts +3 -1
- package/dist/server/src/services/event-bus.service.d.ts.map +1 -1
- package/dist/server/src/services/event-bus.service.js +1 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts +14 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +101 -7
- package/dist/server/src/services/gateway/global-transport.d.ts +20 -10
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -1
- package/dist/server/src/services/gateway/global-transport.js +50 -34
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +1 -2
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +24 -13
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +22 -6
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +12 -4
- package/dist/server/src/services/gateway/session-manager.d.ts +101 -0
- package/dist/server/src/services/gateway/session-manager.d.ts.map +1 -0
- package/dist/server/src/services/gateway/session-manager.js +256 -0
- package/dist/server/src/services/gateway/tool-list-generator.d.ts +14 -19
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +221 -80
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +15 -2
- package/dist/server/src/services/hub-tools/instance-selector.js +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +1 -22
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +24 -22
- package/dist/server/src/services/hub-tools/server-selector.js +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +18 -13
- package/dist/server/src/services/log-storage.service.js +1 -1
- package/dist/server/src/services/system-tool-handler.js +1 -1
- package/dist/server/src/utils/error-handler.js +1 -1
- package/dist/server/src/utils/index.d.ts +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +1 -1
- package/dist/server/src/utils/json-utils.d.ts +9 -0
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +23 -4
- package/dist/server/src/utils/log-rotator.d.ts +0 -15
- package/dist/server/src/utils/log-rotator.d.ts.map +1 -1
- package/dist/server/src/utils/log-rotator.js +0 -18
- package/dist/server/src/utils/logger/index.d.ts +1 -1
- package/dist/server/src/utils/logger/index.d.ts.map +1 -1
- package/dist/server/src/utils/logger/index.js +1 -1
- package/dist/server/src/utils/logger/log-context.d.ts +1 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +25 -11
- package/dist/server/src/utils/logger/log-output.d.ts +17 -1
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-output.js +46 -40
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/logger.js +18 -2
- package/dist/server/src/utils/port-checker.js +1 -1
- package/dist/server/src/utils/request-context.d.ts +8 -70
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +11 -70
- package/dist/server/src/utils/transports/stdio-transport.js +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +1 -1
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +26 -3
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +1 -1
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +1 -1
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +1 -1
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +1 -1
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +1 -1
- package/dist/server/tests/types/logger-test-helpers.d.ts +1 -1
- package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-migrator.test.js +45 -105
- package/dist/server/tests/unit/config/config-saver.test.js +1 -1
- package/dist/server/tests/unit/config/config.schema.test.js +2 -1
- package/dist/server/tests/unit/server/runner.test.js +19 -13
- package/dist/server/tests/unit/services/gateway-logging.test.js +1 -1
- package/dist/server/tests/unit/services/gateway-session-mode.test.d.ts +2 -0
- package/dist/server/tests/unit/services/gateway-session-mode.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/gateway-session-mode.test.js +174 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +4 -5
- package/dist/server/tests/unit/services/hub-tools.service.test.js +82 -6
- package/dist/server/tests/unit/utils/config.test.js +14 -7
- package/dist/server/tests/unit/utils/log-output.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/log-output.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/log-output.test.js +198 -0
- package/dist/server/tests/unit/utils/log-rotator.test.js +1 -15
- package/dist/server/tests/unit/utils/logger.test.js +1 -1
- package/dist/server/vitest.config.d.ts.map +1 -1
- package/dist/server/vitest.config.js +0 -2
- package/package.json +1 -3
- package/dist/client/assets/ResourceDetailView-Bi5UsbFq.js +0 -1
- package/dist/client/assets/ResourcesView-B9anSm85.js +0 -1
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +0 -1
- package/dist/client/assets/ServerDetail-DMoFqWCp.js +0 -2
- package/dist/client/assets/SettingsView-DQSWb9xM.js +0 -1
- package/dist/client/assets/ToolCallDialog-BEyRp_J3.js +0 -1
- package/dist/client/assets/ToolCallDialog-BhdPX-Kf.css +0 -1
- package/dist/client/assets/ToolsView-BU7PKJwt.js +0 -1
- package/dist/client/assets/ToolsView-BkrQLjH9.css +0 -1
- package/dist/client/assets/_baseClone-DsVtZfPm.js +0 -1
- package/dist/client/assets/el-input-Bh1VGJTU.js +0 -1
- package/dist/client/assets/el-loading-huOeK9cW.js +0 -1
- package/dist/client/assets/el-overlay-CR_KVhLU.js +0 -1
- package/dist/client/assets/el-radio-group-BSbtAW4k.js +0 -1
- package/dist/client/assets/el-skeleton-item-BSxOLPFM.js +0 -1
- package/dist/client/assets/el-switch-BaQUQWTL.js +0 -1
- package/dist/client/assets/el-tab-pane-9JxLgdS7.js +0 -1
- package/dist/client/assets/el-table-column-Du1l9Ww3.js +0 -1
- package/dist/client/assets/index-CsZoFRv1.js +0 -2
- package/dist/client/assets/raf-tUu4BwZS.js +0 -1
|
@@ -1,23 +1,9 @@
|
|
|
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
|
-
}>;
|
|
17
2
|
/**
|
|
18
3
|
* Tool Search API Routes
|
|
19
4
|
*
|
|
20
|
-
*
|
|
5
|
+
* Returns aggregated tools from the gateway cache with wrapped inputSchema
|
|
6
|
+
* (including serverName, toolName, toolArgs, and requestOptions fields).
|
|
21
7
|
* Uses straightforward string matching on tool name and description.
|
|
22
8
|
*
|
|
23
9
|
* @param fastify - The Fastify instance to register routes on
|
|
@@ -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
|
|
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;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAoD7D"}
|
|
@@ -1,25 +1,9 @@
|
|
|
1
|
-
import {
|
|
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
|
-
}
|
|
1
|
+
import { MCP_HUB_LITE_SERVER } from '../../../shared/models/constants.js';
|
|
19
2
|
/**
|
|
20
3
|
* Tool Search API Routes
|
|
21
4
|
*
|
|
22
|
-
*
|
|
5
|
+
* Returns aggregated tools from the gateway cache with wrapped inputSchema
|
|
6
|
+
* (including serverName, toolName, toolArgs, and requestOptions fields).
|
|
23
7
|
* Uses straightforward string matching on tool name and description.
|
|
24
8
|
*
|
|
25
9
|
* @param fastify - The Fastify instance to register routes on
|
|
@@ -29,28 +13,36 @@ export async function webSearchRoutes(fastify) {
|
|
|
29
13
|
// GET /web/search - Search for tools with simple string matching
|
|
30
14
|
fastify.get('/web/search', async (request) => {
|
|
31
15
|
const { q, limit = 50 } = request.query;
|
|
32
|
-
|
|
16
|
+
// Dynamic import to avoid circular dependency at module init time
|
|
17
|
+
const { getExternalGatewayTools } = await import('../../services/gateway/tool-list-generator.js');
|
|
18
|
+
const gatewayTools = getExternalGatewayTools();
|
|
33
19
|
const query = q?.toLowerCase() || '';
|
|
34
20
|
// Filter by search query
|
|
35
|
-
const queryMatched =
|
|
21
|
+
const queryMatched = gatewayTools.filter((tool) => {
|
|
36
22
|
if (!query)
|
|
37
23
|
return true;
|
|
24
|
+
// Match against tool name (gateway-resolved name)
|
|
38
25
|
const nameMatch = tool.name.toLowerCase().includes(query);
|
|
26
|
+
// Match against description (contains "[From serverName] original description")
|
|
39
27
|
const descMatch = tool.description?.toLowerCase().includes(query);
|
|
40
28
|
return nameMatch || descMatch;
|
|
41
29
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
results: results.map((tool) => ({
|
|
30
|
+
const mappedResults = queryMatched.map((tool) => {
|
|
31
|
+
// Extract serverName from description format "[From serverName] ..."
|
|
32
|
+
const descMatch = tool.description?.match(/^\[From\s+(.+?)\]/);
|
|
33
|
+
const serverName = descMatch ? descMatch[1] : MCP_HUB_LITE_SERVER;
|
|
34
|
+
return {
|
|
48
35
|
name: tool.name,
|
|
49
36
|
description: tool.description,
|
|
50
|
-
serverName
|
|
51
|
-
|
|
37
|
+
serverName,
|
|
38
|
+
inputSchema: tool.inputSchema
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
const results = mappedResults.slice(0, limit);
|
|
42
|
+
return {
|
|
43
|
+
results,
|
|
52
44
|
pagination: {
|
|
53
|
-
total:
|
|
45
|
+
total: mappedResults.length,
|
|
54
46
|
limit,
|
|
55
47
|
returned: results.length
|
|
56
48
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { hubManager } from '../../services/hub-manager.service.js';
|
|
3
3
|
import { ServerTemplateSchema, ServerInstanceUpdateSchema } from '../../config/config.schema.js';
|
|
4
|
-
import { logger } from '../../utils/logger.js';
|
|
4
|
+
import { logger } from '../../utils/logger/index.js';
|
|
5
5
|
import { LOG_MODULES } from '../../utils/logger/log-modules.js';
|
|
6
6
|
import { stringifyForLogging, getApiDebugSetting } from '../../utils/json-utils.js';
|
|
7
7
|
/**
|
|
@@ -1,29 +1,3 @@
|
|
|
1
1
|
import { FastifyInstance } from 'fastify';
|
|
2
|
-
|
|
3
|
-
* Session Management API Routes
|
|
4
|
-
*
|
|
5
|
-
* Provides comprehensive session management endpoints for the MCP Hub Lite system's persistent session storage.
|
|
6
|
-
* This module enables administrators and clients to monitor, inspect, and manage active and persisted sessions
|
|
7
|
-
* that maintain client connection state across service restarts.
|
|
8
|
-
*
|
|
9
|
-
* Sessions store critical client context including connection metadata, working directories, project information,
|
|
10
|
-
* and other state that enables seamless reconnection and continuity of operations. The session persistence
|
|
11
|
-
* feature ensures that client connections can be restored even after service interruptions.
|
|
12
|
-
*
|
|
13
|
-
* Key features include:
|
|
14
|
-
* - Listing all persisted sessions with metadata
|
|
15
|
-
* - Detailed session inspection by session ID
|
|
16
|
-
* - Session deletion for cleanup and maintenance
|
|
17
|
-
* - Integration with the MCP session manager for consistency
|
|
18
|
-
*
|
|
19
|
-
* @param fastify - The Fastify instance to register routes on
|
|
20
|
-
* @returns Promise that resolves when all routes are registered
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```typescript
|
|
24
|
-
* // Register session management routes
|
|
25
|
-
* await webSessionRoutes(app);
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
export declare function webSessionRoutes(fastify: FastifyInstance): Promise<void>;
|
|
2
|
+
export declare function webSessionsRoutes(fastify: FastifyInstance): Promise<void>;
|
|
29
3
|
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK1C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAU/D"}
|
|
@@ -1,104 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
* Provides comprehensive session management endpoints for the MCP Hub Lite system's persistent session storage.
|
|
7
|
-
* This module enables administrators and clients to monitor, inspect, and manage active and persisted sessions
|
|
8
|
-
* that maintain client connection state across service restarts.
|
|
9
|
-
*
|
|
10
|
-
* Sessions store critical client context including connection metadata, working directories, project information,
|
|
11
|
-
* and other state that enables seamless reconnection and continuity of operations. The session persistence
|
|
12
|
-
* feature ensures that client connections can be restored even after service interruptions.
|
|
13
|
-
*
|
|
14
|
-
* Key features include:
|
|
15
|
-
* - Listing all persisted sessions with metadata
|
|
16
|
-
* - Detailed session inspection by session ID
|
|
17
|
-
* - Session deletion for cleanup and maintenance
|
|
18
|
-
* - Integration with the MCP session manager for consistency
|
|
19
|
-
*
|
|
20
|
-
* @param fastify - The Fastify instance to register routes on
|
|
21
|
-
* @returns Promise that resolves when all routes are registered
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* // Register session management routes
|
|
26
|
-
* await webSessionRoutes(app);
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export async function webSessionRoutes(fastify) {
|
|
30
|
-
/**
|
|
31
|
-
* List all persisted sessions
|
|
32
|
-
*/
|
|
1
|
+
import { logger } from '../../utils/logger/index.js';
|
|
2
|
+
import { LOG_MODULES } from '../../utils/logger/log-modules.js';
|
|
3
|
+
import { sessionManager } from '../../services/gateway/session-manager.js';
|
|
4
|
+
export async function webSessionsRoutes(fastify) {
|
|
33
5
|
fastify.get('/web/sessions', async (_request, reply) => {
|
|
34
6
|
try {
|
|
35
|
-
const sessions =
|
|
36
|
-
return
|
|
37
|
-
success: true,
|
|
38
|
-
data: sessions,
|
|
39
|
-
count: sessions.length
|
|
40
|
-
});
|
|
7
|
+
const sessions = sessionManager.getAllSessions();
|
|
8
|
+
return { sessions };
|
|
41
9
|
}
|
|
42
10
|
catch (error) {
|
|
43
|
-
logger.error('Failed to
|
|
44
|
-
return reply.code(500).send({
|
|
45
|
-
success: false,
|
|
46
|
-
error: 'Failed to get sessions'
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
/**
|
|
51
|
-
* Get a specific session by ID
|
|
52
|
-
*/
|
|
53
|
-
fastify.get('/web/sessions/:sessionId', async (request, reply) => {
|
|
54
|
-
try {
|
|
55
|
-
const { sessionId } = request.params;
|
|
56
|
-
const session = mcpSessionManager.getSessionState(sessionId);
|
|
57
|
-
if (!session) {
|
|
58
|
-
return reply.code(404).send({
|
|
59
|
-
success: false,
|
|
60
|
-
error: 'Session not found'
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return reply.send({
|
|
64
|
-
success: true,
|
|
65
|
-
data: session
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
logger.error('Failed to get session:', error, LOG_MODULES.SESSION_API);
|
|
70
|
-
return reply.code(500).send({
|
|
71
|
-
success: false,
|
|
72
|
-
error: 'Failed to get session'
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
/**
|
|
77
|
-
* Delete a session
|
|
78
|
-
*/
|
|
79
|
-
fastify.delete('/web/sessions/:sessionId', async (request, reply) => {
|
|
80
|
-
try {
|
|
81
|
-
const { sessionId } = request.params;
|
|
82
|
-
logger.info(`Deleting session: ${sessionId}`, LOG_MODULES.SESSION_API);
|
|
83
|
-
const existed = await mcpSessionManager.deleteSession(sessionId);
|
|
84
|
-
if (!existed) {
|
|
85
|
-
return reply.code(404).send({
|
|
86
|
-
success: false,
|
|
87
|
-
error: 'Session not found'
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
logger.info(`Session deleted successfully: ${sessionId}`, LOG_MODULES.SESSION_API);
|
|
91
|
-
return reply.send({
|
|
92
|
-
success: true,
|
|
93
|
-
message: 'Session deleted successfully'
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
logger.error('Failed to delete session:', error, LOG_MODULES.SESSION_API);
|
|
98
|
-
return reply.code(500).send({
|
|
99
|
-
success: false,
|
|
100
|
-
error: 'Failed to delete session'
|
|
101
|
-
});
|
|
11
|
+
logger.error('Failed to retrieve sessions:', error, LOG_MODULES.GATEWAY);
|
|
12
|
+
return reply.code(500).send({ error: 'Internal Server Error' });
|
|
102
13
|
}
|
|
103
14
|
});
|
|
104
15
|
}
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
import fastifyWebSocket from '@fastify/websocket';
|
|
28
28
|
import { WebSocketHandler } from './ws-handler.js';
|
|
29
29
|
import { eventBus } from '../../services/event-bus.service.js';
|
|
30
|
-
import { logger, LOG_MODULES } from '../../utils/logger.js';
|
|
30
|
+
import { logger, LOG_MODULES } from '../../utils/logger/index.js';
|
|
31
31
|
export async function webSocketRoutes(fastify) {
|
|
32
32
|
// Register WebSocket plugin
|
|
33
33
|
await fastify.register(fastifyWebSocket);
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
import { WebSocket } from 'ws';
|
|
27
27
|
import { EventTypes } from '../../services/event-bus.service.js';
|
|
28
28
|
import { logStorage } from '../../services/log-storage.service.js';
|
|
29
|
-
import { logger, LOG_MODULES } from '../../utils/logger.js';
|
|
29
|
+
import { logger, LOG_MODULES } from '../../utils/logger/index.js';
|
|
30
30
|
import { WEB_SOCKET_EVENT_TYPES } from '../../../shared/types/websocket.types.js';
|
|
31
31
|
// Event type mapping
|
|
32
32
|
const eventTypeMap = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app.ts"],"names":[],"mappings":"AAqCA,uDAAuD;AACvD,wBAAgB,kBAAkB;;;;;EAQjC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,QAAQ,mWA6J7B"}
|
package/dist/server/src/app.js
CHANGED
|
@@ -5,7 +5,8 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
import { configManager } from './config/config-manager.js';
|
|
6
6
|
import { setJsonPrettyConfigGetter } from './utils/json-utils.js';
|
|
7
7
|
import { isIpAllowed } from './utils/network-security.js';
|
|
8
|
-
import { logger, LOG_MODULES } from './utils/logger.js';
|
|
8
|
+
import { logger, LOG_MODULES } from './utils/logger/index.js';
|
|
9
|
+
import { initGlobalTransport } from './services/gateway/global-transport.js';
|
|
9
10
|
// MCP Protocol Routes
|
|
10
11
|
import { mcpGatewayRoutes } from './api/mcp/gateway.js';
|
|
11
12
|
// Web API Routes
|
|
@@ -17,6 +18,7 @@ import { configRoutes } from './api/web/config.js';
|
|
|
17
18
|
import { webLogRoutes } from './api/web/logs.js';
|
|
18
19
|
import { webHubToolsRoutes } from './api/web/hub-tools.js';
|
|
19
20
|
import { webResourceRoutes } from './api/web/resources.js';
|
|
21
|
+
import { webSessionsRoutes } from './api/web/sessions.js';
|
|
20
22
|
// WebSocket Routes
|
|
21
23
|
import { webSocketRoutes } from './api/ws/events.js';
|
|
22
24
|
// Get __dirname equivalent in ESM
|
|
@@ -153,6 +155,8 @@ export async function buildApp() {
|
|
|
153
155
|
}
|
|
154
156
|
done();
|
|
155
157
|
});
|
|
158
|
+
// Initialize singleton MCP transport before registering routes
|
|
159
|
+
await initGlobalTransport();
|
|
156
160
|
// Register API routes first (before static files)
|
|
157
161
|
fastify.register(mcpGatewayRoutes);
|
|
158
162
|
fastify.register(webServerRoutes);
|
|
@@ -163,6 +167,7 @@ export async function buildApp() {
|
|
|
163
167
|
fastify.register(webLogRoutes);
|
|
164
168
|
fastify.register(webHubToolsRoutes);
|
|
165
169
|
fastify.register(webResourceRoutes);
|
|
170
|
+
fastify.register(webSessionsRoutes);
|
|
166
171
|
fastify.register(webSocketRoutes);
|
|
167
172
|
// Serve static files from dist/client (frontend build output)
|
|
168
173
|
const clientPath = path.join(__dirname, '../../client');
|
|
@@ -136,6 +136,39 @@ function printFormattedStatus(status) {
|
|
|
136
136
|
// Then display disconnected servers
|
|
137
137
|
displayServerList(disconnectedServers, 'MCP Servers (Disconnected):', red);
|
|
138
138
|
}
|
|
139
|
+
// Sessions section
|
|
140
|
+
if (status.sessions !== undefined) {
|
|
141
|
+
console.log('');
|
|
142
|
+
console.log(`${yellow}👥 Active MCP Sessions:${reset}`);
|
|
143
|
+
console.log(`${dim}══════════════════════════════${reset}`);
|
|
144
|
+
if (status.sessions.length === 0) {
|
|
145
|
+
console.log(`${dim} No active sessions${reset}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
let maxSidLen = 'Session ID'.length;
|
|
149
|
+
let maxClientLen = 'Client'.length;
|
|
150
|
+
let maxVerLen = 'Version'.length;
|
|
151
|
+
for (const s of status.sessions) {
|
|
152
|
+
maxSidLen = Math.max(maxSidLen, (s.sessionId || '').length);
|
|
153
|
+
maxClientLen = Math.max(maxClientLen, (s.clientName || '').length);
|
|
154
|
+
const ver = s.protocolVersion || '';
|
|
155
|
+
maxVerLen = Math.max(maxVerLen, ver.length);
|
|
156
|
+
}
|
|
157
|
+
const headerSid = 'Session ID'.padEnd(maxSidLen);
|
|
158
|
+
const headerClient = 'Client'.padEnd(maxClientLen);
|
|
159
|
+
const headerVer = 'Version'.padEnd(maxVerLen);
|
|
160
|
+
console.log(`${cyan}${headerSid} ${headerClient} ${headerVer} SSE${reset}`);
|
|
161
|
+
console.log(`${dim}${'─'.repeat(maxSidLen + maxClientLen + maxVerLen + 10)}${reset}`);
|
|
162
|
+
for (const s of status.sessions) {
|
|
163
|
+
const sid = (s.sessionId || '').padEnd(maxSidLen);
|
|
164
|
+
const client = (s.clientName || '').padEnd(maxClientLen);
|
|
165
|
+
const ver = (s.protocolVersion || '').padEnd(maxVerLen);
|
|
166
|
+
const sse = s.activeSseCount.toString().padStart(3);
|
|
167
|
+
console.log(`${sid} ${client} ${ver} ${sse}`);
|
|
168
|
+
}
|
|
169
|
+
console.log(`${dim} Total: ${status.sessions.length} active session(s)${reset}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
139
172
|
// MCP Client Configuration
|
|
140
173
|
console.log('');
|
|
141
174
|
console.log(`${yellow}🔌 MCP Client Configuration:${reset}`);
|
|
@@ -145,10 +178,15 @@ function printFormattedStatus(status) {
|
|
|
145
178
|
console.log(`${dim}{${reset}`);
|
|
146
179
|
console.log(`${dim} "mcpServers": {${reset}`);
|
|
147
180
|
console.log(`${dim} "mcp-hub-lite": {${reset}`);
|
|
148
|
-
console.log(`${dim} "url": "${cyan}${mcpEndpoint}${dim}"
|
|
181
|
+
console.log(`${dim} "url": "${cyan}${mcpEndpoint}${dim}",${reset}`);
|
|
182
|
+
console.log(`${dim} "headers": {${reset}`);
|
|
183
|
+
console.log(`${dim} "x-mcp-session-mode": "${cyan}stateful${dim}"${reset}`);
|
|
184
|
+
console.log(`${dim} }${reset}`);
|
|
149
185
|
console.log(`${dim} }${reset}`);
|
|
150
186
|
console.log(`${dim} }${reset}`);
|
|
151
187
|
console.log(`${dim}}${reset}`);
|
|
188
|
+
console.log('');
|
|
189
|
+
console.log(`${dim}💡 Use ${cyan}"stateful"${dim} for session persistence / SSE, ${cyan}"stateless"${dim} for per-request mode${reset}`);
|
|
152
190
|
// Quick Commands
|
|
153
191
|
console.log('');
|
|
154
192
|
console.log(`${yellow}💡 Quick Commands:${reset}`);
|
|
@@ -3,18 +3,18 @@ import { Command } from 'commander';
|
|
|
3
3
|
* CLI command for dynamic MCP server tool operations via API.
|
|
4
4
|
*
|
|
5
5
|
* This command provides a simplified CLI interface for interacting with MCP server tools,
|
|
6
|
-
* supporting
|
|
6
|
+
* supporting six actions: list-servers, list-tools, list-tags, get-tool, call-tool, and search-tools. It wraps
|
|
7
7
|
* the HTTP API endpoints and requires the MCP Hub Lite server to be running.
|
|
8
8
|
*
|
|
9
9
|
* ## Command Format
|
|
10
10
|
*
|
|
11
11
|
* ```
|
|
12
|
-
* mcp-hub-lite tool-use <action> [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
12
|
+
* mcp-hub-lite tool-use <action> [query] [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
13
13
|
* ```
|
|
14
14
|
*
|
|
15
15
|
* Or via npm:
|
|
16
16
|
* ```
|
|
17
|
-
* npm run tool-use -- <action> [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
17
|
+
* npm run tool-use -- <action> [query] [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
18
18
|
* ```
|
|
19
19
|
*
|
|
20
20
|
* ## Supported Actions
|
|
@@ -24,6 +24,7 @@ import { Command } from 'commander';
|
|
|
24
24
|
* - `list-tags` - List all instance tags for a specific MCP server
|
|
25
25
|
* - `get-tool` - Get complete schema for a specific tool (requires --tool)
|
|
26
26
|
* - `call-tool` - Call a tool on the specified server (requires --tool)
|
|
27
|
+
* - `search-tools` - Search tools across all connected servers by name or description (requires query)
|
|
27
28
|
*
|
|
28
29
|
* ## Options
|
|
29
30
|
*
|
|
@@ -70,6 +71,9 @@ import { Command } from 'commander';
|
|
|
70
71
|
*
|
|
71
72
|
* # Multi-instance server with tags
|
|
72
73
|
* mcp-hub-lite tool-use call-tool --tool search --server baidu-search --args '{"query":"test"}' --tags '{"env":"prod"}'
|
|
74
|
+
*
|
|
75
|
+
* # Search tools across all connected servers
|
|
76
|
+
* mcp-hub-lite tool-use search-tools "weather"
|
|
73
77
|
* ```
|
|
74
78
|
*
|
|
75
79
|
* ### JSON 合并形式 (JSON Merge):
|
|
@@ -83,6 +87,9 @@ import { Command } from 'commander';
|
|
|
83
87
|
*
|
|
84
88
|
* # Equivalent to
|
|
85
89
|
* mcp-hub-lite tool-use call-tool --server baidu-search --tool search --args '{"query":"天气"}'
|
|
90
|
+
*
|
|
91
|
+
* # Search tools (JSON merge form)
|
|
92
|
+
* mcp-hub-lite tool-use search-tools --args '{"query":"weather"}'
|
|
86
93
|
* ```
|
|
87
94
|
*
|
|
88
95
|
* ## Error Handling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-use.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/tool-use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC
|
|
1
|
+
{"version":3,"file":"tool-use.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/tool-use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AACH,eAAO,MAAM,cAAc,SA2PvB,CAAC"}
|
|
@@ -4,18 +4,18 @@ import { getServerStatus } from '../server.js';
|
|
|
4
4
|
* CLI command for dynamic MCP server tool operations via API.
|
|
5
5
|
*
|
|
6
6
|
* This command provides a simplified CLI interface for interacting with MCP server tools,
|
|
7
|
-
* supporting
|
|
7
|
+
* supporting six actions: list-servers, list-tools, list-tags, get-tool, call-tool, and search-tools. It wraps
|
|
8
8
|
* the HTTP API endpoints and requires the MCP Hub Lite server to be running.
|
|
9
9
|
*
|
|
10
10
|
* ## Command Format
|
|
11
11
|
*
|
|
12
12
|
* ```
|
|
13
|
-
* mcp-hub-lite tool-use <action> [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
13
|
+
* mcp-hub-lite tool-use <action> [query] [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
14
14
|
* ```
|
|
15
15
|
*
|
|
16
16
|
* Or via npm:
|
|
17
17
|
* ```
|
|
18
|
-
* npm run tool-use -- <action> [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
18
|
+
* npm run tool-use -- <action> [query] [--server <serverName>] [--tool <toolName>] [--args <json>] [--tags <json>]
|
|
19
19
|
* ```
|
|
20
20
|
*
|
|
21
21
|
* ## Supported Actions
|
|
@@ -25,6 +25,7 @@ import { getServerStatus } from '../server.js';
|
|
|
25
25
|
* - `list-tags` - List all instance tags for a specific MCP server
|
|
26
26
|
* - `get-tool` - Get complete schema for a specific tool (requires --tool)
|
|
27
27
|
* - `call-tool` - Call a tool on the specified server (requires --tool)
|
|
28
|
+
* - `search-tools` - Search tools across all connected servers by name or description (requires query)
|
|
28
29
|
*
|
|
29
30
|
* ## Options
|
|
30
31
|
*
|
|
@@ -71,6 +72,9 @@ import { getServerStatus } from '../server.js';
|
|
|
71
72
|
*
|
|
72
73
|
* # Multi-instance server with tags
|
|
73
74
|
* mcp-hub-lite tool-use call-tool --tool search --server baidu-search --args '{"query":"test"}' --tags '{"env":"prod"}'
|
|
75
|
+
*
|
|
76
|
+
* # Search tools across all connected servers
|
|
77
|
+
* mcp-hub-lite tool-use search-tools "weather"
|
|
74
78
|
* ```
|
|
75
79
|
*
|
|
76
80
|
* ### JSON 合并形式 (JSON Merge):
|
|
@@ -84,6 +88,9 @@ import { getServerStatus } from '../server.js';
|
|
|
84
88
|
*
|
|
85
89
|
* # Equivalent to
|
|
86
90
|
* mcp-hub-lite tool-use call-tool --server baidu-search --tool search --args '{"query":"天气"}'
|
|
91
|
+
*
|
|
92
|
+
* # Search tools (JSON merge form)
|
|
93
|
+
* mcp-hub-lite tool-use search-tools --args '{"query":"weather"}'
|
|
87
94
|
* ```
|
|
88
95
|
*
|
|
89
96
|
* ## Error Handling
|
|
@@ -97,37 +104,44 @@ import { getServerStatus } from '../server.js';
|
|
|
97
104
|
* @returns {Command} The configured mcp-tool-use command instance for registration with Commander.js
|
|
98
105
|
*/
|
|
99
106
|
export const toolUseCommand = new Command('tool-use')
|
|
100
|
-
.description('Manage MCP server tools via API (list-servers, list-tools, list-tags, get-tool, call-tool)')
|
|
101
|
-
.argument('<action>', 'Action: list-servers, list-tools, list-tags, get-tool, call-tool')
|
|
107
|
+
.description('Manage MCP server tools via API (list-servers, list-tools, list-tags, get-tool, call-tool, search-tools)')
|
|
108
|
+
.argument('<action>', 'Action: list-servers, list-tools, list-tags, get-tool, call-tool, search-tools')
|
|
109
|
+
.argument('[query]', 'Search query (required for search-tools action)')
|
|
102
110
|
.option('--server <serverName>', 'Server name to target (omit or empty for system tools)')
|
|
103
111
|
.option('--tool <toolName>', 'Tool name (required for get-tool and call-tool actions)')
|
|
104
112
|
.option('--args <json>', 'JSON string of tool arguments, or combined JSON with server/tool/args fields')
|
|
105
113
|
.option('--tags <json>', 'JSON object of instance selection tags (call-tool only, for multi-instance servers)')
|
|
106
|
-
.addHelpText('after', `
|
|
107
|
-
|
|
108
|
-
Examples:
|
|
109
|
-
# List all connected servers
|
|
110
|
-
mcp-hub-lite tool-use list-servers
|
|
111
|
-
|
|
112
|
-
# List mcp-hub-lite system tools (default)
|
|
113
|
-
mcp-hub-lite tool-use list-tools
|
|
114
|
-
|
|
115
|
-
# List third-party server tools
|
|
116
|
-
mcp-hub-lite tool-use list-tools --server baidu-search
|
|
117
|
-
|
|
118
|
-
# List instance tags for a server
|
|
119
|
-
mcp-hub-lite tool-use list-tags --server chrome-devtools
|
|
120
|
-
|
|
121
|
-
# Get system tool schema
|
|
122
|
-
mcp-hub-lite tool-use get-tool --tool list_tools
|
|
123
|
-
|
|
124
|
-
# Call third-party server tool
|
|
125
|
-
mcp-hub-lite tool-use call-tool --tool search --server baidu-search --args '{"query":"天气"}'
|
|
126
|
-
|
|
127
|
-
#
|
|
128
|
-
mcp-hub-lite tool-use
|
|
114
|
+
.addHelpText('after', `
|
|
115
|
+
|
|
116
|
+
Examples:
|
|
117
|
+
# List all connected servers
|
|
118
|
+
mcp-hub-lite tool-use list-servers
|
|
119
|
+
|
|
120
|
+
# List mcp-hub-lite system tools (default)
|
|
121
|
+
mcp-hub-lite tool-use list-tools
|
|
122
|
+
|
|
123
|
+
# List third-party server tools
|
|
124
|
+
mcp-hub-lite tool-use list-tools --server baidu-search
|
|
125
|
+
|
|
126
|
+
# List instance tags for a server
|
|
127
|
+
mcp-hub-lite tool-use list-tags --server chrome-devtools
|
|
128
|
+
|
|
129
|
+
# Get system tool schema
|
|
130
|
+
mcp-hub-lite tool-use get-tool --tool list_tools
|
|
131
|
+
|
|
132
|
+
# Call third-party server tool
|
|
133
|
+
mcp-hub-lite tool-use call-tool --tool search --server baidu-search --args '{"query":"天气"}'
|
|
134
|
+
|
|
135
|
+
# Search tools across all connected servers
|
|
136
|
+
mcp-hub-lite tool-use search-tools "weather"
|
|
137
|
+
|
|
138
|
+
# Search tools (JSON merge form)
|
|
139
|
+
mcp-hub-lite tool-use search-tools --args '{"query":"weather"}'
|
|
140
|
+
|
|
141
|
+
# JSON merge form (all params in one JSON)
|
|
142
|
+
mcp-hub-lite tool-use call-tool --args '{"server":"baidu-search","tool":"search","query":"天气"}'
|
|
129
143
|
`)
|
|
130
|
-
.action(async (action, options) => {
|
|
144
|
+
.action(async (action, query, options) => {
|
|
131
145
|
try {
|
|
132
146
|
// Check if server is running and get connection info
|
|
133
147
|
const status = await getServerStatus();
|
|
@@ -231,6 +245,31 @@ Examples:
|
|
|
231
245
|
console.log(JSON.stringify(result, null, 2));
|
|
232
246
|
break;
|
|
233
247
|
}
|
|
248
|
+
case 'search-tools': {
|
|
249
|
+
let searchQuery = query;
|
|
250
|
+
if (!searchQuery && options.args) {
|
|
251
|
+
try {
|
|
252
|
+
const parsed = JSON.parse(options.args);
|
|
253
|
+
searchQuery = parsed.query || parsed.q || '';
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
// ignore parse errors, fall through to validation
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (!searchQuery || typeof searchQuery !== 'string' || searchQuery.trim().length === 0) {
|
|
260
|
+
console.error('Error: query is required for search-tools action');
|
|
261
|
+
console.error('Usage: mcp-hub-lite tool-use search-tools <query>');
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
const response = await fetch(`${baseUrl}/web/hub-tools/search?q=${encodeURIComponent(searchQuery.trim())}`, { headers: { Accept: 'application/json' } });
|
|
265
|
+
if (!response.ok) {
|
|
266
|
+
const error = await response.json().catch(() => ({ message: response.statusText }));
|
|
267
|
+
throw new Error(error.message || `API error: ${response.status}`);
|
|
268
|
+
}
|
|
269
|
+
const result = await response.json();
|
|
270
|
+
console.log(JSON.stringify(result, null, 2));
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
234
273
|
case 'call-tool': {
|
|
235
274
|
if (!effectiveTool) {
|
|
236
275
|
console.error('Error: toolName is required for call-tool action');
|
|
@@ -265,7 +304,7 @@ Examples:
|
|
|
265
304
|
}
|
|
266
305
|
default: {
|
|
267
306
|
console.error(`Unknown action: ${action}`);
|
|
268
|
-
console.error('Valid actions: list-servers, list-tools, list-tags, get-tool, call-tool');
|
|
307
|
+
console.error('Valid actions: list-servers, list-tools, list-tags, get-tool, call-tool, search-tools');
|
|
269
308
|
process.exit(1);
|
|
270
309
|
}
|
|
271
310
|
}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
/**
|
|
3
|
-
* CLI command for displaying the use guide in Markdown format.
|
|
4
|
-
*
|
|
5
|
-
* This command outputs the CLI usage guide, similar to how MCP Hub Lite
|
|
6
|
-
* provides a use-guide resource for MCP protocol usage.
|
|
7
|
-
*
|
|
8
|
-
* @returns {Command} The configured use-guide command instance for registration with Commander.js
|
|
9
|
-
*/
|
|
10
2
|
export declare const useGuideCommand: Command;
|
|
11
3
|
//# sourceMappingURL=use-guide.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-guide.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/use-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"use-guide.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/use-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,eAAO,MAAM,eAAe,SAKxB,CAAC"}
|