morph-pilot
MCP server that lets Claude control a KY UFO WiFi drone — fly it, move it, photograph with it, and capture live camera frames for vision AI.
Part of the morph-sense toolkit.
Hardware
- Drone: KY UFO (cooingdv protocol) — widely available under many brand names
- Connection: Connect your laptop to the drone's WiFi AP (
192.168.1.1) - Camera: RTSP stream at
rtsp://192.168.1.1:7070/webcam
Install
pip install morph-pilot
Or run directly from source:
git clone https://github.com/cklam12345/morphDrone
cd morphDrone
pip install opencv-python
Wire up Claude Code
Add to your project's .claude/settings.json:
{
"mcpServers": {
"drone": {
"command": "morph-pilot"
}
}
}
Or if running from source:
{
"mcpServers": {
"drone": {
"command": "python3",
"args": ["/path/to/morphDrone/mcp/drone_server.py"]
}
}
}
Restart Claude Code — the drone tools will appear automatically.
Tools
| Tool | Description |
|---|---|
connect |
Connect to drone and start heartbeat. Call first. |
calibrate |
Calibrate gyro — drone must be on a flat surface. Wait 5s before takeoff. |
take_off |
Toggle takeoff. Drone rises to hover altitude. |
land |
Toggle land. Drone descends and cuts motors. |
move |
Move on any axis. Values −100 to 100, duration in seconds. |
emergency_stop |
Instant motor cut-off. Drone drops — emergencies only. |
photograph |
Trigger onboard camera shutter. |
videotape |
Toggle onboard video recording. |
capture_frame |
Grab a JPEG frame from the live RTSP stream. Returns local file path. |
move axis reference
| Axis | Negative (−100) | Positive (+100) |
|---|---|---|
roll |
Left | Right |
pitch |
Forward | Backward |
throttle |
Up | Down |
yaw |
Rotate left | Rotate right |
Note: pitch and throttle are hardware-inverted on KY UFO — morph-pilot handles this automatically.
Example conversation
"Connect to the drone, calibrate, take off, fly forward for 2 seconds, then land."
Claude will call: connect → calibrate → take_off → move(pitch=-50, duration=2) → land
"Capture a frame and tell me what the drone sees."
Claude will call: capture_frame → reads /tmp/drone_frame.jpg → describes the image.
Network setup
| Address | Purpose |
|---|---|
192.168.1.1:7099 UDP |
Flight commands |
192.168.1.1:7070 TCP |
RTSP camera stream |
192.168.1.101 |
Required local bind address |
License
MIT
Metadata
Release files for morph-pilot 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| morph_pilot-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Release files / morph_pilot-1.0.0-py3-none-any.whl
| Download URL | morph_pilot-1.0.0-py3-none-any.whl |
|---|---|
| Size | 17.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
343996412fb295b15a9a370bb99f76736c0e0fd31d509f904e3d77f3c9156311
|
|
BLAKE2b-256 checksum How to use checksums |
6ca8426ac8bd259a0aaa93b139a1db4b31a665523e629dda5014c79c72fa6282
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.12
|