Skip to main content
Glama

BatterySnap

Server Details

Real-world Android battery stats from BatterySnap users: device, model and fleet rankings.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target clearly distinct resources (brands, models, devices, fleet) and the descriptions proactively steer selection (e.g. device_ranking over device_summary+model_summary). The main ambiguity is the cluster of ranking tools (top_devices, top_devices_by_uptime, top_devices_by_live_uptime, top_models) which overlap heavily in purpose, though descriptions do differentiate them.

Naming Consistency4/5

Names are uniformly snake_case and readable, with a predictable resource/action feel (device_summary, model_summary, fleet_totals, top_models). However, several tools are bare nouns (brands, devices, models, search) while others use prefixes, so the verb_noun pattern is not strictly maintained.

Tool Count5/5

13 tools is well-scoped for a battery-analytics domain, with each tool covering a distinct level of aggregation (device, model, brand, fleet) or a distinct query type. Nothing feels redundant or missing at the count level.

Completeness4/5

The read-only surface covers discovery (brands, models, search), per-entity metrics (device/model/fleet summaries), leaderboards, and fleet counters, which is strong lifecycle coverage for a query API. Minor gaps: no raw timeseries access and no explicit pagination/metadata tool, though limit/offset params mitigate this.

Available Tools

13 tools
brandsList brandsA
Read-onlyIdempotent
Inspect

