# `Backplane.McpProtocol.Client.Subscription`

Cancellable client handle and owner process for one modern subscription.

The client process owns a process-local ID registry while this process owns
the acknowledgement gate and transport stream. This keeps long-lived stream
state out of the ordinary request table and lets HTTP and stdio use their
distinct cancellation mechanisms.

# `id`

```elixir
@type id() :: String.t() | integer()
```

# `t`

```elixir
@type t() :: %Backplane.McpProtocol.Client.Subscription{
  acknowledged?: boolean(),
  client: pid(),
  id: id(),
  notifications: map() | nil,
  pid: pid(),
  requested_notifications: map(),
  stream: term(),
  subscriber: pid(),
  transport: map() | nil
}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `normalize_filters`

```elixir
@spec normalize_filters(list() | map()) ::
  {:ok, map()} | {:error, Backplane.McpProtocol.MCP.Error.t()}
```

Normalizes the public list shorthand or the frozen wire filter map.

---

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