BatterySnap MCP server
Ask AI assistants about Android battery analytics
BatterySnap exposes a Model Context Protocol server so any MCP-compatible AI assistant can query brands, models, and per-device battery statistics on demand. No authentication required.
https://mcp.battery-snap.com/mcp
Transport
streamable-http
Install in your client
Edit claude_desktop_config.json (Settings → Developer → Edit Config) and add:
{
"mcpServers": {
"batterysnap": {
"type": "http",
"url": "https://mcp.battery-snap.com/mcp"
}
}
}
For older versions without native HTTP transport, use the mcp-remote bridge:
{
"mcpServers": {
"batterysnap": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.battery-snap.com/mcp"]
}
}
}
Run once in your terminal:
claude mcp add --transport http batterysnap https://mcp.battery-snap.com/mcp
Create ~/.cursor/mcp.json (or edit it) with:
{
"mcpServers": {
"batterysnap": {
"url": "https://mcp.battery-snap.com/mcp"
}
}
}
In librechat.yaml, add under mcpServers:
mcpServers:
batterysnap:
type: streamable-http
url: https://mcp.battery-snap.com/mcp
Add to .vscode/mcp.json in your workspace, or your user settings:
{
"servers": {
"batterysnap": {
"type": "http",
"url": "https://mcp.battery-snap.com/mcp"
}
}
}
Any MCP host supporting the streamable-http transport can connect by pointing it at https://mcp.battery-snap.com/mcp. Discovery metadata is served at /.well-known/mcp.json.
Available tools
Start here
search(query, limit?)Resolve free text — a brand, a model name, a raw Build.MODEL code, or all of them at once — into the canonical brand and model identifiers the other tools expect. Every other tool matches exactly, so start here whenever a phone is named in plain words.
Catalogue
brands(limit?, offset?, count filters?)List every device brand with a battery-statistics record, along with model and device counts, plus a url to the brand page on BatterySnap.
models(brands?, sort?, limit?, offset?)List device models with device count, average temperature, Android API range, a representative raw Build.MODEL identifier (raw_model_code) and a url to the model page on BatterySnap (null when no raw model code is available). Pass one or more brands to narrow the list, or omit them to span every brand; sort alphabetically or by device count.
devices(pairs)List individual devices for one or more {brand, model} pairs, with per-device aggregates: activity window, battery level, temperature range, charge / discharge speed, awake ratio, Android API level, time zone and a url to the device-history page on BatterySnap.
Aggregates
device_summary(device_uid)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 recent (~2 weeks) and long (~2 months) windows, plus awake ratio, Android info and a url to the device-history page on BatterySnap.
In clients that support MCP Apps, this tool also renders the interactive battery-history graph inline.
model_summary(brand, model)Distribution of battery metrics across all devices of a given brand + model: mean, median, p25, p75, min and max for temperature, battery level, discharge speed, AC / USB / wireless charge speed and awake ratio. Also returns a representative raw_model_code and a url to the model page on BatterySnap (null when no raw model code is available).
fleet_summary(brand?)Same distribution stats as model_summary, but across the entire fleet — or a single brand when brand is provided. Useful as a baseline to compare a device or model against.
fleet_totals()Live fleet-wide counters: total devices, models, snapshots, sessions, snapshot-ingest rate (snapshots/sec) and timing of the latest insert batch. Use it to answer how big the dataset is and how fast it grows.
Rankings
top_devices(metric, order?, brand?, model?, limit?, min_snapshots?)Leaderboard of individual devices ranked by any battery metric — hottest, longest-lasting, fastest-charging — with optional brand and model filters. Devices with fewer snapshots than min_snapshots (100 by default) are ignored, so thinly sampled devices cannot win a ranking.
top_models(metric, order?, brand?, limit?, min_devices?)The same leaderboard at model level: every device of a model is aggregated, and models are ranked by the median of the metric, which resists outliers. The mean is returned alongside, and min_devices (3 by default) sets the minimum sample size.
device_ranking(device_uid, metric?)Rank one device on a given metric against other devices of the same model and against the whole fleet, in a single call: its value, its 1-based rank, its percentile, and the cohort median / mean / min / max for both cohorts.
top_devices_by_uptime(brand?, model?, limit?)Devices ranked by the longest single uptime ever recorded between reboots. Optional brand and model filters. Returns a small list of device_uids (with a url to each device-history page on BatterySnap) you can pipe into device_summary.
top_devices_by_live_uptime(brand?, model?, limit?)Same ranking as top_devices_by_uptime, but restricted to devices whose uptime has not yet been broken by a reboot — they are still climbing live. Each entry also includes a url to its device-history page.
Metrics accepted by top_devices, top_models and device_ranking: temperature_c, max_temperature_c, min_temperature_c, battery_level_pct, discharge_hours, ac_charge_hours, usb_charge_hours, wireless_charge_hours, awake_ratio, snapshot_count and uptime_hours. Charge and discharge values are hours per full 100-point swing, so lower means faster charging and higher means longer battery life.
The brands, models and devices tools also accept an optional fields argument — pass a whitelist of attribute names to keep responses compact.
brands and models additionally take limit / offset paging and minimum / maximum device- and model-count filters.