An MCP tool definition as advertised by tools/list.
annotations accepts snake_case atom keys (:read_only_hint,
:destructive_hint, :idempotent_hint, :open_world_hint, :title) and
renders them in the camelCase wire format.
description and title may be a plain String.t() or a
Noizu.MCP.Description.t() (a verbosity variant set); to_map/2 resolves them
through a Noizu.MCP.RenderCtx. When input_fields/output_fields are
present (DSL-declared schemas), to_map/2 re-renders their JSON Schema through
the context so field descriptions track the requested verbosity too; otherwise
the pre-compiled input_schema/output_schema maps are used verbatim. The
arity-1 to_map/1 uses RenderCtx.default/0, so plain-string tools render
exactly as before.
Summary
Types
@type t() :: %Noizu.MCP.Types.Tool{ annotations: map() | keyword() | nil, description: String.t() | Noizu.MCP.Description.t() | nil, icons: [map()] | nil, input_fields: list() | nil, input_schema: map(), meta: map() | nil, name: String.t(), output_fields: list() | nil, output_schema: map() | nil, title: String.t() | Noizu.MCP.Description.t() | nil }