Ryan Malloy 169bc91a8f Three fixes the real aircraft found, that the simulator could not
Acknowledge on data type alone, never on buffer id. A live Bebop 2 sends
DATA_WITH_ACK on buffer 126 and plain DATA on 127, the opposite of what the
buffer names imply, so requiring both to agree meant nothing was ever
acknowledged. The drone resent its state instead of continuing: 35 telemetry
keys where there should be 192, and a connect that took 4 s instead of 1.7.

Record argument-less events. Eight events carry no arguments and their
arrival is the whole message, including AllStatesChanged and
AllSettingsChanged, which mark the end of a state dump. Keying only by
argument decoded them to an empty dict and lost them.

Wait for those terminators instead of a quiet period. The drone streams
attitude at about 5 Hz throughout, so the link is never quiet and the wait
always ran to its timeout with a partial burst.

Also: preflight no longer reports ready when a blocking check has no data.
It answered 'ready' on an aircraft it knew almost nothing about, which is
worse than refusing to answer.
2026-10-02 01:57:16 -06:00

mcbebop

An MCP server for the Parrot Bebop 2, so an agent can talk to the drone without anyone writing code for each question.

Parrot abandoned the Bebop line, but the aircraft is still a capable, cheap platform and its protocol is fully described by Parrot's own XML, which this package vendors. Every one of the 264 commands is reachable; nothing is hand-wrapped.

Status: in development. Not flight-tested. See the safety section.

What it talks to

Interface Notes
ARSDK3 over UDP commands and telemetry; this package implements the protocol directly
ARStream2 live H.264 video. The Bebop 2 serves no RTSP, despite what older libraries assume
FTP media, flight plans, blackbox logs
Telnet read-only shell, only after the drone's debug mode is enabled

Safety

Commands are classified by consequence. Observing and configuring are open; anything that can spin a motor or change the flight envelope refuses until arm() is called with a reason, and re-locks on a timer and on disconnect. Landing and Emergency are deliberately never locked, because refusing to land an airborne aircraft is the more dangerous answer.

connect(target="sim") runs everything against a protocol-accurate simulator, which is where anything involving motion should be rehearsed.

Install

uvx mcbebop
claude mcp add mcbebop -- uvx mcbebop

Credits

arsdk-xml/ is Parrot SA's own protocol definition, BSD-3-Clause. See arsdk-xml/PROVENANCE.md.

S
Description
MCP server for the Parrot Bebop 2: ARSDK3 in pure Python, all 264 commands, telemetry, camera, files, and a protocol-accurate simulator. Docs: https://bebop-2.warehack.ing
Readme MIT
326 KiB
Languages
Python 100%