Betaflight MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BETAFLIGHT_BAUD | No | Baud rate (must match Betaflight config). | 115200 |
| BETAFLIGHT_PORT | No | Serial port of the FC. Default is /dev/ttyUSB0 on Linux or COM3 on Windows. | /dev/ttyUSB0 |
| BETAFLIGHT_TIMEOUT | No | Serial 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
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 38 tools
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.
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.
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.
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.