Return the mobile devices brands for which we have battery statistics, along with the number of distinct models, the number of devices recorded per brand, and the largest single-model device count within the brand (max_devices_per_model). Each entry also includes a url to the public BatterySnap web page for the brand (e.g. https://www.battery-snap.com/brands/samsung). Pass min_device_count / max_device_count and min_model_count / max_model_count to filter brands by recorded-device and distinct-model counts. Pass fields to keep only specific attributes in each entry. The full list is long: pass limit (and offset to page) unless you really need every brand, and prefer search when resolving one brand by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoReturn at most this many entries. Omit for no cap — but the unbounded list can be very large, so prefer a limit.
fieldsNoOptional whitelist of attribute names to keep in each returned entry, used to shrink the response. When omitted or empty, all attributes documented in the output schema are returned. Unknown names are silently ignored.
offsetNoSkip this many entries before returning results — use with `limit` to page through a long list. Defaults to 0.
max_model_countNoDrop brands with more than this many distinct models. Omit for no upper bound.
min_model_countNoDrop brands with fewer than this many distinct models. Defaults to 0 (keep all).
max_device_countNoDrop entries with more than this many recorded devices. Use to skip very common entries. Omit for no upper bound.
min_device_countNoDrop entries with fewer than this many recorded devices. Defaults to 1 (keep all).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so the bar is lower. The description still adds real behavioral context: the unbounded list 'can be very large' so a limit is preferred, and unknown `fields` names are silently ignored — neither is derivable from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what is returned, then filters, then the performance warning — a sensible ordering with no filler. It is slightly long and restates some parameter behavior already documented in the 100%-covered schema, which costs it the top mark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no narration, and annotations carry the safety profile; the description fills the remaining gaps an agent needs — payload size, paging, filtering, and the alternative tool for a single brand.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description goes beyond it by explaining the intent behind the parameters: min/max device and model counts filter the list, `fields` prunes entries, and limit/offset should be used proactively because of list size.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Return the mobile devices brands for which we have battery statistics') and enumerates the exact per-entry attributes returned, including `max_devices_per_model` and the brand `url`. An agent can distinguish this from siblings like `top_models` or `fleet_summary` 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent to pass `limit` (and `offset`) unless every brand is genuinely needed, and routes single-brand lookups to `search` by name. Both the when-to-use and the named alternative are stated directly rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_rankingCompare a device to its peersA
Read-onlyIdempotent
Inspect

Answer 'is MY phone normal?' — rank one device's metric against other devices of the same model AND against the whole fleet, in one call. Returns the device's value, its 1-based rank, its percentile, and the cohort median / mean / min / max for both cohorts.

Prefer this over fetching device_summary + model_summary and comparing by hand: it is a single call and gives the percentile directly. The model cohort is the meaningful one for 'is this device degraded'; the fleet cohort puts the model itself in context.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricNoWhich battery metric to rank on. One of: 'temperature_c' (mean battery temperature, C), 'max_temperature_c' / 'min_temperature_c' (hottest / coldest ever seen, C), 'battery_level_pct' (mean charge level, 0-100), 'discharge_hours' (hours to drain a full 100% - HIGHER means longer battery life), 'ac_charge_hours' / 'usb_charge_hours' / 'wireless_charge_hours' (hours to charge a full 100% on that source - LOWER means faster charging), 'awake_ratio' (fraction of time awake / screen-on, 0..1), 'snapshot_count' (how much data the device contributed), 'uptime_hours' (longest single uptime between reboots).discharge_hours
device_uidYesStable device UUID returned by `devices`, `top_devices` or the share flow.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoPublic BatterySnap page with this device's interactive battery history.
brandNoLowercase Android brand identifier.
fleetNoRank against every device in the fleet, all models mixed.
modelNoResolved model name (street name).
valueNoThis device's value for the metric.
metricNoThe metric that was ranked.
raw_modelNoRaw Build.MODEL identifier.
device_uidNoThe device that was ranked.
model_cohortNoRank against other devices of the SAME brand + model — the fair like-for-like comparison.
snapshot_countNoSnapshots behind this device's aggregate.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and closed-world, so the safety profile is covered. The description adds interpretive behavior beyond that: it names the four return elements (value, 1-based rank, percentile, cohort stats) and, more usefully, explains what each cohort means. It stops short of anything about pagination or limits, but none is needed for a single-device lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the user question and the one-call promise before the mechanics, and each sentence carries signal (purpose, return shape, alternative, cohort interpretation). The 'Answer is MY phone normal?' hook and the two-cohort explanation make it slightly longer than strictly necessary, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be fully specified, yet the description still summarizes them and adds the cohort-interpretation nuance. For a two-parameter read tool with full annotation coverage, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the metric parameter's exhaustive value list and semantics are already fully documented in the schema, and device_uid explains its provenance. The description adds no parameter-level detail beyond the schema, so the baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rank) and resource (one device's metric) with the exact scope: against same-model devices AND the whole fleet in one call. It explicitly names the siblings it supersedes (device_summary + model_summary), so an agent can tell it apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance: 'Prefer this over fetching device_summary + model_summary and comparing by hand.' It also disambiguates the two cohorts, saying the model cohort matters for 'is this device degraded' while the fleet cohort contextualizes the model.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

devicesFind devices by modelA
Read-onlyIdempotent
Inspect

Return the list of individual physical devices matching one or more (brand, model) pairs for which we have battery statistics. Each entry in the returned list describes ONE specific device (identified by its own device_uid) and the metrics on that entry are aggregates computed only from THAT device's own snapshot history — they are not aggregated across devices. Two devices of the same brand and model will appear as two separate entries with their own independent metrics.

Per-device fields include: brand, resolved model (street name), raw Android model, snapshot count, activity window (first / last seen), average battery level, average / min / max battery temperature in Celsius, awake-ratio, discharge speed and AC / USB / wireless charge speed (hours per full 100% swing), Android SDK level, IANA time zone, and a url pointing at the public BatterySnap web page for the device's interactive battery history (https://www.battery-snap.com/device_history?device=).

Each pair's model is matched case-insensitively against either the resolved street name (e.g. 'Galaxy S23') or the raw Android model identifier (e.g. 'SM-S911B'). Pass fields to keep only specific attributes per device and avoid bloated responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
pairsYesOne or more {brand, model} pairs to look up. Each pair fetches devices matching that brand and model.
fieldsNoOptional whitelist of attribute names to keep in each returned entry, used to shrink the response. When omitted or empty, all attributes documented in the output schema are returned. Unknown names are silently ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe-read profile (readOnlyHint, idempotentHint, openWorldHint=false), so the bar is lower. The description adds genuine behavioral context beyond that: one entry per device with independently computed metrics, case-insensitive matching against either street name or raw model, and the response-shrinking role of `fields`. It stops short of any rate-limit or result-cap/pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and per-device semantics are front-loaded in the opening sentences, and the closing note on `fields` is actionable. The middle enumeration of per-device fields is somewhat redundant given an output schema exists, which is the main source of avoidable length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with full schema coverage, an output schema, and annotations covering safety, the description supplies everything else an agent needs: entity grain (one device per entry), aggregation semantics, matching rules across two identifier forms, and the `url` pattern. Nothing required 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `pairs` and `fields` are already documented in the schema itself. The description restates the case-insensitive model-matching rule and the fields whitelist but adds no syntax or format detail the schema lacks; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Return the list of individual physical devices matching one or more (brand, model) pairs'. It sharply scopes the result as per-device rather than aggregated, which conceptually separates it from siblings like device_summary or model_summary, but it never names those siblings explicitly, so differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the per-device framing ('they are not aggregated across devices'), which hints this is the tool for individual-device data versus sibling aggregation tools. However, there is no explicit when-to-use/when-not guidance or named alternative, 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.

device_summaryDevice battery summaryA
Read-onlyIdempotent
Inspect

Return aggregated battery metrics for ONE specific device: average / min / max temperature, average battery level, mean charge time per power source (AC, USB, wireless) and mean discharge time over a recent (~2 weeks) and a long (~2 months) window, plus awake ratio and basic device info. Also includes url: the public BatterySnap web page for this device's interactive battery history (https://www.battery-snap.com/device_history?device=). All values are pre-computed from the device's full snapshot history — no raw timeseries is returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_uidYesStable device UUID returned by the `devices` tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoPublic BatterySnap web page showing this device's interactive battery history, e.g. https://www.battery-snap.com/device_history?device=<uid>. Locale-agnostic.
brandNoLowercase Android brand identifier.
modelNoHuman-readable resolved model name (e.g. 'Galaxy S23').
last_seenNoISO 8601 timestamp of the most recent snapshot.
raw_modelNoRaw Build.MODEL string reported by the device.
time_zoneNoIANA time zone reported by the device.
device_uidNoStable UUID identifying this device.
first_seenNoISO 8601 timestamp of the earliest snapshot.
awake_ratioNoFraction of observed time the device was awake / screen-on (0..1).
observed_daysNoSpan in days between first_seen and last_seen.
snapshot_countNoTotal snapshots recorded for this device.
android_api_levelNoAndroid SDK level (e.g. 34 = Android 14).
avg_temperature_cNoMean battery temperature in Celsius across all snapshots.
max_temperature_cNoHottest battery temperature in Celsius ever observed. Sustained highs are a battery-health concern.
min_temperature_cNoColdest battery temperature in Celsius ever observed.
avg_battery_level_pctNoMean battery charge level across all snapshots (0-100).
mean_ac_charge_hours_longNoHours to charge 100%% on AC over the last ~2 months.
mean_discharge_hours_longNoAverage hours to discharge 100%% over the last ~2 months.
mean_usb_charge_hours_longNoHours to charge 100%% over USB over the last ~2 months.
mean_ac_charge_hours_recentNoHours to charge 100%% on AC (wall charger) over the last ~2 weeks.
mean_discharge_hours_recentNoAverage hours to discharge 100%% over the last ~2 weeks. Null when not enough data.
mean_usb_charge_hours_recentNoHours to charge 100%% over USB (computer) over the last ~2 weeks.
mean_wireless_charge_hours_longNoHours to charge 100%% wirelessly over the last ~2 months.
mean_wireless_charge_hours_recentNoHours to charge 100%% wirelessly over the last ~2 weeks.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and closed-world, so the safety profile is covered. The description adds meaningful behavioral context beyond that: values are pre-computed from full snapshot history, no raw timeseries is returned, and it defines the ~2 week and ~2 month windows and the included public `url`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and scope, then efficiently enumerates the returned aggregates. The field listing is somewhat long for a tool that already has an output schema, but every clause adds genuine scoping or return-context information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Safety is covered by annotations and return structure by the output schema, and the description still usefully clarifies the pre-computed nature, window definitions, and non-return of raw timeseries. Only the sibling selection guidance remains implicit rather than explicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains device_uid as the UUID returned by the `devices` tool. The description reinforces the single-device constraint but adds no format or syntax detail beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Return aggregated battery metrics for ONE specific device') and enumerates the exact aggregates (temperature, battery level, charge/discharge times, awake ratio, device info). The all-caps 'ONE specific device' scope directly distinguishes it from fleet_summary and model_summary siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The single-device scope clearly contrasts with the fleet/model aggregation siblings, and the input schema points to the `devices` tool as the source of the uid, giving the agent a clear context for when to reach for this tool. It stops short of explicit when/when-not exclusions naming the alternative siblings directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fleet_summaryFleet battery summaryA
Read-onlyIdempotent
Inspect

Aggregate battery metrics across the entire fleet, or across one brand when brand is provided. Returns mean / median / p25 / p75 / min / max for the same set of metrics as model_summary. Use this for fleet-wide baselines that a single device or model can be compared against.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional lowercase brand identifier. If set, aggregates across that brand only; otherwise across the entire fleet.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeNo'fleet' for whole fleet, or 'brand:<lowercase-brand>' when scoped to a brand.
awake_ratioNo
model_countNoDistinct resolved models in scope.
device_countNoDistinct devices in scope.
temperature_cNo
snapshot_countNoSum of snapshots across all devices in scope.
ac_charge_hoursNo
discharge_hoursNo
usb_charge_hoursNo
battery_level_pctNo
wireless_charge_hoursNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and closed-world behavior, so the safety profile is covered. The description's additional content (aggregation scope, statistic set) is largely duplicative of the `brand` schema description and the output schema, leaving little genuinely new 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences that lead with the aggregation scope and then the purpose; nothing is buried. The statistic enumeration (mean/median/p25/p75/min/max) is mildly redundant with the output schema but still reads efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter read-only aggregation tool with an output schema and safety annotations already present, the description supplies all the framing an agent needs: what is aggregated, over what scope, and what the numbers are for.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single `brand` parameter is fully documented in the schema (optional, lowercase, aggregates that brand only). The description restates the same conditional behavior without adding format, casing, or fallback semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (aggregate) and resource (battery metrics) plus the exact scope (whole fleet, or one brand when `brand` is set), and explicitly ties itself to `model_summary` as the metric-set reference point. An agent can distinguish it from siblings like device_summary/fleet_totals 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this for fleet-wide baselines that a single device or model can be compared against" gives clear when-to-use context and implies the relationship to per-device/per-model tools. It stops short of naming the sibling alternatives (model_summary, device_summary) as explicit fallbacks, so it is strong but not routing-complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fleet_totalsFleet totalsA
Read-onlyIdempotent
Inspect

Live fleet-wide counters: total devices, models, snapshots, sessions, the running snapshot-ingest rate (snapshots/sec) and the timing of the last insert batch. Use this for one-shot 'how big is the dataset / how fast is it growing' questions. Unlike fleet_summary, no per-device aggregation is involved — these are raw running counts from the database.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
model_countNoDistinct resolved models (street names) across the fleet.
device_countNoDistinct devices that have ever reported a snapshot.
session_countNoTotal reboot-bounded sessions recorded across all devices.
snapshot_countNoTotal battery snapshots stored across all devices, taken from the running counter in the `globals` table.
snapshot_insert_rateNoExponentially-smoothed snapshot-ingest rate, in snapshots per second.
last_snapshot_insert_timeNoISO 8601 timestamp of the most recent snapshot-batch insert.
last_snapshot_insert_countNoNumber of snapshots in the most recent insert batch.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint=false and idempotentHint, so the safety profile is covered. The description still adds useful behavioral context beyond the schema: the counters are 'live' real-time running values and are 'raw' database counts rather than computed aggregations. It stops short of noting update cadence or whether numbers can lag, but that is a minor gap given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences: the returned counters come first, then the intended use case, then the sibling differentiation. Every clause carries information an agent needs for selection; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not enumerate return fields, and it does not waste words doing so. For a parameterless, read-only counter tool, purpose, usage, and sibling differentiation are all present — nothing required for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate, and it correctly avoids inventing filtering options that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (fleet-wide counters) and enumerates exactly what is counted: devices, models, snapshots, sessions, ingest rate, and last insert batch timing. It explicitly contrasts itself with `fleet_summary`, so an agent can distinguish it from siblings 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Prescribes the exact use case ('one-shot how big is the dataset / how fast is it growing questions') and names the alternative (`fleet_summary`) with the discriminating condition (no per-device aggregation). This is explicit when-to-use plus alternatives, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modelsList modelsA
Read-onlyIdempotent
Inspect

Return the mobile devices models of the given brands for which we have battery statistics, along with the brand each model belongs to, the number of devices recorded, the average battery temperature in Celsius, and the min/max Android SDK level per model.

Each entry is grouped by the resolved street name (e.g. 'Galaxy S23'), which may cover several raw Android Build.MODEL identifiers (carrier variants, regional SKUs, …). For URL building, every entry also exposes:

  • raw_model_code: a representative raw Build.MODEL identifier (the lexicographically smallest one among devices grouped under this street name), or null if no device reported a non-empty model code.

  • url: the public BatterySnap web page for the model, e.g. https://www.battery-snap.com/brands/samsung/models/SM-S911B. Built from brand + raw_model_code; null when either is null; raw_model_code is null. The page lists all devices reporting that exact raw model.

Pass min_device_count / max_device_count to filter models by how many devices were recorded. For 'which models have the most devices' questions, pass sort='device_count' with a small limit (and typically fields=['brand', 'model', 'device_count', 'url']) instead of fetching and sorting the full list. Pass fields to keep only specific attributes in each entry. Omit brands (or pass an empty list) to return models across every brand.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order of the returned models: 'name' (default, alphabetical by brand then model) or 'device_count' (most recorded devices first). Combine sort='device_count' with `limit` to answer 'most popular models' questions in one small call.name
limitNoReturn at most this many models (applied after filtering and sorting). Omit for no cap.
brandsNoOne or more lowercase Android device brand identifiers (e.g. ['samsung', 'xiaomi']) to fetch models for. Matched case-insensitively. Omit (or pass an empty list) to return models across all brands.
fieldsNoOptional whitelist of attribute names to keep in each returned entry, used to shrink the response. When omitted or empty, all attributes documented in the output schema are returned. Unknown names are silently ignored.
offsetNoSkip this many entries before returning results — use with `limit` to page through a long list. Defaults to 0.
max_device_countNoDrop entries with more than this many recorded devices. Use to skip very common entries. Omit for no upper bound.
min_device_countNoDrop entries with fewer than this many recorded devices. Defaults to 1 (keep all).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, closed-world), yet the description adds real behavioral context: entries are grouped by a resolved 'street name' that may aggregate several raw Build.MODEL identifiers, and null semantics for raw_model_code/url. The url sentence is garbled ('null when either is null; `raw_model_code` is null'), slightly muddying an otherwise strong disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and return shape, then structured bullets for raw_model_code/url and a short paragraph of filter guidance. Most sentences earn their place, though the url bullet is redundant with the output schema and contains a broken clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All seven optional parameters are documented in the schema and an output schema exists, so return values are covered. The description nonetheless supplies the grouping/aggregation nuance an agent needs, with only minor redundancy and the malformed url-explanation sentence as gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters thoroughly. The description largely restates schema text (sort+limit combo, fields whitelist, brands omission), adding little semantics beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Return the mobile device models of the given brands') and enumerates the exact attributes returned (device counts, avg battery temperature, min/max SDK level). It is clearly distinguishable from siblings like `brands`, `model_summary`, and `devices`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance: pass min/max_device_count to filter, use sort='device_count' with a small limit for 'most devices' questions, use fields to shrink responses, and omit brands to span all brands. It stops short of naming sibling tools (e.g. `top_models`, `model_summary`) as explicit alternatives, so routing is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

