@teambit/cli-mcp-server 0.0.0-00149e000ea14bbdcb0391c0d576b4a2b40f8cde

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.
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_chai","data","require","_index","_stdio","_workspaceTesting","_componentTesting","_harmonyTesting","_fsExtra","_interopRequireDefault","_path","_cliMcpServer","e","__esModule","default","parseToolJson","result","text","content","JSON","parse","Error","slice","describe","skip","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","callTool","arguments","queries","property","includeStatus","includeList","componentIds","includeSchema","summary","components","retries","true","successful","firstComponent","Object","values","responseText","failed","a","tooManyComponents","errorText","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","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\n/** Parse JSON from an MCP tool response, providing a clear error when the server returned a non-JSON error string. */\nfunction parseToolJson(result: CallToolResult): any {\n const text = (result.content[0] as any).text;\n try {\n return JSON.parse(text);\n } catch {\n throw new Error(`Expected JSON response from MCP tool but got: ${text.slice(0, 200)}`);\n }\n}\n\ndescribe.skip('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 = parseToolJson(result);\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 = parseToolJson(result);\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 = parseToolJson(result);\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 function () {\n this.retries(2); // schema extraction is heavier and may hit transient socket hang-ups in CI\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 = parseToolJson(result);\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 const result = (await mcpClient.callTool({\n name: 'bit_component_details',\n arguments: {\n cwd: workspacePath,\n // Missing componentIds parameter\n },\n })) as CallToolResult;\n\n // With new SDK (1.22+), validation errors are returned in result with isError flag\n expect(result).to.have.property('isError', true);\n expect(result.content).to.be.an('array');\n expect(result.content[0]).to.have.property('type', 'text');\n const errorText = (result.content[0] as any).text;\n expect(errorText).to.include('componentIds');\n expect(errorText).to.include('Required');\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 = parseToolJson(result);\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 = parseToolJson(result);\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 = parseToolJson(result);\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 = parseToolJson(result);\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 = parseToolJson(result);\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.skip('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":[]}
@@ -0,0 +1,4 @@
1
+ import { CliMcpServerAspect } from './cli-mcp-server.aspect';
2
+ export type { CliMcpServerMain } from './cli-mcp-server.main.runtime';
3
+ export default CliMcpServerAspect;
4
+ export { CliMcpServerAspect };
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CliMcpServerAspect", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _cliMcpServer().CliMcpServerAspect;
10
+ }
11
+ });
12
+ exports.default = void 0;
13
+ function _cliMcpServer() {
14
+ const data = require("./cli-mcp-server.aspect");
15
+ _cliMcpServer = function () {
16
+ return data;
17
+ };
18
+ return data;
19
+ }
20
+ var _default = exports.default = _cliMcpServer().CliMcpServerAspect;
21
+
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_cliMcpServer","data","require","_default","exports","default","CliMcpServerAspect"],"sources":["index.ts"],"sourcesContent":["import { CliMcpServerAspect } from './cli-mcp-server.aspect';\n\nexport type { CliMcpServerMain } from './cli-mcp-server.main.runtime';\nexport default CliMcpServerAspect;\nexport { CliMcpServerAspect };\n"],"mappings":";;;;;;;;;;;;AAAA,SAAAA,cAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,aAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA6D,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAG9CC,kCAAkB","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import type { CLIArgs, Command, CommandOptions } from '@teambit/cli';
2
+ import type { CliMcpServerMain } from './cli-mcp-server.main.runtime';
3
+ export type McpStartCmdOptions = {
4
+ includeAdditional?: string;
5
+ bitBin?: string;
6
+ consumerProject?: boolean;
7
+ };
8
+ export declare class McpServerCmd implements Command {
9
+ private mcpServer;
10
+ name: string;
11
+ description: string;
12
+ extendedDescription: string;
13
+ alias: string;
14
+ group: string;
15
+ loader: boolean;
16
+ options: CommandOptions;
17
+ commands: Command[];
18
+ constructor(mcpServer: CliMcpServerMain);
19
+ wait(args: CLIArgs, flags: McpStartCmdOptions): Promise<void>;
20
+ }
21
+ export declare class McpStartCmd implements Command {
22
+ private mcpServer;
23
+ name: string;
24
+ description: string;
25
+ extendedDescription: string;
26
+ alias: string;
27
+ group: string;
28
+ loader: boolean;
29
+ options: CommandOptions;
30
+ constructor(mcpServer: CliMcpServerMain);
31
+ wait(args: CLIArgs, flags: McpStartCmdOptions): Promise<void>;
32
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.McpStartCmd = exports.McpServerCmd = void 0;
7
+ function _lodash() {
8
+ const data = require("lodash");
9
+ _lodash = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
16
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
17
+ class McpServerCmd {
18
+ constructor(mcpServer) {
19
+ this.mcpServer = mcpServer;
20
+ _defineProperty(this, "name", 'mcp-server [sub-command]');
21
+ _defineProperty(this, "description", 'start Model Context Protocol server for AI assistants');
22
+ _defineProperty(this, "extendedDescription", `NOTE: this is the legacy local stdio MCP server. The recommended way to connect AI agents to Bit is now the hosted Cloud MCP at https://mcp.bit.cloud/mcp.
23
+ see setup instructions for each agent at https://bit.cloud/docs/connect.
24
+
25
+ enables AI assistants and other tools to interact with Bit via the Model Context Protocol.
26
+ provides a standardized interface for AI agents to execute Bit commands and access component information.
27
+ allows writing custom instructions and rules to guide AI agents in their interactions with Bit.`);
28
+ _defineProperty(this, "alias", '');
29
+ _defineProperty(this, "group", 'advanced');
30
+ _defineProperty(this, "loader", false);
31
+ _defineProperty(this, "options", [['', 'include-additional <commands>', 'Add specific commands to the default MCP tools set. Use comma-separated list in quotes'], ['', 'bit-bin <binary>', 'Specify the binary to use for running Bit commands (default: "bit")'], ['', 'consumer-project', 'For non-Bit workspaces that only consume Bit component packages. Enables only "schema", "show", and "remote_search" tools']]);
32
+ _defineProperty(this, "commands", []);
33
+ }
34
+ async wait(args, flags) {
35
+ if ((0, _lodash().compact)(args).length) {
36
+ throw new Error(`"${args}" is not a subcommand of "mcp-server", please run "bit mcp-server --help" to list the subcommands`);
37
+ }
38
+ await this.mcpServer.runMcpServer(flags);
39
+ }
40
+ }
41
+ exports.McpServerCmd = McpServerCmd;
42
+ class McpStartCmd {
43
+ constructor(mcpServer) {
44
+ this.mcpServer = mcpServer;
45
+ _defineProperty(this, "name", 'start');
46
+ _defineProperty(this, "description", 'Start the MCP server');
47
+ _defineProperty(this, "extendedDescription", 'Start the Model Context Protocol (MCP) server with the specified configuration');
48
+ _defineProperty(this, "alias", '');
49
+ _defineProperty(this, "group", 'advanced');
50
+ _defineProperty(this, "loader", false);
51
+ _defineProperty(this, "options", [['', 'include-additional <commands>', 'Add specific commands to the default MCP tools set. Use comma-separated list in quotes'], ['', 'bit-bin <binary>', 'Specify the binary to use for running Bit commands (default: "bit")'], ['', 'consumer-project', 'For non-Bit workspaces that only consume Bit component packages. Enables only "schema", "show", and "remote_search" tools']]);
52
+ }
53
+ async wait(args, flags) {
54
+ await this.mcpServer.runMcpServer(flags);
55
+ }
56
+ }
57
+ exports.McpStartCmd = McpStartCmd;
58
+
59
+ //# sourceMappingURL=mcp-server.cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_lodash","data","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","McpServerCmd","constructor","mcpServer","wait","args","flags","compact","length","Error","runMcpServer","exports","McpStartCmd"],"sources":["mcp-server.cmd.ts"],"sourcesContent":["import { compact } from 'lodash';\nimport type { CLIArgs, Command, CommandOptions } from '@teambit/cli';\nimport type { CliMcpServerMain } from './cli-mcp-server.main.runtime';\n\nexport type McpStartCmdOptions = {\n includeAdditional?: string;\n bitBin?: string;\n consumerProject?: boolean;\n};\n\nexport class McpServerCmd implements Command {\n name = 'mcp-server [sub-command]';\n description = 'start Model Context Protocol server for AI assistants';\n extendedDescription = `NOTE: this is the legacy local stdio MCP server. The recommended way to connect AI agents to Bit is now the hosted Cloud MCP at https://mcp.bit.cloud/mcp.\nsee setup instructions for each agent at https://bit.cloud/docs/connect.\n\nenables AI assistants and other tools to interact with Bit via the Model Context Protocol.\nprovides a standardized interface for AI agents to execute Bit commands and access component information.\nallows writing custom instructions and rules to guide AI agents in their interactions with Bit.`;\n alias = '';\n group = 'advanced';\n loader = false;\n options = [\n [\n '',\n 'include-additional <commands>',\n 'Add specific commands to the default MCP tools set. Use comma-separated list in quotes',\n ],\n ['', 'bit-bin <binary>', 'Specify the binary to use for running Bit commands (default: \"bit\")'],\n [\n '',\n 'consumer-project',\n 'For non-Bit workspaces that only consume Bit component packages. Enables only \"schema\", \"show\", and \"remote_search\" tools',\n ],\n ] as CommandOptions;\n commands: Command[] = [];\n\n constructor(private mcpServer: CliMcpServerMain) {}\n\n async wait(args: CLIArgs, flags: McpStartCmdOptions): Promise<void> {\n if (compact(args).length) {\n throw new Error(\n `\"${args}\" is not a subcommand of \"mcp-server\", please run \"bit mcp-server --help\" to list the subcommands`\n );\n }\n\n await this.mcpServer.runMcpServer(flags);\n }\n}\n\nexport class McpStartCmd implements Command {\n name = 'start';\n description = 'Start the MCP server';\n extendedDescription = 'Start the Model Context Protocol (MCP) server with the specified configuration';\n alias = '';\n group = 'advanced';\n loader = false;\n options = [\n [\n '',\n 'include-additional <commands>',\n 'Add specific commands to the default MCP tools set. Use comma-separated list in quotes',\n ],\n ['', 'bit-bin <binary>', 'Specify the binary to use for running Bit commands (default: \"bit\")'],\n [\n '',\n 'consumer-project',\n 'For non-Bit workspaces that only consume Bit component packages. Enables only \"schema\", \"show\", and \"remote_search\" tools',\n ],\n ] as CommandOptions;\n\n constructor(private mcpServer: CliMcpServerMain) {}\n\n async wait(args: CLIArgs, flags: McpStartCmdOptions): Promise<void> {\n await this.mcpServer.runMcpServer(flags);\n }\n}\n"],"mappings":";;;;;;AAAA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAiC,SAAAE,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAU1B,MAAMgB,YAAY,CAAoB;EA2B3CC,WAAWA,CAASC,SAA2B,EAAE;IAAA,KAA7BA,SAA2B,GAA3BA,SAA2B;IAAArB,eAAA,eA1BxC,0BAA0B;IAAAA,eAAA,sBACnB,uDAAuD;IAAAA,eAAA,8BAC/C;AACxB;AACA;AACA;AACA;AACA,gGAAgG;IAAAA,eAAA,gBACtF,EAAE;IAAAA,eAAA,gBACF,UAAU;IAAAA,eAAA,iBACT,KAAK;IAAAA,eAAA,kBACJ,CACR,CACE,EAAE,EACF,+BAA+B,EAC/B,wFAAwF,CACzF,EACD,CAAC,EAAE,EAAE,kBAAkB,EAAE,qEAAqE,CAAC,EAC/F,CACE,EAAE,EACF,kBAAkB,EAClB,2HAA2H,CAC5H,CACF;IAAAA,eAAA,mBACqB,EAAE;EAE0B;EAElD,MAAMsB,IAAIA,CAACC,IAAa,EAAEC,KAAyB,EAAiB;IAClE,IAAI,IAAAC,iBAAO,EAACF,IAAI,CAAC,CAACG,MAAM,EAAE;MACxB,MAAM,IAAIC,KAAK,CACb,IAAIJ,IAAI,mGACV,CAAC;IACH;IAEA,MAAM,IAAI,CAACF,SAAS,CAACO,YAAY,CAACJ,KAAK,CAAC;EAC1C;AACF;AAACK,OAAA,CAAAV,YAAA,GAAAA,YAAA;AAEM,MAAMW,WAAW,CAAoB;EAqB1CV,WAAWA,CAASC,SAA2B,EAAE;IAAA,KAA7BA,SAA2B,GAA3BA,SAA2B;IAAArB,eAAA,eApBxC,OAAO;IAAAA,eAAA,sBACA,sBAAsB;IAAAA,eAAA,8BACd,gFAAgF;IAAAA,eAAA,gBAC9F,EAAE;IAAAA,eAAA,gBACF,UAAU;IAAAA,eAAA,iBACT,KAAK;IAAAA,eAAA,kBACJ,CACR,CACE,EAAE,EACF,+BAA+B,EAC/B,wFAAwF,CACzF,EACD,CAAC,EAAE,EAAE,kBAAkB,EAAE,qEAAqE,CAAC,EAC/F,CACE,EAAE,EACF,kBAAkB,EAClB,2HAA2H,CAC5H,CACF;EAEiD;EAElD,MAAMsB,IAAIA,CAACC,IAAa,EAAEC,KAAyB,EAAiB;IAClE,MAAM,IAAI,CAACH,SAAS,CAACO,YAAY,CAACJ,KAAK,CAAC;EAC1C;AACF;AAACK,OAAA,CAAAC,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ ;
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.mcp_cli-mcp-server@00149e000ea14bbdcb0391c0d576b4a2b40f8cde/dist/README.docs.mdx';
3
+
4
+ export const compositions = [];
5
+ export const overview = [overview_0];
6
+
7
+ export const compositions_metadata = {"compositions":[]};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Fetches and processes remote component details for MCP server.
3
+ *
4
+ * This function is specifically needed for consumer-project mode where there is no local
5
+ * workspace or scope available. It uses ConsumerComponent instances fetched from remote
6
+ * to provide rich component information including extensions data, which enables access
7
+ * to docs, compositions, environment details, and full dependency information.
8
+ */
9
+ export declare function getRemoteComponentWithDetails(componentName: string): Promise<any>;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getRemoteComponentWithDetails = getRemoteComponentWithDetails;
7
+ function _componentId() {
8
+ const data = require("@teambit/component-id");
9
+ _componentId = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _legacy() {
15
+ const data = require("@teambit/legacy.consumer");
16
+ _legacy = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _scope() {
22
+ const data = require("@teambit/scope.remotes");
23
+ _scope = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _pkgModules() {
29
+ const data = require("@teambit/pkg.modules.component-package-name");
30
+ _pkgModules = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _componentModules() {
36
+ const data = require("@teambit/component.modules.component-url");
37
+ _componentModules = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ /**
43
+ * Fetches and processes remote component details for MCP server.
44
+ *
45
+ * This function is specifically needed for consumer-project mode where there is no local
46
+ * workspace or scope available. It uses ConsumerComponent instances fetched from remote
47
+ * to provide rich component information including extensions data, which enables access
48
+ * to docs, compositions, environment details, and full dependency information.
49
+ */
50
+ async function getRemoteComponentWithDetails(componentName) {
51
+ const componentId = _componentId().ComponentID.fromString(componentName);
52
+ const consumer = await (0, _legacy().loadConsumerIfExist)();
53
+ const remote = await (0, _scope().getRemoteByName)(componentId.scope, consumer);
54
+ const consumerComponent = await remote.show(componentId);
55
+ if (!consumerComponent) {
56
+ throw new Error(`Component ${componentName} not found in remote`);
57
+ }
58
+
59
+ // Build result in the same format as getCompDetails from api-for-ide.ts
60
+ const result = {};
61
+
62
+ // ID as string (to match workspace format)
63
+ result.id = consumerComponent.id.toString();
64
+
65
+ // Package name using componentIdToPackageName utility
66
+ const packageName = (0, _pkgModules().componentIdToPackageName)(consumerComponent);
67
+ result['package name'] = packageName;
68
+
69
+ // Files
70
+ const mainFiles = [];
71
+ const devFiles = {
72
+ config: [] // Add config entry like workspace version
73
+ };
74
+ consumerComponent.files.forEach(file => {
75
+ const relativePath = file.relative;
76
+
77
+ // Categorize files similar to how getCompDetails does it
78
+ if (relativePath.includes('.docs.') || relativePath.includes('.doc.') || relativePath.endsWith('.mdx')) {
79
+ if (!devFiles['teambit.docs/docs']) devFiles['teambit.docs/docs'] = [];
80
+ devFiles['teambit.docs/docs'].push(relativePath);
81
+ } else if (relativePath.includes('.composition.') || relativePath.includes('.comp.')) {
82
+ if (!devFiles['teambit.compositions/compositions']) devFiles['teambit.compositions/compositions'] = [];
83
+ devFiles['teambit.compositions/compositions'].push(relativePath);
84
+ } else if (relativePath.includes('.spec.') || relativePath.includes('.test.')) {
85
+ if (!devFiles['teambit.defender/tester']) devFiles['teambit.defender/tester'] = [];
86
+ devFiles['teambit.defender/tester'].push(relativePath);
87
+ } else {
88
+ mainFiles.push(relativePath);
89
+ }
90
+ });
91
+ result.files = mainFiles;
92
+ result['dev files'] = devFiles;
93
+
94
+ // Extract docs content from files
95
+ const docsFiles = devFiles['teambit.docs/docs'];
96
+ if (docsFiles && docsFiles.length > 0) {
97
+ result.docs = {};
98
+ docsFiles.forEach(filePath => {
99
+ const file = consumerComponent.files.find(f => f.relative === filePath);
100
+ if (file && file.contents) {
101
+ result.docs[filePath] = file.contents.toString();
102
+ }
103
+ });
104
+ }
105
+
106
+ // Extract composition content
107
+ const compositionFiles = devFiles['teambit.compositions/compositions'];
108
+ if (compositionFiles && compositionFiles.length > 0) {
109
+ result.usageExamples = {};
110
+ compositionFiles.forEach(filePath => {
111
+ const file = consumerComponent.files.find(f => f.relative === filePath);
112
+ if (file && file.contents) {
113
+ result.usageExamples[filePath] = file.contents.toString();
114
+ }
115
+ });
116
+ }
117
+
118
+ // Extract environment from extensions
119
+ if (consumerComponent.extensions) {
120
+ const envsExtension = consumerComponent.extensions.findExtension('teambit.envs/envs');
121
+ if (envsExtension && envsExtension.data && envsExtension.data.id) {
122
+ result.env = envsExtension.data.id;
123
+ }
124
+
125
+ // Extract dependencies from dependency resolver extension
126
+ const depResolverExtension = consumerComponent.extensions.findExtension('teambit.dependencies/dependency-resolver');
127
+ if (depResolverExtension && depResolverExtension.data && depResolverExtension.data.dependencies) {
128
+ result.dependencies = depResolverExtension.data.dependencies.map(dep => {
129
+ const {
130
+ packageName: depPackageName,
131
+ id,
132
+ version,
133
+ lifecycle,
134
+ __type: type,
135
+ source
136
+ } = dep;
137
+ const pkg = depPackageName || id;
138
+ const versionStr = version ? `@${version}` : '';
139
+ const compIdStr = type === 'component' && id ? `, component-id: ${id}` : '';
140
+ return `${pkg}${versionStr} (lifecycle: ${lifecycle || 'runtime'}, type: ${type || 'component'}, source: ${source || 'auto'}${compIdStr})`;
141
+ });
142
+ }
143
+ }
144
+
145
+ // Add URL using ComponentUrl utility
146
+ result.url = _componentModules().ComponentUrl.toUrl(componentId, {
147
+ includeVersion: false
148
+ });
149
+
150
+ // Component location (since it's remote)
151
+ result.componentLocation = 'a remote component';
152
+ return result;
153
+ }
154
+
155
+ //# sourceMappingURL=remote-component-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_componentId","data","require","_legacy","_scope","_pkgModules","_componentModules","getRemoteComponentWithDetails","componentName","componentId","ComponentID","fromString","consumer","loadConsumerIfExist","remote","getRemoteByName","scope","consumerComponent","show","Error","result","id","toString","packageName","componentIdToPackageName","mainFiles","devFiles","config","files","forEach","file","relativePath","relative","includes","endsWith","push","docsFiles","length","docs","filePath","find","f","contents","compositionFiles","usageExamples","extensions","envsExtension","findExtension","env","depResolverExtension","dependencies","map","dep","depPackageName","version","lifecycle","__type","type","source","pkg","versionStr","compIdStr","url","ComponentUrl","toUrl","includeVersion","componentLocation"],"sources":["remote-component-utils.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\nimport { loadConsumerIfExist } from '@teambit/legacy.consumer';\nimport { getRemoteByName } from '@teambit/scope.remotes';\nimport { componentIdToPackageName } from '@teambit/pkg.modules.component-package-name';\nimport { ComponentUrl } from '@teambit/component.modules.component-url';\n\n/**\n * Fetches and processes remote component details for MCP server.\n *\n * This function is specifically needed for consumer-project mode where there is no local\n * workspace or scope available. It uses ConsumerComponent instances fetched from remote\n * to provide rich component information including extensions data, which enables access\n * to docs, compositions, environment details, and full dependency information.\n */\nexport async function getRemoteComponentWithDetails(componentName: string): Promise<any> {\n const componentId = ComponentID.fromString(componentName);\n const consumer = await loadConsumerIfExist();\n const remote = await getRemoteByName(componentId.scope as string, consumer);\n\n const consumerComponent = await remote.show(componentId);\n\n if (!consumerComponent) {\n throw new Error(`Component ${componentName} not found in remote`);\n }\n\n // Build result in the same format as getCompDetails from api-for-ide.ts\n const result: any = {};\n\n // ID as string (to match workspace format)\n result.id = consumerComponent.id.toString();\n\n // Package name using componentIdToPackageName utility\n const packageName = componentIdToPackageName(consumerComponent);\n result['package name'] = packageName;\n\n // Files\n const mainFiles: string[] = [];\n const devFiles: any = {\n config: [], // Add config entry like workspace version\n };\n\n consumerComponent.files.forEach((file: any) => {\n const relativePath = file.relative;\n\n // Categorize files similar to how getCompDetails does it\n if (relativePath.includes('.docs.') || relativePath.includes('.doc.') || relativePath.endsWith('.mdx')) {\n if (!devFiles['teambit.docs/docs']) devFiles['teambit.docs/docs'] = [];\n devFiles['teambit.docs/docs'].push(relativePath);\n } else if (relativePath.includes('.composition.') || relativePath.includes('.comp.')) {\n if (!devFiles['teambit.compositions/compositions']) devFiles['teambit.compositions/compositions'] = [];\n devFiles['teambit.compositions/compositions'].push(relativePath);\n } else if (relativePath.includes('.spec.') || relativePath.includes('.test.')) {\n if (!devFiles['teambit.defender/tester']) devFiles['teambit.defender/tester'] = [];\n devFiles['teambit.defender/tester'].push(relativePath);\n } else {\n mainFiles.push(relativePath);\n }\n });\n\n result.files = mainFiles;\n result['dev files'] = devFiles;\n\n // Extract docs content from files\n const docsFiles = devFiles['teambit.docs/docs'];\n if (docsFiles && docsFiles.length > 0) {\n result.docs = {};\n docsFiles.forEach((filePath: string) => {\n const file = consumerComponent.files.find((f: any) => f.relative === filePath);\n if (file && file.contents) {\n result.docs[filePath] = file.contents.toString();\n }\n });\n }\n\n // Extract composition content\n const compositionFiles = devFiles['teambit.compositions/compositions'];\n if (compositionFiles && compositionFiles.length > 0) {\n result.usageExamples = {};\n compositionFiles.forEach((filePath: string) => {\n const file = consumerComponent.files.find((f: any) => f.relative === filePath);\n if (file && file.contents) {\n result.usageExamples[filePath] = file.contents.toString();\n }\n });\n }\n\n // Extract environment from extensions\n if (consumerComponent.extensions) {\n const envsExtension = consumerComponent.extensions.findExtension('teambit.envs/envs');\n if (envsExtension && envsExtension.data && envsExtension.data.id) {\n result.env = envsExtension.data.id;\n }\n\n // Extract dependencies from dependency resolver extension\n const depResolverExtension = consumerComponent.extensions.findExtension('teambit.dependencies/dependency-resolver');\n if (depResolverExtension && depResolverExtension.data && depResolverExtension.data.dependencies) {\n result.dependencies = depResolverExtension.data.dependencies.map((dep: any) => {\n const { packageName: depPackageName, id, version, lifecycle, __type: type, source } = dep;\n const pkg = depPackageName || id;\n const versionStr = version ? `@${version}` : '';\n const compIdStr = type === 'component' && id ? `, component-id: ${id}` : '';\n return `${pkg}${versionStr} (lifecycle: ${lifecycle || 'runtime'}, type: ${type || 'component'}, source: ${source || 'auto'}${compIdStr})`;\n });\n }\n }\n\n // Add URL using ComponentUrl utility\n result.url = ComponentUrl.toUrl(componentId, { includeVersion: false });\n\n // Component location (since it's remote)\n result.componentLocation = 'a remote component';\n\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ import type { Command, CommandOptions } from '@teambit/cli';
2
+ import type { CliMcpServerMain } from './cli-mcp-server.main.runtime';
3
+ export type McpRulesCmdOptions = {
4
+ global?: boolean;
5
+ print?: boolean;
6
+ consumerProject?: boolean;
7
+ forceStandard?: boolean;
8
+ };
9
+ export declare class McpRulesCmd implements Command {
10
+ private mcpServerMain;
11
+ name: string;
12
+ description: string;
13
+ extendedDescription: string;
14
+ arguments: {
15
+ name: string;
16
+ description: string;
17
+ }[];
18
+ options: CommandOptions;
19
+ constructor(mcpServerMain: CliMcpServerMain);
20
+ report([editor]: [string], { global: isGlobal, print: shouldPrint, consumerProject, forceStandard, }: McpRulesCmdOptions): Promise<string>;
21
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.McpRulesCmd = void 0;
7
+ function _chalk() {
8
+ const data = _interopRequireDefault(require("chalk"));
9
+ _chalk = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
17
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ class McpRulesCmd {
19
+ constructor(mcpServerMain) {
20
+ this.mcpServerMain = mcpServerMain;
21
+ _defineProperty(this, "name", 'rules [editor]');
22
+ _defineProperty(this, "description", 'Write Bit MCP rules/instructions file for VS Code, Cursor, Roo Code, Cline, Claude Code, or print to screen');
23
+ _defineProperty(this, "extendedDescription", 'Creates or updates rules/instructions markdown files to provide AI assistants with guidance on using Bit MCP server. Currently supports VS Code, Cursor, Roo Code, Cline, and Claude Code. For Claude Code, creates .claude/bit.md to avoid overwriting existing CLAUDE.md files. Use --print to display content on screen. Use --consumer-project for non-Bit workspaces that only consume components as packages. Use --force-standard to use standard Bit rules instead of Git-integrated template.');
24
+ _defineProperty(this, "arguments", [{
25
+ name: 'editor',
26
+ description: 'Editor to write rules for (default: vscode). Available: vscode, cursor, roo, cline, claude-code'
27
+ }]);
28
+ _defineProperty(this, "options", [['g', 'global', 'Write rules to global configuration (default: workspace-specific)'], ['p', 'print', 'Print rules content to screen instead of writing to file'], ['', 'consumer-project', 'Generate rules for consumer projects that only use Bit components as packages'], ['', 'force-standard', 'Use standard Bit rules template instead of Git-integrated template (even when .git exists)']]);
29
+ }
30
+ async report([editor = 'vscode'], {
31
+ global: isGlobal = false,
32
+ print: shouldPrint = false,
33
+ consumerProject = false,
34
+ forceStandard = false
35
+ }) {
36
+ try {
37
+ // Handle Windsurf requests by directing to print option
38
+ if (editor.toLowerCase() === 'windsurf') {
39
+ if (!shouldPrint) {
40
+ return _chalk().default.yellow('⚠️ Windsurf uses a single-file configuration (.windsurfrules) that is complex to manage automatically.\n' + 'Please use --print flag to get the rules content and manually add it to your .windsurfrules file.');
41
+ }
42
+ // If print is requested, we'll show the content below
43
+ }
44
+ if (shouldPrint) {
45
+ const rulesContent = await this.mcpServerMain.getRulesContent(consumerProject, forceStandard);
46
+ return rulesContent;
47
+ }
48
+ await this.mcpServerMain.writeRulesFile(editor, {
49
+ isGlobal,
50
+ consumerProject,
51
+ forceStandard
52
+ });
53
+ const scope = isGlobal ? 'global' : 'workspace';
54
+ const editorName = this.mcpServerMain.getEditorDisplayName(editor);
55
+
56
+ // Special message for Claude Code to explain the file location
57
+ if (editor.toLowerCase() === 'claude-code') {
58
+ const filePath = isGlobal ? '~/.claude/bit.md' : '.claude/bit.md';
59
+ const atSyntax = isGlobal ? '@~/.claude/bit.md' : '@.claude/bit.md';
60
+ return _chalk().default.green(`✓ Successfully wrote ${editorName} Bit rules file (${scope})\n` + ` File created: ${_chalk().default.cyan(filePath)}\n\n` + ` ${_chalk().default.yellow('Integration:')} Add this line to your main CLAUDE.md file:\n` + ` ${_chalk().default.cyan(atSyntax)}\n\n` + ` ${_chalk().default.gray('This will automatically include all Bit-specific instructions.')}`);
61
+ }
62
+
63
+ // Get the file path for the rules file to show user where it was written
64
+ const rulesPath = this.mcpServerMain.getRulesFilePath(editor, isGlobal);
65
+ return _chalk().default.green(`✓ Successfully wrote ${editorName} Bit MCP rules file (${scope})\n` + ` File written to: ${_chalk().default.cyan(rulesPath)}`);
66
+ } catch (error) {
67
+ const editorName = this.mcpServerMain.getEditorDisplayName(editor);
68
+ return _chalk().default.red(`Error writing ${editorName} rules file: ${error.message}`);
69
+ }
70
+ }
71
+ }
72
+ exports.McpRulesCmd = McpRulesCmd;
73
+
74
+ //# sourceMappingURL=rules-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_chalk","data","_interopRequireDefault","require","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","McpRulesCmd","constructor","mcpServerMain","name","description","report","editor","global","isGlobal","print","shouldPrint","consumerProject","forceStandard","toLowerCase","chalk","yellow","rulesContent","getRulesContent","writeRulesFile","scope","editorName","getEditorDisplayName","filePath","atSyntax","green","cyan","gray","rulesPath","getRulesFilePath","error","red","message","exports"],"sources":["rules-cmd.ts"],"sourcesContent":["import type { Command, CommandOptions } from '@teambit/cli';\nimport chalk from 'chalk';\nimport type { CliMcpServerMain } from './cli-mcp-server.main.runtime';\n\nexport type McpRulesCmdOptions = {\n global?: boolean;\n print?: boolean;\n consumerProject?: boolean;\n forceStandard?: boolean;\n};\n\nexport class McpRulesCmd implements Command {\n name = 'rules [editor]';\n description =\n 'Write Bit MCP rules/instructions file for VS Code, Cursor, Roo Code, Cline, Claude Code, or print to screen';\n extendedDescription =\n 'Creates or updates rules/instructions markdown files to provide AI assistants with guidance on using Bit MCP server. Currently supports VS Code, Cursor, Roo Code, Cline, and Claude Code. For Claude Code, creates .claude/bit.md to avoid overwriting existing CLAUDE.md files. Use --print to display content on screen. Use --consumer-project for non-Bit workspaces that only consume components as packages. Use --force-standard to use standard Bit rules instead of Git-integrated template.';\n arguments = [\n {\n name: 'editor',\n description: 'Editor to write rules for (default: vscode). Available: vscode, cursor, roo, cline, claude-code',\n },\n ];\n options = [\n ['g', 'global', 'Write rules to global configuration (default: workspace-specific)'],\n ['p', 'print', 'Print rules content to screen instead of writing to file'],\n ['', 'consumer-project', 'Generate rules for consumer projects that only use Bit components as packages'],\n [\n '',\n 'force-standard',\n 'Use standard Bit rules template instead of Git-integrated template (even when .git exists)',\n ],\n ] as CommandOptions;\n\n constructor(private mcpServerMain: CliMcpServerMain) {}\n\n async report(\n [editor = 'vscode']: [string],\n {\n global: isGlobal = false,\n print: shouldPrint = false,\n consumerProject = false,\n forceStandard = false,\n }: McpRulesCmdOptions\n ): Promise<string> {\n try {\n // Handle Windsurf requests by directing to print option\n if (editor.toLowerCase() === 'windsurf') {\n if (!shouldPrint) {\n return chalk.yellow(\n '⚠️ Windsurf uses a single-file configuration (.windsurfrules) that is complex to manage automatically.\\n' +\n 'Please use --print flag to get the rules content and manually add it to your .windsurfrules file.'\n );\n }\n // If print is requested, we'll show the content below\n }\n\n if (shouldPrint) {\n const rulesContent = await this.mcpServerMain.getRulesContent(consumerProject, forceStandard);\n return rulesContent;\n }\n\n await this.mcpServerMain.writeRulesFile(editor, {\n isGlobal,\n consumerProject,\n forceStandard,\n });\n\n const scope = isGlobal ? 'global' : 'workspace';\n const editorName = this.mcpServerMain.getEditorDisplayName(editor);\n\n // Special message for Claude Code to explain the file location\n if (editor.toLowerCase() === 'claude-code') {\n const filePath = isGlobal ? '~/.claude/bit.md' : '.claude/bit.md';\n const atSyntax = isGlobal ? '@~/.claude/bit.md' : '@.claude/bit.md';\n\n return chalk.green(\n `✓ Successfully wrote ${editorName} Bit rules file (${scope})\\n` +\n ` File created: ${chalk.cyan(filePath)}\\n\\n` +\n ` ${chalk.yellow('Integration:')} Add this line to your main CLAUDE.md file:\\n` +\n ` ${chalk.cyan(atSyntax)}\\n\\n` +\n ` ${chalk.gray('This will automatically include all Bit-specific instructions.')}`\n );\n }\n\n // Get the file path for the rules file to show user where it was written\n const rulesPath = this.mcpServerMain.getRulesFilePath(editor, isGlobal);\n\n return chalk.green(\n `✓ Successfully wrote ${editorName} Bit MCP rules file (${scope})\\n` +\n ` File written to: ${chalk.cyan(rulesPath)}`\n );\n } catch (error) {\n const editorName = this.mcpServerMain.getEditorDisplayName(editor);\n return chalk.red(`Error writing ${editorName} rules file: ${(error as Error).message}`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}