Skip to main content
Glama
AlanOgic

Betaflight MCP Server

by AlanOgic

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BETAFLIGHT_BAUDNoBaud rate (must match Betaflight config).115200
BETAFLIGHT_PORTNoSerial port of the FC. Default is /dev/ttyUSB0 on Linux or COM3 on Windows./dev/ttyUSB0
BETAFLIGHT_TIMEOUTNoSerial read timeout in seconds.2.0

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
list_serial_portsB

Liste les ports série ; is_betaflight signale les FC Betaflight détectés (USB)

connectA

Connecte le serveur au FC via port série (ferme la connexion précédente). Vérifie l'identité : réponse MSP, firmware Betaflight (BTFL), API >= 1.40 ; sinon échec et port refermé. Retourne api_version, fc_variant, fc_version.

disconnectA

Ferme la connexion série vers le FC (après la requête MSP en cours)

get_board_infoA

Retourne l'identité du FC : variante firmware (BTFL), version, carte, MCU, version API

get_fc_statusA

État général du FC : cycle time, capteurs actifs, flags arming, charge CPU

get_imu_dataB

Données IMU : accéléromètre (g), gyroscope (°/s), magnétomètre

get_attitudeA

Attitude du drone : roulis, tangage, cap en degrés

get_altitudeA

Altitude (m) et variomètre (cm/s) depuis le baromètre

get_batteryC

Tension batterie (V), courant (A), mAh consommés, RSSI

get_battery_stateA

État détaillé de la batterie : cellules, capacité, état (OK/WARNING/CRITICAL)

get_voltage_metersB

Liste tous les voltmètres disponibles sur le FC

get_current_metersB

Liste tous les ampèremètres disponibles sur le FC

get_rcA

Valeurs actuelles des canaux RC (µs, typiquement 1000-2000)

snapshot_rc_deltaA

Compare un snapshot RC courant à une baseline. Retourne les canaux dont le delta dépasse le seuil (défaut 200 µs). Utiliser pour détecter quel canal bouge quand l'utilisateur déplace un stick ou active un interrupteur.

get_motorsB

Sorties moteurs actuelles (µs). 0 = moteur inactif

get_pid_valuesB

Valeurs PID (P/I/D) pour chaque axe : roll, pitch, yaw, level, mag

set_pid_valuesA

Modifie les valeurs PID pour un axe (roll, pitch, yaw, level, mag). Les autres axes sont conservés. Appeler save_config ensuite.

get_ratesA

Rates RC par axe (roll, pitch, yaw) dans les unités du configurateur pour le rates_type actif (BETAFLIGHT, RACEFLIGHT, KISS, ACTUAL, QUICK) : rc_rate, rate, expo, libellés (labels), rate_limit_dps et max_rate_dps (vitesse à plein manche). Throttle mid/expo/limit/hover.

set_ratesA

