@teambit/cli-mcp-server 0.0.12 → 0.0.14

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,532 @@
1
+ "use strict";
2
+
3
+ function _chai() {
4
+ const data = require("chai");
5
+ _chai = function () {
6
+ return data;
7
+ };
8
+ return data;
9
+ }
10
+ function _index() {
11
+ const data = require("@modelcontextprotocol/sdk/client/index.js");
12
+ _index = function () {
13
+ return data;
14
+ };
15
+ return data;
16
+ }
17
+ function _stdio() {
18
+ const data = require("@modelcontextprotocol/sdk/client/stdio.js");
19
+ _stdio = function () {
20
+ return data;
21
+ };
22
+ return data;
23
+ }
24
+ function _workspaceTesting() {
25
+ const data = require("@teambit/workspace.testing.mock-workspace");
26
+ _workspaceTesting = function () {
27
+ return data;
28
+ };
29
+ return data;
30
+ }
31
+ function _componentTesting() {
32
+ const data = require("@teambit/component.testing.mock-components");
33
+ _componentTesting = function () {
34
+ return data;
35
+ };
36
+ return data;
37
+ }
38
+ function _harmonyTesting() {
39
+ const data = require("@teambit/harmony.testing.load-aspect");
40
+ _harmonyTesting = function () {
41
+ return data;
42
+ };
43
+ return data;
44
+ }
45
+ function _fsExtra() {
46
+ const data = _interopRequireDefault(require("fs-extra"));
47
+ _fsExtra = function () {
48
+ return data;
49
+ };
50
+ return data;
51
+ }
52
+ function _path() {
53
+ const data = _interopRequireDefault(require("path"));
54
+ _path = function () {
55
+ return data;
56
+ };
57
+ return data;
58
+ }
59
+ function _cliMcpServer() {
60
+ const data = require("./cli-mcp-server.aspect");
61
+ _cliMcpServer = function () {
62
+ return data;
63
+ };
64
+ return data;
65
+ }
66
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
67
+ /* eslint-disable import/extensions */
68
+ /* eslint-disable import/no-unresolved */
69
+
70
+ describe('CliMcpServer Integration Tests', function () {
71
+ this.timeout(30000); // Increased timeout for MCP server operations
72
+
73
+ let workspaceData;
74
+ let mcpClient;
75
+ let workspacePath;
76
+ before(async () => {
77
+ // Set up mock workspace with components
78
+ workspaceData = (0, _workspaceTesting().mockWorkspace)();
79
+ workspacePath = workspaceData.workspacePath;
80
+ await (0, _componentTesting().mockComponents)(workspacePath);
81
+ });
82
+ after(async () => {
83
+ await (0, _workspaceTesting().destroyWorkspace)(workspaceData);
84
+ });
85
+ beforeEach(async () => {
86
+ // Create MCP client and connect directly to the MCP server command
87
+ const transport = new (_stdio().StdioClientTransport)({
88
+ command: 'bit',
89
+ args: ['mcp-server'],
90
+ cwd: workspacePath
91
+ });
92
+ mcpClient = new (_index().Client)({
93
+ name: 'test-client',
94
+ version: '1.0.0'
95
+ }, {
96
+ capabilities: {}
97
+ });
98
+ await mcpClient.connect(transport);
99
+ });
100
+ afterEach(async () => {
101
+ // Clean up MCP client
102
+ if (mcpClient) {
103
+ await mcpClient.close();
104
+ }
105
+ });
106
+ describe('MCP Server Protocol', () => {
107
+ it('should list available tools', async () => {
108
+ const response = await mcpClient.listTools();
109
+ (0, _chai().expect)(response.tools).to.be.an('array');
110
+ (0, _chai().expect)(response.tools.length).to.be.greaterThan(0);
111
+
112
+ // Check for essential MCP tools
113
+ const toolNames = response.tools.map(tool => tool.name);
114
+ (0, _chai().expect)(toolNames).to.include('bit_workspace_info');
115
+ (0, _chai().expect)(toolNames).to.include('bit_component_details');
116
+ (0, _chai().expect)(toolNames).to.include('bit_commands_list');
117
+ (0, _chai().expect)(toolNames).to.include('bit_query');
118
+ (0, _chai().expect)(toolNames).to.include('bit_execute');
119
+ });
120
+ });
121
+ describe('bit_workspace_info tool', () => {
122
+ it('should get workspace information', async () => {
123
+ const result = await mcpClient.callTool({
124
+ name: 'bit_workspace_info',
125
+ arguments: {
126
+ cwd: workspacePath,
127
+ includeStatus: true,
128
+ includeList: true
129
+ }
130
+ });
131
+ (0, _chai().expect)(result).to.have.property('content');
132
+ (0, _chai().expect)(result.content).to.be.an('array');
133
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
134
+ const content = JSON.parse(result.content[0].text);
135
+ (0, _chai().expect)(content).to.have.property('status');
136
+ (0, _chai().expect)(content).to.have.property('list');
137
+ });
138
+ it('should handle workspace info without optional parameters', async () => {
139
+ const result = await mcpClient.callTool({
140
+ name: 'bit_workspace_info',
141
+ arguments: {
142
+ cwd: workspacePath
143
+ }
144
+ });
145
+ (0, _chai().expect)(result).to.have.property('content');
146
+ (0, _chai().expect)(result.content).to.be.an('array');
147
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
148
+ const content = JSON.parse(result.content[0].text);
149
+ (0, _chai().expect)(content).to.have.property('status');
150
+ });
151
+ });
152
+ describe('bit_component_details tool', () => {
153
+ it('should get component details for an existing component', async () => {
154
+ const firstComponentId = 'comp1';
155
+ const result = await mcpClient.callTool({
156
+ name: 'bit_component_details',
157
+ arguments: {
158
+ cwd: workspacePath,
159
+ componentName: firstComponentId,
160
+ includeSchema: false
161
+ }
162
+ });
163
+ (0, _chai().expect)(result).to.have.property('content');
164
+ (0, _chai().expect)(result.content).to.be.an('array');
165
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
166
+ const content = JSON.parse(result.content[0].text);
167
+ (0, _chai().expect)(content).to.have.property('show');
168
+ });
169
+ it('should get component details with schema', async () => {
170
+ const firstComponentId = 'comp1';
171
+ const result = await mcpClient.callTool({
172
+ name: 'bit_component_details',
173
+ arguments: {
174
+ cwd: workspacePath,
175
+ componentName: firstComponentId,
176
+ includeSchema: true
177
+ }
178
+ });
179
+ (0, _chai().expect)(result).to.have.property('content');
180
+ (0, _chai().expect)(result.content).to.be.an('array');
181
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
182
+ const content = JSON.parse(result.content[0].text);
183
+ (0, _chai().expect)(content).to.have.property('show');
184
+ });
185
+ it('should handle non-existent component gracefully', async () => {
186
+ const result = await mcpClient.callTool({
187
+ name: 'bit_component_details',
188
+ arguments: {
189
+ cwd: workspacePath,
190
+ componentName: 'non-existent/component'
191
+ }
192
+ });
193
+ (0, _chai().expect)(result).to.have.property('content');
194
+ (0, _chai().expect)(result.content).to.be.an('array');
195
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
196
+
197
+ // Should return error information or component details
198
+ const content = result.content[0].text;
199
+ (0, _chai().expect)(content).to.be.a('string');
200
+ });
201
+ });
202
+ describe('bit_commands_list tool', () => {
203
+ it('should get basic commands list', async () => {
204
+ const result = await mcpClient.callTool({
205
+ name: 'bit_commands_list',
206
+ arguments: {}
207
+ });
208
+ (0, _chai().expect)(result).to.have.property('content');
209
+ (0, _chai().expect)(result.content).to.be.an('array');
210
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
211
+ const content = JSON.parse(result.content[0].text);
212
+ (0, _chai().expect)(content).to.have.property('commands');
213
+ (0, _chai().expect)(content.commands).to.be.an('array');
214
+ (0, _chai().expect)(content.commands.length).to.be.greaterThan(0);
215
+
216
+ // Check command structure
217
+ const firstCommand = content.commands[0];
218
+ (0, _chai().expect)(firstCommand).to.have.property('name');
219
+ (0, _chai().expect)(firstCommand).to.have.property('description');
220
+ });
221
+ it('should get extended commands info', async () => {
222
+ const result = await mcpClient.callTool({
223
+ name: 'bit_commands_list',
224
+ arguments: {
225
+ extendedDescription: true,
226
+ internal: false
227
+ }
228
+ });
229
+ (0, _chai().expect)(result).to.have.property('content');
230
+ (0, _chai().expect)(result.content).to.be.an('array');
231
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
232
+ const content = JSON.parse(result.content[0].text);
233
+ (0, _chai().expect)(content).to.have.property('commands');
234
+ (0, _chai().expect)(content.commands).to.be.an('array');
235
+ (0, _chai().expect)(content.commands.length).to.be.greaterThan(0);
236
+ });
237
+ });
238
+ describe('bit_command_help tool', () => {
239
+ it('should get help for a main command', async () => {
240
+ const result = await mcpClient.callTool({
241
+ name: 'bit_command_help',
242
+ arguments: {
243
+ command: 'status'
244
+ }
245
+ });
246
+ (0, _chai().expect)(result).to.have.property('content');
247
+ (0, _chai().expect)(result.content).to.be.an('array');
248
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
249
+ const content = JSON.parse(result.content[0].text);
250
+ (0, _chai().expect)(content).to.have.property('name', 'status');
251
+ (0, _chai().expect)(content).to.have.property('description');
252
+ (0, _chai().expect)(content).to.have.property('options');
253
+ });
254
+ it('should get help for lane switch subcommand (private command)', async () => {
255
+ const result = await mcpClient.callTool({
256
+ name: 'bit_command_help',
257
+ arguments: {
258
+ command: 'lane',
259
+ subcommand: 'switch'
260
+ }
261
+ });
262
+ (0, _chai().expect)(result).to.have.property('content');
263
+ (0, _chai().expect)(result.content).to.be.an('array');
264
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
265
+ const content = JSON.parse(result.content[0].text);
266
+ (0, _chai().expect)(content).to.have.property('name', 'lane switch');
267
+ (0, _chai().expect)(content).to.have.property('description');
268
+ (0, _chai().expect)(content.description).to.include('switch to the specified lane');
269
+ (0, _chai().expect)(content).to.have.property('private', true);
270
+ (0, _chai().expect)(content).to.have.property('arguments');
271
+ (0, _chai().expect)(content.arguments).to.be.an('array');
272
+ (0, _chai().expect)(content.arguments[0]).to.have.property('name', 'lane');
273
+ (0, _chai().expect)(content.arguments[0]).to.have.property('description');
274
+ });
275
+ it('should get help for a subcommand that exists', async () => {
276
+ const result = await mcpClient.callTool({
277
+ name: 'bit_command_help',
278
+ arguments: {
279
+ command: 'lane',
280
+ subcommand: 'show'
281
+ }
282
+ });
283
+ (0, _chai().expect)(result).to.have.property('content');
284
+ (0, _chai().expect)(result.content).to.be.an('array');
285
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
286
+ const content = JSON.parse(result.content[0].text);
287
+ (0, _chai().expect)(content).to.have.property('name', 'lane show');
288
+ (0, _chai().expect)(content).to.have.property('description');
289
+ });
290
+ it('should return error for non-existent command', async () => {
291
+ const result = await mcpClient.callTool({
292
+ name: 'bit_command_help',
293
+ arguments: {
294
+ command: 'nonexistent'
295
+ }
296
+ });
297
+ (0, _chai().expect)(result).to.have.property('content');
298
+ (0, _chai().expect)(result.content).to.be.an('array');
299
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
300
+ const content = result.content[0].text;
301
+ (0, _chai().expect)(content).to.include('Command not found: nonexistent');
302
+ });
303
+ it('should return error for non-existent subcommand', async () => {
304
+ const result = await mcpClient.callTool({
305
+ name: 'bit_command_help',
306
+ arguments: {
307
+ command: 'lane',
308
+ subcommand: 'nonexistent'
309
+ }
310
+ });
311
+ (0, _chai().expect)(result).to.have.property('content');
312
+ (0, _chai().expect)(result.content).to.be.an('array');
313
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
314
+ const content = result.content[0].text;
315
+ (0, _chai().expect)(content).to.include('Command not found: lane nonexistent');
316
+ });
317
+ });
318
+ describe('bit_query tool', () => {
319
+ it('should execute read-only commands', async () => {
320
+ const result = await mcpClient.callTool({
321
+ name: 'bit_query',
322
+ arguments: {
323
+ cwd: workspacePath,
324
+ command: 'status'
325
+ }
326
+ });
327
+ (0, _chai().expect)(result).to.have.property('content');
328
+ (0, _chai().expect)(result.content).to.be.an('array');
329
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
330
+
331
+ // Should return command output
332
+ const content = result.content[0].text;
333
+ (0, _chai().expect)(content).to.be.a('string');
334
+ });
335
+ it('should handle commands with arguments and flags', async () => {
336
+ const result = await mcpClient.callTool({
337
+ name: 'bit_query',
338
+ arguments: {
339
+ cwd: workspacePath,
340
+ command: 'list',
341
+ args: [],
342
+ flags: {
343
+ json: true
344
+ }
345
+ }
346
+ });
347
+ (0, _chai().expect)(result).to.have.property('content');
348
+ (0, _chai().expect)(result.content).to.be.an('array');
349
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
350
+ const content = result.content[0].text;
351
+ (0, _chai().expect)(content).to.be.a('string');
352
+ });
353
+ });
354
+ describe('Error Handling', () => {
355
+ it('should handle invalid tool calls gracefully', async () => {
356
+ try {
357
+ await mcpClient.callTool({
358
+ name: 'non_existent_tool',
359
+ arguments: {}
360
+ });
361
+ _chai().expect.fail('Should have thrown an error for non-existent tool');
362
+ } catch (error) {
363
+ (0, _chai().expect)(error).to.exist;
364
+ }
365
+ });
366
+ it('should handle invalid workspace directory', async () => {
367
+ const result = await mcpClient.callTool({
368
+ name: 'bit_workspace_info',
369
+ arguments: {
370
+ cwd: '/non/existent/path'
371
+ }
372
+ });
373
+ (0, _chai().expect)(result).to.have.property('content');
374
+ (0, _chai().expect)(result.content).to.be.an('array');
375
+ (0, _chai().expect)(result.content[0]).to.have.property('type', 'text');
376
+
377
+ // Should return error information
378
+ const content = result.content[0].text;
379
+ (0, _chai().expect)(content).to.be.a('string');
380
+ });
381
+ });
382
+ });
383
+ describe('CliMcpServer Direct Aspect Tests', function () {
384
+ this.timeout(30000);
385
+ let workspaceData;
386
+ let mcpServer;
387
+ let workspacePath;
388
+ before(async () => {
389
+ // Set up mock workspace with components
390
+ workspaceData = (0, _workspaceTesting().mockWorkspace)();
391
+ workspacePath = workspaceData.workspacePath;
392
+ await (0, _componentTesting().mockComponents)(workspacePath);
393
+
394
+ // Load the aspect directly
395
+ mcpServer = await (0, _harmonyTesting().loadAspect)(_cliMcpServer().CliMcpServerAspect, workspacePath);
396
+ });
397
+ after(async () => {
398
+ await (0, _workspaceTesting().destroyWorkspace)(workspaceData);
399
+ });
400
+ describe('Setup Editor Methods', () => {
401
+ let setupWorkspaceData;
402
+ let setupWorkspacePath;
403
+ let setupMcpServer;
404
+ beforeEach(async () => {
405
+ // Create a separate mock workspace for setup testing
406
+ setupWorkspaceData = (0, _workspaceTesting().mockWorkspace)();
407
+ setupWorkspacePath = setupWorkspaceData.workspacePath;
408
+ await (0, _componentTesting().mockComponents)(setupWorkspacePath);
409
+
410
+ // Load the aspect for this workspace
411
+ setupMcpServer = await (0, _harmonyTesting().loadAspect)(_cliMcpServer().CliMcpServerAspect, setupWorkspacePath);
412
+ });
413
+ afterEach(async () => {
414
+ // Clean up the setup workspace
415
+ if (setupWorkspaceData) {
416
+ await (0, _workspaceTesting().destroyWorkspace)(setupWorkspaceData);
417
+ }
418
+ });
419
+ it('should handle unsupported editor gracefully', async () => {
420
+ try {
421
+ await mcpServer.setupEditor('unsupported-editor', {
422
+ isGlobal: false
423
+ });
424
+ _chai().expect.fail('Should have thrown an error for unsupported editor');
425
+ } catch (error) {
426
+ (0, _chai().expect)(error).to.exist;
427
+ (0, _chai().expect)(error.message).to.include('Editor "unsupported-editor" is not supported yet');
428
+ (0, _chai().expect)(error.message).to.include('Currently supported: vscode, cursor, windsurf');
429
+ }
430
+ });
431
+ it('should setup VS Code integration directly', async () => {
432
+ await setupMcpServer.setupEditor('vscode', {
433
+ isGlobal: false
434
+ }, setupWorkspacePath);
435
+
436
+ // Verify that the settings.json file was created in the workspace directory
437
+ const vscodeSettingsPath = _path().default.join(setupWorkspacePath, '.vscode', 'settings.json');
438
+ const settingsExists = await _fsExtra().default.pathExists(vscodeSettingsPath);
439
+ (0, _chai().expect)(settingsExists).to.be.true;
440
+
441
+ // Verify the content of the settings file
442
+ const settings = await _fsExtra().default.readJson(vscodeSettingsPath);
443
+ (0, _chai().expect)(settings).to.have.property('mcp');
444
+ (0, _chai().expect)(settings.mcp).to.have.property('servers');
445
+ (0, _chai().expect)(settings.mcp.servers).to.have.property('bit-cli');
446
+ (0, _chai().expect)(settings.mcp.servers['bit-cli']).to.deep.equal({
447
+ command: 'bit',
448
+ args: ['mcp-server']
449
+ });
450
+ });
451
+ it('should setup VS Code integration with extended options', async () => {
452
+ await setupMcpServer.setupEditor('vscode', {
453
+ extended: true,
454
+ consumerProject: true,
455
+ includeOnly: 'status,list',
456
+ isGlobal: false
457
+ }, setupWorkspacePath);
458
+ const vscodeSettingsPath = _path().default.join(setupWorkspacePath, '.vscode', 'settings.json');
459
+ const settings = await _fsExtra().default.readJson(vscodeSettingsPath);
460
+ (0, _chai().expect)(settings.mcp.servers['bit-cli'].args).to.include('--extended');
461
+ (0, _chai().expect)(settings.mcp.servers['bit-cli'].args).to.include('--consumer-project');
462
+ (0, _chai().expect)(settings.mcp.servers['bit-cli'].args).to.include('--include-only');
463
+ (0, _chai().expect)(settings.mcp.servers['bit-cli'].args).to.include('status,list');
464
+ });
465
+ it('should setup Cursor integration directly', async () => {
466
+ await setupMcpServer.setupEditor('cursor', {
467
+ isGlobal: false
468
+ }, setupWorkspacePath);
469
+
470
+ // Verify that the mcp.json file was created in the workspace directory
471
+ const cursorConfigPath = _path().default.join(setupWorkspacePath, '.cursor', 'mcp.json');
472
+ const configExists = await _fsExtra().default.pathExists(cursorConfigPath);
473
+ (0, _chai().expect)(configExists).to.be.true;
474
+
475
+ // Verify the content of the config file
476
+ const config = await _fsExtra().default.readJson(cursorConfigPath);
477
+ (0, _chai().expect)(config).to.have.property('mcpServers');
478
+ (0, _chai().expect)(config.mcpServers).to.have.property('bit');
479
+ (0, _chai().expect)(config.mcpServers.bit).to.deep.equal({
480
+ type: 'stdio',
481
+ command: 'bit',
482
+ args: ['mcp-server']
483
+ });
484
+ });
485
+ it('should setup Windsurf integration directly', async () => {
486
+ await setupMcpServer.setupEditor('windsurf', {
487
+ isGlobal: false
488
+ }, setupWorkspacePath);
489
+
490
+ // Verify that the mcp.json file was created in the workspace directory
491
+ const windsurfConfigPath = _path().default.join(setupWorkspacePath, '.windsurf', 'mcp.json');
492
+ const configExists = await _fsExtra().default.pathExists(windsurfConfigPath);
493
+ (0, _chai().expect)(configExists).to.be.true;
494
+
495
+ // Verify the content of the config file
496
+ const config = await _fsExtra().default.readJson(windsurfConfigPath);
497
+ (0, _chai().expect)(config).to.have.property('mcpServers');
498
+ (0, _chai().expect)(config.mcpServers).to.have.property('bit');
499
+ (0, _chai().expect)(config.mcpServers.bit).to.deep.equal({
500
+ type: 'stdio',
501
+ command: 'bit',
502
+ args: ['mcp-server']
503
+ });
504
+ });
505
+ it('should merge with existing VS Code settings', async () => {
506
+ // First, create existing settings
507
+ const vscodeSettingsPath = _path().default.join(setupWorkspacePath, '.vscode', 'settings.json');
508
+ await _fsExtra().default.ensureDir(_path().default.dirname(vscodeSettingsPath));
509
+ await _fsExtra().default.writeJson(vscodeSettingsPath, {
510
+ 'editor.formatOnSave': true,
511
+ 'typescript.preferences.includePackageJsonAutoImports': 'off'
512
+ });
513
+
514
+ // Run setup
515
+ await setupMcpServer.setupEditor('vscode', {
516
+ isGlobal: false
517
+ }, setupWorkspacePath);
518
+
519
+ // Verify that existing settings are preserved and MCP config is added
520
+ const settings = await _fsExtra().default.readJson(vscodeSettingsPath);
521
+ (0, _chai().expect)(settings).to.have.property('editor.formatOnSave', true);
522
+ (0, _chai().expect)(settings).to.have.property('typescript.preferences.includePackageJsonAutoImports', 'off');
523
+ (0, _chai().expect)(settings).to.have.property('mcp');
524
+ (0, _chai().expect)(settings.mcp.servers['bit-cli']).to.deep.equal({
525
+ command: 'bit',
526
+ args: ['mcp-server']
527
+ });
528
+ });
529
+ });
530
+ });
531
+
532
+ //# sourceMappingURL=cli-mcp-server.spec.js.map
@@ -0,0 +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","result","callTool","arguments","includeStatus","includeList","have","property","content","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","vscodeSettingsPath","path","join","settingsExists","fs","pathExists","true","settings","readJson","mcp","servers","deep","equal","extended","consumerProject","includeOnly","cursorConfigPath","configExists","config","mcpServers","bit","type","windsurfConfigPath","ensureDir","dirname","writeJson"],"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 { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport { mockWorkspace, destroyWorkspace, WorkspaceData } 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 { 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'],\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('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('show');\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('show');\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 extended commands info', 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('private', true);\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');\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 settings.json file was created in the workspace directory\n const vscodeSettingsPath = path.join(setupWorkspacePath, '.vscode', 'settings.json');\n const settingsExists = await fs.pathExists(vscodeSettingsPath);\n expect(settingsExists).to.be.true;\n\n // Verify the content of the settings file\n const settings = await fs.readJson(vscodeSettingsPath);\n expect(settings).to.have.property('mcp');\n expect(settings.mcp).to.have.property('servers');\n expect(settings.mcp.servers).to.have.property('bit-cli');\n expect(settings.mcp.servers['bit-cli']).to.deep.equal({\n command: 'bit',\n args: ['mcp-server'],\n });\n });\n\n it('should setup VS Code integration with extended options', async () => {\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n extended: true,\n consumerProject: true,\n includeOnly: 'status,list',\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n const vscodeSettingsPath = path.join(setupWorkspacePath, '.vscode', 'settings.json');\n const settings = await fs.readJson(vscodeSettingsPath);\n\n expect(settings.mcp.servers['bit-cli'].args).to.include('--extended');\n expect(settings.mcp.servers['bit-cli'].args).to.include('--consumer-project');\n expect(settings.mcp.servers['bit-cli'].args).to.include('--include-only');\n expect(settings.mcp.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'],\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'],\n });\n });\n\n it('should merge with existing VS Code settings', async () => {\n // First, create existing settings\n const vscodeSettingsPath = path.join(setupWorkspacePath, '.vscode', 'settings.json');\n await fs.ensureDir(path.dirname(vscodeSettingsPath));\n await fs.writeJson(vscodeSettingsPath, {\n 'editor.formatOnSave': true,\n 'typescript.preferences.includePackageJsonAutoImports': 'off',\n });\n\n // Run setup\n await setupMcpServer.setupEditor(\n 'vscode',\n {\n isGlobal: false,\n },\n setupWorkspacePath\n );\n\n // Verify that existing settings are preserved and MCP config is added\n const settings = await fs.readJson(vscodeSettingsPath);\n expect(settings).to.have.property('editor.formatOnSave', true);\n expect(settings).to.have.property('typescript.preferences.includePackageJsonAutoImports', 'off');\n expect(settings).to.have.property('mcp');\n expect(settings.mcp.servers['bit-cli']).to.deep.equal({\n command: 'bit',\n args: ['mcp-server'],\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { CLIArgs, Command, CommandOptions } from '@teambit/cli';
2
2
  import { CliMcpServerMain } from './cli-mcp-server.main.runtime';
3
- export type McpServerCmdOptions = {
3
+ export type McpStartCmdOptions = {
4
4
  extended?: boolean;
5
5
  includeOnly?: string;
6
6
  includeAdditional?: string;
@@ -16,6 +16,19 @@ export declare class McpServerCmd implements Command {
16
16
  group: string;
17
17
  loader: boolean;
18
18
  options: CommandOptions;
19
+ commands: Command[];
19
20
  constructor(mcpServer: CliMcpServerMain);
20
- wait(args: CLIArgs, flags: McpServerCmdOptions): Promise<void>;
21
+ wait(args: CLIArgs, flags: McpStartCmdOptions): Promise<void>;
22
+ }
23
+ export declare class McpStartCmd implements Command {
24
+ private mcpServer;
25
+ name: string;
26
+ description: string;
27
+ extendedDescription: string;
28
+ alias: string;
29
+ group: string;
30
+ loader: boolean;
31
+ options: CommandOptions;
32
+ constructor(mcpServer: CliMcpServerMain);
33
+ wait(args: CLIArgs, flags: McpStartCmdOptions): Promise<void>;
21
34
  }