# `AttestoMCP.Server.Content`
[🔗](https://github.com/XukuLLC/attesto_mcp_server/blob/v2.8.0/lib/attesto_mcp_server/content.ex#L1)

Typed constructors for MCP content returned by handlers.

Constructors emit canonical string-key maps and raise `ArgumentError` for
invalid programmer input. Image, audio, and blob arguments are already
Base64-encoded wire values; only canonical padded Base64 is accepted.
Constructors use the secure 2,000,000-byte default; pass
`max_json_bytes: server_budget` when the supervised server explicitly uses a
larger finite JSON budget.

Raw maps remain supported by `AttestoMCP.Server` for hosts that need custom
extension members.

# `budget_option`

```elixir
@type budget_option() :: {:max_json_bytes, pos_integer()}
```

# `common_option`

```elixir
@type common_option() :: {:annotations, map()} | {:meta, map()} | budget_option()
```

# `prompt_message`

```elixir
@type prompt_message() :: %{required(String.t()) =&gt; term()}
```

# `resource_content`

```elixir
@type resource_content() :: %{required(String.t()) =&gt; term()}
```

# `resource_content_option`

```elixir
@type resource_content_option() ::
  {:mime_type, String.t()}
  | {:meta, map()}
  | {:annotations, map()}
  | {:icons, [map()]}
  | budget_option()
```

# `resource_link_option`

```elixir
@type resource_link_option() ::
  common_option()
  | {:title, String.t()}
  | {:description, String.t()}
  | {:mime_type, String.t()}
  | {:size, non_neg_integer()}
  | {:icons, [map()]}
```

# `role`

```elixir
@type role() :: :user | :assistant | String.t()
```

# `t`

```elixir
@type t() :: %{required(String.t()) =&gt; term()}
```

# `audio`

```elixir
@spec audio(String.t(), String.t(), [common_option()]) :: t()
```

Builds an audio content block from canonical padded Base64 data.

# `embedded_resource`

```elixir
@spec embedded_resource(resource_content(), [common_option()]) :: t()
```

Builds an embedded-resource content block from one resource content entry.

# `image`

```elixir
@spec image(String.t(), String.t(), [common_option()]) :: t()
```

Builds an image content block from canonical padded Base64 data.

# `prompt_message`

```elixir
@spec prompt_message(role(), t(), [budget_option()]) :: prompt_message()
```

Builds one user or assistant prompt message.

# `resource_blob`

```elixir
@spec resource_blob(String.t(), String.t(), [resource_content_option()]) ::
  resource_content()
```

Builds a blob resource-content entry from canonical padded Base64 data.

# `resource_link`

```elixir
@spec resource_link(String.t(), String.t(), [resource_link_option()]) :: t()
```

Builds a resource-link content block.

# `resource_text`

```elixir
@spec resource_text(String.t(), String.t(), [resource_content_option()]) ::
  resource_content()
```

Builds a text resource-content entry.

# `text`

```elixir
@spec text(String.t(), [common_option()]) :: t()
```

Builds a text content block.

---

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