---
title: "MCP compatibility matrix"
description:
  "Which MCP clients support which transports and authorization mechanisms, and
  which identity providers support the OAuth details MCP depends on. Every cell
  cites a source and a date."
canonicalUrl: "https://zuplo.com/learn/mcp/compatibility"
sourceUrl: "https://zuplo.com/learn/mcp/compatibility"
pageType: "other"
generatedAt: "2026-08-20"
---

# MCP compatibility matrix

> What each MCP client puts on the wire, and what it presents when it gets
> there. Every cell cites a source and the date someone checked it.

_Current as of MCP 2026-07-28_

## Why this matters

Check the clients your callers use before you decide how your MCP server
authenticates. A client that doesn't run the specification's OAuth flow needs a
header instead. A client that never sends the RFC 8707 `resource` parameter
can't obtain a token bound to your server, so an audience check you rely on will
reject every call it makes. Both facts are per client, and neither is in the
specification.

## How to read a cell

- **Yes** — The client's own documentation, source, or release notes state that
  it supports this.
- **Partial** — Supported with a condition that changes how you build against
  it. Every partial cell has a note naming the condition and citing it.
- **No** — The client's own documentation or source states that it doesn't
  support this.
- **Unknown** — No primary source states it either way. Read it as missing
  evidence, not as a no.

