# SPDX-FileCopyrightText: 2026 James Harton
#
# SPDX-License-Identifier: Apache-2.0
defmodule BB.MCP.Tools.GetParameter do
@moduledoc """
Read a single runtime parameter from a robot.
The path is a dotted string like `"motion.max_speed"`.
"""
use Anubis.Server.Component, type: :tool
alias Anubis.MCP.Error
alias Anubis.Server.Response
alias BB.MCP.Tools
alias BB.Parameter
schema do
field(:robot, :string, required: true)
field(:path, :string, required: true, description: "Dotted parameter path")
end
@impl true
def execute(params, frame) do
path_str = Tools.get_arg(params, :path)
with {:ok, robot} <- Tools.fetch_robot(params),
path = Tools.parse_path(path_str),
{:ok, value} <- Parameter.get(robot, path) do
{:reply, Response.json(Response.tool(), %{"path" => path_str, "value" => value}), frame}
else
{:error, :not_found} ->
{:error, Error.resource(:not_found, %{message: "parameter not found: #{path_str}"}),
frame}
{:error, reason} ->
{:error, Tools.to_anubis_error(reason), frame}
end
end
end