Skip to main content
Glama

ardupilot-mcp

CI PyPI Python License: AGPL-3.0

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:

  1. uv'yi kur.

  2. Claude Desktop'ta Settings → Developer → Edit Config ile şunu ekle:

    { "mcpServers": { "ardupilot-mcp": { "command": "uvx", "args": ["ardupilot-mcp"] } } }
  3. Claude Desktop'tan tamamen çık ve yeniden aç.

  4. 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?

  • .bin uçuş kontrolcüsünün kendi kaydıdır ve en ayrıntılı teşhisi verir. SD karttaki APM/LOGS/ klasöründedir; Mission Planner'da DataFlash Logs → Download DataFlash Log Via Mavlink ile de indirilir.

  • .tlog yer 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

analyze_log

Bütün kontrolleri çalıştırır; önem sırasına dizilmiş bulguları resmi ArduPilot doküman linkleriyle döndürür.

incident_timeline

İlk anomaliyi ve çarpma anını bulur, olayları zaman sırasına koyar. Neden-sonuç iddia etmez.

forum_report

discuss.ardupilot.org'a yapıştırılacak Markdown yanıtı hazırlar. GPS konumu içermez.

compare_logs

İki uçuş arasında değişen parametreleri, firmware'i ve metrikleri yan yana koyar.

log_summary

Araç, firmware, süre, uçuş modları ve log bütünlüğü.

vehicle_profile

Frame, motor sayısı, batarya, hover gazı ve güç marjı.

list_events

ERR, MODE, EV ve MSG kayıtlarının zaman çizelgesi.

query_timeseries

Bir bulgunun arkasındaki ham seri; çoklu sensörlerde instance seçilebilir.

get_params

Logdaki parametreler ve o firmware sürümünde belgelenmiş aralık, birim ve değerler.

load_param_file

Dışa aktarılmış .param dosyasını okur.

recommend_tuning

Harmonik notch, PID ve autotune önerisi. Hiçbir şeyi uygulamaz.

list_checks

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.

  • .tlog dosyası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 tools
analyze_logA
Read-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.

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription
resultsNoPer-check outcomes, including skipped/errored checks.
findingsNoAll findings, sorted by severity (most severe first).
guidanceNoHow 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.
incidentNoOnset/impact summary when the log shows an anomaly while armed; the full event list is available from the incident_timeline tool.
info_countNo
referencesNoDe-duplicated documentation links across all findings.
warn_countNo
log_summaryYes
summary_textNoDeterministic summary skeleton. The LLM enriches this; it never invents findings.
checks_skippedNo
critical_countNo
logging_adviceNoCopter/Heli: LOG_BITMASK bits that are off and whose data a check needed.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_logsA
Read-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.

NameRequiredDescriptionDefault
path_aYes
path_bYes

Output Schema

NameRequiredDescription
addedNoParameters only in log B.
notesNo
path_aYes
path_bYes
changedNoConfiguration parameters whose value differs (user changes).
metricsNoFlight metrics side by side.
removedNoParameters only in log A.
firmware_aNo
firmware_bNo
learned_changedNoValues the autopilot learns or counts itself (STAT_*, MOT_THST_HOVER, gyro offsets...).
firmware_changedNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_reportA
Read-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.

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription
pathYes
markdownYesPaste-ready Markdown: vehicle, what went wrong first, findings with text plots. Contains no GPS positions.

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_paramsA
Read-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.

NameRequiredDescriptionDefault
pathYes
name_globNo

Output Schema

NameRequiredDescription
noteNoCompleteness caveat (e.g. truncated log -> snapshot may be partial).
pathYes
totalNoTotal params available in the source (before filtering).
paramsNo
sourceNo'log' (PARM dump) or 'file' (exported .param).
matchedNoParams returned after the name filter.
documentedNoBundled documented metadata of the returned params (when at most 200 are returned).
metadata_urlNoVersion-specific parameter definitions (apm.pdef.xml) — meanings, ranges, values and bitmasks (not defaults). The LLM should consult this to interpret values.
undocumentedNoReturned params the release documents nowhere: script-added params, typos, or another firmware's params.
metadata_versionNoWhich bundled release `documented` comes from, and how it matches the log's firmware.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_timelineA
Read-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.

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription
pathYes
eventsNo
caveatsNo
onset_sNoTime of the first anomaly while armed.
impact_sNoTime of the crash/impact, when the log shows one.
conditionsNoWARN+ findings that describe the whole flight or configuration (compass statistics, parameters, boot messages, flight-long windows): context, never the onset.
onset_basisNoThe event that marks the onset.
impact_basisNo
log_ended_armedNo
first_anomaly_check_idNoCheck (or 'firmware'/'err'/'mode') of the onset event.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_checksA
Read-onlyIdempotent

