---
title: "Claude Agent SDK — MCP compatibility"
description: "Same engine as Claude Code without the browser, so authorization is headers only in practice. Server status is observable per server, which is how you find out a token expired."
canonicalUrl: "https://zuplo.com/learn/mcp/compatibility/clients/claude-agent-sdk"
pageType: "mcp-client"
kind: "SDK"
verified: "2026-07-31"
---

# Claude Agent SDK

> Same engine as Claude Code without the browser, so authorization is headers only in practice. Server status is observable per server, which is how you find out a token expired.

_SDK. Protocol revision: `initialize` era._

## Support

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

**Protocol revision.** Not published. The SDK runs the same engine as Claude Code, on 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.

### Runs the OAuth flow

Documented as absent: the SDK opens no browser and runs no interactive flow. When a server answers with an authorization challenge and no stored token exists, the run continues without that server's tools and the server reports status `needs-auth`. You complete the flow yourself and pass the token in `headers`, which is why every discovery and registration column on this row is a no rather than an unknown.

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

[Primary source](https://code.claude.com/docs/en/agent-sdk/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)
