Skip to content

Commit bf2950d

Browse files
authored
new: Add MCP support to extension. (#86)
* deps(moon): Update to v1.38. * Add mcp.
1 parent 03da3c9 commit bf2950d

File tree

6 files changed

+1428
-430
lines changed

6 files changed

+1428
-430
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
],
1414
"devDependencies": {
1515
"@babel/core": "^7.27.1",
16-
"@moonrepo/cli": "^1.36.0",
16+
"@moonrepo/cli": "^1.38.5",
1717
"@moonrepo/dev": "workspace:*",
1818
"eslint": "^9.27.0",
1919
"jest": "^29.7.0",

packages/vscode-extension/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.15.0
2+
3+
- Added MCP support. Requires VS Code v1.102.0.
4+
15
## 0.14.0
26

37
- Added support for the task graph. Requires moon v1.30.

packages/vscode-extension/package.json

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"private": true,
3-
"version": "0.14.0",
3+
"version": "0.15.0",
44
"name": "moon-console",
55
"publisher": "moonrepo",
66
"displayName": "moon console",
@@ -21,7 +21,7 @@
2121
"tasks"
2222
],
2323
"engines": {
24-
"vscode": "^1.77.0"
24+
"vscode": "^1.90.0"
2525
},
2626
"categories": [
2727
"Testing",
@@ -169,6 +169,12 @@
169169
"icon": "$(open-preview)"
170170
}
171171
],
172+
"mcpServerDefinitionProviders": [
173+
{
174+
"id": "moonMcpProvider",
175+
"label": "moon MCP Server Provider"
176+
}
177+
],
172178
"menus": {
173179
"commandPalette": [
174180
{
@@ -348,14 +354,14 @@
348354
"dependencies": {
349355
"@moonrepo/report": "^1.4.0",
350356
"execa": "^5.1.1",
351-
"semver": "^7.7.1"
357+
"semver": "^7.7.2"
352358
},
353359
"devDependencies": {
354-
"@moonrepo/types": "^1.28.0",
355-
"@types/semver": "^7.5.8",
356-
"@types/vscode": "1.77.0",
357-
"@vscode/test-electron": "^2.4.1",
358-
"esbuild": "^0.25.1",
359-
"vsce": "^2.15.0"
360+
"@moonrepo/types": "^1.30.1",
361+
"@types/semver": "^7.7.0",
362+
"@types/vscode": "1.102.0",
363+
"@vscode/test-electron": "^2.5.2",
364+
"@vscode/vsce": "^3.6.0",
365+
"esbuild": "^0.25.6"
360366
}
361367
}

packages/vscode-extension/src/extension.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export function activate(context: vscode.ExtensionContext) {
1414
const workspace = new Workspace();
1515
const projectsProvider = new ProjectsProvider(context, workspace, 'category');
1616
const tagsProvider = new ProjectsProvider(context, workspace, 'tag');
17+
const didChangeEmitter = new vscode.EventEmitter<void>();
1718

1819
context.subscriptions.push(
1920
vscode.commands.registerCommand('moon.openSettings', () =>
@@ -52,6 +53,18 @@ export function activate(context: vscode.ExtensionContext) {
5253
'moonLastRun',
5354
new LastRunProvider(context, workspace),
5455
),
56+
57+
// Support MCP
58+
vscode.lm.registerMcpServerDefinitionProvider('moonMcpProvider', {
59+
onDidChangeMcpServerDefinitions: didChangeEmitter.event,
60+
provideMcpServerDefinitions: async () => {
61+
return [
62+
new vscode.McpStdioServerDefinition('moon', 'moon', ['mcp'], {
63+
MOON_WORKSPACE_ROOT: '${workspaceFolder}',
64+
}),
65+
];
66+
},
67+
}),
5568
);
5669
}
5770

packages/vscode-extension/src/projectsView.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import vscode, {
44
Disposable,
55
type Event,
66
EventEmitter,
7+
type IconPath,
78
TaskGroup,
89
ThemeIcon,
910
TreeItem,
@@ -36,17 +37,17 @@ const LANGUAGE_MANIFESTS: Record<LanguageType, string> = {
3637
};
3738

3839
// https://devicon.dev
39-
function createLangIcon(context: vscode.ExtensionContext, name: LanguageType) {
40-
const icon = context.asAbsolutePath(path.join(`assets/langs/${name}.svg`));
40+
function createLangIcon(context: vscode.ExtensionContext, name: LanguageType): IconPath {
41+
const icon = vscode.Uri.joinPath(context.extensionUri, `assets/langs/${name}.svg`);
4142

42-
if (fs.existsSync(icon)) {
43+
if (fs.existsSync(icon.fsPath)) {
4344
return {
4445
dark: icon,
4546
light: icon,
4647
};
4748
}
4849

49-
const unknown = context.asAbsolutePath(path.join('assets/langs/unknown.svg'));
50+
const unknown = vscode.Uri.joinPath(context.extensionUri, 'assets/langs/unknown.svg');
5051

5152
return {
5253
dark: unknown,

0 commit comments

Comments
 (0)