Packages
claude_code
0.36.0
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/content/server_tool_use_block.ex
defmodule ClaudeCode.Content.ServerToolUseBlock do
@moduledoc """
Represents a server-side tool use content block within a Claude message.
Server tool use blocks indicate that the API is invoking a server-side tool
such as web_search, web_fetch, code_execution, or text_editor_code_execution.
Unlike regular tool_use blocks, these are handled by the API itself rather
than by the client.
"""
use ClaudeCode.JSONEncoder
@enforce_keys [:type, :id, :name, :input]
defstruct [:type, :id, :name, :input, :caller]
@type server_tool_name ::
:web_search
| :web_fetch
| :code_execution
| :bash_code_execution
| :text_editor_code_execution
| :tool_search_tool_regex
| :tool_search_tool_bm25
| String.t()
@type t :: %__MODULE__{
type: :server_tool_use,
id: String.t(),
name: server_tool_name(),
input: map(),
caller: map() | nil
}
@known_names ~w(web_search web_fetch code_execution bash_code_execution text_editor_code_execution tool_search_tool_regex tool_search_tool_bm25)
@spec new(map()) :: {:ok, t()} | {:error, atom() | {:missing_fields, [atom()]}}
def new(%{"type" => "server_tool_use"} = data) do
required = ["id", "name", "input"]
missing = Enum.filter(required, &(not Map.has_key?(data, &1)))
if Enum.empty?(missing) do
{:ok,
%__MODULE__{
type: :server_tool_use,
id: data["id"],
name: parse_name(data["name"]),
input: data["input"],
caller: data["caller"]
}}
else
{:error, {:missing_fields, Enum.map(missing, &String.to_atom/1)}}
end
end
def new(_), do: {:error, :invalid_content_type}
defp parse_name(name) when name in @known_names, do: String.to_atom(name)
defp parse_name(name) when is_binary(name), do: name
end
defimpl String.Chars, for: ClaudeCode.Content.ServerToolUseBlock do
def to_string(%{name: name}), do: "[server tool: #{name}]"
end