---
title: "Claude Code — MCP compatibility"
description: "The most configurable client here on every axis except protocol revision: four transports, its own client metadata document, flags for a client ID and callback port, an override for the discovery chain, and a command hook that generates headers at connection time."
canonicalUrl: "https://zuplo.com/learn/mcp/compatibility/clients/claude-code"
pageType: "mcp-client"
kind: "Terminal agent"
verified: "2026-07-31"
---

# Claude Code

> The most configurable client here on every axis except protocol revision: four transports, its own client metadata document, flags for a client ID and callback port, an override for the discovery chain, and a command hook that generates headers at connection time.

_Terminal agent. Protocol revision: `initialize` era._

## Support

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

**Protocol revision.** Not published. Claude Code still runs the `initialize` handshake.

## 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

Available as `claude mcp add --transport sse`, with a documented note that the transport is deprecated and HTTP servers are the replacement. Claude Code also has a fourth transport nothing else here has: WebSocket, which takes headers only and runs no OAuth flow.

[Source](https://code.claude.com/docs/en/mcp)

### Metadata document

Claude Code publishes its own document at `https://claude.ai/oauth/claude-code-client-metadata` and uses it as its `client_id`, so it holds no Anthropic-issued credentials. It also discovers a server's support automatically.

[Source](https://code.claude.com/docs/en/mcp)

### Sends resource (RFC 8707)

An open bug report says Claude Code appends a trailing slash to the `resource` value on both the authorization redirect and the token exchange, which makes Microsoft Entra ID answer `AADSTS9010010` for any server whose metadata uses an unslashed resource URI. Treat this as a bug report rather than documented behavior.

[Source](https://github.com/anthropics/claude-code/issues/52871)

### Custom headers

Beyond a static `headers` map, `headersHelper` runs a command at connection time and merges its output into the headers, which is the path for Kerberos, short-lived tokens, and internal single sign-on. One ordering rule matters: if you configure `headers.Authorization` and the server rejects it, Claude Code fails the connection instead of falling back to OAuth.

[Source](https://code.claude.com/docs/en/mcp)

[Primary source](https://code.claude.com/docs/en/mcp)

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

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