@loop_ouroboros/mcp-hub-lite 1.2.9 → 1.3.0
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 +33 -0
- package/dist/client/assets/{HomeView-CGezWc0j.js → HomeView-Bi2bkUKf.js} +1 -1
- package/dist/client/assets/{ResourceDetailView-CDmWGdAK.css → ResourceDetailView-BkTSg91z.css} +1 -1
- package/dist/client/assets/ResourceDetailView-DyuSovH9.js +1 -0
- package/dist/client/assets/ResourcesView-CU0VbNy5.js +1 -0
- package/dist/client/assets/ResourcesView-zgV8Nq7w.css +1 -0
- package/dist/client/assets/{ServerDashboard-g5p4VC_-.js → ServerDashboard-BGyyZAti.js} +1 -1
- package/dist/client/assets/{ServerDetail-DCQH8HIb.css → ServerDetail-CPNAFBPM.css} +1 -1
- package/dist/client/assets/ServerDetail-bcQ8BVXR.js +2 -0
- package/dist/client/assets/{ServerListView-DZsy2gaQ.js → ServerListView-yQPVJFHG.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-C8gQlxGE.js} +1 -1
- package/dist/client/assets/{SettingsView-DQSWb9xM.js → SettingsView-B1DxbFP3.js} +1 -1
- package/dist/client/assets/ToolCallDialog-BQ9UJZ_-.css +1 -0
- package/dist/client/assets/ToolCallDialog-DEapCO06.js +1 -0
- package/dist/client/assets/ToolsView-DA0u_bCw.js +1 -0
- package/dist/client/assets/ToolsView-cO61nMNr.css +1 -0
- package/dist/client/assets/{_baseClone-DsVtZfPm.js → _baseClone-B991Lvrt.js} +1 -1
- package/dist/client/assets/{el-form-item-CTsVV8sm.js → el-form-item-DfWq_kSy.js} +1 -1
- package/dist/client/assets/{el-input-Bh1VGJTU.js → el-input-5YzZrwir.js} +1 -1
- package/dist/client/assets/{el-loading-huOeK9cW.js → el-loading-DE3FcxNH.js} +1 -1
- package/dist/client/assets/{el-overlay-CR_KVhLU.js → el-overlay-BTeTueuN.js} +1 -1
- package/dist/client/assets/{el-radio-group-BSbtAW4k.js → el-radio-group-Y1E2bxIW.js} +1 -1
- package/dist/client/assets/{el-skeleton-item-BSxOLPFM.js → el-skeleton-item-DhgR50Jx.js} +1 -1
- package/dist/client/assets/{el-switch-BaQUQWTL.js → el-switch-fF--nMSD.js} +1 -1
- package/dist/client/assets/{el-tab-pane-9JxLgdS7.js → el-tab-pane-rvS_KTwP.js} +1 -1
- package/dist/client/assets/{el-table-column-Du1l9Ww3.js → el-table-column-B1O8mY47.js} +1 -1
- package/dist/client/assets/{index-BNmwPGMT.css → index-Bzz3tYbS.css} +1 -1
- package/dist/client/assets/{index-CsZoFRv1.js → index-DkqV9kH4.js} +2 -2
- package/dist/client/assets/{omit-Btci9mp3.js → omit-BIIebEYo.js} +1 -1
- package/dist/client/assets/{raf-tUu4BwZS.js → raf-Cj-gATZv.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/shared/models/constants.d.ts +3 -0
- package/dist/server/shared/models/constants.d.ts.map +1 -0
- package/dist/server/shared/models/constants.js +2 -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/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.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +23 -41
- 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/ws/events.js +1 -1
- package/dist/server/src/api/ws/ws-handler.js +1 -1
- package/dist/server/src/app.js +1 -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/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 +2 -2
- package/dist/server/src/server/runner.js +2 -2
- package/dist/server/src/server/startup.js +2 -2
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +16 -21
- 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 +1 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +29 -7
- 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/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +7 -3
- 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 +0 -21
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +15 -15
- 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 +15 -12
- 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.js +4 -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/port-checker.js +1 -1
- 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/server/runner.test.js +5 -6
- package/dist/server/tests/unit/services/gateway-logging.test.js +1 -1
- package/dist/server/tests/unit/services/hub-manager-service.test.js +4 -5
- package/dist/server/tests/unit/services/hub-tools.service.test.js +78 -2
- package/dist/server/tests/unit/utils/log-rotator.test.js +1 -15
- package/dist/server/tests/unit/utils/logger.test.js +1 -1
- 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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ac as c,bx as f,bt as s,by as a,br as l,bz as g,aj as b}from"./index-
|
|
1
|
+
import{ac as c,bx as f,bt as s,by as a,br as l,bz as g,aj as b}from"./index-DkqV9kH4.js";import{g as v,c as O,f as _,e as p}from"./_baseClone-B991Lvrt.js";var y="[object Object]",P=Function.prototype,L=Object.prototype,u=P.toString,j=L.hasOwnProperty,m=u.call(Object);function w(e){if(!c(e)||f(e)!=y)return!1;var r=v(e);if(r===null)return!0;var t=j.call(r,"constructor")&&r.constructor;return typeof t=="function"&&t instanceof t&&u.call(t)==m}function C(e,r,t){var o=-1,n=e.length;r<0&&(r=-r>n?0:n+r),t=t>n?n:t,t<0&&(t+=n),n=r>t?0:t-r>>>0,r>>>=0;for(var i=Array(n);++o<n;)i[o]=e[o+r];return i}function h(e){var r=e==null?0:e.length;return r?e[r-1]:void 0}function A(e,r){return r.length<2?e:s(e,C(r,0,-1))}var S=Object.prototype,E=S.hasOwnProperty;function F(e,r){r=a(r,e);var t=-1,o=r.length;if(!o)return!0;for(;++t<o;){var n=l(r[t]);if(n==="__proto__"&&!E.call(e,"__proto__")||(n==="constructor"||n==="prototype")&&t<o-1)return!1}var i=A(e,r);return i==null||delete i[l(h(r))]}function G(e){return w(e)?void 0:e}var x=1,T=2,N=4,M=g(function(e,r){var t={};if(e==null)return t;var o=!1;r=b(r,function(i){return i=a(i,e),o||(o=i.length>1),i}),O(e,_(e),t),o&&(t=p(t,x|T|N,G));for(var n=r.length;n--;)F(t,r[n]);return t});export{w as i,M as o};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as o}from"./index-
|
|
1
|
+
import{F as o}from"./index-DkqV9kH4.js";const e=i=>o?window.requestAnimationFrame(i):setTimeout(i,16),r=i=>o?window.cancelAnimationFrame(i):clearTimeout(i);export{r as c,e as r};
|
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-DkqV9kH4.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-Bzz3tYbS.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="app"></div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../shared/models/constants.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,eAAO,MAAM,mBAAmB,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../shared/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../shared/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../shared/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../shared/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Debug Response Wrapper for MCP Gateway.
|
|
3
3
|
* Wraps Fastify reply to capture and log response content in development mode.
|
|
4
4
|
*/
|
|
5
|
-
import { logger, LOG_MODULES, isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent } from '../../utils/logger.js';
|
|
5
|
+
import { logger, LOG_MODULES, isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent } from '../../utils/logger/index.js';
|
|
6
6
|
import { stringifyForLogging, getMcpCommDebugSetting } from '../../utils/json-utils.js';
|
|
7
7
|
/**
|
|
8
8
|
* Wraps Fastify reply to capture and log response content in development mode.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAU7E;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAU7E;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,iBAwG9D"}
|
|
@@ -12,34 +12,33 @@ import { createSessionTransport } from '../../services/gateway/global-transport.
|
|
|
12
12
|
* @param fastify - Fastify instance to register routes on
|
|
13
13
|
*/
|
|
14
14
|
export async function mcpGatewayRoutes(fastify) {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// GET /mcp — not used, this is a Streamable HTTP server
|
|
16
|
+
fastify.get('/mcp', (_request, reply) => {
|
|
17
|
+
reply.code(405).send({
|
|
18
|
+
jsonrpc: '2.0',
|
|
19
|
+
error: {
|
|
20
|
+
code: -32000,
|
|
21
|
+
message: 'GET /mcp is not supported. This is a Streamable HTTP MCP server — send POST /mcp with JSON-RPC requests directly.'
|
|
22
|
+
},
|
|
23
|
+
id: null
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
// POST /mcp — JSON-RPC request handling
|
|
27
|
+
const handlePostRequest = async (request, reply) => {
|
|
17
28
|
if (getMcpCommDebugSetting()) {
|
|
18
29
|
let initialLogMsg = `MCP Gateway ${request.method} ${request.url}`;
|
|
19
|
-
|
|
20
|
-
initialLogMsg += `\n Request headers: ${stringifyForLogging(request.headers)}`;
|
|
30
|
+
initialLogMsg += `\nRequest headers: ${stringifyForLogging(request.headers)}`;
|
|
21
31
|
if (request.body) {
|
|
22
32
|
try {
|
|
23
33
|
const preview = stringifyForLogging(request.body);
|
|
24
|
-
initialLogMsg += `\
|
|
34
|
+
initialLogMsg += `\nBody: ${preview}`;
|
|
25
35
|
}
|
|
26
36
|
catch {
|
|
27
|
-
initialLogMsg += `\
|
|
37
|
+
initialLogMsg += `\nBody: [Unserializable]`;
|
|
28
38
|
}
|
|
29
39
|
}
|
|
30
40
|
logger.debug(initialLogMsg, LOG_MODULES.COMMUNICATION);
|
|
31
41
|
}
|
|
32
|
-
// Reject GET requests without Accept: text/event-stream (health-check hook compatibility)
|
|
33
|
-
const accept = request.raw.headers['accept'] || '';
|
|
34
|
-
if (request.method === 'GET' && !accept.includes('text/event-stream')) {
|
|
35
|
-
reply.raw.writeHead(400, { 'Content-Type': 'application/json' });
|
|
36
|
-
reply.raw.end(JSON.stringify({
|
|
37
|
-
jsonrpc: '2.0',
|
|
38
|
-
error: { code: -32000, message: 'Bad Request: Accept: text/event-stream required' },
|
|
39
|
-
id: null
|
|
40
|
-
}));
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
42
|
reply.header('Content-Type', 'application/json');
|
|
44
43
|
wrapReplyForDebug(reply, '');
|
|
45
44
|
reply.hijack();
|
|
@@ -58,8 +57,6 @@ export async function mcpGatewayRoutes(fastify) {
|
|
|
58
57
|
}
|
|
59
58
|
}
|
|
60
59
|
finally {
|
|
61
|
-
// Resources will be automatically cleaned up by garbage collection
|
|
62
|
-
// since transport and server are local to this request scope
|
|
63
60
|
if (getGatewayDebugSetting()) {
|
|
64
61
|
logger.debug(`Session transport request completed, resources will be GC'd`, LOG_MODULES.GATEWAY);
|
|
65
62
|
}
|
|
@@ -70,7 +67,7 @@ export async function mcpGatewayRoutes(fastify) {
|
|
|
70
67
|
const errorStack = error instanceof Error ? error.stack : 'No stack available';
|
|
71
68
|
logger.error(`Error handling MCP request: ${errorMessage}`, LOG_MODULES.GATEWAY);
|
|
72
69
|
logger.error(`Full error stack: ${errorStack}`, LOG_MODULES.GATEWAY);
|
|
73
|
-
logger.error(`Request body that caused error: ${
|
|
70
|
+
logger.error(`Request body that caused error: ${stringifyForLogging(request.body)}`, LOG_MODULES.GATEWAY);
|
|
74
71
|
if (!reply.raw.headersSent) {
|
|
75
72
|
reply.raw.writeHead(500, { 'Content-Type': 'application/json' });
|
|
76
73
|
reply.raw.end(JSON.stringify({
|
|
@@ -84,28 +81,13 @@ export async function mcpGatewayRoutes(fastify) {
|
|
|
84
81
|
}
|
|
85
82
|
}
|
|
86
83
|
};
|
|
87
|
-
|
|
88
|
-
fastify.all('/mcp', {
|
|
84
|
+
fastify.post('/mcp', {
|
|
89
85
|
bodyLimit: 10 * 1024 * 1024, // 10MB limit
|
|
90
|
-
|
|
91
|
-
// Ensure we don't parse the body for SSE (GET) requests
|
|
92
|
-
if (request.method === 'GET') {
|
|
93
|
-
request.body = null;
|
|
94
|
-
}
|
|
95
|
-
done();
|
|
96
|
-
},
|
|
97
|
-
handler: handleMcpRequest
|
|
86
|
+
handler: handlePostRequest
|
|
98
87
|
});
|
|
99
|
-
//
|
|
100
|
-
fastify.
|
|
101
|
-
bodyLimit: 10 * 1024 * 1024,
|
|
102
|
-
|
|
103
|
-
// Ensure we don't parse the body for SSE (GET) requests
|
|
104
|
-
if (request.method === 'GET') {
|
|
105
|
-
request.body = null;
|
|
106
|
-
}
|
|
107
|
-
done();
|
|
108
|
-
},
|
|
109
|
-
handler: handleMcpRequest
|
|
88
|
+
// Subpath fallback
|
|
89
|
+
fastify.post('/mcp/*', {
|
|
90
|
+
bodyLimit: 10 * 1024 * 1024,
|
|
91
|
+
handler: handlePostRequest
|
|
110
92
|
});
|
|
111
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-tools.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/hub-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqB1C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"hub-tools.d.ts","sourceRoot":"","sources":["../../../../../src/api/web/hub-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqB1C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAmL/D"}
|
|
@@ -166,4 +166,15 @@ export async function webHubToolsRoutes(fastify) {
|
|
|
166
166
|
const allTools = await hubToolsService.listAllTools();
|
|
167
167
|
return allTools;
|
|
168
168
|
});
|
|
169
|
+
// GET /web/hub-tools/search - Search tools across all connected servers
|
|
170
|
+
fastify.get('/web/hub-tools/search', async (request, reply) => {
|
|
171
|
+
const { q } = request.query;
|
|
172
|
+
if (!q || typeof q !== 'string' || q.trim().length === 0) {
|
|
173
|
+
return reply.code(400).send({
|
|
174
|
+
error: 'Bad Request',
|
|
175
|
+
message: 'Query parameter "q" is required'
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return hubToolsService.searchTools(q.trim());
|
|
179
|
+
});
|
|
169
180
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { hubManager } from '../../services/hub-manager.service.js';
|
|
2
|
-
import { mcpConnectionManager } from '../../services/
|
|
3
|
-
import { logger } from '../../utils/logger.js';
|
|
2
|
+
import { mcpConnectionManager } from '../../services/connection/index.js';
|
|
3
|
+
import { logger } from '../../utils/logger/index.js';
|
|
4
4
|
import { LOG_MODULES } from '../../utils/logger/log-modules.js';
|
|
5
5
|
import { resolveInstanceConfig } from '../../config/config-migrator.js';
|
|
6
6
|
/**
|
|
@@ -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
|
/**
|
|
@@ -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 = {
|
package/dist/server/src/app.js
CHANGED
|
@@ -5,7 +5,7 @@ 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
9
|
// MCP Protocol Routes
|
|
10
10
|
import { mcpGatewayRoutes } from './api/mcp/gateway.js';
|
|
11
11
|
// Web API Routes
|
|
@@ -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
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Configuration change logging utilities.
|
|
3
3
|
* Handles comparison and logging of configuration changes.
|
|
4
4
|
*/
|
|
5
|
-
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
5
|
+
import { logger, LOG_MODULES } from '../utils/logger/index.js';
|
|
6
6
|
/**
|
|
7
7
|
* Sensitive KEY patterns (case-insensitive).
|
|
8
8
|
* Fields whose key contains any of these patterns will have their values masked.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Supports automatic migration from v1.0 to v1.1.
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'fs';
|
|
7
|
-
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
7
|
+
import { logger, LOG_MODULES } from '../utils/logger/index.js';
|
|
8
8
|
import { SystemConfigSchema, isLegacyV1Config } from './config.schema.js';
|
|
9
9
|
import { migrateConfig } from './config-migrator.js';
|
|
10
10
|
import { convertHttpToStreamableHttp } from './type-converter.js';
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import path from 'path';
|
|
31
31
|
import os from 'os';
|
|
32
|
-
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
32
|
+
import { logger, LOG_MODULES } from '../utils/logger/index.js';
|
|
33
33
|
import { SystemConfigSchema, ServerInstanceSchema, ServerConfigSchema } from './config.schema.js';
|
|
34
34
|
import { loadConfig } from './config-loader.js';
|
|
35
35
|
import { saveConfig } from './config-saver.js';
|