@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.
Files changed (178) hide show
  1. package/README.md +8 -2
  2. package/dist/google-gemini-cli-core-0.1.12.tgz +0 -0
  3. package/dist/src/code_assist/oauth2.js +39 -5
  4. package/dist/src/code_assist/oauth2.js.map +1 -1
  5. package/dist/src/code_assist/oauth2.test.js +8 -3
  6. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  7. package/dist/src/code_assist/server.test.js +10 -2
  8. package/dist/src/code_assist/server.test.js.map +1 -1
  9. package/dist/src/config/config.d.ts +28 -5
  10. package/dist/src/config/config.js +34 -18
  11. package/dist/src/config/config.js.map +1 -1
  12. package/dist/src/config/config.test.js +28 -3
  13. package/dist/src/config/config.test.js.map +1 -1
  14. package/dist/src/core/client.d.ts +3 -1
  15. package/dist/src/core/client.js +38 -1
  16. package/dist/src/core/client.js.map +1 -1
  17. package/dist/src/core/client.test.js +94 -37
  18. package/dist/src/core/client.test.js.map +1 -1
  19. package/dist/src/core/contentGenerator.d.ts +2 -1
  20. package/dist/src/core/contentGenerator.js +4 -3
  21. package/dist/src/core/contentGenerator.js.map +1 -1
  22. package/dist/src/core/contentGenerator.test.js +12 -5
  23. package/dist/src/core/contentGenerator.test.js.map +1 -1
  24. package/dist/src/core/coreToolScheduler.js +14 -1
  25. package/dist/src/core/coreToolScheduler.js.map +1 -1
  26. package/dist/src/core/coreToolScheduler.test.js +84 -2
  27. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  28. package/dist/src/core/modelCheck.d.ts +1 -1
  29. package/dist/src/core/modelCheck.js +10 -3
  30. package/dist/src/core/modelCheck.js.map +1 -1
  31. package/dist/src/core/nonInteractiveToolExecutor.test.js +3 -0
  32. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  33. package/dist/src/core/turn.d.ts +6 -2
  34. package/dist/src/core/turn.js +1 -0
  35. package/dist/src/core/turn.js.map +1 -1
  36. package/dist/src/index.d.ts +9 -0
  37. package/dist/src/index.js +8 -0
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/src/mcp/oauth-provider.d.ts +142 -0
  40. package/dist/src/mcp/oauth-provider.js +446 -0
  41. package/dist/src/mcp/oauth-provider.js.map +1 -0
  42. package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
  43. package/dist/src/mcp/oauth-provider.test.js +520 -0
  44. package/dist/src/mcp/oauth-provider.test.js.map +1 -0
  45. package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
  46. package/dist/src/mcp/oauth-token-storage.js +149 -0
  47. package/dist/src/mcp/oauth-token-storage.js.map +1 -0
  48. package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
  49. package/dist/src/mcp/oauth-token-storage.test.js +205 -0
  50. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
  51. package/dist/src/mcp/oauth-utils.d.ts +109 -0
  52. package/dist/src/mcp/oauth-utils.js +183 -0
  53. package/dist/src/mcp/oauth-utils.js.map +1 -0
  54. package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
  55. package/dist/src/mcp/oauth-utils.test.js +144 -0
  56. package/dist/src/mcp/oauth-utils.test.js.map +1 -0
  57. package/dist/src/services/gitService.js +1 -5
  58. package/dist/src/services/gitService.js.map +1 -1
  59. package/dist/src/services/gitService.test.js +1 -6
  60. package/dist/src/services/gitService.test.js.map +1 -1
  61. package/dist/src/services/ideContext.d.ts +126 -0
  62. package/dist/src/services/ideContext.js +98 -0
  63. package/dist/src/services/ideContext.js.map +1 -0
  64. package/dist/src/services/ideContext.test.d.ts +6 -0
  65. package/dist/src/services/ideContext.test.js +111 -0
  66. package/dist/src/services/ideContext.test.js.map +1 -0
  67. package/dist/src/services/loopDetectionService.d.ts +51 -0
  68. package/dist/src/services/loopDetectionService.js +232 -0
  69. package/dist/src/services/loopDetectionService.js.map +1 -0
  70. package/dist/src/services/loopDetectionService.test.d.ts +6 -0
  71. package/dist/src/services/loopDetectionService.test.js +339 -0
  72. package/dist/src/services/loopDetectionService.test.js.map +1 -0
  73. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +4 -1
  74. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +54 -4
  75. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  76. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  77. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +9 -0
  78. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  79. package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
  80. package/dist/src/telemetry/integration.test.circular.js +53 -0
  81. package/dist/src/telemetry/integration.test.circular.js.map +1 -0
  82. package/dist/src/telemetry/loggers.d.ts +2 -1
  83. package/dist/src/telemetry/loggers.js +17 -1
  84. package/dist/src/telemetry/loggers.js.map +1 -1
  85. package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
  86. package/dist/src/telemetry/loggers.test.circular.js +100 -0
  87. package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
  88. package/dist/src/telemetry/types.d.ts +12 -1
  89. package/dist/src/telemetry/types.js +16 -0
  90. package/dist/src/telemetry/types.js.map +1 -1
  91. package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
  92. package/dist/src/telemetry/uiTelemetry.js +7 -0
  93. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  94. package/dist/src/telemetry/uiTelemetry.test.js +92 -0
  95. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  96. package/dist/src/tools/edit.d.ts +7 -12
  97. package/dist/src/tools/edit.js +24 -28
  98. package/dist/src/tools/edit.js.map +1 -1
  99. package/dist/src/tools/glob.d.ts +1 -14
  100. package/dist/src/tools/glob.js +13 -36
  101. package/dist/src/tools/glob.js.map +1 -1
  102. package/dist/src/tools/glob.test.js +4 -3
  103. package/dist/src/tools/glob.test.js.map +1 -1
  104. package/dist/src/tools/grep.d.ts +3 -6
  105. package/dist/src/tools/grep.js +12 -18
  106. package/dist/src/tools/grep.js.map +1 -1
  107. package/dist/src/tools/grep.test.js +4 -1
  108. package/dist/src/tools/grep.test.js.map +1 -1
  109. package/dist/src/tools/ls.d.ts +1 -12
  110. package/dist/src/tools/ls.js +8 -30
  111. package/dist/src/tools/ls.js.map +1 -1
  112. package/dist/src/tools/mcp-client.d.ts +55 -1
  113. package/dist/src/tools/mcp-client.js +165 -140
  114. package/dist/src/tools/mcp-client.js.map +1 -1
  115. package/dist/src/tools/mcp-client.test.js +127 -624
  116. package/dist/src/tools/mcp-client.test.js.map +1 -1
  117. package/dist/src/tools/mcp-tool.d.ts +11 -5
  118. package/dist/src/tools/mcp-tool.js +33 -9
  119. package/dist/src/tools/mcp-tool.js.map +1 -1
  120. package/dist/src/tools/mcp-tool.test.js +40 -24
  121. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  122. package/dist/src/tools/memoryTool.js +2 -2
  123. package/dist/src/tools/memoryTool.js.map +1 -1
  124. package/dist/src/tools/read-file.d.ts +3 -3
  125. package/dist/src/tools/read-file.js +10 -10
  126. package/dist/src/tools/read-file.js.map +1 -1
  127. package/dist/src/tools/read-file.test.js +2 -1
  128. package/dist/src/tools/read-file.test.js.map +1 -1
  129. package/dist/src/tools/read-many-files.d.ts +1 -7
  130. package/dist/src/tools/read-many-files.js +12 -21
  131. package/dist/src/tools/read-many-files.js.map +1 -1
  132. package/dist/src/tools/read-many-files.test.js +2 -1
  133. package/dist/src/tools/read-many-files.test.js.map +1 -1
  134. package/dist/src/tools/shell.js +11 -4
  135. package/dist/src/tools/shell.js.map +1 -1
  136. package/dist/src/tools/shell.test.js +60 -0
  137. package/dist/src/tools/shell.test.js.map +1 -1
  138. package/dist/src/tools/tool-registry.d.ts +0 -1
  139. package/dist/src/tools/tool-registry.js +12 -9
  140. package/dist/src/tools/tool-registry.js.map +1 -1
  141. package/dist/src/tools/tool-registry.test.js +109 -38
  142. package/dist/src/tools/tool-registry.test.js.map +1 -1
  143. package/dist/src/tools/tools.d.ts +37 -2
  144. package/dist/src/tools/tools.js +25 -2
  145. package/dist/src/tools/tools.js.map +1 -1
  146. package/dist/src/tools/web-fetch.js +7 -2
  147. package/dist/src/tools/web-fetch.js.map +1 -1
  148. package/dist/src/tools/web-fetch.test.js +1 -0
  149. package/dist/src/tools/web-fetch.test.js.map +1 -1
  150. package/dist/src/tools/web-search.js +2 -2
  151. package/dist/src/tools/web-search.js.map +1 -1
  152. package/dist/src/tools/write-file.d.ts +0 -8
  153. package/dist/src/tools/write-file.js +14 -23
  154. package/dist/src/tools/write-file.js.map +1 -1
  155. package/dist/src/utils/browser.d.ts +13 -0
  156. package/dist/src/utils/browser.js +49 -0
  157. package/dist/src/utils/browser.js.map +1 -0
  158. package/dist/src/utils/errors.js +4 -4
  159. package/dist/src/utils/errors.js.map +1 -1
  160. package/dist/src/utils/fileUtils.js +2 -2
  161. package/dist/src/utils/fileUtils.js.map +1 -1
  162. package/dist/src/utils/quotaErrorDetection.js +2 -9
  163. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  164. package/dist/src/utils/retry.d.ts +6 -0
  165. package/dist/src/utils/retry.js +1 -1
  166. package/dist/src/utils/retry.js.map +1 -1
  167. package/dist/src/utils/safeJsonStringify.d.ts +13 -0
  168. package/dist/src/utils/safeJsonStringify.js +25 -0
  169. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  170. package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
  171. package/dist/src/utils/safeJsonStringify.test.js +61 -0
  172. package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
  173. package/dist/src/utils/summarizer.d.ts +1 -1
  174. package/dist/src/utils/summarizer.js +10 -9
  175. package/dist/src/utils/summarizer.js.map +1 -1
  176. package/dist/src/utils/summarizer.test.js +1 -1
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"grep.test.js","sourceRoot":"","sources":["../../../src/tools/grep.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grep.test.js","sourceRoot":"","sources":["../../../src/tools/grep.test.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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
- * Creates a new instance of the LSLogic
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 (!this.isWithinRoot(params.path)) {
79
- return `Path must be within the root directory (${this.rootDirectory}): ${params.path}`;
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.rootDirectory);
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.rootDirectory, fullPath);
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)) {
@@ -1 +1 @@
1
- {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/tools/ls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/tools/ls.ts"],"names":[],"mappings":"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"}
@@ -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
- export declare function discoverMcpTools(mcpServers: Record<string, MCPServerConfig>, mcpServerCommand: string | undefined, toolRegistry: ToolRegistry): Promise<void>;
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 { Type, mcpToTool } from '@google/genai';
13
- import { sanitizeParameters } from './tool-registry.js';
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
- export async function discoverMcpTools(mcpServers, mcpServerCommand, toolRegistry) {
92
- // Set discovery state to in progress
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
- if (mcpServerCommand) {
96
- const cmd = mcpServerCommand;
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
- catch (error) {
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
- let transport;
132
- if (mcpServerConfig.httpUrl) {
133
- const transportOptions = {};
134
- if (mcpServerConfig.headers) {
135
- transportOptions.requestInit = {
136
- headers: mcpServerConfig.headers,
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
- transport = new StreamableHTTPClientTransport(new URL(mcpServerConfig.httpUrl), transportOptions);
140
- }
141
- else if (mcpServerConfig.url) {
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
- else if (mcpServerConfig.command) {
151
- transport = new StdioClientTransport({
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
- await mcpClient.connect(transport, {
185
- timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
186
- });
187
- // Connection successful
188
- updateMCPServerStatus(mcpServerName, MCPServerStatus.CONNECTED);
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
- console.error(errorString);
207
- // Update status to disconnected
208
- updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
209
- return;
261
+ throw new Error(errorString);
210
262
  }
211
- mcpClient.onerror = (error) => {
212
- console.error(`MCP ERROR (${mcpServerName}):`, error.toString());
213
- // Update status to disconnected on error
214
- updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
215
- };
216
- try {
217
- const mcpCallableTool = mcpToTool(mcpClient);
218
- const tool = await mcpCallableTool.tool();
219
- if (!tool || !Array.isArray(tool.functionDeclarations)) {
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
- catch (error) {
268
- console.error(`Failed to list or register tools for MCP server '${mcpServerName}': ${error}`);
269
- // Ensure transport is cleaned up on error too
270
- if (transport instanceof StdioClientTransport ||
271
- transport instanceof SSEClientTransport ||
272
- transport instanceof StreamableHTTPClientTransport) {
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
- // Update status to disconnected
276
- updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
282
+ return new SSEClientTransport(new URL(mcpServerConfig.url), transportOptions);
277
283
  }
278
- // If no tools were registered from this MCP server, the following 'if' block
279
- // will close the connection. This is done to conserve resources and prevent
280
- // an orphaned connection to a server that isn't providing any usable
281
- // functionality. Connections to servers that did provide tools are kept
282
- // open, as those tools will require the connection to function.
283
- if (toolRegistry.getToolsByServer(mcpServerName).length === 0) {
284
- console.log(`No tools registered from MCP server '${mcpServerName}'. Closing connection.`);
285
- if (transport instanceof StdioClientTransport ||
286
- transport instanceof SSEClientTransport ||
287
- transport instanceof StreamableHTTPClientTransport) {
288
- await transport.close();
289
- // Update status to disconnected
290
- updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
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