Skip to main content
Glama
EngineerAbdullahBinZafar

Antigravity ROS 2 Robotics Plugin

Antigravity ROS 2 Robotics Plugin

antigravity-robotics-plugin โ€ข v1.2.0

Native Antigravity Plugin, Model Context Protocol (MCP) Server & Zero-G Aerospace Suite for ROS 2 Autonomous Robotics

Antigravity Plugin Tests Passing Security Sandbox ROS 2 Compatible License Python Version

Engineered by Abdullah Bin Zafar โ€” Lead Robotics & Autonomous Systems Architect


๐ŸŒŸ Overview

antigravity-robotics-plugin is an enterprise-grade, native Google Antigravity Plugin, Model Context Protocol (MCP) server, and Aerospace Zero-G Control Suite engineered to connect autonomous AI agents directly to ROS 2 (Robot Operating System 2) environments, digital twin simulations, and physical robotic hardware.

It empowers Antigravity agents to inspect topics, tune PID control loops, stream 2D LiDAR pointclouds, monitor multi-robot fleets, and execute safe actuator commands protected by a cryptographic and mutex-guarded 3-Tier Command Sandbox.

๐ŸŒŒ Complete Multi-Layer Robotics Architecture:

  1. AI-Agentic Mission Supervisor (Python MCP): 16 high-level MCP tools for automated diagnosis, safety checks, and telemetry control.

  2. Interactive Zero-G Web Dashboard Sidecar: 4-tab aerospace control station docking right inside the Antigravity IDE Aux Pane (sidecar://antigravity-robotics-plugin/dashboard/index.html).

  3. C++ Lifecycle Node (antigravity_core): Mission-critical deterministic FSM (Unconfigured โžก๏ธ Configuring โžก๏ธ Inactive โžก๏ธ Active โžก๏ธ Finalized) with a 250ms hardware watchdog.

  4. Native RViz2 Qt Panel Plugin (antigravity_rviz_panel): Desktop companion panel embedding Zero-G velocity gauges and E-STOP directly into desktop RViz2.

  5. Gazebo Harmonic Zero-G Simulation (sim/): Orbital microgravity world with 6-DOF thruster dynamics, celestial lighting, and obstacle docking courses.


Related MCP server: ROS MCP

๐Ÿ—๏ธ Architectural Topology

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Google Antigravity IDE                          โ”‚
โ”‚                                                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚    Agentic Reasoning      โ”‚      โ”‚    Interactive Web Dashboard โ”‚  โ”‚
โ”‚   โ”‚   (Tools / Prompts / MCP) โ”‚      โ”‚     (Aux Pane Native Sidecar)โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ฒโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                 โ”‚ stdio (JSON-RPC)                  โ”‚ SSE / WS (20Hz)  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                  โ–ผ                                   โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              antigravity-robotics-plugin (Native MCP Host)              โ”‚
โ”‚                                                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚                 3-Tier Command Sandbox Guard                   โ”‚   โ”‚
โ”‚   โ”‚      [read_only]   |   [safe_write] (Default)   |   [full]     โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                    โ”‚ Safe Tool Invocation              โ”‚
โ”‚                                    โ–ผ                                   โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚             16 MCP Tools across 8 Robotics Domains             โ”‚   โ”‚
โ”‚   โ”‚  Topics โ€ข Nodes โ€ข Params โ€ข Diagnostics โ€ข PID โ€ข Trajectory โ€ข    โ”‚   โ”‚
โ”‚   โ”‚             Spatial LiDAR โ€ข Swarm Fleet Management             โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                    โ”‚                                   โ”‚
โ”‚                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”‚
โ”‚                  โ–ผ                                   โ–ผ                 โ”‚
โ”‚      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
โ”‚      โ”‚  ROS2NativeInterface   โ”‚         โ”‚     MockInterface      โ”‚     โ”‚
โ”‚      โ”‚  (rclpy / Hardware)    โ”‚         โ”‚  (Deterministic Sim)   โ”‚     โ”‚
โ”‚      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   ROS 2 Ecosystem & Physical Actuators                 โ”‚
โ”‚                                                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚ antigravity_core          โ”‚         โ”‚ antigravity_rviz_panel    โ”‚  โ”‚
โ”‚   โ”‚ (C++ Lifecycle Controller)โ”‚         โ”‚ (Native RViz2 Qt Panel)   โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ฒโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                 โ”‚ /cmd_vel /antigravity/thrust_cmd    โ”‚                โ”‚
โ”‚                 โ–ผ                                     โ”‚                โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚            Gazebo Harmonic Zero-G / Hardware Actuators          โ”‚  โ”‚
โ”‚   โ”‚            (6-DOF Thrusters, 360ยฐ LiDAR, High-G IMU)            โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐ŸŽจ Zero-G Aerospace Color Palette & Ergonomics

Designed specifically for harsh lighting fluctuations, polarized visors, and high-vibration aerospace operations (>7:1 WCAG AAA Contrast):

Role / Element

Palette Token

Hex Code

Functional Intent & Ergonomics

Main Surface

Deep Space Charcoal

#12131C

Absorbs screen glare, minimizes eye fatigue in zero-g environments.

Card / Panel

Command Module Slate

#2A2F42

Clean structural separation of telemetry widgets without harsh white borders.

Nominal Active

Neon Cyan

#00F0FF

Confirms nominal field telemetry, active joint controllers, and clear path corridors.

Caution / Alert

Inertial Amber

#FFB800

Joint limits, proximity thresholds (0.6m - 1.5m), and transient FSM states.

Critical Alarm

Solar Flare Red

#FF3366

Emergency Stop (E-STOP) and obstacle proximity (Protanopia-safe coral red).

Typography

Vibration-Proof Silver

#E2E8F0

High-readability silver-white eliminating halo effects under thruster vibration.


๐Ÿ›ก๏ธ 3-Tier Security Sandbox Guardrails

To prevent unintended actuation or dangerous physical hardware movement, all tool executions pass through the Command Sandbox:

Sandbox Level

Permitted Operations

Guardrail Enforcement

read_only

ping, system_diagnostics, list_topics, read_topic, list_nodes, get_node_info, get_parameter, get_pid_state, get_robot_snapshot, get_spatial_map, swarm_fleet_status

Zero hardware writes. All publish_topic, set_parameter, and tune_pid calls are rejected with SandboxBlockedError.

safe_write (Default)

All read operations + strictly allowlisted topics (/cmd_vel, /target_velocity, /led_state, /speaker_cmd, /arm_target_angle) and parameters (max_vel_x, etc.)

Any attempt to publish to unauthorized topics or change unverified parameters is audited and rejected.

full

Unrestricted read/write access across all ROS 2 nodes and topics

Permitted only in simulation mode (MockInterface) or on verified isolated test benches.


๐Ÿงฐ 16 Standard Robotics Tools

Domain

Tool Name

Description

Default Level

System

ping

Ping ROS 2 daemon and verify connection health

read_only

System

system_diagnostics

Full health diagnostics (battery, sensors, CPU, memory, errors)

read_only

Topics

list_topics

Discover all active ROS 2 topics and message types

read_only

Topics

read_topic

Read latest message payload from any ROS 2 topic

read_only

Topics

publish_topic

Publish command payloads to topics (e.g. /cmd_vel)

safe_write

Nodes

list_nodes

Inspect active ROS 2 computational graph nodes

read_only

Nodes

get_node_info

Query node publishers, subscribers, services, and actions

read_only

Parameters

get_parameter

Read parameter values from any ROS 2 node

read_only

Parameters

set_parameter

Safely update ROS 2 node configuration parameters

safe_write

State

get_robot_snapshot

Instant multi-sensor telemetry state aggregation

read_only

Control

get_pid_state

Retrieve current PID loop gains ($K_p$, $K_i$, $K_d$)

read_only

Control

tune_pid

Dynamically calibrate axis controller gains ($K \ge 0$)

safe_write

Kinematics

predict_trajectory

Simulate future kinematic motion profile ($x, y, \theta$)

read_only

Safety

predictive_safety_check

Time-to-collision (TTC) & obstacle proximity verification

read_only

Perception

get_spatial_map

2D/3D spatial occupancy grid & LiDAR pointcloud array

read_only

Fleet

swarm_fleet_status

Multi-robot telemetry monitoring & formation status

read_only


๐Ÿ–ฅ๏ธ Interactive Web Dashboard & Sidecar

The plugin features a zero-dependency, zero-CDN Aerospace Web Dashboard engineered for high-contrast visibility and responsive real-time control:

  • Tactile Drive & Radar (Tab 1): Clickable D-pad with keyboard arrows (โ†‘ โ†“ โ† โ†’ and Space), speed profiles (0.2, 0.5, 1.0 m/s), and real-time 360ยฐ Canvas LiDAR radar with geometric orientation-agnostic badges (๐Ÿ”บ Obstacle Close, ๐Ÿ”ท Path Clear).

  • Sensors & Health (Tab 2): Live battery voltage/amperage progress bar, 3D IMU artificial horizon, and diagnostic alerts.

  • Engineer Mode (Tab 3): Real-time ROS 2 computational graph node monitor, topic search/inspection modal, and dynamic PID gain calibration sliders.

  • Activity Log (Tab 4): Live timestamped event and audit log stream.

  • Antigravity Aux Pane Native Link:

    [ROS 2 Robotics Dashboard](sidecar://antigravity-robotics-plugin/dashboard/index.html)

๐Ÿš€ Quick Start & Usage

1. Installation

Install directly in your Python environment or Antigravity workspace:

git clone https://github.com/EngineerAbdullahBinZafar/antigravity-robotics-plugin.git
cd antigravity-robotics-plugin
pip install -e ".[dev,dashboard,rosbridge]"

2. Building ROS 2 C++ Packages (Humble / Jazzy)

# In your ROS 2 colcon workspace:
mkdir -p ~/ros2_ws/src
cp -r ros2_packages/* ~/ros2_ws/src/
cd ~/ros2_ws
colcon build --symlink-install
source install/setup.bash

3. Launch Gazebo Harmonic Zero-G Simulation

ros2 launch sim/launch/zero_g_simulation.launch.py

4. Launch Standalone Dashboard

python -m ros2_mcp.dashboard.server --port 8765
# Or via CLI alias:
ros2-mcp-dashboard --port 8765

5. Run Automated Test Suite

Execute the comprehensive 152-test verification suite:

pytest tests/ -v

๐Ÿงช Verification & Benchmarks

The entire test suite executes with 100% success rate (152/152 passing) across 8 specialized verification harnesses:

  • test_plugin_manifest.py: Validates plugin.json, mcp_config.json, assets, and Antigravity schema compliance.

  • test_server.py: Validates all 16 tool handlers, parameter validation, and JSON-RPC hygiene.

  • test_dashboard_api.py: Validates REST API endpoints, topic routing, and telemetry streams.

  • test_live_ws_stress_m2.py: Real-time stress tests verifying 20Hz sustained streaming across concurrent clients.

  • test_adversarial_m1.py & test_adversarial_m2.py: Adversarial safety penetration tests, ungraceful socket teardowns, and directory traversal immunity.

  • test_adversarial_stress_m2.py: Concurrency and rapid connect/disconnect churn tests.

  • test_empirical_benchmarks.py: P95 latency benchmarks (<30ms connect latency, <5ms command dispatch).


๐Ÿ“ Repository Structure

antigravity-robotics-plugin/
โ”œโ”€โ”€ plugin.json                    # Antigravity native plugin manifest
โ”œโ”€โ”€ mcp_config.json                # MCP stdio client configuration
โ”œโ”€โ”€ pyproject.toml                 # Modern PEP 621 build configuration
โ”œโ”€โ”€ setup.py                       # Setuptools packaging specification
โ”œโ”€โ”€ LICENSE                        # Apache 2.0 Open Source License
โ”œโ”€โ”€ README.md                      # Complete system documentation
โ”œโ”€โ”€ assets/
โ”‚   โ””โ”€โ”€ logo.svg                   # Vector logo badge
โ”œโ”€โ”€ rules/
โ”‚   โ””โ”€โ”€ AGENTS.md                  # Priority directives & sidecar link rules
โ”œโ”€โ”€ skills/
โ”‚   โ””โ”€โ”€ ros2-robotics/
โ”‚       โ””โ”€โ”€ SKILL.md               # Antigravity skill specification
โ”œโ”€โ”€ sidecars/
โ”‚   โ””โ”€โ”€ dashboard/
โ”‚       โ”œโ”€โ”€ sidecar.json           # Aux pane sidecar configuration
โ”‚       โ””โ”€โ”€ launch.py              # Robust sidecar launcher
โ”œโ”€โ”€ ros2_mcp/
โ”‚   โ”œโ”€โ”€ server.py                  # Core MCP server & JSON-RPC stdio transport
โ”‚   โ”œโ”€โ”€ ros2_interface.py          # Dual runtime (ROS2NativeInterface & MockInterface)
โ”‚   โ”œโ”€โ”€ sandbox.py                 # 3-tier security sandbox & mutex audit log
โ”‚   โ”œโ”€โ”€ tools/                     # 16 modular tool implementations
โ”‚   โ””โ”€โ”€ dashboard/
โ”‚       โ”œโ”€โ”€ server.py              # Asynchronous HTTP/SSE/WebSocket streaming server
โ”‚       โ””โ”€โ”€ static/
โ”‚           โ”œโ”€โ”€ index.html         # 4-tab semantic HTML5 dashboard interface
โ”‚           โ”œโ”€โ”€ style.css          # Zero-G aerospace dark theme
โ”‚           โ””โ”€โ”€ app.js             # 360ยฐ LiDAR radar, tactile D-Pad, & telemetry
โ”œโ”€โ”€ ros2_packages/
โ”‚   โ”œโ”€โ”€ antigravity_core/          # C++ rclcpp_lifecycle::LifecycleNode package
โ”‚   โ””โ”€โ”€ antigravity_rviz_panel/    # Native C++/Qt rviz_common::Panel plugin
โ”œโ”€โ”€ sim/
โ”‚   โ”œโ”€โ”€ worlds/zero_g_orbit.sdf    # Gazebo Harmonic zero-gravity world
โ”‚   โ”œโ”€โ”€ models/                    # 6-DOF craft model with thrusters & LiDAR
โ”‚   โ””โ”€โ”€ launch/                    # ROS 2 Gazebo simulation launch pipeline
โ””โ”€โ”€ tests/                         # 152 passing automated tests

๐Ÿ“„ License & Attribution

This project is open-source software licensed under the Apache License 2.0.

Developed and maintained by Abdullah Bin Zafar.
Contributions, bug reports, and pull requests are welcome!

Available Tools

16 tools
get_node_infoA

Inspect a specific ROS2 node and find its related topics (exact name match).

NameRequiredDescriptionDefault
node_nameYesNode name, e.g. 'nav2_controller'

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. 'Inspect' implies a read-only operation, and 'exact name match' adds a useful behavioral constraint. However, it does not clarify what 'related topics' includes (e.g., published/subscribed) or what the return format is, leaving some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence without unnecessary words. It front-loads the action and resource, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter, no output schema, and no annotations. The description adequately explains the core behavior and result (finding related topics), though it could be more explicit about what 'related topics' means. Given the simplicity, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully covers the only parameter (node_name) with a description and example, so the description adds no additional semantic value. The baseline of 3 applies because schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool inspects a specific ROS2 node and finds its related topics, using a specific verb and resource. It distinguishes itself from siblings like list_nodes and list_topics by focusing on a single node's related topics, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'specific ROS2 node' implies the tool is for targeted inspection rather than listing all nodes or topics. This provides clear context for when to use it, but it does not explicitly state exclusions or alternatives, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_parameterA

Read a live parameter value from a running ROS2 node.

NameRequiredDescriptionDefault
node_nameYes
param_nameYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It communicates a non-destructive read operation and the prerequisite that the node must be running, but it does not disclose error handling, permissions, or potential side effects beyond the inherent read behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no wasted words. It is concise, front-loaded, and effectively communicates the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read operation with no output schema, the description adequately covers the essential context: what it does and the prerequisite that the node is running. It lacks details on return format or failure modes, but these are not critical for a basic read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. While it does not explicitly define node_name or param_name, the context 'from a running ROS2 node' and 'parameter value' provide implicit meaning. The parameter names are self-explanatory, but no additional format or constraint details are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a live parameter value from a ROS2 node, using the specific verb 'Read' and resource 'parameter value'. It distinguishes itself from sibling tools like set_parameter by focusing on reading rather than setting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('from a running ROS2 node') but does not explicitly state when to prefer this tool over alternatives or mention exclusions. The contrast with set_parameter is implicit, not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pid_stateC

Read current Kp, Ki, Kd gains from a PID controller node, with safety bounds.

NameRequiredDescriptionDefault
kd_paramNokd
ki_paramNoki
kp_paramNokp
node_nameYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'Read' which implies non-mutating, but it does not explain what 'with safety bounds' entails, what happens if the node or parameters are missing, or whether any state is changed. The ambiguity around 'safety bounds' leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. However, the phrase 'with safety bounds' is vague and may add confusion rather than clarity, preventing a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple but has four parameters and no output schema. The description does not mention return values, error behavior, or distinguish from similar tools like get_parameter. Given the complexity and lack of annotations/schema descriptions, it is far from complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage and the tool description does not clarify how the four parameters are used. It mentions Kp, Ki, Kd but does not map them to the kp_param, ki_param, kd_param fields nor explain what node_name is for. The description fails to compensate for the lack of schema explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Read') and the target resource ('Kp, Ki, Kd gains from a PID controller node'), making it easy to identify the tool's purpose. It distinguishes itself from generic tools like get_parameter by being specific to PID gains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention that get_parameter could be used for single gains or that tune_pid is for adjusting gains, so the agent has no context for choosing this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_robot_snapshotA

Fetch LiDAR, IMU, battery, cmd_vel, and odometry in one parallel call. Faster than calling read_topic five times sequentially.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It adds useful context by mentioning 'parallel call' and 'faster,' but it does not explicitly state side effects, error handling, or the read-only nature, leaving some ambiguity for a fetch operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loaded with the tool's core function and followed by a performance rationale. Every word contributes value, with no redundant or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter tool with no output schema, the description sufficiently states the input (none) and the output data types (LiDAR, IMU, battery, cmd_vel, odometry). It could elaborate on return format or failure behavior, but given the simplicity of the tool, the description is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema already fully documents the input (empty properties). The description does not need to add parameter meaning, and the baseline of 4 applies because there are no parameters to explain. The description correctly implies that no configuration is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches LiDAR, IMU, battery, cmd_vel, and odometry in one call, specifying a concrete verb and resource. It distinguishes itself from sibling tool read_topic by aggregating multiple topics, so an agent can easily identify its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear usage context by stating it is faster than calling read_topic five times sequentially, which implies when to prefer this tool over the alternative. It does not explicitly list exclusions or when not to use it, but the comparison to read_topic serves as a practical guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spatial_mapC

[WORLD-FIRST] Converts 360ยฐ LiDAR pointclouds into a 2D ASCII spatial radar grid directly inside MCP response JSON, allowing text & vision LLMs to 'see' surrounding space.

NameRequiredDescriptionDefault
grid_sizeNo
scan_topicNo/scan

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It mentions the conversion to an ASCII grid and that the output appears directly in the MCP response JSON, which is a useful behavior. Yet it does not disclose potential performance implications of processing LiDAR data, behavior on missing scan topics, latency, or any side effects. Given the tool's potentially heavy operation, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise, but it includes the marketing phrase '[WORLD-FIRST]' that adds no functional value and could distract from the core information. The sentence is packed with detail but lacks a clear structure that separates purpose from usage context. It earns a middle score because it is not overly verbose, yet it contains superfluous hype and could be better organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and two undocumented parameters, the description needs to provide substantial context. It explains the high-level purpose but does not cover parameter semantics, output format beyond 'ASCII grid', edge cases, or prerequisites (e.g., active LiDAR topic). The description leaves too many unknowns for an agent to confidently invoke the tool correctly in varied scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation of the two parameters (grid_size and scan_topic). An agent invoking the tool would have no hints about valid values, units, or how these parameters affect the output. The description does not compensate for the schema's lack of documentation, making parameter usage entirely opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: converting 360ยฐ LiDAR pointclouds into a 2D ASCII spatial radar grid. It uses specific verbs and resources ('converts', 'LiDAR pointclouds', 'ASCII spatial radar grid') and mentions the output location in the MCP response, which differentiates it from simply reading raw topics. However, it does not explicitly contrast with sibling tools like read_topic or get_robot_snapshot, so it misses full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for gaining spatial awareness in LLMs ('allowing text & vision LLMs to see surrounding space'), providing clear context for when it might be used. However, it offers no explicit guidance on when not to use it or what alternative tools exist (e.g., read_topic for raw pointcloud data). The use-case framing is useful but lacks explicit exclusions or comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_nodesA

List all currently running ROS2 nodes with their namespaces.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. However, it only restates the basic action of listing nodes and offers no additional context about side effects, read-only nature, connectivity requirements, or return format. The description adds minimal value beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, succinct sentence that is front-loaded with the main action and resource. It conveys the essential information without any filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with no parameters and no output schema, so the description is mostly adequate. It specifies that namespaces are included in the listing, which gives some idea of the return content. However, it could be slightly more explicit about the output structure (e.g., a list of node names with their namespaces), though this is not a critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty with no parameters, so there is no parameter information to explain. The baseline for zero parameters is 4, and the description correctly makes no parameter claims. No additional semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all currently running ROS2 nodes and includes namespaces. The verb 'list' is specific, the resource is identified, and it distinguishes from sibling tools like get_node_info and list_topics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. There is no mention of when not to use it or how it relates to get_node_info or list_topics. The description simply states what it does without contextual usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_topicsA

List all active ROS2 topics and their message types.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that only active topics are listed and that message types are included, which is transparent for a read-only listing. However, it does not explain what 'active' means in practice or any edge cases, leaving some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no wasted words. It front-loads the action and clearly conveys the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicityโ€”no params, no annotations, no output schemaโ€”the description is complete. It states exactly what the tool does and what information is returned (topics and message types), fully meeting the needs for this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing to explain. The description appropriately does not mention parameters, and the baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' with a clear resource 'ROS2 topics' and adds scope ('active') and output detail ('message types'). It distinguishes from siblings like 'list_nodes' (lists nodes) and 'read_topic' (reads topic data) by focusing on topic metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use for enumerating available topics with their types, but it does not explicitly state when to use it versus alternatives, nor does it mention exclusions or prerequisites. No explicit guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pingA

Test the connection to the ROS2 bridge. Returns status and active node count. Call this before any other tool to verify the server is reachable.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the behavior of testing connectivity and returning status and node count, which is appropriate for a ping tool. It does not detail possible failure modes or timeouts, but these are implicitly understood for a connectivity check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action verb 'Test,' and each sentence adds critical information: what it does and when to use it. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple ping tool with no parameters, the description is sufficient. It covers purpose, output, and usage context. It could elaborate on what 'status' includes or potential error responses, but that is not essential for an agent to correctly invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description correctly omits parameter details as there are none, and this does not need further explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Test the connection to the ROS2 bridge.' It also specifies the output ('Returns status and active node count') which distinguishes it from sibling tools like list_nodes or system_diagnostics that have different scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: 'Call this before any other tool to verify the server is reachable.' This tells the agent exactly when to use this tool and that it should be a prerequisite for other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predictive_safety_checkB

[WORLD-FIRST] Evaluates proposed parameter or velocity commands against dynamic stability bounds, auto-correcting unsafe LLM inputs and returning mathematical proof.

NameRequiredDescriptionDefault
targetYesNode or topic target
command_typeYese.g. 'tune_pid' or 'publish_cmd_vel'
proposed_valueYesProposed parameter value or velocity object

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden. It discloses that it evaluates, auto-corrects, and returns proof, but it does not clarify whether it mutates system state or only returns corrected values, what happens when the input is safe, or any side effects. 'Auto-correcting' is ambiguousโ€”whether it actually applies the correction or just suggests itโ€”which is a significant gap for a tool that might affect the robot.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core sentence is information-dense and to the point, covering evaluation, auto-correction, and proof output. However, the '[WORLD-FIRST]' prefix is noise and does not earn its place, and there is no structural breakdown (e.g., separate sections for behavior and parameters). It is concise but not perfectly clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with no output schema and no annotations. The description mentions returning mathematical proof but does not specify the return structure (e.g., fields like safe, corrected_value, proof), nor does it describe error cases, limits, or preconditions. Given the tool's potential to affect commands, the description is insufficient for an agent to use it correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some context by mentioning 'parameter or velocity commands' and 'auto-correcting', which aligns with the parameters, but it does not add substantial meaning beyond the schema. The parameter descriptions themselves are minimal and the tool provides no extra detail about required value formats or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('evaluates') and identifies the resource ('proposed parameter or velocity commands') and the criterion ('against dynamic stability bounds'). It also mentions auto-correction and returning proof, clearly distinguishing this from sibling tools like publish_topic or set_parameter, which execute commands directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage for safety-checking proposed commands ('proposed parameter or velocity commands', 'unsafe LLM inputs') but does not explicitly state when to use it instead of directly calling publish_topic or set_parameter, nor does it mention exclusions or alternatives. This leaves the agent to infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predict_trajectoryA

[WORLD-FIRST] Pre-simulate robot trajectory (x,y,theta) over time dt_sec in 1000Hz fast-forward simulation (<0.1ms compute) BEFORE sending commands to hardware.

NameRequiredDescriptionDefault
dt_secNoSimulation duration (seconds)
linear_xYesProposed linear velocity (m/s)
angular_zYesProposed angular velocity (rad/s)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the transparency burden. It does add useful behavioral context: it is a simulation, runs at 1000Hz, and computes in under 0.1ms. However, it does not disclose what the output looks like or whether any state changes occur, leaving some uncertainty for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence and front-loaded with the core purpose. It loses one point for the unnecessary '[WORLD-FIRST]' marketing phrase, which is extraneous for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should explain what the simulation returns. It does not, and it also omits any prerequisites or side effects. For a tool that is meant to pre-validate trajectory commands, this is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage of parameter descriptions (linear_x, angular_z, dt_sec). The description adds minimal extra meaning by mentioning 'over time dt_sec' and implying the velocities are inputs, but it does not enrich the semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Pre-simulate') and clearly identifies the resource (robot trajectory) with coordinates and time. It also distinguishes from siblings by emphasizing the simulation happens before sending commands to hardware, which is a unique purpose among the listed tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the tool is used 'BEFORE sending commands to hardware', which gives clear context for when to use it. However, it does not explicitly mention when not to use it or name alternative tools, so it stops short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_topicA

Publish a message to a ROS2 topic. Sandboxed: blocked in READ_ONLY mode; allowlisted in SAFE_WRITE mode.

NameRequiredDescriptionDefault
topicYesTopic name, e.g. '/cmd_vel'
payloadYesMessage fields as key-value pairs
msg_typeYesMessage type, e.g. 'geometry_msgs/Twist'

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the burden of behavioral disclosure. It mentions sandbox behavior, which is useful context. However, it does not elaborate on potential errors, side effects, or output behavior, leaving some gaps for a publish operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the purpose and immediately providing sandbox context. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the description covers its main function and sandbox constraints. No output schema is needed. Given the low complexity and rich schema/annotations, the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with all three parameters described. The description adds no extra meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Publish a message to a ROS2 topic.' It uses a specific verb and resource, and distinguishes itself from sibling tools like read_topic and list_topics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context by explaining sandbox mode restrictions (blocked in READ_ONLY, allowlisted in SAFE_WRITE), which implicitly tells the agent when it can be used. However, it does not explicitly name alternatives or mention when to prefer other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_topicA

Read the latest message from a ROS2 topic. Returns the serialized message and data age in milliseconds. For latched topics (/map, /robot_description), set latched=true.

NameRequiredDescriptionDefault
topicYesTopic name, e.g. '/scan'
latchedNoSet true for topics published once on connect (/map, /robot_description)
msg_typeNoROS2 message type, e.g. 'sensor_msgs/LaserScan'std_msgs/String
timeout_msNoMax wait time in milliseconds

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses return payload (serialized message, data age) and latched behavior. However, no annotations are present, and it fails to mention timeout/failure behavior or what happens if no message is available. Moderate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the core purpose and include a practical usage tip. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple read tool with good schema coverage. However, no output schema exists, so the description should more precisely define the return structure beyond 'serialized message'. Also omits error and timeout behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description adds a note about latched topics, but this is already in the schema. No significant additional parameter meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'read' and resource 'ROS2 topic', and specifies it retrieves the latest message. Distinguishes itself from sibling tools like list_topics and publish_topic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit conditional guidance for latched topics ('set latched=true'). Does not discuss when to use this tool instead of alternatives, but the context is clear for this read operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_parameterA

Dynamically update a parameter on a running ROS2 node. Sandboxed โ€” only allowlisted parameters can be modified in SAFE_WRITE mode.

NameRequiredDescriptionDefault
valueYesNew value โ€” float, int, string, or bool
node_nameYes
param_nameYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It explicitly discloses that the tool is a mutation ('update') and introduces the sandbox/allowlist restriction, which is important safety context. It does not detail error handling or reversibility, but the core behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action, and every word adds value. The safety constraint is included without unnecessary padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description captures the core purpose and safety restriction, but with no output schema and no parameter details, the agent lacks information about return values, error conditions, or how to discover allowlisted parameters. It is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, and the description adds no parameter-level details. The value field is documented in the schema, but node_name and param_name are left without explanations. The description does not compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('update') and resource ('parameter on a running ROS2 node'). It distinguishes from sibling tools like get_parameter (read) and tune_pid (specialized tuning).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear contextual constraints: the tool operates on running ROS2 nodes and only allowlisted parameters in SAFE_WRITE mode. However, it does not explicitly mention alternatives or exclusions (e.g., when to prefer tune_pid or get_parameter).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swarm_fleet_statusA

[WORLD-FIRST] Scans multi-namespace ROS2 graph (/drone_1, /rover_2, /arm_3) and aggregates multi-robot fleet health in one call.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose safety and behavioral traits. It indicates a read-style scanning operation, but does not mention return format, potential side effects (though likely none), cost/performance, or failure modes. The 'WORLD-FIRST' hype and vague 'health' terminology add little. This is insufficient for a tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action. It is concise, but the leading '[WORLD-FIRST]' is unnecessary hype that wastes space. Otherwise well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without annotations or an output schema, the description needs to explain what 'fleet health' means and what the aggregate result looks like. It does not. The tool seems simple in parameters, but the output semantics are undefined, making the description incomplete for an agent to fully predict the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema (empty) already fully covers parameter semantics. The description adds no parameter info, but none is needed. Baseline 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Scans multi-namespace ROS2 graph' and aggregates 'multi-robot fleet health in one call.' This distinguishes it from sibling tools that operate on individual nodes, topics, or parameters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in one call' implies convenience over calling per-robot tools, and the multi-namespace scope suggests when to use it. However, there is no explicit guidance on when not to use it or how it compares to calling get_robot_snapshot individually. Usage context is implied but not fully articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_diagnosticsA

Run a full robot health check. Returns battery level, LiDAR status, IMU health, active node count, and lists of critical issues and warnings. ALWAYS call this first when the user asks 'what's wrong?' or 'is the robot ready?'

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the exact return data (battery, LiDAR, IMU, node count, issues/warnings) and implies a read-only check. Minor gap: it does not explicitly state whether running the check has side effects or takes time.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with purpose and output list, and the second sentence gives decisive usage guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description fully covers what the tool does, what it returns, and when to invoke it. It is complete in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description needs to add no parameter context. The rubric sets a baseline of 4 for zero-param tools, and there is no missing parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Run' and a clear resource 'full robot health check', enumerating concrete outputs (battery level, LiDAR status, IMU health, active node count, critical issues/warnings). The trigger phrase 'what's wrong?' or 'is the robot ready?' differentiates it from more granular sibling tools like list_nodes or get_pid_state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance: 'ALWAYS call this first when the user asks...' This gives clear context. However, it does not mention when not to use it or name alternative tools, so a full 5 is not warranted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tune_pidA

Apply new PID gains to a controller node with safety bounds validation. Gains are validated BEFORE reaching hardware โ€” negative gains are rejected. Returns tuning guidance based on control theory.

NameRequiredDescriptionDefault
kdNoNew derivative gain (must be >= 0)
kiNoNew integral gain (must be >= 0)
kpNoNew proportional gain (must be >= 0)
kd_paramNokd
ki_paramNoki
kp_paramNokp
node_nameYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behaviors: gains are validated before reaching hardware, negative gains are rejected, and tuning guidance is returned. With no annotations, this significantly helps the agent understand safety and side effects. However, it does not mention whether changes are persistent or could disrupt the running controller, leaving some transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the primary purpose, and contains zero redundant phrases. Every sentence contributes necessary behavioral or output information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, no output schema, and no annotations, the description provides a clear core behavior but leaves meaningful gaps: it does not explain the *_param parameters, any prerequisites like node type, or the structure of the tuning guidance. This makes it adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 43%, with only the gain parameters described as 'must be >= 0'. The description reinforces this by stating negative gains are rejected, adding value for those params. However, the *_param parameters are completely unexplained, and node_name lacks description. The description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Apply') and identifies the resource ('new PID gains to a controller node'). It clearly distinguishes this tool from siblings by mentioning safety validation and tuning guidance, which set_parameter and get_pid_state do not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use for PID tuning but does not explicitly state when to prefer it over alternatives like set_parameter or get_pid_state. It also omits any preconditions, such as the node being a controller node or the need to stop the controller, so guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv1.2.0
    • First observedget_node_info
    • First observedget_parameter
    • First observedget_pid_state
    • First observedget_robot_snapshot
    • First observedget_spatial_map
    • First observedlist_nodes
    • First observedlist_topics
    • First observedping
    • First observedpredict_trajectory
    • First observedpredictive_safety_check
    • First observedpublish_topic
    • First observedread_topic
    • First observedset_parameter
    • First observedswarm_fleet_status
    • First observedsystem_diagnostics
    • First observedtune_pid

TDQS

A3.6/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have clearly distinct purposes by resource and action, such as ping vs system_diagnostics and list_topics vs list_nodes. There is minor adjacency between read_topic and get_robot_snapshot, and between predict_trajectory and predictive_safety_check, but descriptions make the boundaries usable.

Naming Consistency4/5

All tool names use snake_case, and most follow a verb_noun pattern such as list_topics, get_parameter, and tune_pid. A few names are noun/status-oriented (ping, system_diagnostics, swarm_fleet_status), but the overall naming is predictable.

Tool Count4/5

Sixteen tools is slightly above the typical ideal range, but the ROS2 robotics scope is broad and each tool maps to a meaningful capability such as diagnostics, topic access, parameters, PID tuning, prediction, and fleet status. The set is reasonable rather than bloated.

Completeness4/5

The surface covers core ROS2 graph operations, robot health, topic read/write, node inspection, parameters, PID tuning, safety checks, and spatial mapping. Notable gaps remain around ROS2 services/actions and node lifecycle management, but core diagnostic and control workflows are well represented.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI tools to interact with ROS2 robotics systems through natural language commands. Supports topic publishing/subscribing, service calls, message analysis, and auto-discovery of ROS2 interfaces for debugging and controlling robots.
    Mozilla Public 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables controlling robots in ROS environments through natural language, supporting topics, services, actions, and GUI tools.
    24
    36
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Connects AI agents to ROS 2 robots via rosbridge, enabling observation, inspection, and control of robot topics, services, and actions through natural language.
    11
    2
    MIT