List the registered diagnostic checks (the extensible catalogue).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
totalNo
checksNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_eventsB
Read-onlyIdempotent

Decoded ERR/MODE/EV/MSG timeline. kinds filters families (ERR, MODE, EV, MSG); times are seconds.

NameRequiredDescriptionDefault
pathYes
end_sNo
kindsNo
start_sNo

Output Schema

NameRequiredDescription
pathYes
totalNo
eventsNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_fileA
Read-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).

NameRequiredDescriptionDefault
pathYes
firmwareNo
name_globNo

Output Schema

NameRequiredDescription
noteNoCompleteness caveat (e.g. truncated log -> snapshot may be partial).
pathYes
totalNoTotal params available in the source (before filtering).
paramsNo
sourceNo'log' (PARM dump) or 'file' (exported .param).
matchedNoParams returned after the name filter.
documentedNoBundled documented metadata of the returned params (when at most 200 are returned).
metadata_urlNoVersion-specific parameter definitions (apm.pdef.xml) — meanings, ranges, values and bitmasks (not defaults). The LLM should consult this to interpret values.
undocumentedNoReturned params the release documents nowhere: script-added params, typos, or another firmware's params.
metadata_versionNoWhich bundled release `documented` comes from, and how it matches the log's firmware.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_summaryB
Read-onlyIdempotent

Cheap orientation: vehicle, firmware, duration, message counts, flight modes, max altitude, integrity.

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription
pathYes
boardNo
sourceNo'dataflash' (the onboard .bin log) or 'tlog' (a ground station's MAVLink telemetry log).
integrityNo
duration_sNo
flight_modesNo
start_time_sNo
vehicle_typeNo
max_altitude_mNoHighest altitude above home/take-off (m) — not AMSL.
message_countsNo
firmware_versionNo
integrity_detailNo
available_messagesNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_timeseriesB
Read-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.

NameRequiredDescriptionDefault
pathYes
end_sNo
fieldsYes
start_sNo
instanceNo
max_pointsNo
message_typeYes

Output Schema

NameRequiredDescription
noteNo
pathYes
fieldsYes
seriesNoOne value per entry of times_s (aligned by index); null where a record lacks the field.
times_sNo
instanceNoSensor/core instance returned (multi-instance messages only).
downsampledNo
message_typeYes
sample_countNo
available_instancesNoInstances this message type has in the log (e.g. one per IMU/GPS).

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_tuningB
Read-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.

NameRequiredDescriptionDefault
areaNo
pathYes

Output Schema

NameRequiredDescription
pathYes
notesNo
recommendationsNo

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_profileA
Read-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).

NameRequiredDescriptionDefault
pathYes

Output Schema

NameRequiredDescription
pathYes
notesNo
assessmentNoPlain-language physical observations (e.g. 'underpowered').
frame_typeNo
referencesNo
frame_classNo
motor_countNoNumber of lift motors implied by the frame.
vehicle_kindNo
vehicle_typeNo
battery_cellsNoEstimated LiPo cell count (S).
max_voltage_vNo
hover_throttleNoThrottle (0..1) needed to hover; from MOT_THST_HOVER or measured.
frame_type_nameNo
firmware_versionNo
frame_class_nameNo
power_margin_pctNoSpare throttle above hover (100*(1-hover)); low = underpowered.
nominal_voltage_vNo
battery_capacity_mahNo
thrust_to_weight_estimateNoRough max-thrust/weight (~1/hover_throttle).

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 12 tool updatesv0.1.0
    • First observedanalyze_log
    • First observedcompare_logs
    • First observedforum_report
    • First observedget_params
    • First observedincident_timeline
    • First observedlist_checks
    • First observedlist_events
    • First observedload_param_file
    • First observedlog_summary
    • First observedquery_timeseries
    • First observedrecommend_tuning
    • First observedvehicle_profile

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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).

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers