Packages
claude_code
0.32.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/mcp_tool_use_block.ex
defmodule ClaudeCode.Content.MCPToolUseBlock do
@moduledoc """
Represents an MCP tool use content block within a Claude message.
MCP tool use blocks indicate that Claude wants to invoke a tool
provided by an MCP (Model Context Protocol) server.
"""
use ClaudeCode.JSONEncoder
@enforce_keys [:type, :id, :name, :server_name, :input]
defstruct [:type, :id, :name, :server_name, :input]
@type t :: %__MODULE__{
type: :mcp_tool_use,
id: String.t(),
name: String.t(),
server_name: String.t(),
input: any()
}
@spec new(map()) :: {:ok, t()} | {:error, atom() | {:missing_fields, [atom()]}}
def new(%{"type" => "mcp_tool_use"} = data) do
required = ["id", "name", "server_name", "input"]
missing = Enum.filter(required, &(not Map.has_key?(data, &1)))
if Enum.empty?(missing) do
{:ok,
%__MODULE__{
type: :mcp_tool_use,
id: data["id"],
name: data["name"],
server_name: data["server_name"],
input: data["input"]
}}
else
{:error, {:missing_fields, Enum.map(missing, &String.to_atom/1)}}
end
end
def new(_), do: {:error, :invalid_content_type}
end
defimpl String.Chars, for: ClaudeCode.Content.MCPToolUseBlock do
def to_string(%{server_name: server, name: name}), do: "[mcp: #{server}/#{name}]"
end