Jet Tracker
Server Details
Brazilian business aviation: registry, owner, flights, base, market, maintenance and sale signals.
- Status
- Healthy
- Uptime
- 83.9% over 62 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 52 tools
Most tools have a distinct purpose and the descriptions are unusually detailed, often cross-referencing the correct alternative tool. However, with 52 tools there are several overlapping clusters that invite misselection, such as fleet vs global fleet vs market search, owner fleet vs owner group vs operator profile, and sale propensity vs signal ranking vs today. The deprecated jt_movements alias for jt_registry_changes adds direct ambiguity.
All tools use a consistent jt_ prefix and snake_case, generally following a subject-action or subject-descriptor pattern. Minor deviations exist: some names are noun-only (jt_status, jt_today) and the deprecated jt_movements does not describe registry changes well. Still, the naming is predictable and readable.
At 52 tools, the surface is far beyond what an agent can reliably navigate as a single MCP toolset, even for a broad aviation-intelligence domain. The set includes a deprecated alias, separate CRUD/watch tools that could be consolidated, and many narrowly differentiated analytics views. This is an extreme mismatch for practical tool selection.
The server covers aircraft lookup, fleet search, ownership, registry changes, market listings, maintenance, costs, airport traffic, watch rules, global registries and status checks. The main gaps are deliberate data limitations, such as no person-name filtering and no airframe/engine hours, but core workflows are well covered.
Available Tools
52 toolsjt_aircraft_baseWhere an aircraft actually sleepsARead-onlyIdempotentInspect
Overnight ranking of one registration over N days (default 365): aerodromes where the aircraft slept: nights = midnights elapsed between each arrival and the next departure from the same aerodrome (an ongoing stay counts up to now, ongoing=true), overnightEvents = stays that crossed at least one midnight, plus share and last arrival, side by side with the inferred hub (hubIcao), the owner city at the Receita and baseUf (the registered state of the owner in the RAB, which is not a base). inferredBase is the top of the ranking and confidence (high/medium/low/none) depends on how many nights were tracked. Answers "where is this aircraft based" honestly: these facts can disagree.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window in days. Default 365. | |
| registration | Yes | Brazilian registration (PP-LMH). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes well beyond them: it defines how nights are counted (midnights between arrival and next departure), how ongoing stays are handled, what overnightEvents means, how confidence is derived, and the caveat that baseUf is the RAB owner state, not a base. This is unusually rich behavioral context.
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?
The purpose is front-loaded, but the body is a long, clause-chained sentence with heavy in-line definitions of return fields, some of which duplicate what the output schema already conveys. It is information-dense but at the cost of readability and structure.
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?
Given a fairly complex analytical tool with an output schema present, the description is complete enough to call correctly and to interpret the 'base' concept's ambiguity. It over-explains return semantics the output schema would carry, but nothing essential for correct invocation is missing.
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 100%, so both parameters (registration and days) are fully documented in the schema, including the default 365 and the 30-730 range. The description restates the window/default but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
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 verb+resource combination ('Overnight ranking of one registration over N days') and clarifies the output concept (aerodromes where the aircraft slept, inferredBase). It is distinguishable from siblings like jt_aircraft_flights and jt_aircraft_history, though the density of jargon requires careful reading.
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 implicitly frames the tool around answering 'where is this aircraft based' and warns that the facts can disagree, which hints at when the result is appropriate. However, it never explicitly names an alternative sibling or states when NOT to use this tool, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_aircraft_flightsFlight history of an aircraftARead-onlyIdempotentInspect
Tracked flights of one Brazilian registration or US N-number in a period (default last 90 days, max 365): departure, arrival, arrivalConfidence (landed, last_seen, reported, inferred, unknown), duration, plus coverage (status never_seen/active/lost, first and last tracked flight, flights on record). Newest first, max 200 per call, paginate with nextCursor. Coverage is partial and a third of Brazilian flights end at strips without ground coverage (see the caveat). US flights come from FR24 for the US business aviation fleet, without the free ADS-B destination inference.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD (default: today). | |
| from | No | Start date YYYY-MM-DD (default: 90 days ago). | |
| limit | No | Default 50. | |
| cursor | No | nextCursor from a previous page. | |
| registration | Yes | Brazilian registration (PR-TBL) or US N-number (N470QS). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses coverage limits ('partial', a third of Brazilian flights end at strips without ground coverage), the data provenance split (US via FR24 for the business aviation fleet, without free ADS-B destination inference), ordering, and page caps. That is exactly the kind of reliability context an agent needs before trusting results.
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 that front-loads the resource and scope, then the return fields, then provenance caveats. The parenthetical token lists are compact rather than wasteful, though the single-block layout makes the caveat easy to skim past.
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-shape explanation is unnecessary, and the description still adds ordering, pagination and data-source caveats. The dangling 'see the caveat' pointer references something the agent may not have, which is the one loose end.
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?
With 100% schema description coverage the baseline is 3; the description earns extra by stating the default window (90 days) and a 365-day maximum that the schema does not encode anywhere. It does not explain the arrivalConfidence/coverage tokens as parameter-adjacent semantics, but those are return values rather than inputs.
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 opening sentence states a specific verb and resource ('Tracked flights of one Brazilian registration or US N-number in a period') and enumerates what is returned. It does not name any of the many sibling tools (jt_aircraft_history, jt_movements, jt_global_fleet_stats) to disambiguate scope, so an agent must still infer whether this or jt_aircraft_history is the right call.
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?
Defaults (last 90 days, max 365, 200 per call) and the pagination pattern are supplied, which implicitly tells the agent how to call it. However, there is no explicit statement of when to prefer this over jt_movements or jt_aircraft_history, and no exclusions; usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_aircraft_historyBrazilian aircraft history (JetFax)ARead-onlyIdempotentInspect
Ownership/operator timeline of a Brazilian-registered aircraft by tail (matricula), the foreign origin when it was imported, and published accidents/incidents (CENIPA/NTSB/ASN). timeline[] is one item per RAB monthly snapshot where the owner and/or operator SET changed (first item is always change=first_seen, the earliest snapshot on record, not an event); dates are the photo where the change was first observed, not the exact day. foreignOrigin is only filled when the RAB recorded a previous foreign mark; country is only set (US) when an FAA deregistration record matches the mark by N-number AND serial number together (N-number alone is reused by the FAA across decades and is not proof by itself). Natural-person names may appear (public RAB data); no personal document (CPF) is ever returned.
| Name | Required | Description | Default |
|---|---|---|---|
| registration | Yes | Brazilian registration, with or without hyphen, any case (PR-TBL, prtbl, PT-XYZ). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds substantial extra behavior: timeline items represent owner/operator changes with change=first_seen semantics, dates are observation dates not event dates, foreignOrigin is only filled on recorded foreign marks, and country=US requires an FAA match on N-number AND serial together. This is exactly the kind of nuance an agent cannot get from the schema or annotations.
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 purpose, then dense qualification clauses that each carry real meaning (timeline semantics, FAA match rule, CPF exclusion). It is long and somewhat run-on, but nearly every sentence earns its 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?
An output schema exists, so return shapes need not be spelled out, yet the description still explains the tricky semantics of timeline[], foreignOrigin, and country that the schema likely cannot convey. Combined with full annotation coverage and a 100%-documented parameter, nothing needed to call this tool correctly is missing.
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 100% and the single parameter already documents hyphen/case tolerance in detail. The description adds only the term 'matricula' as a synonym for the tail, which is marginal beyond the schema. Baseline 3 applies.
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 the precise resource and scope: an ownership/operator timeline for a Brazilian-registered tail, plus foreign origin and published accidents/incidents. This is clearly distinguishable from siblings like jt_aircraft_base (static data) or jt_registry_changes (no accident/origin narrative). An agent can pick this tool 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?
Usage is implied by the content described (history/timeline queries for a Brazilian tail), but the description never states when to prefer this over jt_aircraft_base, jt_registry_changes, or jt_cross_registry, nor any exclusions. It's adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_aircraft_lookupBrazilian aircraft by registrationARead-onlyIdempotentInspect
Full profile of a Brazilian-registered aircraft by its registration mark (matricula: PR-XXX, PT-XXX, PP-XXX, PS-XXX): RAB status, model, year, owner set (names + CNPJs + Receita Federal record with city, CNAE, size, contact and company partners/QSA), operator, owner state (base.uf), lien (gravame), airworthiness (CVA/CA validity), flight activity (ADS-B/FR24), market presence (listings) and a published value reference by vintage (confidence = vintage or model_range). The RAB has no aircraft base: base.uf is the registered state of the owner; the owner city is in owner.rfb.municipio.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | compact (default): QSA limited to decision makers (qsaTotal tells the full count) and operator.rfb collapsed when it is the same company as the owner. full: everything. | |
| registration | Yes | Brazilian registration, with or without hyphen, any case (PR-TBL, prtbl, PT-XYZ). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotent, destructive=false and openWorld=false, so safety is covered. The description adds genuine domain context beyond that: it explains what 'base.uf' actually means (registered state of the owner, not an aircraft base) and where the owner city lives, which prevents a real misinterpretation.
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, but the body is a single sprawling sentence enumerating many returned fields that the output schema already covers. It is dense rather than wasteful, yet part of the enumeration is redundant given a structured output schema.
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 return-field list is optional, and annotations carry the safety profile, so the description only needs to add the domain caveat it does provide. Nearly complete; only explicit sibling routing would push it higher.
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 100%, documenting both 'registration' (format, case, hyphen) and 'detail' (compact vs full behavior). The description repeats registration prefixes but adds no parameter semantics beyond the schema, so baseline 3 applies. The field enumeration describes return values, not inputs.
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 ('Full profile of a Brazilian-registered aircraft by its registration mark') and immediately distinguishes itself from the US sibling jt_us_aircraft_lookup by scoping to Brazilian registrations with example prefixes. An agent can pick this over the batch or US variant without opening a 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?
The lookup-by-registration usage is implied clearly, but there is no explicit when-to-use/when-not guidance and no mention of near siblings like jt_aircraft_lookup_batch or jt_us_aircraft_lookup. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_aircraft_lookup_batchBrazilian aircraft by registration, in batchARead-onlyIdempotentInspect
Same profile as jt_aircraft_lookup for up to 25 registrations in one call (compact detail by default). Each item is found:true with the profile, or found:false with the reason. Debits one lookup per registration from the daily quota.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | Default compact. | |
| registrations | Yes | Brazilian registrations, with or without hyphen, any case. Invalid items come back as found:false with error invalid_registration; duplicates (PR-TBL and prtbl) count once. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely non-obvious behavior on top: partial-failure semantics ('found:true with the profile, or found:false with the reason') and quota cost ('Debits one lookup per registration from the daily quota'). Quota consumption is exactly the kind of side effect 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?
Three sentences, zero filler, and the highest-value facts (sibling equivalence, batch limit, quota cost) are front-loaded. Nothing needs to be read twice.
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, return values need not be described, yet the tool still discloses partial-failure shape and quota debit. Combined with the batch limit and sibling anchoring, an agent has everything needed to call it 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?
Schema description coverage is 100%, so the schema already documents both parameters including detail defaults, max 25 items, hyphen/case tolerance, invalid-item handling and duplicate collapse. The description only restates 'compact detail by default', adding no meaning beyond the schema; baseline 3 applies.
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 the specific resource (aircraft profiles) and the batch scope ('up to 25 registrations in one call'), and explicitly anchors itself to the sibling jt_aircraft_lookup ('same profile as'). An agent can distinguish it from both the single-lookup tool and unrelated siblings immediately.
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?
Names the reference sibling and the batching condition ('up to 25 registrations in one call'), which implies when this is preferable to jt_aircraft_lookup. It leaves the when-not-to-use (e.g. single registration, or needing more than 25) to inference rather than stating it outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_airport_lookupAirport lookupARead-onlyIdempotentInspect
Find an airport by ICAO code, IATA code, city or name (Brazil first): coordinates, elevation, runway length and type. Ranking: exact code > exact city or name > scheduled service / public use > large > medium > small > heliport > has runway on record > has ICAO; rankingReason explains the top pick and alternatives[] lists the rest. Many small strips have no ICAO or runway length on record.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ICAO (SBRJ) ou texto (Santos Dumont, Rio de Janeiro, SDU). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds valuable context beyond that: the ranking priority, the meaning of rankingReason and alternatives[], and a caveat that many small strips lack ICAO or runway length.
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 purpose, followed by ranking details and a data-quality caveat. The three sentences are dense but each carries useful information; the ranking list is long but directly relevant to result interpretation.
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?
Given the single required parameter, rich annotations, and an output schema, the description is mostly complete: it explains query forms, ranking behavior, output fields, and data limitations. The main gap is the absence of usage guidance relative to sibling tools.
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 100% and already documents the query parameter with examples. The description adds some meaning by naming IATA and city/name as valid query types and noting Brazil-first ranking, but does not add syntax or format constraints beyond the schema.
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 (Find) and resource (airport), lists input types (ICAO/IATA/city/name) and returned fields (coordinates, elevation, runway length/type). It is clear what the tool does, but does not explicitly differentiate itself from siblings such as jt_airport_traffic or jt_runway_check.
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 when-to-use guidance or alternatives are provided. The ranking and Brazil-first note describe behavior rather than usage context, leaving the agent to infer when this tool is preferable to sibling airport-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_airport_trafficAircraft that used an airportARead-onlyIdempotentInspect
Which aircraft arrived at or departed from an airport (ICAO) in a period, from tracked flights (ADS-B/FR24) kept by Jet Tracker: arrivals, departures, arrivalsInferred, nights slept there (nights = midnights elapsed between arrival and the next departure, ongoing stays count up to now; overnightEvents = number of stays that crossed at least one midnight), relation (based = hub or 4+ nights, recurring = 3+ movements, occasional), first and last seen, whether the airport is the aircraft inferred hub, plus model, owner set and RAB status. Default period: last 90 days; max 365. Ordered by nights then activity. Max 100 per call, paginate with nextCursor. Coverage is partial (see the caveat). It answers "who flies to my region", not "who is registered in my city".
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD (default: today). | |
| from | No | Start date YYYY-MM-DD (default: 90 days ago). | |
| icao | Yes | Airport ICAO code, 4 letters/digits (SNBR, SBBR, SBKP). City names are not accepted. | |
| limit | No | Default 25. | |
| cursor | No | nextCursor from a previous page. | |
| segment | No | Default executive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: ordering (nights then activity), a 100-per-call cap with nextCursor pagination, and an explicit partial-coverage caveat. The 'see the caveat' reference is vague since the caveat itself is not included, which keeps this from 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 answer ('Which aircraft arrived at or departed...') before the metric definitions. It is a dense block with several parenthetical clauses, but nearly every clause carries real semantic information (nights, overnightEvents, relation thresholds) that an agent needs.
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 analytical tool with a full output schema, the description is close to complete: it covers defaults, limits, ordering, pagination and the derived fields. The only gap is the reference to an unexplained 'caveat' about partial coverage, which the agent cannot resolve from the definition 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 100%, so baseline is 3, but the description explains derived semantics not in the schema: what 'nights', 'overnightEvents', and 'relation' (based/recurring/occasional) mean, plus the period defaults and cap. It does not clarify the segment enum, but the added derived-field definitions push it above 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?
States a precise verb+resource: aircraft that arrived at or departed from a given ICAO airport within a period, drawn from ADS-B/FR24 tracked flights. It explicitly demarcates scope ('who flies to my region', not 'who is registered in my city'), so an agent can separate it from registry-oriented siblings like jt_aircraft_lookup or jt_us_aircraft_lookup.
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 clear context (arrivals/departures analysis for an airport, default 90 days, max 365) and a scope exclusion that routes the agent away from registration-based tools. It stops short of naming an explicit alternative sibling or stating when-not to use it in favour of, e.g., jt_movements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_company_searchFind a company CNPJ by name or email domainARead-onlyIdempotentInspect
Candidate Brazilian companies (CNPJ) for a free-text company name (trade name, legal name or group name; accents, case and legal suffixes such as Ltda, S.A., Participações are ignored) and/or an email or website domain, ranked by confidence (0 to 1) with matchReason[] in Portuguese. Built for leads that give a company name or a corporate email but no CNPJ. Coverage is companies linked to Brazilian aircraft (owners, operators, their partner companies), not every company in Brazil: an empty list means no known aircraft link. Each candidate carries hasAircraft; the top one carries its economic group when this account includes jt_owner_group. Personal email domains (gmail etc.) are ignored. Max 10 candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Company name as the lead wrote it, or a CNPJ / 8-digit root for a direct lookup. CPF is not accepted. | |
| uf | No | Brazilian state (2 letters), to break ties. | |
| city | No | City, to break ties. | |
| limit | No | Default 5. | |
| domain | No | Email or website domain, e.g. empresa.com.br (a full email or URL is also accepted). | |
| includeGroup | No | Economic group of the top candidate (default true; needs access to jt_owner_group). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent and non-open-world, so the safety profile is covered. The description adds substantial behavior beyond that: confidence ranking 0–1, matchReason[] in Portuguese, max 10 candidates, empty-list semantics, and the coverage boundary of the underlying dataset.
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?
It is a single dense paragraph, but the key facts (what it matches, coverage restriction, ranking, cap) are front-loaded and every clause carries information. Marginal density could be trimmed, but nothing is wasted.
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-value shape need not be explained, yet the description clarifies the two output-relevant fields (matchReason[], hasAircraft) and the group enrichment. For a 6-param, 0-required search tool with annotated safety, nothing an agent needs is missing.
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 100%, so the baseline is 3. The description still adds real meaning: normalization rules for q (accents, case, legal suffixes such as Ltda/S.A./Participações ignored), domain accepting full email/URL, and includeGroup's dependency on jt_owner_group access.
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 (candidate/find) and resource (Brazilian companies / CNPJ) and the exact input modalities accepted (free-text name, email or website domain). It also delineates itself from generic company registries by scoping coverage to companies linked to Brazilian aircraft.
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?
Explicitly names the situation it is built for ('leads that give a company name or a corporate email but no CNPJ') and states a when-not via coverage limits (an empty list means no known aircraft link) and ignored inputs (personal email domains). It stops short of routing to a named alternative sibling for the case where a CNPJ is already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_compute_tcoTotal cost of ownership (comparator)ARead-onlyIdempotentInspect
Total cost of ownership across FIVE operating models (own, fractional, charter, jetcard, invest + charter) for a model with a full cost profile, given hours per year, horizon and opportunity rate: average annual and hourly cost, undiscounted horizon total, NPV and the year-by-year cashflows of every scenario (sign convention: outflows negative), plus assumptions (variable per hour and fixed per year from the SAME canonical cost engine as jt_model_specs, costModelVersion, fractional hours included). Accepts the catalog slug or any alias (phenom-300, embraer-phenom-300e, hawker 400xp); comparadorProfiles in jt_model_search lists the five profiles. Values in USD; Brazilian opportunity rate (CDI/Selic) by default.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Modelo com calculadora completa: slug de catálogo (phenom-100, embraer-phenom-300, beechcraft-hawker-400xp, leonardo-aw109-power, airbus-h125), slug do perfil (embraer-phenom-100, leonardo-aw109), alias, família ou nome. A resposta diz em model qual perfil foi usado. | |
| horizonYears | No | Horizonte da comparação em anos: 1, 3, 5 ou 10. Default 5. | |
| hoursPerYear | Yes | Horas voadas por ano (10-600, limite do comparador). | |
| opportunityRatePct | No | Taxa de oportunidade do capital (CDI/Selic). Default 12% BR 2026. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/no-destruction, and the description adds substantial context beyond them: the exact output set (annual and hourly averages, horizon total, NPV, year-by-year cashflows), the sign convention (outflows negative), the assumptions block, the costModelVersion, and the default Brazilian opportunity rate. This is rich disclosure for a pure-read comparator.
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, but the entire specification is crammed into one run-on sentence of roughly 130 words mixing inputs, outputs, assumptions, aliasing and currency. Every clause is informative, yet the structure makes it hard to parse, so conciseness is only adequate.
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 four-parameter, read-only comparator with an output schema, the description covers everything an agent needs: valid input domain, prerequisite cost profile, alias acceptance, currency and default rate, output contents and sign convention, plus cross-references to the sibling tools that supply profiles and specs.
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 100%, so 3 is the baseline, but the description adds real meaning: it confirms alias tolerance with concrete examples (phenom-300, embraer-phenom-300e, hawker 400xp) and notes that the response reports which profile was actually used via its model field. The hours/horizon/rate semantics themselves are already fully covered by the schema.
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 (compute total cost of ownership) and pinpoints the exact scope: five operating models on a model with a full cost profile. It distinguishes itself from siblings by naming jt_model_specs as the shared cost engine and jt_model_search as the source of comparadorProfiles, so an agent can place it precisely in the toolset.
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 prerequisite — the model must have a full cost profile — and routes the agent to jt_model_search (comparadorProfiles) to discover the five valid profiles. It never states when NOT to use it or contrasts it with jt_trip_cost, so the guidance is contextual rather than exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_cross_registrySame airframe in other registriesARead-onlyIdempotentInspect
Given a registration (Brazilian PR-/PT-, US N-number, or CA/AU/NZ/MX) or a serial number, find the same airframe in the other registries Jet Tracker indexes (Brazil, USA, Canada, Australia, New Zealand, Mexico), matched by serial + compatible manufacturer/model. Traces an aircraft moving between countries. Serial numbers repeat across models (see the caveat).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Registration mark or serial number (MSN). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds real behavioral value beyond them: the match algorithm (serial + compatible manufacturer/model) and the caveat that serial numbers repeat across models, which warns the agent about false positives.
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 dense sentences, front-loaded with purpose and inputs. The trailing '(see the caveat)' is slightly awkward since no separate caveat section exists, but the substance is tight and earns its 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 single-parameter, read-only lookup with a 100%-covered schema and an output schema, the description supplies everything the agent needs: accepted inputs, matching logic, target registries, and a false-positive caveat. Nothing material is missing.
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 100% and there is only one parameter, so the baseline would be 3. The description goes beyond the schema by enumerating accepted input formats (Brazilian PR-/PT-, US N-number, CA/AU/NZ/MX registrations, or a serial), which usefully clarifies what a valid 'query' looks like.
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 (find the same airframe across registries) and scopes it to the exact registry set Jet Tracker indexes. The 'traces an aircraft moving between countries' phrase plus the matching rule (serial + compatible manufacturer/model) distinguishes it clearly from siblings like jt_aircraft_lookup and jt_registry_changes.
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?
Clearly conveys when this tool is the right one: when you have a registration or serial and want the counterpart airframe in another registry. It does not explicitly name alternatives such as jt_aircraft_lookup for single-registry lookups, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_fleet_searchSearch the Brazilian fleetARead-onlyIdempotentInspect
List Brazilian-registered aircraft by COMPOSED filters, one call per question: models (array of catalog slugs, families or names, up to 30) or a single model, category (jet, turboprop, helicopter, piston or a fine category), owner state (uf), owner city (municipio, from the Receita Federal record), owner CNAE prefix (cnaePrefix: 3316 maintenance, 5111 air taxi, 64 financial), owner size (porte), status, RBAC (91 private, 135 air taxi, 121 airline, 137 agricultural), year range, lien (gravame), owner type (pj/pf), CVA window (cva + cvaDays), tracked hours in 365 days (hours365Min/Max), days since last tracked flight (idleDaysMin/Max) and inferred hub (hub). Each row carries ownerRecords (Receita record per owner CNPJ: city, CNAE, size, contact), ownerRole (what the owner company is), airworthiness (CVA/CA), flightActivity (tracked summary), riskFlags and sameAirframeAs (other live registrations of the same physical aircraft: count once). Deterministic order by registration; paginate with nextCursor. Max 100 per call; the daily quota may truncate (quotaTruncated). Segment: when omitted, a piston category means "all", a model with no aircraft in the executive cut switches to "all", otherwise executive; every answer says segmentApplied and outsideSegment (how many more match outside the cut). rbac 137 reads the agricultural fleet (Jet Tracker Agro cut) and returns operators with their fleet. When this account cannot list, preview.total still says how many aircraft match. Filtering by a person's name is not available.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Registered state (UF) of the owner, e.g. SP, MG, PR. Not where the aircraft is based: the RAB has no base. | |
| cva | No | CVA window: expired, expiring (within cvaDays, default 90), valid, unknown (RAB has no date). CVA = Certificado de Verificação de Aeronavegabilidade, the airworthiness verification certificate (not the CA, Certificado de Aeronavegabilidade). | |
| hub | No | Inferred home airport (ICAO) from tracking, e.g. SBBR. | |
| rbac | No | 91, 91k (shared/fractional: ANAC CF_OPERACIONAL 91K or aircraft operated by a certified RBAC 91K program, see program field), 135 (air taxi), 121 (airline), 137 (agricultural). | |
| limit | No | Default 25. | |
| model | No | Catalog slug (embraer-phenom-300), family slug, slug with or without manufacturer prefix, ICAO type code (BE40) or free text ("citation", "king air"). Free text matches whole words: "hawker 400" does not match Hawker 4000. | |
| porte | No | Owner size at the Receita: ME, EPP or DEMAIS. | |
| scope | No | family (default): a model resolves to its whole family (Hawker 400XP = Beechjet 400 family, same total from any alias). variant: only the exact variant matched. | |
| cursor | No | nextCursor from a previous page. | |
| models | No | Several models at once (union), e.g. the models of a maintenance rating. Up to 30. | |
| status | No | Default: operational + reserve + suspended (cancelled never returns). | |
| yearTo | No | Latest year of manufacture (inclusive), e.g. 2020. | |
| cvaDays | No | Window in days for cva=expiring. Default 90. | |
| gravame | No | true = has a registered lien; false = no lien. | |
| segment | No | Omit to let the filter decide (see segmentApplied in the answer). executive, geral (general aviation), comercial, militar or all. | |
| category | No | Group (jet, turboprop, helicopter, piston) or fine category (vlj, light, midsize, super_midsize, large, ultra_long_range, turboprop_single, turboprop_twin_light, turboprop_twin_medium, heli_piston, heli_light_turbine, heli_medium_turbine, heli_heavy_turbine, piston_single, piston_twin). | |
| yearFrom | No | Earliest year of manufacture (inclusive), e.g. 2008. | |
| municipio | No | Owner city as registered at the Receita Federal (accent/case insensitive): "Luís Eduardo Magalhães", "Sao Paulo". Only companies (CNPJ) have a city. | |
| ownerType | No | pj = company (CNPJ), pf = natural person. | |
| cnaePrefix | No | Owner main CNAE prefix at the Receita: 3316 maintenance shops, 5111/5112 air transport, 64 banks and lessors, 6462 holdings. | |
| hours365Max | No | Maximum tracked flight hours in the last 365 days. | |
| hours365Min | No | Minimum tracked flight hours in the last 365 days. | |
| idleDaysMax | No | Maximum days since the last tracked flight (e.g. 7 = flew in the last week, as far as tracking sees). | |
| idleDaysMin | No | Minimum days since the last tracked flight (e.g. 30 = parked a month or more, as far as tracking sees). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), and the description layers on non-obvious behavior the schema cannot express: max 100 per call, "the daily quota may truncate (quotaTruncated)", segment auto-selection with segmentApplied/outsideSegment, RBAC 137 returning operators with their fleet, and preview.total still reporting matches when the account cannot list. It also warns that sameAirframeAs lists other live registrations of the same physical aircraft and must be counted once — exactly the trap an agent would fall into.
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?
Every clause carries information, but it is delivered as one long undifferentiated paragraph with parenthetical asides, and the important segment fallback logic is buried mid-stream after the filter list. It would be considerably more usable as two or three front-loaded blocks (what it lists / how segment resolves / limits and gaps).
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 24-parameter, zero-required search tool with an output schema, this covers the things an agent cannot get elsewhere: pagination via nextCursor, row shape (ownerRecords, ownerRole, airworthiness, flightActivity, riskFlags, sameAirframeAs), deterministic registration ordering, quota truncation, and the behavioral caveat about segmentApplied. Nothing needed to call it correctly is absent.
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 100% and the description's parameter content largely restates what the schema already documents (CNAE prefixes 3316/5111/64, RBAC 91/135/121/137, cite lists). The one genuine addition is the segment fallback rule — piston category defaults to "all", a model absent from the executive cut switches to "all" — which is semantics of the segment parameter the schema does not state. Baseline 3 is appropriate for a fully documented schema.
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?
"List Brazilian-registered aircraft by COMPOSED filters" gives a specific verb, resource and geographic scope in the first clause, which separates it from jt_global_fleet_search and from single-entity siblings like jt_aircraft_lookup. The enumeration of filterable dimensions (owner state, CNAE, RBAC, tracked hours, hub) makes the tool's surface unambiguous.
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 sets a clear usage mode ("one call per question", union through models up to 30, paginate with nextCursor) and states an explicit exclusion: "Filtering by a person's name is not available." What is missing is explicit routing to siblings — it never says to use jt_owner_fleet for an owner's full fleet or jt_global_fleet_search outside Brazil, so the agent must infer those boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_fleet_statsBrazilian fleet stats for a modelARead-onlyIdempotentInspect
Brazilian fleet of a catalog model (slug or alias, whole family; model.matchedBy says how it resolved) from the RAB. Two separate rulers: registryTotal (= total) counts REGISTRATIONS in every status, cancelled included (history); alive counts the LIVE fleet (operational + mark reservation + suspended) and is the headline. airframes and aliveAirframes deduplicate by serial (physical aircraft). byRbac is the split over the REGISTRY universe and byRbacAlive over the LIVE universe. Also as_of (RAB snapshot date), source.url (page where a human checks the records) and scope (the exact cut). Live count, not a survey.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug do modelo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond that: the two counting universes (registry vs live), what each includes and excludes (cancelled registrations; operational + mark reservation + suspended), serial-level dedup, the as_of snapshot date, and the source URL for verification.
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 headline metric and efficient, but the long parenthetical run-ons and stacked clauses take effort to parse; a small amount of restructuring would improve it without losing content.
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, return fields need not be explained, yet the description still labels the key metrics, which makes the response interpretable. The remaining gap is the absent routing guidance against the sibling stats/search tools.
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 100% (the slug description is minimal), and the description adds real meaning: the slug may be an alias, resolves to a whole family, and model.matchedBy reports how resolution happened. That goes beyond the schema's bare 'Slug do modelo.'
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?
It states a specific verb+resource: Brazilian fleet counts for a catalog model drawn from the RAB, with named metrics (registryTotal, alive, airframes). The 'Brazilian' qualifier implicitly separates it from jt_global_fleet_stats, but the sibling is never named, so differentiation requires inference.
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?
Usage is only implied: it returns a count for a model, so an agent can guess it is the aggregate-stat call versus jt_fleet_search or jt_aircraft_lookup. It never states when to prefer this over jt_global_fleet_stats, nor any prerequisite about resolving a slug first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_fractional_fitFractional program fit scoreARead-onlyIdempotentInspect
Score 0-100 of how well one registration fits a fractional/shared-ownership program, as a transparent sum of public-record evidence: owner role (natural person or personal holding), owner fleet size (a single-aircraft owner is a stronger fit), aircraft age, tracked utilization in the last 365 days, owner state (Southeast/South demand pool) and model category (light jet, vlj, midsize or turboprop). Each contributing fact is in evidence[] with its weight; coverage[] says which inputs existed. It is a heuristic fit, not an appraisal or an offer.
| Name | Required | Description | Default |
|---|---|---|---|
| registration | Yes | Brazilian registration (PR-TBL). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so safety is covered. The description adds meaningful context beyond that: the score is a transparent weighted sum, contributing facts appear in evidence[] with weights, coverage[] reveals which inputs existed, and the result is explicitly heuristic rather than authoritative.
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?
The purpose and score range are front-loaded, and the inventory of scoring factors is compressed into one clause. It is dense but nearly every element (evidence[], coverage[], the heuristic disclaimer) carries information an agent would otherwise have to guess.
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, yet the description still clarifies the shape of evidence[] and coverage[], which helps interpretation. Combined with the annotations covering safety, an agent has enough to invoke and read the tool 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?
Only one parameter and schema description coverage is 100%, so the schema carries the parameter burden (including the Brazilian registration format). The description adds only that one registration is scored, which is inherent in the purpose statement, so the baseline 3 is appropriate.
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: a 0-100 fit score for one registration against a fractional/shared-ownership program, and enumerates the scoring inputs. It is clearly a per-registration scoring tool, distinct from market-level siblings like jt_fractional_market, though 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?
Usage is implied by the scoring factors (owner role, fleet size, age, utilization, state, model category) but there is no explicit when-to-use guidance or routing to an alternative such as jt_fractional_market. The negative framing ('not an appraisal or an offer') narrows interpretation but does not tell the agent when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_fractional_marketFractional / shared-ownership market (RBAC 91K)ARead-onlyIdempotentInspect
Brazilian RBAC 91K shared/fractional ownership program: ANAC-certified administrators (EA, Especificação Administrativa) cross-referenced with their LIVE RAB fleet by CNPJ root, plus monitored non-certified operators (e.g. Flapper, no EA on file). Views: operators (roster: brand, legal name, CNPJ roots, EA revision/date, initial certification, authorized models, key people, owner states of the fleet (baseUfs), live fleet totals, certified/monitored flag), aircraft (live 91K fleet, one row per physical aircraft, paginated), models (fleet_by_model aggregated across operators, no double count for a co-operated tail), timeline (EA revision changelog + delisting events, all operators merged, newest first), bases (operator x owner state counts; the RAB has no aircraft base). Filter any view to one operator with operator (slug, brand, legal name or CNPJ/root). EA (Especificação Administrativa) data is the ANAC administrative specification for shared/fractional ownership programs (RBAC 91K), from published SEI documents: it authorizes MODELS, not tails. Fleet counts and the aircraft view are the RAB cross-referenced by the operator CNPJ root (getFractionalView), not the EA text. "monitored" operators (e.g. Flapper) run a shared-use program with no ANAC EA on file: they are never certified, and carry certified:false.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | One of operators, aircraft, models, timeline, bases. Default operators. | |
| limit | No | aircraft view only. Default 25. | |
| cursor | No | aircraft view only. nextCursor from a previous page. | |
| operator | No | Restrict to one operator: slug (aliar), brand or legal name, or CNPJ / 8-digit root. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds real provenance context beyond that: EA authorizes MODELS not tails, fleet counts come from the RAB cross-referenced by CNPJ root (getFractionalView), and 'monitored' operators are never certified. That's meaningful behavioral context, though it doesn't cover pagination or provenance caveats for the timeline view.
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?
The scope and view inventory are front-loaded, which is right for a multi-view tool of this complexity. It is dense but largely earns its length; there is some redundancy in the trailing sentences repeating what EA is and that counts come from the RAB, which could be tightened.
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 needn't be described. Given the multi-view complexity, the description supplies the view inventory, filter semantics, and data-provenance caveats (EA vs RAB, monitored vs certified) an agent needs to call it correctly, leaving no material 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 100%, so the baseline is 3. The description goes further by explaining the semantics behind each view value (what 'models' aggregates vs 'bases' counts) and clarifying that `operator` accepts slug, brand, legal name, or CNPJ/root, which adds interpretive value over the terse schema entries.
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 (Brazilian RBAC 91K fractional/shared-ownership market data) and enumerates the five views with their exact contents (operators roster, per-aircraft fleet, model aggregates, timeline changelog, base counts). This is specific enough that an agent can distinguish it from jt_fleet_search, jt_operator_profile, and jt_market_listings without opening any 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?
The description explains what each view returns and that `operator` restricts any view to a single operator, which implies usage. However, it never states when to choose this tool over the many related siblings (jt_fleet_search, jt_operator_profile, jt_operators_stats) or any when-not condition, so the routing guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_fuel_pricesJet fuel prices, Brazil and USARead-onlyIdempotentInspect
Latest jet fuel reference prices in Brazil (ANP weekly national average for QAV/Jet A-1, R$ per liter) and the US (EIA Gulf Coast spot), both also in USD per gallon and per liter, the Brazil premium over the US in percent, the USD/BRL PTAX, monthly averages for the last N months (default 12, max 60) and the marked market events in that window. Wholesale references, not into-plane prices at a given airport.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | Monthly history window. Default 12. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly/idempotent/non-destructive annotations already covering the safety profile, the description adds real context: the underlying data sources and their vintage (weekly ANP average, spot EIA), the unit conversions returned, and the scope caveat about wholesale vs into-plane pricing. It does not state refresh cadence or staleness of the 'latest' values, which is the one behavioral gap.
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?
It is one front-loaded sentence that leads with the resource and its two source markets, then layers units, derived metrics, the history parameter, and finally the scope caveat. Dense but almost every clause carries decision-relevant information; it is slightly run-on and would read better split into two sentences.
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-field explanation is unnecessary, and annotations cover the safety profile. The description supplies what those structured fields cannot: data provenance, unit conventions, the derived premium/PTAX outputs, and the wholesale-vs-into-plane limitation. Nothing an agent needs before calling is missing.
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 100% and the single optional parameter is documented in the schema, so baseline would be 3. The description earns a point by explaining what the window governs — both the monthly averages and the set of marked market events returned — plus restating the default 12 / max 60 in context.
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 (jet fuel reference prices) with named sources (ANP QAV/Jet A-1 weekly average, EIA Gulf Coast spot), the units returned, derived metrics (Brazil premium, USD/BRL PTAX), and the historical window. An agent can tell this apart from siblings like jt_price_history or jt_market_index without opening any 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?
The closing clause 'Wholesale references, not into-plane prices at a given airport' explicitly rules out a class of use case, steering an agent away from using it for airport-level cost modeling. It does not name a sibling alternative (e.g. jt_trip_cost or jt_compute_tco) for those cases, so routing is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_global_fleet_searchSearch the world fleet (off-market prospecting)ARead-onlyIdempotentInspect
List aircraft across every registry Jet Tracker indexes (BR, US, CA, AU, NZ, MX, AT, CH, GG, IE, IM, KY, LU: Brazil RAB, US FAA and national registries) by model (catalog slug, family or name, up to 30) or category, plus year range, countries, status, owner kind and offMarket (true = no active listing linked by Jet Tracker). Built for off-market prospecting such as "Global 6000 2014-2016 not listed, worldwide". Each row carries: model with match quality (catalog, inferred_by_serial, designation), year (from the registry or inferred from the same airframe in another registry, with the source mark), owner kind and name (natural persons are never named; US registrant address with how many aircraft share it, which exposes trust companies), market.listedNow, sampled worldwide ADS-B activity (adsb.lol: days seen, last callsign, operator designator and name), Brazil-only signals (tracked flights, sale propensity score), last owner change in the registry changelog, sameAirframeAs (count once) and factual signals. unknownYear counts matches left out of a year filter because no year is known. Deterministic order (country, registration); paginate with nextCursor; max 100 per call; the daily quota may truncate (quotaTruncated). Brazilian detail (owner QSA, contact, CVA) is not in these rows.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 25. | |
| model | No | Catalog slug (global-6000), family slug or name ("g550", "king air 360"). | |
| cursor | No | nextCursor from a previous page. | |
| models | No | Several models at once (union). Up to 30. | |
| status | No | Default: operational + reserve. In US rows, reserve is FAA status code R (registration pending), not a mark reservation. | |
| yearTo | No | Latest year of manufacture (inclusive). | |
| category | No | Group (jet, turboprop, helicopter, piston) or fine category (vlj, light, midsize, super_midsize, large, ultra_long_range, turboprop_single, turboprop_twin_light, turboprop_twin_medium, heli_piston, heli_light_turbine, heli_medium_turbine, heli_heavy_turbine, piston_single, piston_twin). Model or category is required. | |
| yearFrom | No | Earliest year of manufacture (inclusive). Uses the registry year, or the inferred one when the registry has none. | |
| countries | No | ISO2 codes of the registries to search, uppercase. Default: all indexed registries. | |
| offMarket | No | true = only aircraft with no active listing linked by Jet Tracker; false = only listed ones. Omit for both. | |
| ownerKind | No | company, trust_or_lessor (bank, lessor or trustee), government, individual, unknown. | |
| includeUnknownYear | No | Include rows with unknown year even when yearFrom/yearTo is set (default false: unknownYear counts what the year filter left out). Each row carries year.confidence: registry, inferred or unknown. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: deterministic ordering, nextCursor pagination, a 100-row cap, a daily quota that can silently truncate (quotaTruncated), how year is inferred from another registry with a source mark, and how unknownYear is counted. It also discloses a meaningful privacy behavior (natural persons are never named) and trust-company exposure via shared registrant addresses.
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?
The purpose is front-loaded and the filter list is useful, but the second half enumerates per-row return fields in long run-on prose even though an output schema exists, so a meaningful share of the text is duplicative. The information is dense but not well structured for scanning.
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 12-parameter, optional-nothing search tool, it covers the operational envelope an agent needs: quota truncation, pagination, ordering, required model/category, unknown-year handling, and an explicit statement of what is out of scope. Nothing that would change how the agent calls it is missing.
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 100%, so baseline is 3, but the description adds semantics the schema does not: offMarket is tied to whether any active listing is linked by Jet Tracker, ownerKind behavior around individuals, and year inference/confidence. Some of it (offMarket, status reserve) duplicates the schema text almost verbatim, which holds it below 5.
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 aircraft across every registry Jet Tracker indexes') plus the exact filter surface (model/category, year range, countries, status, ownerKind, offMarket). It also bounds the scope relative to siblings by noting that Brazilian detail (owner QSA, contact, CVA) is deliberately absent from these rows, which is what separates it from the Brazil-oriented fleet tools.
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 an explicit intended use case ('Built for off-market prospecting such as "Global 6000 2014-2016 not listed, worldwide"') and the hard precondition that model or category is required. It stops short of naming the sibling tool to use instead when Brazilian detail is wanted, leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_global_fleet_statsGlobal factory deliveries (GAMA)ARead-onlyIdempotentInspect
Worldwide general aviation factory shipments from the GAMA Shipment Report (2005 to the current quarter): view "industry" (jets, turboprops, pistons, turbine helicopters and billings by year), "regions" (business jets by region), "oems" (by manufacturer) or "models" (by model group, filter by oem or query). Deliveries, not fleet in service; current year is partial.
| Name | Required | Description | Default |
|---|---|---|---|
| oem | No | Manufacturer filter (embraer, textron, bombardier, gulfstream, dassault, pilatus...). | |
| top | No | Max rows for oems/models. Default 15. | |
| kind | No | For models view. Default jet. | |
| view | Yes | industry = shipments and billings by aircraft type; regions = by world region; oems = ranking by manufacturer; models = ranking by model (use kind, oem, query). | |
| query | No | Model text filter for the models view (phenom, citation, g650). | |
| since | No | First year to include. Default: last 10 years. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely useful data context the annotations cannot supply: the source report, the historical window beginning 2005, and the important caveat that the current year is partial. It stops short of explaining pagination or default row behavior beyond what the schema states.
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 whose clauses all carry information: source, scope, enumeration of views, and the two disambiguating caveats. It is front-loaded correctly, though the nested parenthetical list makes it slightly harder to scan than a short lead plus bullets would be.
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 prose, and the description covers source, coverage window, view semantics, and the partial-year caveat. What is missing is only marginal: nothing about row limits or how the views rank/report, which the schema partly covers via top.
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 100%, so the baseline is 3, but the description goes further by mapping parameters to the view that consumes them (oems/models for top and oem, kind and query for models). That cross-parameter relationship is not captured in the flat schema and materially helps correct invocation.
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 (worldwide general aviation factory shipments), the source (GAMA Shipment Report), the time span (2005 to current quarter), and the four selectable views. It also pre-empts confusion with the sibling fleet tools by stating 'Deliveries, not fleet in service,' so an agent can separate it from jt_fleet_stats or jt_global_fleet_search without opening a 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?
The description enumerates what each view returns and which filters apply to which view ('models' uses oem or query), giving clear selection context. It also implicitly excludes fleet-in-service questions. However, it never explicitly names a sibling tool to prefer for those alternative questions, so routing is inferred rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_ground_eventsLong stays on the groundARead-onlyIdempotentInspect
Stays of 7+ days (minDays) at an airport without a following tracked departure, for one registration or for one airport (at least one is required). Each event says the airport, arrival, departure (null and ongoing=true if still there), days, whether it is the aircraft hub (atHub), and coverageGap=true when the next departure was seen from a different airport (the aircraft moved unseen: not a real stay). Useful to see where an aircraft spends long periods away from home (often a maintenance shop) and which aircraft are parked at a given airport. Default period: last 90 days; max 365. Max 100 per call. Tracked flights only (see the caveat).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD (default: today). | |
| from | No | Start date YYYY-MM-DD (default: 90 days ago). | |
| icao | No | One airport (ICAO): aircraft that stayed there minDays or more. | |
| atHub | No | true = only stays at the aircraft inferred hub (home parking); false = only stays AWAY from hub (maintenance prospecting: use false). Omit for both. | |
| limit | No | Default 25. | |
| cursor | No | nextCursor from a previous page. | |
| minDays | No | Minimum stay in days. Default 7. | |
| ongoing | No | true = only stays still in progress (aircraft is there now, as far as tracking sees); false = only finished stays. Omit for both. | |
| segment | No | Default executive for an airport, all for a registration. | |
| registration | No | One Brazilian registration (PR-CON). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, so the bar is lower; the description adds real behavioral context beyond them: tracked-flights-only scope, default 90-day window, 365-day max, 100-per-call cap, cursor paging, and the meaning of coverageGap=true and departure=null/ongoing=true. The dangling 'see the caveat' reference adds no information.
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?
Dense but front-loaded: the core definition leads, then event fields, then use cases, then limits. Every sentence carries information, though the paragraph is long enough that a reader must work through it to reach the operational constraints.
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 annotations, a full input schema, and an existing output schema, the description supplies what's needed: the at-least-one-param rule, defaults, caps, and the coverageGap caveat semantics. The unexplained 'see the caveat' pointer is the only loose end.
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 100%, so baseline is 3, but the description adds meaning the schema cannot express: it surfaces that at least one of registration or icao is required (the schema lists zero required params) and restates the default period and record cap. It doesn't clarify the segment default switch beyond what the schema says.
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 precise verb+resource: stays of 7+ days at an airport without a following tracked departure, scoped to one registration or one airport. It also enumerates what each event contains (airport, arrival, departure, days, atHub, coverageGap), making it clearly distinguishable from siblings like jt_movements or jt_maintenance_signal.
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 names concrete use cases ('where an aircraft spends long periods away from home (often a maintenance shop)' and 'which aircraft are parked at a given airport') and states the cardinality constraint that at least one of registration/icao is required. It does not, however, point to an alternative sibling when the agent wants a different view (e.g. maintenance-specific signals).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_import_signalsAircraft being imported into BrazilARead-onlyIdempotentInspect
Brazilian mark reservations (reserva de marca) that appeared in the RAB in a period AND whose airframe exists in a foreign registry (FAA N-number or CA/AU/NZ/MX), matched by serial number + compatible model. One signal per physical AIRFRAME: when the same serial got several reservations (a broker reserving PS-XXX, PS-YYY and PR-ZZZ for one Learjet), registrations[] lists them all and airframeCount is distinct from registrationCount. This is the import signal: an aircraft entering Brazil, useful for brokers, lenders and insurers. Max 60 per call; scans up to 200 reservations per page, paginate with nextCursor. It is a signal, not a completed transfer (see the caveat).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date, YYYY-MM-DD. Default: today. | |
| from | Yes | Start date, YYYY-MM-DD. | |
| limit | No | Default 20. | |
| cursor | No | nextCursor from a previous page. | |
| includeUnmatched | No | Also return reservations with no foreign twin found (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld=false, and the description still adds real operational context: the one-signal-per-airframe de-duplication rule, that registrations[] aggregates multiple reservations and airframeCount differs from registrationCount, the 60-row cap, and the 200-reservation scan per page with nextCursor pagination. That is exactly the behavioral detail annotations cannot 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?
A single dense paragraph, front-loaded with the matching definition before the operational limits and the broker example. Every clause carries information, though the parenthetical PS-XXX/PS-YYY/PR-ZZZ example and the dangling 'see the caveat' reference cost it a point.
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 5-parameter, output-schema-backed signal tool this covers what matters: what qualifies as a hit, how hits are de-duplicated, result caps and pagination, and the semantic boundary between a reservation signal and a completed transfer. Nothing an agent needs to call it correctly is missing.
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 100%, so the binding baseline is 3; the description rises above it by explaining pagination mechanics ('Max 60 per call; scans up to 200 reservations per page, paginate with nextCursor') and the aggregation semantics that explain why one result row can cover several registrations. It does not address includeUnmatched, but the schema already documents that flag.
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 precise resource and the exact join rule: Brazilian mark reservations in the RAB whose airframe matches a foreign registry entry (FAA N-number or CA/AU/NZ/MX) by serial + compatible model, and labels the output 'the import signal'. It does not, however, name or distinguish itself from near-neighbours such as jt_cross_registry or jt_registry_changes in a 40-tool sibling set, which keeps it short of a 5.
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?
Usage is only implied. The target audience is named ('useful for brokers, lenders and insurers') and a caveat is gestured at ('It is a signal, not a completed transfer'), but there is no explicit when-to-use vs. when-to-use-an-alternative guidance and the referenced caveat is never actually stated. An agent can infer the use case but gets no routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_maintenance_signalMaintenance signals of an aircraftARead-onlyIdempotentInspect
Composes what is known about one registration into maintenance signals: CVA/CA validity (RAB), stays of 5+ days away from hub at aerodromes with a certified shop (RBAC 145, ANAC list), idle days, heavy or falling tracked utilization, coverage status and owner status. Each signal has a kind, a severity and the facts behind it. It never estimates an inspection due date or airframe hours: those are not in the data. The signals are hints to prioritise outreach, not facts about the aircraft.
| Name | Required | Description | Default |
|---|---|---|---|
| registration | Yes | Brazilian registration (PR-TBL). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds substantial behavioral context beyond them: it explicitly disclaims what it will NOT do ('never estimates an inspection due date or airframe hours: those are not in the data') and characterizes each signal's structure and epistemic status (kind, severity, underlying facts; hints rather than facts). This is exactly the honesty about limitations that annotations cannot carry.
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?
Three sentences, front-loaded with the composition of signals, then limitations, then framing. The middle enumeration is dense but each clause maps to a real signal; the closing caveat earns its place. Minor verbosity from the parenthetical domain references, but 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?
With an output schema present, return-value detail is unnecessary, and the description still covers signal composition, structure, and the critical data-limitation caveats. For a single-parameter, read-only analysis tool, an agent has everything needed to invoke it and interpret results 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?
There is a single parameter with 100% schema description coverage, including the Brazilian format example and length bounds, so the schema already carries the parameter semantics. The description adds nothing about the registration argument, leaving the baseline 3 appropriate.
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 opens with a precise verb+resource ('Composes what is known about one registration into maintenance signals') and enumerates the concrete signals produced (CVA/CA validity, RBAC 145 shop stays, idle days, utilization trends, coverage/owner status), so the agent knows exactly what comes back. It is clearly distinct from siblings like jt_aircraft_base or jt_aircraft_history by domain, though it never names an alternative 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 frames the output's intended use ('hints to prioritise outreach, not facts about the aircraft'), which implies when the tool is useful. However, it does not state when to prefer it over siblings such as jt_aircraft_history or jt_aircraft_base, nor any exclusions, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_market_indexJet Tracker Index: share of the fleet for saleARead-onlyIdempotentInspect
Jet Tracker Index for the Brazilian used business aviation market (frozen monthly edition, the same numbers as jettracker.com.br/indice): per segment, the fleet base (operational plus suspended in the RAB), how many distinct aircraft are for sale as a range (low, central, high), that range as a share of the fleet, and the asking price (median and quartiles in USD, with how many listings had a price). reading=fragile rows give only the central count. Asking price, not closing price.
| Name | Required | Description | Default |
|---|---|---|---|
| segment | No | One segment; omit for all published segments plus the jets total. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it is a frozen monthly edition, fragile rows yield only the central count, and prices are asking prices rather than closing prices.
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?
The description is front-loaded and dense but purposeful, covering the index scope, metrics, and caveats without filler. The main sentence is long and parenthetical, which slightly reduces readability, but every clause contributes information.
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 index tool with an output schema, the description is complete: it explains the source, cadence, segment behavior, returned metrics, and important caveats such as fragile rows and asking versus closing price. Annotations and schema cover the remaining safety and parameter details.
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 100%, and the single optional segment parameter is fully documented in the schema, including the behavior when omitted. The description reinforces that results are per segment but does not add parameter semantics beyond the schema, so the baseline score of 3 applies.
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 clearly identifies the resource: the Jet Tracker Index for the Brazilian used business aviation market, broken down by segment. It specifies the exact metrics returned, so an agent can tell what the tool does, though it does not explicitly name sibling tools like jt_market_listings or jt_fleet_stats as alternatives.
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?
Usage is implied by the description: it returns the published monthly index, with per-segment fleet base, for-sale counts, share of fleet, and asking prices. There is no explicit guidance on when to use this versus similar siblings such as jt_market_listings or jt_price_history, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_market_listingsMarket listings for a modelARead-onlyIdempotentInspect
For-sale listings of a catalog model (slug or alias, whole family) tracked by Jet Tracker: total and active count, priceStats (n, min, median, max) over active priced listings, and a sample with portal, listing URL, country/region, first and last seen and effectiveStatus (active, stale = not re-seen for 30+ days, expired = 60+ days). Listings the source portal marks as sale suspended are NOT active: they are left out of activeCount, priceStats and the sample and reported in suspendedCount (the seller withdrew the offer; it is not a sale). Prices as advertised by portals, not appraisals. Optional spec_filters (engine_program, no_damage_history, wifi, max_engine_hours, avionics, year_min) filter by the listing spec sheet, i.e. what the seller DECLARED in the ad, not verified by Jet Tracker: the result gains spec_matches (matching listings, cheapest first) plus withSpecsCount, the number of listings of the model that carry a spec sheet. A criterion only matches when the ad states it, so an empty spec_matches with a low withSpecsCount means unknown, not none.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug do modelo (ex: embraer-phenom-300). | |
| spec_filters | No | Filtros pela FICHA TÉCNICA do anúncio (o que o anunciante declarou). Opcional. Quando presente, a resposta ganha `spec_matches` com os anúncios que afirmam os critérios; anúncio que não informa fica de fora, então leia `withSpecsCount` antes de dizer "não há nenhum". |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description layers on substantial semantics they cannot convey: the active/stale(30+ days)/expired(60+ days) definitions, the treatment of sale-suspended offers in activeCount, priceStats and the sample, and the caveat that prices are portal-advertised, not appraised. The declared-vs-verified distinction for spec filters is exactly the kind of behavioral caveat an agent needs.
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 resource definition, then the status semantics, then the optional filter behavior — a logical order with no filler sentences. It is dense and sentence-heavy, packing several clauses per sentence, which costs some scannability but every clause carries a distinct rule.
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 tool with nested spec_filters and an output schema, the description supplies everything an agent needs to call and interpret it: counting rules, status thresholds, excluded populations, filter semantics and the withSpecsCount caveat. Return-value detail is largely carried by the output schema, so no gap remains.
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 100%, so the baseline is 3; the description earns more by clarifying that slug accepts an alias and covers the whole model family, and by re-framing spec_filters as filtering on what the seller DECLARED, with an explicit empty-result interpretation rule (unknown, not none). It adds meaning beyond the per-field schema text rather than restating it.
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 precise verb+resource — for-sale listings for a catalog model (slug or alias, whole family) — and immediately bounds the scope with what is and is not counted (suspended offers excluded). An agent can distinguish this from jt_price_history or jt_model_specs without opening any schema, because the description defines exactly which population and which fields are returned.
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 clear operational context: spec_filters are optional, only match what the seller declared, and when present the response gains spec_matches/withSpecsCount; it also instructs the agent to read withSpecsCount before concluding 'nothing exists'. It stops short of naming alternative tools (e.g. jt_price_history, jt_sale_propensity) or stating explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_market_searchMarket search across modelsARead-onlyIdempotentInspect
Aircraft FOR SALE across all models in one call (Jet Tracker Sales Radar: listings from the tracked portals, one row per aircraft, duplicates across portals merged). Filters: asking price range in USD, year, country, Brazilian state (uf) or macro-region, segment, category, model text, portal (source), listings first seen in the last N days, sort by price, year or recency. Ready modes: mode=new ("new this week": listings detected in the last 7 days) and mode=price_drops (sellers that lowered the asking price, with from/to and the date). Top of the answer: total, askingMedianUsd labelled "mediana de pedidos" (median ASKING price of the priced aircraft in the filter; price-on-request aircraft are counted apart and left out of the median) and lastListingReadAt (the last time any listing was read; ingestionStale=true means the feed may be stopped, say the date instead of calling it current). Each row: registration (registry match or as listed), model, year, asking price in USD and in the original currency, portal and link, Jet Tracker page, days on market and price change. Asking prices are never closing prices. Aircraft whose registry shows a sale or owner change after the listing went live are not counted as for sale (excludedLikelyTransacted). The list uses the daily records quota; listing links, days on market and the price drop detail are for subscribers. source=social_radar returns the off-market items instead: aircraft offered only on social media profiles, each labelled sourceLabel "anúncio em rede social" with detectedAt (date the post was found), registration confirmed in the Brazilian registry, offer type and published price when there is one; the profile handle only for companies, never a personal contact. The per-model view with spec sheet filters and price stats is jt_market_listings.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | State of the listing: Brazilian UF (SP, GO...) or US state code with country=US. | |
| mode | No | all (default): everything for sale in the filter. new: listings first detected in the last newSinceDays (default 7), newest first. price_drops: aircraft whose seller lowered the asking price, most recent drop first. | |
| sort | No | price_asc (default for mode=all), price_desc, year_desc, year_asc, recent (default for new and price_drops). | |
| limit | No | ||
| model | No | Model or family text (slug or name), e.g. "phenom 300" or "king air". | |
| cursor | No | nextCursor from the previous page. | |
| region | No | Brazilian macro-region. | |
| source | No | Only listings from this portal (controller, globalair, tradeaplane, avbuyer, aeronavesavenda...), or social_radar for aircraft offered only on social media profiles (off-market). | |
| country | No | Country of the listing, ISO2 (BR, US...). uf or region alone imply BR. | |
| segment | No | executive (jets, turboprops, turbine helicopters), geral (piston airplanes and piston helicopters), comercial, all. Default: inferred from category, else all. | |
| yearMax | No | ||
| yearMin | No | ||
| category | No | jet, turboprop, helicopter, piston, or a fine catalog category (light, midsize, piston_single...). | |
| priceMaxUsd | No | Maximum asking price in USD, e.g. 3000000. | |
| priceMinUsd | No | Minimum asking price in USD. | |
| newSinceDays | No | Only listings first detected in the last N days. | |
| includePriceOnRequest | No | Include price-on-request aircraft. Default true without a price filter, false with one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it a safe, idempotent, closed read; the description goes well beyond that by disclosing quota consumption ("uses the daily records quota"), subscriber-gated fields (links, days on market, price-drop detail), staleness signalling (ingestionStale, lastListingReadAt), and the exclusion rule excludedLikelyTransacted for post-listing registrations of sale/owner change. It also warns that asking prices are never closing prices and defines exactly how askingMedianUsd is computed and why price-on-request aircraft are excluded.
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?
The purpose is front-loaded and the content is dense with no filler, but it is delivered as one very long paragraph mixing filters, output shape, quota caveats, subscriber limits and the social_radar branch. The information all earns its place; the structure would be better served by separating the social_radar branch from the main search.
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 17-parameter, zero-required, open-filter search with an output schema, the description covers what an agent needs to call it and interpret the answer: filters, ready modes, the top-level envelope (total, median, lastListingReadAt), per-row fields, and the two exceptional result shapes. Nothing essential is left to inference.
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?
With 82% schema coverage the baseline is 3, but the description adds real meaning beyond the schema: that mode=new maps to a 7-day detection window, what mode=price_drops actually returns (from/to and the drop date), and that source=social_radar repurposes the whole result set into off-market items with sourceLabel and detectedAt. It leaves uf/region/country, segment, category, limit and cursor entirely to the schema, which is acceptable given the high coverage.
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 opening sentence names a specific verb and resource — "Aircraft FOR SALE across all models in one call" — and scopes the source (tracked portals, one row per aircraft, duplicates merged). It explicitly distinguishes itself from the per-model sibling jt_market_listings, and carves out the alternate result shape when source=social_radar, so an agent can separate this from the other 48 tools without opening a 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 concrete use contexts — mode=new for "new this week" (last 7 days), mode=price_drops for sellers who lowered asking price, source=social_radar for off-market social-media offers — and routes the per-model/spec-sheet case to jt_market_listings. What is missing is explicit when-not guidance (e.g. for broad fleet counts use jt_global_fleet_search or jt_market_index), so the agent gets positive routing but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_model_maintenanceModel maintenance referenceARead-onlyIdempotentInspect
Maintenance reference for one catalog model, each figure with its source: engine program (program name, TBO and HSI hours, overhaul reserve per hour per engine), published maintenance intervals, how many ANAC-certified shops (RBAC 145) are rated for the model, and its published accidents and incidents (CENIPA/NTSB/ASN: totals, fatal, last 10 years, most recent). Model level only: Jet Tracker has no airframe or engine hours, so it never says when a given aircraft is due. Built for MRO, insurer, lender or buyer questions about a type; the events of one tail are in jt_aircraft_history.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Catalog slug (from jt_model_search), e.g. embraer-phenom-300. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and closed-world; the description adds provenance per figure (engine program, published intervals, CENIPA/NTSB/ASN) and, importantly, a hard limitation that no airframe or engine hours exist so no due-date can be derived. That caveat prevents a serious misuse mode the annotations could never 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?
The opening clause front-loads the resource and the parenthetical enumerations replace what would otherwise be several paragraphs, so density is earned. The middle section is a long run-on with nested parentheses and acronyms (TBO, HSI, RBAC 145) that slightly impedes scanning.
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, return values need no explanation; the description instead covers what the tool will not do (no tail-level hours or due dates), where each figure comes from, and where to go for the per-aircraft case. Nothing an agent needs to select and call it correctly is missing.
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 100% and the single `model` parameter is described in the schema, including its format and its source (jt_model_search). The description adds no syntax, format, or validation detail beyond that, so the baseline of 3 applies.
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 — a maintenance reference for one catalog model — and then enumerates exactly what figures it returns (engine program TBO/HSI hours, overhaul reserve, published intervals, ANAC 145 shop counts, accident/incident totals). It explicitly frames the scope as model-level, which separates it from the per-tail tools without the agent needing to open a 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?
Gives a clear use case ('MRO, insurer, lender or buyer questions about a type') and names the alternative for the adjacent need ('the events of one tail are in jt_aircraft_history'), plus an explicit exclusion ('never says when a given aircraft is due'). It does not differentiate from overlapping siblings like jt_maintenance_signal or jt_mro_capabilities, which cover adjacent maintenance/shop data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_model_movesFleet entries and exits by modelARead-onlyIdempotentInspect
How the Brazilian fleet of a model (whole family by default) moved between monthly RAB snapshots over the last N months (default 12, max 120): entries, entries that came in as mark reservation or suspended, exits and net, per snapshot and in total, plus the live fleet today. Snapshots where the catalog gained coverage are flagged coverageJump (old registrations appearing at once, not demand). Same numbers as the Jet Tracker model page and market view. For the aircraft behind each movement, jt_registry_changes lists them.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Catalog slug, family slug, ICAO type or name, e.g. embraer-phenom-300 or "king air". | |
| scope | No | family (default) or only the exact variant matched. | |
| months | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent/non-destructive, and the description adds genuine behavioral context: the coverageJump flag explains anomalous old registrations appearing at once, and provenance ('same numbers as the Jet Tracker model page and market view') sets expectations. It stops short of describing pagination or performance characteristics.
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?
Dense but front-loaded: the core purpose and return shape come first, defaults and the coverageJump caveat follow, and the sibling pointer is last. Every clause carries information an agent needs.
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, return formatting need not be re-explained; the description covers scope defaults, the coverageJump caveat, and provenance, which is enough to invoke correctly. A note on pagination or output granularity would round it out fully.
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 67%; the schema documents model and scope but leaves months undescribed. The description fills that gap by stating the default (12) and max (120), and reinforces that scope defaults to the whole family. It adds meaning beyond the schema for the one undocumented parameter.
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 ('how the Brazilian fleet of a model moved between monthly RAB snapshots') and enumerates exactly what is returned: entries, mark-reservation/suspended entries, exits, net, per snapshot and total, plus live fleet. It also distinguishes itself from the sibling jt_registry_changes, which covers the underlying aircraft rather than aggregates.
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 clear operating context (default 12 months, max 120, family scope by default) and routes to jt_registry_changes for per-aircraft detail. It does not explicitly say when to prefer this over jt_movements or jt_fleet_stats, so the exclusion guidance is only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_model_searchSearch the aircraft catalogARead-onlyIdempotentInspect
Search Jet Tracker aircraft models by text (manufacturer name such as "piper", model such as "meridian", both, or an ICAO type designator such as E55P or BE40) and category (jet, turboprop, helicopter, piston, the same words as jt_fleet_search). Returns slug, familySlug, name, manufacturer, category, ICAO type, range, MTOW and production status, paginated with offset/nextOffset. The slug is the model id the other tools accept. Zero results is not proof of absence.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Máximo de modelos a devolver (1 a 20). | |
| query | No | Termo de busca textual (fabricante, modelo, código ICAO). Opcional. | |
| offset | No | Paginação: pule N modelos (nextOffset da página anterior). | |
| category | No | jet, turboprop, helicopter, piston or any (the Portuguese jato, turboelice, helicoptero, pistao, qualquer also work). | any |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is fully covered structurally. The description adds the pagination contract (offset/nextOffset) and the coverage caveat that zero results doesn't prove absence, which is real added context. It does not discuss rate limits or result ordering, so it earns above-baseline but not rich.
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?
Three dense sentences, front-loaded with the search axes, then the return shape, then the slug/pagination guidance. The enumerated return-field list overlaps what the output schema already provides, which is minor waste, but nothing else is padding.
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-required-parameter, 4-param search tool with a dedicated output schema and full annotation coverage, the description covers scope, vocabulary, return identity (slug) and the caveat about empty results. An agent has everything needed to call it correctly and interpret an empty response.
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 100%, so the schema already documents limit, query, offset and category, including the enum values. The description's value-add is concrete query examples ("piper", "meridian", E55P, BE40) that the schema lacks, but the category and pagination explanation largely restates the schema. Baseline 3 is appropriate.
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 (search) and resource (Jet Tracker aircraft models) and enumerates the two axes of filtering (text and category) with concrete examples. An agent can distinguish this catalog-search tool from jt_fleet_search or jt_global_fleet_search without opening a 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?
Explicitly notes the category vocabulary matches jt_fleet_search and that the returned slug is the model id other tools accept, which tells the agent how to chain calls. It also warns that zero results is not proof of absence. It stops short of naming a sibling to use instead when searching fleets vs models, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_model_specsModel specs and operating costARead-onlyIdempotentInspect
Technical specs of a catalog model (slug, family slug, slug with or without manufacturer prefix, or name; model.matchedBy says how it was resolved) plus the canonical operating cost engine: variable cost per hour, fixed cost per year, total per hour at standard_hours_per_year (200 h/year), acquisition curve, with costModelVersion. Same numbers as the Jet Tracker model page and as jt_compute_tco assumptions.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug do catálogo (ex: embraer-phenom-300, cessna-citation-cj3). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/non-open-world, so the bar is lower. The description adds genuinely new behavioral context: fuzzy slug resolution via model.matchedBy, the costModelVersion stamp, and the standard_hours_per_year=200 default that drives the total-per-hour figure. It does not mention rate limits or caching, hence 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?
Two front-loaded sentences with no filler; the payload is described first, the resolution semantics second. The parenthetical lists are dense but each item carries information. Slightly over-packed for a one-parameter tool.
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 enumerated, yet the description names the key fields (variable cost/hour, fixed cost/year, total/hour, acquisition curve, costModelVersion) and flags that the numbers match the model page and jt_compute_tco — enough for an agent to trust and reuse the output. Nothing critical is missing for a single-param read tool.
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 100% for the single slug parameter, so baseline is 3, but the description goes beyond the schema by enumerating accepted forms (bare slug, family slug, slug with or without manufacturer prefix, or model name) and by naming the resolution-echo field. That is real added meaning the schema alone does not convey.
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 (catalog model technical specs) plus a second, clearly bounded payload (the canonical operating cost engine), so an agent knows exactly what comes back. The phrase 'canonical operating cost engine' and the explicit reference to jt_compute_tco assumptions distinguish it from the cost-computation 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?
Usage is implied: this is the per-model lookup that yields specs and standard cost figures, and the mention of jt_compute_tco signals a relationship. But there is no explicit when-to-use/when-not statement and no routing versus jt_model_search (discovery) or jt_compute_tco (custom TCO runs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_movementsRegistry changes in a period (RAB changelog) (deprecated name)ARead-onlyIdempotentInspect
DEPRECATED name of jt_registry_changes (same behaviour, kept until 2026-12-09). Changes in the Brazilian REGISTRY (RAB) between two dates, not airport movements: entry (new registration), exit (cancelled), owner_change, operator_change, status_change. Read from the RAB changelog kept by Jet Tracker since 2026-02-03. Filters (type, model, owner state uf, RBAC, segment, registrations, company cnpj; default segment executive, or all when registrations or cnpj is set) are applied in the database. The company filter matches the aircraft linked to the CNPJ today plus owner/operator changes whose before or after name is a name the RAB uses for that company, so aircraft that already left it are included; company.rabNamesMatched says how many RAB names matched (0 = only current aircraft). Each row then carries companyMatch: name (the company is one side of that change) or current_aircraft (the aircraft belongs to it today; the row can predate its arrival). The RAB history keeps only the first owner name, so a company that was a minority co-owner of an aircraft that already left can be missed. summary comes first: changes by type (entry, exit, owner_change, operator_change, status_change) and distinct aircraft (serial + model counted once) for the whole filter, all pages; total is the exact count for the filter in the period, found:false means zero in the whole period, and truncated only means there are more pages (nextCursor). Max 200 per call. Each row carries sameAirframeAs (other live registrations of the same serial + model: three reservations for one airframe are one aircraft, count once). A registry change is NOT a sale (see the caveat field). Aircraft arriving at or leaving an airport are not registry changes.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date, YYYY-MM-DD (inclusive). Default: today. | |
| uf | No | Registered state (UF) of the owner. | |
| cnpj | No | Only changes of this company: 14-digit CNPJ or 8-digit root. Includes aircraft that already left it. CPF is not accepted. | |
| from | Yes | Start date, YYYY-MM-DD (inclusive). | |
| rbac | No | 91 private, 91k shared/fractional, 135 air taxi, 121 airline, 137 agricultural. | |
| type | No | Only one kind of change: entry (new registration), exit (cancelled), owner_change, operator_change or status_change. | |
| limit | No | Default 50. | |
| model | No | Catalog slug, family slug or free text. Not a registration: a Brazilian registration here (PS-VLY) is moved to registrations and the answer carries notice. | |
| cursor | No | nextCursor from a previous page. | |
| segment | No | Default executive; default all when registrations or cnpj is set. | |
| registrations | No | Only these registrations (with or without hyphen). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, so the bar is lower, yet the description discloses a lot beyond them: database-side filtering, the companyMatch row semantics, the known blind spot (RAB keeps only the first owner name, so minority co-owners can be missed), sameAirframeAs de-duplication, and the meaning of truncated/found:false. This is exactly the extra context annotations cannot carry.
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?
The deprecation notice and the core definition are front-loaded, and nearly every sentence carries operative meaning (defaults, match semantics, caveats). It is a single dense block paragraph without sub-structure, which makes the company-filter explanation harder to scan than it needs to be.
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 11 parameters, an output schema present, and rich annotations, the coverage is thorough: pagination, summary ordering, exact total vs truncated, max page size and the segment default are all stated. An agent can call this correctly and interpret the response without opening other sources.
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 100%, so the baseline is 3, but the description adds meaning the schema does not: the default segment rule (executive, or all when registrations/cnpj is set) and, importantly, what the cnpj filter actually matches (current aircraft plus owner/operator names the RAB uses for that company) with the rabNamesMatched caveat. It does not clarify from/to or rbac beyond the schema, so not a 5.
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 precisely that this is the deprecated alias of jt_registry_changes with identical behaviour, then names the resource (RAB registry changelog) and enumerates the change types. It explicitly rules out the wrong reading ('not airport movements') that the name jt_movements would otherwise invite.
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 the deprecation window (kept until 2026-12-09) and routes the agent to jt_registry_changes, names what does not belong here (airport arrivals/departures), and warns that a registry change is not a sale, pointing to the caveat field. Both when-to-use and when-not are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_mro_capabilitiesMaintenance shop ratings (ANAC RBAC 145)ARead-onlyIdempotentInspect
What a Brazilian certified maintenance shop (oficina, RBAC 145) is rated by ANAC to work on, from its Operations Specifications (EO): airframes (including helicopters), engines, propellers and equipment, each with the ANAC limitation text, plus the shop bases and status. Two modes, one per call. (1) A shop by com (ANAC certificate number), cnpj or q (name): returns the profile, capabilities, fleetSearchModels (catalog slugs ready for jt_fleet_search) and, when the account includes fleet counts, the live Brazilian fleet per rated model with how many have CVA expiring in 60 days, each split into exact (the aircraft ANAC designation is an EO item) and approximate (counted only because its catalog model was linked to a neighbouring EO item); each capability carries matchType (exact or approximate), scope (full, limited = hour/time cap or exclusion, light = line inspections only like 10 h / 1 month) and alsoMatches (other slugs with the same ANAC designation, e.g. AS 350 B3 also covers airbus-h125, counted as exact). Quote the exact numbers as the shop market and present approximate ones as needing a rating check. A name matching several shops returns up to 5 candidates: let the user pick one. (2) model (catalog slug): certified shops rated for it, also by its ANAC designations (model.designations: H125 is rated as AS 350 B3). Each shop has coverage full, partial (full on some designations only: say which), limited or light, fullRating = coverage full; total is always returned, the list (up to 50, full first) uses the daily records quota. Use this when a lead is a maintenance shop: jt_company_search finds its CNPJ but a shop rarely owns aircraft, so its market is the fleet of the models in its EO, not jt_owner_fleet.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Shop legal or trade name, e.g. "DAS Brasil". | |
| uf | No | Brazilian state of the shop (2 letters), to narrow. | |
| com | No | ANAC certificate number (NUMERO_COM), e.g. 201508-41. | |
| cnpj | No | Shop CNPJ (14 digits) or 8-digit root. | |
| model | No | Catalog slug (from jt_model_search or fleetSearchModels) to list the shops rated for it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (read-only, idempotent), and the description adds genuinely non-derivable behavior: the model-mode list consumes the daily records quota, results are capped at 50 with full coverage first, total is always returned, and per-capability matchType/scope/alsoMatches semantics are spelled out. It even tells the agent how to present exact versus approximate counts.
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 and every block maps to a distinct rule (modes, matching, coverage levels, quota). It is nonetheless dense and parenthetical-heavy, with asides like the '10 h / 1 month' example that add length without changing how the tool is called.
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-mode domain tool with zero required parameters, the definition covers input selection, ambiguous-match handling, output field meanings (matchType, coverage, fullRating, fleetSearchModels), and cost. An output schema exists, so the extra return detail is bonus rather than a 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 coverage is 100%, so the schema documents the parameters, but the description adds mode dispatch the schema cannot express: q/com/cnpj select mode 1, model selects mode 2, and model slugs come from jt_model_search or fleetSearchModels. It stops short of explaining the uf narrowing or mixed-identifier precedence.
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 first sentence states a specific verb and resource: what a Brazilian RBAC 145 maintenance shop is rated by ANAC to work on, from its Operations Specifications (airframes, engines, propellers, equipment). It then names two distinct modes so an agent can tell the shop-lookup mode apart from the model-lookup mode 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?
It explicitly routes: 'Use this when a lead is a maintenance shop', explains why jt_company_search only finds the CNPJ, and excludes jt_owner_fleet as the wrong market basis. It also constrains each call to a single mode, and instructs how to handle ambiguous name matches (offer up to 5 candidates and let the user pick).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_operator_profileBrazilian operator profileARead-onlyIdempotentInspect
The company-side profile behind a Brazilian operator/owner group, the same cut as the public /operadores page: legal entities (CNPJ roots, role, Receita Federal status), dominant RBAC, the RBAC-91K shared-ownership program when the group runs one (EA revision, authorized models), fleet aggregates (total, operational, top models, owner states in baseUfs, capped at 100 tails with fleetTruncated when the group is bigger), decision-maker names from the public QSA (no CPF, ever), a minimal vulnerability read (CVA expiring within 90 days, tails idle 90+ tracked days, liens/gravame count) and whether the group also runs an RBAC 145 maintenance shop. query accepts a brand/URL slug (as in /operadores/), a commercial or legal name, or a CNPJ (14 digits) or its 8-digit root. A brand spanning several CNPJs (e.g. a cooperative plus its holding) is returned as ONE group. found:false means no group matched the text (spelling or a CNPJ root can differ).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Operator slug, brand/company name, or CNPJ (14 digits) / its 8-digit root. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnly, idempotent, non-destructive), while the description adds substantial behavior an agent cannot get elsewhere: the 100-tail cap with fleetTruncated, the 90-day CVA/idle-day vulnerability window, the explicit no-CPF guarantee, and that a brand spanning multiple CNPJs collapses into ONE group. It also explains the found:false outcome, which is critical for interpreting misses.
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?
The purpose is front-loaded, but the bulk is one ~150-word run-on sentence with nested parentheticals, and much of it re-enumerates return fields that an output schema already documents. It is dense rather than padded, yet the structure is heavy to parse and partly duplicates structured data.
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 complex Brazilian registry tool, the definition covers identifier handling, group aggregation, truncation, privacy limits and the not-found case, and safety is already carried by annotations with return shape by the output schema. Remaining gaps (e.g. what 'dominant RBAC' entails beyond the output schema) 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 description coverage for the single query parameter is already 100%, so the baseline is 3. The description still adds value by restating and expanding the accepted formats (brand/URL slug as in /operadores/<slug>, 14-digit CNPJ vs 8-digit root) and by clarifying that a spelling or CNPJ-root mismatch yields found:false.
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?
Names a precise verb+resource (company-side profile behind a Brazilian operator/owner group) and maps it to the public /operadores page, then enumerates exactly what the payload contains, which cleanly separates it from siblings like jt_owner_group, jt_operators_stats and jt_company_search. An agent can tell what it returns 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?
The accepted query forms (slug, commercial/legal name, CNPJ or 8-digit root) strongly imply this is the identifier-based lookup, and the found:false note gives a failure condition. However, there is no explicit when-to-use/when-not statement and no sibling is named as the alternative for adjacent questions (e.g. individual owner fleets), so guidance stays implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_operators_statsOperator statistics for a modelARead-onlyIdempotentInspect
AGGREGATED operator statistics of a model in Brazil: distinct operators (by CNPJ root), RBAC 91 vs 135 split, concentration by state, average fleet age, plus as_of (RAB snapshot date), source.url and scope (only mark reservations or tails classified as RBAC 91/135). This aggregate never names operators; jt_fleet_search and jt_owner_fleet do return names (their own access rules apply).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug do modelo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive/closed-world, so the description's added value is real: it discloses that this aggregate never names operators (a privacy constraint), defines the RBAC 91/135 scope filter, and describes as_of and source.url. It stops short of discussing caching, pagination, or freshness beyond the snapshot date.
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 what the aggregate contains, then the name-vs-aggregate contrast and alternative tools. Dense but each clause carries information; only the parenthetical scope definition is slightly cluttered.
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, yet the description still usefully names key fields. Combined with the scope definition, the no-names behavior, and the sibling routing, an agent has enough to call this correctly; only explicit prerequisites or error behavior are absent.
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 only one parameter (slug) and the schema documents it at 100% coverage with length constraints, so the schema carries the burden. The description implies the slug identifies the model, but adds no format or lookup guidance beyond that, matching the baseline for fully-covered schemas.
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 (aggregated statistics) and resource (operators of a model, in Brazil), and enumerates the exact dimensions returned (distinct operators by CNPJ root, RBAC 91/135 split, concentration by state, average fleet age). This clearly separates it from sibling stats tools like jt_fleet_stats or jt_operator_profile.
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 explicitly names the alternatives jt_fleet_search and jt_owner_fleet and states the condition that distinguishes them: those tools return operator names, this one never does. That is a clear routing signal, though there is no explicit 'use this when' phrasing or stated exclusions beyond that contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_owner_fleetFleet by CNPJ (company)ARead-onlyIdempotentInspect
Aircraft in the Brazilian registry linked to a company CNPJ, matched by the 8-digit company root (a branch does not hide the parent company aircraft). Each item says the role (owner = belongs to it, operator = only operates it), status, segment, lien and co-owners. An empty list is a valid answer ("no aircraft" is information).
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | Yes | CNPJ with 14 digits (with or without punctuation) or the 8-digit root. CPF (personal id) is not accepted. | |
| segment | No | Optional cut: executive (business jets, turboprops, executive helicopters), geral (agricultural/training), comercial (airliners), militar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description adds real behavioral context beyond that: the role semantics (owner vs operator), the fields returned (status, segment, lien, co-owners), and the important caveat that an empty list is a legitimate answer.
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?
Three tight sentences, front-loaded with the resource and matching rule, then item contents, then the empty-result caveat. Every sentence carries information; only the parenthetical could be trimmed, but it is genuinely clarifying.
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, return values need not be detailed, yet the description still summarizes the item shape (role, status, segment, lien, co-owners). Combined with the matching rule and empty-result note, an agent has enough to call and interpret it correctly; explicit sibling routing is the only missing piece.
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 100%, which sets a baseline of 3. The description earns above that by explaining how the cnpj parameter actually behaves (matched on the 8-digit root, so a branch does not exclude the parent company's aircraft), a matching nuance the schema does not state.
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: aircraft in the Brazilian registry linked to a company CNPJ. It further disambiguates from siblings by defining the matching rule (8-digit company root) and the scope (branch does not hide parent company aircraft), which clearly separates it from jt_fleet_search and jt_global_fleet_search.
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?
Usage is implied by the CNPJ-based scoping and the note that an empty list is valid, which helps the agent interpret a null result. However, it never explicitly names when to prefer this over jt_fleet_search, jt_fleet_stats, or jt_owner_group, leaving alternatives to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_owner_groupCompanies linked to an owner (economic group)ARead-onlyIdempotentInspect
Companies related to a CNPJ (or to the owner of a registration) that own or operate live Brazilian aircraft, with why they are linked (basis: same_root, seed_partner_company, seed_is_partner, shared_partner, same_email, same_phone, same_address, same_name_prefix), a confidence per member (high = same root, partner link or shared partner; medium = shared e-mail, or phone + address; low = only a shared address or phone, which at an airport, hangar or accounting office links unrelated companies), the shared partner names (public QSA), the Receita record, the owner role and the aircraft of each member. aircraftTotal counts every member; aircraftTotalConfident excludes low-confidence members. The RAB splits a group into many CNPJs (SPEs, farms, holdings, family companies); this gives the whole set in one call so one conversation covers all of them. Max 50 members. Links are hints from public records, not a legal structure (see the caveat).
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | No | CNPJ (14 digits) or 8-digit root of the seed company. | |
| limit | No | Default 25 members. | |
| registration | No | Alternatively, a registration: the group of its first owner CNPJ. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, openWorld=false, non-destructive), and the description goes well beyond them: the 50-member cap, the meaning of each confidence tier, the aircraftTotal vs aircraftTotalConfident distinction, and a caveat that links are public-record hints rather than a legal structure.
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 resource and scope, but the long inline enumerations of basis types and confidence rules re-explain return values that the output schema already carries, bloating what could be a tighter description.
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 complex economic-group tool with an output schema, the description supplies everything else an agent needs: member cap, confidence semantics, counter definitions, and the legal-structure caveat that sets expectations for interpreting results.
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 100%, so cnpj, registration and limit are already documented; the description adds only the framing that the CNPJ may be a 14-digit number or 8-digit root and the registration resolves to the first owner. Baseline 3 is appropriate when the schema does the heavy lifting.
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 (companies linked to a CNPJ/owner forming an economic group) with the exact basis types returned, so an agent can tell this apart from jt_owner_fleet or jt_company_search without opening a 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?
Explains the rationale for using this tool ('The RAB splits a group into many CNPJs... this gives the whole set in one call'), which tells the agent when this tool beats repeated single-company calls. It stops short of explicit when-not-to-use or naming a sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_parts_suppliersAircraft parts suppliers directoryARead-onlyIdempotentInspect
Companies accredited or registered to make or sell aircraft parts (OEM portals, ANAC RBAC 21 and FAA/ASA-100 accredited distributors, Brazilian CESAER/DCTA registry, curated traders), with city, credentials, part types, website and public contact. Free-text q matches name, category, part type, brand, credential and city (accents ignored), e.g. "pneus", "avionica", "PT6A", "Pratt". total is always returned; the list (default 20, max 50, OEM and curated first) uses the daily records quota. It is a directory, not a stock check.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text: part type, brand, credential, company or city. | |
| uf | No | Brazilian state of the company (2 letters). | |
| layer | No | oem = manufacturer parts portal; credential = ANAC/FAA/ASA accreditation; br_registry = CESAER/DCTA Brazilian registry; web = curated web traders. | |
| limit | No | ||
| country | No | Country as stored (BR, US, UNITED KINGDOM...) or "Brasil". |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses behavior an agent would otherwise have to discover: total is always returned, the list defaults to 20 and caps at 50, results are ordered OEM and curated first, and calls consume the daily records quota. Quota cost and ordering are exactly the kind of operational detail 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?
Front-loads what the tool is and what it returns, then packs search semantics and quota notes into a tight block with no filler sentences. It is dense — several clauses compressed into one paragraph — but every clause carries information.
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-shape explanation is unnecessary; the description still covers quota cost, ordering, default and cap, and the fields searchable via q. For a read-only directory lookup with 5 optional params, nothing an agent needs to call it correctly is missing.
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 80% and the schema already documents q, uf, layer and country, so the baseline is 3. The description adds real value on top: the exact fields q searches, that accents are ignored, sample queries, and the 20/50 limit behavior — though it says nothing extra about uf or country beyond the schema.
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 directory of companies accredited/registered to make or sell aircraft parts) and enumerates the source layers it covers. The closing line "It is a directory, not a stock check" explicitly bounds the purpose against a plausible misinterpretation.
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 usage context: the free-text q is described by what it matches plus worked examples ("pneus", "PT6A", "Pratt"), and the quota/ordering behavior tells the agent what to expect per call. It does not name a sibling alternative (e.g. jt_mro_capabilities or jt_company_search), so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_price_historyCurated price curve for a modelARead-onlyIdempotentInspect
Curated pre-owned price curve of a catalog model (by slug): current median/min/max, history by year and 5-year residual, with research date. found=false means there is no curated curve for this model.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug do modelo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, non-destructive behavior, so the bar is low. The description adds real value beyond them by disclosing that the data is 'curated' rather than live, that it includes a research date, and that a missing curve is signaled with found=false rather than an error.
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 dense sentences with zero filler; the resource and key are front-loaded before the return contents and the found=false caveat. The packed list of returned fields is slightly heavy but each clause earns its 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?
With an output schema present, return values need not be re-explained, and annotations cover the safety profile; the description still adds the found=false semantics and data provenance. The only gap is how an agent obtains a valid slug or when to prefer this over the sibling listing/spec tools.
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 100% with a single parameter, so the schema already documents 'slug'. The description only restates '(by slug)' and adds no format, casing, or sourcing detail (e.g., that the slug comes from jt_model_search), which is the baseline 3 case.
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 resource (curated pre-owned price curve for a catalog model, keyed by slug) and enumerates exactly what it returns: median/min/max, history by year, 5-year residual, research date. It is clearly distinct from sibling tools like jt_market_listings and jt_model_specs, though it never explicitly contrasts itself with them.
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 explicit when-to-use statement and no routing guidance versus alternatives such as jt_market_listings (live asking prices) or jt_model_specs. The 'found=false means no curated curve' note is a result condition, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_registry_changesRegistry changes in a period (RAB changelog)ARead-onlyIdempotentInspect
Changes in the Brazilian REGISTRY (RAB) between two dates, not airport movements: entry (new registration), exit (cancelled), owner_change, operator_change, status_change. Read from the RAB changelog kept by Jet Tracker since 2026-02-03. Filters (type, model, owner state uf, RBAC, segment, registrations, company cnpj; default segment executive, or all when registrations or cnpj is set) are applied in the database. The company filter matches the aircraft linked to the CNPJ today plus owner/operator changes whose before or after name is a name the RAB uses for that company, so aircraft that already left it are included; company.rabNamesMatched says how many RAB names matched (0 = only current aircraft). Each row then carries companyMatch: name (the company is one side of that change) or current_aircraft (the aircraft belongs to it today; the row can predate its arrival). The RAB history keeps only the first owner name, so a company that was a minority co-owner of an aircraft that already left can be missed. summary comes first: changes by type (entry, exit, owner_change, operator_change, status_change) and distinct aircraft (serial + model counted once) for the whole filter, all pages; total is the exact count for the filter in the period, found:false means zero in the whole period, and truncated only means there are more pages (nextCursor). Max 200 per call. Each row carries sameAirframeAs (other live registrations of the same serial + model: three reservations for one airframe are one aircraft, count once). A registry change is NOT a sale (see the caveat field). Aircraft arriving at or leaving an airport are not registry changes.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date, YYYY-MM-DD (inclusive). Default: today. | |
| uf | No | Registered state (UF) of the owner. | |
| cnpj | No | Only changes of this company: 14-digit CNPJ or 8-digit root. Includes aircraft that already left it. CPF is not accepted. | |
| from | Yes | Start date, YYYY-MM-DD (inclusive). | |
| rbac | No | 91 private, 91k shared/fractional, 135 air taxi, 121 airline, 137 agricultural. | |
| type | No | Only one kind of change: entry (new registration), exit (cancelled), owner_change, operator_change or status_change. | |
| limit | No | Default 50. | |
| model | No | Catalog slug, family slug or free text. Not a registration: a Brazilian registration here (PS-VLY) is moved to registrations and the answer carries notice. | |
| cursor | No | nextCursor from a previous page. | |
| segment | No | Default executive; default all when registrations or cnpj is set. | |
| registrations | No | Only these registrations (with or without hyphen). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial context beyond them: data source is the RAB changelog since 2026-02-03, filters run in the database, pagination caps at 200 with cursor, and truncated/found/total are precisely defined. It also discloses real limitations of the company filter (rabNamesMatched=0, minority co-owner blind spot, rows can predate arrival).
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 and the key exclusion are front-loaded, but the single dense paragraph packs caveats (companyMatch, rabNamesMatched, sameAirframeAs, co-owner blind spot) with little structural separation, and the airport-movement exclusion is restated at the end. Every detail is useful, but the wall-of-text form hurts scanability.
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 filtered, paginated, caveat-heavy analytics tool with 11 parameters, the description covers the data window, filtering semantics, pagination and result-count semantics, and the known data-quality traps. Nothing an agent needs in order to interpret results correctly is missing.
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 100%, so the schema baseline applies, but the description adds cross-parameter behavior the schema does not: the segment default flips to 'all' when registrations or cnpj is set, and cnpj matching includes historical owner/operator names plus current aircraft. It stops short of explaining limit/cursor interplay beyond the max-200 note.
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+scope: registry (RAB) changes between two dates, enumerating the five change types (entry, exit, owner_change, operator_change, status_change). It explicitly says 'not airport movements', which cleanly separates it from siblings like jt_movements and jt_ground_events.
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 real when-not guidance: registry changes are not airport movements and not sales (points to the caveat field), which prevents the most likely misuse. It does not name the sibling tools to use instead (e.g. jt_movements, jt_market_listings), so routing is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_runway_checkRunway feasibility for a modelARead-onlyIdempotentInspect
Can this model operate at this airport? Compares the model takeoff/landing distances with the runway of the airport (ICAO, city or name). verdict is the overall answer: ok, marginal, insufficient, unknown, or conditional (fits a private RBAC 91 flight but NOT an RBAC 135 air-taxi operation with the 60% landing factor). verdictByRegime gives private, taxi135Dry and taxi135Wet separately. Landing is checked against the declared LDA (landingRunwayM) and takeoff against min(TORA, ASDA) (takeoffRunwayM; takeoffRunwayKind=LDA means no TORA/ASDA published, so LDA is used as a conservative floor); bindingLeg says which one decides. runwayAsOf is the AISWEB data date.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Modelo: slug do catálogo (ex: phenom-300), slug com fabricante (embraer-phenom-300) ou o nome ("Phenom 300"). A resposta diz em modelSlug qual modelo foi usado. | |
| airportQuery | Yes | ICAO ou cidade/nome do aeroporto. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and idempotent, but the description adds substantial behavior: verdict categories, RBAC 91 vs RBAC 135 regimes, landing vs takeoff runway references, LDA-as-conservative-floor handling, binding leg, and AISWEB data date. This is rich behavioral context beyond structured fields.
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?
The purpose question is front-loaded, followed by dense but largely relevant details. Some output-field explanations could be left to the output schema, but most sentences help interpret the verdict and runway comparisons.
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 domain-complex feasibility check, the description gives enough to understand inputs, verdicts, regime distinctions, and runway-data semantics. With an output schema present, return fields need not be fully explained here.
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 100%, documenting both required parameters including slug formats and airport query forms. The description restates that airportQuery accepts ICAO/city/name but adds little parameter-level meaning beyond the schema, so baseline 3 is appropriate.
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 question and operation: compares a model's takeoff/landing distances with an airport runway, accepting ICAO, city, or name. This clearly distinguishes it from generic model and airport lookup siblings.
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?
Opens with the exact decision question ('Can this model operate at this airport?'), giving clear context for when to use it. It does not name alternative tools or exclusions, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_sale_propensitySale propensity scoreARead-onlyIdempotentInspect
Score 0-100 of how likely one registration is to reach the market, built as a transparent sum of public-record evidence: idle days (tracked flights), CVA/CA status, owner change recency (registry history), active or stale market listing, owner role (a financeira/creditor selling collateral is a stronger signal), aircraft age and, when the internal predictor has scored this tail, its probability. Each contributing fact is in evidence[] with its weight; coverage[] says which inputs existed. It is not a prediction of sale: it ranks who to contact first.
| Name | Required | Description | Default |
|---|---|---|---|
| registration | Yes | Brazilian registration (PR-TBL). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the burden is lower; the description goes further by disclosing the scoring model's inputs, the evidence[]/coverage[] output structure, and the conditional nature of the internal predictor. It does not state latency, rate limits, or behavior when data is missing beyond coverage[], keeping it shy of 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?
Single dense paragraph that front-loads the definition, then enumerates contributing signals, then closes with the crucial scope caveat. It is on the long side and the middle signal list could be trimmed, but every clause carries information.
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, return values need not be explained, yet the description usefully explains what the score means and how evidence[]/coverage[] should be read. It is complete enough to invoke correctly; only explicit sibling routing is missing.
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?
Only one parameter, and the schema already documents it at 100% coverage including the Brazilian registration format and length bounds. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
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 ('Score 0-100 of how likely one registration is to reach the market') and then explicitly bounds the claim ('It is not a prediction of sale: it ranks who to contact first'). The siblings contain no direct duplicate, so the lack of a named alternative is a minor gap rather than a confusion risk.
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?
Usage is only implied — the closing sentence ('ranks who to contact first') hints at lead-prioritization use, but there is no explicit when-to-use, when-not-to-use, or pointer to a sibling such as jt_aircraft_lookup or jt_owner_profile for raw facts. An agent can infer intent but must reason about it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_sector_indicatorsAviation trade, fuel and airport traffic indicators for BrazilARead-onlyIdempotentInspect
Brazilian aviation sector indicators from official open data (Comex Stat and ANP), monthly: imports and exports of aircraft, parts and drones (chapter 88, FOB USD), aircraft imported by size class (units), top origin and destination countries over 12 months, jet fuel (QAV) and aviation gasoline (AVGAS) volume sold by distributors, with sales by state, and official general aviation traffic per aerodrome from CGNA/DECEA (landings and takeoffs at the 100 aerodromes it reports, national total, ranking, and the monthly series of one aerodrome when icao is given). Year to date against the same months of the prior year. Trade includes commercial and military aviation.
| Name | Required | Description | Default |
|---|---|---|---|
| icao | No | Aerodrome ICAO (SBJD) for its monthly CGNA series; only with topic=airports or no topic. | |
| topic | No | trade (Comex Stat), fuel (ANP) or airports (CGNA); omit for all three. | |
| months | No | How many recent months in the monthly series. Default 12. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's value is in the data provenance and scope it adds: official open data sources, monthly granularity, YTD-vs-prior-year comparison, chapter 88 FOB USD, and the explicit bound of 'the 100 aerodromes it reports'. It stops short of noting lag, revision, or coverage caveats for the datasets.
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 but well-ordered sentence: scope, sources, sub-topics, then the YTD comparison and the commercial/military qualifier. It is long for a single sentence and would scan better broken into trade/fuel/airports clauses, but every clause carries information and nothing is redundant.
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 and annotations covering the safety profile, the description supplies what structured fields cannot: sources, units (FOB USD, units, volume), the 12-month country window, aerodrome coverage limits, and the YTD comparison basis. The main residual gap is that it gives no hint of data freshness or how the three topics are combined when topic is omitted.
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 100%, so baseline is 3. The description adds meaning beyond the schema by tying icao to 'the monthly series of one aerodrome' and clarifying that topic selects the underlying source (Comex Stat / ANP / CGNA) while omission aggregates all three. The months parameter's role is only lightly restated from the schema.
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 (Brazilian aviation sector indicators) and enumerates the exact content: chapter-88 trade flows, fuel volumes by distributor/state, and CGNA/DECEA aerodrome movements, with named sources (Comex Stat, ANP, CGNA). It does not explicitly contrast itself with siblings like jt_airport_traffic or jt_fuel_prices, which likely cover similar domains internationally, so an agent must infer the 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?
Usage is implied rather than stated: 'monthly', 'Year to date against the same months of the prior year', and the note that icao applies 'only with topic=airports or no topic' give practical constraints. There is no explicit when-to-use/when-not-use guidance or named alternative for narrower questions (e.g., use jt_airport_traffic for a single airport's non-Brazil data).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_signal_rankingRanked list by signal (sale propensity, maintenance, CVA, idle...)ARead-onlyIdempotentInspect
Ranked LIST of Brazilian aircraft by one precomputed signal, for prospecting ("which jet owners in SP are most likely to sell?", "which aircraft enter a maintenance window this quarter?"). Signals: sale_propensity (idle time, CVA status, recent owner change, active or stale listing, financeira owner, age and the internal model when fresh (same weights as jt_sale_propensity)); maintenance (CVA expired or expiring, heavy tracked use, drop in tracked hours, long idle time); fractional_fit (owner profile (natural person or holding), single-aircraft owner, age, tracked use, owner state, category (same weights as jt_fractional_fit)); cva_expiring (CVA expires in the next 90 days; closer date = higher score); idle (no tracked flight for 60+ days (only aircraft with tracking coverage)); owner_change_recent (owner changed in the registry in the last 12 months; more recent = higher score). Filters: owner state (uf), model or family, category, segment, minimum score, windowDays (cva_expiring and maintenance: CVA date up to today + N days; other signals: aircraft that entered the signal in the last N days), inferred base airport (base, ICAO). Each row: registration, model, year, owner (company name and CNPJ root, or "pessoa_fisica" without a name), owner state and city (labelled as the owner record), inferred base, score 0-100, the 3 heaviest factors in plain text, the date of the fact and the last registry change. The top says total before the limit and computedAt (scores are recomputed daily; the same score appears in jt_sale_propensity, jt_fractional_fit and on the web). Default 25, max 100; paginate with nextCursor. Starter shows the first 5 rows and the total. A score ranks who to contact first, never a prediction of sale.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Owner state (UF), e.g. SP. Not where the aircraft is based. | |
| base | No | Inferred home airport (ICAO) from tracking, e.g. SBMT. | |
| lang | No | Language of the factor texts. Default en. | |
| limit | No | Default 25. | |
| model | No | Catalog slug, family or name ("phenom 300", "king air"): the whole family. | |
| cursor | No | nextCursor from a previous page. | |
| signal | Yes | Which signal to rank by. | |
| segment | No | Omit to let the filter decide (see segmentApplied). | |
| category | No | jet, turboprop, helicopter, piston or a fine category. | |
| minScore | No | Only rows with score >= this. | |
| windowDays | No | cva_expiring/maintenance: CVA date up to today + N days (90 = this quarter). Others: entered the signal in the last N days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly/idempotent/non-destructive already declared in annotations, the description still adds substantial behavior: scores recomputed daily, a 0-100 scale, default 25 / max 100, cursor pagination, a 5-row starter view showing the total, and what each row contains. It also sets a critical interpretive guardrail: "A score ranks who to contact first, never a prediction of sale."
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 ranked-list purpose and the example questions before diving into signal definitions, and every sentence carries operational content. It is dense and parenthetical-heavy, so the six-signal enumeration is slower to scan than it needs to be, but the length is largely justified by 11 parameters and 6 signals.
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 filtered, paginated ranking tool this covers what an agent needs to call it correctly: signal semantics, filter interactions, row fields, default and max limits, pagination, and the fresh-daily recompute. An output schema exists, yet the prose still surfaces the score-scale and interpretation caveats the schema cannot express.
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 100%, so the baseline is 3, but the description earns more by defining what each signal actually is (sale_propensity factors, cva_expiring = next 90 days with closer date ranking higher, idle = 60+ days with tracking coverage only) and by clarifying that windowDays means different things for CVA-based versus other signals. Remaining schema-only details (lang, cursor) are minor and adequately labeled.
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?
"Ranked LIST of Brazilian aircraft by one precomputed signal, for prospecting" gives a specific verb (rank), resource (Brazilian aircraft), and scope (single signal), backed by two concrete example questions. It also names the sibling scorers (jt_sale_propensity, jt_fractional_fit) and states that the underlying scores are identical, so an agent can tell this list view apart from the single-signal tools.
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 prospecting examples ("which jet owners in SP are most likely to sell?", "which aircraft enter a maintenance window this quarter?") make the intended use concrete, and the per-signal glosses tell the agent which signal answers which question. It stops short of an explicit routing rule (e.g. "use jt_sale_propensity for a single aircraft, this for a ranked shortlist"), leaving the boundary with siblings like jt_maintenance_signal and jt_fractional_fit only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_statusData freshness, access and quotaARead-onlyIdempotentInspect
Health of the Jet Tracker data behind the tools: server version and toolset hash (if they differ from what your client loaded, reconnect the connector to reload the tool list), last sync of each source (RAB/ANAC registry, Receita Federal records, FAA registry, tracked flights, market listings, GAMA report, RBAC 91K programs) with lag in hours, tracking coverage, the tools this key can call, and the daily quota used, remaining and resetAt (UTC).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds useful context beyond annotations, including quota reset timing, key-scoped tool access, and the reconnect action on toolset hash mismatch.
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?
The description is front-loaded with the core purpose and then enumerates the returned status items efficiently. It is dense but appropriately sized for a status tool covering several sources and quota details.
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 no parameters, rich annotations, and an output schema present, the description provides enough context for correct invocation. It explains what status domains are covered and gives the one operational instruction needed when version state is stale.
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, which is the baseline 4 case. There are no input semantics that need explanation.
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 clearly states that this tool reports the health of the Jet Tracker data behind the tools, and it enumerates the specific status items returned: server version, toolset hash, source sync freshness, coverage, callable tools, and quota. This distinguishes it from all sibling tools, which are data query or watch tools.
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 description gives clear context for using it as a health/quota check and includes one explicit conditional action: reconnect the connector if the toolset hash differs from what the client loaded. It does not explicitly say when not to use it or compare it to alternatives, but no sibling status tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_todayToday's opportunities for my accountAIdempotentInspect
Today's opportunities for the connected account: the top aircraft that ENTERED a signal in the last 24 hours (or 7 days with window="week") and match the account interest profile (owner states, models, categories, segment, preferred signals). Signals: owner changed in the registry, CVA entered the 90-day window, went idle, rose in sale propensity, entered a maintenance window. Each item: registration, model, year, owner (company or "pessoa_fisica" without a name), owner state, why (one sentence with the fact and its date), score, factors and the aircraft link. The same items go to the daily e-mail of accounts that asked for it. Starter gets 5, Pro up to 25 and more than one profile. The first answer to an account without the e-mail carries emailOffer (once per account); jt_today_subscribe turns the e-mail on when the user wants it.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of why/factors. Default pt. | |
| window | No | day (default): last 24 hours. week: last 7 days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, idempotentHint=true) don't explain the plan limits or the side effect, but the description does: Starter returns 5 items, Pro up to 25 with multiple profiles, and the first call for a non-subscribed account carries an emailOffer flag once per account. It also discloses that the same items are delivered to the daily e-mail, which explains the non-read-only annotation.
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 definition and signal list, then the item shape, then plan tiers and the subscribe hand-off. Dense and parenthesis-heavy, and the per-field item list overlaps the output schema, but no sentence is idle.
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?
Given an output schema, the definition still covers the things structure can't: signal semantics, tier-based result caps, the one-time emailOffer side effect, and the subscription sibling. An agent can call it correctly and explain its output without further context.
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 100% and both enum parameters are already documented with defaults, so the description only restates window='week' and does not add formating or defaulting detail beyond the schema. The reference to why/factors language aligns with, but does not extend, the lang parameter's own description.
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 ('the top aircraft that ENTERED a signal in the last 24 hours') tied to the connected account's interest profile, and enumerates the five signal types. This is unmistakably different from sibling tools like jt_signal_ranking or jt_sale_propensity, which cover single signal families.
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 clear usage context (daily digest, window='week' for a 7-day view) and routes the user to jt_today_subscribe when they want the daily e-mail. It stops short of explicitly saying when to prefer this over ranking-focused siblings, so the alternative-routing is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_today_subscribeReceive today's opportunities by e-mailAIdempotentInspect
Turns on (or off) the e-mail with today's opportunities for the connected account, daily or weekly, inside the single daily summary e-mail (never two e-mails a day). It records the user's own choice: nobody is subscribed without asking. Every e-mail has a one-click unsubscribe link.
| Name | Required | Description | Default |
|---|---|---|---|
| frequency | No | Default daily. | |
| subscribe | Yes | true = start receiving; false = stop. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive, closed-world behavior, so the description only needs to add context — and it does: it clarifies the digest is folded into a single daily summary e-mail (never two a day), that consent is required, and that every e-mail carries a one-click unsubscribe. These are real behavioral facts not present in the structured fields, though the effect on an existing subscription's frequency is unstated.
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?
Three tight sentences, front-loaded with the on/off action, followed by the two trust-relevant facts (no unsolicited subscription, one-click unsubscribe). No filler sentences, though the parenthetical '(or off)' is slightly redundant with the subscribe parameter.
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?
This is a low-complexity two-parameter tool with an output schema, so the description need not explain return values. It covers the action, the delivery mechanism, consent, and opt-out, leaving only minor edge cases (frequency ignored on unsubscribe, overwriting an existing subscription) 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 100%, so both parameters (subscribe boolean, frequency enum with 'Default daily.') are already documented. The description adds only the daily/weekly framing, which is largely redundant with the enum; it does not explain how frequency behaves when subscribe is false.
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 verb pair ('turns on (or off)') and a concrete resource ('the e-mail with today's opportunities for the connected account'), so the action is unambiguous. It does not name the sibling it complements (jt_today, which presumably returns the same opportunities on demand), so the differentiation is only implied.
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?
Usage is implied rather than stated: an agent can infer this is the tool for opting into the daily/weekly digest, and 'records the user's own choice: nobody is subscribed without asking' hints at consent preconditions. There is no explicit 'use this when X, use jt_today when Y' routing, and no mention of what happens if a subscription already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_trip_costTrip cost between two airportsARead-onlyIdempotentInspect
REFERENCE operating cost of a trip origin to destination (ICAO codes or city names) for a model with an audited fuel burn: about 94% of the Brazilian executive air-taxi (RBAC 135) fleet, from piston twins to offshore heavy helicopters, plus Praetor 600, Legacy 500/650, Challenger 350, G450, G550 and the five comparator profiles (jt_model_specs.tripCostAvailable says if a model qualifies). Returns block time, reach (verdict nonstop, marginal or needs_stop against the catalog range, using the NBAA IFR range profile when the catalog has one, otherwise 85% of max range, with route = great circle x 1.08) and referenceCost in USD and BRL: variable (fuel, reserves, handling) and full at 200 h/year, from the SAME canonical cost engine as jt_model_specs; one-way trips also get withEmptyReturn. charter is always null: this is NOT a charter price (real quotes add positioning, minimum hours, crew overnight, airport fees and operator margin). Piston models and offshore heavy helicopters come with scope (piston, offshore or executive) and scopeNote, because they are not the typical executive charter segment; a model not audited returns error trip_cost_unavailable with auditedSiblings from the same family. Origin equal to destination returns error degenerate_route.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Modelo: slug de catálogo, família, alias do comparador ou nome (praetor-600, gulfstream-g450, king air 350). | |
| destIcao | Yes | Destino: ICAO ou cidade/nome. | |
| roundTrip | No | true = ida e volta (default); false = só ida (a resposta traz também o custo com retorno vazio). | |
| originIcao | Yes | Origem: ICAO (SBSP) ou cidade/nome (Congonhas, São Paulo). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses the two named error outcomes (trip_cost_unavailable with auditedSiblings, degenerate_route), the always-null charter field, both currencies, the cost components included, and the range methodology (NBAA IFR profile vs 85% of max, route = great circle x 1.08). That is exactly the behavioral context an agent needs before promising a result.
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?
The purpose and scope are front-loaded, and nearly every clause carries useful information, but it is delivered as one semicolon-chained block that is hard to parse on first read. Some points are restated (scope for piston/offshore models, the charter caveat) rather than organized into distinct sentences.
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 reference tool with an output schema, this covers everything an agent needs: eligibility rules, error paths, edge cases, currency, and what the returned cost does and does not include. Even details the output schema could have carried are resolved in prose without ambiguity.
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 100%, so the baseline is 3, but the description adds real meaning: slug must resolve to an audited model or the call errors out, and origin/destination accept ICAO or city names with a degenerate_route guard when they match. The roundTrip explanation largely restates the schema's own withEmptyReturn note, so it lands just above baseline rather than at the top.
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 ('REFERENCE operating cost of a trip origin to destination') and immediately bounds the scope to models with an audited fuel burn, naming the catalog family and comparators. It also draws the key line against a sibling concept by declaring 'this is NOT a charter price', so an agent can distinguish it from a quote tool 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?
Gives strong usage context: reference/operating cost only, with an explicit exclusion ('charter is always null... real quotes add positioning, minimum hours...') and a pointer to jt_model_specs.tripCostAvailable for eligibility pre-checks. What it lacks is a direct 'use jt_compute_tco instead when you need X' routing statement against the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_us_aircraft_lookupUS aircraft by N-numberBRead-onlyIdempotentInspect
US-registered aircraft (FAA registry) by N-number: status (here "reserve" is FAA code R, registration pending, never a mark reservation; see statusNote), model, year, airworthiness date, registrant type, registrant city/state (base.city / base.state: the FAA registrant address, not a hangar), ICAO24 hex (segment=general_aviation when the aircraft is outside the business aviation cut: piston and light general aviation, no ICAO24), plus the Jet Tracker link to Brazil: the same airframe (serial + compatible model) found in the Brazilian registry (a PR-/PT- mark reservation means the aircraft is likely being imported into Brazil). Individuals are not named.
| Name | Required | Description | Default |
|---|---|---|---|
| registration | Yes | N-number, with or without the N (N123AB, 123AB). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, but the description adds meaningful caveats beyond them: 'reserve' is FAA code R and never a mark reservation, base.city/base.state is the FAA registrant address rather than a hangar, and individuals are not named. It also clarifies when segment=general_aviation applies and what the Brazil link means, though it does not discuss not-found 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?
The purpose is front-loaded, but the description is a single dense sentence packed with semicolons and parentheticals. The caveats are useful, yet the run-on structure makes it harder to scan than a short bulleted or segmented form would be.
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?
Given one required parameter, an output schema, and read-only annotations, the definition is largely complete: it covers the main returned fields, caveats about FAA status codes, registrant address semantics, segment behavior, privacy, and the Brazil cross-link. The remaining gap is explicit error or not-found behavior, which is minor because an output schema exists.
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 only one parameter, and the input schema already documents it at 100% coverage, including the accepted formats 'N123AB' and '123AB'. The description adds no additional format or parsing detail beyond what the schema provides, so this is the baseline case for high schema coverage.
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 clearly states a specific resource and lookup key: US-registered aircraft in the FAA registry by N-number. It also enumerates the returned fields, so an agent can understand what the tool does without opening the schema. It does not explicitly distinguish itself from siblings such as jt_aircraft_lookup or jt_cross_registry, which keeps it below a 5.
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 description explains field meanings and caveats but gives no explicit when-to-use or when-not-to-use guidance. It does not name alternatives such as jt_aircraft_lookup for non-US aircraft or batch tools for multiple registrations, so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_watch_addAdd watched registrationsAIdempotentInspect
Add registration(s) to this account's watch list WITHOUT touching the rest (unlike jt_watch_set, which replaces the whole list). Invalid registrations come back in invalid[]; already-watched ones come back in alreadyWatched[]. Max 500 watched registrations total. Requires a Jet Tracker account connection (OAuth or an account key), not a system key.
| Name | Required | Description | Default |
|---|---|---|---|
| registrations | Yes | Brazilian registrations to add, with or without hyphen, any case. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing partial-success semantics (invalid[] and alreadyWatched[] arrays), the 500-registration capacity ceiling, and the auth requirement (OAuth or account key, not a system key). The additive behavior is consistent with destructiveHint=false and idempotentHint=true, so there is no annotation contradiction. It stops short of describing ordering or exactly how many succeed per call.
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 semantic (additive, unlike jt_watch_set) and then layers failure modes, capacity, and auth in three compact clauses with no filler. The heavy parenthetical and dense punctuation make it slightly harder to scan than an ideal definition, but every sentence earns its 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?
Covers the sibling distinction, the mutation's additive scope, auth prerequisites, capacity limits, and partial-failure outcomes, even though an output schema exists to document the return arrays. Nothing an agent needs in order to call this correctly is missing.
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 100% and the single parameter's format notes (hyphen-optional, any case) live in the schema already. The description only reinforces the parameter indirectly via the 500-item cap, which mirrors maxItems. Baseline 3 is appropriate when the schema carries the parameter detail.
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 ("add registration(s) to this account's watch list") and immediately distinguishes itself from jt_watch_set, the sibling that replaces the whole list. An agent can route between the two without opening either 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?
Explicitly names the alternative (jt_watch_set) and the condition that selects this tool over it: additive vs. whole-list replacement. It also states the account-connection prerequisite, so preconditions are covered rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_watch_listWatched registrationsARead-onlyIdempotentInspect
Registrations this account watches: the webhook delivers a change (owner, operator, status, owner state, lien) only for tails in this list. Requires a Jet Tracker account connection (OAuth or an account key), not a system key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the auth requirement (OAuth or account key, explicitly not a system key) and the fact that this list gates which registrations trigger webhook changes. Return format is not described, but the output schema exists.
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 identity of the resource and followed by the auth constraint; no filler. It is slightly dense (the parenthetical field list is compressed) but every clause carries information.
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 no-parameter, read-only list tool with an output schema and full annotation coverage, the description supplies everything else an agent needs: what the list contains, why it matters (webhook gating), and the non-obvious connection requirement. Nothing material is missing.
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 the schema imposes no semantic burden and the baseline is 4. Nothing in the description is needed to clarify inputs, and nothing contradicts the empty object schema.
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 precisely what the tool returns ('Registrations this account watches') and explains the role of the list in the webhook flow, which is more than a restatement of the name. It does not, however, explicitly distinguish itself from the near-name sibling jt_watch_rules_list, leaving an agent to infer that 'rules' and 'watched registrations' are different collections.
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?
Usage is implied through the webhook explanation ('the webhook delivers a change ... only for tails in this list') plus a clear connection prerequisite, so an agent understands the context in which this list matters. But there is no explicit when-to-use/when-not statement and no routing to siblings such as jt_watch_rules_list or jt_watch_add/jt_watch_remove for modifying the list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_watch_removeRemove watched registrationsADestructiveIdempotentInspect
Remove registration(s) from this account's watch list WITHOUT touching the rest. Invalid registrations come back in invalid[]. Requires a Jet Tracker account connection (OAuth or an account key), not a system key.
| Name | Required | Description | Default |
|---|---|---|---|
| registrations | Yes | Brazilian registrations to remove, with or without hyphen, any case. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety is covered. The description adds genuinely new behavior: partial-failure semantics ('Invalid registrations come back in invalid[]') and the auth requirement (account connection via OAuth/account key, not a system key).
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?
Three short sentences, front-loaded with the action and its scoping guarantee, then the failure-mode note, then the prerequisite. No sentence is redundant.
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 annotations covering safety/idempotency, an output schema covering returns, and 100% parameter coverage, the description supplies exactly the missing pieces: auth requirements, non-clobbering scope, and partial-failure handling. Nothing an agent needs to call it correctly is absent.
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 100% for the single parameter, including format and min/max constraints, so the schema carries the load. The description adds no format or syntax detail beyond it, making the baseline 3 appropriate.
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 ('Remove registration(s) from this account's watch list') and scopes it precisely with 'WITHOUT touching the rest', which distinguishes it from whole-list siblings like jt_watch_set and jt_watch_add.
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 'WITHOUT touching the rest' clause implicitly tells the agent to prefer this over a set/replace operation when removing a subset, and the auth sentence establishes the connection prerequisite. It stops short of naming jt_watch_set or jt_watch_remove_rule as the explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_watch_rule_addAdd a watch-by-profile ruleAIdempotentInspect
Create a watch rule by profile: every field is optional and null means "no filter on this"; at least one of modelFamily/uf/category/rbac should be set or the rule watches the whole live fleet. eventTypes picks which business events this rule delivers (registry.changed, airworthiness.cva_expiring, airworthiness.cva_expired, flight.ground_stay, program.ea_revised). dryRun=true only returns preview.count (how many live registrations match right now) without saving. Requires a Jet Tracker account connection (OAuth or an account key), not a system key.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Registered state (UF) of the owner in the RAB, e.g. SP. Not where the aircraft is based. | |
| rbac | No | 91, 91k, 135, 121 or 137. | |
| label | No | Free label for the account to recognize the rule. | |
| dryRun | No | true: only preview, does not save. | |
| category | No | Fine category (light, midsize...) or group (jet, turboprop, helicopter, piston). | |
| eventTypes | Yes | Which business events this rule delivers. | |
| modelFamily | No | Catalog family slug (e.g. phenom-300). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true, and the description adds genuinely new behavior: what happens when all filters are null (whole live fleet), what dryRun does ('only returns preview.count ... without saving'), the exact deliverable events, and a real auth constraint (account connection, not a system key). This is substantive disclosure beyond the structured fields.
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 paragraph that is front-loaded with the purpose, then filter semantics, dryRun behavior, and the auth prerequisite, with no filler sentences. It is slightly packed with semicolon-separated clauses, which costs it the top mark but nothing is wasted.
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 detailed, yet the description still explains the one meaningful response mode (dryRun returning preview.count). Combined with the null-filter behavior, event list, and auth requirement, an agent has everything needed to invoke it 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?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema cannot express: every field is optional, null means no filter, and at least one of the four filter fields should be set. It also enumerates the valid eventTypes inline. The per-parameter descriptions already carry the field-level meaning, so it is not a full 5.
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 ('Create a watch rule by profile') and its scope (profile-based rather than aircraft-based), which implicitly separates it from jt_watch_add. However, no sibling is named, so an agent must infer the distinction from the 'by profile' phrasing rather than being told.
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 clear operating context: at least one of modelFamily/uf/category/rbac should be set or the rule watches the whole live fleet, and it explicitly notes the account-connection prerequisite ('OAuth or an account key, not a system key'). It does not explicitly route between this and jt_watch_add / jt_watch_set, so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_watch_rule_removeRemove a watch-by-profile ruleADestructiveIdempotentInspect
Delete a watch-by-profile rule by id (ids come from jt_watch_rules_list). Does not touch explicit registrations from jt_watch_set/jt_watch_add. Requires a Jet Tracker account connection (OAuth or an account key), not a system key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Rule id, from jt_watch_rules_list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=true, so the safety profile is covered structurally. The description adds real value beyond that: the mutation is narrow (profile rules only, not explicit registrations) and requires an account connection/OAuth rather than a system key, which is an auth constraint 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?
Three short sentences, front-loaded with the core action and scope, then the non-effect, then the auth requirement. No filler or restatement of the title.
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. The description covers the action, the id source, the scope boundary versus sibling watch tools, and the auth requirement — everything needed to call this destructive one-param tool 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?
Schema description coverage is 100% and the single id parameter is documented in the schema, so the description's mention that ids come from jt_watch_rules_list largely duplicates the schema text. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('Delete a watch-by-profile rule by id') and immediately scopes it against the neighboring concepts (explicit registrations from jt_watch_set/jt_watch_add). An agent can distinguish this from jt_watch_remove and jt_watch_rule_add without opening any 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?
Tells the agent where the required id comes from (jt_watch_rules_list) and explicitly what this tool does NOT affect (explicit registrations), which is the key routing distinction among several watch-related siblings. The auth prerequisite is stated as a condition on use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_watch_rules_listWatch rules of this accountARead-onlyIdempotentInspect
Rules this account uses to watch aircraft BY PROFILE (model family, owner state, category, RBAC classification) instead of one registration at a time: every live tail matching a rule is watched, including ones registered after the rule was created. Adds to (never replaces) the explicit list from jt_watch_list. Max 50 rules. Requires a Jet Tracker account connection (OAuth or an account key), not a system key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavior beyond them: the additive (never replacing) semantics relative to jt_watch_list, the 50-rule cap, retroactive matching of tails registered after rule creation, and the auth requirement (account OAuth/key, not a system key). Those are exactly the operational facts an agent cannot infer from annotations.
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 but well-ordered sentence that front-loads the core definition, then layers scope distinctions, cardinality limit, and auth prerequisite. Every clause carries information an agent would otherwise have to guess.
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 (so return values need no explanation), zero parameters, and annotations covering safety, the description supplies the remaining essentials: what a rule matches, the 50-rule ceiling, the additive relationship to the explicit watch list, and the required credential type. Nothing needed to call it correctly is missing.
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 and the schema is empty, so there is nothing for the description to disambiguate — the baseline of 4 applies. The description correctly implies the account scope comes from the connection rather than an argument.
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 ('rules this account uses to watch aircraft BY PROFILE') and immediately enumerates the profile dimensions (model family, owner state, category, RBAC classification). It explicitly contrasts the scope with 'one registration at a time', which cleanly separates it from the sibling jt_watch_list.
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?
Explains that this complements rather than replaces jt_watch_list ('Adds to (never replaces) the explicit list from jt_watch_list'), which is exactly the routing information an agent needs. It also states the connection prerequisite. It stops short of saying when the tool should not be used or pointing to jt_watch_rule_add for rule creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jt_watch_setReplace watched registrationsADestructiveIdempotentInspect
Replace the whole watch list of this account (idempotent: sending the same list twice changes nothing). Watched aircraft feed the account webhook with registry.changed plus business events: airworthiness.cva_expiring (30 and 7 days), airworthiness.cva_expired and flight.ground_stay. Invalid registrations are returned in invalid[] and the rest is saved. Max 500. Requires a Jet Tracker account connection (OAuth or an account key), not a system key.
| Name | Required | Description | Default |
|---|---|---|---|
| registrations | Yes | Full list of Brazilian registrations to watch. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Machine-readable error code (INTERNAL, TIMEOUT, INVALID_ARGUMENT, NOT_FOUND, TOOL_FAILED, ACCOUNT_KEY_REQUIRED). |
| _meta | No | |
| error | No | |
| found | No | |
| gated | No | |
| requestId | No | |
| retryable | No | |
| quota_exceeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true; the description reinforces replace semantics and adds non-annotation context: OAuth/account-key auth requirement, the 500 cap, partial-failure behavior (invalid[] returned, rest saved), and the downstream webhook event catalogue. It does not detail reversibility or rate limits, but that is a minor gap against an otherwise rich disclosure.
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?
Information-dense and front-loaded with the core replace semantics, then auth/limits/errors. It is a single very long sentence-chain, which slightly hurts scanability, but every clause carries real content.
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 and full annotations present, the description only needs to supply the operational extras — auth mode, cap, partial-failure handling, webhook consequences — and it does all of them. Nothing an agent needs to invoke this destructive bulk-set correctly is missing.
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 100% and the single parameter is fully documented in the schema, so the baseline is 3. The description adds the 500-item ceiling and the fate of invalid entries, which is behavior rather than new per-parameter syntax, so it does not exceed the 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?
States a specific verb (Replace) and resource (the account's whole watch list), with the scope word 'whole' making it clearly distinct from the additive jt_watch_add and subtractive jt_watch_remove siblings. An agent can route correctly without opening any 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?
Implies the right context (bulk-set semantics vs. incremental add/remove) and explicitly states the required account connection and that a system key will not work. It does not name an alternative tool or a when-not-to-use case, so it stops short of full routing guidance.
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.
5 tool updates
- Changed
jt_fleet_search1 field changed- changed
Input schema / properties / segment / descriptionPrevious value: -"Default executive."New value: +"Omit to let the filter decide (see segmentApplied in the answer). executive, geral (general aviation), comercial, militar or all."
- Changed
jt_market_search1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Only listings from this portal (controller, globalair, tradeaplane, avbuyer, aeronavesavenda...)."New value: +"Only listings from this portal (controller, globalair, tradeaplane, avbuyer, aeronavesavenda...), or social_radar for aircraft offered only on social media profiles (off-market)."
- Added
jt_signal_ranking - Added
jt_today - Added
jt_today_subscribe
1 tool update
- Added
jt_market_search
1 tool update
- Changed
jt_trip_cost2 fields changed- changed
Input schema / properties / roundTrip / descriptionPrevious value: -"true = ida e volta (default); false = só ida."New value: +"true = ida e volta (default); false = só ida (a resposta traz também o custo com retorno vazio)." - changed
Input schema / properties / slug / descriptionPrevious value: -"Modelo com calculadora completa (mesmos aliases do compute_tco)."New value: +"Modelo: slug de catálogo, família, alias do comparador ou nome (praetor-600, gulfstream-g450, king air 350)."
1 tool update
- Changed
jt_sector_indicators3 fields changed- added
Input schema / properties / icaoAdded value: +{ + "description": "Aerodrome ICAO (SBJD) for its monthly CGNA series; only with topic=airports or no topic.", + "pattern": "^[A-Za-z]{4}$", + "type": "string" +} - changed
Input schema / properties / topic / descriptionPrevious value: -"trade (Comex Stat) or fuel (ANP); omit for both."New value: +"trade (Comex Stat), fuel (ANP) or airports (CGNA); omit for all three." - changed
Input schema / properties / topic / enumPrevious value: -[ - "trade", - "fuel" -]New value: +[ + "trade", + "fuel", + "airports" +]
2 tool updates
- Changed
jt_movements1 field changed- changed
Input schema / properties / model / descriptionPrevious value: -"Catalog slug, family slug or free text."New value: +"Catalog slug, family slug or free text. Not a registration: a Brazilian registration here (PS-VLY) is moved to registrations and the answer carries notice."
- Changed
jt_registry_changes1 field changed- changed
Input schema / properties / model / descriptionPrevious value: -"Catalog slug, family slug or free text."New value: +"Catalog slug, family slug or free text. Not a registration: a Brazilian registration here (PS-VLY) is moved to registrations and the answer carries notice."
3 tool updates
- Added
jt_model_moves - Changed
jt_movements3 fields changed- added
Input schema / properties / cnpjAdded value: +{ + "description": "Only changes of this company: 14-digit CNPJ or 8-digit root. Includes aircraft that already left it. CPF is not accepted.", + "maxLength": 18, + "minLength": 8, + "type": "string" +} - added
Input schema / properties / registrationsAdded value: +{ + "description": "Only these registrations (with or without hyphen).", + "items": { + "maxLength": 20, + "minLength": 1, + "type": "string" + }, + "maxItems": 25, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / segment / descriptionPrevious value: -"Default executive."New value: +"Default executive; default all when registrations or cnpj is set."
- Changed
jt_registry_changes3 fields changed- added
Input schema / properties / cnpjAdded value: +{ + "description": "Only changes of this company: 14-digit CNPJ or 8-digit root. Includes aircraft that already left it. CPF is not accepted.", + "maxLength": 18, + "minLength": 8, + "type": "string" +} - added
Input schema / properties / registrationsAdded value: +{ + "description": "Only these registrations (with or without hyphen).", + "items": { + "maxLength": 20, + "minLength": 1, + "type": "string" + }, + "maxItems": 25, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / segment / descriptionPrevious value: -"Default executive."New value: +"Default executive; default all when registrations or cnpj is set."
5 tool updates
- Added
jt_fuel_prices - Added
jt_model_maintenance - Changed
jt_model_search3 fields changed- changed
Input schema / properties / category / defaultPrevious value: -"qualquer"New value: +"any" - changed
Input schema / properties / category / descriptionPrevious value: -"Filtro por categoria."New value: +"jet, turboprop, helicopter, piston or any (the Portuguese jato, turboelice, helicoptero, pistao, qualquer also work)." - changed
Input schema / properties / category / enumPrevious value: -[ - "jato", - "helicoptero", - "turboelice", - "pistao", - "qualquer" -]New value: +[ + "jet", + "turboprop", + "helicopter", + "piston", + "any", + "jato", + "turboelice", + "helicoptero", + "pistao", + "qualquer" +]
- Added
jt_mro_capabilities - Added
jt_parts_suppliers
3 tool updates
- Changed
jt_aircraft_flights2 fields changed- changed
Input schema / properties / registration / descriptionPrevious value: -"Brazilian registration (PR-TBL)."New value: +"Brazilian registration (PR-TBL) or US N-number (N470QS)." - changed
Input schema / properties / registration / minLengthPrevious value: -5New value: +2
- Added
jt_market_index - Added
jt_sector_indicators
1 tool update
- Changed
jt_global_fleet_search1 field changed- changed
Input schema / properties / status / descriptionPrevious value: -"Default: operational + reserve."New value: +"Default: operational + reserve. In US rows, reserve is FAA status code R (registration pending), not a mark reservation."
1 tool update
- Changed
jt_market_listings1 field changed- added
Input schema / properties / spec_filtersAdded value: +{ + "description": "Filtros pela FICHA TÉCNICA do anúncio (o que o anunciante declarou). Opcional. Quando presente, a resposta ganha `spec_matches` com os anúncios que afirmam os critérios; anúncio que não informa fica de fora, então leia `withSpecsCount` antes de dizer \"não há nenhum\".", + "properties": { + "avionics": { + "description": "Trecho da suíte de aviônicos (ex: \"G1000\", \"Pro Line 21\").", + "maxLength": 40, + "minLength": 2, + "type": "string" + }, + "engine_program": { + "description": "true = só anúncio que declara motor em programa (JSSI, ESP, MSP, TAP...).", + "type": "boolean" + }, + "max_engine_hours": { + "description": "Teto de horas do motor mais rodado (desde a revisão geral quando informado, senão desde novo).", + "exclusiveMinimum": 0, + "maximum": 30000, + "type": "integer" + }, + "no_damage_history": { + "description": "true = só anúncio que declara não ter histórico de dano.", + "type": "boolean" + }, + "wifi": { + "description": "true = só anúncio que declara conectividade de cabine.", + "type": "boolean" + }, + "year_min": { + "description": "Ano de fabricação mínimo.", + "maximum": 2100, + "minimum": 1950, + "type": "integer" + } + }, + "type": "object" +}
4 tool updates
- Changed
jt_fleet_search1 field changed- changed
Input schema / properties / uf / descriptionPrevious value: -"Base state (UF), e.g. SP, MG, PR."New value: +"Registered state (UF) of the owner, e.g. SP, MG, PR. Not where the aircraft is based: the RAB has no base."
- Changed
jt_movements1 field changed- changed
Input schema / properties / uf / descriptionPrevious value: -"Base state (UF)."New value: +"Registered state (UF) of the owner."
- Changed
jt_registry_changes1 field changed- changed
Input schema / properties / uf / descriptionPrevious value: -"Base state (UF)."New value: +"Registered state (UF) of the owner."
- Changed
jt_watch_rule_add1 field changed- changed
Input schema / properties / uf / descriptionPrevious value: -"Base state (RAB base_uf), e.g. SP."New value: +"Registered state (UF) of the owner in the RAB, e.g. SP. Not where the aircraft is based."
Publisher details
- Operator
- Medralia · Publisher source
- Operator website
- https://jettracker.com.br
- Vendor relationship
- First-party
- Documentation
- https://jettracker.com.br/desenvolvedores
- Trust center
- Not available
- Restrictions
- Requires a free Jet Tracker account. Some tools require a paid plan (Starter, Pro or Enterprise); daily quota per plan. · Publisher source
Related MCP Connectors
Empresas, sócios e conexões por CNPJ. Brazilian company data, ownership and corporate networks.
Brazilian company and person data by CNPJ/CPF: registry, partners, tax status, sanctions, lawsuits.
Brazilian business data for AI agents. Public company dossiers by CNPJ.
Brazilian company data by CNPJ from Receita Federal: partners, CNAE, address, debts and sanctions.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables lookup and validation of Brazilian companies by CNPJ, returning registration status, address, CNAE activities, Simples Nacional/MEI status, and partners from monthly Receita Federal open data, plus validation of numeric or alphanumeric CNPJ check digits and search of active companies by activity and municipality.MIT- AlicenseAqualityAmaintenanceEnables LLM clients to investigate Brazilian companies by CNPJ or name, mapping corporate relationships and gathering structured, source-attributed public evidence from official registries, news, social profiles, judicial proceedings, and PEP checks.6MIT
- AlicenseAqualityCmaintenanceEnables querying Brazilian company records from open Receita Federal data without a local database, covering CNPJ lookups, partners, corporate networks, addresses, filters, and DJEN legal notices. It uses public APIs and remote Parquet files to support partial reads and caching.102AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables searching and analyzing Brazilian sanctions across multiple registers (CNEP, CEIS, CEPIM, CEAF, Leniency Agreements) via CNPJ/CPF or name for leniency agreements, with tools for status checks, sanctioning authorities, location info, and comprehensive reports.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.