@teambit/cli-mcp-server 0.0.89 → 0.0.91
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.docs.mdx +39 -1
- package/dist/README.docs.mdx +39 -1
- package/dist/cli-mcp-server.main.runtime.js +88 -6
- package/dist/cli-mcp-server.main.runtime.js.map +1 -1
- package/dist/cli-mcp-server.spec.js +61 -12
- package/dist/cli-mcp-server.spec.js.map +1 -1
- package/dist/{preview-1756150623087.js → preview-1756336270572.js} +1 -1
- package/package.json +3 -3
package/README.docs.mdx
CHANGED
|
@@ -211,7 +211,7 @@ In default mode, the server exposes a minimal set of essential tools focused on
|
|
|
211
211
|
|
|
212
212
|
- `bit_remote_search`: Search for components in remote scopes
|
|
213
213
|
- `bit_workspace_info`: Get comprehensive workspace information including status, components list, apps, templates, and dependency graph
|
|
214
|
-
- `bit_component_details`: Get detailed information about
|
|
214
|
+
- `bit_component_details`: Get detailed information about multiple components in parallel (up to 5 max) including basic info and optionally their public API schemas
|
|
215
215
|
- `bit_create`: Create a new component (source files and config) using a template with proper argument validation and documentation
|
|
216
216
|
- `bit_query`: Execute read-only Bit commands that safely inspect workspace and component state without making modifications
|
|
217
217
|
- `bit_execute`: Execute any Bit command, including those that modify workspace or repository state (use with caution)
|
|
@@ -264,6 +264,44 @@ Search for multiple components in parallel for efficient discovery:
|
|
|
264
264
|
- Data display: `["table", "pagination", "filter", "sort"]`
|
|
265
265
|
- Button variations: `["button", "btn", "click"]`
|
|
266
266
|
|
|
267
|
+
### bit_component_details
|
|
268
|
+
|
|
269
|
+
Get detailed information about multiple components in parallel (limited to 5 components max to prevent context overload):
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"componentIds": ["acme.design/ui/button", "acme.design/forms/input"],
|
|
274
|
+
"includeSchema": true,
|
|
275
|
+
"cwd": "/path/to/workspace"
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Parameters:**
|
|
280
|
+
|
|
281
|
+
- `componentIds` (required): Array of component IDs to get details for. Limited to 5 components max. Use full component IDs (e.g., `acme.design/ui/button`)
|
|
282
|
+
- `cwd` (required): Path to workspace directory
|
|
283
|
+
- `includeSchema` (optional): Include component public API schema (default: false)
|
|
284
|
+
|
|
285
|
+
**Examples:**
|
|
286
|
+
|
|
287
|
+
- Multiple UI components: `{"componentIds": ["acme.design/ui/button", "acme.design/ui/input", "acme.design/ui/dropdown"], "cwd": "/path/to/workspace"}`
|
|
288
|
+
- With schema information: `{"componentIds": ["teambit.base-ui/navigation/link"], "includeSchema": true, "cwd": "/path/to/workspace"}`
|
|
289
|
+
- Form components batch: `{"componentIds": ["acme.forms/input", "acme.forms/validation", "acme.forms/submit-button"], "cwd": "/path/to/workspace"}`
|
|
290
|
+
|
|
291
|
+
**Response Format:**
|
|
292
|
+
|
|
293
|
+
The tool returns a structured response with:
|
|
294
|
+
|
|
295
|
+
- `summary`: Statistics about the request (requested, successful, failed counts)
|
|
296
|
+
- `components`: Object containing successful component details keyed by component ID
|
|
297
|
+
- `failures`: Object containing error messages for failed components (if any)
|
|
298
|
+
|
|
299
|
+
**Error Handling:**
|
|
300
|
+
|
|
301
|
+
- Returns error if more than 5 components are requested
|
|
302
|
+
- Individual component failures don't block the entire request
|
|
303
|
+
- Clear error messages indicate which specific components failed and why
|
|
304
|
+
|
|
267
305
|
### bit_create
|
|
268
306
|
|
|
269
307
|
Create a new component with template-based generation:
|
package/dist/README.docs.mdx
CHANGED
|
@@ -211,7 +211,7 @@ In default mode, the server exposes a minimal set of essential tools focused on
|
|
|
211
211
|
|
|
212
212
|
- `bit_remote_search`: Search for components in remote scopes
|
|
213
213
|
- `bit_workspace_info`: Get comprehensive workspace information including status, components list, apps, templates, and dependency graph
|
|
214
|
-
- `bit_component_details`: Get detailed information about
|
|
214
|
+
- `bit_component_details`: Get detailed information about multiple components in parallel (up to 5 max) including basic info and optionally their public API schemas
|
|
215
215
|
- `bit_create`: Create a new component (source files and config) using a template with proper argument validation and documentation
|
|
216
216
|
- `bit_query`: Execute read-only Bit commands that safely inspect workspace and component state without making modifications
|
|
217
217
|
- `bit_execute`: Execute any Bit command, including those that modify workspace or repository state (use with caution)
|
|
@@ -264,6 +264,44 @@ Search for multiple components in parallel for efficient discovery:
|
|
|
264
264
|
- Data display: `["table", "pagination", "filter", "sort"]`
|
|
265
265
|
- Button variations: `["button", "btn", "click"]`
|
|
266
266
|
|
|
267
|
+
### bit_component_details
|
|
268
|
+
|
|
269
|
+
Get detailed information about multiple components in parallel (limited to 5 components max to prevent context overload):
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"componentIds": ["acme.design/ui/button", "acme.design/forms/input"],
|
|
274
|
+
"includeSchema": true,
|
|
275
|
+
"cwd": "/path/to/workspace"
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Parameters:**
|
|
280
|
+
|
|
281
|
+
- `componentIds` (required): Array of component IDs to get details for. Limited to 5 components max. Use full component IDs (e.g., `acme.design/ui/button`)
|
|
282
|
+
- `cwd` (required): Path to workspace directory
|
|
283
|
+
- `includeSchema` (optional): Include component public API schema (default: false)
|
|
284
|
+
|
|
285
|
+
**Examples:**
|
|
286
|
+
|
|
287
|
+
- Multiple UI components: `{"componentIds": ["acme.design/ui/button", "acme.design/ui/input", "acme.design/ui/dropdown"], "cwd": "/path/to/workspace"}`
|
|
288
|
+
- With schema information: `{"componentIds": ["teambit.base-ui/navigation/link"], "includeSchema": true, "cwd": "/path/to/workspace"}`
|
|
289
|
+
- Form components batch: `{"componentIds": ["acme.forms/input", "acme.forms/validation", "acme.forms/submit-button"], "cwd": "/path/to/workspace"}`
|
|
290
|
+
|
|
291
|
+
**Response Format:**
|
|
292
|
+
|
|
293
|
+
The tool returns a structured response with:
|
|
294
|
+
|
|
295
|
+
- `summary`: Statistics about the request (requested, successful, failed counts)
|
|
296
|
+
- `components`: Object containing successful component details keyed by component ID
|
|
297
|
+
- `failures`: Object containing error messages for failed components (if any)
|
|
298
|
+
|
|
299
|
+
**Error Handling:**
|
|
300
|
+
|
|
301
|
+
- Returns error if more than 5 components are requested
|
|
302
|
+
- Individual component failures don't block the entire request
|
|
303
|
+
- Clear error messages indicate which specific components failed and why
|
|
304
|
+
|
|
267
305
|
### bit_create
|
|
268
306
|
|
|
269
307
|
Create a new component with template-based generation:
|
|
@@ -858,20 +858,102 @@ class CliMcpServerMain {
|
|
|
858
858
|
}
|
|
859
859
|
registerComponentDetailsTool(server) {
|
|
860
860
|
const toolName = 'bit_component_details';
|
|
861
|
-
const description = 'Get detailed information about
|
|
861
|
+
const description = 'Get detailed information about multiple components in parallel. Supports batch requests for efficient component discovery. Limited to 5 components max to prevent context overload.';
|
|
862
862
|
const schema = {
|
|
863
863
|
cwd: _zod().z.string().describe('Path to workspace directory'),
|
|
864
|
-
|
|
864
|
+
componentIds: _zod().z.array(_zod().z.string()).describe('Array of component IDs to get details for. Limited to 5 components max. Examples: ["acme.design/ui/button", "acme.design/forms/input", "teambit.base-ui/navigation/link"]'),
|
|
865
865
|
includeSchema: _zod().z.boolean().optional().describe('Include component public API schema (default: false)')
|
|
866
866
|
};
|
|
867
867
|
server.tool(toolName, description, schema, async params => {
|
|
868
868
|
try {
|
|
869
|
+
// Validate that componentIds parameter is provided and valid
|
|
870
|
+
if (!params.componentIds || !Array.isArray(params.componentIds) || params.componentIds.length === 0) {
|
|
871
|
+
return {
|
|
872
|
+
content: [{
|
|
873
|
+
type: 'text',
|
|
874
|
+
text: 'Error: componentIds parameter must be provided as a non-empty array of component IDs. Example: ["acme.design/ui/button", "acme.design/forms/input"]'
|
|
875
|
+
}]
|
|
876
|
+
};
|
|
877
|
+
}
|
|
869
878
|
const includeSchema = params.includeSchema === true;
|
|
870
|
-
const
|
|
879
|
+
const componentIds = params.componentIds;
|
|
880
|
+
|
|
881
|
+
// Check limit of 5 components to prevent context overload
|
|
882
|
+
const maxComponents = 5;
|
|
883
|
+
if (componentIds.length > maxComponents) {
|
|
884
|
+
return {
|
|
885
|
+
content: [{
|
|
886
|
+
type: 'text',
|
|
887
|
+
text: `Error: Too many components requested. Maximum allowed is ${maxComponents} components, but ${componentIds.length} were requested. Please reduce the number of components in your request.`
|
|
888
|
+
}]
|
|
889
|
+
};
|
|
890
|
+
}
|
|
871
891
|
|
|
872
|
-
//
|
|
873
|
-
|
|
874
|
-
|
|
892
|
+
// Execute component detail requests in parallel
|
|
893
|
+
this.logger.debug(`[MCP-DEBUG] Fetching details for ${componentIds.length} component(s) in parallel: ${componentIds.join(', ')}`);
|
|
894
|
+
const detailPromises = componentIds.map(async componentId => {
|
|
895
|
+
try {
|
|
896
|
+
const result = await this.callBitServerIDEAPI('getCompDetails', [componentId, includeSchema], params.cwd);
|
|
897
|
+
return {
|
|
898
|
+
componentId,
|
|
899
|
+
success: true,
|
|
900
|
+
details: result
|
|
901
|
+
};
|
|
902
|
+
} catch (error) {
|
|
903
|
+
this.logger.warn(`[MCP-DEBUG] Failed to get details for component "${componentId}": ${error.message}`);
|
|
904
|
+
return {
|
|
905
|
+
componentId,
|
|
906
|
+
success: false,
|
|
907
|
+
error: error.message
|
|
908
|
+
};
|
|
909
|
+
}
|
|
910
|
+
});
|
|
911
|
+
const detailResults = await Promise.all(detailPromises);
|
|
912
|
+
|
|
913
|
+
// Process and consolidate results
|
|
914
|
+
const successfulResults = detailResults.filter(r => r.success);
|
|
915
|
+
const failedResults = detailResults.filter(r => !r.success);
|
|
916
|
+
if (successfulResults.length === 0) {
|
|
917
|
+
let message = 'Failed to get details for any components';
|
|
918
|
+
if (failedResults.length > 0) {
|
|
919
|
+
message += '\n\nErrors:';
|
|
920
|
+
failedResults.forEach(r => {
|
|
921
|
+
message += `\n- "${r.componentId}": ${r.error}`;
|
|
922
|
+
});
|
|
923
|
+
}
|
|
924
|
+
return {
|
|
925
|
+
content: [{
|
|
926
|
+
type: 'text',
|
|
927
|
+
text: message
|
|
928
|
+
}]
|
|
929
|
+
};
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
// Build the response
|
|
933
|
+
const response = {
|
|
934
|
+
summary: {
|
|
935
|
+
requested: componentIds.length,
|
|
936
|
+
successful: successfulResults.length,
|
|
937
|
+
failed: failedResults.length,
|
|
938
|
+
includeSchema
|
|
939
|
+
},
|
|
940
|
+
components: {}
|
|
941
|
+
};
|
|
942
|
+
|
|
943
|
+
// Add successful component details
|
|
944
|
+
successfulResults.forEach(result => {
|
|
945
|
+
response.components[result.componentId] = result.details;
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
// Add failed components info if any
|
|
949
|
+
if (failedResults.length > 0) {
|
|
950
|
+
response.failures = {};
|
|
951
|
+
failedResults.forEach(result => {
|
|
952
|
+
response.failures[result.componentId] = result.error;
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
this.logger.debug(`[MCP-DEBUG] Component details fetched: ${successfulResults.length} successful, ${failedResults.length} failed`);
|
|
956
|
+
return this.formatAsCallToolResult(response);
|
|
875
957
|
} catch (error) {
|
|
876
958
|
this.logger.error(`[MCP-DEBUG] Error in bit_component_details tool: ${error.message}`);
|
|
877
959
|
return this.formatErrorAsCallToolResult(error, 'getting component details');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_cli","data","require","_child_process","_interopRequireDefault","_stripAnsi","_fsExtra","_commentJson","_path","_cliMcpServer","_mcpServer","_mcp","_stdio","_zod","_logger","_scope","_legacy","_nodeFetch","_setupCmd","_rulesCmd","_mcp2","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CliMcpServerMain","constructor","cli","logger","Set","bitBin","validateBitBin","getHttp","_http","Http","connect","SYMPHONY_GRAPHQL","CENTRAL_BIT_HUB_NAME","getBitServerPort","cwd","skipValidatePortFlag","args","result","childProcess","spawnSync","env","process","BIT_CLI_SERVER","encoding","error","status","Error","stderr","existingPort","stdout","trim","undefined","parseInt","err","message","startBitServer","debug","Promise","resolve","reject","serverProcess","spawn","stdio","detached","serverStarted","outputBuffer","timeout","setTimeout","kill","on","output","toString","includes","clearTimeout","portMatch","match","port","serverPort","serverUrl","code","signal","killServerProcess","killed","exit","callBitServerAPI","command","flags","isReTrying","callBitServerAPIWithRoute","callBitServerIDEAPI","method","route","commandOrMethod","argsOrParams","isIDERoute","startedPort","realCwd","fs","realpathSync","body","url","commandArray","key","entries","pwd","response","fetch","headers","JSON","stringify","ok","errorMessage","statusText","errorJson","json","runMcpServer","options","commands","alwaysExcludeTools","additionalCommandsSet","includeAdditional","split","map","cmd","Array","from","join","server","McpServer","name","version","consumerProjectTools","consumerProject","Boolean","isConsumerProjectMode","filterOptions","cmdName","getCommandName","shouldIncludeCommand","registerToolForCommand","processSubCommands","registerRemoteSearchTool","registerRemoteComponentDetailsTool","registerWorkspaceInfoTool","registerComponentDetailsTool","registerCreateTool","registerCommandsListTool","registerCommandHelpTool","registerQueryTool","registerExecuteTool","StdioServerTransport","has","shouldInclude","buildZodSchema","config","schema","z","string","describe","argsData","arg","desc","description","nameRaw","isArray","nameCamelCase","required","array","optional","flagsData","flag","type","boolean","buildCommandArgs","params","val","item","stringValue","getToolName","replace","parentCmd","toolName","extendedDescription","getArgsData","getFlagsData","tool","argsToRun","runBit","readWorkspaceJsonc","workspaceDir","workspaceJsoncPath","path","fileExists","pathExists","content","readFile","parse","extractOwnerFromWorkspace","workspaceConfig","workspaceSection","defaultScope","parts","queries","owners","skipAutoOwner","http","text","searchQueries","ownersToUse","extractedOwner","searchPromises","query","search","success","components","totalCount","warn","searchResults","all","allComponents","resultsByQuery","totalComponentsFound","count","component","add","size","failedQueries","responseText","formattedResults","componentName","includeSchema","showArgs","showResult","componentInfo","schemaArgs","schemaResult","schemaError","formatAsCallToolResult","formatErrorAsCallToolResult","includeTemplates","includeApps","includeGraph","useJson","workspaceInfo","statusExecution","safeBitCommandExecution","listExecution","list","appsExecution","apps","templatesExecution","templates","graphExecution","graph","workspaceDependencies","laneId","ideApiResult","templateName","componentNames","namespace","scope","aspect","template","force","allArgs","execution","internal","commandsInfo","shouldSkipCommand","private","startsWith","mainCmdName","groupKey","group","commandInfo","groups","subcommands","subCmd","sort","a","b","localeCompare","total","subcommand","requestedCommand","requestedSubcommand","buildDetailedCommandInfo","parentName","info","examples","find","sub","commandFullName","record","union","fullCommand","isAllowed","readOnlyCommands","allowedCommands","commandArgs","commandParts","parentCmdName","subCmdName","fullCmdName","BIT_DISABLE_SPINNER","executeBitServerCommand","operationName","operation","includeErrorInResult","stripAnsi","trimmed","test","getEditorDisplayName","editor","McpConfigWriter","getEditorConfigPath","isGlobal","setupEditor","setupOptions","writeRulesFile","rulesOptions","getRulesContent","forceStandard","getDefaultRulesContent","provider","loggerMain","createLogger","CliMcpServerAspect","id","mcpServer","mcpServerCmd","McpServerCmd","McpStartCmd","McpSetupCmd","McpRulesCmd","register","exports","CLIAspect","LoggerAspect","MainRuntime","addRuntime","_default"],"sources":["cli-mcp-server.main.runtime.ts"],"sourcesContent":["/* eslint-disable import/extensions */\n/* eslint-disable import/no-unresolved */\n\nimport type { CLIMain, Command } from '@teambit/cli';\nimport { CLIAspect, getArgsData, getCommandName, getFlagsData, MainRuntime } from '@teambit/cli';\nimport childProcess from 'child_process';\nimport stripAnsi from 'strip-ansi';\nimport fs from 'fs-extra';\nimport { parse } from 'comment-json';\nimport path from 'path';\nimport { CliMcpServerAspect } from './cli-mcp-server.aspect';\nimport { McpServerCmd, McpStartCmd } from './mcp-server.cmd';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport { Http } from '@teambit/scope.network';\nimport { CENTRAL_BIT_HUB_NAME, SYMPHONY_GRAPHQL } from '@teambit/legacy.constants';\nimport fetch from 'node-fetch';\nimport { McpSetupCmd } from './setup-cmd';\nimport { McpRulesCmd } from './rules-cmd';\nimport type { SetupOptions, RulesOptions } from '@teambit/mcp.mcp-config-writer';\nimport { McpConfigWriter } from '@teambit/mcp.mcp-config-writer';\n\ninterface CommandFilterOptions {\n additionalCommandsSet?: Set<string>;\n alwaysExcludeTools: Set<string>;\n consumerProject: boolean;\n consumerProjectTools: Set<string>;\n}\n\ninterface CommandConfig {\n name: string;\n description: string;\n argsData: ReturnType<typeof getArgsData>;\n flagsData: ReturnType<typeof getFlagsData>;\n}\n\nexport class CliMcpServerMain {\n private bitBin = 'bit';\n private _http: Http;\n private isConsumerProjectMode: boolean = false;\n private serverPort?: number;\n private serverUrl?: string;\n private serverProcess: childProcess.ChildProcess | null = null;\n\n // Whitelist of commands that are considered read-only/query operations\n private readonly readOnlyCommands = new Set([\n 'status',\n 'list',\n 'info',\n 'show',\n 'schema',\n 'artifacts',\n 'diff',\n 'log',\n 'graph',\n 'deps get',\n 'deps blame',\n 'why',\n 'config get',\n 'envs list',\n 'envs get',\n 'remote list',\n 'templates',\n 'cat-component',\n 'cat-lane',\n 'cat-object',\n 'cat-scope',\n 'lane show',\n 'lane list',\n 'lane diff',\n 'lane history',\n 'lane history-diff',\n 'test',\n 'help',\n 'version',\n ]);\n\n constructor(\n private cli: CLIMain,\n private logger: Logger\n ) {\n // Validate the default bitBin on construction\n this.bitBin = this.validateBitBin(this.bitBin);\n }\n\n async getHttp(): Promise<Http> {\n if (!this._http) {\n this._http = await Http.connect(SYMPHONY_GRAPHQL, CENTRAL_BIT_HUB_NAME);\n }\n return this._http;\n }\n\n private async getBitServerPort(cwd: string, skipValidatePortFlag = false): Promise<number | undefined> {\n try {\n const args = ['cli-server-port'];\n if (skipValidatePortFlag) {\n args.push(String(skipValidatePortFlag));\n }\n\n const result = childProcess.spawnSync(this.bitBin, args, {\n cwd,\n env: { ...process.env, BIT_CLI_SERVER: 'true' },\n encoding: 'utf8',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0) {\n throw new Error(`Command failed with status ${result.status}: ${result.stderr}`);\n }\n\n const existingPort = result.stdout.trim();\n if (!existingPort) return undefined;\n return parseInt(existingPort, 10);\n } catch (err: any) {\n this.logger.error(`[MCP-DEBUG] error getting existing port from bit server at ${cwd}. err: ${err.message}`);\n return undefined;\n }\n }\n\n /**\n * Start a new bit-server process\n */\n private async startBitServer(cwd: string): Promise<number | null> {\n this.logger.debug('[MCP-DEBUG] Starting new bit-server process');\n\n return new Promise((resolve, reject) => {\n try {\n const serverProcess = childProcess.spawn(this.bitBin, ['server'], {\n cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n detached: false,\n });\n\n this.serverProcess = serverProcess;\n\n let serverStarted = false;\n let outputBuffer = '';\n\n const timeout = setTimeout(() => {\n if (!serverStarted) {\n this.logger.error('[MCP-DEBUG] Timeout waiting for bit-server to start');\n serverProcess.kill();\n resolve(null);\n }\n }, 30000); // 30 second timeout\n\n serverProcess.stdout?.on('data', (data) => {\n const output = data.toString();\n outputBuffer += output;\n this.logger.debug(`[MCP-DEBUG] bit-server stdout: ${output}`);\n if (output.includes('listening on port')) {\n clearTimeout(timeout);\n if (!serverStarted) {\n serverStarted = true;\n // Extract the port from the output\n const portMatch = output.match(/listening on port (\\d+)/);\n if (portMatch && portMatch[1]) {\n const port = parseInt(portMatch[1], 10);\n this.logger.debug(`[MCP-DEBUG] bit-server started on port ${port}`);\n this.serverPort = port;\n this.serverUrl = `http://localhost:${port}/api`;\n resolve(port);\n }\n }\n }\n });\n\n serverProcess.stderr?.on('data', (data) => {\n const error = data.toString();\n outputBuffer += error;\n this.logger.debug(`[MCP-DEBUG] bit-server stderr: ${error}`);\n });\n\n serverProcess.on('error', (err) => {\n clearTimeout(timeout);\n this.logger.error(`[MCP-DEBUG] Failed to start bit-server: ${err.message}`);\n reject(err);\n });\n\n serverProcess.on('exit', (code, signal) => {\n clearTimeout(timeout);\n if (!serverStarted) {\n this.logger.error(`[MCP-DEBUG] bit-server exited with code ${code}, signal ${signal}`);\n this.logger.debug(`[MCP-DEBUG] bit-server output: ${outputBuffer}`);\n resolve(null);\n }\n });\n\n const killServerProcess = () => {\n if (this.serverProcess && !this.serverProcess.killed) {\n this.logger.debug('[MCP-DEBUG] Killing bit-server process');\n this.serverProcess.kill();\n }\n };\n\n // Handle process cleanup\n process.on('exit', () => {\n killServerProcess();\n });\n\n process.on('SIGINT', () => {\n killServerProcess();\n process.exit();\n });\n\n process.on('SIGTERM', () => {\n killServerProcess();\n process.exit();\n });\n } catch (err) {\n this.logger.error(`[MCP-DEBUG] Error spawning bit-server: ${(err as Error).message}`);\n reject(err);\n }\n });\n }\n\n /**\n * Call bit-server API endpoint using cli-raw route\n */\n private async callBitServerAPI(\n command: string,\n args: string[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n isReTrying = false\n ): Promise<any> {\n return this.callBitServerAPIWithRoute('cli-raw', command, args, flags, cwd, isReTrying);\n }\n\n /**\n * Call bit-server API endpoint using IDE route\n */\n private async callBitServerIDEAPI(method: string, args: any[] = [], cwd: string, isReTrying = false): Promise<any> {\n return this.callBitServerAPIWithRoute('ide', method, args, {}, cwd, isReTrying, true);\n }\n\n /**\n * Generic method to call bit-server API with different routes\n */\n private async callBitServerAPIWithRoute(\n route: string,\n commandOrMethod: string,\n argsOrParams: any[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n isReTrying = false,\n isIDERoute = false\n ): Promise<any> {\n if (!this.serverPort) {\n if (!cwd) throw new Error('CWD is required to call bit-server API');\n this.serverPort = await this.getBitServerPort(cwd);\n if (this.serverPort) {\n this.serverUrl = `http://localhost:${this.serverPort}/api`;\n } else {\n // No server running, try to start one\n this.logger.debug('[MCP-DEBUG] No bit-server found, attempting to start one');\n const startedPort = await this.startBitServer(cwd);\n if (startedPort) {\n this.serverPort = startedPort;\n this.serverUrl = `http://localhost:${this.serverPort}/api`;\n }\n }\n }\n\n if (!this.serverUrl) {\n throw new Error('Unable to connect to bit-server. Please ensure you are in a valid Bit workspace.');\n }\n\n // Resolve the real path to handle symlinks (e.g., /tmp -> /private/tmp on macOS)\n const realCwd = fs.realpathSync(cwd);\n\n let body: any;\n let url: string;\n\n if (isIDERoute) {\n // For IDE route, use the method name and args directly\n body = {\n args: argsOrParams,\n };\n url = `${this.serverUrl}/${route}/${commandOrMethod}`;\n } else {\n // For CLI route, build command array with flags\n const commandArray = [commandOrMethod, ...argsOrParams];\n\n // Convert flags to command line arguments\n for (const [key, value] of Object.entries(flags)) {\n if (value === true) {\n commandArray.push(`--${key}`);\n } else if (value !== false && value !== undefined) {\n commandArray.push(`--${key}`, String(value));\n }\n }\n\n body = {\n command: commandArray,\n pwd: realCwd,\n };\n url = `${this.serverUrl}/${route}`;\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n try {\n const errorJson = await response.json();\n errorMessage = errorJson.message || errorJson || errorMessage;\n } catch {\n // Ignore JSON parse errors\n }\n throw new Error(errorMessage);\n }\n\n return await response.json();\n } catch (err: any) {\n if (err.code === 'ECONNREFUSED' && !isReTrying) {\n // Server is no longer running, reset cached values and try to restart\n this.serverPort = undefined;\n this.serverUrl = undefined;\n this.logger.debug('[MCP-DEBUG] Connection refused, attempting to restart bit-server');\n return this.callBitServerAPIWithRoute(route, commandOrMethod, argsOrParams, flags, cwd, true, isIDERoute);\n }\n throw err;\n }\n }\n\n async runMcpServer(options: { includeAdditional?: string; bitBin?: string; consumerProject?: boolean }) {\n this.logger.debug(\n `[MCP-DEBUG] Starting MCP server with options: ${JSON.stringify(options)}. CWD: ${process.cwd()}`\n );\n const commands = this.cli.commands;\n\n // Validate and set bitBin with security checks\n if (options.bitBin) {\n this.bitBin = this.validateBitBin(options.bitBin);\n }\n // If no bitBin provided, keep the default 'bit'\n\n // Tools to always exclude\n const alwaysExcludeTools = new Set([\n 'login',\n 'logout',\n 'completion',\n 'mcp-server',\n 'start',\n 'run-action',\n 'watch',\n 'run',\n 'resume-export',\n 'server',\n 'serve-preview',\n ]);\n\n // Parse command strings from flag options\n let additionalCommandsSet: Set<string> | undefined;\n if (options.includeAdditional) {\n additionalCommandsSet = new Set(options.includeAdditional.split(',').map((cmd) => cmd.trim()));\n this.logger.debug(`[MCP-DEBUG] Including additional commands: ${Array.from(additionalCommandsSet).join(', ')}`);\n }\n\n const server = new McpServer({\n name: 'bit-cli-mcp',\n version: '0.0.1',\n });\n\n // Set of tools for consumer projects (non-Bit workspaces)\n const consumerProjectTools = new Set<string>();\n\n const consumerProject = Boolean(options.consumerProject);\n\n // Store consumer project mode globally in the class\n this.isConsumerProjectMode = consumerProject;\n\n // Validate flags combination\n if (consumerProject) {\n this.logger.debug(\n `[MCP-DEBUG] Running MCP server in consumer project mode (for non-Bit workspaces) with tools: bit_remote_search, bit_remote_component_details`\n );\n if (options.includeAdditional) {\n this.logger.debug(\n `[MCP-DEBUG] Additional tools enabled in consumer project mode: ${options.includeAdditional}`\n );\n }\n }\n\n const filterOptions: CommandFilterOptions = {\n additionalCommandsSet,\n alwaysExcludeTools,\n consumerProject,\n consumerProjectTools,\n };\n\n commands.forEach((cmd) => {\n const cmdName = getCommandName(cmd);\n\n if (this.shouldIncludeCommand(cmdName, filterOptions)) {\n this.registerToolForCommand(server, cmd);\n }\n\n // Process sub-commands\n if (cmd.commands && cmd.commands.length) {\n this.processSubCommands(server, cmd, filterOptions);\n }\n });\n\n // Always register remote-search tool\n this.registerRemoteSearchTool(server);\n\n // In consumer project mode, only register bit_remote_search and bit_remote_component_details\n // All other tools should not be available in consumer project mode\n if (consumerProject) {\n // Register the new combined remote component details tool\n this.registerRemoteComponentDetailsTool(server);\n } else {\n // Register the bit_workspace_info tool\n this.registerWorkspaceInfoTool(server);\n\n // Register the bit_component_details tool\n this.registerComponentDetailsTool(server);\n\n // Register the bit_create tool\n this.registerCreateTool(server);\n\n // Register command discovery and help tools\n this.registerCommandsListTool(server);\n this.registerCommandHelpTool(server);\n\n this.registerQueryTool(server);\n this.registerExecuteTool(server);\n }\n\n await server.connect(new StdioServerTransport());\n }\n\n private shouldIncludeCommand(cmdName: string, options: CommandFilterOptions): boolean {\n // Always exclude certain commands\n if (options.alwaysExcludeTools.has(cmdName)) return false;\n\n // Consumer project mode: only include consumer project tools + any additional specified\n if (options.consumerProject) {\n const shouldInclude =\n options.consumerProjectTools.has(cmdName) || (options.additionalCommandsSet?.has(cmdName) ?? false);\n if (shouldInclude) {\n this.logger.debug(`[MCP-DEBUG] Including command in consumer project mode: ${cmdName}`);\n }\n return shouldInclude;\n }\n\n // Default mode: only include additional specified commands (no default tools anymore)\n return options.additionalCommandsSet?.has(cmdName) ?? false;\n }\n\n private buildZodSchema(config: CommandConfig): Record<string, any> {\n const schema: Record<string, any> = {\n // Add cwd parameter as mandatory to all commands\n cwd: z.string().describe('Path to workspace'),\n };\n\n config.argsData.forEach((arg) => {\n const desc = arg.description || `Positional argument: ${arg.nameRaw}`;\n if (arg.isArray) {\n schema[arg.nameCamelCase] = arg.required\n ? z.array(z.string()).describe(desc)\n : z.array(z.string()).optional().describe(desc);\n } else {\n schema[arg.nameCamelCase] = arg.required ? z.string().describe(desc) : z.string().optional().describe(desc);\n }\n });\n\n config.flagsData.forEach((flag) => {\n const type = flag.type;\n schema[flag.name] =\n type === 'string'\n ? z.string().optional().describe(flag.description)\n : z.boolean().optional().describe(flag.description);\n });\n\n return schema;\n }\n\n private buildCommandArgs(config: CommandConfig, params: any): string[] {\n // Split the command name on spaces to properly handle subcommands\n const args: string[] = config.name.split(' ');\n\n // Add positional arguments in order\n config.argsData.forEach((arg) => {\n const val = params[arg.nameCamelCase];\n if (val === undefined) return;\n\n if (arg.isArray && Array.isArray(val)) {\n val.forEach((item) => args.push(item));\n } else {\n args.push(val);\n }\n });\n\n // Add options as flags\n config.flagsData.forEach((flag) => {\n const name = flag.name;\n const type = flag.type;\n const val = params[name];\n if (val === undefined) return;\n if (type === 'boolean' && val) {\n args.push(`--${name}`);\n } else if (type === 'string' && val) {\n // Check if the string value contains spaces and quote it if necessary\n const stringValue = String(val);\n if (stringValue.includes(' ')) {\n args.push(`--${name}`, `\"${stringValue}\"`);\n } else {\n args.push(`--${name}`, stringValue);\n }\n }\n });\n\n return args;\n }\n\n private getToolName(name: string): string {\n // replace white spaces (\\s) and dashes (-) with underscores (_)\n return `bit_${name}`.replace(/[-\\s]/g, '_');\n }\n\n private registerToolForCommand(server: McpServer, cmd: Command, parentCmd?: Command) {\n const cmdName = parentCmd ? `${getCommandName(parentCmd)} ${getCommandName(cmd)}` : getCommandName(cmd);\n const toolName = this.getToolName(cmdName);\n\n // Modify description for show and schema commands in consumer project mode\n let description = `${cmd.description}${cmd.extendedDescription ? `.\\n(${cmd.extendedDescription})` : ''}`;\n if (this.isConsumerProjectMode && (cmdName === 'show' || cmdName === 'schema')) {\n description += `\\n(In consumer project mode, --remote flag is automatically added)`;\n }\n\n const config: CommandConfig = {\n name: cmdName,\n description,\n argsData: getArgsData(cmd),\n flagsData: getFlagsData(cmd),\n };\n\n const schema = this.buildZodSchema(config);\n\n server.tool(toolName, config.description, schema, async (params: any) => {\n const argsToRun = this.buildCommandArgs(config, params);\n\n // Special handling for consumer projects - auto-add --remote flag for show and schema commands\n if (this.isConsumerProjectMode && (cmdName === 'show' || cmdName === 'schema')) {\n if (!argsToRun.includes('--remote')) {\n this.logger.debug(`[MCP-DEBUG] Auto-adding --remote flag for ${cmdName} in consumer project mode`);\n argsToRun.push('--remote');\n }\n if (cmdName === 'show' && !argsToRun.includes('--legacy')) {\n this.logger.debug(`[MCP-DEBUG] Auto-adding --legacy flag for ${cmdName} in consumer project mode`);\n argsToRun.push('--legacy');\n }\n }\n\n return this.runBit(argsToRun, params.cwd);\n });\n }\n\n /**\n * Read and parse workspace.jsonc file from a given directory\n */\n private async readWorkspaceJsonc(workspaceDir: string): Promise<any> {\n try {\n const workspaceJsoncPath = path.join(workspaceDir, 'workspace.jsonc');\n const fileExists = await fs.pathExists(workspaceJsoncPath);\n if (!fileExists) {\n this.logger.debug(`[MCP-DEBUG] workspace.jsonc not found at ${workspaceJsoncPath}`);\n return null;\n }\n\n const content = await fs.readFile(workspaceJsoncPath, 'utf-8');\n return parse(content);\n } catch (error) {\n this.logger.debug(`[MCP-DEBUG] Failed to read workspace.jsonc: ${error}`);\n return null;\n }\n }\n\n /**\n * Extract owner from defaultScope in workspace.jsonc\n * If defaultScope contains a dot, split by dot and take the first part\n */\n private extractOwnerFromWorkspace(workspaceConfig: any): string | null {\n try {\n const workspaceSection = workspaceConfig?.['teambit.workspace/workspace'];\n const defaultScope = workspaceSection?.defaultScope;\n\n if (!defaultScope || typeof defaultScope !== 'string') {\n return null;\n }\n\n // If defaultScope contains a dot, split by dot and take the first part (owner)\n if (defaultScope.includes('.')) {\n const parts = defaultScope.split('.');\n return parts[0];\n }\n\n // If no dot, the entire defaultScope is treated as the owner\n return defaultScope;\n } catch (error) {\n this.logger.debug(`[MCP-DEBUG] Failed to extract owner from workspace config: ${error}`);\n return null;\n }\n }\n\n private registerRemoteSearchTool(server: McpServer) {\n const toolName = 'bit_remote_search';\n const description = `Search for components in remote scopes using parallel queries for efficient discovery. Always provide multiple search terms - either variations/synonyms of one component type, or different components needed for a task. Examples: [\"button\", \"btn\", \"click\"] for variations, or [\"input\", \"button\", \"validation\"] for form components.`;\n const schema: Record<string, any> = {\n queries: z\n .array(z.string())\n .describe(\n `Array of search query strings for parallel searching. Each query should be a single keyword or a few broad keywords. Search for variations/synonyms of one component type, or different components needed for a task. Examples: [\"btn\", \"button\"] for variations, or [\"table\", \"pagination\", \"filter\"] for data display features.`\n ),\n cwd: z.string().optional().describe('Path to workspace directory'),\n owners: z\n .array(z.string())\n .optional()\n .describe(\n 'Filter results by specific owners or organizations. AVOID using this parameter - let the system automatically extract the owner from workspace.jsonc defaultScope for better relevance. Only use when you need to override the automatic behavior or search across different owners'\n ),\n skipAutoOwner: z\n .boolean()\n .optional()\n .describe(\n 'Set to true to disable automatic owner extraction from workspace.jsonc. When false or omitted, the system will try to automatically extract owner from workspace defaultScope'\n ),\n };\n server.tool(toolName, description, schema, async (params: any) => {\n const http = await this.getHttp();\n\n // Validate that queries parameter is provided and valid\n if (!params.queries || !Array.isArray(params.queries) || params.queries.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'Error: queries parameter must be provided as a non-empty array of search terms. Example: [\"button\", \"btn\", \"click\"]',\n },\n ],\n };\n }\n\n const searchQueries = params.queries;\n\n // Determine the owners to use for the search\n let ownersToUse = params.owners && params.owners.length > 0 ? params.owners : undefined;\n\n // If owners not explicitly provided and skipAutoOwner is not true, try to extract from workspace.jsonc\n if (!ownersToUse && !params.skipAutoOwner) {\n try {\n // Use provided cwd parameter or fall back to current working directory\n const workspaceDir = params.cwd || process.cwd();\n this.logger.debug(`[MCP-DEBUG] Attempting to auto-extract owner from workspace.jsonc in: ${workspaceDir}`);\n const workspaceConfig = await this.readWorkspaceJsonc(workspaceDir);\n if (workspaceConfig) {\n const extractedOwner = this.extractOwnerFromWorkspace(workspaceConfig);\n if (extractedOwner) {\n ownersToUse = [extractedOwner];\n this.logger.debug(`[MCP-DEBUG] Auto-extracted owner from workspace.jsonc: ${extractedOwner}`);\n }\n }\n } catch (error) {\n this.logger.debug(`[MCP-DEBUG] Failed to auto-extract owner: ${error}`);\n // Continue without auto-extracted owner\n }\n } else {\n this.logger.debug(\n `[MCP-DEBUG] Using provided owners for search: ${ownersToUse ? ownersToUse.join(', ') : 'none'}`\n );\n }\n\n // Execute searches in parallel\n this.logger.debug(\n `[MCP-DEBUG] Executing ${searchQueries.length} search(es) in parallel: ${searchQueries.join(', ')}`\n );\n\n try {\n const searchPromises = searchQueries.map(async (query: string) => {\n try {\n const result = await http.search(query, ownersToUse);\n return {\n query,\n success: true,\n components: result?.components || [],\n totalCount: result?.components?.length || 0,\n };\n } catch (error) {\n this.logger.warn(`[MCP-DEBUG] Search failed for query \"${query}\": ${(error as Error).message}`);\n return {\n query,\n success: false,\n error: (error as Error).message,\n components: [],\n totalCount: 0,\n };\n }\n });\n\n const searchResults = await Promise.all(searchPromises);\n\n // Process and consolidate results\n const allComponents = new Set<string>();\n const resultsByQuery: any[] = [];\n let totalComponentsFound = 0;\n\n searchResults.forEach((result) => {\n resultsByQuery.push({\n query: result.query,\n success: result.success,\n count: result.totalCount,\n error: result.error || undefined,\n });\n\n if (result.success && result.components.length > 0) {\n result.components.forEach((component: string) => allComponents.add(component));\n totalComponentsFound += result.totalCount;\n }\n });\n\n // Format the consolidated results\n if (allComponents.size === 0) {\n const failedQueries = searchResults.filter((r) => !r.success);\n let message = 'No results found';\n if (failedQueries.length > 0) {\n message += `\\n\\nSome searches failed:`;\n failedQueries.forEach((r) => {\n message += `\\n- \"${r.query}\": ${r.error}`;\n });\n }\n return { content: [{ type: 'text', text: message }] };\n }\n\n // Build the response text\n let responseText = `Found ${allComponents.size} unique components from ${searchQueries.length} parallel search${searchQueries.length > 1 ? 'es' : ''}:\\n\\n`;\n\n // Show per-query results summary\n responseText += 'Search Summary:\\n';\n resultsByQuery.forEach((result) => {\n if (result.success) {\n responseText += `- \"${result.query}\": ${result.count} components\\n`;\n } else {\n responseText += `- \"${result.query}\": FAILED (${result.error})\\n`;\n }\n });\n responseText += '\\nConsolidated Results:\\n';\n\n responseText += Array.from(allComponents).join('\\n');\n\n const formattedResults = {\n type: 'text',\n text: responseText,\n };\n\n this.logger.debug(\n `[MCP-DEBUG] Consolidated search results: ${allComponents.size} unique components from ${totalComponentsFound} total results`\n );\n return { content: [formattedResults] } as CallToolResult;\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error during parallel search execution: ${(error as Error).message}`);\n return { content: [{ type: 'text', text: `Error executing searches: ${(error as Error).message}` }] };\n }\n });\n }\n\n private registerRemoteComponentDetailsTool(server: McpServer) {\n const toolName = 'bit_remote_component_details';\n const description =\n 'Get detailed information about a remote component including basic info and its public API schema. Combines the functionality of show and schema commands for remote components.';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n componentName: z.string().describe('Component name or component ID to get details for'),\n includeSchema: z.boolean().optional().describe('Include component public API schema (default: true)'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { componentName, includeSchema = true, cwd } = params;\n\n // Get basic component information using show command via direct execution\n const showArgs = ['show', componentName, '--remote', '--legacy'];\n const showResult = await this.runBit(showArgs, cwd);\n\n const result: any = {\n componentInfo: showResult.content[0].text,\n };\n\n // Get schema information if requested\n if (includeSchema) {\n try {\n const schemaArgs = ['schema', componentName, '--remote'];\n const schemaResult = await this.runBit(schemaArgs, cwd);\n result.schema = schemaResult.content[0].text;\n } catch (schemaError) {\n this.logger.warn(\n `[MCP-DEBUG] Failed to get schema for ${componentName}: ${(schemaError as Error).message}`\n );\n result.schemaError = `Failed to retrieve schema: ${(schemaError as Error).message}`;\n }\n }\n\n return this.formatAsCallToolResult(result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_remote_component_details tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting remote component details');\n }\n });\n }\n\n private registerWorkspaceInfoTool(server: McpServer) {\n const toolName = 'bit_workspace_info';\n const description =\n 'Get comprehensive workspace information including status, components list, apps, templates, dependency graph, and workspace dependencies';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n includeTemplates: z.boolean().optional().describe('Include templates list (default: false)'),\n includeApps: z.boolean().optional().describe('Include apps list (default: false)'),\n includeGraph: z.boolean().optional().describe('Include dependency graph (default: false)'),\n json: z\n .boolean()\n .optional()\n .describe(\n 'Return output in JSON format - WARNING: This produces verbose output and should be used when structured data is specifically needed (default: false)'\n ),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const includeTemplates = params.includeTemplates === true; // default: false\n const includeApps = params.includeApps === true;\n const includeGraph = params.includeGraph === true;\n const useJson = params.json === true;\n\n const workspaceInfo: any = {};\n const flags = useJson ? { json: true } : {};\n\n const statusExecution = await this.safeBitCommandExecution(\n 'status',\n [],\n flags,\n params.cwd,\n 'get workspace status',\n true\n );\n workspaceInfo.status = statusExecution.result;\n\n const listExecution = await this.safeBitCommandExecution(\n 'list',\n [],\n flags,\n params.cwd,\n 'get components list',\n true\n );\n workspaceInfo.list = listExecution.result;\n\n // Get apps list if requested\n if (includeApps) {\n const appsExecution = await this.safeBitCommandExecution(\n 'app',\n ['list'],\n flags,\n params.cwd,\n 'get apps list',\n true\n );\n workspaceInfo.apps = appsExecution.result;\n }\n\n // Get templates list if requested\n if (includeTemplates) {\n const templatesExecution = await this.safeBitCommandExecution(\n 'templates',\n [],\n flags,\n params.cwd,\n 'get templates list',\n true\n );\n workspaceInfo.templates = templatesExecution.result;\n }\n\n // Get dependency graph if requested\n if (includeGraph) {\n const graphExecution = await this.safeBitCommandExecution(\n 'graph',\n [],\n { json: true },\n params.cwd,\n 'get dependency graph',\n true\n );\n workspaceInfo.graph = graphExecution.result;\n }\n\n // Get workspace dependencies if requested\n try {\n const workspaceDependencies = await this.callBitServerIDEAPI('getWorkspaceDependencies', [], params.cwd);\n workspaceInfo.workspaceDependencies = workspaceDependencies;\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error getting workspace dependencies: ${(error as Error).message}`);\n workspaceInfo.workspaceDependencies = {\n error: `Failed to get workspace dependencies: ${(error as Error).message}`,\n };\n }\n\n // Get current lane name with scope\n try {\n const laneId = await this.callBitServerIDEAPI('getCurrentLaneName', [true], params.cwd);\n workspaceInfo.laneId = laneId;\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error getting current lane name: ${(error as Error).message}`);\n workspaceInfo.laneId = {\n error: `Failed to get current lane name: ${(error as Error).message}`,\n };\n }\n\n return this.formatAsCallToolResult(workspaceInfo);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_workspace_info tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting workspace info');\n }\n });\n }\n\n private registerComponentDetailsTool(server: McpServer) {\n const toolName = 'bit_component_details';\n const description =\n 'Get detailed information about a specific component including basic info and optionally its public API schema';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n componentName: z.string().describe('Component name or component ID to get details for'),\n includeSchema: z.boolean().optional().describe('Include component public API schema (default: false)'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const includeSchema = params.includeSchema === true;\n const componentName = params.componentName;\n\n // Get component details using IDE API with includeSchema parameter\n const ideApiResult = await this.callBitServerIDEAPI(\n 'getCompDetails',\n [componentName, includeSchema],\n params.cwd\n );\n\n return this.formatAsCallToolResult(ideApiResult);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_component_details tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting component details');\n }\n });\n }\n\n private registerCreateTool(server: McpServer) {\n const toolName = 'bit_create';\n const description = 'Create a new component (source files and config) using a template.';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n templateName: z\n .string()\n .describe('The template for generating the component (run \"bit templates\" for a list of available templates)'),\n componentNames: z.array(z.string()).describe('A list of component names to generate'),\n namespace: z.string().optional().describe(\"Sets the component's namespace and nested dirs inside the scope\"),\n scope: z\n .string()\n .optional()\n .describe(\"Sets the component's scope-name. If not entered, the default-scope will be used\"),\n aspect: z\n .string()\n .optional()\n .describe('Aspect-id of the template. Helpful when multiple aspects use the same template name'),\n template: z.string().optional().describe('Env-id of the template. Alias for --aspect'),\n path: z\n .string()\n .optional()\n .describe('Relative path in the workspace. By default the path is <scope>/<namespace>/<name>'),\n env: z\n .string()\n .optional()\n .describe(\"Set the component's environment. (overrides the env from variants and the template)\"),\n force: z.boolean().optional().describe('Replace existing files at the target location'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const args = params.componentNames;\n const flags: Record<string, string | boolean> = {};\n\n // Add optional flags\n if (params.namespace) flags.namespace = params.namespace;\n if (params.scope) flags.scope = params.scope;\n if (params.aspect) flags.aspect = params.aspect;\n if (params.template) flags.template = params.template;\n if (params.path) flags.path = params.path;\n if (params.env) flags.env = params.env;\n if (params.force) flags.force = true;\n\n // Add template name as first argument\n const allArgs = [params.templateName, ...args];\n\n const execution = await this.safeBitCommandExecution('create', allArgs, flags, params.cwd, 'create component');\n return this.formatAsCallToolResult(execution.result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_create tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'creating component');\n }\n });\n }\n\n private registerCommandsListTool(server: McpServer) {\n const toolName = 'bit_commands_list';\n const description =\n 'Get all available Bit commands with descriptions and groups. Use this to discover what commands are available.';\n const schema: Record<string, any> = {\n extendedDescription: z\n .boolean()\n .optional()\n .describe('Include extended descriptions for commands (default: false)'),\n internal: z.boolean().optional().describe('Include internal/debug commands (default: false)'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { extendedDescription = false, internal = false } = params;\n const commandsInfo: any[] = [];\n\n const shouldSkipCommand = (cmd: Command): boolean => {\n return Boolean((cmd.private && !internal) || cmd.description.startsWith('DEPRECATED'));\n };\n\n // Build list of all commands\n this.cli.commands.forEach((cmd) => {\n if (shouldSkipCommand(cmd)) return;\n\n const mainCmdName = getCommandName(cmd);\n const groupKey = cmd.group;\n\n const commandInfo: any = {\n name: mainCmdName,\n description: cmd.description || '',\n };\n\n if (extendedDescription && cmd.extendedDescription) {\n commandInfo.extendedDescription = cmd.extendedDescription;\n }\n if (groupKey) commandInfo.group = this.cli.groups[groupKey] || groupKey;\n\n // Add subcommands summary\n if (cmd.commands && cmd.commands.length > 0) {\n commandInfo.subcommands = cmd.commands\n .filter((subCmd) => !shouldSkipCommand(subCmd))\n .map((subCmd) => ({\n name: getCommandName(subCmd),\n description: subCmd.description || '',\n }));\n }\n\n commandsInfo.push(commandInfo);\n });\n\n commandsInfo.sort((a, b) => a.name.localeCompare(b.name));\n\n const result = JSON.stringify({ total: commandsInfo.length, commands: commandsInfo }, null, 2);\n this.logger.debug(`[MCP-DEBUG] Successfully retrieved commands list. Total: ${commandsInfo.length}`);\n return this.formatAsCallToolResult(result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_commands_list tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting commands list');\n }\n });\n }\n\n private registerCommandHelpTool(server: McpServer) {\n const toolName = 'bit_command_help';\n const description =\n 'Get detailed help for a specific Bit command including syntax, arguments, flags, and usage examples. Use this to understand exactly how to use a command.';\n const schema: Record<string, any> = {\n command: z.string().describe('The command name to get help for (e.g., \"status\", \"install\", \"create\")'),\n subcommand: z\n .string()\n .optional()\n .describe('Optional subcommand name (e.g., for \"lane show\", use command=\"lane\" and subcommand=\"show\")'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { command: requestedCommand, subcommand: requestedSubcommand } = params;\n let commandInfo: any = null;\n\n const buildDetailedCommandInfo = (cmd: Command, parentName?: string) => {\n const cmdName = parentName ? `${parentName} ${getCommandName(cmd)}` : getCommandName(cmd);\n\n const info: any = {\n name: cmdName,\n description: cmd.description || '',\n extendedDescription: cmd.extendedDescription || '',\n group: cmd.group ? this.cli.groups[cmd.group] || cmd.group : '',\n };\n\n // Add arguments information\n const argsData = getArgsData(cmd);\n if (argsData.length > 0) {\n info.arguments = argsData.map((arg) => ({\n name: arg.nameRaw,\n description: arg.description || '',\n required: arg.required,\n isArray: arg.isArray,\n }));\n }\n\n // Add options/flags information\n info.options = getFlagsData(cmd);\n\n // Add examples if available\n if (cmd.examples) {\n info.examples = cmd.examples;\n }\n\n // Add subcommands if available (including private ones for help purposes)\n if (cmd.commands && cmd.commands.length > 0) {\n info.subcommands = cmd.commands.map((subCmd) => ({\n name: getCommandName(subCmd),\n description: subCmd.description || '',\n }));\n }\n\n return info;\n };\n\n // Search for the requested command\n this.cli.commands.forEach((cmd) => {\n const mainCmdName = getCommandName(cmd);\n\n if (requestedSubcommand) {\n // Looking for a subcommand\n if (mainCmdName === requestedCommand && cmd.commands) {\n const subCmd = cmd.commands.find((sub) => getCommandName(sub) === requestedSubcommand);\n if (subCmd) {\n commandInfo = buildDetailedCommandInfo(subCmd, requestedCommand);\n }\n }\n } else {\n // Looking for a main command\n if (mainCmdName === requestedCommand) {\n commandInfo = buildDetailedCommandInfo(cmd);\n }\n }\n });\n\n if (!commandInfo) {\n const commandFullName = requestedSubcommand ? `${requestedCommand} ${requestedSubcommand}` : requestedCommand;\n return this.formatAsCallToolResult(`Command not found: ${commandFullName}`);\n }\n\n const result = JSON.stringify(commandInfo, null, 2);\n this.logger.debug(`[MCP-DEBUG] Successfully retrieved command help for: ${commandInfo.name}`);\n return this.formatAsCallToolResult(result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_command_help tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting command help');\n }\n });\n }\n\n private registerQueryTool(server: McpServer) {\n const toolName = 'bit_query';\n const description =\n 'Execute read-only Bit commands that safely inspect workspace and component state without making modifications. Only whitelisted query commands are allowed for safety.';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n command: z.string().describe('The Bit command to execute (e.g., \"status\", \"show\", \"list\")'),\n args: z.array(z.string()).optional().describe('Arguments to pass to the command'),\n flags: z\n .record(z.union([z.string(), z.boolean()]))\n .optional()\n .describe('Flags to pass to the command as key-value pairs'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { command, args = [], flags = {}, cwd } = params;\n\n // Check if command is in the read-only whitelist\n // Support both single commands and subcommands (e.g., \"lane show\")\n const fullCommand = args.length > 0 ? `${command} ${args[0]}` : command;\n const isAllowed = this.readOnlyCommands.has(command) || this.readOnlyCommands.has(fullCommand);\n\n if (!isAllowed) {\n const allowedCommands = Array.from(this.readOnlyCommands).sort().join(', ');\n return this.formatAsCallToolResult(\n `Error: Command \"${command}\" is not allowed in query mode. Allowed read-only commands: ${allowedCommands}`\n );\n }\n\n // Build command arguments\n const commandArgs = [command, ...args];\n\n // Add flags to arguments\n Object.entries(flags).forEach(([key, value]) => {\n if (typeof value === 'boolean' && value) {\n commandArgs.push(`--${key}`);\n } else if (typeof value === 'string' && value) {\n commandArgs.push(`--${key}`);\n commandArgs.push(value);\n }\n });\n\n this.logger.debug(`[MCP-DEBUG] Executing query command: ${command} with args: ${JSON.stringify(commandArgs)}`);\n\n const execution = await this.safeBitCommandExecution(\n command,\n args,\n flags,\n cwd,\n `execute query command ${command}`\n );\n\n return this.formatAsCallToolResult(execution.result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_query tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'executing query command');\n }\n });\n }\n\n private registerExecuteTool(server: McpServer) {\n const toolName = 'bit_execute';\n const description = 'Execute Bit commands that make changes to workspace or components (not read-only).';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n command: z.string().describe('The Bit command to execute (e.g., \"import\", \"tag\", \"export\", \"remove\")'),\n args: z.array(z.string()).optional().describe('Arguments to pass to the command'),\n flags: z\n .record(z.union([z.string(), z.boolean()]))\n .optional()\n .describe('Flags to pass to the command as key-value pairs'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n let { command, args = [] } = params;\n const { flags = {}, cwd } = params;\n\n // Handle sub-commands: if command has multiple words, move the second word to args\n const commandParts = command.trim().split(/\\s+/);\n if (commandParts.length > 1) {\n command = commandParts[0];\n args = [commandParts[1], ...args];\n }\n\n this.logger.debug(\n `[MCP-DEBUG] Executing command: ${command} with args: ${JSON.stringify(args)} and flags: ${JSON.stringify(flags)}`\n );\n\n const execution = await this.safeBitCommandExecution(command, args, flags, cwd, `execute command ${command}`);\n\n return this.formatAsCallToolResult(execution.result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_execute tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'executing command');\n }\n });\n }\n\n private processSubCommands(server: McpServer, parentCmd: Command, options: CommandFilterOptions) {\n const parentCmdName = getCommandName(parentCmd);\n\n parentCmd.commands?.forEach((subCmd) => {\n const subCmdName = getCommandName(subCmd);\n const fullCmdName = `${parentCmdName} ${subCmdName}`;\n\n if (this.shouldIncludeCommand(fullCmdName, options)) {\n this.registerToolForCommand(server, subCmd, parentCmd);\n }\n });\n }\n\n private async runBit(args: string[], cwd: string): Promise<CallToolResult> {\n this.logger.debug(`[MCP-DEBUG] Running: ${this.bitBin} ${args.join(' ')} in ${cwd}`);\n try {\n const result = childProcess.spawnSync(this.bitBin, args, {\n cwd,\n env: { ...process.env, BIT_DISABLE_SPINNER: '1' },\n encoding: 'utf8',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0) {\n const errorMessage = result.stderr || `Command failed with status ${result.status}`;\n throw new Error(errorMessage);\n }\n\n this.logger.debug(`[MCP-DEBUG] result. stdout: ${result.stdout}`);\n return { content: [{ type: 'text', text: result.stdout }] };\n } catch (error: any) {\n this.logger.error(`[MCP-DEBUG] Error executing ${this.bitBin} ${args.join(' ')}`, error);\n return { content: [{ type: 'text', text: error.message }] };\n }\n }\n\n /**\n * Helper method to execute a bit-server API call with standardized error handling\n */\n private async executeBitServerCommand(\n command: string,\n args: string[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n operationName: string\n ): Promise<any> {\n try {\n const result = await this.callBitServerAPI(command, args, flags, cwd);\n this.logger.debug(`[MCP-DEBUG] Successfully executed ${operationName} via bit-server`);\n return result;\n } catch (error) {\n this.logger.warn(`[MCP-DEBUG] Failed to execute ${operationName} via bit-server: ${(error as Error).message}`);\n throw error;\n }\n }\n\n /**\n * Helper method to format any result as CallToolResult\n */\n private formatAsCallToolResult(result: any): CallToolResult {\n if (typeof result === 'string') {\n return { content: [{ type: 'text', text: result }] } as CallToolResult;\n } else if (typeof result === 'object') {\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] } as CallToolResult;\n } else {\n return { content: [{ type: 'text', text: String(result) }] } as CallToolResult;\n }\n }\n\n /**\n * Helper method to format error as CallToolResult\n */\n private formatErrorAsCallToolResult(error: Error, operation: string): CallToolResult {\n return {\n content: [\n {\n type: 'text',\n text: `Error ${operation}: ${error.message}`,\n },\n ],\n } as CallToolResult;\n }\n\n /**\n * Helper method to safely execute a bit command with error handling\n */\n private async safeBitCommandExecution(\n command: string,\n args: string[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n operationName: string,\n includeErrorInResult = false\n ): Promise<{ success: boolean; result: any; error?: string }> {\n try {\n let result = await this.executeBitServerCommand(command, args, flags, cwd, operationName);\n\n // Unwrap the result from data wrapper if it exists and we have a successful result\n if (result && typeof result === 'object' && 'data' in result && result.data !== undefined) {\n result = result.data;\n }\n\n // Clean up output by removing ANSI color codes when not using JSON format\n const useJson = flags && flags.json === true;\n if (!useJson && typeof result === 'string') {\n result = stripAnsi(result);\n }\n\n return { success: true, result };\n } catch (error) {\n if (includeErrorInResult) {\n return {\n success: false,\n result: { error: `Failed to ${operationName}: ${(error as Error).message}` },\n error: (error as Error).message,\n };\n } else {\n throw error;\n }\n }\n }\n private validateBitBin(bitBin: string): string {\n const trimmed = bitBin?.trim();\n // Check for shell metacharacters and spaces. Protect against command injection.\n if (!trimmed || /[;&|`$(){}[\\]<>'\"\\\\]/.test(trimmed) || /\\s/.test(trimmed)) throw new Error('Invalid bitBin');\n return trimmed;\n }\n\n // Setup command business logic methods\n getEditorDisplayName(editor: string): string {\n return McpConfigWriter.getEditorDisplayName(editor);\n }\n\n /**\n * Get the path to the editor config file based on editor type and scope\n */\n getEditorConfigPath(editor: string, isGlobal: boolean, workspaceDir?: string): string {\n return McpConfigWriter.getEditorConfigPath(editor, isGlobal, workspaceDir);\n }\n\n async setupEditor(editor: string, options: SetupOptions, workspaceDir?: string): Promise<void> {\n // Add workspaceDir to options if provided\n const setupOptions: SetupOptions = { ...options };\n if (workspaceDir) {\n setupOptions.workspaceDir = workspaceDir;\n }\n\n await McpConfigWriter.setupEditor(editor, setupOptions);\n }\n\n async writeRulesFile(editor: string, options: RulesOptions, workspaceDir?: string): Promise<void> {\n // Add workspaceDir to options if provided\n const rulesOptions: RulesOptions = { ...options };\n if (workspaceDir) {\n rulesOptions.workspaceDir = workspaceDir;\n }\n\n await McpConfigWriter.writeRulesFile(editor, rulesOptions);\n }\n\n async getRulesContent(consumerProject: boolean = false, forceStandard: boolean = false): Promise<string> {\n return McpConfigWriter.getDefaultRulesContent(consumerProject, process.cwd(), forceStandard);\n }\n\n static slots = [];\n static dependencies = [CLIAspect, LoggerAspect];\n static runtime = MainRuntime;\n static async provider([cli, loggerMain]: [CLIMain, LoggerMain]) {\n const logger = loggerMain.createLogger(CliMcpServerAspect.id);\n const mcpServer = new CliMcpServerMain(cli, logger);\n const mcpServerCmd = new McpServerCmd(mcpServer);\n mcpServerCmd.commands = [new McpStartCmd(mcpServer), new McpSetupCmd(mcpServer), new McpRulesCmd(mcpServer)];\n cli.register(mcpServerCmd);\n return mcpServer;\n }\n}\n\nCliMcpServerAspect.addRuntime(CliMcpServerMain);\n\nexport default CliMcpServerMain;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_cli","data","require","_child_process","_interopRequireDefault","_stripAnsi","_fsExtra","_commentJson","_path","_cliMcpServer","_mcpServer","_mcp","_stdio","_zod","_logger","_scope","_legacy","_nodeFetch","_setupCmd","_rulesCmd","_mcp2","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CliMcpServerMain","constructor","cli","logger","Set","bitBin","validateBitBin","getHttp","_http","Http","connect","SYMPHONY_GRAPHQL","CENTRAL_BIT_HUB_NAME","getBitServerPort","cwd","skipValidatePortFlag","args","result","childProcess","spawnSync","env","process","BIT_CLI_SERVER","encoding","error","status","Error","stderr","existingPort","stdout","trim","undefined","parseInt","err","message","startBitServer","debug","Promise","resolve","reject","serverProcess","spawn","stdio","detached","serverStarted","outputBuffer","timeout","setTimeout","kill","on","output","toString","includes","clearTimeout","portMatch","match","port","serverPort","serverUrl","code","signal","killServerProcess","killed","exit","callBitServerAPI","command","flags","isReTrying","callBitServerAPIWithRoute","callBitServerIDEAPI","method","route","commandOrMethod","argsOrParams","isIDERoute","startedPort","realCwd","fs","realpathSync","body","url","commandArray","key","entries","pwd","response","fetch","headers","JSON","stringify","ok","errorMessage","statusText","errorJson","json","runMcpServer","options","commands","alwaysExcludeTools","additionalCommandsSet","includeAdditional","split","map","cmd","Array","from","join","server","McpServer","name","version","consumerProjectTools","consumerProject","Boolean","isConsumerProjectMode","filterOptions","cmdName","getCommandName","shouldIncludeCommand","registerToolForCommand","processSubCommands","registerRemoteSearchTool","registerRemoteComponentDetailsTool","registerWorkspaceInfoTool","registerComponentDetailsTool","registerCreateTool","registerCommandsListTool","registerCommandHelpTool","registerQueryTool","registerExecuteTool","StdioServerTransport","has","shouldInclude","buildZodSchema","config","schema","z","string","describe","argsData","arg","desc","description","nameRaw","isArray","nameCamelCase","required","array","optional","flagsData","flag","type","boolean","buildCommandArgs","params","val","item","stringValue","getToolName","replace","parentCmd","toolName","extendedDescription","getArgsData","getFlagsData","tool","argsToRun","runBit","readWorkspaceJsonc","workspaceDir","workspaceJsoncPath","path","fileExists","pathExists","content","readFile","parse","extractOwnerFromWorkspace","workspaceConfig","workspaceSection","defaultScope","parts","queries","owners","skipAutoOwner","http","text","searchQueries","ownersToUse","extractedOwner","searchPromises","query","search","success","components","totalCount","warn","searchResults","all","allComponents","resultsByQuery","totalComponentsFound","count","component","add","size","failedQueries","responseText","formattedResults","componentName","includeSchema","showArgs","showResult","componentInfo","schemaArgs","schemaResult","schemaError","formatAsCallToolResult","formatErrorAsCallToolResult","includeTemplates","includeApps","includeGraph","useJson","workspaceInfo","statusExecution","safeBitCommandExecution","listExecution","list","appsExecution","apps","templatesExecution","templates","graphExecution","graph","workspaceDependencies","laneId","componentIds","maxComponents","detailPromises","componentId","details","detailResults","successfulResults","failedResults","summary","requested","successful","failed","failures","templateName","componentNames","namespace","scope","aspect","template","force","allArgs","execution","internal","commandsInfo","shouldSkipCommand","private","startsWith","mainCmdName","groupKey","group","commandInfo","groups","subcommands","subCmd","sort","a","b","localeCompare","total","subcommand","requestedCommand","requestedSubcommand","buildDetailedCommandInfo","parentName","info","examples","find","sub","commandFullName","record","union","fullCommand","isAllowed","readOnlyCommands","allowedCommands","commandArgs","commandParts","parentCmdName","subCmdName","fullCmdName","BIT_DISABLE_SPINNER","executeBitServerCommand","operationName","operation","includeErrorInResult","stripAnsi","trimmed","test","getEditorDisplayName","editor","McpConfigWriter","getEditorConfigPath","isGlobal","setupEditor","setupOptions","writeRulesFile","rulesOptions","getRulesContent","forceStandard","getDefaultRulesContent","provider","loggerMain","createLogger","CliMcpServerAspect","id","mcpServer","mcpServerCmd","McpServerCmd","McpStartCmd","McpSetupCmd","McpRulesCmd","register","exports","CLIAspect","LoggerAspect","MainRuntime","addRuntime","_default"],"sources":["cli-mcp-server.main.runtime.ts"],"sourcesContent":["/* eslint-disable import/extensions */\n/* eslint-disable import/no-unresolved */\n\nimport type { CLIMain, Command } from '@teambit/cli';\nimport { CLIAspect, getArgsData, getCommandName, getFlagsData, MainRuntime } from '@teambit/cli';\nimport childProcess from 'child_process';\nimport stripAnsi from 'strip-ansi';\nimport fs from 'fs-extra';\nimport { parse } from 'comment-json';\nimport path from 'path';\nimport { CliMcpServerAspect } from './cli-mcp-server.aspect';\nimport { McpServerCmd, McpStartCmd } from './mcp-server.cmd';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport { Http } from '@teambit/scope.network';\nimport { CENTRAL_BIT_HUB_NAME, SYMPHONY_GRAPHQL } from '@teambit/legacy.constants';\nimport fetch from 'node-fetch';\nimport { McpSetupCmd } from './setup-cmd';\nimport { McpRulesCmd } from './rules-cmd';\nimport type { SetupOptions, RulesOptions } from '@teambit/mcp.mcp-config-writer';\nimport { McpConfigWriter } from '@teambit/mcp.mcp-config-writer';\n\ninterface CommandFilterOptions {\n additionalCommandsSet?: Set<string>;\n alwaysExcludeTools: Set<string>;\n consumerProject: boolean;\n consumerProjectTools: Set<string>;\n}\n\ninterface CommandConfig {\n name: string;\n description: string;\n argsData: ReturnType<typeof getArgsData>;\n flagsData: ReturnType<typeof getFlagsData>;\n}\n\nexport class CliMcpServerMain {\n private bitBin = 'bit';\n private _http: Http;\n private isConsumerProjectMode: boolean = false;\n private serverPort?: number;\n private serverUrl?: string;\n private serverProcess: childProcess.ChildProcess | null = null;\n\n // Whitelist of commands that are considered read-only/query operations\n private readonly readOnlyCommands = new Set([\n 'status',\n 'list',\n 'info',\n 'show',\n 'schema',\n 'artifacts',\n 'diff',\n 'log',\n 'graph',\n 'deps get',\n 'deps blame',\n 'why',\n 'config get',\n 'envs list',\n 'envs get',\n 'remote list',\n 'templates',\n 'cat-component',\n 'cat-lane',\n 'cat-object',\n 'cat-scope',\n 'lane show',\n 'lane list',\n 'lane diff',\n 'lane history',\n 'lane history-diff',\n 'test',\n 'help',\n 'version',\n ]);\n\n constructor(\n private cli: CLIMain,\n private logger: Logger\n ) {\n // Validate the default bitBin on construction\n this.bitBin = this.validateBitBin(this.bitBin);\n }\n\n async getHttp(): Promise<Http> {\n if (!this._http) {\n this._http = await Http.connect(SYMPHONY_GRAPHQL, CENTRAL_BIT_HUB_NAME);\n }\n return this._http;\n }\n\n private async getBitServerPort(cwd: string, skipValidatePortFlag = false): Promise<number | undefined> {\n try {\n const args = ['cli-server-port'];\n if (skipValidatePortFlag) {\n args.push(String(skipValidatePortFlag));\n }\n\n const result = childProcess.spawnSync(this.bitBin, args, {\n cwd,\n env: { ...process.env, BIT_CLI_SERVER: 'true' },\n encoding: 'utf8',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0) {\n throw new Error(`Command failed with status ${result.status}: ${result.stderr}`);\n }\n\n const existingPort = result.stdout.trim();\n if (!existingPort) return undefined;\n return parseInt(existingPort, 10);\n } catch (err: any) {\n this.logger.error(`[MCP-DEBUG] error getting existing port from bit server at ${cwd}. err: ${err.message}`);\n return undefined;\n }\n }\n\n /**\n * Start a new bit-server process\n */\n private async startBitServer(cwd: string): Promise<number | null> {\n this.logger.debug('[MCP-DEBUG] Starting new bit-server process');\n\n return new Promise((resolve, reject) => {\n try {\n const serverProcess = childProcess.spawn(this.bitBin, ['server'], {\n cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n detached: false,\n });\n\n this.serverProcess = serverProcess;\n\n let serverStarted = false;\n let outputBuffer = '';\n\n const timeout = setTimeout(() => {\n if (!serverStarted) {\n this.logger.error('[MCP-DEBUG] Timeout waiting for bit-server to start');\n serverProcess.kill();\n resolve(null);\n }\n }, 30000); // 30 second timeout\n\n serverProcess.stdout?.on('data', (data) => {\n const output = data.toString();\n outputBuffer += output;\n this.logger.debug(`[MCP-DEBUG] bit-server stdout: ${output}`);\n if (output.includes('listening on port')) {\n clearTimeout(timeout);\n if (!serverStarted) {\n serverStarted = true;\n // Extract the port from the output\n const portMatch = output.match(/listening on port (\\d+)/);\n if (portMatch && portMatch[1]) {\n const port = parseInt(portMatch[1], 10);\n this.logger.debug(`[MCP-DEBUG] bit-server started on port ${port}`);\n this.serverPort = port;\n this.serverUrl = `http://localhost:${port}/api`;\n resolve(port);\n }\n }\n }\n });\n\n serverProcess.stderr?.on('data', (data) => {\n const error = data.toString();\n outputBuffer += error;\n this.logger.debug(`[MCP-DEBUG] bit-server stderr: ${error}`);\n });\n\n serverProcess.on('error', (err) => {\n clearTimeout(timeout);\n this.logger.error(`[MCP-DEBUG] Failed to start bit-server: ${err.message}`);\n reject(err);\n });\n\n serverProcess.on('exit', (code, signal) => {\n clearTimeout(timeout);\n if (!serverStarted) {\n this.logger.error(`[MCP-DEBUG] bit-server exited with code ${code}, signal ${signal}`);\n this.logger.debug(`[MCP-DEBUG] bit-server output: ${outputBuffer}`);\n resolve(null);\n }\n });\n\n const killServerProcess = () => {\n if (this.serverProcess && !this.serverProcess.killed) {\n this.logger.debug('[MCP-DEBUG] Killing bit-server process');\n this.serverProcess.kill();\n }\n };\n\n // Handle process cleanup\n process.on('exit', () => {\n killServerProcess();\n });\n\n process.on('SIGINT', () => {\n killServerProcess();\n process.exit();\n });\n\n process.on('SIGTERM', () => {\n killServerProcess();\n process.exit();\n });\n } catch (err) {\n this.logger.error(`[MCP-DEBUG] Error spawning bit-server: ${(err as Error).message}`);\n reject(err);\n }\n });\n }\n\n /**\n * Call bit-server API endpoint using cli-raw route\n */\n private async callBitServerAPI(\n command: string,\n args: string[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n isReTrying = false\n ): Promise<any> {\n return this.callBitServerAPIWithRoute('cli-raw', command, args, flags, cwd, isReTrying);\n }\n\n /**\n * Call bit-server API endpoint using IDE route\n */\n private async callBitServerIDEAPI(method: string, args: any[] = [], cwd: string, isReTrying = false): Promise<any> {\n return this.callBitServerAPIWithRoute('ide', method, args, {}, cwd, isReTrying, true);\n }\n\n /**\n * Generic method to call bit-server API with different routes\n */\n private async callBitServerAPIWithRoute(\n route: string,\n commandOrMethod: string,\n argsOrParams: any[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n isReTrying = false,\n isIDERoute = false\n ): Promise<any> {\n if (!this.serverPort) {\n if (!cwd) throw new Error('CWD is required to call bit-server API');\n this.serverPort = await this.getBitServerPort(cwd);\n if (this.serverPort) {\n this.serverUrl = `http://localhost:${this.serverPort}/api`;\n } else {\n // No server running, try to start one\n this.logger.debug('[MCP-DEBUG] No bit-server found, attempting to start one');\n const startedPort = await this.startBitServer(cwd);\n if (startedPort) {\n this.serverPort = startedPort;\n this.serverUrl = `http://localhost:${this.serverPort}/api`;\n }\n }\n }\n\n if (!this.serverUrl) {\n throw new Error('Unable to connect to bit-server. Please ensure you are in a valid Bit workspace.');\n }\n\n // Resolve the real path to handle symlinks (e.g., /tmp -> /private/tmp on macOS)\n const realCwd = fs.realpathSync(cwd);\n\n let body: any;\n let url: string;\n\n if (isIDERoute) {\n // For IDE route, use the method name and args directly\n body = {\n args: argsOrParams,\n };\n url = `${this.serverUrl}/${route}/${commandOrMethod}`;\n } else {\n // For CLI route, build command array with flags\n const commandArray = [commandOrMethod, ...argsOrParams];\n\n // Convert flags to command line arguments\n for (const [key, value] of Object.entries(flags)) {\n if (value === true) {\n commandArray.push(`--${key}`);\n } else if (value !== false && value !== undefined) {\n commandArray.push(`--${key}`, String(value));\n }\n }\n\n body = {\n command: commandArray,\n pwd: realCwd,\n };\n url = `${this.serverUrl}/${route}`;\n }\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n try {\n const errorJson = await response.json();\n errorMessage = errorJson.message || errorJson || errorMessage;\n } catch {\n // Ignore JSON parse errors\n }\n throw new Error(errorMessage);\n }\n\n return await response.json();\n } catch (err: any) {\n if (err.code === 'ECONNREFUSED' && !isReTrying) {\n // Server is no longer running, reset cached values and try to restart\n this.serverPort = undefined;\n this.serverUrl = undefined;\n this.logger.debug('[MCP-DEBUG] Connection refused, attempting to restart bit-server');\n return this.callBitServerAPIWithRoute(route, commandOrMethod, argsOrParams, flags, cwd, true, isIDERoute);\n }\n throw err;\n }\n }\n\n async runMcpServer(options: { includeAdditional?: string; bitBin?: string; consumerProject?: boolean }) {\n this.logger.debug(\n `[MCP-DEBUG] Starting MCP server with options: ${JSON.stringify(options)}. CWD: ${process.cwd()}`\n );\n const commands = this.cli.commands;\n\n // Validate and set bitBin with security checks\n if (options.bitBin) {\n this.bitBin = this.validateBitBin(options.bitBin);\n }\n // If no bitBin provided, keep the default 'bit'\n\n // Tools to always exclude\n const alwaysExcludeTools = new Set([\n 'login',\n 'logout',\n 'completion',\n 'mcp-server',\n 'start',\n 'run-action',\n 'watch',\n 'run',\n 'resume-export',\n 'server',\n 'serve-preview',\n ]);\n\n // Parse command strings from flag options\n let additionalCommandsSet: Set<string> | undefined;\n if (options.includeAdditional) {\n additionalCommandsSet = new Set(options.includeAdditional.split(',').map((cmd) => cmd.trim()));\n this.logger.debug(`[MCP-DEBUG] Including additional commands: ${Array.from(additionalCommandsSet).join(', ')}`);\n }\n\n const server = new McpServer({\n name: 'bit-cli-mcp',\n version: '0.0.1',\n });\n\n // Set of tools for consumer projects (non-Bit workspaces)\n const consumerProjectTools = new Set<string>();\n\n const consumerProject = Boolean(options.consumerProject);\n\n // Store consumer project mode globally in the class\n this.isConsumerProjectMode = consumerProject;\n\n // Validate flags combination\n if (consumerProject) {\n this.logger.debug(\n `[MCP-DEBUG] Running MCP server in consumer project mode (for non-Bit workspaces) with tools: bit_remote_search, bit_remote_component_details`\n );\n if (options.includeAdditional) {\n this.logger.debug(\n `[MCP-DEBUG] Additional tools enabled in consumer project mode: ${options.includeAdditional}`\n );\n }\n }\n\n const filterOptions: CommandFilterOptions = {\n additionalCommandsSet,\n alwaysExcludeTools,\n consumerProject,\n consumerProjectTools,\n };\n\n commands.forEach((cmd) => {\n const cmdName = getCommandName(cmd);\n\n if (this.shouldIncludeCommand(cmdName, filterOptions)) {\n this.registerToolForCommand(server, cmd);\n }\n\n // Process sub-commands\n if (cmd.commands && cmd.commands.length) {\n this.processSubCommands(server, cmd, filterOptions);\n }\n });\n\n // Always register remote-search tool\n this.registerRemoteSearchTool(server);\n\n // In consumer project mode, only register bit_remote_search and bit_remote_component_details\n // All other tools should not be available in consumer project mode\n if (consumerProject) {\n // Register the new combined remote component details tool\n this.registerRemoteComponentDetailsTool(server);\n } else {\n // Register the bit_workspace_info tool\n this.registerWorkspaceInfoTool(server);\n\n // Register the bit_component_details tool\n this.registerComponentDetailsTool(server);\n\n // Register the bit_create tool\n this.registerCreateTool(server);\n\n // Register command discovery and help tools\n this.registerCommandsListTool(server);\n this.registerCommandHelpTool(server);\n\n this.registerQueryTool(server);\n this.registerExecuteTool(server);\n }\n\n await server.connect(new StdioServerTransport());\n }\n\n private shouldIncludeCommand(cmdName: string, options: CommandFilterOptions): boolean {\n // Always exclude certain commands\n if (options.alwaysExcludeTools.has(cmdName)) return false;\n\n // Consumer project mode: only include consumer project tools + any additional specified\n if (options.consumerProject) {\n const shouldInclude =\n options.consumerProjectTools.has(cmdName) || (options.additionalCommandsSet?.has(cmdName) ?? false);\n if (shouldInclude) {\n this.logger.debug(`[MCP-DEBUG] Including command in consumer project mode: ${cmdName}`);\n }\n return shouldInclude;\n }\n\n // Default mode: only include additional specified commands (no default tools anymore)\n return options.additionalCommandsSet?.has(cmdName) ?? false;\n }\n\n private buildZodSchema(config: CommandConfig): Record<string, any> {\n const schema: Record<string, any> = {\n // Add cwd parameter as mandatory to all commands\n cwd: z.string().describe('Path to workspace'),\n };\n\n config.argsData.forEach((arg) => {\n const desc = arg.description || `Positional argument: ${arg.nameRaw}`;\n if (arg.isArray) {\n schema[arg.nameCamelCase] = arg.required\n ? z.array(z.string()).describe(desc)\n : z.array(z.string()).optional().describe(desc);\n } else {\n schema[arg.nameCamelCase] = arg.required ? z.string().describe(desc) : z.string().optional().describe(desc);\n }\n });\n\n config.flagsData.forEach((flag) => {\n const type = flag.type;\n schema[flag.name] =\n type === 'string'\n ? z.string().optional().describe(flag.description)\n : z.boolean().optional().describe(flag.description);\n });\n\n return schema;\n }\n\n private buildCommandArgs(config: CommandConfig, params: any): string[] {\n // Split the command name on spaces to properly handle subcommands\n const args: string[] = config.name.split(' ');\n\n // Add positional arguments in order\n config.argsData.forEach((arg) => {\n const val = params[arg.nameCamelCase];\n if (val === undefined) return;\n\n if (arg.isArray && Array.isArray(val)) {\n val.forEach((item) => args.push(item));\n } else {\n args.push(val);\n }\n });\n\n // Add options as flags\n config.flagsData.forEach((flag) => {\n const name = flag.name;\n const type = flag.type;\n const val = params[name];\n if (val === undefined) return;\n if (type === 'boolean' && val) {\n args.push(`--${name}`);\n } else if (type === 'string' && val) {\n // Check if the string value contains spaces and quote it if necessary\n const stringValue = String(val);\n if (stringValue.includes(' ')) {\n args.push(`--${name}`, `\"${stringValue}\"`);\n } else {\n args.push(`--${name}`, stringValue);\n }\n }\n });\n\n return args;\n }\n\n private getToolName(name: string): string {\n // replace white spaces (\\s) and dashes (-) with underscores (_)\n return `bit_${name}`.replace(/[-\\s]/g, '_');\n }\n\n private registerToolForCommand(server: McpServer, cmd: Command, parentCmd?: Command) {\n const cmdName = parentCmd ? `${getCommandName(parentCmd)} ${getCommandName(cmd)}` : getCommandName(cmd);\n const toolName = this.getToolName(cmdName);\n\n // Modify description for show and schema commands in consumer project mode\n let description = `${cmd.description}${cmd.extendedDescription ? `.\\n(${cmd.extendedDescription})` : ''}`;\n if (this.isConsumerProjectMode && (cmdName === 'show' || cmdName === 'schema')) {\n description += `\\n(In consumer project mode, --remote flag is automatically added)`;\n }\n\n const config: CommandConfig = {\n name: cmdName,\n description,\n argsData: getArgsData(cmd),\n flagsData: getFlagsData(cmd),\n };\n\n const schema = this.buildZodSchema(config);\n\n server.tool(toolName, config.description, schema, async (params: any) => {\n const argsToRun = this.buildCommandArgs(config, params);\n\n // Special handling for consumer projects - auto-add --remote flag for show and schema commands\n if (this.isConsumerProjectMode && (cmdName === 'show' || cmdName === 'schema')) {\n if (!argsToRun.includes('--remote')) {\n this.logger.debug(`[MCP-DEBUG] Auto-adding --remote flag for ${cmdName} in consumer project mode`);\n argsToRun.push('--remote');\n }\n if (cmdName === 'show' && !argsToRun.includes('--legacy')) {\n this.logger.debug(`[MCP-DEBUG] Auto-adding --legacy flag for ${cmdName} in consumer project mode`);\n argsToRun.push('--legacy');\n }\n }\n\n return this.runBit(argsToRun, params.cwd);\n });\n }\n\n /**\n * Read and parse workspace.jsonc file from a given directory\n */\n private async readWorkspaceJsonc(workspaceDir: string): Promise<any> {\n try {\n const workspaceJsoncPath = path.join(workspaceDir, 'workspace.jsonc');\n const fileExists = await fs.pathExists(workspaceJsoncPath);\n if (!fileExists) {\n this.logger.debug(`[MCP-DEBUG] workspace.jsonc not found at ${workspaceJsoncPath}`);\n return null;\n }\n\n const content = await fs.readFile(workspaceJsoncPath, 'utf-8');\n return parse(content);\n } catch (error) {\n this.logger.debug(`[MCP-DEBUG] Failed to read workspace.jsonc: ${error}`);\n return null;\n }\n }\n\n /**\n * Extract owner from defaultScope in workspace.jsonc\n * If defaultScope contains a dot, split by dot and take the first part\n */\n private extractOwnerFromWorkspace(workspaceConfig: any): string | null {\n try {\n const workspaceSection = workspaceConfig?.['teambit.workspace/workspace'];\n const defaultScope = workspaceSection?.defaultScope;\n\n if (!defaultScope || typeof defaultScope !== 'string') {\n return null;\n }\n\n // If defaultScope contains a dot, split by dot and take the first part (owner)\n if (defaultScope.includes('.')) {\n const parts = defaultScope.split('.');\n return parts[0];\n }\n\n // If no dot, the entire defaultScope is treated as the owner\n return defaultScope;\n } catch (error) {\n this.logger.debug(`[MCP-DEBUG] Failed to extract owner from workspace config: ${error}`);\n return null;\n }\n }\n\n private registerRemoteSearchTool(server: McpServer) {\n const toolName = 'bit_remote_search';\n const description = `Search for components in remote scopes using parallel queries for efficient discovery. Always provide multiple search terms - either variations/synonyms of one component type, or different components needed for a task. Examples: [\"button\", \"btn\", \"click\"] for variations, or [\"input\", \"button\", \"validation\"] for form components.`;\n const schema: Record<string, any> = {\n queries: z\n .array(z.string())\n .describe(\n `Array of search query strings for parallel searching. Each query should be a single keyword or a few broad keywords. Search for variations/synonyms of one component type, or different components needed for a task. Examples: [\"btn\", \"button\"] for variations, or [\"table\", \"pagination\", \"filter\"] for data display features.`\n ),\n cwd: z.string().optional().describe('Path to workspace directory'),\n owners: z\n .array(z.string())\n .optional()\n .describe(\n 'Filter results by specific owners or organizations. AVOID using this parameter - let the system automatically extract the owner from workspace.jsonc defaultScope for better relevance. Only use when you need to override the automatic behavior or search across different owners'\n ),\n skipAutoOwner: z\n .boolean()\n .optional()\n .describe(\n 'Set to true to disable automatic owner extraction from workspace.jsonc. When false or omitted, the system will try to automatically extract owner from workspace defaultScope'\n ),\n };\n server.tool(toolName, description, schema, async (params: any) => {\n const http = await this.getHttp();\n\n // Validate that queries parameter is provided and valid\n if (!params.queries || !Array.isArray(params.queries) || params.queries.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'Error: queries parameter must be provided as a non-empty array of search terms. Example: [\"button\", \"btn\", \"click\"]',\n },\n ],\n };\n }\n\n const searchQueries = params.queries;\n\n // Determine the owners to use for the search\n let ownersToUse = params.owners && params.owners.length > 0 ? params.owners : undefined;\n\n // If owners not explicitly provided and skipAutoOwner is not true, try to extract from workspace.jsonc\n if (!ownersToUse && !params.skipAutoOwner) {\n try {\n // Use provided cwd parameter or fall back to current working directory\n const workspaceDir = params.cwd || process.cwd();\n this.logger.debug(`[MCP-DEBUG] Attempting to auto-extract owner from workspace.jsonc in: ${workspaceDir}`);\n const workspaceConfig = await this.readWorkspaceJsonc(workspaceDir);\n if (workspaceConfig) {\n const extractedOwner = this.extractOwnerFromWorkspace(workspaceConfig);\n if (extractedOwner) {\n ownersToUse = [extractedOwner];\n this.logger.debug(`[MCP-DEBUG] Auto-extracted owner from workspace.jsonc: ${extractedOwner}`);\n }\n }\n } catch (error) {\n this.logger.debug(`[MCP-DEBUG] Failed to auto-extract owner: ${error}`);\n // Continue without auto-extracted owner\n }\n } else {\n this.logger.debug(\n `[MCP-DEBUG] Using provided owners for search: ${ownersToUse ? ownersToUse.join(', ') : 'none'}`\n );\n }\n\n // Execute searches in parallel\n this.logger.debug(\n `[MCP-DEBUG] Executing ${searchQueries.length} search(es) in parallel: ${searchQueries.join(', ')}`\n );\n\n try {\n const searchPromises = searchQueries.map(async (query: string) => {\n try {\n const result = await http.search(query, ownersToUse);\n return {\n query,\n success: true,\n components: result?.components || [],\n totalCount: result?.components?.length || 0,\n };\n } catch (error) {\n this.logger.warn(`[MCP-DEBUG] Search failed for query \"${query}\": ${(error as Error).message}`);\n return {\n query,\n success: false,\n error: (error as Error).message,\n components: [],\n totalCount: 0,\n };\n }\n });\n\n const searchResults = await Promise.all(searchPromises);\n\n // Process and consolidate results\n const allComponents = new Set<string>();\n const resultsByQuery: any[] = [];\n let totalComponentsFound = 0;\n\n searchResults.forEach((result) => {\n resultsByQuery.push({\n query: result.query,\n success: result.success,\n count: result.totalCount,\n error: result.error || undefined,\n });\n\n if (result.success && result.components.length > 0) {\n result.components.forEach((component: string) => allComponents.add(component));\n totalComponentsFound += result.totalCount;\n }\n });\n\n // Format the consolidated results\n if (allComponents.size === 0) {\n const failedQueries = searchResults.filter((r) => !r.success);\n let message = 'No results found';\n if (failedQueries.length > 0) {\n message += `\\n\\nSome searches failed:`;\n failedQueries.forEach((r) => {\n message += `\\n- \"${r.query}\": ${r.error}`;\n });\n }\n return { content: [{ type: 'text', text: message }] };\n }\n\n // Build the response text\n let responseText = `Found ${allComponents.size} unique components from ${searchQueries.length} parallel search${searchQueries.length > 1 ? 'es' : ''}:\\n\\n`;\n\n // Show per-query results summary\n responseText += 'Search Summary:\\n';\n resultsByQuery.forEach((result) => {\n if (result.success) {\n responseText += `- \"${result.query}\": ${result.count} components\\n`;\n } else {\n responseText += `- \"${result.query}\": FAILED (${result.error})\\n`;\n }\n });\n responseText += '\\nConsolidated Results:\\n';\n\n responseText += Array.from(allComponents).join('\\n');\n\n const formattedResults = {\n type: 'text',\n text: responseText,\n };\n\n this.logger.debug(\n `[MCP-DEBUG] Consolidated search results: ${allComponents.size} unique components from ${totalComponentsFound} total results`\n );\n return { content: [formattedResults] } as CallToolResult;\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error during parallel search execution: ${(error as Error).message}`);\n return { content: [{ type: 'text', text: `Error executing searches: ${(error as Error).message}` }] };\n }\n });\n }\n\n private registerRemoteComponentDetailsTool(server: McpServer) {\n const toolName = 'bit_remote_component_details';\n const description =\n 'Get detailed information about a remote component including basic info and its public API schema. Combines the functionality of show and schema commands for remote components.';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n componentName: z.string().describe('Component name or component ID to get details for'),\n includeSchema: z.boolean().optional().describe('Include component public API schema (default: true)'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { componentName, includeSchema = true, cwd } = params;\n\n // Get basic component information using show command via direct execution\n const showArgs = ['show', componentName, '--remote', '--legacy'];\n const showResult = await this.runBit(showArgs, cwd);\n\n const result: any = {\n componentInfo: showResult.content[0].text,\n };\n\n // Get schema information if requested\n if (includeSchema) {\n try {\n const schemaArgs = ['schema', componentName, '--remote'];\n const schemaResult = await this.runBit(schemaArgs, cwd);\n result.schema = schemaResult.content[0].text;\n } catch (schemaError) {\n this.logger.warn(\n `[MCP-DEBUG] Failed to get schema for ${componentName}: ${(schemaError as Error).message}`\n );\n result.schemaError = `Failed to retrieve schema: ${(schemaError as Error).message}`;\n }\n }\n\n return this.formatAsCallToolResult(result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_remote_component_details tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting remote component details');\n }\n });\n }\n\n private registerWorkspaceInfoTool(server: McpServer) {\n const toolName = 'bit_workspace_info';\n const description =\n 'Get comprehensive workspace information including status, components list, apps, templates, dependency graph, and workspace dependencies';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n includeTemplates: z.boolean().optional().describe('Include templates list (default: false)'),\n includeApps: z.boolean().optional().describe('Include apps list (default: false)'),\n includeGraph: z.boolean().optional().describe('Include dependency graph (default: false)'),\n json: z\n .boolean()\n .optional()\n .describe(\n 'Return output in JSON format - WARNING: This produces verbose output and should be used when structured data is specifically needed (default: false)'\n ),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const includeTemplates = params.includeTemplates === true; // default: false\n const includeApps = params.includeApps === true;\n const includeGraph = params.includeGraph === true;\n const useJson = params.json === true;\n\n const workspaceInfo: any = {};\n const flags = useJson ? { json: true } : {};\n\n const statusExecution = await this.safeBitCommandExecution(\n 'status',\n [],\n flags,\n params.cwd,\n 'get workspace status',\n true\n );\n workspaceInfo.status = statusExecution.result;\n\n const listExecution = await this.safeBitCommandExecution(\n 'list',\n [],\n flags,\n params.cwd,\n 'get components list',\n true\n );\n workspaceInfo.list = listExecution.result;\n\n // Get apps list if requested\n if (includeApps) {\n const appsExecution = await this.safeBitCommandExecution(\n 'app',\n ['list'],\n flags,\n params.cwd,\n 'get apps list',\n true\n );\n workspaceInfo.apps = appsExecution.result;\n }\n\n // Get templates list if requested\n if (includeTemplates) {\n const templatesExecution = await this.safeBitCommandExecution(\n 'templates',\n [],\n flags,\n params.cwd,\n 'get templates list',\n true\n );\n workspaceInfo.templates = templatesExecution.result;\n }\n\n // Get dependency graph if requested\n if (includeGraph) {\n const graphExecution = await this.safeBitCommandExecution(\n 'graph',\n [],\n { json: true },\n params.cwd,\n 'get dependency graph',\n true\n );\n workspaceInfo.graph = graphExecution.result;\n }\n\n // Get workspace dependencies if requested\n try {\n const workspaceDependencies = await this.callBitServerIDEAPI('getWorkspaceDependencies', [], params.cwd);\n workspaceInfo.workspaceDependencies = workspaceDependencies;\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error getting workspace dependencies: ${(error as Error).message}`);\n workspaceInfo.workspaceDependencies = {\n error: `Failed to get workspace dependencies: ${(error as Error).message}`,\n };\n }\n\n // Get current lane name with scope\n try {\n const laneId = await this.callBitServerIDEAPI('getCurrentLaneName', [true], params.cwd);\n workspaceInfo.laneId = laneId;\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error getting current lane name: ${(error as Error).message}`);\n workspaceInfo.laneId = {\n error: `Failed to get current lane name: ${(error as Error).message}`,\n };\n }\n\n return this.formatAsCallToolResult(workspaceInfo);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_workspace_info tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting workspace info');\n }\n });\n }\n\n private registerComponentDetailsTool(server: McpServer) {\n const toolName = 'bit_component_details';\n const description =\n 'Get detailed information about multiple components in parallel. Supports batch requests for efficient component discovery. Limited to 5 components max to prevent context overload.';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n componentIds: z\n .array(z.string())\n .describe(\n 'Array of component IDs to get details for. Limited to 5 components max. Examples: [\"acme.design/ui/button\", \"acme.design/forms/input\", \"teambit.base-ui/navigation/link\"]'\n ),\n includeSchema: z.boolean().optional().describe('Include component public API schema (default: false)'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n // Validate that componentIds parameter is provided and valid\n if (!params.componentIds || !Array.isArray(params.componentIds) || params.componentIds.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'Error: componentIds parameter must be provided as a non-empty array of component IDs. Example: [\"acme.design/ui/button\", \"acme.design/forms/input\"]',\n },\n ],\n };\n }\n\n const includeSchema = params.includeSchema === true;\n const componentIds = params.componentIds;\n\n // Check limit of 5 components to prevent context overload\n const maxComponents = 5;\n\n if (componentIds.length > maxComponents) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Too many components requested. Maximum allowed is ${maxComponents} components, but ${componentIds.length} were requested. Please reduce the number of components in your request.`,\n },\n ],\n };\n }\n\n // Execute component detail requests in parallel\n this.logger.debug(\n `[MCP-DEBUG] Fetching details for ${componentIds.length} component(s) in parallel: ${componentIds.join(', ')}`\n );\n\n const detailPromises = componentIds.map(async (componentId: string) => {\n try {\n const result = await this.callBitServerIDEAPI('getCompDetails', [componentId, includeSchema], params.cwd);\n return {\n componentId,\n success: true,\n details: result,\n };\n } catch (error) {\n this.logger.warn(\n `[MCP-DEBUG] Failed to get details for component \"${componentId}\": ${(error as Error).message}`\n );\n return {\n componentId,\n success: false,\n error: (error as Error).message,\n };\n }\n });\n\n const detailResults = await Promise.all(detailPromises);\n\n // Process and consolidate results\n const successfulResults = detailResults.filter((r) => r.success);\n const failedResults = detailResults.filter((r) => !r.success);\n\n if (successfulResults.length === 0) {\n let message = 'Failed to get details for any components';\n if (failedResults.length > 0) {\n message += '\\n\\nErrors:';\n failedResults.forEach((r) => {\n message += `\\n- \"${r.componentId}\": ${r.error}`;\n });\n }\n return { content: [{ type: 'text', text: message }] };\n }\n\n // Build the response\n const response: any = {\n summary: {\n requested: componentIds.length,\n successful: successfulResults.length,\n failed: failedResults.length,\n includeSchema,\n },\n components: {},\n };\n\n // Add successful component details\n successfulResults.forEach((result) => {\n response.components[result.componentId] = result.details;\n });\n\n // Add failed components info if any\n if (failedResults.length > 0) {\n response.failures = {};\n failedResults.forEach((result) => {\n response.failures[result.componentId] = result.error;\n });\n }\n\n this.logger.debug(\n `[MCP-DEBUG] Component details fetched: ${successfulResults.length} successful, ${failedResults.length} failed`\n );\n\n return this.formatAsCallToolResult(response);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_component_details tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting component details');\n }\n });\n }\n\n private registerCreateTool(server: McpServer) {\n const toolName = 'bit_create';\n const description = 'Create a new component (source files and config) using a template.';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n templateName: z\n .string()\n .describe('The template for generating the component (run \"bit templates\" for a list of available templates)'),\n componentNames: z.array(z.string()).describe('A list of component names to generate'),\n namespace: z.string().optional().describe(\"Sets the component's namespace and nested dirs inside the scope\"),\n scope: z\n .string()\n .optional()\n .describe(\"Sets the component's scope-name. If not entered, the default-scope will be used\"),\n aspect: z\n .string()\n .optional()\n .describe('Aspect-id of the template. Helpful when multiple aspects use the same template name'),\n template: z.string().optional().describe('Env-id of the template. Alias for --aspect'),\n path: z\n .string()\n .optional()\n .describe('Relative path in the workspace. By default the path is <scope>/<namespace>/<name>'),\n env: z\n .string()\n .optional()\n .describe(\"Set the component's environment. (overrides the env from variants and the template)\"),\n force: z.boolean().optional().describe('Replace existing files at the target location'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const args = params.componentNames;\n const flags: Record<string, string | boolean> = {};\n\n // Add optional flags\n if (params.namespace) flags.namespace = params.namespace;\n if (params.scope) flags.scope = params.scope;\n if (params.aspect) flags.aspect = params.aspect;\n if (params.template) flags.template = params.template;\n if (params.path) flags.path = params.path;\n if (params.env) flags.env = params.env;\n if (params.force) flags.force = true;\n\n // Add template name as first argument\n const allArgs = [params.templateName, ...args];\n\n const execution = await this.safeBitCommandExecution('create', allArgs, flags, params.cwd, 'create component');\n return this.formatAsCallToolResult(execution.result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_create tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'creating component');\n }\n });\n }\n\n private registerCommandsListTool(server: McpServer) {\n const toolName = 'bit_commands_list';\n const description =\n 'Get all available Bit commands with descriptions and groups. Use this to discover what commands are available.';\n const schema: Record<string, any> = {\n extendedDescription: z\n .boolean()\n .optional()\n .describe('Include extended descriptions for commands (default: false)'),\n internal: z.boolean().optional().describe('Include internal/debug commands (default: false)'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { extendedDescription = false, internal = false } = params;\n const commandsInfo: any[] = [];\n\n const shouldSkipCommand = (cmd: Command): boolean => {\n return Boolean((cmd.private && !internal) || cmd.description.startsWith('DEPRECATED'));\n };\n\n // Build list of all commands\n this.cli.commands.forEach((cmd) => {\n if (shouldSkipCommand(cmd)) return;\n\n const mainCmdName = getCommandName(cmd);\n const groupKey = cmd.group;\n\n const commandInfo: any = {\n name: mainCmdName,\n description: cmd.description || '',\n };\n\n if (extendedDescription && cmd.extendedDescription) {\n commandInfo.extendedDescription = cmd.extendedDescription;\n }\n if (groupKey) commandInfo.group = this.cli.groups[groupKey] || groupKey;\n\n // Add subcommands summary\n if (cmd.commands && cmd.commands.length > 0) {\n commandInfo.subcommands = cmd.commands\n .filter((subCmd) => !shouldSkipCommand(subCmd))\n .map((subCmd) => ({\n name: getCommandName(subCmd),\n description: subCmd.description || '',\n }));\n }\n\n commandsInfo.push(commandInfo);\n });\n\n commandsInfo.sort((a, b) => a.name.localeCompare(b.name));\n\n const result = JSON.stringify({ total: commandsInfo.length, commands: commandsInfo }, null, 2);\n this.logger.debug(`[MCP-DEBUG] Successfully retrieved commands list. Total: ${commandsInfo.length}`);\n return this.formatAsCallToolResult(result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_commands_list tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting commands list');\n }\n });\n }\n\n private registerCommandHelpTool(server: McpServer) {\n const toolName = 'bit_command_help';\n const description =\n 'Get detailed help for a specific Bit command including syntax, arguments, flags, and usage examples. Use this to understand exactly how to use a command.';\n const schema: Record<string, any> = {\n command: z.string().describe('The command name to get help for (e.g., \"status\", \"install\", \"create\")'),\n subcommand: z\n .string()\n .optional()\n .describe('Optional subcommand name (e.g., for \"lane show\", use command=\"lane\" and subcommand=\"show\")'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { command: requestedCommand, subcommand: requestedSubcommand } = params;\n let commandInfo: any = null;\n\n const buildDetailedCommandInfo = (cmd: Command, parentName?: string) => {\n const cmdName = parentName ? `${parentName} ${getCommandName(cmd)}` : getCommandName(cmd);\n\n const info: any = {\n name: cmdName,\n description: cmd.description || '',\n extendedDescription: cmd.extendedDescription || '',\n group: cmd.group ? this.cli.groups[cmd.group] || cmd.group : '',\n };\n\n // Add arguments information\n const argsData = getArgsData(cmd);\n if (argsData.length > 0) {\n info.arguments = argsData.map((arg) => ({\n name: arg.nameRaw,\n description: arg.description || '',\n required: arg.required,\n isArray: arg.isArray,\n }));\n }\n\n // Add options/flags information\n info.options = getFlagsData(cmd);\n\n // Add examples if available\n if (cmd.examples) {\n info.examples = cmd.examples;\n }\n\n // Add subcommands if available (including private ones for help purposes)\n if (cmd.commands && cmd.commands.length > 0) {\n info.subcommands = cmd.commands.map((subCmd) => ({\n name: getCommandName(subCmd),\n description: subCmd.description || '',\n }));\n }\n\n return info;\n };\n\n // Search for the requested command\n this.cli.commands.forEach((cmd) => {\n const mainCmdName = getCommandName(cmd);\n\n if (requestedSubcommand) {\n // Looking for a subcommand\n if (mainCmdName === requestedCommand && cmd.commands) {\n const subCmd = cmd.commands.find((sub) => getCommandName(sub) === requestedSubcommand);\n if (subCmd) {\n commandInfo = buildDetailedCommandInfo(subCmd, requestedCommand);\n }\n }\n } else {\n // Looking for a main command\n if (mainCmdName === requestedCommand) {\n commandInfo = buildDetailedCommandInfo(cmd);\n }\n }\n });\n\n if (!commandInfo) {\n const commandFullName = requestedSubcommand ? `${requestedCommand} ${requestedSubcommand}` : requestedCommand;\n return this.formatAsCallToolResult(`Command not found: ${commandFullName}`);\n }\n\n const result = JSON.stringify(commandInfo, null, 2);\n this.logger.debug(`[MCP-DEBUG] Successfully retrieved command help for: ${commandInfo.name}`);\n return this.formatAsCallToolResult(result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_command_help tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'getting command help');\n }\n });\n }\n\n private registerQueryTool(server: McpServer) {\n const toolName = 'bit_query';\n const description =\n 'Execute read-only Bit commands that safely inspect workspace and component state without making modifications. Only whitelisted query commands are allowed for safety.';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n command: z.string().describe('The Bit command to execute (e.g., \"status\", \"show\", \"list\")'),\n args: z.array(z.string()).optional().describe('Arguments to pass to the command'),\n flags: z\n .record(z.union([z.string(), z.boolean()]))\n .optional()\n .describe('Flags to pass to the command as key-value pairs'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n const { command, args = [], flags = {}, cwd } = params;\n\n // Check if command is in the read-only whitelist\n // Support both single commands and subcommands (e.g., \"lane show\")\n const fullCommand = args.length > 0 ? `${command} ${args[0]}` : command;\n const isAllowed = this.readOnlyCommands.has(command) || this.readOnlyCommands.has(fullCommand);\n\n if (!isAllowed) {\n const allowedCommands = Array.from(this.readOnlyCommands).sort().join(', ');\n return this.formatAsCallToolResult(\n `Error: Command \"${command}\" is not allowed in query mode. Allowed read-only commands: ${allowedCommands}`\n );\n }\n\n // Build command arguments\n const commandArgs = [command, ...args];\n\n // Add flags to arguments\n Object.entries(flags).forEach(([key, value]) => {\n if (typeof value === 'boolean' && value) {\n commandArgs.push(`--${key}`);\n } else if (typeof value === 'string' && value) {\n commandArgs.push(`--${key}`);\n commandArgs.push(value);\n }\n });\n\n this.logger.debug(`[MCP-DEBUG] Executing query command: ${command} with args: ${JSON.stringify(commandArgs)}`);\n\n const execution = await this.safeBitCommandExecution(\n command,\n args,\n flags,\n cwd,\n `execute query command ${command}`\n );\n\n return this.formatAsCallToolResult(execution.result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_query tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'executing query command');\n }\n });\n }\n\n private registerExecuteTool(server: McpServer) {\n const toolName = 'bit_execute';\n const description = 'Execute Bit commands that make changes to workspace or components (not read-only).';\n const schema: Record<string, any> = {\n cwd: z.string().describe('Path to workspace directory'),\n command: z.string().describe('The Bit command to execute (e.g., \"import\", \"tag\", \"export\", \"remove\")'),\n args: z.array(z.string()).optional().describe('Arguments to pass to the command'),\n flags: z\n .record(z.union([z.string(), z.boolean()]))\n .optional()\n .describe('Flags to pass to the command as key-value pairs'),\n };\n\n server.tool(toolName, description, schema, async (params: any) => {\n try {\n let { command, args = [] } = params;\n const { flags = {}, cwd } = params;\n\n // Handle sub-commands: if command has multiple words, move the second word to args\n const commandParts = command.trim().split(/\\s+/);\n if (commandParts.length > 1) {\n command = commandParts[0];\n args = [commandParts[1], ...args];\n }\n\n this.logger.debug(\n `[MCP-DEBUG] Executing command: ${command} with args: ${JSON.stringify(args)} and flags: ${JSON.stringify(flags)}`\n );\n\n const execution = await this.safeBitCommandExecution(command, args, flags, cwd, `execute command ${command}`);\n\n return this.formatAsCallToolResult(execution.result);\n } catch (error) {\n this.logger.error(`[MCP-DEBUG] Error in bit_execute tool: ${(error as Error).message}`);\n return this.formatErrorAsCallToolResult(error as Error, 'executing command');\n }\n });\n }\n\n private processSubCommands(server: McpServer, parentCmd: Command, options: CommandFilterOptions) {\n const parentCmdName = getCommandName(parentCmd);\n\n parentCmd.commands?.forEach((subCmd) => {\n const subCmdName = getCommandName(subCmd);\n const fullCmdName = `${parentCmdName} ${subCmdName}`;\n\n if (this.shouldIncludeCommand(fullCmdName, options)) {\n this.registerToolForCommand(server, subCmd, parentCmd);\n }\n });\n }\n\n private async runBit(args: string[], cwd: string): Promise<CallToolResult> {\n this.logger.debug(`[MCP-DEBUG] Running: ${this.bitBin} ${args.join(' ')} in ${cwd}`);\n try {\n const result = childProcess.spawnSync(this.bitBin, args, {\n cwd,\n env: { ...process.env, BIT_DISABLE_SPINNER: '1' },\n encoding: 'utf8',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0) {\n const errorMessage = result.stderr || `Command failed with status ${result.status}`;\n throw new Error(errorMessage);\n }\n\n this.logger.debug(`[MCP-DEBUG] result. stdout: ${result.stdout}`);\n return { content: [{ type: 'text', text: result.stdout }] };\n } catch (error: any) {\n this.logger.error(`[MCP-DEBUG] Error executing ${this.bitBin} ${args.join(' ')}`, error);\n return { content: [{ type: 'text', text: error.message }] };\n }\n }\n\n /**\n * Helper method to execute a bit-server API call with standardized error handling\n */\n private async executeBitServerCommand(\n command: string,\n args: string[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n operationName: string\n ): Promise<any> {\n try {\n const result = await this.callBitServerAPI(command, args, flags, cwd);\n this.logger.debug(`[MCP-DEBUG] Successfully executed ${operationName} via bit-server`);\n return result;\n } catch (error) {\n this.logger.warn(`[MCP-DEBUG] Failed to execute ${operationName} via bit-server: ${(error as Error).message}`);\n throw error;\n }\n }\n\n /**\n * Helper method to format any result as CallToolResult\n */\n private formatAsCallToolResult(result: any): CallToolResult {\n if (typeof result === 'string') {\n return { content: [{ type: 'text', text: result }] } as CallToolResult;\n } else if (typeof result === 'object') {\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] } as CallToolResult;\n } else {\n return { content: [{ type: 'text', text: String(result) }] } as CallToolResult;\n }\n }\n\n /**\n * Helper method to format error as CallToolResult\n */\n private formatErrorAsCallToolResult(error: Error, operation: string): CallToolResult {\n return {\n content: [\n {\n type: 'text',\n text: `Error ${operation}: ${error.message}`,\n },\n ],\n } as CallToolResult;\n }\n\n /**\n * Helper method to safely execute a bit command with error handling\n */\n private async safeBitCommandExecution(\n command: string,\n args: string[] = [],\n flags: Record<string, any> = {},\n cwd: string,\n operationName: string,\n includeErrorInResult = false\n ): Promise<{ success: boolean; result: any; error?: string }> {\n try {\n let result = await this.executeBitServerCommand(command, args, flags, cwd, operationName);\n\n // Unwrap the result from data wrapper if it exists and we have a successful result\n if (result && typeof result === 'object' && 'data' in result && result.data !== undefined) {\n result = result.data;\n }\n\n // Clean up output by removing ANSI color codes when not using JSON format\n const useJson = flags && flags.json === true;\n if (!useJson && typeof result === 'string') {\n result = stripAnsi(result);\n }\n\n return { success: true, result };\n } catch (error) {\n if (includeErrorInResult) {\n return {\n success: false,\n result: { error: `Failed to ${operationName}: ${(error as Error).message}` },\n error: (error as Error).message,\n };\n } else {\n throw error;\n }\n }\n }\n private validateBitBin(bitBin: string): string {\n const trimmed = bitBin?.trim();\n // Check for shell metacharacters and spaces. Protect against command injection.\n if (!trimmed || /[;&|`$(){}[\\]<>'\"\\\\]/.test(trimmed) || /\\s/.test(trimmed)) throw new Error('Invalid bitBin');\n return trimmed;\n }\n\n // Setup command business logic methods\n getEditorDisplayName(editor: string): string {\n return McpConfigWriter.getEditorDisplayName(editor);\n }\n\n /**\n * Get the path to the editor config file based on editor type and scope\n */\n getEditorConfigPath(editor: string, isGlobal: boolean, workspaceDir?: string): string {\n return McpConfigWriter.getEditorConfigPath(editor, isGlobal, workspaceDir);\n }\n\n async setupEditor(editor: string, options: SetupOptions, workspaceDir?: string): Promise<void> {\n // Add workspaceDir to options if provided\n const setupOptions: SetupOptions = { ...options };\n if (workspaceDir) {\n setupOptions.workspaceDir = workspaceDir;\n }\n\n await McpConfigWriter.setupEditor(editor, setupOptions);\n }\n\n async writeRulesFile(editor: string, options: RulesOptions, workspaceDir?: string): Promise<void> {\n // Add workspaceDir to options if provided\n const rulesOptions: RulesOptions = { ...options };\n if (workspaceDir) {\n rulesOptions.workspaceDir = workspaceDir;\n }\n\n await McpConfigWriter.writeRulesFile(editor, rulesOptions);\n }\n\n async getRulesContent(consumerProject: boolean = false, forceStandard: boolean = false): Promise<string> {\n return McpConfigWriter.getDefaultRulesContent(consumerProject, process.cwd(), forceStandard);\n }\n\n static slots = [];\n static dependencies = [CLIAspect, LoggerAspect];\n static runtime = MainRuntime;\n static async provider([cli, loggerMain]: [CLIMain, LoggerMain]) {\n const logger = loggerMain.createLogger(CliMcpServerAspect.id);\n const mcpServer = new CliMcpServerMain(cli, logger);\n const mcpServerCmd = new McpServerCmd(mcpServer);\n mcpServerCmd.commands = [new McpStartCmd(mcpServer), new McpSetupCmd(mcpServer), new McpRulesCmd(mcpServer)];\n cli.register(mcpServerCmd);\n return mcpServer;\n }\n}\n\nCliMcpServerAspect.addRuntime(CliMcpServerMain);\n\nexport default CliMcpServerMain;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -209,13 +209,13 @@ describe('CliMcpServer Integration Tests', function () {
|
|
|
209
209
|
});
|
|
210
210
|
});
|
|
211
211
|
describe('bit_component_details tool', () => {
|
|
212
|
-
it('should get component details for
|
|
213
|
-
const
|
|
212
|
+
it('should get component details for multiple components', async () => {
|
|
213
|
+
const componentIds = ['comp1', 'comp2'];
|
|
214
214
|
const result = await mcpClient.callTool({
|
|
215
215
|
name: 'bit_component_details',
|
|
216
216
|
arguments: {
|
|
217
217
|
cwd: workspacePath,
|
|
218
|
-
|
|
218
|
+
componentIds,
|
|
219
219
|
includeSchema: false
|
|
220
220
|
}
|
|
221
221
|
});
|
|
@@ -223,16 +223,19 @@ describe('CliMcpServer Integration Tests', function () {
|
|
|
223
223
|
(0, _chai().expect)(result.content).to.be.an('array');
|
|
224
224
|
(0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
|
|
225
225
|
const content = JSON.parse(result.content[0].text);
|
|
226
|
-
(0, _chai().expect)(content).to.have.property('
|
|
227
|
-
(0, _chai().expect)(content).to.have.property('
|
|
226
|
+
(0, _chai().expect)(content).to.have.property('summary');
|
|
227
|
+
(0, _chai().expect)(content).to.have.property('components');
|
|
228
|
+
(0, _chai().expect)(content.summary).to.have.property('requested', 2);
|
|
229
|
+
(0, _chai().expect)(content.summary).to.have.property('successful');
|
|
230
|
+
(0, _chai().expect)(content.components).to.be.an('object');
|
|
228
231
|
});
|
|
229
232
|
it('should get component details with schema', async () => {
|
|
230
|
-
const
|
|
233
|
+
const componentIds = ['comp1'];
|
|
231
234
|
const result = await mcpClient.callTool({
|
|
232
235
|
name: 'bit_component_details',
|
|
233
236
|
arguments: {
|
|
234
237
|
cwd: workspacePath,
|
|
235
|
-
|
|
238
|
+
componentIds,
|
|
236
239
|
includeSchema: true
|
|
237
240
|
}
|
|
238
241
|
});
|
|
@@ -240,24 +243,70 @@ describe('CliMcpServer Integration Tests', function () {
|
|
|
240
243
|
(0, _chai().expect)(result.content).to.be.an('array');
|
|
241
244
|
(0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
|
|
242
245
|
const content = JSON.parse(result.content[0].text);
|
|
243
|
-
(0, _chai().expect)(content).to.have.property('
|
|
244
|
-
(0, _chai().expect)(content).to.have.property('
|
|
246
|
+
(0, _chai().expect)(content).to.have.property('summary');
|
|
247
|
+
(0, _chai().expect)(content).to.have.property('components');
|
|
248
|
+
(0, _chai().expect)(content.summary.includeSchema).to.be.true;
|
|
249
|
+
if (content.summary.successful > 0) {
|
|
250
|
+
const firstComponent = Object.values(content.components)[0];
|
|
251
|
+
(0, _chai().expect)(firstComponent).to.have.property('publicAPI');
|
|
252
|
+
}
|
|
245
253
|
});
|
|
246
254
|
it('should handle non-existent component gracefully', async () => {
|
|
247
255
|
const result = await mcpClient.callTool({
|
|
248
256
|
name: 'bit_component_details',
|
|
249
257
|
arguments: {
|
|
250
258
|
cwd: workspacePath,
|
|
251
|
-
|
|
259
|
+
componentIds: ['non-existent/component']
|
|
252
260
|
}
|
|
253
261
|
});
|
|
254
262
|
(0, _chai().expect)(result).to.have.property('content');
|
|
255
263
|
(0, _chai().expect)(result.content).to.be.an('array');
|
|
256
264
|
(0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
|
|
265
|
+
const responseText = result.content[0].text;
|
|
257
266
|
|
|
258
|
-
//
|
|
267
|
+
// Try to parse as JSON first
|
|
268
|
+
try {
|
|
269
|
+
const content = JSON.parse(responseText);
|
|
270
|
+
// Should have summary with failed components
|
|
271
|
+
(0, _chai().expect)(content).to.have.property('summary');
|
|
272
|
+
(0, _chai().expect)(content.summary).to.have.property('failed');
|
|
273
|
+
(0, _chai().expect)(content.summary.failed).to.be.greaterThan(0);
|
|
274
|
+
} catch {
|
|
275
|
+
// If not JSON, should be an error message string
|
|
276
|
+
(0, _chai().expect)(responseText).to.be.a('string');
|
|
277
|
+
(0, _chai().expect)(responseText).to.include('Failed to get details for any components');
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
it('should reject requests with more than 5 components', async () => {
|
|
281
|
+
const tooManyComponents = ['comp1', 'comp2', 'comp3', 'comp4', 'comp5', 'comp6'];
|
|
282
|
+
const result = await mcpClient.callTool({
|
|
283
|
+
name: 'bit_component_details',
|
|
284
|
+
arguments: {
|
|
285
|
+
cwd: workspacePath,
|
|
286
|
+
componentIds: tooManyComponents
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
(0, _chai().expect)(result).to.have.property('content');
|
|
290
|
+
(0, _chai().expect)(result.content).to.be.an('array');
|
|
291
|
+
(0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
|
|
259
292
|
const content = result.content[0].text;
|
|
260
|
-
(0, _chai().expect)(content).to.
|
|
293
|
+
(0, _chai().expect)(content).to.include('Too many components requested');
|
|
294
|
+
(0, _chai().expect)(content).to.include('Maximum allowed is 5');
|
|
295
|
+
});
|
|
296
|
+
it('should require componentIds parameter', async () => {
|
|
297
|
+
try {
|
|
298
|
+
await mcpClient.callTool({
|
|
299
|
+
name: 'bit_component_details',
|
|
300
|
+
arguments: {
|
|
301
|
+
cwd: workspacePath
|
|
302
|
+
// Missing componentIds parameter
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
_chai().expect.fail('Should have thrown an error');
|
|
306
|
+
} catch (error) {
|
|
307
|
+
(0, _chai().expect)(error.message).to.include('componentIds');
|
|
308
|
+
(0, _chai().expect)(error.message).to.include('Required');
|
|
309
|
+
}
|
|
261
310
|
});
|
|
262
311
|
});
|
|
263
312
|
describe('bit_commands_list tool', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_chai","data","require","_index","_stdio","_workspaceTesting","_componentTesting","_harmonyTesting","_fsExtra","_interopRequireDefault","_path","_cliMcpServer","e","__esModule","default","describe","timeout","workspaceData","mcpClient","workspacePath","before","mockWorkspace","mockComponents","after","destroyWorkspace","beforeEach","transport","StdioClientTransport","command","args","cwd","Client","name","version","capabilities","connect","afterEach","close","it","response","listTools","expect","tools","to","be","an","length","greaterThan","toolNames","map","tool","include","consumerProjectClient","not","have","lengthOf","result","callTool","arguments","queries","property","content","includeStatus","includeList","JSON","parse","text","firstComponentId","componentName","includeSchema","a","commands","firstCommand","extendedDescription","internal","subcommand","description","flags","json","fail","error","exist","mcpServer","loadAspect","CliMcpServerAspect","setupWorkspaceData","setupWorkspacePath","setupMcpServer","setupEditor","isGlobal","message","vscodeMcpPath","path","join","mcpExists","fs","pathExists","true","mcpConfig","readJson","servers","deep","equal","type","consumerProject","includeAdditional","cursorConfigPath","configExists","config","mcpServers","bit","windsurfConfigPath","rooConfigPath","ensureDir","dirname","writeJson","rulesContent","getRulesContent","contain","writeRulesFile","rulesPath","rulesExists","readFile"],"sources":["cli-mcp-server.spec.ts"],"sourcesContent":["/* eslint-disable import/extensions */\n/* eslint-disable import/no-unresolved */\n\nimport { expect } from 'chai';\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { WorkspaceData } from '@teambit/workspace.testing.mock-workspace';\nimport { mockWorkspace, destroyWorkspace } from '@teambit/workspace.testing.mock-workspace';\nimport { mockComponents } from '@teambit/component.testing.mock-components';\nimport { loadAspect } from '@teambit/harmony.testing.load-aspect';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nimport { CliMcpServerAspect } from './cli-mcp-server.aspect';\nimport type { CliMcpServerMain } from './cli-mcp-server.main.runtime';\n\ndescribe('CliMcpServer Integration Tests', function () {\n this.timeout(30000); // Increased timeout for MCP server operations\n\n let workspaceData: WorkspaceData;\n let mcpClient: Client;\n let workspacePath: string;\n\n before(async () => {\n // Set up mock workspace with components\n workspaceData = mockWorkspace();\n workspacePath = workspaceData.workspacePath;\n await mockComponents(workspacePath);\n });\n\n after(async () => {\n await destroyWorkspace(workspaceData);\n });\n\n beforeEach(async () => {\n // Create MCP client and connect directly to the MCP server command\n const transport = new StdioClientTransport({\n command: 'bit',\n args: ['mcp-server', 'start'],\n cwd: workspacePath,\n });\n\n mcpClient = new Client(\n {\n name: 'test-client',\n version: '1.0.0',\n },\n {\n capabilities: {},\n }\n );\n\n await mcpClient.connect(transport);\n });\n\n afterEach(async () => {\n // Clean up MCP client\n if (mcpClient) {\n await mcpClient.close();\n }\n });\n\n describe('MCP Server Protocol', () => {\n it('should list available tools', async () => {\n const response = await mcpClient.listTools();\n\n expect(response.tools).to.be.an('array');\n expect(response.tools.length).to.be.greaterThan(0);\n\n // Check for essential MCP tools\n const toolNames = response.tools.map((tool) => tool.name);\n expect(toolNames).to.include('bit_workspace_info');\n expect(toolNames).to.include('bit_component_details');\n expect(toolNames).to.include('bit_commands_list');\n expect(toolNames).to.include('bit_query');\n expect(toolNames).to.include('bit_execute');\n });\n });\n\n describe('Consumer Project Mode', () => {\n let consumerProjectClient: Client;\n\n beforeEach(async () => {\n // Create MCP client for consumer project mode\n const transport = new StdioClientTransport({\n command: 'bit',\n args: ['mcp-server', 'start', '--consumer-project'],\n cwd: workspacePath,\n });\n\n consumerProjectClient = new Client(\n {\n name: 'test-consumer-client',\n version: '1.0.0',\n },\n {\n capabilities: {},\n }\n );\n\n await consumerProjectClient.connect(transport);\n });\n\n afterEach(async () => {\n if (consumerProjectClient) {\n await consumerProjectClient.close();\n }\n });\n\n it('should only enable bit_remote_search and bit_remote_component_details tools', async () => {\n const response = await consumerProjectClient.listTools();\n\n expect(response.tools).to.be.an('array');\n\n const toolNames = response.tools.map((tool) => tool.name);\n\n // Should include only these two tools\n expect(toolNames).to.include('bit_remote_search');\n expect(toolNames).to.include('bit_remote_component_details');\n\n // Should NOT include these tools that are available in regular mode\n expect(toolNames).to.not.include('bit_workspace_info');\n expect(toolNames).to.not.include('bit_component_details');\n expect(toolNames).to.not.include('bit_commands_list');\n expect(toolNames).to.not.include('bit_command_help');\n expect(toolNames).to.not.include('bit_query');\n expect(toolNames).to.not.include('bit_execute');\n\n // Should NOT include the old separate tools\n expect(toolNames).to.not.include('bit_show');\n expect(toolNames).to.not.include('bit_schema');\n\n // Should have exactly 2 tools\n expect(toolNames).to.have.lengthOf(2);\n });\n\n it('should work with bit_remote_search tool', async () => {\n const result = (await consumerProjectClient.callTool({\n name: 'bit_remote_search',\n arguments: {\n queries: ['button'],\n cwd: workspacePath,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n });\n });\n\n describe('bit_workspace_info tool', () => {\n it('should get workspace information', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_workspace_info',\n arguments: {\n cwd: workspacePath,\n includeStatus: true,\n includeList: true,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('status');\n expect(content).to.have.property('list');\n });\n\n it('should handle workspace info without optional parameters', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_workspace_info',\n arguments: {\n cwd: workspacePath,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('status');\n });\n });\n\n describe('bit_component_details tool', () => {\n it('should get component details for an existing component', async () => {\n const firstComponentId = 'comp1';\n\n const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n componentName: firstComponentId,\n includeSchema: false,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('id');\n expect(content).to.have.property('env');\n });\n\n it('should get component details with schema', async () => {\n const firstComponentId = 'comp1';\n\n const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n componentName: firstComponentId,\n includeSchema: true,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('id');\n expect(content).to.have.property('publicAPI');\n });\n\n it('should handle non-existent component gracefully', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n componentName: 'non-existent/component',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n // Should return error information or component details\n const content = (result.content[0] as any).text;\n expect(content).to.be.a('string');\n });\n });\n\n describe('bit_commands_list tool', () => {\n it('should get basic commands list', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_commands_list',\n arguments: {},\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('commands');\n expect(content.commands).to.be.an('array');\n expect(content.commands.length).to.be.greaterThan(0);\n\n // Check command structure\n const firstCommand = content.commands[0];\n expect(firstCommand).to.have.property('name');\n expect(firstCommand).to.have.property('description');\n });\n\n it('should get commands info with extended description', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_commands_list',\n arguments: {\n extendedDescription: true,\n internal: false,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('commands');\n expect(content.commands).to.be.an('array');\n expect(content.commands.length).to.be.greaterThan(0);\n });\n });\n\n describe('bit_command_help tool', () => {\n it('should get help for a main command', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'status',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('name', 'status');\n expect(content).to.have.property('description');\n expect(content).to.have.property('options');\n });\n\n it('should get help for lane switch subcommand (private command)', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'lane',\n subcommand: 'switch',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('name', 'lane switch');\n expect(content).to.have.property('description');\n expect(content.description).to.include('switch to the specified lane');\n expect(content).to.have.property('arguments');\n expect(content.arguments).to.be.an('array');\n expect(content.arguments[0]).to.have.property('name', 'lane');\n expect(content.arguments[0]).to.have.property('description');\n });\n\n it('should get help for a subcommand that exists', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'lane',\n subcommand: 'show',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('name', 'lane show');\n expect(content).to.have.property('description');\n });\n\n it('should return error for non-existent command', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'nonexistent',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = (result.content[0] as any).text;\n expect(content).to.include('Command not found: nonexistent');\n });\n\n it('should return error for non-existent subcommand', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'lane',\n subcommand: 'nonexistent',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = (result.content[0] as any).text;\n expect(content).to.include('Command not found: lane nonexistent');\n });\n });\n\n describe('bit_query tool', () => {\n it('should execute read-only commands', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_query',\n arguments: {\n cwd: workspacePath,\n command: 'status',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n // Should return command output\n const content = (result.content[0] as any).text;\n expect(content).to.be.a('string');\n });\n\n it('should handle commands with arguments and flags', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_query',\n arguments: {\n cwd: workspacePath,\n command: 'list',\n args: [],\n flags: {\n json: true,\n },\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = (result.content[0] as any).text;\n expect(content).to.be.a('string');\n });\n });\n\n describe('Error Handling', () => {\n it('should handle invalid tool calls gracefully', async () => {\n try {\n await mcpClient.callTool({\n name: 'non_existent_tool',\n arguments: {},\n });\n expect.fail('Should have thrown an error for non-existent tool');\n } catch (error) {\n expect(error).to.exist;\n }\n });\n\n it('should handle invalid workspace directory', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_workspace_info',\n arguments: {\n cwd: '/non/existent/path',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n // Should return error information\n const content = (result.content[0] as any).text;\n expect(content).to.be.a('string');\n });\n });\n});\n\ndescribe('CliMcpServer Direct Aspect Tests', function () {\n this.timeout(30000);\n\n let workspaceData: WorkspaceData;\n let mcpServer: CliMcpServerMain;\n let workspacePath: string;\n\n before(async () => {\n // Set up mock workspace with components\n workspaceData = mockWorkspace();\n workspacePath = workspaceData.workspacePath;\n await mockComponents(workspacePath);\n\n // Load the aspect directly\n mcpServer = await loadAspect(CliMcpServerAspect, workspacePath);\n });\n\n after(async () => {\n await destroyWorkspace(workspaceData);\n });\n\n describe('Setup Editor Methods', () => {\n let setupWorkspaceData: WorkspaceData;\n let setupWorkspacePath: string;\n let setupMcpServer: CliMcpServerMain;\n\n beforeEach(async () => {\n // Create a separate mock workspace for setup testing\n setupWorkspaceData = mockWorkspace();\n setupWorkspacePath = setupWorkspaceData.workspacePath;\n await mockComponents(setupWorkspacePath);\n\n // Load the aspect for this workspace\n setupMcpServer = await loadAspect(CliMcpServerAspect, setupWorkspacePath);\n });\n\n afterEach(async () => {\n // Clean up the setup workspace\n if (setupWorkspaceData) {\n await destroyWorkspace(setupWorkspaceData);\n }\n });\n\n it('should handle unsupported editor gracefully', async () => {\n try {\n await mcpServer.setupEditor('unsupported-editor', {\n isGlobal: false,\n });\n expect.fail('Should have thrown an error for unsupported editor');\n } catch (error) {\n expect(error).to.exist;\n expect((error as Error).message).to.include('Editor \"unsupported-editor\" is not supported yet');\n expect((error as Error).message).to.include('Currently supported: vscode, cursor, windsurf, roo, cline');\n }\n });\n\n it('should setup VS Code integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const vscodeMcpPath = path.join(setupWorkspacePath, '.vscode', 'mcp.json');\n const mcpExists = await fs.pathExists(vscodeMcpPath);\n expect(mcpExists).to.be.true;\n\n // Verify the content of the mcp.json file\n const mcpConfig = await fs.readJson(vscodeMcpPath);\n expect(mcpConfig).to.have.property('servers');\n expect(mcpConfig.servers).to.have.property('bit-cli');\n expect(mcpConfig.servers['bit-cli']).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should setup VS Code integration with consumer project options', async () => {\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n consumerProject: true,\n includeAdditional: 'status,list',\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n const vscodeMcpPath = path.join(setupWorkspacePath, '.vscode', 'mcp.json');\n const mcpConfig = await fs.readJson(vscodeMcpPath);\n\n expect(mcpConfig.servers['bit-cli'].args).to.include('--consumer-project');\n expect(mcpConfig.servers['bit-cli'].args).to.include('--include-additional');\n expect(mcpConfig.servers['bit-cli'].args).to.include('status,list');\n });\n\n it('should setup Cursor integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'cursor',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const cursorConfigPath = path.join(setupWorkspacePath, '.cursor', 'mcp.json');\n const configExists = await fs.pathExists(cursorConfigPath);\n expect(configExists).to.be.true;\n\n // Verify the content of the config file\n const config = await fs.readJson(cursorConfigPath);\n expect(config).to.have.property('mcpServers');\n expect(config.mcpServers).to.have.property('bit');\n expect(config.mcpServers.bit).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should setup Windsurf integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'windsurf',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const windsurfConfigPath = path.join(setupWorkspacePath, '.windsurf', 'mcp.json');\n const configExists = await fs.pathExists(windsurfConfigPath);\n expect(configExists).to.be.true;\n\n // Verify the content of the config file\n const config = await fs.readJson(windsurfConfigPath);\n expect(config).to.have.property('mcpServers');\n expect(config.mcpServers).to.have.property('bit');\n expect(config.mcpServers.bit).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should setup Roo Code integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'roo',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const rooConfigPath = path.join(setupWorkspacePath, '.roo', 'mcp.json');\n const configExists = await fs.pathExists(rooConfigPath);\n expect(configExists).to.be.true;\n\n // Verify the content of the config file\n const config = await fs.readJson(rooConfigPath);\n expect(config).to.have.property('mcpServers');\n expect(config.mcpServers).to.have.property('bit');\n expect(config.mcpServers.bit).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should throw error when trying to setup Roo Code globally', async () => {\n try {\n await setupMcpServer.setupEditor(\n 'roo',\n {\n isGlobal: true,\n },\n setupWorkspacePath\n );\n expect.fail('Should have thrown an error for global Roo Code setup');\n } catch (error) {\n expect(error).to.exist;\n expect((error as Error).message).to.include('Roo Code global configuration is not supported');\n expect((error as Error).message).to.include('VS Code internal storage that cannot be accessed');\n }\n });\n\n it('should merge with existing VS Code mcp.json config', async () => {\n // First, create existing MCP config\n const vscodeMcpPath = path.join(setupWorkspacePath, '.vscode', 'mcp.json');\n await fs.ensureDir(path.dirname(vscodeMcpPath));\n await fs.writeJson(vscodeMcpPath, {\n servers: {\n 'existing-server': {\n type: 'stdio',\n command: 'some-other-command',\n args: ['start'],\n },\n },\n });\n\n // Run setup\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that existing MCP config is preserved and Bit config is added\n const mcpConfig = await fs.readJson(vscodeMcpPath);\n expect(mcpConfig.servers).to.have.property('existing-server');\n expect(mcpConfig.servers['existing-server']).to.deep.equal({\n type: 'stdio',\n command: 'some-other-command',\n args: ['start'],\n });\n expect(mcpConfig.servers).to.have.property('bit-cli');\n expect(mcpConfig.servers['bit-cli']).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n });\n\n describe('Rules Methods', () => {\n it('should get rules content without error', async () => {\n // This test reproduces the bug where bit-rules-template.md was not found\n const rulesContent = await mcpServer.getRulesContent(false);\n expect(rulesContent).to.be.a('string');\n expect(rulesContent).to.contain('# Bit MCP Agent Instructions');\n expect(rulesContent).to.contain('Core Objectives');\n });\n\n it('should get consumer project rules content without error', async () => {\n const rulesContent = await mcpServer.getRulesContent(true);\n expect(rulesContent).to.be.a('string');\n expect(rulesContent).to.contain('## How to Install and Use Bit Components');\n expect(rulesContent).to.contain('Bit Components are reusable pieces of code');\n });\n\n it('should write rules file for VS Code without error', async () => {\n await mcpServer.writeRulesFile(\n 'vscode',\n {\n isGlobal: false,\n consumerProject: false,\n },\n workspacePath\n );\n\n // Check that the rules file was created\n const rulesPath = path.join(workspacePath, '.github', 'instructions', 'bit.instructions.md');\n const rulesExists = await fs.pathExists(rulesPath);\n expect(rulesExists).to.be.true;\n\n // Check content\n const rulesContent = await fs.readFile(rulesPath, 'utf8');\n expect(rulesContent).to.contain('# Bit MCP Agent Instructions');\n expect(rulesContent).to.contain('Core Objectives');\n });\n\n it('should write consumer project rules file without error', async () => {\n await mcpServer.writeRulesFile(\n 'vscode',\n {\n isGlobal: false,\n consumerProject: true,\n },\n workspacePath\n );\n\n // Check that the rules file was created\n const rulesPath = path.join(workspacePath, '.github', 'instructions', 'bit.instructions.md');\n const rulesExists = await fs.pathExists(rulesPath);\n expect(rulesExists).to.be.true;\n\n // Check content is different for consumer project\n const rulesContent = await fs.readFile(rulesPath, 'utf8');\n expect(rulesContent).to.contain('## How to Install and Use Bit Components');\n expect(rulesContent).to.contain('Bit Components are reusable pieces of code');\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_chai","data","require","_index","_stdio","_workspaceTesting","_componentTesting","_harmonyTesting","_fsExtra","_interopRequireDefault","_path","_cliMcpServer","e","__esModule","default","describe","timeout","workspaceData","mcpClient","workspacePath","before","mockWorkspace","mockComponents","after","destroyWorkspace","beforeEach","transport","StdioClientTransport","command","args","cwd","Client","name","version","capabilities","connect","afterEach","close","it","response","listTools","expect","tools","to","be","an","length","greaterThan","toolNames","map","tool","include","consumerProjectClient","not","have","lengthOf","result","callTool","arguments","queries","property","content","includeStatus","includeList","JSON","parse","text","componentIds","includeSchema","summary","components","true","successful","firstComponent","Object","values","responseText","failed","a","tooManyComponents","fail","error","message","commands","firstCommand","extendedDescription","internal","subcommand","description","flags","json","exist","mcpServer","loadAspect","CliMcpServerAspect","setupWorkspaceData","setupWorkspacePath","setupMcpServer","setupEditor","isGlobal","vscodeMcpPath","path","join","mcpExists","fs","pathExists","mcpConfig","readJson","servers","deep","equal","type","consumerProject","includeAdditional","cursorConfigPath","configExists","config","mcpServers","bit","windsurfConfigPath","rooConfigPath","ensureDir","dirname","writeJson","rulesContent","getRulesContent","contain","writeRulesFile","rulesPath","rulesExists","readFile"],"sources":["cli-mcp-server.spec.ts"],"sourcesContent":["/* eslint-disable import/extensions */\n/* eslint-disable import/no-unresolved */\n\nimport { expect } from 'chai';\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { WorkspaceData } from '@teambit/workspace.testing.mock-workspace';\nimport { mockWorkspace, destroyWorkspace } from '@teambit/workspace.testing.mock-workspace';\nimport { mockComponents } from '@teambit/component.testing.mock-components';\nimport { loadAspect } from '@teambit/harmony.testing.load-aspect';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nimport { CliMcpServerAspect } from './cli-mcp-server.aspect';\nimport type { CliMcpServerMain } from './cli-mcp-server.main.runtime';\n\ndescribe('CliMcpServer Integration Tests', function () {\n this.timeout(30000); // Increased timeout for MCP server operations\n\n let workspaceData: WorkspaceData;\n let mcpClient: Client;\n let workspacePath: string;\n\n before(async () => {\n // Set up mock workspace with components\n workspaceData = mockWorkspace();\n workspacePath = workspaceData.workspacePath;\n await mockComponents(workspacePath);\n });\n\n after(async () => {\n await destroyWorkspace(workspaceData);\n });\n\n beforeEach(async () => {\n // Create MCP client and connect directly to the MCP server command\n const transport = new StdioClientTransport({\n command: 'bit',\n args: ['mcp-server', 'start'],\n cwd: workspacePath,\n });\n\n mcpClient = new Client(\n {\n name: 'test-client',\n version: '1.0.0',\n },\n {\n capabilities: {},\n }\n );\n\n await mcpClient.connect(transport);\n });\n\n afterEach(async () => {\n // Clean up MCP client\n if (mcpClient) {\n await mcpClient.close();\n }\n });\n\n describe('MCP Server Protocol', () => {\n it('should list available tools', async () => {\n const response = await mcpClient.listTools();\n\n expect(response.tools).to.be.an('array');\n expect(response.tools.length).to.be.greaterThan(0);\n\n // Check for essential MCP tools\n const toolNames = response.tools.map((tool) => tool.name);\n expect(toolNames).to.include('bit_workspace_info');\n expect(toolNames).to.include('bit_component_details');\n expect(toolNames).to.include('bit_commands_list');\n expect(toolNames).to.include('bit_query');\n expect(toolNames).to.include('bit_execute');\n });\n });\n\n describe('Consumer Project Mode', () => {\n let consumerProjectClient: Client;\n\n beforeEach(async () => {\n // Create MCP client for consumer project mode\n const transport = new StdioClientTransport({\n command: 'bit',\n args: ['mcp-server', 'start', '--consumer-project'],\n cwd: workspacePath,\n });\n\n consumerProjectClient = new Client(\n {\n name: 'test-consumer-client',\n version: '1.0.0',\n },\n {\n capabilities: {},\n }\n );\n\n await consumerProjectClient.connect(transport);\n });\n\n afterEach(async () => {\n if (consumerProjectClient) {\n await consumerProjectClient.close();\n }\n });\n\n it('should only enable bit_remote_search and bit_remote_component_details tools', async () => {\n const response = await consumerProjectClient.listTools();\n\n expect(response.tools).to.be.an('array');\n\n const toolNames = response.tools.map((tool) => tool.name);\n\n // Should include only these two tools\n expect(toolNames).to.include('bit_remote_search');\n expect(toolNames).to.include('bit_remote_component_details');\n\n // Should NOT include these tools that are available in regular mode\n expect(toolNames).to.not.include('bit_workspace_info');\n expect(toolNames).to.not.include('bit_component_details');\n expect(toolNames).to.not.include('bit_commands_list');\n expect(toolNames).to.not.include('bit_command_help');\n expect(toolNames).to.not.include('bit_query');\n expect(toolNames).to.not.include('bit_execute');\n\n // Should NOT include the old separate tools\n expect(toolNames).to.not.include('bit_show');\n expect(toolNames).to.not.include('bit_schema');\n\n // Should have exactly 2 tools\n expect(toolNames).to.have.lengthOf(2);\n });\n\n it('should work with bit_remote_search tool', async () => {\n const result = (await consumerProjectClient.callTool({\n name: 'bit_remote_search',\n arguments: {\n queries: ['button'],\n cwd: workspacePath,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n });\n });\n\n describe('bit_workspace_info tool', () => {\n it('should get workspace information', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_workspace_info',\n arguments: {\n cwd: workspacePath,\n includeStatus: true,\n includeList: true,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('status');\n expect(content).to.have.property('list');\n });\n\n it('should handle workspace info without optional parameters', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_workspace_info',\n arguments: {\n cwd: workspacePath,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('status');\n });\n });\n\n describe('bit_component_details tool', () => {\n it('should get component details for multiple components', async () => {\n const componentIds = ['comp1', 'comp2'];\n\n const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n componentIds,\n includeSchema: false,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('summary');\n expect(content).to.have.property('components');\n expect(content.summary).to.have.property('requested', 2);\n expect(content.summary).to.have.property('successful');\n expect(content.components).to.be.an('object');\n });\n\n it('should get component details with schema', async () => {\n const componentIds = ['comp1'];\n\n const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n componentIds,\n includeSchema: true,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('summary');\n expect(content).to.have.property('components');\n expect(content.summary.includeSchema).to.be.true;\n if (content.summary.successful > 0) {\n const firstComponent = Object.values(content.components)[0] as any;\n expect(firstComponent).to.have.property('publicAPI');\n }\n });\n\n it('should handle non-existent component gracefully', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n componentIds: ['non-existent/component'],\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const responseText = (result.content[0] as any).text;\n\n // Try to parse as JSON first\n try {\n const content = JSON.parse(responseText);\n // Should have summary with failed components\n expect(content).to.have.property('summary');\n expect(content.summary).to.have.property('failed');\n expect(content.summary.failed).to.be.greaterThan(0);\n } catch {\n // If not JSON, should be an error message string\n expect(responseText).to.be.a('string');\n expect(responseText).to.include('Failed to get details for any components');\n }\n });\n\n it('should reject requests with more than 5 components', async () => {\n const tooManyComponents = ['comp1', 'comp2', 'comp3', 'comp4', 'comp5', 'comp6'];\n\n const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n componentIds: tooManyComponents,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = (result.content[0] as any).text;\n expect(content).to.include('Too many components requested');\n expect(content).to.include('Maximum allowed is 5');\n });\n\n it('should require componentIds parameter', async () => {\n try {\n await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n // Missing componentIds parameter\n },\n });\n expect.fail('Should have thrown an error');\n } catch (error: any) {\n expect(error.message).to.include('componentIds');\n expect(error.message).to.include('Required');\n }\n });\n });\n\n describe('bit_commands_list tool', () => {\n it('should get basic commands list', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_commands_list',\n arguments: {},\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('commands');\n expect(content.commands).to.be.an('array');\n expect(content.commands.length).to.be.greaterThan(0);\n\n // Check command structure\n const firstCommand = content.commands[0];\n expect(firstCommand).to.have.property('name');\n expect(firstCommand).to.have.property('description');\n });\n\n it('should get commands info with extended description', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_commands_list',\n arguments: {\n extendedDescription: true,\n internal: false,\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('commands');\n expect(content.commands).to.be.an('array');\n expect(content.commands.length).to.be.greaterThan(0);\n });\n });\n\n describe('bit_command_help tool', () => {\n it('should get help for a main command', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'status',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('name', 'status');\n expect(content).to.have.property('description');\n expect(content).to.have.property('options');\n });\n\n it('should get help for lane switch subcommand (private command)', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'lane',\n subcommand: 'switch',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('name', 'lane switch');\n expect(content).to.have.property('description');\n expect(content.description).to.include('switch to the specified lane');\n expect(content).to.have.property('arguments');\n expect(content.arguments).to.be.an('array');\n expect(content.arguments[0]).to.have.property('name', 'lane');\n expect(content.arguments[0]).to.have.property('description');\n });\n\n it('should get help for a subcommand that exists', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'lane',\n subcommand: 'show',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = JSON.parse((result.content[0] as any).text);\n expect(content).to.have.property('name', 'lane show');\n expect(content).to.have.property('description');\n });\n\n it('should return error for non-existent command', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'nonexistent',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = (result.content[0] as any).text;\n expect(content).to.include('Command not found: nonexistent');\n });\n\n it('should return error for non-existent subcommand', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_command_help',\n arguments: {\n command: 'lane',\n subcommand: 'nonexistent',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = (result.content[0] as any).text;\n expect(content).to.include('Command not found: lane nonexistent');\n });\n });\n\n describe('bit_query tool', () => {\n it('should execute read-only commands', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_query',\n arguments: {\n cwd: workspacePath,\n command: 'status',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n // Should return command output\n const content = (result.content[0] as any).text;\n expect(content).to.be.a('string');\n });\n\n it('should handle commands with arguments and flags', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_query',\n arguments: {\n cwd: workspacePath,\n command: 'list',\n args: [],\n flags: {\n json: true,\n },\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n const content = (result.content[0] as any).text;\n expect(content).to.be.a('string');\n });\n });\n\n describe('Error Handling', () => {\n it('should handle invalid tool calls gracefully', async () => {\n try {\n await mcpClient.callTool({\n name: 'non_existent_tool',\n arguments: {},\n });\n expect.fail('Should have thrown an error for non-existent tool');\n } catch (error) {\n expect(error).to.exist;\n }\n });\n\n it('should handle invalid workspace directory', async () => {\n const result = (await mcpClient.callTool({\n name: 'bit_workspace_info',\n arguments: {\n cwd: '/non/existent/path',\n },\n })) as CallToolResult;\n\n expect(result).to.have.property('content');\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n\n // Should return error information\n const content = (result.content[0] as any).text;\n expect(content).to.be.a('string');\n });\n });\n});\n\ndescribe('CliMcpServer Direct Aspect Tests', function () {\n this.timeout(30000);\n\n let workspaceData: WorkspaceData;\n let mcpServer: CliMcpServerMain;\n let workspacePath: string;\n\n before(async () => {\n // Set up mock workspace with components\n workspaceData = mockWorkspace();\n workspacePath = workspaceData.workspacePath;\n await mockComponents(workspacePath);\n\n // Load the aspect directly\n mcpServer = await loadAspect(CliMcpServerAspect, workspacePath);\n });\n\n after(async () => {\n await destroyWorkspace(workspaceData);\n });\n\n describe('Setup Editor Methods', () => {\n let setupWorkspaceData: WorkspaceData;\n let setupWorkspacePath: string;\n let setupMcpServer: CliMcpServerMain;\n\n beforeEach(async () => {\n // Create a separate mock workspace for setup testing\n setupWorkspaceData = mockWorkspace();\n setupWorkspacePath = setupWorkspaceData.workspacePath;\n await mockComponents(setupWorkspacePath);\n\n // Load the aspect for this workspace\n setupMcpServer = await loadAspect(CliMcpServerAspect, setupWorkspacePath);\n });\n\n afterEach(async () => {\n // Clean up the setup workspace\n if (setupWorkspaceData) {\n await destroyWorkspace(setupWorkspaceData);\n }\n });\n\n it('should handle unsupported editor gracefully', async () => {\n try {\n await mcpServer.setupEditor('unsupported-editor', {\n isGlobal: false,\n });\n expect.fail('Should have thrown an error for unsupported editor');\n } catch (error) {\n expect(error).to.exist;\n expect((error as Error).message).to.include('Editor \"unsupported-editor\" is not supported yet');\n expect((error as Error).message).to.include('Currently supported: vscode, cursor, windsurf, roo, cline');\n }\n });\n\n it('should setup VS Code integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const vscodeMcpPath = path.join(setupWorkspacePath, '.vscode', 'mcp.json');\n const mcpExists = await fs.pathExists(vscodeMcpPath);\n expect(mcpExists).to.be.true;\n\n // Verify the content of the mcp.json file\n const mcpConfig = await fs.readJson(vscodeMcpPath);\n expect(mcpConfig).to.have.property('servers');\n expect(mcpConfig.servers).to.have.property('bit-cli');\n expect(mcpConfig.servers['bit-cli']).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should setup VS Code integration with consumer project options', async () => {\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n consumerProject: true,\n includeAdditional: 'status,list',\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n const vscodeMcpPath = path.join(setupWorkspacePath, '.vscode', 'mcp.json');\n const mcpConfig = await fs.readJson(vscodeMcpPath);\n\n expect(mcpConfig.servers['bit-cli'].args).to.include('--consumer-project');\n expect(mcpConfig.servers['bit-cli'].args).to.include('--include-additional');\n expect(mcpConfig.servers['bit-cli'].args).to.include('status,list');\n });\n\n it('should setup Cursor integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'cursor',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const cursorConfigPath = path.join(setupWorkspacePath, '.cursor', 'mcp.json');\n const configExists = await fs.pathExists(cursorConfigPath);\n expect(configExists).to.be.true;\n\n // Verify the content of the config file\n const config = await fs.readJson(cursorConfigPath);\n expect(config).to.have.property('mcpServers');\n expect(config.mcpServers).to.have.property('bit');\n expect(config.mcpServers.bit).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should setup Windsurf integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'windsurf',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const windsurfConfigPath = path.join(setupWorkspacePath, '.windsurf', 'mcp.json');\n const configExists = await fs.pathExists(windsurfConfigPath);\n expect(configExists).to.be.true;\n\n // Verify the content of the config file\n const config = await fs.readJson(windsurfConfigPath);\n expect(config).to.have.property('mcpServers');\n expect(config.mcpServers).to.have.property('bit');\n expect(config.mcpServers.bit).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should setup Roo Code integration directly', async () => {\n await setupMcpServer.setupEditor(\n 'roo',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that the mcp.json file was created in the workspace directory\n const rooConfigPath = path.join(setupWorkspacePath, '.roo', 'mcp.json');\n const configExists = await fs.pathExists(rooConfigPath);\n expect(configExists).to.be.true;\n\n // Verify the content of the config file\n const config = await fs.readJson(rooConfigPath);\n expect(config).to.have.property('mcpServers');\n expect(config.mcpServers).to.have.property('bit');\n expect(config.mcpServers.bit).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n\n it('should throw error when trying to setup Roo Code globally', async () => {\n try {\n await setupMcpServer.setupEditor(\n 'roo',\n {\n isGlobal: true,\n },\n setupWorkspacePath\n );\n expect.fail('Should have thrown an error for global Roo Code setup');\n } catch (error) {\n expect(error).to.exist;\n expect((error as Error).message).to.include('Roo Code global configuration is not supported');\n expect((error as Error).message).to.include('VS Code internal storage that cannot be accessed');\n }\n });\n\n it('should merge with existing VS Code mcp.json config', async () => {\n // First, create existing MCP config\n const vscodeMcpPath = path.join(setupWorkspacePath, '.vscode', 'mcp.json');\n await fs.ensureDir(path.dirname(vscodeMcpPath));\n await fs.writeJson(vscodeMcpPath, {\n servers: {\n 'existing-server': {\n type: 'stdio',\n command: 'some-other-command',\n args: ['start'],\n },\n },\n });\n\n // Run setup\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that existing MCP config is preserved and Bit config is added\n const mcpConfig = await fs.readJson(vscodeMcpPath);\n expect(mcpConfig.servers).to.have.property('existing-server');\n expect(mcpConfig.servers['existing-server']).to.deep.equal({\n type: 'stdio',\n command: 'some-other-command',\n args: ['start'],\n });\n expect(mcpConfig.servers).to.have.property('bit-cli');\n expect(mcpConfig.servers['bit-cli']).to.deep.equal({\n type: 'stdio',\n command: 'bit',\n args: ['mcp-server', 'start'],\n });\n });\n });\n\n describe('Rules Methods', () => {\n it('should get rules content without error', async () => {\n // This test reproduces the bug where bit-rules-template.md was not found\n const rulesContent = await mcpServer.getRulesContent(false);\n expect(rulesContent).to.be.a('string');\n expect(rulesContent).to.contain('# Bit MCP Agent Instructions');\n expect(rulesContent).to.contain('Core Objectives');\n });\n\n it('should get consumer project rules content without error', async () => {\n const rulesContent = await mcpServer.getRulesContent(true);\n expect(rulesContent).to.be.a('string');\n expect(rulesContent).to.contain('## How to Install and Use Bit Components');\n expect(rulesContent).to.contain('Bit Components are reusable pieces of code');\n });\n\n it('should write rules file for VS Code without error', async () => {\n await mcpServer.writeRulesFile(\n 'vscode',\n {\n isGlobal: false,\n consumerProject: false,\n },\n workspacePath\n );\n\n // Check that the rules file was created\n const rulesPath = path.join(workspacePath, '.github', 'instructions', 'bit.instructions.md');\n const rulesExists = await fs.pathExists(rulesPath);\n expect(rulesExists).to.be.true;\n\n // Check content\n const rulesContent = await fs.readFile(rulesPath, 'utf8');\n expect(rulesContent).to.contain('# Bit MCP Agent Instructions');\n expect(rulesContent).to.contain('Core Objectives');\n });\n\n it('should write consumer project rules file without error', async () => {\n await mcpServer.writeRulesFile(\n 'vscode',\n {\n isGlobal: false,\n consumerProject: true,\n },\n workspacePath\n );\n\n // Check that the rules file was created\n const rulesPath = path.join(workspacePath, '.github', 'instructions', 'bit.instructions.md');\n const rulesExists = await fs.pathExists(rulesPath);\n expect(rulesExists).to.be.true;\n\n // Check content is different for consumer project\n const rulesContent = await fs.readFile(rulesPath, 'utf8');\n expect(rulesContent).to.contain('## How to Install and Use Bit Components');\n expect(rulesContent).to.contain('Bit Components are reusable pieces of code');\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
;
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.mcp_cli-mcp-server@0.0.
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.mcp_cli-mcp-server@0.0.91/dist/README.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [];
|
|
5
5
|
export const overview = [overview_0];
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/cli-mcp-server",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.91",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/mcp/cli-mcp-server",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.mcp",
|
|
8
8
|
"name": "cli-mcp-server",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.91"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"comment-json": "4.2.5",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@teambit/legacy.constants": "0.0.15",
|
|
23
23
|
"@teambit/logger": "0.0.1361",
|
|
24
24
|
"@teambit/scope.network": "0.0.69",
|
|
25
|
-
"@teambit/mcp.mcp-config-writer": "0.0.
|
|
25
|
+
"@teambit/mcp.mcp-config-writer": "0.0.5"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/fs-extra": "9.0.7",
|