Skip to main content
Glama
bvandevliet

Betaflight MCP

by bvandevliet

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_serial_portsA

List all available serial ports on this system. Use this to find the port your flight controller is connected to.

connect_flight_controllerA

Connect to a Betaflight flight controller over USB/serial. Use list_serial_ports first to find the correct port.

reconnect_flight_controllerA

Reconnect to the last connected flight controller using the same port and baud rate. Useful after a reboot (e.g. following cli_save or reboot_flight_controller). Will disconnect any existing session first.

disconnect_flight_controllerA

Disconnect from the currently connected flight controller.

get_statusA

Get flight controller status: cycle time, I2C errors, active sensors, mode flags, and active profile.

get_raw_imuA

Get raw IMU sensor data: accelerometer (G), gyroscope (°/s), and magnetometer values.

get_attitudeA

Get current attitude: roll (°), pitch (°), and yaw (°) from the flight controller.

get_altitudeA

Get current altitude (meters) and variometer (cm/s) from the barometer.

get_batteryA

Get battery analog data: voltage (V), mAh drawn, RSSI, and current (A).

get_battery_stateB

Get detailed battery state: cell count, capacity, voltage, current draw, and state code.

get_rc_channelsA

Get current RC channel values (microseconds). Returns all active channels.

get_motor_valuesB

Get current motor output values (microseconds). Returns all active motor outputs.

get_gps_dataB

Get GPS data: fix status, satellite count, latitude/longitude (°), altitude (m), and ground speed (cm/s).

feature_listA

List all features and their enabled/disabled state on the flight controller.

feature_enableB

Enable a named feature on the flight controller (e.g. TELEMETRY, GPS, SOFTSERIAL).

feature_disableB

Disable a named feature on the flight controller.

get_serial_configC

Get serial port configuration from the flight controller.

get_aux_configB

Get auxiliary channel (AUX) mode configuration.

get_channel_mapA

Get the current RC channel map (order of AETR channels).

set_channel_mapA

Set the RC channel map order (e.g. AETR1234).

get_mixerB

Get the current mixer type configuration.

get_tasksA

Get the list of scheduler tasks and their timing statistics.

get_versionA

Get the Betaflight firmware version and build information.

motor_getB

Get the current output value for a specific motor index.

motor_setA

Set the output value for a specific motor (use with caution — props off!). Value 0 = off, 1000–2000 = throttle range.

cli_execA

Execute an arbitrary CLI command on the flight controller and return the output. NOTE: for "set simplified_*" commands, prefer the set_pid_sliders tool — it recalculates the underlying PID/filter gains via MSP. If used here anyway, this tool automatically runs "simplified_tuning apply" afterward to keep the actual gains in sync with the slider value.

cli_dumpA

Dump the complete flight controller configuration as CLI commands. This may take several seconds.

cli_diffA

Show only the settings that differ from the defaults (diff all). More concise than a full dump.

cli_statusA

Get flight controller status text output from the CLI status command.

cli_helpB

List all available CLI commands on the flight controller.

cli_saveA

Save current configuration to EEPROM and reboot the flight controller. WARNING: This will close the connection as the FC reboots. Reconnect after save.

cli_defaultsA

Reset flight controller configuration to factory defaults and reboot. WARNING: This will erase all settings and close the connection. Use cli_save after reconnecting to preserve the reset.

reboot_flight_controllerA

Reboot the flight controller. The connection will be closed as the FC restarts. Use reconnect_flight_controller (or connect_flight_controller) afterwards.

calibrate_accelerometerA

Calibrate the accelerometer. Place the flight controller level and stationary before calling this. Note: call this before any CLI tools in the same session (MSP cannot be used after CLI mode is entered).

calibrate_magnetometerA

Calibrate the magnetometer (compass). Rotate the flight controller through all orientations when prompted. Note: call this before any CLI tools in the same session (MSP cannot be used after CLI mode is entered).

get_dataflash_summaryA

Get onboard blackbox flash storage summary: ready state, total size, and used size. Note: call this before any CLI tools in the same session.

erase_blackbox_logsA

Erase all blackbox logs stored in onboard flash memory. This is irreversible and can take up to 30 seconds. Note: call this before any CLI tools in the same session.

get_arming_disable_flagsA

Get the flags explaining why the flight controller is refusing to arm. Returns a list of active arming-disable conditions. An empty list means the FC is ready to arm. Note: call this before any CLI tools in the same session.

get_current_profileA

Get the currently active PID profile index and rate profile index.

set_pid_profileB

Switch the active PID profile (0-indexed). Call cli_save afterwards to persist the change.

set_rate_profileA

Switch the active rate profile (0-indexed). Call cli_save afterwards to persist the change.

copy_pid_profileA

Copy a PID profile to another slot. Switches to the source profile then copies it to the destination. Call cli_save afterwards to persist.

preflight_checkA

Run a comprehensive preflight safety check: arming readiness, battery voltage, GPS lock status, and CPU load. Note: call this before any CLI tools in the same session (uses MSP).

get_pid_slidersA

Get the current Betaflight simplified filter and tuning slider values. Returns float positions (1.0 = default/100%) matching the slider controls in Betaflight Configurator. pids_mode 0 = disabled, 1 = roll+pitch, 2 = roll+pitch+yaw.

set_pid_slidersA

Set Betaflight simplified filter and tuning slider values. Provide only the sliders you want to change; all others keep their current values. The FC recalculates actual PID gains immediately via MSP (equivalent to moving sliders in Configurator). Call cli_save afterwards to persist to EEPROM. If pids_mode is currently 0 (disabled), it is automatically enabled (set to 1) unless you specify otherwise.

get_gyro_hardware_lpfB

Get gyro_hardware_lpf: Hardware low-pass filter mode built into the gyro chip. NORMAL is correct for almost all builds. OPTION_1/2/EXPERIMENTAL select alternative hardware bandwidth settings where supported by the sensor. [UINT8, default: NORMAL]

set_gyro_hardware_lpfA

Set gyro_hardware_lpf: Hardware low-pass filter mode built into the gyro chip. NORMAL is correct for almost all builds. OPTION_1/2/EXPERIMENTAL select alternative hardware bandwidth settings where supported by the sensor. [UINT8, default: NORMAL]

get_gyro_lpf1_typeB

Get gyro_lpf1_type: Filter type for gyro LPF1. PT1 = first-order, least delay. [UINT8, default: PT1]

set_gyro_lpf1_typeA

Set gyro_lpf1_type: Filter type for gyro LPF1. PT1 = first-order, least delay. [UINT8, default: PT1]

get_gyro_lpf1_static_hzA

Get gyro_lpf1_static_hz: Static cutoff for LPF1. Set to 0 to disable (recommended with RPM filtering). [UINT16, default: 250]

set_gyro_lpf1_static_hzA

Set gyro_lpf1_static_hz: Static cutoff for LPF1. Set to 0 to disable (recommended with RPM filtering). [UINT16, default: 250]

get_gyro_lpf2_typeB

Get gyro_lpf2_type: Filter type for gyro LPF2 (anti-aliasing). [UINT8, default: PT1]

set_gyro_lpf2_typeB

Set gyro_lpf2_type: Filter type for gyro LPF2 (anti-aliasing). [UINT8, default: PT1]

get_gyro_lpf2_static_hzA

Get gyro_lpf2_static_hz: LPF2 cutoff. Raise toward 1000 Hz to reduce phase delay. Set to 0 if gyro rate = PID rate (aliasing not possible). [UINT16, default: 500]

set_gyro_lpf2_static_hzA

Set gyro_lpf2_static_hz: LPF2 cutoff. Raise toward 1000 Hz to reduce phase delay. Set to 0 if gyro rate = PID rate (aliasing not possible). [UINT16, default: 500]

get_gyro_notch1_hzA

Get gyro_notch1_hz: Centre frequency of static gyro notch 1. 0 = disabled. Use for specific persistent resonances not handled by dynamic notch. [UINT16, default: 0]

set_gyro_notch1_hzA

Set gyro_notch1_hz: Centre frequency of static gyro notch 1. 0 = disabled. Use for specific persistent resonances not handled by dynamic notch. [UINT16, default: 0]

get_gyro_notch1_cutoffA

Get gyro_notch1_cutoff: Bandwidth of gyro notch 1. Must be less than gyro_notch1_hz. [UINT16, default: 0]