Modifie les rates par axe. Seuls les paramètres fournis changent. Les valeurs sont dans les unités du rates_type ACTUEL du FC (appeler get_rates d'abord : ex. ACTUAL → rc_rate = Center Sensitivity en °/s, rate = Max Rate en °/s, expo 0-1 ; BETAFLIGHT → rc_rate 0-2.55, rate = super rate 0-1, expo 0-1). Retourne les valeurs relues et max_rate_dps. Appeler save_config ensuite.

measure_rc_noiseA

Poll les canaux RC pendant N secondes (~50 Hz) et retourne le bruit mesuré (95e percentile de déviation) ainsi qu'une valeur de deadband suggérée par canal. À utiliser sticks au repos.

detect_rc_mappingA

Mode passif : échantillonne tous les canaux RC pendant N secondes (~50 Hz) et classifie chacun — throttle (repos ~1000 µs), stick (centré ~1500 µs, grand débattement), switch_2pos, switch_3pos, unused. Identifie la convention TAER (throttle=ch0) ou AETR (throttle=ch2). roll/pitch/yaw restent ambigus : combiner avec detect_rc_channel_move. Demander à l'utilisateur de bouger tous les sticks et switches pendant la mesure.

detect_rc_channel_moveA

Mode guidé (une étape) : poll les canaux RC pendant duration_s secondes et retourne le canal dont le pic de delta depuis la baseline est le plus grand. Protocole : (1) get_rc pour obtenir la baseline au repos, (2) demander à l'utilisateur de bouger UN SEUL contrôle, (3) appeler cet outil — répéter pour chaque axe (roll, pitch, yaw, throttle). Plus fiable qu'un snapshot instantané car capture le pic sur toute la fenêtre.

get_modesB

Plages de modes RC actifs (AUX switches) : box_id, canal, min/max µs

get_feature_configB

Features Betaflight activées (AIRMODE, LED_STRIP, GPS, etc.)

get_advanced_configC

Config avancée : dénominateurs gyro/PID, protocole ESC (DSHOT), PWM rate

get_filter_configB

Configuration des filtres, noms CLI : lowpass gyro/D-term statiques et dynamiques (types PT1/BIQUAD/PT2/PT3), notches, dyn notch, filtre RPM, yaw_lowpass_hz

set_filter_configA

Modifie des filtres (noms CLI, voir get_filter_config). Seuls les champs fournis changent. Filtres gyro globaux ; D-term et yaw_lowpass_hz du profil PID actif. Le firmware peut corriger des valeurs incohérentes : la réponse contient les valeurs relues. Betaflight 2025.12+ (API >= 1.47). Refusé si FC armé. Appeler save_config ensuite.

get_pid_advancedB

Réglages PID avancés du profil actif, noms CLI : feedforward (f_roll/f_pitch/f_yaw, feedforward_*), D-max (d_max_* ; d_min_* avant Betaflight 2025.12), iterm relax, anti-gravity, acc_limit, angle_limit, TPA, throttle_boost, simplified_pids_mode

set_pid_advancedA

Modifie des réglages PID avancés du profil actif (noms CLI, voir get_pid_advanced). Seuls les champs fournis changent. simplified_pids_mode=OFF empêche le firmware de recalculer les PIDs depuis les curseurs (ex. au prochain batch CLI). Betaflight 2025.12+ (API >= 1.47) uniquement. Refusé si FC armé. Retourne les valeurs relues. Appeler save_config ensuite.

get_battery_configB

Config batterie, noms CLI : vbat_min/warning/max_cell_voltage (0.01 V), bat_capacity (mAh), battery_meter et current_meter (source de mesure)

set_battery_configA

Modifie la config batterie (noms CLI, voir get_battery_config). Tensions en 0.01 V, ordre min <= warning <= max obligatoire. current_meter=NONE si le FC n'a pas de capteur de courant. Changer une source de mesure exige save_config puis reboot_fc (reboot_required dans la réponse). Betaflight 2025.12+. Refusé si FC armé.

get_profilesB

Profils actifs : pid_profile (et pid_profile_count), rate_profile, battery_profile (Betaflight 2026.6+)

select_profileA

Active un profil PID, de rates ou batterie (2026.6+). Vérifié par relecture : le firmware ignore un index hors plage. Refusé si FC armé. Le choix n'est gardé au redémarrage qu'après save_config. Note : le firmware change seul de profil PID au branchement de la batterie selon auto_profile_cell_count (voir get_pid_advanced).

get_battery_profilesA

Les 3 profils batterie (Betaflight 2026.6+) : tensions cellule min/warning/full/max (0.01 V), capacité, force_battery_cell_count, cbat_alert_percent. Le nombre de cellules détecté vaut floor(tension / vbat_max_cell_voltage) + 1.

set_battery_profileA

Modifie un profil batterie par index (Betaflight 2026.6+), actif ou non. Seuls les champs fournis changent ; ordre min <= warning <= full <= max obligatoire. Refusé si FC armé. Appeler save_config ensuite.

get_sensor_configB

Configuration des capteurs : accéléromètre, baromètre, magnétomètre

save_configA

Sauvegarde la configuration courante en EEPROM du FC (obligatoire après tout SET)

reboot_fcA

Redémarre le FC (refusé si armé). La connexion est fermée : rappeler connect après quelques secondes.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 38 tools

Disambiguation4/5

Most tools have clearly distinct resource+action purposes (get_/set_ pairs for PID, rates, filters, battery). However, the RC-detection cluster (snapshot_rc_delta, measure_rc_noise, detect_rc_mapping, detect_rc_channel_move) has overlapping sampling purposes, and the battery surface (get_battery, get_battery_state, get_voltage_meters, get_current_meters) requires reading descriptions carefully to distinguish.

Naming Consistency4/5

Strong verb_noun convention throughout (get_*, set_*, get_battery_config/set_battery_config, list_serial_ports, save_config, reboot_fc). Minor deviations: connect/disconnect are bare verbs, and select_profile/measure_rc_noise/add consistent enough to stay readable.

Tool Count2/5

38 tools is heavy and exceeds the comfortable 3-15 range. While the FC-config domain is genuinely broad, several read-only getters (get_voltage_meters, get_current_meters, get_sensor_config) could be consolidated, pushing this toward over-scoped.

Completeness4/5

Core lifecycle is well covered with matched get/set pairs for PID, filters, rates, battery, profiles, plus connection management and RC discovery. Gaps remain: get_advanced_config, get_feature_config, get_modes, and get_sensor_config have no corresponding setters, leaving write paths for those areas missing.

Maintenance

ActivityMaintained
ResponsivenessNo issues