model_summaryModel battery summaryA
Read-onlyIdempotent
Inspect

Aggregate battery metrics across ALL devices of a given brand+model. Returns mean / median / p25 / p75 / min / max for: temperature (C), battery level (%), discharge speed (hours per 100%%), AC / USB / wireless charge speed (hours per 100%%), and awake ratio. Use this to characterize how a model behaves in the field, or to compare a single device against its model average.

Also includes:

  • raw_model_code: representative raw Android Build.MODEL identifier (smallest among devices grouped under this street name), or null if none recorded.

  • url: public BatterySnap web page for the model (https://www.battery-snap.com/brands//models/<raw_model_code>); null when raw_model_code is null.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandYesLowercase Android brand identifier (e.g. 'samsung').
modelYesModel name, matched against resolved street name (e.g. 'Galaxy S23') or raw Build.MODEL (e.g. 'SM-S911B').

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoPublic BatterySnap web page for this model. Built from `raw_model_code`; null when `raw_model_code` is null. Locale-agnostic.
brandNoLowercase Android brand identifier.
modelNoResolved model name.
awake_ratioNo
device_countNoDistinct devices of this model that reported snapshots.
temperature_cNo
raw_model_codeNoRepresentative raw Android Build.MODEL identifier (e.g. 'SM-S911B') — the lexicographically smallest model code among devices grouped under this street name. Null when no device has a non-empty model code.
snapshot_countNoSum of snapshots across all devices of this model.
ac_charge_hoursNo
discharge_hoursNo
usb_charge_hoursNo
battery_level_pctNo
wireless_charge_hoursNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description goes beyond them by disclosing aggregation semantics (metrics computed over all devices of the brand+model), the exact statistics returned, and null semantics for raw_model_code and url — genuinely useful 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence and the rest is organized into an enumerable metric list and two bullets. Slightly verbose — the enumerated statistics and the url/raw_model_code bullets duplicate information an output schema likely already carries — but nothing is wasted confusingly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param, read-only aggregation tool with full schema coverage and an output schema, the description covers scope, statistics computed, intended use, and edge cases (null raw_model_code/url). Nothing necessary for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both params are documented there (lowercase brand, model matched against street name or raw Build.MODEL). The description's 'brand+model' phrasing and mention of 'street name' groupings add only marginal clarity beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb+resource+scope: 'Aggregate battery metrics across ALL devices of a given brand+model.' The 'ALL devices' scope implicitly contrasts with sibling device_summary (single device), and the closing sentence about comparing a single device to its model average reinforces that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states intended uses: 'Use this to characterize how a model behaves in the field, or to compare a single device against its model average.' That is clear when-to-use context, but it does not name the alternatives (e.g. device_summary, models) or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_devicesRank devices by metricA
Read-onlyIdempotent
Inspect

Rank INDIVIDUAL devices by any battery metric — the general-purpose leaderboard. Use it for 'which phones run hottest / last longest / charge fastest', optionally narrowed to one brand and/or model. Returns at most limit rows, so it answers superlative questions in a single small call instead of enumerating the fleet.

Ranking is over each device's own lifetime aggregate. Pair the metric with the right order: e.g. hottest = temperature_c + desc, fastest AC charging = ac_charge_hours + asc, best battery life = discharge_hours + desc.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional lowercase brand filter. When omitted, devices from any brand are ranked together.
limitNoNumber of devices to return, 1..100.
modelNoOptional model filter — matches resolved street name or raw Build.MODEL, case-insensitive. When omitted, no model filter applies.
orderNo'desc' (default) ranks the highest values first, 'asc' the lowest. Pick the direction that matches the question: fastest charging is ac_charge_hours + asc; longest battery life is discharge_hours + desc.desc
metricYesWhich battery metric to rank on. One of: 'temperature_c' (mean battery temperature, C), 'max_temperature_c' / 'min_temperature_c' (hottest / coldest ever seen, C), 'battery_level_pct' (mean charge level, 0-100), 'discharge_hours' (hours to drain a full 100% - HIGHER means longer battery life), 'ac_charge_hours' / 'usb_charge_hours' / 'wireless_charge_hours' (hours to charge a full 100% on that source - LOWER means faster charging), 'awake_ratio' (fraction of time awake / screen-on, 0..1), 'snapshot_count' (how much data the device contributed), 'uptime_hours' (longest single uptime between reboots).
min_snapshotsNoIgnore devices with fewer snapshots than this. Defaults to 100, which filters out barely-sampled devices whose averages are meaningless. Lower it only when a query returns too few rows.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/openWorld, so the bar is lower, and the description adds real behavioral context: results are capped at `limit` rows and ranking is computed over each device's own lifetime aggregate (not live data). It doesn't mention response shape, but an output schema exists so that omission is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs with the core purpose and the superlative-answer benefit front-loaded. Slight redundancy between the prose alternatives ('last longest') and the later pairing example ('best battery life'), but every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a filtered leaderboard with an output schema and full annotation coverage, the description supplies the needed semantic model: individual-device scope, lifetime aggregation, row cap, and metric/order pairing. Nothing critical to invoking it correctly is missing, though sibling disambiguation remains implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description earns above that by explaining the metric/order relationship with concrete pairings (hottest = temperature_c + desc, fastest AC charging = ac_charge_hours + asc, best battery life = discharge_hours + desc). This cross-parameter guidance is not derivable from the schema fields individually, making it substantive added meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rank) and resource (INDIVIDUAL devices by battery metric) and explicitly distinguishes itself as 'the general-purpose leaderboard'. The emphasis on INDIVIDUAL devices separates it from model-level siblings like top_models, and from the uptime-specific siblings top_devices_by_uptime / top_devices_by_live_uptime.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear triggers ('which phones run hottest / last longest / charge fastest') and explains the superlative-question use case ('single small call instead of enumerating the fleet'). It also notes the optional brand/model narrowing. However, it never explicitly names when to prefer a sibling (e.g. uptime-specific tools) over this one, so the when-not 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.

