MCP Server for ROS 2 that provides tools to interact with ROS 2 topics, services, and interfaces
This server has significant definition quality gaps. Tool names follow verb_noun convention (good), but descriptions are inconsistent, some are adequate (ros2_topic_list: 67 chars), others are verbose and prescriptive (ros2_service_call: 280+ chars with embedded instructions). Critical issue: ros2_topic_subscribe has a required parameter 'message_type' in the schema that is NOT documented in the description, and the description itself contradicts the schema (says 'duration' and 'message_limit' are optional, but schema shows 'message_type' as required with no mention). Parameter descriptions are sparse or missing entirely. No output schemas are documented. Error handling is minimal, most tools return raw JSON or dict objects without recovery guidance. Security: no mention of permission checks or audit logging. Overall, the server reads like an early prototype rather than production-grade tooling.
Get the fields and field types of a ROS 2 message type.
Calls the ROS2 '/get_messages' service to retrieve past messages from a topic for data which is stored in InfluxDB.
Returns a list of available ROS 2 interfaces.
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.
Returns a list of available ROS 2 services and their request fields.
Returns a list of available ROS 2 topics and their types.
ros2_topic_subscribe: Required parameter 'message_type' is in schema but completely absent from description. Schema shows it required, but description only mentions 'topic_name', 'duration', 'message_limit'. This mismatch will cause LLM confusion and tool failures.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract structured data. Responses are raw JSON strings, not typed objects. This violates the documented output schema requirement.
Parameter descriptions are missing or minimal. 'fields' in ros2_service_call is described as 'Dictionary of fields to send in the service request' but does not explain format, required structure, or how to populate it. 'data' in ros2_topic_publish similarly lacks detail.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Publish a message to a ROS 2 topic.
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
Error handling is absent or minimal. ros2_service_call returns a dict with 'error' key, but no guidance on recovery. No distinction between retryable vs fatal errors. No actionable error messages to guide LLM recovery.
Descriptions embed prescriptive instructions ('Before **every** use of this tool, the agent must call...') rather than documenting what the tool does. This is prompt-engineering leakage, not tool documentation. Descriptions should state WHAT, not HOW the agent should use it.