get_node_info
Describe one ROS 2 node's topics, services, actions, parameters, and use_sim_time from the graph; report blocked parameter reads as findings, not errors.
Instructions
ROS 2 graph only; on a DDS-only setup use list_participants. Describe one ROS 2 node as a NodeInfo: the topics it publishes and subscribes to, the services and actions it serves or calls (each {name, type}), its parameters and use_sim_time. Interfaces come from the graph (ros2 node info), which never waits for the node. Parameters come from a read (ros2 param dump) bounded by timeout_s: a node that does not answer in time is a finding, not an error: parameters is null, parameters_note says its executor is probably blocked, and the interfaces are still returned. A value whose name contains password, secret, token, api_key or credential is replaced by <masked> and a long value is cut (truncated, original_size), both said in parameters_note. With several nodes of that name duplicate_count is above 1 and note warns. Raises an MCP error when the node is not on the graph (the message lists close matches), the name is malformed, or without a ros2 CLI. Read-only: the only request TopicForge ever sends is a parameter read (list/get); it sends no other request to a node. Duration: runs the ros2 CLI behind the ROS lock, one call at a time: up to three CLI calls (node list and node info, 8 s each at most; then the parameter read, at most timeout_s, 20 s). The whole call, lock wait included, ends within 45 s: if another ros2 call holds the lock it fails at once with a busy error (retry), and a call that waited has less time for the parameter read.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Fully qualified node name as `list_nodes` gives it, e.g. `/robot1/lidar_driver` (a missing leading `/` is added). | |
| timeout_s | No | Seconds to wait for the parameter read, 1..20, default 8. A node that does not answer is reported in `parameters_note`, not as an error. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | One sentence of context, or `None`. | |
| full_name | Yes | Fully qualified node name, e.g. `/lidar_driver`. | |
| parameters | No | Parameters sorted by name; `None` when unreadable (see `parameters_note`); an empty list means none. | |
| publishers | Yes | Topics the node publishes. | |
| subscribers | Yes | Topics the node subscribes to. | |
| use_sim_time | No | Value of the node's `use_sim_time` parameter. `None` when unknown: see `use_sim_time_note`. | |
| action_clients | Yes | Actions the node calls. | |
| action_servers | Yes | Actions the node serves. | |
| mode_effective | Yes | `live` or `mock` (fixtures). | |
| duplicate_count | Yes | Nodes using this exact full name; above 1, the data above belongs to one of them. | |
| parameters_note | No | Why `parameters` is `None`, or what was masked or cut; `None` when complete. | |
| service_clients | Yes | Services the node calls. | |
| service_servers | Yes | Services the node offers, its own parameter services included. | |
| use_sim_time_note | No | Why `use_sim_time` is `None`. `None` when it is set. |