ardupilot-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ardupilot-mcpAnalyze flight.bin and explain why the drone lost GPS"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ardupilot-mcp
Türkçe · English
ArduPilot uçuş loglarını teşhis eden bir MCP sunucusu. Claude Desktop, Cursor ya da VS Code gibi bir yapay zekâ istemcisine eklersin, .bin veya .tlog dosyanı verirsin; istemci uçuşta ne olduğunu sade bir dille anlatır: titreşim, düşük batarya, GPS kaybı, motor kaybı, hatalı ayar.
Bulguları deterministik kontroller üretir. Her eşiğin kaynağı docs/SOURCES.md'de yazılıdır; model bu bulguları yalnızca açıklar. Sunucu yalnızca yerel dosyaları okur, ağa bağlanmaz, araca komut göndermez ve parametre yazmaz.
Hızlı başlangıç
Claude Desktop ile:
uv'yi kur.
Claude Desktop'ta Settings → Developer → Edit Config ile şunu ekle:
{ "mcpServers": { "ardupilot-mcp": { "command": "uvx", "args": ["ardupilot-mcp"] } } }Claude Desktop'tan tamamen çık ve yeniden aç.
Sor: "C:\loglar\00000042.BIN logunu analiz et, neden düştü?"
Claude Code için tek satır yeterli: claude mcp add ardupilot-mcp -- uvx ardupilot-mcp. Cursor, VS Code, Windsurf, Cline, Zed, LM Studio ve diğer istemcilerin ayarları, sorun giderme ve istemcisiz deneme docs/clients.md'de.
Related MCP server: ArduPilot MCP Server Sandbox
Hangi log?
.binuçuş kontrolcüsünün kendi kaydıdır ve en ayrıntılı teşhisi verir. SD karttakiAPM/LOGS/klasöründedir; Mission Planner'da DataFlash Logs → Download DataFlash Log Via Mavlink ile de indirilir..tlogyer istasyonunun kaydettiği telemetridir. Saniyede birkaç örnek ve yalnızca birincil sensör taşır, bu yüzden teşhis daha kabadır. Telsiz kopmasını araç arızası sanabilecek kontroller bu dosyada çalışmaz.
Örnek
python examples/analyze.py demo.bin çıktısından bir bölüm. İstemci aynı bulguları senin dilinde anlatır.
First anomaly while armed: Elevated VibeZ vibration @ 9s.
6 critical, 2 warning, 3 info finding(s).
[CRITICAL] vibration @ 9s: Elevated VibeZ vibration
VibeZ vibration peaks at 72 m/s^2 (>60); 20% of samples exceed 60 m/s^2.
[CRITICAL] attitude @ 20s: Attitude tracking failure (roll)
Roll failed to track the demand for 3.0 s, error up to 35 deg (sustained >25 deg).
[CRITICAL] power @ 25s: Battery reached critical voltage
Pack voltage fell to 13.32 V, at or below the critical-voltage level (13.50 V, configured BATT_*_VOLT failsafe).Araçlar
Bütün araçlar salt okunurdur.
Araç | Ne işe yarar |
| Bütün kontrolleri çalıştırır; önem sırasına dizilmiş bulguları resmi ArduPilot doküman linkleriyle döndürür. |
| İlk anomaliyi ve çarpma anını bulur, olayları zaman sırasına koyar. Neden-sonuç iddia etmez. |
| discuss.ardupilot.org'a yapıştırılacak Markdown yanıtı hazırlar. GPS konumu içermez. |
| İki uçuş arasında değişen parametreleri, firmware'i ve metrikleri yan yana koyar. |
| Araç, firmware, süre, uçuş modları ve log bütünlüğü. |
| Frame, motor sayısı, batarya, hover gazı ve güç marjı. |
|
|
| Bir bulgunun arkasındaki ham seri; çoklu sensörlerde instance seçilebilir. |
| Logdaki parametreler ve o firmware sürümünde belgelenmiş aralık, birim ve değerler. |
| Dışa aktarılmış |
| Harmonik notch, PID ve autotune önerisi. Hiçbir şeyi uygulamaz. |
| Kayıtlı kontrollerin listesi. |
Araçların argümanları ve 18 kontrolün tamamı docs/reference.md'de. Bu dosyayı scripts/gen_docs.py koddan üretir, CI da güncel olup olmadığını denetler.
Nasıl çalışır
Parser logu sütunlu bir FlightLog modeline çevirir. Kayıtlı kontroller bu modeli okur: verisi logda olmayan kontrol atlanır, araç tipine uymayan çalışmaz. Aynı olayın ERR kaydı, failsafe mod değişikliği ve firmware mesajı tek bulguda birleşir. Çarpmadan sonra başlayan bulgular listenin sonuna iner ve raporun başında çarpmadan önceki ilk anomali kalır.
4.x firmware her IMU, GPS, pusula, batarya ve EKF çekirdeğini tek mesaj adı altında yazar. Kontroller her birini ayrı değerlendirir. 4.1 öncesi loglarda ayrı adla yazılan ikincil sensörler de aynı yapıya çevrilir.
Sunucu MCP Python SDK 2 üzerinde çalışır. Hem 2026-07-28 protokol sürümünü hem de bugün çoğu masaüstü istemcinin kullandığı eski el sıkışmayı (2024-11-05 ile 2025-11-25 arası) konuşur.
Doğruluk ve sınırlar
Motor, forumdaki 49 gerçek kaza logu üzerinde ölçülür; logların sebebini o logu inceleyen bir geliştirici ya da deneyimli bir kullanıcı yazmıştır. Güncel skorlar ve yöntem bench/README.md'de.
Pusula yön hatasından kaynaklanan dairesel sürüklenme (toilet-bowl) henüz tespit edilmiyor.
Format tanımları bozulmuş bir log, kısmi sonuç yerine açık bir hata verir.
.tlogdosyasında ERR kaydı, batch sampler, hızlı IMU ve mod değişikliği nedeni yoktur.Bulgular karar desteğidir. Uçuşa elverişlilik kararı vermez.
Diğer araçlar
UAV Log Viewer ve Mission Planner'ın Auto Analysis'i veriyi gösterir, yorumu sana bırakır. ardupilot-mcp yorumu yapar ve takip sorularını cevaplar. Bir sinyali grafikte görmek ya da uçuşu 3B izlemek için UAV Log Viewer daha iyidir.
Katkı
CONTRIBUTING.md geliştirme ortamını, yeni kontrol eklemeyi ve PR sürecini anlatır. Yapay zekâ asistanlarının uyduğu kurallar AGENTS.md'de. Güvenlik açıklarını SECURITY.md'deki yoldan bildir. Değişiklikler CHANGELOG.md'de.
Lisans
GNU AGPL-3.0. Kodu değiştirip ağ üzerinden hizmet olarak sunan, değiştirdiği kaynak kodu o hizmetin kullanıcılarına açmak zorundadır. AGPL koşulları işine uymuyorsa ticari lisans için contact@furkanisikay.com adresine yaz. PyPI'da yayımlanan 0.1.3 ve önceki paketler MIT lisanslıdır ve öyle kalır; bu değişiklikten sonraki kaynak kod ve sonraki sürümler AGPL-3.0 lisanslıdır.
ardupilot_mcp/data/params/ altındaki veri, ArduPilot'un GPLv3 lisanslı parametre tanımlarından (apm.pdef.xml) çıkarılmış olgulardan oluşur: aralık, birim, değer kodları ve bitmask bitleri. Açıklama metni kopyalanmaz.
Available Tools
12 toolsanalyze_logARead-onlyIdempotent
Run the full deterministic diagnostic suite over an ArduPilot .bin log (or a ground station's .tlog).
A .tlog is the telemetry the ground station received: a few Hz, the primary sensor and EKF core only, and gaps where the radio link dropped. Checks that would read a link dropout as a vehicle fault (log integrity, timing) are skipped on it; prefer the onboard .bin when the user has it.
Returns severity-ranked findings (each with concrete evidence AND official
ArduPilot doc links), per-check results, a plain-language summary, and
guidance. Read the cited references for the log's firmware version, call
vehicle_profile for the airframe's physical configuration, and fold in any
real-world details the user gives — then explain and cite sources. Every
finding is grounded in the log; do not invent causes beyond them.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No | Per-check outcomes, including skipped/errored checks. |
| findings | No | All findings, sorted by severity (most severe first). |
| guidance | No | How the LLM should use this report: read the cited docs for the log's firmware version, factor in the vehicle_profile (frame, motors, battery, power margin) and any physical details (weight, prop size) the user provides, then explain and cite sources. |
| incident | No | Onset/impact summary when the log shows an anomaly while armed; the full event list is available from the incident_timeline tool. |
| info_count | No | |
| references | No | De-duplicated documentation links across all findings. |
| warn_count | No | |
| log_summary | Yes | |
| summary_text | No | Deterministic summary skeleton. The LLM enriches this; it never invents findings. |
| checks_skipped | No | |
| critical_count | No | |
| logging_advice | No | Copter/Heli: LOG_BITMASK bits that are off and whose data a check needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world, but the description adds substantive behavior the annotations cannot: .tlog inputs skip integrity/timing checks and why, findings are severity-ranked with evidence and doc links, a `guidance` field is returned, and causes must not be invented beyond the log. That is real operational context beyond the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then structured into input caveat, return shape, and agent workflow. The closing guidance sentence is slightly redundant with the workflow sentence, but every paragraph carries distinct information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only one-parameter analysis tool with an output schema, the description covers the input caveats, the nature of the results, and the expected reasoning workflow. Nothing an agent needs to call it correctly is missing; return-value detail is present even though the output schema already carries it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter `path` has 0% schema description coverage, so the description must compensate. It implies accepted input formats (.bin or .tlog) but never states that `path` is a filesystem path to that file, nor any format or constraint details. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run the full deterministic diagnostic suite over an ArduPilot .bin log'), and immediately distinguishes the two accepted inputs by explaining what a .tlog is versus the onboard .bin. It also names the related sibling vehicle_profile, so an agent can place it in the workflow without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear selection rule for inputs ('prefer the onboard .bin when the user has it') and a follow-up workflow (read cited references, call vehicle_profile, fold in user details). It does not, however, state when to reach for analyze_log versus siblings like log_summary, list_checks, or compare_logs, so no true exclusion guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_logsARead-onlyIdempotent
What changed between two logs of the same vehicle ("it flew fine last week")? Lists configuration parameters that differ (separately from values the autopilot learns/counts itself), parameters present in only one log, the firmware change, and flight metrics side by side (vibration, hover throttle, battery/board voltage minimums). Differences only — it does not judge which side is right. By convention A is the earlier/good flight and B the later/bad one.
| Name | Required | Description | Default |
|---|---|---|---|
| path_a | Yes | ||
| path_b | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| added | No | Parameters only in log B. |
| notes | No | |
| path_a | Yes | |
| path_b | Yes | |
| changed | No | Configuration parameters whose value differs (user changes). |
| metrics | No | Flight metrics side by side. |
| removed | No | Parameters only in log A. |
| firmware_a | No | |
| firmware_b | No | |
| learned_changed | No | Values the autopilot learns or counts itself (STAT_*, MOT_THST_HOVER, gyro offsets...). |
| firmware_changed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, closed-world behavior, and the description adds meaningful behavioral context: it reports differences only, explicitly does not judge which side is right, and enumerates what is compared. This goes beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the framing question, then a tight enumeration of outputs followed by the A/B convention. Every sentence earns its place; only the parenthetical example is mildly decorative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet the description still usefully summarizes what is compared. For a two-param read-only tool, remaining gaps (path format, same-vehicle validation behavior) are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% on two path parameters, but the description compensates partially by defining the semantic convention for A versus B (earlier/good vs later/bad). It says nothing about acceptable path formats or how the two logs must relate beyond "same vehicle".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (compare two logs of the same vehicle) with a concrete framing question, and the content it produces is enumerated. An agent can distinguish it from analyze_log and log_summary without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong implied usage context ("it flew fine last week", before/after a change) and the A=earlier/good, B=later/bad convention tell the agent exactly when and how to call it. It does not explicitly name alternatives or state when not to use it, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forum_reportARead-onlyIdempotent
A Markdown reply to paste into a discuss.ardupilot.org thread: vehicle and firmware, what went wrong first (onset and impact), the findings with their corroborating log records, and a small text plot of the data behind each one. It contains no GPS positions and is returned as text (nothing is written to disk). Review it with the user and add what they saw before they post it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| markdown | Yes | Paste-ready Markdown: vehicle, what went wrong first, findings with text plots. Contains no GPS positions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and closed-world, so the safety bar is lower; the description nevertheless adds real context beyond them — no GPS positions are included (privacy), output is text and nothing is written to disk, and the result is meant for user review before posting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph, front-loaded with what the artifact is and its contents before the trailing workflow note. Every clause carries information, though the sentence is long and slightly meandering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be re-explained, and annotations cover the safety profile. The description rounds this out with content, privacy, and review-workflow details; the only real gap is the unexplained 'path' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'path' parameter has 0% schema description coverage, so the description must carry the burden, but it never clarifies what path is expected (a log file, a directory, an existing analysis). It only hints at a log source indirectly through the report contents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific artifact (a Markdown reply for a discuss.ardupilot.org thread) and enumerates its contents: vehicle/firmware, onset and impact, findings with corroborating log records, and text plots. It is clearly distinguishable from all siblings (analyze_log, log_summary, incident_timeline, etc.), though the generative verb itself is only implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a workflow instruction ('Review it with the user and add what they saw before they post it'), which implies the intended use case, but never states when to reach for this tool over siblings like analyze_log or incident_timeline, nor any prerequisites (e.g., what log must already be loaded).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paramsARead-onlyIdempotent
Parameter values recorded in the log's PARM dump. name_glob is a case-insensitive glob, e.g. 'INS_HNTCH_*'.
Includes total (full param count), metadata_url (version-specific definitions to interpret values), and a
note if the snapshot looks incomplete (truncated log) — in which case ask the user for their exported .param
file and read it with load_param_file. documented gives each returned param's documented range, units,
listed values and bitmask bits for the log's firmware (bundled, offline); a value outside the documented range
or list is not necessarily wrong (some defaults, e.g. 0 = disabled, lie outside). undocumented names params
that release does not document.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| name_glob | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Completeness caveat (e.g. truncated log -> snapshot may be partial). |
| path | Yes | |
| total | No | Total params available in the source (before filtering). |
| params | No | |
| source | No | 'log' (PARM dump) or 'file' (exported .param). |
| matched | No | Params returned after the name filter. |
| documented | No | Bundled documented metadata of the returned params (when at most 200 are returned). |
| metadata_url | No | Version-specific parameter definitions (apm.pdef.xml) — meanings, ranges, values and bitmasks (not defaults). The LLM should consult this to interpret values. |
| undocumented | No | Returned params the release documents nowhere: script-added params, typos, or another firmware's params. |
| metadata_version | No | Which bundled release `documented` comes from, and how it matches the log's firmware. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and closed-world behavior, so the safety profile is covered. The description goes beyond that by disclosing the shape of the result (total, metadata_url, note, documented, undocumented) and the important caveat that a value outside the documented range or list is not necessarily wrong, plus offline/bundled firmware definitions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the name_glob format, then the output caveats. It is dense but each sentence carries information; the explanation of return fields is somewhat redundant given an output schema exists, though the interpretation caveats earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with annotations and an output schema, this covers what the agent needs: purpose, glob semantics, fallback path, and interpretation caveats. The only real hole is the undocumented `path` parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains name_glob well (case-insensitive glob with a concrete example like 'INS_HNTCH_*'), but the required `path` parameter is never described, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Parameter values recorded in the log's PARM dump') and scopes it to the log's firmware, which distinguishes it from siblings like list_events, query_timeseries, and log_summary without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear conditional route to an alternative: if the snapshot looks incomplete (truncated log), ask for the exported .param file and use load_param_file. It also advises how to interpret out-of-range values. It does not cover when to prefer this over other parameter/event siblings, but the key alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
incident_timelineARead-onlyIdempotent
What went wrong first, and what followed: the onset (first anomaly while armed), the impact (crash check, crash disarm, or the log ending while armed), and every firmware verdict, error, failsafe mode change and finding in time order, each tagged before_onset / onset / after_onset / impact / after_impact. Use it to answer "what failed first, and is the rest just the crash?". Time order only — never causation.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| events | No | |
| caveats | No | |
| onset_s | No | Time of the first anomaly while armed. |
| impact_s | No | Time of the crash/impact, when the log shows one. |
| conditions | No | WARN+ findings that describe the whole flight or configuration (compass statistics, parameters, boot messages, flight-long windows): context, never the onset. |
| onset_basis | No | The event that marks the onset. |
| impact_basis | No | |
| log_ended_armed | No | |
| first_anomaly_check_id | No | Check (or 'firmware'/'err'/'mode') of the onset event. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the remaining burden is interpretive guidance. The description supplies exactly that with 'Time order only — never causation', telling the agent how to read the output and warning against causal inference, plus the tagging scheme that shapes interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the mental model of the output and then the usage question; every clause (onset, impact, tag list) maps to real content the agent must understand. The single sentence is long but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, yet it still characterizes them well via the phase tags. For a one-parameter read-only analytics tool this is close to sufficient; only the path parameter's meaning is left entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'path' is undocumented in the description, so the agent gets no format, source, or relative-vs-absolute guidance. The parameter is largely self-evident, which keeps this from being worse than baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete analytic artifact (an ordered incident timeline of onset, impact, firmware verdicts and findings) and enumerates the phase tags it emits, which is far more than a restatement of the name. It does not explicitly contrast itself with siblings such as list_events or log_summary, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case in the user's own words: 'what failed first, and is the rest just the crash?'. That is clear context for when to reach for this tool, but no alternative tool is named and no when-not condition is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_checksARead-onlyIdempotent
List the registered diagnostic checks (the extensible catalogue).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| checks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety and determinism profile is fully covered elsewhere. The description adds only the modest context that the checks form an 'extensible catalogue' (i.e., the list is a registry that can grow), which is genuine but thin; no cost, rate, or ordering behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. Every word earns its place and the core action leads the sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with a full output schema and complete annotations, the definition is close to sufficient — return values are documented elsewhere and behavior is covered by hints. It stops short of 5 because nothing tells the agent where this catalogue sits relative to the diagnostic siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and the schema description coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the registered diagnostic checks') and adds a scope hint ('the extensible catalogue'). It is clear what the tool returns, but it never differentiates itself from similarly named siblings such as list_events or get_params, leaving the agent to infer the distinction from the resource noun alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, and no alternative is named. The agent gets no signal on whether this should be called before analyze_log, incident_timeline, or the other siblings, or what a prerequisite would be.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsBRead-onlyIdempotent
Decoded ERR/MODE/EV/MSG timeline. kinds filters families (ERR, MODE, EV, MSG); times are seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| end_s | No | ||
| kinds | No | ||
| start_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| total | No | |
| events | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world behavior, so safety is covered. The description adds genuinely useful context not in structured data: the event families that exist (ERR/MODE/EV/MSG) and that time values are seconds. It says nothing about ordering or result volume, so it stops short of a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, and the core resource is front-loaded. The telegraphic style ('times are seconds') is efficient, though the terseness slightly reduces readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, but with 0% parameter coverage and no when-to-use guidance, the definition is only minimally complete for a log-querying tool. The 'path' argument is never described, leaving one required parameter's meaning entirely to the caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it partially does: it explains that 'kinds' filters event families and enumerates the valid families, and that time parameters (start_s/end_s) are in seconds. Only 'path' is left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource and scope: a decoded ERR/MODE/EV/MSG event timeline. An agent can tell it returns parsed log events rather than raw logs or a summary, though it never explicitly contrasts itself with the nearby incident_timeline sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus list_checks, incident_timeline, or log_summary, and no prerequisite or context guidance. The agent must infer usage purely from the resource noun.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_param_fileARead-onlyIdempotent
Load a user-exported ArduPilot parameter file (.param / .params).
The authoritative complete configuration — use it when the log's PARM snapshot is truncated/incomplete,
or to compare the flown config (get_params) against the user's current/intended config. name_glob filters.
firmware (e.g. 'ArduCopter V4.6.3', from the log's log_summary) attaches the documented metadata and
lists names that release does not document (typos, script or other-firmware params).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| firmware | No | ||
| name_glob | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Completeness caveat (e.g. truncated log -> snapshot may be partial). |
| path | Yes | |
| total | No | Total params available in the source (before filtering). |
| params | No | |
| source | No | 'log' (PARM dump) or 'file' (exported .param). |
| matched | No | Params returned after the name filter. |
| documented | No | Bundled documented metadata of the returned params (when at most 200 are returned). |
| metadata_url | No | Version-specific parameter definitions (apm.pdef.xml) — meanings, ranges, values and bitmasks (not defaults). The LLM should consult this to interpret values. |
| undocumented | No | Returned params the release documents nowhere: script-added params, typos, or another firmware's params. |
| metadata_version | No | Which bundled release `documented` comes from, and how it matches the log's firmware. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds useful behavior beyond annotations: it reads an authoritative complete config and, when firmware is supplied, attaches documented metadata and lists names not documented for that release. It does not detail error behavior or path requirements, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then immediately gives usage conditions and parameter effects. The four sentences are dense but every one adds distinct information, with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, annotations cover safety and idempotence, and the description covers usage context and two of three parameter effects. It is nearly complete for invoking correctly, though it omits explicit path/error semantics and does not mention what loading returns, which the output schema presumably covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains name_glob as a filter and firmware as attaching documented metadata and listing undocumented names, but path is only implied by 'parameter file' and lacks format details such as absolute/relative path handling. Partial compensation for three parameters warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: loading a user-exported ArduPilot parameter file (.param/.params), and frames it as the authoritative complete configuration. It explicitly contrasts this with the log's PARM snapshot and with get_params, so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use conditions: when the log's PARM snapshot is truncated/incomplete, or to compare flown config from get_params against the user's current/intended config. It names the alternative get_params and explains the comparison use case, leaving little inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_summaryBRead-onlyIdempotent
Cheap orientation: vehicle, firmware, duration, message counts, flight modes, max altitude, integrity.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| board | No | |
| source | No | 'dataflash' (the onboard .bin log) or 'tlog' (a ground station's MAVLink telemetry log). |
| integrity | No | |
| duration_s | No | |
| flight_modes | No | |
| start_time_s | No | |
| vehicle_type | No | |
| max_altitude_m | No | Highest altitude above home/take-off (m) — not AMSL. |
| message_counts | No | |
| firmware_version | No | |
| integrity_detail | No | |
| available_messages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety and side-effect profile is covered structurally. The description's only extra behavioral signal is 'cheap,' which usefully conveys low cost/latency and orients it as a lightweight probe. It adds little else about behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A tight one-line phrase with the leading qualifier 'Cheap orientation' front-loaded, so the key framing lands first. It is telegraphic but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover safety. However, the tool omits any guidance on the required path argument and no usage context, leaving it only minimally complete for calling correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'path' parameter has 0% schema description coverage and the description never mentions it, adding no meaning about what path refers to (log file, directory, etc.). With low coverage the description should compensate, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (a flight log) and enumerates exactly what the summary returns: vehicle, firmware, duration, message counts, flight modes, max altitude, integrity. This lets an agent distinguish it from a deeper tool like analyze_log. It stops short of explicitly naming a sibling, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Cheap orientation' implies this is the fast first-pass tool to run before heavier siblings like analyze_log, but the description never says when to use it versus alternatives or any prerequisites. Usage is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_timeseriesBRead-onlyIdempotent
Numeric time series for a message type and fields, for drilling into a finding.
Multi-instance messages (VIBE/IMU per IMU, GPS per receiver, MAG per compass, BAT per
battery, XKF* per EKF core) are returned one instance at a time: pass instance
(default: the first one; see available_instances). Values are aligned with
times_s by index. Downsamples (decimates) to at most max_points points.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| end_s | No | ||
| fields | Yes | ||
| start_s | No | ||
| instance | No | ||
| max_points | No | ||
| message_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| path | Yes | |
| fields | Yes | |
| series | No | One value per entry of times_s (aligned by index); null where a record lacks the field. |
| times_s | No | |
| instance | No | Sensor/core instance returned (multi-instance messages only). |
| downsampled | No | |
| message_type | Yes | |
| sample_count | No | |
| available_instances | No | Instances this message type has in the log (e.g. one per IMU/GPS). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/closed-world, but the description adds genuinely useful behavior: multi-instance messages are returned one instance at a time with a default of the first, values are index-aligned with times_s, and output is decimated to at most max_points. These are traits the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by behavioral caveats in a logical order with no filler. The parenthetical enumeration of VIBE/IMU/GPS/MAG/BAT/XKF examples is slightly heavy but earns its place by clarifying what 'multi-instance' means.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be described, and the key runtime behaviors are covered. The gap is parameter documentation: for a 7-parameter tool at 0% schema coverage, five parameters are left for the agent to infer from names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full parameter burden, yet it only clarifies two of seven parameters (instance default and max_points decimation). Path, message_type, fields, start_s, and end_s get no explanation at all, leaving most of the schema undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: 'Numeric time series for a message type and fields,' and adds the intent 'for drilling into a finding.' No sibling tool overlaps directly, but the description never explicitly differentiates itself from near-neighbors like log_summary or analyze_log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for drilling into a finding' implies when the tool is appropriate, and 'see available_instances' points to a related call. However, there are no explicit when-not conditions or named alternatives among the eleven siblings, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_tuningBRead-onlyIdempotent
Advisory tuning recommendations (harmonic notch from the batch sampler, a fast IMU, the in-flight FFT or ESC RPM; PID; autotune). Recommendation ONLY — never applied.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | ||
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| notes | No | |
| recommendations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=false, so safety is covered. The description adds genuine value beyond them: it names the data sources the recommendation is derived from (batch sampler, IMU, in-flight FFT, ESC RPM) and stresses 'Recommendation ONLY — never applied', confirming the analysis never mutates the craft.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence plus a short emphatic caveat, with the core purpose front-loaded. The parenthetical list is information-rich rather than filler, though it is packed tightly enough to read as a fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the read-only nature is well covered. However, for a tool requiring a 'path' argument, the description never says what that path should reference or what the tool needs in order to produce recommendations, leaving a real invocation gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema documents nothing. The description partially compensates by implying the set of values the 'area' parameter can take (harmonic notch, PID, autotune), but the required 'path' parameter is left completely unexplained — an agent cannot tell whether it points at a log, a config, or a directory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (advisory tuning recommendations) and enumerates the concrete subject areas: harmonic notch, PID, autotune. It is clearly distinct from siblings like analyze_log or get_params, though it never names a sibling to route against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to choose this over analyze_log, log_summary, or get_params, and no prerequisites (e.g. what input is needed first). The only usage-adjacent content is the caveat that the output is advisory only, which is a constraint rather than selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vehicle_profileARead-onlyIdempotent
Physical / architecture profile of the aircraft inferred from the log.
Frame class & type, motor count, battery cells/capacity, and — the key physical insight — the hover throttle and resulting power margin / thrust-to-weight. Use this to reason about the craft physically and to combine with real-world details the user gives (weight, prop diameter, motor KV, wind).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| notes | No | |
| assessment | No | Plain-language physical observations (e.g. 'underpowered'). |
| frame_type | No | |
| references | No | |
| frame_class | No | |
| motor_count | No | Number of lift motors implied by the frame. |
| vehicle_kind | No | |
| vehicle_type | No | |
| battery_cells | No | Estimated LiPo cell count (S). |
| max_voltage_v | No | |
| hover_throttle | No | Throttle (0..1) needed to hover; from MOT_THST_HOVER or measured. |
| frame_type_name | No | |
| firmware_version | No | |
| frame_class_name | No | |
| power_margin_pct | No | Spare throttle above hover (100*(1-hover)); low = underpowered. |
| nominal_voltage_v | No | |
| battery_capacity_mah | No | |
| thrust_to_weight_estimate | No | Rough max-thrust/weight (~1/hover_throttle). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, closed-world behavior. The description adds genuinely non-structured context: the profile is *inferred* from the log rather than measured, and hover throttle / power margin is flagged as the key derived insight, warning the agent these are estimates to be combined with user-supplied physical facts. It stops short of stating accuracy limits or which log conditions degrade the inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and then the enumerated contents. The parenthetical 'the key physical insight' is slightly editorial but earns its place by signaling which output matters most; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no further explanation, and annotations cover the safety profile. For a single-parameter read-only tool the description is nearly complete; the only real hole is the unexplained 'path' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required 'path' parameter with 0% schema description coverage, and the description never explains what the path points to, its accepted format, or expected file types. The phrase 'inferred from the log' weakly implies it is a log file path, which is minimal compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (physical/architecture profile of the aircraft) and enumerates the concrete outputs it produces: frame class/type, motor count, battery cells/capacity, hover throttle, power margin, thrust-to-weight. That content footprint is distinct enough from siblings like log_summary or get_params that an agent can route correctly, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a usage context ('use this to reason about the craft physically and to combine with real-world details the user gives'), which implies when the tool is useful. However, it offers no when-not guidance and never names an alternative (e.g. get_params for raw parameter values), so selection among siblings still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
analyze_log - First observed
compare_logs - First observed
forum_report - First observed
get_params - First observed
incident_timeline - First observed
list_checks - First observed
list_events - First observed
load_param_file - First observed
log_summary - First observed
query_timeseries - First observed
recommend_tuning - First observed
vehicle_profile
TDQS
Scored across 12 tools
Most tools have clearly distinct roles: analyze_log (full diagnostics) vs incident_timeline (time ordering) vs log_summary (cheap orientation) vs list_events (raw decoded events) vs query_timeseries (raw drilling) are well differentiated. Minor potential overlap between analyze_log's findings and incident_timeline's tags, but descriptions make the boundary clear.
All names use snake_case and most follow a verb_noun pattern (analyze_log, get_params, compare_logs, load_param_file, query_timeseries, recommend_tuning, list_events, list_checks). A few are noun phrases (incident_timeline, forum_report, vehicle_profile, log_summary), a minor deviation but still readable and predictable.
12 tools is well within the ideal range and each earns its place in a log-diagnosis workflow: entry point (log_summary), deep analysis (analyze_log), temporal/raw access (incident_timeline, list_events, query_timeseries), config (get_params, load_param_file, compare_logs), and reporting/advisory (forum_report, recommend_tuning).
Covers the core diagnostic lifecycle: orient, diagnose, temporalize, inspect parameters/config, compare flights, and produce reports/advisories. Minor gaps: no direct visualization/export beyond the text plot in forum_report, and recommend_tuning is advisory-only with no apply path, but these are reasonable for a read/diagnose server.
Maintenance
Related MCP Connectors
Connect Claude, Cursor, Codex, and other AI tools to your robotics mission data.
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables natural language interaction with Betaflight FPV drone flight controllers for configuration, PID tuning, sensor monitoring, VTX control, and blackbox management through Claude AI.4-
- AlicenseNot gradedqualityFmaintenanceEnables natural language control of ArduPilot drones via MAVLink, supporting arm, takeoff, mode changes, and mission uploads.9GPL 3.0
- AlicenseAqualityBmaintenanceEnables configuration, diagnostics, and troubleshooting of iNAV fixed-wing flight controllers over USB via Claude.3544 PyPI2MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with an ArduPilot vehicle in real-time via MAVLink, including reading state, inspecting and changing parameters, switching flight modes, diagnosing arming failures, and gated arming/disarming.31 PyPI4MIT