--- title: Tool reference description: Every tool registered by the ROS2 MCP server, generated from the source registry. --- Generated from ROS2 MCP release `2610` (source commit `c1bfecd`). 24 tools are registered. | Tool | Mutates robot state | Summary | | --- | --- | --- | | [`ros2_action_request_result`](#ros2_action_request_result) | no | Wait for the RESULT of a ROS 2 action (GetResult) for a given goal_id. Before **every** use of this tool, the agent should ensure the target action exists (e.g., by calling 'ros2_list_actions'). | | [`ros2_action_subscribe_feedback`](#ros2_action_subscribe_feedback) | no | Subscribe to feedback messages of a ROS 2 action. Optionally filter by goal_id_hex. Collects feedback for a fixed duration or until a maximum number of messages is received. Each message contains goal_id, feedback payload, and receive timestamp. | | [`ros2_action_subscribe_status`](#ros2_action_subscribe_status) | no | Subscribe to '//_action/status' (action_msgs/msg/GoalStatusArray) and return a snapshot of status frames over a time window. Each frame contains goal_id, accept_stamp, status_code and status text. | | [`ros2_cancel_action_goal`](#ros2_cancel_action_goal) | ⚠ yes | Cancel a ROS 2 action goal via '//cancel_goal' (action_msgs/srv/CancelGoal). You can cancel a specific goal by goal_id_hex or cancel all matching goals using cancel_all=True. Optionally limit cancellation to goals accepted before a given stamp (sec/nanosec). Before **every** use of this tool, the agent should ensure the target action exists (e.g., by calling 'ros2_list_actions'). | | [`ros2_get_map_as_image`](#ros2_get_map_as_image) | no | Get one nav_msgs/msg/OccupancyGrid message from a topic and return it as a PNG image (base64-encoded). Unknown cells rendered as gray, free as white, occupied as black. | | [`ros2_get_message_fields`](#ros2_get_message_fields) | no | Returns the fields of a given ROS2 message type. | | [`ros2_get_messages_stored_in_influx_data_base`](#ros2_get_messages_stored_in_influx_data_base) | no | Calls the ROS2 ‘/get_messages’ service to retrieve past messages from a topic for data which is stored in InfluxDB. | | [`ros2_get_pointcloud_as_bev`](#ros2_get_pointcloud_as_bev) | no | Get one sensor_msgs/msg/PointCloud2 message from a topic and return it as a PNG image (base64-encoded) rendered as a bird's-eye view (XY projection). Supports coloring by intensity/height/rgb. | | [`ros2_interface_list`](#ros2_interface_list) | no | Returns a list of available ROS 2 interfaces. | | [`ros2_list_actions`](#ros2_list_actions) | no | List all available ROS 2 actions with their types and request fields. | | [`ros2_publish_multiple_topics`](#ros2_publish_multiple_topics) | ⚠ yes | Publish messages to multiple ROS 2 topics simultaneously with optional frequency and duration. | | [`ros2_send_action_goal`](#ros2_send_action_goal) | ⚠ yes | Send a goal to a ROS 2 action by name and action type using provided goal fields. Before **every** use of this tool, the agent must call 'ros2_list_actions' and 'ros2_interface_list' to ensure the latest available actions and types are known. Optionally wait for the result with a timeout. | | [`ros2_service_call`](#ros2_service_call) | ⚠ yes | Call a ROS 2 service by name and type using provided fields. | | [`ros2_service_list`](#ros2_service_list) | no | Returns a list of available ROS 2 services and their request fields. | | [`ros2_stream_next`](#ros2_stream_next) | no | Fetch the latest item from a stream session. If after_seq is provided, returns available=false until seq increases. UI/App-only tool. | | [`ros2_stream_next_image`](#ros2_stream_next_image) | no | Fetch the latest image from an image stream session and return it as ImageContent (useful when the client cannot render the Viewer App UI). UI/App-only tool. | | [`ros2_stream_start`](#ros2_stream_start) | no | Start a keep-latest stream session for a ROS 2 topic (Image/CompressedImage/PointCloud2/Generic). Returns a session_id. UI/App-only tool. | | [`ros2_stream_stop`](#ros2_stream_stop) | no | Stop and clean up a stream session previously started with ros2_stream_start. UI/App-only tool. | | [`ros2_subscribe_multiple_topics`](#ros2_subscribe_multiple_topics) | no | Subscribe to multiple ROS 2 topics at once and return received messages. | | [`ros2_topic_list`](#ros2_topic_list) | no | Returns a list of available ROS 2 topics and their types. | | [`ros2_topic_publish`](#ros2_topic_publish) | ⚠ yes | Publish a message to a ROS 2 topic by name and message type using provided field values. | | [`ros2_topic_subscribe`](#ros2_topic_subscribe) | no | Subscribe to a ROS 2 topic by name collecting messages for a given time or count limit. | | [`ros2_viewer_app`](#ros2_viewer_app) | no | Open an interactive ROS 2 viewer app (Image + PointCloud2 + Plot) for MCP clients that support Apps/HTML resources. | | [`ros2_viewer_config`](#ros2_viewer_config) | no | Return the last ROS 2 Viewer App configuration (if any). UI/App-only tool. | ## `ros2_action_request_result` Wait for the RESULT of a ROS 2 action (GetResult) for a given goal_id. Before **every** use of this tool, the agent should ensure the target action exists (e.g., by calling 'ros2_list_actions'). | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `action_name` | string | yes | Action name, e.g. '/fibonacci' | | `action_type` | string | yes | Full action type, e.g. 'example_interfaces/action/Fibonacci' or 'pkg/ActionName' | | `goal_id_hex` | string | yes | 32-char UUID hex of the goal (no dashes). | | `timeout_sec` | number \| null | no | Seconds to wait for GetResult; null → wait indefinitely. · default: `60.0` | | `wait_for_service_sec` | number | no | Seconds to wait for the GetResult service to appear. · default: `3.0` |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "action_name": { "description": "Action name, e.g. '/fibonacci'", "type": "string" }, "action_type": { "description": "Full action type, e.g. 'example_interfaces/action/Fibonacci' or 'pkg/ActionName'", "type": "string" }, "goal_id_hex": { "description": "32-char UUID hex of the goal (no dashes).", "type": "string" }, "timeout_sec": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": 60.0, "description": "Seconds to wait for GetResult; null → wait indefinitely." }, "wait_for_service_sec": { "default": 3.0, "description": "Seconds to wait for the GetResult service to appear.", "type": "number" } }, "required": [ "action_name", "action_type", "goal_id_hex" ], "type": "object" } ```
## `ros2_action_subscribe_feedback` Subscribe to feedback messages of a ROS 2 action. Optionally filter by goal_id_hex. Collects feedback for a fixed duration or until a maximum number of messages is received. Each message contains goal_id, feedback payload, and receive timestamp. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `action_name` | string | yes | Action name, e.g. '/fibonacci' | | `action_type` | string | yes | Full action type, e.g. 'example_interfaces/action/Fibonacci' or 'pkg/ActionName' | | `duration_sec` | number | no | How many seconds to keep spinning and collecting feedback. · default: `5.0` | | `goal_id_hex` | string \| null | no | Optional 32-char UUID hex of the goal (no dashes) to filter feedbacks. | | `max_messages` | integer | no | Maximum number of feedback messages to collect. · default: `100` |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "action_name": { "description": "Action name, e.g. '/fibonacci'", "type": "string" }, "action_type": { "description": "Full action type, e.g. 'example_interfaces/action/Fibonacci' or 'pkg/ActionName'", "type": "string" }, "duration_sec": { "default": 5.0, "description": "How many seconds to keep spinning and collecting feedback.", "type": "number" }, "goal_id_hex": { "description": "Optional 32-char UUID hex of the goal (no dashes) to filter feedbacks.", "type": [ "string", "null" ] }, "max_messages": { "default": 100, "description": "Maximum number of feedback messages to collect.", "type": "integer" } }, "required": [ "action_name", "action_type" ], "type": "object" } ```
## `ros2_action_subscribe_status` Subscribe to '//_action/status' (action_msgs/msg/GoalStatusArray) and return a snapshot of status frames over a time window. Each frame contains goal_id, accept_stamp, status_code and status text. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `action_name` | string | yes | Action name, e.g. '/fibonacci' | | `duration_sec` | number | no | How many seconds to collect status frames. · default: `5.0` | | `max_messages` | integer | no | Max number of individual statuses to collect in total. · default: `100` |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "action_name": { "description": "Action name, e.g. '/fibonacci'", "type": "string" }, "duration_sec": { "default": 5.0, "description": "How many seconds to collect status frames.", "type": "number" }, "max_messages": { "default": 100, "description": "Max number of individual statuses to collect in total.", "type": "integer" } }, "required": [ "action_name" ], "type": "object" } ```
## `ros2_cancel_action_goal` > **⚠ mutates robot state** Cancel a ROS 2 action goal via '//cancel_goal' (action_msgs/srv/CancelGoal). You can cancel a specific goal by goal_id_hex or cancel all matching goals using cancel_all=True. Optionally limit cancellation to goals accepted before a given stamp (sec/nanosec). Before **every** use of this tool, the agent should ensure the target action exists (e.g., by calling 'ros2_list_actions'). | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `action_name` | string | yes | Action name, e.g. '/fibonacci' or '/navigate_to_pose' | | `cancel_all` | boolean | no | If true, send zero-UUID to cancel all matching goals. · default: `false` | | `goal_id_hex` | string | no | 32-char UUID hex of the goal (no dashes). Omit when cancel_all=True. | | `stamp_nanosec` | integer | no | Nanoseconds part for the acceptance time filter. · default: `0` | | `stamp_sec` | integer | no | Cancel goals accepted BEFORE this sec (default 0 → usually all). · default: `0` | | `wait_timeout_sec` | number | no | Timeout (seconds) to wait for the service and response. · default: `3.0` |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "action_name": { "description": "Action name, e.g. '/fibonacci' or '/navigate_to_pose'", "type": "string" }, "cancel_all": { "default": false, "description": "If true, send zero-UUID to cancel all matching goals.", "type": "boolean" }, "goal_id_hex": { "description": "32-char UUID hex of the goal (no dashes). Omit when cancel_all=True.", "type": "string" }, "stamp_nanosec": { "default": 0, "description": "Nanoseconds part for the acceptance time filter.", "type": "integer" }, "stamp_sec": { "default": 0, "description": "Cancel goals accepted BEFORE this sec (default 0 → usually all).", "type": "integer" }, "wait_timeout_sec": { "default": 3.0, "description": "Timeout (seconds) to wait for the service and response.", "type": "number" } }, "required": [ "action_name" ], "type": "object" } ```
## `ros2_get_map_as_image` Get one nav_msgs/msg/OccupancyGrid message from a topic and return it as a PNG image (base64-encoded). Unknown cells rendered as gray, free as white, occupied as black. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `topic_name` | string | yes | The name of the ROS 2 topic publishing nav_msgs/msg/OccupancyGrid (e.g., /map). |
Input schema (JSON) ```json { "properties": { "topic_name": { "description": "The name of the ROS 2 topic publishing nav_msgs/msg/OccupancyGrid (e.g., /map).", "type": "string" } }, "required": [ "topic_name" ], "type": "object" } ```
## `ros2_get_message_fields` Returns the fields of a given ROS2 message type. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `message_type` | string | yes | Full ROS2 message type, e.g., std_msgs/msg/String |
Input schema (JSON) ```json { "properties": { "message_type": { "description": "Full ROS2 message type, e.g., std_msgs/msg/String", "type": "string" } }, "required": [ "message_type" ], "type": "object" } ```
## `ros2_get_messages_stored_in_influx_data_base` Calls the ROS2 ‘/get_messages’ service to retrieve past messages from a topic for data which is stored in InfluxDB. Check if the /get_messages service is available before calling. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `message_type` | string | yes | Full ROS2 message type used for decoding | | `number_of_messages` | integer | no | Number of messages to fetch. · default: `0` | | `time_end` | string | no | ISO8601 timestamp string to filter messages before a point in time. | | `time_start` | string | no | ISO8601 timestamp string to filter messages after a point in time. | | `topic_name` | string | yes | Name of the topic to retrieve messages from. |
Input schema (JSON) ```json { "properties": { "message_type": { "description": "Full ROS2 message type used for decoding", "type": "string" }, "number_of_messages": { "default": 0, "description": "Number of messages to fetch.", "type": "integer" }, "time_end": { "description": "ISO8601 timestamp string to filter messages before a point in time.", "type": "string" }, "time_start": { "description": "ISO8601 timestamp string to filter messages after a point in time.", "type": "string" }, "topic_name": { "description": "Name of the topic to retrieve messages from.", "type": "string" } }, "required": [ "topic_name", "message_type" ], "type": "object" } ```
## `ros2_get_pointcloud_as_bev` Get one sensor_msgs/msg/PointCloud2 message from a topic and return it as a PNG image (base64-encoded) rendered as a bird's-eye view (XY projection). Supports coloring by intensity/height/rgb. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `color_mode` | string | no | Coloring mode: 'intensity' \\| 'height' \\| 'rgb'. · one of: `"intensity"`, `"height"`, `"rgb"` · default: `"intensity"` | | `colormap` | string | no | Colormap for intensity/height: 'jet' \\| 'gray'. · one of: `"jet"`, `"gray"` · default: `"jet"` | | `max_pixels` | integer | no | Max image size per axis (to cap huge clouds). · default: `2048` | | `resolution` | number | no | Meters per pixel for the BEV image. · default: `0.05` | | `timeout` | number | no | Seconds to wait for a message. · default: `5.0` | | `topic_name` | string | yes | ROS 2 topic with PointCloud2 (e.g., /points). | | `zmax` | number | no | Max Z to include (meters). | | `zmin` | number | no | Min Z to include (meters). |
Input schema (JSON) ```json { "properties": { "color_mode": { "default": "intensity", "description": "Coloring mode: 'intensity' | 'height' | 'rgb'.", "enum": [ "intensity", "height", "rgb" ], "type": "string" }, "colormap": { "default": "jet", "description": "Colormap for intensity/height: 'jet' | 'gray'.", "enum": [ "jet", "gray" ], "type": "string" }, "max_pixels": { "default": 2048, "description": "Max image size per axis (to cap huge clouds).", "type": "integer" }, "resolution": { "default": 0.05, "description": "Meters per pixel for the BEV image.", "type": "number" }, "timeout": { "default": 5.0, "description": "Seconds to wait for a message.", "type": "number" }, "topic_name": { "description": "ROS 2 topic with PointCloud2 (e.g., /points).", "type": "string" }, "zmax": { "description": "Max Z to include (meters).", "type": "number" }, "zmin": { "description": "Min Z to include (meters).", "type": "number" } }, "required": [ "topic_name" ], "type": "object" } ```
## `ros2_interface_list` Returns a list of available ROS 2 interfaces. No parameters.
Input schema (JSON) ```json { "properties": {}, "type": "object" } ```
## `ros2_list_actions` List all available ROS 2 actions with their types and request fields. This tool queries the current ROS graph to discover active action servers and returns a structured description for each action. No parameters.
Input schema (JSON) ```json { "additionalProperties": false, "properties": {}, "type": "object" } ```
## `ros2_publish_multiple_topics` > **⚠ mutates robot state** Publish messages to multiple ROS 2 topics simultaneously with optional frequency and duration. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `topics` | array | yes | List of topics to publish to. |
Input schema (JSON) ```json { "properties": { "topics": { "description": "List of topics to publish to.", "items": { "properties": { "data": { "description": "Message content as dictionary", "type": "object" }, "duration": { "default": 5.0, "description": "Duration in seconds to publish (optional)", "type": "number" }, "frequency": { "default": 1.0, "description": "Publishing frequency in Hz (optional)", "type": "number" }, "message_type": { "type": "string" }, "topic_name": { "type": "string" } }, "required": [ "topic_name", "message_type", "data" ], "type": "object" }, "type": "array" } }, "required": [ "topics" ], "type": "object" } ```
## `ros2_send_action_goal` > **⚠ mutates robot state** Send a goal to a ROS 2 action by name and action type using provided goal fields. Before **every** use of this tool, the agent must call 'ros2_list_actions' and 'ros2_interface_list' to ensure the latest available actions and types are known. Optionally wait for the result with a timeout. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `action_name` | string | yes | Action name, e.g. '/fibonacci' or '/navigate_to_pose' | | `action_type` | string | yes | Full action type, e.g. 'example_interfaces/action/Fibonacci' or 'pkg/ActionName' | | `goal_fields` | object | yes | Dictionary with goal message fields (1st section of .action file) | | `timeout_sec` | number | no | Timeout (seconds) for waiting on the result when wait_for_result=true · default: `60.0` | | `wait_for_result` | boolean | no | If true, wait for GetResult and include final status/result · default: `false` |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "action_name": { "description": "Action name, e.g. '/fibonacci' or '/navigate_to_pose'", "type": "string" }, "action_type": { "description": "Full action type, e.g. 'example_interfaces/action/Fibonacci' or 'pkg/ActionName'", "type": "string" }, "goal_fields": { "description": "Dictionary with goal message fields (1st section of .action file)", "type": "object" }, "timeout_sec": { "default": 60.0, "description": "Timeout (seconds) for waiting on the result when wait_for_result=true", "type": "number" }, "wait_for_result": { "default": false, "description": "If true, wait for GetResult and include final status/result", "type": "boolean" } }, "required": [ "action_name", "action_type", "goal_fields" ], "type": "object" } ```
## `ros2_service_call` > **⚠ mutates robot state** Call a ROS 2 service by name and type using provided fields. Will ask the user to confirm if some fields are missing unless 'force_call' is set to True. Before **every** use of this tool, the agent must call 'ros2 service list' and 'ros2 interface list' to ensure the latest interface information is available. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `fields` | object | yes | Dictionary of fields to send in the service request. | | `force_call` | boolean | no | Whether to call the service even if some fields are missing · default: `false` | | `service_name` | string | yes | Name of the service to call | | `service_type` | string | yes | Full ROS 2 service type, before pass, check service type using tool ros2_service_list |
Input schema (JSON) ```json { "properties": { "fields": { "description": "Dictionary of fields to send in the service request.", "type": "object" }, "force_call": { "default": false, "description": "Whether to call the service even if some fields are missing", "type": "boolean" }, "service_name": { "description": "Name of the service to call", "type": "string" }, "service_type": { "description": "Full ROS 2 service type, before pass, check service type using tool ros2_service_list", "type": "string" } }, "required": [ "service_name", "service_type", "fields" ], "type": "object" } ```
## `ros2_service_list` Returns a list of available ROS 2 services and their request fields. No parameters.
Input schema (JSON) ```json { "properties": {}, "type": "object" } ```
## `ros2_stream_next` Fetch the latest item from a stream session. If after_seq is provided, returns available=false until seq increases. UI/App-only tool. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `after_seq` | integer | no | | | `session_id` | string | yes | |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "after_seq": { "type": "integer" }, "session_id": { "type": "string" } }, "required": [ "session_id" ], "type": "object" } ```
## `ros2_stream_next_image` Fetch the latest image from an image stream session and return it as ImageContent (useful when the client cannot render the Viewer App UI). UI/App-only tool. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `after_seq` | integer | no | | | `session_id` | string | yes | |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "after_seq": { "type": "integer" }, "session_id": { "type": "string" } }, "required": [ "session_id" ], "type": "object" } ```
## `ros2_stream_start` Start a keep-latest stream session for a ROS 2 topic (Image/CompressedImage/PointCloud2/Generic). Returns a session_id. UI/App-only tool. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `jpeg_quality` | integer | no | default: `80` | | `kind` | string | yes | one of: `"image"`, `"pointcloud"`, `"message"` | | `max_height` | integer | no | default: `540` | | `max_points` | integer | no | Max points to return; <=0 means no limit. · default: `0` | | `max_width` | integer | no | default: `960` | | `qos_preset` | string | no | QoS preset for the stream subscription. Use sensor_data for most camera topics. · one of: `"auto"`, `"sensor_data"`, `"system_default"` · default: `"auto"` | | `target_fps` | number | no | Soft cap for processing frames (keep-latest, drops when over). · default: `20.0` | | `topic_name` | string | yes | |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "jpeg_quality": { "default": 80, "type": "integer" }, "kind": { "enum": [ "image", "pointcloud", "message" ], "type": "string" }, "max_height": { "default": 540, "type": "integer" }, "max_points": { "default": 0, "description": "Max points to return; <=0 means no limit.", "type": "integer" }, "max_width": { "default": 960, "type": "integer" }, "qos_preset": { "default": "auto", "description": "QoS preset for the stream subscription. Use sensor_data for most camera topics.", "enum": [ "auto", "sensor_data", "system_default" ], "type": "string" }, "target_fps": { "default": 20.0, "description": "Soft cap for processing frames (keep-latest, drops when over).", "type": "number" }, "topic_name": { "type": "string" } }, "required": [ "topic_name", "kind" ], "type": "object" } ```
## `ros2_stream_stop` Stop and clean up a stream session previously started with ros2_stream_start. UI/App-only tool. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `session_id` | string | yes | |
Input schema (JSON) ```json { "additionalProperties": false, "properties": { "session_id": { "type": "string" } }, "required": [ "session_id" ], "type": "object" } ```
## `ros2_subscribe_multiple_topics` Subscribe to multiple ROS 2 topics at once and return received messages. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `topics` | array | yes | List of topics to subscribe to. |
Input schema (JSON) ```json { "properties": { "topics": { "description": "List of topics to subscribe to.", "items": { "properties": { "duration": { "default": 0.0, "description": "How many seconds to listen (optional).", "type": "number" }, "message_limit": { "default": 0, "description": "Number of messages to collect (optional).", "type": "integer" }, "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "type": "array" } }, "required": [ "topics" ], "type": "object" } ```
## `ros2_topic_list` Returns a list of available ROS 2 topics and their types. No parameters.
Input schema (JSON) ```json { "properties": {}, "type": "object" } ```
## `ros2_topic_publish` > **⚠ mutates robot state** Publish a message to a ROS 2 topic by name and message type using provided field values. Supports single publish (default) or continuous publishing at a specified frequency for a duration. Before **every** use of this tool, the agent must call 'ros2_topic_list' and 'ros2_interface_list' to ensure the latest available topics and message types are known. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `data` | object | yes | Dictionary containing the message fields and values | | `duration` | number | no | Optional: Duration in seconds for continuous publishing. Must be used with frequency parameter. | | `frequency` | number | no | Optional: Publish frequency in Hz (messages per second). If provided with duration, publishes repeatedly. | | `message_type` | string | yes | Full ROS 2 message type, e.g., 'std_msgs/msg/String' | | `topic_name` | string | yes | Name of the topic to publish to |
Input schema (JSON) ```json { "properties": { "data": { "description": "Dictionary containing the message fields and values", "type": "object" }, "duration": { "description": "Optional: Duration in seconds for continuous publishing. Must be used with frequency parameter.", "type": "number" }, "frequency": { "description": "Optional: Publish frequency in Hz (messages per second). If provided with duration, publishes repeatedly.", "type": "number" }, "message_type": { "description": "Full ROS 2 message type, e.g., 'std_msgs/msg/String'", "type": "string" }, "topic_name": { "description": "Name of the topic to publish to", "type": "string" } }, "required": [ "topic_name", "message_type", "data" ], "type": "object" } ```
## `ros2_topic_subscribe` Subscribe to a ROS 2 topic by name collecting messages for a given time or count limit. Before **every** use of this tool, the agent must call 'ros2_topic_list' to ensure it has the latest available topics | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `duration` | number | no | If provided, collects messages for this many seconds. | | `message_limit` | integer | no | If provided, stops after receiving this number of messages. | | `topic_name` | string | yes | Name of the topic to subscribe to |
Input schema (JSON) ```json { "properties": { "duration": { "description": "If provided, collects messages for this many seconds.", "type": "number" }, "message_limit": { "description": "If provided, stops after receiving this number of messages.", "type": "integer" }, "topic_name": { "description": "Name of the topic to subscribe to", "type": "string" } }, "required": [ "topic_name" ], "type": "object" } ```
## `ros2_viewer_app` Open an interactive ROS 2 viewer app (Image + PointCloud2 + Plot) for MCP clients that support Apps/HTML resources. | Parameter | Type | Required | Notes | | --- | --- | --- | --- | | `auto_start` | boolean | no | default: `true` | | `plot_fields` | array | no | Optional list of plot field paths to preselect in Plot mode. | | `preferred_kind` | string | no | one of: `"image"`, `"pointcloud"`, `"plot"`, `"auto"` | | `topic_name` | string | no | |
Input schema (JSON) ```json { "properties": { "auto_start": { "default": true, "type": "boolean" }, "plot_fields": { "description": "Optional list of plot field paths to preselect in Plot mode.", "items": { "type": "string" }, "type": "array" }, "preferred_kind": { "enum": [ "image", "pointcloud", "plot", "auto" ], "type": "string" }, "topic_name": { "type": "string" } }, "type": "object" } ```
## `ros2_viewer_config` Return the last ROS 2 Viewer App configuration (if any). UI/App-only tool. No parameters.
Input schema (JSON) ```json { "additionalProperties": false, "properties": {}, "type": "object" } ```