# SPDX-FileCopyrightText: 2026 James Harton # # SPDX-License-Identifier: Apache-2.0 defmodule BB.MCP.Tools.SetParameter do @moduledoc """ Write a single runtime parameter on a robot. The path is a dotted string like `"motion.max_speed"`. The value is passed through to `BB.Parameter.set/3`, which validates it against the registered schema and publishes a change notification on success. """ use Anubis.Server.Component, type: :tool 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") field(:value, :any, required: true, description: "New parameter value") end @impl true def execute(params, frame) do path_str = Tools.get_arg(params, :path) value = Tools.get_arg(params, :value) with {:ok, robot} <- Tools.fetch_robot(params), path = Tools.parse_path(path_str), :ok <- Parameter.set(robot, path, value) do {:reply, Response.json(Response.tool(), %{"path" => path_str, "value" => value, "status" => "ok"}), frame} else {:error, reason} -> {:error, Tools.to_anubis_error(reason), frame} end end end