@google/gemini-cli-core 0.1.12-nightly.250714.b018e2d3 → 0.1.13
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/README.md +8 -2
- package/dist/google-gemini-cli-core-0.1.12.tgz +0 -0
- package/dist/src/code_assist/oauth2.js +39 -5
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +8 -3
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.test.js +10 -2
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/config/config.d.ts +28 -5
- package/dist/src/config/config.js +34 -18
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +28 -3
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/client.d.ts +3 -1
- package/dist/src/core/client.js +38 -1
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +94 -37
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +2 -1
- package/dist/src/core/contentGenerator.js +4 -3
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +12 -5
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +14 -1
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +84 -2
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/modelCheck.d.ts +1 -1
- package/dist/src/core/modelCheck.js +10 -3
- package/dist/src/core/modelCheck.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +3 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +6 -2
- package/dist/src/core/turn.js +1 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.js +8 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +142 -0
- package/dist/src/mcp/oauth-provider.js +446 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
- package/dist/src/mcp/oauth-provider.test.js +520 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
- package/dist/src/mcp/oauth-token-storage.js +149 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/oauth-token-storage.test.js +205 -0
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
- package/dist/src/mcp/oauth-utils.d.ts +109 -0
- package/dist/src/mcp/oauth-utils.js +183 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -0
- package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
- package/dist/src/mcp/oauth-utils.test.js +144 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -0
- package/dist/src/services/gitService.js +1 -5
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +1 -6
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/ideContext.d.ts +126 -0
- package/dist/src/services/ideContext.js +98 -0
- package/dist/src/services/ideContext.js.map +1 -0
- package/dist/src/services/ideContext.test.d.ts +6 -0
- package/dist/src/services/ideContext.test.js +111 -0
- package/dist/src/services/ideContext.test.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +51 -0
- package/dist/src/services/loopDetectionService.js +232 -0
- package/dist/src/services/loopDetectionService.js.map +1 -0
- package/dist/src/services/loopDetectionService.test.d.ts +6 -0
- package/dist/src/services/loopDetectionService.test.js +339 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +54 -4
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +9 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
- package/dist/src/telemetry/integration.test.circular.js +53 -0
- package/dist/src/telemetry/integration.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +17 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.circular.js +100 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +12 -1
- package/dist/src/telemetry/types.js +16 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
- package/dist/src/telemetry/uiTelemetry.js +7 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +92 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +7 -12
- package/dist/src/tools/edit.js +24 -28
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -14
- package/dist/src/tools/glob.js +13 -36
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +4 -3
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +3 -6
- package/dist/src/tools/grep.js +12 -18
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +4 -1
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +1 -12
- package/dist/src/tools/ls.js +8 -30
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +55 -1
- package/dist/src/tools/mcp-client.js +165 -140
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +127 -624
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +11 -5
- package/dist/src/tools/mcp-tool.js +33 -9
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +40 -24
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.js +2 -2
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +3 -3
- package/dist/src/tools/read-file.js +10 -10
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +2 -1
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +1 -7
- package/dist/src/tools/read-many-files.js +12 -21
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +2 -1
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.js +11 -4
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +60 -0
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +0 -1
- package/dist/src/tools/tool-registry.js +12 -9
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +109 -38
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +37 -2
- package/dist/src/tools/tools.js +25 -2
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +7 -2
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +1 -0
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.js +2 -2
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +0 -8
- package/dist/src/tools/write-file.js +14 -23
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/utils/browser.d.ts +13 -0
- package/dist/src/utils/browser.js +49 -0
- package/dist/src/utils/browser.js.map +1 -0
- package/dist/src/utils/errors.js +4 -4
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/fileUtils.js +2 -2
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.js +2 -9
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/retry.d.ts +6 -0
- package/dist/src/utils/retry.js +1 -1
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/safeJsonStringify.d.ts +13 -0
- package/dist/src/utils/safeJsonStringify.js +25 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
- package/dist/src/utils/safeJsonStringify.test.js +61 -0
- package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
- package/dist/src/utils/summarizer.d.ts +1 -1
- package/dist/src/utils/summarizer.js +10 -9
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.test.js","sourceRoot":"","sources":["../../../src/tools/grep.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAkB,MAAM,WAAW,CAAC;AACrD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"grep.test.js","sourceRoot":"","sources":["../../../src/tools/grep.test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tools/ls.d.ts
CHANGED
|
@@ -51,20 +51,9 @@ export interface FileEntry {
|
|
|
51
51
|
* Implementation of the LS tool logic
|
|
52
52
|
*/
|
|
53
53
|
export declare class LSTool extends BaseTool<LSToolParams, ToolResult> {
|
|
54
|
-
private rootDirectory;
|
|
55
54
|
private config;
|
|
56
55
|
static readonly Name = "list_directory";
|
|
57
|
-
|
|
58
|
-
* Creates a new instance of the LSLogic
|
|
59
|
-
* @param rootDirectory Root directory to ground this tool in. All operations will be restricted to this directory.
|
|
60
|
-
*/
|
|
61
|
-
constructor(rootDirectory: string, config: Config);
|
|
62
|
-
/**
|
|
63
|
-
* Checks if a path is within the root directory
|
|
64
|
-
* @param dirpath The path to check
|
|
65
|
-
* @returns True if the path is within the root directory, false otherwise
|
|
66
|
-
*/
|
|
67
|
-
private isWithinRoot;
|
|
56
|
+
constructor(config: Config);
|
|
68
57
|
/**
|
|
69
58
|
* Validates the parameters for the tool
|
|
70
59
|
* @param params Parameters to validate
|
package/dist/src/tools/ls.js
CHANGED
|
@@ -5,23 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import fs from 'fs';
|
|
7
7
|
import path from 'path';
|
|
8
|
-
import { BaseTool } from './tools.js';
|
|
8
|
+
import { BaseTool, Icon } from './tools.js';
|
|
9
9
|
import { Type } from '@google/genai';
|
|
10
10
|
import { SchemaValidator } from '../utils/schemaValidator.js';
|
|
11
11
|
import { makeRelative, shortenPath } from '../utils/paths.js';
|
|
12
|
+
import { isWithinRoot } from '../utils/fileUtils.js';
|
|
12
13
|
/**
|
|
13
14
|
* Implementation of the LS tool logic
|
|
14
15
|
*/
|
|
15
16
|
export class LSTool extends BaseTool {
|
|
16
|
-
rootDirectory;
|
|
17
17
|
config;
|
|
18
18
|
static Name = 'list_directory';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* @param rootDirectory Root directory to ground this tool in. All operations will be restricted to this directory.
|
|
22
|
-
*/
|
|
23
|
-
constructor(rootDirectory, config) {
|
|
24
|
-
super(LSTool.Name, 'ReadFolder', 'Lists the names of files and subdirectories directly within a specified directory path. Can optionally ignore entries matching provided glob patterns.', {
|
|
19
|
+
constructor(config) {
|
|
20
|
+
super(LSTool.Name, 'ReadFolder', 'Lists the names of files and subdirectories directly within a specified directory path. Can optionally ignore entries matching provided glob patterns.', Icon.Folder, {
|
|
25
21
|
properties: {
|
|
26
22
|
path: {
|
|
27
23
|
description: 'The absolute path to the directory to list (must be absolute, not relative)',
|
|
@@ -42,25 +38,7 @@ export class LSTool extends BaseTool {
|
|
|
42
38
|
required: ['path'],
|
|
43
39
|
type: Type.OBJECT,
|
|
44
40
|
});
|
|
45
|
-
this.rootDirectory = rootDirectory;
|
|
46
41
|
this.config = config;
|
|
47
|
-
// Set the root directory
|
|
48
|
-
this.rootDirectory = path.resolve(rootDirectory);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Checks if a path is within the root directory
|
|
52
|
-
* @param dirpath The path to check
|
|
53
|
-
* @returns True if the path is within the root directory, false otherwise
|
|
54
|
-
*/
|
|
55
|
-
isWithinRoot(dirpath) {
|
|
56
|
-
const normalizedPath = path.normalize(dirpath);
|
|
57
|
-
const normalizedRoot = path.normalize(this.rootDirectory);
|
|
58
|
-
// Ensure the normalizedRoot ends with a path separator for proper path comparison
|
|
59
|
-
const rootWithSep = normalizedRoot.endsWith(path.sep)
|
|
60
|
-
? normalizedRoot
|
|
61
|
-
: normalizedRoot + path.sep;
|
|
62
|
-
return (normalizedPath === normalizedRoot ||
|
|
63
|
-
normalizedPath.startsWith(rootWithSep));
|
|
64
42
|
}
|
|
65
43
|
/**
|
|
66
44
|
* Validates the parameters for the tool
|
|
@@ -75,8 +53,8 @@ export class LSTool extends BaseTool {
|
|
|
75
53
|
if (!path.isAbsolute(params.path)) {
|
|
76
54
|
return `Path must be absolute: ${params.path}`;
|
|
77
55
|
}
|
|
78
|
-
if (!
|
|
79
|
-
return `Path must be within the root directory (${this.
|
|
56
|
+
if (!isWithinRoot(params.path, this.config.getTargetDir())) {
|
|
57
|
+
return `Path must be within the root directory (${this.config.getTargetDir()}): ${params.path}`;
|
|
80
58
|
}
|
|
81
59
|
return null;
|
|
82
60
|
}
|
|
@@ -109,7 +87,7 @@ export class LSTool extends BaseTool {
|
|
|
109
87
|
* @returns A string describing the file being read
|
|
110
88
|
*/
|
|
111
89
|
getDescription(params) {
|
|
112
|
-
const relativePath = makeRelative(params.path, this.
|
|
90
|
+
const relativePath = makeRelative(params.path, this.config.getTargetDir());
|
|
113
91
|
return shortenPath(relativePath);
|
|
114
92
|
}
|
|
115
93
|
// Helper for consistent error formatting
|
|
@@ -159,7 +137,7 @@ export class LSTool extends BaseTool {
|
|
|
159
137
|
continue;
|
|
160
138
|
}
|
|
161
139
|
const fullPath = path.join(params.path, file);
|
|
162
|
-
const relativePath = path.relative(this.
|
|
140
|
+
const relativePath = path.relative(this.config.getTargetDir(), fullPath);
|
|
163
141
|
// Check if this file should be git-ignored (only in git repositories)
|
|
164
142
|
if (respectGitIgnore &&
|
|
165
143
|
fileDiscovery.shouldGitIgnoreFile(relativePath)) {
|
package/dist/src/tools/ls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/tools/ls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/tools/ls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAoDrD;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,QAAkC;IAGxC;IAFpB,MAAM,CAAU,IAAI,GAAG,gBAAgB,CAAC;IAExC,YAAoB,MAAc;QAChC,KAAK,CACH,MAAM,CAAC,IAAI,EACX,YAAY,EACZ,wJAAwJ,EACxJ,IAAI,CAAC,MAAM,EACX;YACE,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,WAAW,EACT,6EAA6E;oBAC/E,IAAI,EAAE,IAAI,CAAC,MAAM;iBAClB;gBACD,MAAM,EAAE;oBACN,WAAW,EAAE,iCAAiC;oBAC9C,KAAK,EAAE;wBACL,IAAI,EAAE,IAAI,CAAC,MAAM;qBAClB;oBACD,IAAI,EAAE,IAAI,CAAC,KAAK;iBACjB;gBACD,kBAAkB,EAAE;oBAClB,WAAW,EACT,4HAA4H;oBAC9H,IAAI,EAAE,IAAI,CAAC,OAAO;iBACnB;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,IAAI,CAAC,MAAM;SAClB,CACF,CAAC;QA7BgB,WAAM,GAAN,MAAM,CAAQ;IA8BlC,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAoB;QACrC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACxE,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,0BAA0B,MAAM,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;YAC3D,OAAO,2CAA2C,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAClG,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,QAAgB,EAAE,QAAmB;QACxD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,iCAAiC;YACjC,MAAM,YAAY,GAAG,OAAO;iBACzB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;iBACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;iBACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,MAAoB;QACjC,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3E,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,yCAAyC;IACjC,WAAW,CAAC,UAAkB,EAAE,aAAqB;QAC3D,OAAO;YACL,UAAU;YACV,2CAA2C;YAC3C,aAAa,EAAE,UAAU,aAAa,EAAE;SACzC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CACX,MAAoB,EACpB,OAAoB;QAEpB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,WAAW,CACrB,+CAA+C,eAAe,EAAE,EAChE,yBAAyB,CAC1B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,wEAAwE;gBACxE,mDAAmD;gBACnD,OAAO,IAAI,CAAC,WAAW,CACrB,+CAA+C,MAAM,CAAC,IAAI,EAAE,EAC5D,sCAAsC,CACvC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,WAAW,CACrB,mCAAmC,MAAM,CAAC,IAAI,EAAE,EAChD,0BAA0B,CAC3B,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1C,yCAAyC;YACzC,MAAM,gBAAgB,GACpB,MAAM,CAAC,kBAAkB;gBACzB,IAAI,CAAC,MAAM,CAAC,gCAAgC,EAAE,CAAC;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAEnD,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,IAAI,eAAe,GAAG,CAAC,CAAC;YAExB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,mDAAmD;gBACnD,OAAO;oBACL,UAAU,EAAE,aAAa,MAAM,CAAC,IAAI,YAAY;oBAChD,aAAa,EAAE,qBAAqB;iBACrC,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3C,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAC1B,QAAQ,CACT,CAAC;gBAEF,sEAAsE;gBACtE,IACE,gBAAgB;oBAChB,aAAa,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAC/C,CAAC;oBACD,eAAe,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACpC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;oBAClC,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,KAAK;wBAClB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;wBAC5B,YAAY,EAAE,KAAK,CAAC,KAAK;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,wDAAwD;oBACxD,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YAED,wDAAwD;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpB,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,WAAW;oBAAE,OAAO,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW;oBAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,mCAAmC;YACnC,MAAM,gBAAgB,GAAG,OAAO;iBAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;iBACnE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,IAAI,aAAa,GAAG,yBAAyB,MAAM,CAAC,IAAI,MAAM,gBAAgB,EAAE,CAAC;YACjF,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,aAAa,IAAI,QAAQ,eAAe,0BAA0B,CAAC;YACrE,CAAC;YAED,IAAI,cAAc,GAAG,UAAU,OAAO,CAAC,MAAM,WAAW,CAAC;YACzD,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,cAAc,IAAI,KAAK,eAAe,eAAe,CAAC;YACxD,CAAC;YAED,OAAO;gBACL,UAAU,EAAE,aAAa;gBACzB,aAAa,EAAE,cAAc;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtG,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;QACjE,CAAC;IACH,CAAC"}
|
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
7
|
+
import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
6
8
|
import { MCPServerConfig } from '../config/config.js';
|
|
9
|
+
import { DiscoveredMCPTool } from './mcp-tool.js';
|
|
10
|
+
import { FunctionDeclaration } from '@google/genai';
|
|
7
11
|
import { ToolRegistry } from './tool-registry.js';
|
|
8
12
|
export declare const MCP_DEFAULT_TIMEOUT_MSEC: number;
|
|
9
13
|
/**
|
|
@@ -52,5 +56,55 @@ export declare function getAllMCPServerStatuses(): Map<string, MCPServerStatus>;
|
|
|
52
56
|
* Get the current MCP discovery state
|
|
53
57
|
*/
|
|
54
58
|
export declare function getMCPDiscoveryState(): MCPDiscoveryState;
|
|
55
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Discovers tools from all configured MCP servers and registers them with the tool registry.
|
|
61
|
+
* It orchestrates the connection and discovery process for each server defined in the
|
|
62
|
+
* configuration, as well as any server specified via a command-line argument.
|
|
63
|
+
*
|
|
64
|
+
* @param mcpServers A record of named MCP server configurations.
|
|
65
|
+
* @param mcpServerCommand An optional command string for a dynamically specified MCP server.
|
|
66
|
+
* @param toolRegistry The central registry where discovered tools will be registered.
|
|
67
|
+
* @returns A promise that resolves when the discovery process has been attempted for all servers.
|
|
68
|
+
*/
|
|
69
|
+
export declare function discoverMcpTools(mcpServers: Record<string, MCPServerConfig>, mcpServerCommand: string | undefined, toolRegistry: ToolRegistry, debugMode: boolean): Promise<void>;
|
|
70
|
+
/** Visible for Testing */
|
|
71
|
+
export declare function populateMcpServerCommand(mcpServers: Record<string, MCPServerConfig>, mcpServerCommand: string | undefined): Record<string, MCPServerConfig>;
|
|
72
|
+
/**
|
|
73
|
+
* Connects to an MCP server and discovers available tools, registering them with the tool registry.
|
|
74
|
+
* This function handles the complete lifecycle of connecting to a server, discovering tools,
|
|
75
|
+
* and cleaning up resources if no tools are found.
|
|
76
|
+
*
|
|
77
|
+
* @param mcpServerName The name identifier for this MCP server
|
|
78
|
+
* @param mcpServerConfig Configuration object containing connection details
|
|
79
|
+
* @param toolRegistry The registry to register discovered tools with
|
|
80
|
+
* @returns Promise that resolves when discovery is complete
|
|
81
|
+
*/
|
|
82
|
+
export declare function connectAndDiscover(mcpServerName: string, mcpServerConfig: MCPServerConfig, toolRegistry: ToolRegistry, debugMode: boolean): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Discovers and sanitizes tools from a connected MCP client.
|
|
85
|
+
* It retrieves function declarations from the client, filters out disabled tools,
|
|
86
|
+
* generates valid names for them, and wraps them in `DiscoveredMCPTool` instances.
|
|
87
|
+
*
|
|
88
|
+
* @param mcpServerName The name of the MCP server.
|
|
89
|
+
* @param mcpServerConfig The configuration for the MCP server.
|
|
90
|
+
* @param mcpClient The active MCP client instance.
|
|
91
|
+
* @returns A promise that resolves to an array of discovered and enabled tools.
|
|
92
|
+
* @throws An error if no enabled tools are found or if the server provides invalid function declarations.
|
|
93
|
+
*/
|
|
94
|
+
export declare function discoverTools(mcpServerName: string, mcpServerConfig: MCPServerConfig, mcpClient: Client): Promise<DiscoveredMCPTool[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Creates and connects an MCP client to a server based on the provided configuration.
|
|
97
|
+
* It determines the appropriate transport (Stdio, SSE, or Streamable HTTP) and
|
|
98
|
+
* establishes a connection. It also applies a patch to handle request timeouts.
|
|
99
|
+
*
|
|
100
|
+
* @param mcpServerName The name of the MCP server, used for logging and identification.
|
|
101
|
+
* @param mcpServerConfig The configuration specifying how to connect to the server.
|
|
102
|
+
* @returns A promise that resolves to a connected MCP `Client` instance.
|
|
103
|
+
* @throws An error if the connection fails or the configuration is invalid.
|
|
104
|
+
*/
|
|
105
|
+
export declare function connectToMcpServer(mcpServerName: string, mcpServerConfig: MCPServerConfig, debugMode: boolean): Promise<Client>;
|
|
106
|
+
/** Visible for Testing */
|
|
107
|
+
export declare function createTransport(mcpServerName: string, mcpServerConfig: MCPServerConfig, debugMode: boolean): Transport;
|
|
108
|
+
/** Visible for testing */
|
|
109
|
+
export declare function isEnabled(funcDecl: FunctionDeclaration, mcpServerName: string, mcpServerConfig: MCPServerConfig): boolean;
|
|
56
110
|
export {};
|
|
@@ -9,8 +9,9 @@ import { SSEClientTransport, } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
|
9
9
|
import { StreamableHTTPClientTransport, } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
10
10
|
import { parse } from 'shell-quote';
|
|
11
11
|
import { DiscoveredMCPTool } from './mcp-tool.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { mcpToTool } from '@google/genai';
|
|
13
|
+
import { ActiveFileNotificationSchema, IDE_SERVER_NAME, ideContext, } from '../services/ideContext.js';
|
|
14
|
+
import { getErrorMessage } from '../utils/errors.js';
|
|
14
15
|
export const MCP_DEFAULT_TIMEOUT_MSEC = 10 * 60 * 1000; // default to 10 minutes
|
|
15
16
|
/**
|
|
16
17
|
* Enum representing the connection status of an MCP server
|
|
@@ -88,33 +89,43 @@ export function getAllMCPServerStatuses() {
|
|
|
88
89
|
export function getMCPDiscoveryState() {
|
|
89
90
|
return mcpDiscoveryState;
|
|
90
91
|
}
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Discovers tools from all configured MCP servers and registers them with the tool registry.
|
|
94
|
+
* It orchestrates the connection and discovery process for each server defined in the
|
|
95
|
+
* configuration, as well as any server specified via a command-line argument.
|
|
96
|
+
*
|
|
97
|
+
* @param mcpServers A record of named MCP server configurations.
|
|
98
|
+
* @param mcpServerCommand An optional command string for a dynamically specified MCP server.
|
|
99
|
+
* @param toolRegistry The central registry where discovered tools will be registered.
|
|
100
|
+
* @returns A promise that resolves when the discovery process has been attempted for all servers.
|
|
101
|
+
*/
|
|
102
|
+
export async function discoverMcpTools(mcpServers, mcpServerCommand, toolRegistry, debugMode) {
|
|
93
103
|
mcpDiscoveryState = MCPDiscoveryState.IN_PROGRESS;
|
|
94
104
|
try {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const args = parse(cmd, process.env);
|
|
98
|
-
if (args.some((arg) => typeof arg !== 'string')) {
|
|
99
|
-
throw new Error('failed to parse mcpServerCommand: ' + cmd);
|
|
100
|
-
}
|
|
101
|
-
// use generic server name 'mcp'
|
|
102
|
-
mcpServers['mcp'] = {
|
|
103
|
-
command: args[0],
|
|
104
|
-
args: args.slice(1),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
const discoveryPromises = Object.entries(mcpServers).map(([mcpServerName, mcpServerConfig]) => connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry));
|
|
105
|
+
mcpServers = populateMcpServerCommand(mcpServers, mcpServerCommand);
|
|
106
|
+
const discoveryPromises = Object.entries(mcpServers).map(([mcpServerName, mcpServerConfig]) => connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry, debugMode));
|
|
108
107
|
await Promise.all(discoveryPromises);
|
|
109
|
-
// Mark discovery as completed
|
|
110
|
-
mcpDiscoveryState = MCPDiscoveryState.COMPLETED;
|
|
111
108
|
}
|
|
112
|
-
|
|
113
|
-
// Still mark as completed even with errors
|
|
109
|
+
finally {
|
|
114
110
|
mcpDiscoveryState = MCPDiscoveryState.COMPLETED;
|
|
115
|
-
throw error;
|
|
116
111
|
}
|
|
117
112
|
}
|
|
113
|
+
/** Visible for Testing */
|
|
114
|
+
export function populateMcpServerCommand(mcpServers, mcpServerCommand) {
|
|
115
|
+
if (mcpServerCommand) {
|
|
116
|
+
const cmd = mcpServerCommand;
|
|
117
|
+
const args = parse(cmd, process.env);
|
|
118
|
+
if (args.some((arg) => typeof arg !== 'string')) {
|
|
119
|
+
throw new Error('failed to parse mcpServerCommand: ' + cmd);
|
|
120
|
+
}
|
|
121
|
+
// use generic server name 'mcp'
|
|
122
|
+
mcpServers['mcp'] = {
|
|
123
|
+
command: args[0],
|
|
124
|
+
args: args.slice(1),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return mcpServers;
|
|
128
|
+
}
|
|
118
129
|
/**
|
|
119
130
|
* Connects to an MCP server and discovers available tools, registering them with the tool registry.
|
|
120
131
|
* This function handles the complete lifecycle of connecting to a server, discovering tools,
|
|
@@ -125,46 +136,84 @@ export async function discoverMcpTools(mcpServers, mcpServerCommand, toolRegistr
|
|
|
125
136
|
* @param toolRegistry The registry to register discovered tools with
|
|
126
137
|
* @returns Promise that resolves when discovery is complete
|
|
127
138
|
*/
|
|
128
|
-
async function connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry) {
|
|
129
|
-
// Initialize the server status as connecting
|
|
139
|
+
export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry, debugMode) {
|
|
130
140
|
updateMCPServerStatus(mcpServerName, MCPServerStatus.CONNECTING);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
141
|
+
try {
|
|
142
|
+
const mcpClient = await connectToMcpServer(mcpServerName, mcpServerConfig, debugMode);
|
|
143
|
+
try {
|
|
144
|
+
updateMCPServerStatus(mcpServerName, MCPServerStatus.CONNECTED);
|
|
145
|
+
mcpClient.onerror = (error) => {
|
|
146
|
+
console.error(`MCP ERROR (${mcpServerName}):`, error.toString());
|
|
147
|
+
updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
|
|
148
|
+
if (mcpServerName === IDE_SERVER_NAME) {
|
|
149
|
+
ideContext.clearActiveFileContext();
|
|
150
|
+
}
|
|
137
151
|
};
|
|
152
|
+
if (mcpServerName === IDE_SERVER_NAME) {
|
|
153
|
+
mcpClient.setNotificationHandler(ActiveFileNotificationSchema, (notification) => {
|
|
154
|
+
ideContext.setActiveFileContext(notification.params);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const tools = await discoverTools(mcpServerName, mcpServerConfig, mcpClient);
|
|
158
|
+
for (const tool of tools) {
|
|
159
|
+
toolRegistry.registerTool(tool);
|
|
160
|
+
}
|
|
138
161
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const transportOptions = {};
|
|
143
|
-
if (mcpServerConfig.headers) {
|
|
144
|
-
transportOptions.requestInit = {
|
|
145
|
-
headers: mcpServerConfig.headers,
|
|
146
|
-
};
|
|
162
|
+
catch (error) {
|
|
163
|
+
mcpClient.close();
|
|
164
|
+
throw error;
|
|
147
165
|
}
|
|
148
|
-
transport = new SSEClientTransport(new URL(mcpServerConfig.url), transportOptions);
|
|
149
166
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
command: mcpServerConfig.command,
|
|
153
|
-
args: mcpServerConfig.args || [],
|
|
154
|
-
env: {
|
|
155
|
-
...process.env,
|
|
156
|
-
...(mcpServerConfig.env || {}),
|
|
157
|
-
},
|
|
158
|
-
cwd: mcpServerConfig.cwd,
|
|
159
|
-
stderr: 'pipe',
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
console.error(`MCP server '${mcpServerName}' has invalid configuration: missing httpUrl (for Streamable HTTP), url (for SSE), and command (for stdio). Skipping.`);
|
|
164
|
-
// Update status to disconnected
|
|
167
|
+
catch (error) {
|
|
168
|
+
console.error(`Error connecting to MCP server '${mcpServerName}': ${getErrorMessage(error)}`);
|
|
165
169
|
updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
|
|
166
|
-
return;
|
|
167
170
|
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Discovers and sanitizes tools from a connected MCP client.
|
|
174
|
+
* It retrieves function declarations from the client, filters out disabled tools,
|
|
175
|
+
* generates valid names for them, and wraps them in `DiscoveredMCPTool` instances.
|
|
176
|
+
*
|
|
177
|
+
* @param mcpServerName The name of the MCP server.
|
|
178
|
+
* @param mcpServerConfig The configuration for the MCP server.
|
|
179
|
+
* @param mcpClient The active MCP client instance.
|
|
180
|
+
* @returns A promise that resolves to an array of discovered and enabled tools.
|
|
181
|
+
* @throws An error if no enabled tools are found or if the server provides invalid function declarations.
|
|
182
|
+
*/
|
|
183
|
+
export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient) {
|
|
184
|
+
try {
|
|
185
|
+
const mcpCallableTool = mcpToTool(mcpClient);
|
|
186
|
+
const tool = await mcpCallableTool.tool();
|
|
187
|
+
if (!Array.isArray(tool.functionDeclarations)) {
|
|
188
|
+
throw new Error(`Server did not return valid function declarations.`);
|
|
189
|
+
}
|
|
190
|
+
const discoveredTools = [];
|
|
191
|
+
for (const funcDecl of tool.functionDeclarations) {
|
|
192
|
+
if (!isEnabled(funcDecl, mcpServerName, mcpServerConfig)) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
discoveredTools.push(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? '', funcDecl.parametersJsonSchema ?? { type: 'object', properties: {} }, mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC, mcpServerConfig.trust));
|
|
196
|
+
}
|
|
197
|
+
if (discoveredTools.length === 0) {
|
|
198
|
+
throw Error('No enabled tools found');
|
|
199
|
+
}
|
|
200
|
+
return discoveredTools;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
throw new Error(`Error discovering tools: ${error}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Creates and connects an MCP client to a server based on the provided configuration.
|
|
208
|
+
* It determines the appropriate transport (Stdio, SSE, or Streamable HTTP) and
|
|
209
|
+
* establishes a connection. It also applies a patch to handle request timeouts.
|
|
210
|
+
*
|
|
211
|
+
* @param mcpServerName The name of the MCP server, used for logging and identification.
|
|
212
|
+
* @param mcpServerConfig The configuration specifying how to connect to the server.
|
|
213
|
+
* @returns A promise that resolves to a connected MCP `Client` instance.
|
|
214
|
+
* @throws An error if the connection fails or the configuration is invalid.
|
|
215
|
+
*/
|
|
216
|
+
export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMode) {
|
|
168
217
|
const mcpClient = new Client({
|
|
169
218
|
name: 'gemini-cli-mcp-client',
|
|
170
219
|
version: '0.0.1',
|
|
@@ -181,11 +230,17 @@ async function connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry)
|
|
|
181
230
|
};
|
|
182
231
|
}
|
|
183
232
|
try {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
233
|
+
const transport = createTransport(mcpServerName, mcpServerConfig, debugMode);
|
|
234
|
+
try {
|
|
235
|
+
await mcpClient.connect(transport, {
|
|
236
|
+
timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
|
|
237
|
+
});
|
|
238
|
+
return mcpClient;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
await transport.close();
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
189
244
|
}
|
|
190
245
|
catch (error) {
|
|
191
246
|
// Create a safe config object that excludes sensitive information
|
|
@@ -203,92 +258,62 @@ async function connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry)
|
|
|
203
258
|
if (process.env.SANDBOX) {
|
|
204
259
|
errorString += `\nMake sure it is available in the sandbox`;
|
|
205
260
|
}
|
|
206
|
-
|
|
207
|
-
// Update status to disconnected
|
|
208
|
-
updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
|
|
209
|
-
return;
|
|
261
|
+
throw new Error(errorString);
|
|
210
262
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
console.error(`MCP server '${mcpServerName}' did not return valid tool function declarations. Skipping.`);
|
|
221
|
-
if (transport instanceof StdioClientTransport ||
|
|
222
|
-
transport instanceof SSEClientTransport ||
|
|
223
|
-
transport instanceof StreamableHTTPClientTransport) {
|
|
224
|
-
await transport.close();
|
|
225
|
-
}
|
|
226
|
-
// Update status to disconnected
|
|
227
|
-
updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
for (const funcDecl of tool.functionDeclarations) {
|
|
231
|
-
if (!funcDecl.name) {
|
|
232
|
-
console.warn(`Discovered a function declaration without a name from MCP server '${mcpServerName}'. Skipping.`);
|
|
233
|
-
continue;
|
|
234
|
-
}
|
|
235
|
-
const { includeTools, excludeTools } = mcpServerConfig;
|
|
236
|
-
const toolName = funcDecl.name;
|
|
237
|
-
let isEnabled = false;
|
|
238
|
-
if (includeTools === undefined) {
|
|
239
|
-
isEnabled = true;
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
isEnabled = includeTools.some((tool) => tool === toolName || tool.startsWith(`${toolName}(`));
|
|
243
|
-
}
|
|
244
|
-
if (excludeTools?.includes(toolName)) {
|
|
245
|
-
isEnabled = false;
|
|
246
|
-
}
|
|
247
|
-
if (!isEnabled) {
|
|
248
|
-
continue;
|
|
249
|
-
}
|
|
250
|
-
let toolNameForModel = funcDecl.name;
|
|
251
|
-
// Replace invalid characters (based on 400 error message from Gemini API) with underscores
|
|
252
|
-
toolNameForModel = toolNameForModel.replace(/[^a-zA-Z0-9_.-]/g, '_');
|
|
253
|
-
const existingTool = toolRegistry.getTool(toolNameForModel);
|
|
254
|
-
if (existingTool) {
|
|
255
|
-
toolNameForModel = mcpServerName + '__' + toolNameForModel;
|
|
256
|
-
}
|
|
257
|
-
// If longer than 63 characters, replace middle with '___'
|
|
258
|
-
// (Gemini API says max length 64, but actual limit seems to be 63)
|
|
259
|
-
if (toolNameForModel.length > 63) {
|
|
260
|
-
toolNameForModel =
|
|
261
|
-
toolNameForModel.slice(0, 28) + '___' + toolNameForModel.slice(-32);
|
|
262
|
-
}
|
|
263
|
-
sanitizeParameters(funcDecl.parameters);
|
|
264
|
-
toolRegistry.registerTool(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, toolNameForModel, funcDecl.description ?? '', funcDecl.parameters ?? { type: Type.OBJECT, properties: {} }, funcDecl.name, mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC, mcpServerConfig.trust));
|
|
263
|
+
}
|
|
264
|
+
/** Visible for Testing */
|
|
265
|
+
export function createTransport(mcpServerName, mcpServerConfig, debugMode) {
|
|
266
|
+
if (mcpServerConfig.httpUrl) {
|
|
267
|
+
const transportOptions = {};
|
|
268
|
+
if (mcpServerConfig.headers) {
|
|
269
|
+
transportOptions.requestInit = {
|
|
270
|
+
headers: mcpServerConfig.headers,
|
|
271
|
+
};
|
|
265
272
|
}
|
|
273
|
+
return new StreamableHTTPClientTransport(new URL(mcpServerConfig.httpUrl), transportOptions);
|
|
266
274
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
await transport.close();
|
|
275
|
+
if (mcpServerConfig.url) {
|
|
276
|
+
const transportOptions = {};
|
|
277
|
+
if (mcpServerConfig.headers) {
|
|
278
|
+
transportOptions.requestInit = {
|
|
279
|
+
headers: mcpServerConfig.headers,
|
|
280
|
+
};
|
|
274
281
|
}
|
|
275
|
-
|
|
276
|
-
updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
|
|
282
|
+
return new SSEClientTransport(new URL(mcpServerConfig.url), transportOptions);
|
|
277
283
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
284
|
+
if (mcpServerConfig.command) {
|
|
285
|
+
const transport = new StdioClientTransport({
|
|
286
|
+
command: mcpServerConfig.command,
|
|
287
|
+
args: mcpServerConfig.args || [],
|
|
288
|
+
env: {
|
|
289
|
+
...process.env,
|
|
290
|
+
...(mcpServerConfig.env || {}),
|
|
291
|
+
},
|
|
292
|
+
cwd: mcpServerConfig.cwd,
|
|
293
|
+
stderr: 'pipe',
|
|
294
|
+
});
|
|
295
|
+
if (debugMode) {
|
|
296
|
+
transport.stderr.on('data', (data) => {
|
|
297
|
+
const stderrStr = data.toString().trim();
|
|
298
|
+
console.debug(`[DEBUG] [MCP STDERR (${mcpServerName})]: `, stderrStr);
|
|
299
|
+
});
|
|
291
300
|
}
|
|
301
|
+
return transport;
|
|
302
|
+
}
|
|
303
|
+
throw new Error(`Invalid configuration: missing httpUrl (for Streamable HTTP), url (for SSE), and command (for stdio).`);
|
|
304
|
+
}
|
|
305
|
+
/** Visible for testing */
|
|
306
|
+
export function isEnabled(funcDecl, mcpServerName, mcpServerConfig) {
|
|
307
|
+
if (!funcDecl.name) {
|
|
308
|
+
console.warn(`Discovered a function declaration without a name from MCP server '${mcpServerName}'. Skipping.`);
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
const { includeTools, excludeTools } = mcpServerConfig;
|
|
312
|
+
// excludeTools takes precedence over includeTools
|
|
313
|
+
if (excludeTools && excludeTools.includes(funcDecl.name)) {
|
|
314
|
+
return false;
|
|
292
315
|
}
|
|
316
|
+
return (!includeTools ||
|
|
317
|
+
includeTools.some((tool) => tool === funcDecl.name || tool.startsWith(`${funcDecl.name}(`)));
|
|
293
318
|
}
|
|
294
319
|
//# sourceMappingURL=mcp-client.js.map
|