An unsourced cell is worse than a missing one, so a capability nobody documents
is marked unknown rather than guessed at. Of 220 client capability cells, 176
cite a primary source and 44 are explicitly unknown. Every client name below
links to [that client's own page](/learn/mcp/compatibility/clients), which
carries the note behind its cells, every caveat, and a source for each one.

## What 2026-07-28 changed

The 2026-07-28 revision changes what two columns mean. Dynamic client
registration (RFC 7591) is deprecated, and the specification names Client ID
Metadata Documents as the replacement, so a Yes in the Registration column
records what a client does rather than what the specification recommends.
Sending the RFC 8707 `resource` parameter became a client MUST: clients send it
whether or not the authorization server supports it.

Adoption is real on the server side and thin on the client side, and that
asymmetry is the most useful thing on this page. The revision shipped with
launch partners, including Amazon Bedrock AgentCore, Prefect Horizon, Runlayer
and mcp-use, and Cloudflare says its Agents SDK supports the specification from
day zero. GitHub's MCP server shipped support on July 23, 2026, ahead of the
release. So a server can speak 2026-07-28 today.

The clients can't yet. Of the 22 rows here, 2 reach 2026-07-28: MCP Inspector
2.0.0, MCP Python SDK 2.0.0. 8 publish an older revision, 12 publish none at
all, and Anthropic's own wording is that support is rolling out across Claude
products. So build your server to prefer the current revision and still accept
the `initialize` handshake.

The legacy HTTP+SSE transport is deprecated rather than removed. The
specification's lifecycle policy has it deprecated since `2025-03-26` and
eligible for removal in a future revision, which is why it's still a column
here.

- [Specification: authorization](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization)
- [Specification: client registration](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration)
- [Revision announcement](https://blog.modelcontextprotocol.io/posts/2026-07-28/)
- [GitHub MCP server changelog](https://github.blog/changelog/2026-07-23-github-mcp-server-supports-the-next-mcp-specification/)

## What each client supports

Every client name links to
[its own notes page](/learn/mcp/compatibility/clients), which carries the note
behind its cells, every caveat, and a source for each one.

### Transports and protocol revision

Whether a client can reach your server, and which revision it puts on the wire.

| Client                                                                                                         | stdio   | Streamable HTTP | Legacy SSE | Protocol revision    |
| -------------------------------------------------------------------------------------------------------------- | ------- | --------------- | ---------- | -------------------- |
| [claude.ai, Claude Desktop, mobile, and Cowork connectors](/learn/mcp/compatibility/clients/claude-connectors) | Partial | Yes             | Unknown    | `initialize` era     |
| [ChatGPT connectors and apps](/learn/mcp/compatibility/clients/chatgpt-connectors)                             | Partial | Yes             | Unknown    | Not published        |
| [Claude Code](/learn/mcp/compatibility/clients/claude-code)                                                    | Yes     | Yes             | Partial    | `initialize` era     |
| [Claude Agent SDK](/learn/mcp/compatibility/clients/claude-agent-sdk)                                          | Yes     | Yes             | Yes        | `initialize` era     |
| [Claude Managed Agents](/learn/mcp/compatibility/clients/claude-managed-agents)                                | No      | Yes             | Partial    | `initialize` era     |
| [Messages API MCP connector](/learn/mcp/compatibility/clients/messages-api-mcp-connector)                      | No      | Yes             | Yes        | `2025-11-25`         |
| [OpenAI Responses API mcp tool](/learn/mcp/compatibility/clients/openai-responses-api)                         | No      | Yes             | Yes        | Not published        |
| [Microsoft Copilot Studio](/learn/mcp/compatibility/clients/copilot-studio)                                    | No      | Yes             | No         | Not published        |
| [Codex CLI](/learn/mcp/compatibility/clients/codex-cli)                                                        | Yes     | Yes             | No         | Not published        |
| [Gemini CLI](/learn/mcp/compatibility/clients/gemini-cli)                                                      | Yes     | Yes             | Yes        | `2025-06-18`         |
| [Cursor](/learn/mcp/compatibility/clients/cursor)                                                              | Yes     | Yes             | Yes        | Not published        |
| [VS Code and GitHub Copilot](/learn/mcp/compatibility/clients/vs-code)                                         | Yes     | Yes             | Partial    | `2025-11-25`         |
| [Devin Desktop, legacy Cascade agent](/learn/mcp/compatibility/clients/devin-desktop-cascade)                  | Yes     | Yes             | Yes        | Not published        |
| [Devin CLI](/learn/mcp/compatibility/clients/devin-cli)                                                        | Yes     | Yes             | Partial    | Not published        |
| [Zed](/learn/mcp/compatibility/clients/zed)                                                                    | Yes     | Yes             | Unknown    | `2025-11-25`         |
| [JetBrains AI Assistant](/learn/mcp/compatibility/clients/jetbrains-ai-assistant)                              | Yes     | Yes             | Partial    | Not published        |
| [MCP Inspector 2.0.0](/learn/mcp/compatibility/clients/mcp-inspector)                                          | Yes     | Yes             | Unknown    | `2026-07-28`         |
| [mcp-remote 0.1.38](/learn/mcp/compatibility/clients/mcp-remote)                                               | Yes     | Yes             | Yes        | `2025-11-25` at most |
| [MCP TypeScript SDK 1.29.0](/learn/mcp/compatibility/clients/typescript-sdk-1x)                                | Yes     | Yes             | Yes        | `2025-11-25`         |
| [MCP Python SDK 1.29.0](/learn/mcp/compatibility/clients/python-sdk-1x)                                        | Yes     | Yes             | Yes        | `2025-11-25`         |
| [MCP TypeScript SDK 2.0.0](/learn/mcp/compatibility/clients/typescript-sdk)                                    | Yes     | Yes             | Yes        | `2025-11-25`         |
| [MCP Python SDK 2.0.0](/learn/mcp/compatibility/clients/python-sdk)                                            | Yes     | Yes             | Yes        | `2026-07-28`         |

### Authorization mechanisms

What a client can present as a credential, and how it obtains one.

| Client                                                                                                         | OAuth flow | Registration | Metadata doc | Client ID | resource | iss     | Headers |
| -------------------------------------------------------------------------------------------------------------- | ---------- | ------------ | ------------ | --------- | -------- | ------- | ------- |
| [claude.ai, Claude Desktop, mobile, and Cowork connectors](/learn/mcp/compatibility/clients/claude-connectors) | Yes        | Yes          | Yes          | Yes       | Yes      | Unknown | Partial |
| [ChatGPT connectors and apps](/learn/mcp/compatibility/clients/chatgpt-connectors)                             | Yes        | Yes          | Yes          | Yes       | Yes      | Unknown | No      |
| [Claude Code](/learn/mcp/compatibility/clients/claude-code)                                                    | Yes        | Yes          | Yes          | Yes       | Yes      | Unknown | Yes     |
| [Claude Agent SDK](/learn/mcp/compatibility/clients/claude-agent-sdk)                                          | No         | No           | No           | No        | No       | No      | Yes     |
| [Claude Managed Agents](/learn/mcp/compatibility/clients/claude-managed-agents)                                | No         | No           | No           | Partial   | Unknown  | Unknown | No      |
| [Messages API MCP connector](/learn/mcp/compatibility/clients/messages-api-mcp-connector)                      | No         | No           | No           | No        | No       | No      | No      |
| [OpenAI Responses API mcp tool](/learn/mcp/compatibility/clients/openai-responses-api)                         | No         | No           | No           | No        | No       | No      | No      |
| [Microsoft Copilot Studio](/learn/mcp/compatibility/clients/copilot-studio)                                    | Yes        | Yes          | Unknown      | Yes       | Unknown  | Unknown | Unknown |
| [Codex CLI](/learn/mcp/compatibility/clients/codex-cli)                                                        | Yes        | Unknown      | Unknown      | Unknown   | Unknown  | Unknown | Yes     |
| [Gemini CLI](/learn/mcp/compatibility/clients/gemini-cli)                                                      | Yes        | Yes          | No           | Yes       | Yes      | No      | Yes     |
| [Cursor](/learn/mcp/compatibility/clients/cursor)                                                              | Yes        | Yes          | Unknown      | Yes       | Unknown  | Unknown | Partial |
| [VS Code and GitHub Copilot](/learn/mcp/compatibility/clients/vs-code)                                         | Yes        | Yes          | Partial      | Yes       | Partial  | Unknown | Yes     |
| [Devin Desktop, legacy Cascade agent](/learn/mcp/compatibility/clients/devin-desktop-cascade)                  | Yes        | Unknown      | Unknown      | Unknown   | Unknown  | Unknown | Yes     |
| [Devin CLI](/learn/mcp/compatibility/clients/devin-cli)                                                        | Yes        | Yes          | Unknown      | Yes       | Yes      | Unknown | Yes     |
| [Zed](/learn/mcp/compatibility/clients/zed)                                                                    | Yes        | Yes          | Yes          | No        | Yes      | Unknown | Yes     |
| [JetBrains AI Assistant](/learn/mcp/compatibility/clients/jetbrains-ai-assistant)                              | Unknown    | Unknown      | Unknown      | Unknown   | Unknown  | Unknown | Unknown |
| [MCP Inspector 2.0.0](/learn/mcp/compatibility/clients/mcp-inspector)                                          | Yes        | Yes          | Unknown      | Yes       | Unknown  | Unknown | Yes     |
| [mcp-remote 0.1.38](/learn/mcp/compatibility/clients/mcp-remote)                                               | Yes        | Yes          | Unknown      | Yes       | Unknown  | Unknown | Yes     |
| [MCP TypeScript SDK 1.29.0](/learn/mcp/compatibility/clients/typescript-sdk-1x)                                | Yes        | Yes          | Partial      | Yes       | Partial  | No      | Yes     |
| [MCP Python SDK 1.29.0](/learn/mcp/compatibility/clients/python-sdk-1x)                                        | Yes        | Yes          | Yes          | Yes       | Yes      | No      | Yes     |
| [MCP TypeScript SDK 2.0.0](/learn/mcp/compatibility/clients/typescript-sdk)                                    | Yes        | Yes          | Yes          | Yes       | Yes      | Unknown | Yes     |
| [MCP Python SDK 2.0.0](/learn/mcp/compatibility/clients/python-sdk)                                            | Yes        | Yes          | Yes          | Yes       | Yes      | Yes     | Yes     |

Client support last verified July 24, 2026 against the 2026-07-28 revision. That
is the oldest date across these rows, so a stale row can't hide behind a fresher
one.

## Where clients disagree, and what it costs you

No cell can show these, because each one is a difference between clients rather
than a fact about any single client. Each also decides something you have to
build around.

**The resource parameter splits three ways** — Zed, Gemini CLI, and the Python
SDK send `resource` unconditionally. VS Code and anything on the TypeScript SDK
1.x line send it only after discovering RFC 9728 protected resource metadata, so
a server that publishes none never receives it. Devin CLI sends it by default
and lets you switch it off. If your server validates a token audience, that one
column decides whether a client can ever obtain a token you'll accept.

**The iss check has reached one row** — The `2026-07-28` revision makes
validating a present RFC 9207 `iss` a client MUST. The check landed in the
reference SDKs' 2.x line, and the MCP Python SDK 2.0.0 is the only row here that
has it — every other client pins 1.x or publishes no revision, so the column
reads No or Unknown across the rest of the table. Read that as a gap the
ecosystem has not closed yet rather than a fault in any one client, and don't
assume a caller validated the issuer for you.

**The two hosted runtimes disagree about static credentials** — ChatGPT refuses
machine-to-machine grants, service accounts, JWT bearer assertions, custom API
keys, and customer-supplied client certificates, and says so outright. claude.ai
refuses the machine-to-machine grant too, but offers a beta request-header path
with an allowlist of header names. So a server that authenticates with an API
key can reach one of them, conditionally, and not the other.

**A header can win or lose against OAuth discovery** — Zed treats a configured
`Authorization` header as a decision and skips the OAuth flow. Cursor starts the
flow first and never sends the header, which its own staff confirmed as a bug.
Claude Code does something different again: a rejected `Authorization` header
fails the connection rather than falling back. Same configuration, three
outcomes.

## What this page doesn't cover

**Clients not listed.** Agent frameworks and automation platforms aren't here
yet: the OpenAI Agents SDKs, LangChain's MCP adapters, the Vercel AI SDK,
Pydantic AI, Mastra, CrewAI, AutoGen, Semantic Kernel, n8n, and Zapier. Neither
are Cline, Continue, Goose, LibreChat, Antigravity, Amazon Q Developer, Kiro,
Warp, or JetBrains Air. A client lands on this page when every column can be
answered from its own documentation, source, or release notes — a half-sourced
row is worse than an absent one, because the value of the grid is that each cell
is checkable. One inheritance rule covers most of the missing names in the
meantime: a framework that delegates MCP to a reference SDK inherits that SDK's
cells, so the two 1.x rows in these tables are the ceiling for anything pinned
to the 1.x line.

**Protocol features.** Sampling, elicitation, roots, logging, progress,
structured output, tool annotations, and the tasks extension aren't columns
here. The 2026-07-28 revision deprecates three of them and replaces
server-initiated requests with multi-round-trip requests, so one grid would
describe two different wires at once and read as a single answer.

**Metadata documents per identity provider.** The
[provider table](/learn/mcp/compatibility/identity-providers) has no column for
client ID metadata documents. That support isn't verified per provider yet, and
until it is, the column would be unknown end to end. Its Registration column
records what each provider does, which is a different question from what the
current revision recommends.

**Tool caps and timeouts.** Three tool caps here have a current citable source —
VS Code's and Copilot Studio's 128, and Cascade's 100 — and they sit in those
clients' notes rather than in a column. Widely repeated numbers for other
clients trace back to forum threads and appear in no current documentation, so
they're absent. The most-repeated of them, a 40-tool cap for Cursor, is named in
Cursor's notes precisely so nobody reads its blank cell as a confirmation.

**Errors these gaps produce.** When a mismatch in these tables turns into a
failed connection, the string your client printed is in the
[MCP error reference](/learn/mcp/errors).

## The detail behind the cells

- **[Notes and sources by client](/learn/mcp/compatibility/clients)** — One page
  per client: what its cells mean in practice, every caveat with the source that
  qualifies it, and the revision it puts on the wire.
- **[Identity provider support](/learn/mcp/compatibility/identity-providers)** —
  Dynamic client registration and resource indicators, per provider, with the
  workaround where a provider says no.

## Next steps

- Start a free account: https://portal.zuplo.com/signup
- Read the docs: https://zuplo.com/docs/mcp-gateway/code-config/overview