top_devices_by_live_uptimeTop devices by live uptimeA
Read-onlyIdempotent
Inspect

Same as top_devices_by_uptime, but restricted to devices that have not yet rebooted past their recorded maximum — meaning the uptime is currently still climbing. These are the devices that are 'live' champions right now, as opposed to historical record-holders. Each entry includes a url pointing at the device's interactive battery history page on https://www.battery-snap.com.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional lowercase brand filter. When omitted, devices from any brand are ranked together.
limitNoNumber of devices to return, 1..100.
modelNoOptional model filter — matches resolved street name or raw Build.MODEL, case-insensitive. When omitted, no model filter applies.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and a closed-world scope, so safety is covered. The description adds genuinely useful semantics beyond that: the precise meaning of the 'live' filter (uptime still climbing, not yet rebooted past recorded max) and the presence of a per-entry `url`. It does not cover rate limits or ordering guarantees, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the differentiator ('Same as X, but restricted to...') so the distinguishing condition arrives in the first clause. The trailing URL/output sentence is mildly redundant given an output schema exists, keeping it just under a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and the annotations carry the safety profile. What remains — what 'live' means and why this differs from the historical ranking — is fully covered, so 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so brand, limit, and model are already fully documented, including defaults and the any-brand behavior. The description adds no filter syntax or format detail beyond the schema, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (top devices by live uptime) and explicitly frames it relative to the sibling `top_devices_by_uptime`, defining 'live' as devices that have not rebooted past their recorded maximum. An agent can distinguish this ranking from the historical one 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative tool (`top_devices_by_uptime`) and gives the selection condition: 'live' champions right now versus historical record-holders. It stops short of a directive when-not-to-use statement, but the contrast is clear enough to route an agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_devices_by_uptimeTop devices by uptimeA
Read-onlyIdempotent
Inspect

