# `ExMCP.ACP.Maps`
[🔗](https://github.com/azmaveth/ex_mcp/blob/v1.0.0/lib/ex_mcp/acp/maps.ex#L1)

Small pure map helpers used by ACP protocol, client, agent, and adapters.

The functions intentionally work with string and atom keys because ACP data
crosses JSON boundaries while local Elixir call sites often use atom keys.

# `camelize_atom`

```elixir
@spec camelize_atom(atom()) :: String.t()
```

# `decapitalize`

```elixir
@spec decapitalize(String.t()) :: String.t()
```

# `get`

```elixir
@spec get(map() | nil, String.t() | atom()) :: any()
```

# `put_non_empty`

```elixir
@spec put_non_empty(map(), any(), any()) :: map()
```

Puts `value` into `map` when the value is present and not empty.

# `put_present`

```elixir
@spec put_present(map(), any(), any()) :: map()
```

Puts `value` into `map` when the value is not `nil`.

# `put_unless`

```elixir
@spec put_unless(map(), any(), any(), any()) :: map()
```

Puts `value` into `map` unless it equals `skip_value`.

# `stringify_keys`

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

# `truthy?`

```elixir
@spec truthy?(any()) :: boolean()
```

---

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