# `ExMCP.Types.V20241105`
[🔗](https://github.com/azmaveth/ex_mcp/blob/v1.0.0/lib/ex_mcp/types/v20241105.ex#L1)

Type definitions for MCP protocol version 2024-11-05.

This module contains type definitions specific to the 2024-11-05
version of the Model Context Protocol specification.

# `client_capabilities`

```elixir
@type client_capabilities() :: %{
  optional(:experimental) =&gt; %{required(String.t()) =&gt; any()},
  optional(:sampling) =&gt; %{required(String.t()) =&gt; any()},
  optional(:roots) =&gt; %{optional(:listChanged) =&gt; boolean()}
}
```

# `content`

```elixir
@type content() :: text_content() | image_content() | resource_content()
```

# `create_message_params`

```elixir
@type create_message_params() :: %{
  :messages =&gt; [message()],
  optional(:modelPreferences) =&gt; model_preferences(),
  optional(:systemPrompt) =&gt; String.t(),
  optional(:maxTokens) =&gt; pos_integer()
}
```

# `cursor`

```elixir
@type cursor() :: ExMCP.Types.cursor()
```

# `error_code`

```elixir
@type error_code() :: ExMCP.Types.error_code()
```

# `image_content`

```elixir
@type image_content() :: %{type: :image, data: String.t(), mimeType: String.t()}
```

# `json_schema`

```elixir
@type json_schema() :: map()
```

# `json_value`

```elixir
@type json_value() :: any()
```

# `message`

```elixir
@type message() :: %{role: :user | :assistant, content: content() | [content()]}
```

# `model_hint`

```elixir
@type model_hint() :: %{optional(:name) =&gt; String.t()}
```

# `model_preferences`

```elixir
@type model_preferences() :: %{
  optional(:hints) =&gt; [model_hint()],
  optional(:costPriority) =&gt; float(),
  optional(:speedPriority) =&gt; float(),
  optional(:intelligencePriority) =&gt; float()
}
```

# `request_id`

```elixir
@type request_id() :: ExMCP.Types.request_id()
```

# `resource`

```elixir
@type resource() :: %{
  :uri =&gt; String.t(),
  optional(:name) =&gt; String.t(),
  optional(:description) =&gt; String.t(),
  optional(:mimeType) =&gt; String.t()
}
```

# `resource_content`

```elixir
@type resource_content() :: %{type: :resource, resource: resource()}
```

# `server_capabilities`

```elixir
@type server_capabilities() :: %{
  optional(:experimental) =&gt; %{required(String.t()) =&gt; any()},
  optional(:prompts) =&gt; %{optional(:listChanged) =&gt; boolean()},
  optional(:resources) =&gt; %{optional(:listChanged) =&gt; boolean()},
  optional(:tools) =&gt; %{optional(:listChanged) =&gt; boolean()},
  optional(:logging) =&gt; %{required(String.t()) =&gt; any()}
}
```

# `text_content`

```elixir
@type text_content() :: %{type: :text, text: String.t()}
```

# `tool`

```elixir
@type tool() :: %{
  :name =&gt; String.t(),
  optional(:description) =&gt; String.t(),
  inputSchema: json_schema()
}
```

# `protocol_version`

---

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