---
title: "VS Code and GitHub Copilot — MCP compatibility"
description: "VS Code negotiates the transport for you: it tries the HTTP stream transport and falls back to SSE. It also accepts two transports nothing else here does, a Unix socket and a named pipe, and it caps a request at 128 tools."
canonicalUrl: "https://zuplo.com/learn/mcp/compatibility/clients/vs-code"
pageType: "mcp-client"
kind: "Editor"
verified: "2026-07-31"
---

# VS Code and GitHub Copilot

> VS Code negotiates the transport for you: it tries the HTTP stream transport and falls back to SSE. It also accepts two transports nothing else here does, a Unix socket and a named pipe, and it caps a request at 128 tools.

_Editor. Protocol revision: `2025-11-25`._

## Support

- **stdio** — Yes
- **Streamable HTTP** — Yes
- **Legacy HTTP+SSE** — Partial
- **Protocol revision** — `2025-11-25`
- **Runs the OAuth flow** — Yes
- **Registration (RFC 7591)** — Yes
- **Metadata document** — Partial
- **Pre-registered client ID** — Yes
- **Sends resource (RFC 8707)** — Partial
- **Validates iss (RFC 9207)** — Unknown
- **Custom headers** — Yes

**Protocol revision.** `2025-11-25`, verified in source and sent verbatim, with no older-version fallback list.

## Caveats and sources

Each one names the column it qualifies and cites the page it comes from, which is often not the page in the row's primary source.

### Legacy HTTP+SSE

Documented as legacy support rather than a first-class transport.

[Source](https://code.visualstudio.com/api/extension-guides/ai/mcp)

### Metadata document

Implemented in source, where precedence runs configured client ID, then metadata document, then dynamic registration. The product setting that holds the document URL is absent from the open-source product configuration, so this path reaches Microsoft-branded builds only.

[Source](https://github.com/microsoft/vscode/blob/main/src/vs/workbench/api/browser/mainThreadAuthentication.ts)

### Sends resource (RFC 8707)

Source adds `resource` on authorization, token exchange, and refresh, but only when RFC 9728 protected resource metadata was discovered. A server that publishes no protected resource metadata gets no `resource` parameter — the opposite of Zed and Gemini CLI, which send it unconditionally.

[Source](https://code.visualstudio.com/docs/agents/reference/mcp-configuration)

### Client credentials grant

The documentation describes a fallback to a client-credentials workflow when an identity provider lacks dynamic registration, but that phrase means entering a static client ID and secret for the authorization-code flow. Source filters the RFC 6749 `client_credentials` grant out of the registration request, and a repository test asserts it's absent.

[Source](https://github.com/microsoft/vscode/blob/main/src/vs/base/common/oauth.ts)

### Tool caps

128 tools per request, reported as an error string rather than silently truncated. The virtual-tools threshold setting is the documented mitigation.

[Source](https://code.visualstudio.com/docs/chat/chat-tools)

[Primary source](https://code.visualstudio.com/docs/agents/reference/mcp-configuration)

_This row was last verified 2026-07-31 against the 2026-07-28 revision._

- **Clients** — [every client in the matrix](/learn/mcp/compatibility/clients)
