Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
preflightA

Inspect environment prerequisite states without mutating system state.

launchA

Launch a ROS launch file — local roslaunch in sim mode, SSH to vehicle NUC on real targets. package: ROS package name (REQUIRED, e.g. 'rm_config') launch_file: Launch filename (REQUIRED, e.g. 'load_controllers.launch') args: Optional arguments as list ['robot_type:=standard6'] or dict {'robot_type': 'standard6'}.

list_launchesA

List running roslaunch/mon launch processes.

kill_launchB

Terminate a running launch process by handle.

ensure_infrastructureB

Ensure essential infrastructure services (rosapi, rosbridge) are running on the target.

set_paramC

Set a ROS parameter with pre-read dry-run state capture and post-write verification. param_name: full parameter path, e.g. '/rm_config/rate' ('name' is accepted as an alias).

inject_signalA

Inject a step or sinusoidal excitation signal into a command topic.

Choosing the right injection point: inject at controller INPUT (e.g. /controllers/gimbal_controller/command, rm_msgs/GimbalCmd: extra_fields={"mode": 3}, (GimbalCmd mode constants: 0: RATE, 1: TRACK, 2: DIRECT, 3: TRAJ). field="traj_yaw"/"traj_pitch") — NOT */controllers//command (std_msgs/Float64), which is PID-computed OUTPUT. Quiet state restoration (0.0 signal) occurs automatically upon completion (1-loop RealtimeBuffer update delay).

Timestamps: after extra_fields are applied, a zero/absent top-level stamp or header.stamp is filled with rospy.Time.now() on every published message (quiet-state restoration included); an explicit nonzero stamp is preserved — eliminating 0-timestamp artifacts in rosbag-based analysis.

get_paramA

Read a ROS parameter (L0 read-only). param_name: full parameter path, e.g. '/controllers/gimbal_controller/pid_pos/p' ('name' is accepted as an alias).

set_dynamic_paramA

Hot-update a running node's runtime parameters via dynamic_reconfigure. node: Target ROS node name (REQUIRED, e.g. '/controllers/gimbal_controller'). Accepted aliases: node_name, param_name. params: Dictionary of parameter values to write (e.g. {'p': 10}). Keys like 'yaw/pid/p' map to 'p'. dry_run: If True, inspect available keys and schema without mutating parameters.

list_controllersA

List ros_control controllers and their states (L0 read-only).

switch_controllerB

Start/stop ros_control controllers (red-tier on real targets).

configure_targetB

Set target mode and endpoints. Sim requires an explicit robot_type; real reads it from the vehicle.

record_bagA

Record a rosbag for specified topics over a set duration. Set background=True for async recording.

trigger_on_topic appends the named topic to the recorded topic list. rosbag record --duration starts its countdown only after the first message arrives on any recorded topic. Synchronous recording has a hard timeout of duration_sec + 15s; a silent background recording remains active until stop_record_bag(handle). Use background=True and choose duration_sec long enough to cover inject latency + signal duration + margin.

Inject-then-record sequence: record_bag(background=True, trigger_on_topic=) -> confirm the returned handle -> inject_signal(...) -> stop_record_bag(handle). A synchronous record on a silent command topic (no publisher before injection) hangs because the synchronous call would block injection.

stop_record_bagA

Stop a running background rosbag recording handle and retrieve metadata.

Metadata is read with allow_unindexed=True; the bag-internal start/end timestamps — not wall-clock diffs — are the authoritative duration_sec under use_sim_time (the sim clock can pause or drift).

get_joint_limitsA

Query URDF physical and soft joint limits (lower/upper rad, effort, velocity).

recover_gazebo_jointsA

Safely recover simulation gimbal joints through Gazebo services.

Simulation only. Resolves the live model first, requires its identity to match the robot-description/limit source, rejects positions outside those known soft limits, stops gimbal_controller, calls set_model_configuration, and verifies each joint through get_joint_properties. timeout_sec bounds service waits and invocations. Timed-out writes are explicitly ambiguous and may have occurred; no CLI fallback or automatic retry is attempted.

capture_topic_syncA

PREFERRED & FASTEST data source for closed-loop PID tuning in simulation and wired setups (<10ms latency).

Captures high-frequency topic data in memory without disk I/O. Pass output directly to diagnose_gimbal_tuning(topic_data=...) or analyze_gimbal_pid(topic_data=...) for rapid tuning loops!

capture_inject_syncA

Capture a topic in memory while injecting an excitation signal — one call, zero disk I/O.

Preferred closed-loop tuning path in simulation (target_mode="sim") or high-bandwidth wired setups: combines capture_topic_sync-style in-memory sampling with inject_signal-style safe publishing, server-side.

Parameters:

  • capture_topic: Feedback ROS topic to sample (e.g. "/controllers/gimbal_controller/pos_state").

  • inject_topic: Command topic to publish to — inject at the controller INPUT (e.g. "/controllers/gimbal_controller/command"), NOT the PID output stage.

  • field: Message field to drive (e.g. "traj_yaw").

  • waveform / amplitude / frequency / duration_sec / publish_rate_hz / extra_fields / force / confirm_token: forwarded verbatim to inject_signal — all safety gates (red-tier confirm_token handshake, exclusive publisher arbitration, quiet-state restoration) are owned by inject_signal and NOT pre-consumed here.

  • dry_run: if True, skip the capture subscriber and perform only the inject_signal schema/no-publish check. Safe for e2e schema validation without a live ROS master; all confirmation semantics remain delegated to inject_signal.

  • quiet_window_sec: extra capture time AFTER the injection ends so the quiet-state restoration is fully sampled.

  • fields: capture field paths; omit for auto-discovery (GimbalPosState / PidState).

  • max_messages: capture sample cap.

analyze_step_responseC

Analyze step or tracking performance from rosbag signals.

analyze_gimbal_pidA

Domain-specific analysis tool for RoboMaster Gimbal PID tracking error (0.006 rad threshold).

PREFER passing in-memory topic_data directly from capture_topic_sync for fast tuning loops without disk I/O. Accepts bag_path for offline analysis.

diagnose_gimbal_tuningA

Detailed domain-specific diagnosis tool for RoboMaster Gimbal PID step response, velocity oscillation, windup, and saturation.

PREFER passing in-memory topic_data directly from capture_topic_sync for fast tuning loops without disk I/O. Accepts bag_path for offline analysis.

False-deadlock detection: when feedback already starts at the final setpoint (step test was not reset), returns step_info.initial_position_at_final_value=True, warnings code "initial_position_at_final_value", and prepends reset guidance (send traj_=0 first, then re-run the step test).

get_topic_infoA

Inspect ROS topic details (msg_type, publishers, subscribers) via pure Rosbridge WebSocket API.

get_node_infoA

Inspect ROS node details (publications, subscriptions, services) via pure Rosbridge WebSocket API.

list_topicsA

List active ROS topics and their message types via pure Rosbridge WebSocket API.

list_nodesA

List active ROS nodes via pure Rosbridge WebSocket API.

echo_topicC

Sample ROS topic messages with safety throttling via pure Rosbridge WebSocket API.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nescript/rm_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server