A self-hosted VS Code workbench embedded as an interactive MCP App.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
MCP VS Code runs a self-hosted Code OSS/OpenVSCode workbench beside an MCP server so the human and the model operate the same workspace, open editors, diagnostics, commands, extensions, and terminal sessions.
This is not remote control of a separately installed desktop VS Code. Supported distributions carry their own OpenVSCode runtime and bridge extension. Microsoft-hosted vscode.dev is not used because it disallows framing.
There are four pieces:
The default iframe and browser-tab paths deliver OpenVSCode directly. Experimental streaming launches an existing Edge, Chrome, or Chromium on the server, points it at that same OpenVSCode runtime, and transports its pixels and user input. The canvas is a remote display, not another editor implementation.
| Mode | Selection | Required host capability | What the user sees |
|---|---|---|---|
embedded | Default when the host approves the declared workbench origin and the liveness probe succeeds | frameDomains for the nested document | Genuine OpenVSCode inside the MCP App |
stream | Only when MCP_VSCODE_RENDER_MODE=stream | A reachable WebSocket allowed by connectDomains; no nested-frame grant | Genuine OpenVSCode rendered by server-side Chromium and drawn as pixels in the MCP App |
browser | Honest fallback when the requested inline mode is denied, unreachable, or unavailable | Host-supported openLink, or a normal link in the debug page | The same genuine OpenVSCode workbench in a separate tab |
probing is a temporary UI state, not a renderer.
With no render-mode environment variable, the App:
frameDomains reported by the host when that information is available;mcp-vscode:workbench-alive message;embedded only after that positive signal; orbrowser card with the exact policy, network, or runtime reason.A CSP-blocked iframe can emit neither a useful load nor error event, so a plain iframe event is not treated as success. The liveness timeout prevents a permanent blank view.
An MCP server's CSP declaration is a permission request, not a way to overrule the host. A host may approve it, restrict it, or deny it. CORS headers on mcp-vscode cannot repair a frame-src decision made by the outer host.
Set:
Streaming deliberately replaces the iframe decision for that process; it is not an automatic fallback. If streaming cannot start, the App reports the failure and moves to the honest browser option rather than silently selecting a different editor.
The server:
MCP_VSCODE_STREAM_BROWSER;node account from /etc/passwd, transfers ownership of that private profile, and drops only the Chromium child to its non-zero uid/gid;HOME, TMPDIR, and XDG directories into that same ephemeral profile instead of inheriting the server account's paths;127.0.0.1 only;The /stream WebSocket uses its own random 256-bit bearer token. Both the tokenized stream URL and the high-entropy /ide/<key> URL are excluded from model-visible tool text and structuredContent; they are delivered to the MCP App through tool-result _meta only. Logs do not contain the stream token.
Streaming is useful when a host grants connectDomains but refuses frameDomains, which is the behavior observed with locally configured Claude Desktop stdio connectors in the test documented in the upstream report draft.
Streaming remains experimental:
All three displayed outcomes refer to the real OpenVSCode runtime. If that runtime is missing or failed, there is no editor UI to show. File, Git, and terminal MCP tools may still operate where applicable, but editor/diagnostics/command/extension tools that require the live bridge fail explicitly.
There is no special macOS editor fallback: without an OpenVSCode Server runtime, neither embedding, streaming, nor the external-browser view can provide the workbench.
| Variable | Default | Purpose |
|---|---|---|
MCP_VSCODE_WORKSPACE | Process working directory | Absolute workspace root. Prefer setting this explicitly. --workspace takes precedence. |
MCP_VSCODE_OPENVSCODE_ROOT | Platform runtime package or bundled runtime | Override the OpenVSCode runtime directory. --openvscode-root takes precedence. |
MCP_VSCODE_RENDER_MODE | default | Set exactly stream to enable experimental genuine-workbench pixel streaming. default, empty, or unset uses iframe/browser behavior. Other values fail startup. |
MCP_VSCODE_STREAM_BROWSER | Auto-discovery | Absolute path to Edge, Chrome, or Chromium for streaming. |
MCP_VSCODE_STREAM_NO_SANDBOX | 0 | Set 1 or true only as an explicit last resort when a locked-down container cannot run Chromium's own sandbox. On POSIX, a root mcp-vscode process instead drops only Chromium to a safe node account by default. |
FLUJO-managed hosted children may also receive FLUJO_MCP_APP_RUNTIME_REGISTER_URL and FLUJO_MCP_APP_RUNTIME_REGISTER_TOKEN. Those are short-lived internal broker capabilities, not user settings. mcp-vscode proves possession, registers an allowlisted route manifest, clears both variables before OpenVSCode starts, and never exposes the bearer to the workbench.
Default mode honestly falls back to a browser when the tested Claude Desktop host declines the local loopback frameDomains request:
To test genuine inline streaming instead:
The browser-path override is optional when discovery finds an installed browser. Host behavior changes over time; re-run the manual matrix against the exact Claude Desktop version rather than treating the current observation as permanent.
A user can visit one human-facing site such as try.flujo.com.co, while the browser uses additional security origins behind the scenes. A sandboxed MCP App and its nested workbench cannot safely be collapsed into one literal browser origin merely to make deployment look simpler.
For a FLUJO-managed stdio child, the runtime-broker handshake solves the private-port problem:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-vs-code)<a href="https://allmcps.com/mcp/mcp-vs-code"><img src="https://allmcps.com/api/badge/mcp-vs-code?style=directory" alt="MCP VS Code on AllMCPs" /></a>