Connect VS Code to a remote MCP server
VS Code reaches your tunnel over Streamable HTTP, but it is the one client
whose config does not use the mcpServers block everything else accepts.
Pasting the standard snippet here will not work.
The config entry
Section titled “The config entry”VS Code nests the server map under mcp:
{ "mcp": { "servers": { "notes-via-tunnel": { "url": "https://notes--acme.mcppipe.dev/mcp" } } }}A flat, dotted key at the top level is also accepted:
{ "mcp.servers": { "notes-via-tunnel": { "url": "https://notes--acme.mcppipe.dev/mcp" } }}mcppipe’s auto-detect reads both shapes. mcppipe up prints the generic
mcpServers block and then a reminder line that VS Code wants
"mcp": { "servers": { … } } — so if you copy the block verbatim into VS Code,
re-nest it first.
Where the config file lives
Section titled “Where the config file lives”| Scope | Path |
|---|---|
| User settings | %APPDATA%\Code\User\settings.json · ~/Library/Application Support/Code/User/settings.json · ~/.config/Code/User/settings.json |
| User MCP file | the same directory, mcp.json |
| Workspace | <project>/.vscode/mcp.json |
Both user-level files are scanned. The workspace file is opt-in — pass
--scan-workspace, for the same reason as Cursor: a
repository you just cloned should not silently contribute server definitions.
Comments and trailing commas are fine
Section titled “Comments and trailing commas are fine”settings.json is JSONC in practice — people keep // comments and trailing
commas in it, and VS Code accepts that. mcppipe’s detection strips both before
parsing, so a heavily-commented settings file does not defeat auto-detect.
IP allowlist
Section titled “IP allowlist”VS Code runs on your machine, so the relevant allowlist entry is your own egress IP. Vendor presets are for cloud-hosted agents, not for editors.
See also
Section titled “See also”- Client compatibility — the full matrix
- Cline — ships as a VS Code extension, but keeps its own config
- CLI reference