set_gyro_notch1_cutoffA

Set gyro_notch1_cutoff: Bandwidth of gyro notch 1. Must be less than gyro_notch1_hz. [UINT16, default: 0]

get_gyro_notch2_hzA

Get gyro_notch2_hz: Centre frequency of static gyro notch 2. 0 = disabled. [UINT16, default: 0]

set_gyro_notch2_hzA

Set gyro_notch2_hz: Centre frequency of static gyro notch 2. 0 = disabled. [UINT16, default: 0]

get_gyro_notch2_cutoffA

Get gyro_notch2_cutoff: Bandwidth of gyro notch 2. [UINT16, default: 0]

set_gyro_notch2_cutoffB

Set gyro_notch2_cutoff: Bandwidth of gyro notch 2. [UINT16, default: 0]

get_gyro_calib_durationA

Get gyro_calib_duration: Gyro calibration duration in 0.1s steps (125 = 12.5s). Longer = more accurate offset measurement. [UINT16, 50–3000, default: 125]

set_gyro_calib_durationA

Set gyro_calib_duration: Gyro calibration duration in 0.1s steps (125 = 12.5s). Longer = more accurate offset measurement. [UINT16, 50–3000, default: 125]

get_gyro_calib_noise_limitA

Get gyro_calib_noise_limit: Noise threshold during calibration. If movement exceeds this, calibration restarts. Increase if it won't calibrate in a noisy environment. [UINT8, 0–200, default: 48]

set_gyro_calib_noise_limitA

Set gyro_calib_noise_limit: Noise threshold during calibration. If movement exceeds this, calibration restarts. Increase if it won't calibrate in a noisy environment. [UINT8, 0–200, default: 48]

get_gyro_offset_yawA

Get gyro_offset_yaw: Manual yaw gyro trim (tenths of degrees/s). Use to correct persistent yaw drift if trim sticks or acc trim are not sufficient. [INT16, -1000–1000, default: 0]

set_gyro_offset_yawA

Set gyro_offset_yaw: Manual yaw gyro trim (tenths of degrees/s). Use to correct persistent yaw drift if trim sticks or acc trim are not sufficient. [INT16, -1000–1000, default: 0]

get_gyro_overflow_detectC

Get gyro_overflow_detect: Detects gyro ADC saturation (sensor hitting its limit) and disarms. Recommended: ALL. [UINT8, default: ALL]

set_gyro_overflow_detectA

Set gyro_overflow_detect: Detects gyro ADC saturation (sensor hitting its limit) and disarms. Recommended: ALL. [UINT8, default: ALL]

get_dyn_notch_countA

Get dyn_notch_count: Number of independently tracked dynamic notches. Set to 0 to disable if no frame resonances are visible in the spectrum (eliminates delay). With RPM filtering active, 1–2 notches are sufficient for most frame resonances. Without RPM filtering, use 4–5. [UINT8, default: 3]

set_dyn_notch_countA

Set dyn_notch_count: Number of independently tracked dynamic notches. Set to 0 to disable if no frame resonances are visible in the spectrum (eliminates delay). With RPM filtering active, 1–2 notches are sufficient for most frame resonances. Without RPM filtering, use 4–5. [UINT8, default: 3]

get_dyn_notch_qA

Get dyn_notch_q: Q factor — narrowness of each notch. Increase until the resonance just stays within the notch, then stop. Max useful value ~1000. [UINT16, 1–1000, default: 300]

set_dyn_notch_qA

Set dyn_notch_q: Q factor — narrowness of each notch. Increase until the resonance just stays within the notch, then stop. Max useful value ~1000. [UINT16, 1–1000, default: 300]

get_dyn_notch_min_hzA

Get dyn_notch_min_hz: Minimum frequency any notch will track. Set ~25 Hz below the lowest resonance you need to catch. ideally >=150 Hz unless blackbox shows a real resonance below that — tracking low frequencies causes unwanted filtering of PID-relevant signals. [UINT16, 20–250, default: 100]

set_dyn_notch_min_hzA

Set dyn_notch_min_hz: Minimum frequency any notch will track. Set ~25 Hz below the lowest resonance you need to catch. ideally >=150 Hz unless blackbox shows a real resonance below that — tracking low frequencies causes unwanted filtering of PID-relevant signals. [UINT16, 20–250, default: 100]

