Packages
Official-style Elixir SDK for the Model Context Protocol (MCP) — client and server with stdio and Streamable HTTP transports.
Current section
Files
Jump to
Current section
Files
lib/mcp/protocol/messages/roots.ex
defmodule MCP.Protocol.Messages.Roots do
@moduledoc """
Message types for `roots/list`.
"""
defmodule ListParams do
@moduledoc """
Parameters for `roots/list` (empty).
"""
@derive Jason.Encoder
defstruct [:meta]
@type t :: %__MODULE__{meta: map() | nil}
@spec from_map(map()) :: t()
def from_map(map) when is_map(map) do
%__MODULE__{meta: Map.get(map, "_meta")}
end
end
defmodule ListResult do
@moduledoc """
Result of `roots/list`.
"""
alias MCP.Protocol.Types.Root
@derive Jason.Encoder
defstruct [:roots, :meta]
@type t :: %__MODULE__{
roots: [Root.t()],
meta: map() | nil
}
@spec from_map(map()) :: t()
def from_map(map) when is_map(map) do
%__MODULE__{
roots: map |> Map.fetch!("roots") |> Enum.map(&Root.from_map/1),
meta: Map.get(map, "_meta")
}
end
defimpl Jason.Encoder, for: __MODULE__ do
def encode(struct, opts) do
map = %{roots: struct.roots}
map = if struct.meta, do: Map.put(map, :_meta, struct.meta), else: map
Jason.Encode.map(map, opts)
end
end
end
end