Return the devices with the longest single uptime ever recorded between reboots (max_elapsed_time). Optionally filter by brand and/or model. Useful to find which physical phones in the fleet are champions of staying powered on for weeks/months at a time. Each entry includes a device_uid you can feed into device_summary for deeper analysis, and a url pointing at the device's interactive battery history page on https://www.battery-snap.com.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional lowercase brand filter. When omitted, devices from any brand are ranked together.
limitNoNumber of devices to return, 1..100.
modelNoOptional model filter — matches resolved street name or raw Build.MODEL, case-insensitive. When omitted, no model filter applies.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so the bar is lower. The description still adds real value by defining the ranking metric (max uptime between reboots) and disclosing two response fields (device_uid, url) with a deep-link target, which clarifies what the tool actually produces.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the metric definition, then filters, then downstream usage — a sensible order. The 'champions of staying powered on for weeks/months' clause is colorful but mildly redundant with the preceding sentence, costing a little tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be enumerated, and the description still usefully names device_uid and the url for chaining. The remaining gap is disambiguation from top_devices_by_live_uptime and top_devices, which the description leaves to the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with brand/model/limit all documented in the schema including case-sensitivity and default behavior. The description only restates 'optionally filter by brand and/or model', adding the combined 'and/or' framing but no new syntax or format detail. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and pins down the exact metric: devices ranked by 'longest single uptime ever recorded between reboots (max_elapsed_time)'. This definitionally separates it from the near-named sibling top_devices_by_live_uptime, even though that sibling is not named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a use case ('find which physical phones in the fleet are champions of staying powered on') and a downstream hand-off to device_summary, which is genuine routing help. But it never states when to prefer this over top_devices, top_devices_by_live_uptime, or device_ranking, which is the highest-risk confusion given the near-identical sibling name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_modelsRank models by metricA
Read-onlyIdempotent
Inspect

