mavlink-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MAVLINK_MCP_URL | No | MAVLink endpoint (PX4 SITL's offboard port). With MAVSDK 2.x the older syntax udp://:14540 is used automatically. | udpin://0.0.0.0:14540 |
| MAVLINK_MCP_READONLY | No | Reject every tool that can move the vehicle (see Safety) | true |
| MAVLINK_MCP_MAX_ALTITUDE_M | No | Ceiling for takeoff/goto/mission altitudes, meters above launch. 0 disables. | 50 |
| MAVLINK_MCP_GEOFENCE_RADIUS_M | No | Soft geofence radius around the home position, meters. 0 disables. | 200 |
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 |
|---|---|
| tasks | {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
} |
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_capabilitiesA | Discover what this vehicle can do and which guardrails are active. Takes no arguments; does not require a live vehicle. Call this first. Returns {"adapter", "capabilities": ["telemetry", "arm_disarm", ...], "guardrails": {"readonly", "max_altitude_m", "geofence_radius_m"}, "connected"}. Plan only with listed capabilities; if "readonly" is true, every tool that can move the vehicle will be rejected. |
| get_telemetryA | Read one snapshot of the vehicle's telemetry. Read-only. Takes no arguments. Returns {"position": {latitude_deg, longitude_deg, absolute_altitude_m, relative_altitude_m}, "attitude": {roll_deg, pitch_deg, yaw_deg}, "battery": {voltage_v, remaining_percent}, "gps": {num_satellites, fix_type}, "flight_mode", "armed", "in_air"}. Fields the vehicle did not report within a few seconds are null. Always check telemetry before commanding motion. |
| get_flight_modeA | Report the current flight mode (e.g. HOLD, TAKEOFF, MISSION, RTL). Takes no arguments. Read-only. Returns {"flight_mode": "HOLD"}. |
| get_connection_statusA | Report the MAVLink endpoint, connection state, and guardrail config. Takes no arguments. The connection is opened lazily, so "connected" is false until another tool has been used. Check this first when other tools report errors. |
| armA | Arm the vehicle (spin up motors). DANGEROUS on real hardware. Rejected in readonly mode. Additionally requires confirm=true: ask the human operator for approval first — never set confirm=true on your own initiative. Preflight: check get_telemetry (GPS fix, battery) before arming. Returns {"armed": true} or {"error": ...}. |
| disarmA | Disarm the vehicle (stop motors). Autopilots reject this in flight. Rejected in readonly mode. Returns {"disarmed": true} or {"error": ...}. |
| takeoffA | Take off vertically to Rejected in readonly mode. Additionally requires confirm=true after human operator approval — never set it on your own initiative. The vehicle must be armed first (call arm). Altitude is validated against the configured ceiling (MAVLINK_MCP_MAX_ALTITUDE_M, default 50 m). Returns {"takeoff_started": true, "target_altitude_m": ...} — takeoff is asynchronous; poll get_telemetry to watch the climb. |
| landA | Land at the current position. Rejected in readonly mode (no confirmation needed — landing makes the vehicle safer). Returns {"landing_started": true}; poll get_telemetry until "in_air" is false. |
| holdA | Pause: stop and loiter at the current position (HOLD mode). Rejected in readonly mode. Use this to interrupt a goto or mission safely. Returns {"holding": true}. |
| return_to_launchA | Fly back to the launch point and land there (RTL). Rejected in readonly mode (no confirmation needed — RTL is a recovery action). Returns {"rtl_started": true}; poll get_telemetry until "in_air" is false. |
| goto_locationA | Fly to a single waypoint and loiter there. The vehicle must be flying already (armed + taken off). Args: latitude_deg: Target latitude (WGS84). longitude_deg: Target longitude (WGS84). relative_altitude_m: Target altitude above the launch point, in meters. Checked against the altitude ceiling. yaw_deg: Heading at the target, 0 = north (default 0). Rejected in readonly mode. The target is also checked against the soft geofence around home (MAVLINK_MCP_GEOFENCE_RADIUS_M, default 200 m). Returns {"goto_started": true, "target": {...}} — travel is asynchronous; poll get_telemetry to track progress. |
| fly_missionA | Upload a waypoint mission and start flying it. The vehicle must be armed and flying (or the autopilot will take off per its mission config). Args: waypoints: List of {"latitude_deg", "longitude_deg", "relative_altitude_m", "speed_m_s"?} objects, flown in order. Every waypoint is validated against the altitude ceiling and the soft geofence before anything is uploaded. Rejected in readonly mode. Returns {"mission_started": true, "waypoint_count": N}. Use hold to pause or return_to_launch to abort; poll get_flight_mode — mode leaves MISSION when the mission ends. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hieutachi/mavlink-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server