From d899ba25cef24aa6036a52da02b3a721a5bd1404 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Jun 2025 21:24:50 +0000 Subject: [PATCH 1/2] Initial plan for issue From 468cd0b0bbddfa2ba430f63775692d3a41cd62cc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Jun 2025 21:30:53 +0000 Subject: [PATCH 2/2] Add Visual Studio Code as MCP client Co-authored-by: digitarald <8599+digitarald@users.noreply.github.com> --- src/extension/ui/src/MCPClients.ts | 4 +++ src/extension/ui/src/mcp-clients/VSCode.ts | 39 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/extension/ui/src/mcp-clients/VSCode.ts diff --git a/src/extension/ui/src/MCPClients.ts b/src/extension/ui/src/MCPClients.ts index 01525957..f87bb1a5 100644 --- a/src/extension/ui/src/MCPClients.ts +++ b/src/extension/ui/src/MCPClients.ts @@ -3,6 +3,7 @@ import ClaudeDesktop from "./mcp-clients/ClaudeDesktop"; import ContinueDotDev from "./mcp-clients/ContinueDotDev"; import Cursor from "./mcp-clients/Cursor"; import Gordon from "./mcp-clients/Gordon"; +import VSCode from "./mcp-clients/VSCode"; import { MCPClient } from "./types/mcp"; export type MCPClientState = { @@ -31,6 +32,9 @@ export const getMCPClientStates = async (ddClient: v1.DockerDesktopClient) => { if (fromCLI["continue"]) { mcpClientStates[ContinueDotDev.name] = toState(ContinueDotDev, fromCLI["continue"]); } + if (fromCLI["vscode"]) { + mcpClientStates[VSCode.name] = toState(VSCode, fromCLI["vscode"]); + } } } catch (e) { ddClient.desktopUI.toast.error("Unable to connect Claude Desktop"); diff --git a/src/extension/ui/src/mcp-clients/VSCode.ts b/src/extension/ui/src/mcp-clients/VSCode.ts new file mode 100644 index 00000000..2b0c4ca7 --- /dev/null +++ b/src/extension/ui/src/mcp-clients/VSCode.ts @@ -0,0 +1,39 @@ +import { v1 } from "@docker/extension-api-client-types"; +import { MCPClient, SAMPLE_MCP_CONFIG } from "./MCPTypes"; + +class VSCodeClient implements MCPClient { + name = "Visual Studio Code"; + url = "https://code.visualstudio.com/download"; + manualConfigSteps = [ + "Open VS Code Settings (File > Preferences > Settings or Ctrl+,)", + "Click on Open Settings (JSON) in the top right corner", + "Add MCP configuration to the settings.json file:", + '
' +
+    JSON.stringify({
+      "mcp.servers": SAMPLE_MCP_CONFIG.mcpServers
+    }, null, 2) +
+    "
", + "Save the settings file and restart VS Code if necessary" + ]; + expectedConfigPath = { + darwin: "$HOME/Library/Application Support/Code/User/settings.json", + linux: "$HOME/.config/Code/User/settings.json", + win32: "$APPDATA\\Code\\User\\settings.json", + }; + connect = async (client: v1.DockerDesktopClient) => { + try { + await client.extension.host?.cli.exec("host-binary", ["client", "connect", "--global", "vscode"]); + } catch (e) { + client.desktopUI.toast.error("Unable to connect Visual Studio Code"); + } + }; + disconnect = async (client: v1.DockerDesktopClient) => { + try { + await client.extension.host?.cli.exec("host-binary", ["client", "disconnect", "--global", "vscode"]); + } catch (e) { + client.desktopUI.toast.error("Unable to disconnect Visual Studio Code"); + } + }; +} + +export default new VSCodeClient(); \ No newline at end of file