> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose your SDK

> Pick the AdCP SDK for your language. Coverage matrix, install commands, and what each SDK ships at L0–L3 so you can focus on L4 business logic.

The AdCP SDKs absorb L0–L3 (wire, signing, auth, protocol semantics) so you write L4 business logic. Pick the SDK in the language you're already in — all three SDKs target the same wire conformance bar.

For the layered model behind this — what each layer contains and what an SDK at each layer should provide — see the [SDK stack reference](/dist/docs/3.2.0-beta.0/building/cross-cutting/sdk-stack).

## Coverage matrix

What "shipped" means at each layer is the [L0–L3 checklist](/dist/docs/3.2.0-beta.0/building/cross-cutting/sdk-stack#what-an-sdk-at-each-layer-should-provide).

*Last updated: 2026-08-17.*

| SDK                          | Current package | 3.2 beta support         |  L0 |  L1 |  L2 |  L3 |
| ---------------------------- | --------------- | ------------------------ | :-: | :-: | :-: | :-: |
| **`@adcp/sdk`** (TypeScript) | `13.0.0`        | Pending beta.0 ingestion |  ✅  |  ✅  |  ✅  |  ✅  |
| **`adcp`** (Python)          | `7.0.2`         | Pending beta.0 ingestion |  ✅  |  ⚠️ |  ⚠️ |  ⚠️ |
| **`adcp/v3`** (Go)           | `v3.0.0`        | Pending beta.0 ingestion |  ⚠️ |  ⚠️ |  ⚠️ |  ⚠️ |

Legend: ✅ shipped · ⚠️ partial / role-dependent · ❌ not yet covered. The L0–L3 columns describe the current package, not a 3.2 support claim.

<Warning>
  **The 3.2 SDK wave follows beta.0.** None of the current-package rows above is
  an exact 3.2 beta support statement yet. Beta.0 publishes the signed protocol
  input; SDK maintainers then publish package versions and supported-role details.
  Beta.1 incorporates that feedback and becomes SDK-backed only after a second
  SDK refresh against the exact beta.1 bundle. See the [3.2 beta program](/dist/docs/3.2.0-beta.0/reference/3-2-beta).
</Warning>

The TypeScript SDK currently provides the broadest L0–L3 surface. Python is a
first-class SDK with complete schema/type coverage and role-dependent higher
layers. The Go `adcp/v3` module provides typed AdCP 3.x surfaces, signing, and
transport/server building blocks with role-dependent coverage. Check the
release links below for changes after this matrix date.

Pre-3.0 callers should work through the [3.0 migration guide](/dist/docs/3.2.0-beta.0/reference/migration/index) before upgrading. For the at-a-glance status of every published protocol version, see [Versions & Compatibility](/dist/docs/3.2.0-beta.0/reference/versions). For procurement-grade context on the support window, see the [v2 sunset timeline](/dist/docs/3.2.0-beta.0/reference/v2-sunset) and [versioning & governance](/dist/docs/3.2.0-beta.0/reference/versioning).

**TypeScript and Python are the first-class supported languages**, with the
layer coverage shown in the matrix above. **Go** is moving in the same
direction. **Other languages** are not on the official roadmap;
community-maintained ports are welcome — see the [Builders Working Group](/dist/docs/3.2.0-beta.0/community/working-group)
and the [Slack community](/dist/docs/3.2.0-beta.0/community/joining-slack).

## JavaScript / TypeScript

[![npm version](https://img.shields.io/npm/v/@adcp/sdk)](https://www.npmjs.com/package/@adcp/sdk)

```bash theme={null}
npm install @adcp/sdk
```

```javascript theme={null}
import { createSingleAgentClient } from '@adcp/sdk';

const client = createSingleAgentClient({
  id: 'sales',
  name: 'Sales agent',
  agent_uri: 'https://sales.example.com/mcp',
  protocol: 'mcp',
});

const products = await client.getProducts({
  idempotency_key: '550e8400-e29b-41d4-a716-446655442044',
  buying_mode: 'brief',
  brief: 'Video campaign for pet owners',
});
```

**Resources:**

* [NPM Package](https://www.npmjs.com/package/@adcp/sdk)
* [GitHub Repository](https://github.com/adcontextprotocol/adcp-client)

**Package exports:**

* `@adcp/sdk` — main entry: caller (`createSingleAgentClient`, `ADCPMultiAgentClient`) and shared types
* `@adcp/sdk/server` — agent-side server primitives (`createAdcpServerFromPlatform`, `createAdcpServer`, decisioning-platform interfaces)
* `@adcp/sdk/server/legacy/v5` — legacy v5 handler-bag entry, still supported for mid-migration codebases
* `@adcp/sdk/signing` — RFC 9421 signing primitives
* `@adcp/sdk/signing/server` — webhook + request verifiers (`createWebhookVerifier`, `verifyRequestSignature`, `createExpressVerifier`)
* `@adcp/sdk/signing/client` — outbound signing (`signRequest`, `signWebhook`, `createSigningFetch`)
* `@adcp/sdk/testing` — buyer-side storyboard runner (`runStoryboard`, `comply`, `testAgent`) and seller-side controller scaffold (`createComplyController` — see [Get Test-Ready](/dist/docs/3.2.0-beta.0/building/verification/get-test-ready))
* `@adcp/sdk/conformance` — assertion + storyboard helpers for conformance harnesses
* `@adcp/sdk/schemas` — bundled AdCP JSON Schemas
* `@adcp/sdk/types` — TypeScript type definitions
* `@adcp/sdk/types/v2-5` — v2.5 type co-existence imports for cross-version callers

## Python

[![PyPI version](https://img.shields.io/pypi/v/adcp)](https://pypi.org/project/adcp/)

```bash theme={null}
pip install adcp
```

```python theme={null}
from adcp import ADCPClient, AgentConfig, Protocol, GetProductsRequest

client = ADCPClient(AgentConfig(
    id='sales',
    agent_uri='https://sales.example.com/mcp',
    protocol=Protocol.MCP,
))

result = await client.get_products(
    GetProductsRequest(
        idempotency_key='550e8400-e29b-41d4-a716-446655442045',
        buying_mode='brief',
        brief='Video campaign for pet owners',
    ),
)
```

**Resources:**

* [PyPI Package](https://pypi.org/project/adcp/)
* [GitHub Repository](https://github.com/adcontextprotocol/adcp-client-python)

## Go

```bash theme={null}
go get github.com/adcontextprotocol/adcp-go/adcp/v3@v3.0.0
```

The Go SDK's `adcp/v3` module provides typed tool registration, response
builders, signing, and a compliance test controller. Types are generated from
canonical AdCP schemas. The `/v3` suffix is required by Go semantic import
versioning.

| Component         | Import                                                                                                       |
| ----------------- | ------------------------------------------------------------------------------------------------------------ |
| Tool registration | `adcp.AddTool(server, name, desc, handler)`                                                                  |
| HTTP server       | `adcp.Serve(createAgent)`                                                                                    |
| Response builders | `adcp.ProductsResponse(data)`, `adcp.MediaBuyResponse(data)`, etc.                                           |
| Test controller   | `adcp.RegisterTestController(server, store)`                                                                 |
| Skills            | [github.com/adcontextprotocol/adcp-go/skills](https://github.com/adcontextprotocol/adcp-go/tree/main/skills) |

See the [Go SDK README](https://github.com/adcontextprotocol/adcp-go) for the full API reference.

**Resources:**

* [GitHub Repository](https://github.com/adcontextprotocol/adcp-go)

## CLI tools

The JavaScript and Python SDKs include command-line tools for testing and development.

Both SDKs share the same positional shape: `adcp <agent> [tool] [payload]`. The first positional is an alias, a built-in (`test-mcp`, `test-a2a`), or a URL — protocol is auto-detected. Save aliases with `--save-auth` to avoid retyping.

### JavaScript CLI

```bash theme={null}
npx @adcp/sdk@latest --help
npx @adcp/sdk@latest --save-auth my-agent https://sales.example.com/mcp
npx @adcp/sdk@latest my-agent get_products '{"idempotency_key":"550e8400-e29b-41d4-a716-446655442062","buying_mode":"brief","brief":"CTV campaign"}'
# or against the built-in public test agent:
npx @adcp/sdk@latest test-mcp get_products '{"idempotency_key":"550e8400-e29b-41d4-a716-446655442063","buying_mode":"brief","brief":"CTV campaign"}'
```

The CLI also drives storyboards (`adcp storyboard run`), conformance grading (`adcp grade`), and registry diagnostics. See `--help` for the full surface.

### Python CLI

```bash theme={null}
uvx adcp --help
uvx adcp --save-auth my-agent https://sales.example.com/mcp
uvx adcp my-agent get_products '{"idempotency_key":"550e8400-e29b-41d4-a716-446655442064","buying_mode":"brief","brief":"CTV campaign"}'
```

## What's next

* **[Build an agent](/dist/docs/3.2.0-beta.0/building/by-layer/L4/build-an-agent)** — server-side L4 path. Skill files + coding agent.
* **[Build a caller](/dist/docs/3.2.0-beta.0/building/by-layer/L4/build-a-caller)** — client-side L4 path. Install, call, handle responses, ingest reporting.
* **[Schemas](/dist/docs/3.2.0-beta.0/building/by-layer/L0/schemas)** — schema bundle, type generation, version pinning.
* **[Migrate from hand-rolled](/dist/docs/3.2.0-beta.0/building/by-layer/L4/migrate-from-hand-rolled)** — already running an AdCP agent built before the SDKs covered much? Swap one layer at a time.