Rank device MODELS by any battery metric, aggregating across every device of that model. This is the tool for 'which phone model has the best battery life', 'which models charge fastest', 'which run hottest' — questions that would otherwise need one model_summary call per model.

Ordering is by the per-model MEDIAN of the metric (outlier-resistant); the mean is returned alongside. Use brand to rank within one manufacturer and min_devices to require a minimum sample size.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional lowercase brand filter. When omitted, devices from any brand are ranked together.
limitNoNumber of devices to return, 1..100.
orderNo'desc' (default) ranks the highest values first, 'asc' the lowest. Pick the direction that matches the question: fastest charging is ac_charge_hours + asc; longest battery life is discharge_hours + desc.desc
metricYesWhich battery metric to rank on. One of: 'temperature_c' (mean battery temperature, C), 'max_temperature_c' / 'min_temperature_c' (hottest / coldest ever seen, C), 'battery_level_pct' (mean charge level, 0-100), 'discharge_hours' (hours to drain a full 100% - HIGHER means longer battery life), 'ac_charge_hours' / 'usb_charge_hours' / 'wireless_charge_hours' (hours to charge a full 100% on that source - LOWER means faster charging), 'awake_ratio' (fraction of time awake / screen-on, 0..1), 'snapshot_count' (how much data the device contributed), 'uptime_hours' (longest single uptime between reboots).
min_devicesNoIgnore models backed by fewer devices than this. Defaults to 3 so a single outlier phone cannot win a ranking. Raise it for more robust comparisons.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/closed-world, so the safety profile is covered. The description goes beyond them by disclosing the ranking statistic (MEDIAN, with mean returned alongside) and the outlier-resistance rationale, which materially affects how results should be interpreted. It stops short of describing pagination or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then usage examples, then ordering semantics and filter guidance. Every sentence adds information; no filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return-shape explanation is not required, and the description fully covers aggregation level, ranking statistic, direction logic, and filter behavior. An agent has everything needed to invoke this correctly against its siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3, but the description adds real value beyond it: it ties the order direction to metric polarity ('fastest charging is ac_charge_hours + asc'), and explains the purpose of brand and min_devices rather than just restating them. The median-vs-mean semantics also inform how metric values are ranked.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Rank device MODELS by any battery metric') and adds the aggregation scope ('aggregating across every device of that model'), which cleanly separates it from sibling model_summary and device_ranking. The restated example questions make the intent unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative it replaces ('questions that would otherwise need one model_summary call per model'), gives three concrete question archetypes, and explains when to use the brand and min_devices filters. Nothing 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updates
    • First observedbrands
    • First observeddevice_ranking
    • First observeddevice_summary
    • First observeddevices
    • First observedfleet_summary
    • First observedfleet_totals
    • First observedmodel_summary
    • First observedmodels
    • First observedsearch
    • First observedtop_devices
    • First observedtop_devices_by_live_uptime
    • First observedtop_devices_by_uptime
    • First observedtop_models

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables comparing and ranking portable battery power stations and solar generator bundles by load, runtime, use case, solar charging, portability, battery chemistry, and budget, with modeled estimates and shopping guidance.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to inspect a connected Android device over ADB through read-only tools covering device status, installed packages, running processes, battery, and logcat output. It speaks MCP over stdio and must run on the same machine as the adb server and USB-attached device.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Android MCP — 76 ADB-based tools for device, apps, UI, logcat, emulator, files, system, and debug. Includes 7 workflow Prompts (crash investigation, ANR, battery drain).
    135 npm
    14
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources