# `ExMCP.ACP.Adapters.ClaudeSDK.Mapper`
[🔗](https://github.com/azmaveth/ex_mcp/blob/v1.4.0/lib/ex_mcp/acp/adapters/claude_sdk/mapper.ex#L1)

Pure Claude SDK message to ACP message mapping.

# `client_response`

```elixir
@spec client_response(map(), map()) :: {:ok, iodata(), map()} | :unknown
```

Maps a client JSON-RPC response back into a Claude control response.

# `config_options`

```elixir
@spec config_options(map()) :: [map()]
```

Builds dynamic config options from SDK initialization/model state.

# `modes`

```elixir
@spec modes() :: [map()]
```

Static, universally available Claude permission modes.

# `modes`

```elixir
@spec modes(map()) :: [map()]
```

Mode list gated by the selected model and explicit dangerous-mode opt-in.

# `modes_result`

```elixir
@spec modes_result(map()) :: map()
```

Builds the dynamic ACP modes result.

# `reduce_message`

```elixir
@spec reduce_message(map(), map()) :: {[map()], [iodata()], map()}
```

Maps one decoded SDK stdout message into ACP messages and SDK writes.

# `replay_messages`

```elixir
@spec replay_messages([map()], map()) :: {[map()], map()}
```

Replays persisted Claude JSONL transcript entries as ACP session updates.

# `session_result`

```elixir
@spec session_result(map(), String.t()) :: map()
```

Builds the dynamic session setup result for the current adapter state.

# `stop_reason`

```elixir
@spec stop_reason(map()) :: String.t()
```

Classifies a Claude SDK result into an ACP stop reason.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