get_dyn_notch_max_hzA

Get dyn_notch_max_hz: Maximum frequency any notch will track. Default 600 is fine for most builds. Narrowing the range improves notch resolution. [UINT16, 200–1000, default: 600]

set_dyn_notch_max_hzA

Set dyn_notch_max_hz: Maximum frequency any notch will track. Default 600 is fine for most builds. Narrowing the range improves notch resolution. [UINT16, 200–1000, default: 600]

get_gyro_lpf1_dyn_min_hzA

Get gyro_lpf1_dyn_min_hz: Dynamic LPF1 minimum cutoff (at low throttle). Set equal to gyro_lpf1_static_hz to use static mode. [UINT16, default: 250]

set_gyro_lpf1_dyn_min_hzA

Set gyro_lpf1_dyn_min_hz: Dynamic LPF1 minimum cutoff (at low throttle). Set equal to gyro_lpf1_static_hz to use static mode. [UINT16, default: 250]

get_gyro_lpf1_dyn_max_hzA

Get gyro_lpf1_dyn_max_hz: Dynamic LPF1 maximum cutoff (at full throttle). [UINT16, default: 500]

set_gyro_lpf1_dyn_max_hzB

Set gyro_lpf1_dyn_max_hz: Dynamic LPF1 maximum cutoff (at full throttle). [UINT16, default: 500]

get_gyro_lpf1_dyn_expoA

Get gyro_lpf1_dyn_expo: Expo curve shaping for dynamic LPF1 cutoff vs throttle. Higher = faster rise. [UINT8, 0–10, default: 5]

set_gyro_lpf1_dyn_expoA

Set gyro_lpf1_dyn_expo: Expo curve shaping for dynamic LPF1 cutoff vs throttle. Higher = faster rise. [UINT8, 0–10, default: 5]

get_gyro_filter_debug_axisB

Get gyro_filter_debug_axis: Which axis is exposed in debug fields for gyro filter analysis. [UINT8, default: ROLL]

set_gyro_filter_debug_axisB

Set gyro_filter_debug_axis: Which axis is exposed in debug fields for gyro filter analysis. [UINT8, default: ROLL]

get_acc_hardwareB

Get acc_hardware: Force accelerometer driver or AUTO-detect. [UINT8, default: AUTO]

set_acc_hardwareB

Set acc_hardware: Force accelerometer driver or AUTO-detect. [UINT8, default: AUTO]

get_acc_high_rangeA

Get acc_high_range: Enable high-range accelerometer mode for sensors that support it. [UINT8, default: OFF]

set_acc_high_rangeB

Set acc_high_range: Enable high-range accelerometer mode for sensors that support it. [UINT8, default: OFF]

get_acc_lpf_hzA

Get acc_lpf_hz: Accelerometer low-pass filter cutoff. Smooths acc readings used for attitude estimation. [UINT16, 0–500, default: 25]

set_acc_lpf_hzA

Set acc_lpf_hz: Accelerometer low-pass filter cutoff. Smooths acc readings used for attitude estimation. [UINT16, 0–500, default: 25]

get_acc_trim_pitchA

Get acc_trim_pitch: Accelerometer pitch trim for level calibration. [INT16, -300–300, default: 0]

set_acc_trim_pitchA

Set acc_trim_pitch: Accelerometer pitch trim for level calibration. [INT16, -300–300, default: 0]

get_acc_trim_rollA

Get acc_trim_roll: Accelerometer roll trim for level calibration. [INT16, -300–300, default: 0]

set_acc_trim_rollB

Set acc_trim_roll: Accelerometer roll trim for level calibration. [INT16, -300–300, default: 0]

get_acc_calibrationA

Get acc_calibration: Raw accelerometer calibration offsets written by the calibration routine. Do not edit manually. [INT16, default: 0,0,0,0]

set_acc_calibrationA

Set acc_calibration: Raw accelerometer calibration offsets written by the calibration routine. Do not edit manually. [INT16, default: 0,0,0,0]

get_align_magA

Get align_mag: Magnetometer orientation. (Requires: USE_MAG) [UINT8, default: DEFAULT]

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/bvandevliet/betaflight-mcp'

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