MCP server for controlling KY UFO WiFi drones from Claude
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file morph_pilot-1.0.0-py3-none-any.whl.
File metadata
- Download URL: morph_pilot-1.0.0-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
343996412fb295b15a9a370bb99f76736c0e0fd31d509f904e3d77f3c9156311
|
|
| MD5 |
aaab078b616c52f7766c7faf642ad3bf
|
|
| BLAKE2b-256 |
6ca8426ac8bd259a0aaa93b139a1db4b31a665523e629dda5014c79c72fa6282
|