{"ok":true,"site":{"host":"heliumtools.org","url":"https://heliumtools.org/","type":"live","desc":"Helium Tools","tools":[{"name":"list-helium-tools","kind":"answer","impl":"imperative","description":"List every tool page on heliumtools.org: path, what it does, and the WebMCP tools it registers once open. Use open-helium-tool to navigate to one; its tools become available after navigation (a toolchange event fires).","title":"List Helium Tools","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/wallet-dashboard","/oui-notifier/","/dc-mint","/iot-onboard","/mobile-onboard"]},{"name":"open-helium-tool","kind":"act","impl":"imperative","description":"Navigate this tab to one of the site's tool pages. After navigation the page registers its own WebMCP tools (listed by list-helium-tools) and fires toolchange — re-query the tool list, then use the page's tools.","title":"Open a Helium tool page","inputSchema":{"type":"object","properties":{"path":{"type":"string","enum":["/","/wallet-dashboard","/hnt-price","/hotspot-claimer","/ve-hnt","/vote","/votes","/dc-mint","/oui-notifier/","/iot-onboard","/mobile-onboard","/update-location","/multi-gateway","/hotspot-map","/brand","/l1-migration"],"description":"The tool page to open."}},"required":["path"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/wallet-dashboard","/oui-notifier/","/dc-mint","/iot-onboard","/mobile-onboard"]},{"name":"get-hnt-price","kind":"answer","impl":"imperative","description":"Current HNT price snapshot from the heliumtools.org price API: live market price in USD (Jupiter aggregator) and the on-chain oracle price that HNT-to-Data-Credits minting pays, with timestamps. Cached server-side (~1 min freshness). For a live chain read, open /hnt-price and use get-hnt-price-instant.","title":"Get HNT price","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/wallet-dashboard","/oui-notifier/","/dc-mint","/iot-onboard","/mobile-onboard"]},{"name":"open-wallet-dashboard","kind":"act","impl":"imperative","description":"Show a wallet in the dashboard UI: balances, fleet map, rewards, IoT connectivity and traffic (per-Hotspot health, and each Hotspot's daily delivered messages per operator), Mobile activity (daily data-transfer HNT, users served, heartbeats, speedtests, bans; kept live while the page is visible), governance, and activity all load for the user to see. Like any view, the wallet is added to this browser's Recent wallets on the dashboard's lookup screen. Use the get-* tools to read the underlying data.","title":"Open a wallet in the dashboard","inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58) to display."}},"required":["address"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-wallet-summary","kind":"answer","impl":"imperative","description":"Token balances (HNT/MOBILE/IOT/SOL/DC) with USD prices, portfolio total, and fleet stats (counts by network/device type, asserted locations, regions, onboarding DC) for a wallet. Cached server-side ~60s. Onboard dates are not included — use get-wallet-onboarding.","title":"Get wallet summary","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58). Optional when the dashboard already shows a wallet — defaults to that one."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-wallet-fleet","kind":"answer","impl":"imperative","description":"Paged per-Hotspot list for a wallet plus fleet stats (counts by network/device type, asserted locations, regions, onboarding DC). Each row: name, entityKey, assetId, network(s), deviceType, location (H3 cell) with city/state/country, elevation (m), gain (tenths of a dBi), and dcOnboardingFeePaid. On-chain metadata only — for onboard dates use get-wallet-onboarding; for IoT connectivity and traffic, get-wallet-iot-status; for Mobile activity, get-wallet-mobile-activity; for rewards, get-wallet-rewards. Sorted by entityKey; use offset/limit and pagination.nextOffset to retrieve the full fleet. Stats cover the entire fleet.","title":"Get wallet Hotspot fleet","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58). Optional when the dashboard already shows a wallet — defaults to that one."},"offset":{"type":"integer","minimum":0,"default":0,"description":"Start at this offset; use pagination.nextOffset for the next page."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":200,"description":"Maximum Hotspots on this page."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-wallet-rewards","kind":"answer","impl":"imperative","description":"Pending (unclaimed) Hotspot rewards for one page of a wallet's fleet as decimal token amounts (e.g. \"12.345678\" IOT), totaled per token and listed per Hotspot where nonzero. Served from a ~15min cache — rewards distribute roughly daily. Sorted by entityKey. Totals cover only this page (aggregateScope: page); use offset/limit and pagination.nextOffset for the rest. Up to 100 Hotspots per page; claim via the /hotspot-claimer page's tools.","title":"Get wallet unclaimed rewards","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58). Optional when the dashboard already shows a wallet — defaults to that one."},"offset":{"type":"integer","minimum":0,"default":0,"description":"Start at this offset; use pagination.nextOffset for the next page."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Maximum Hotspots on this page."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-wallet-onboarding","kind":"answer","impl":"imperative","description":"When a wallet's Hotspots were onboarded, read from chain (block time of the first successful transaction on each Hotspot's IoT/Mobile info account): first and latest date, a per-month count (UTC), and per-Hotspot ISO dates (a Hotspot on both networks shows the earlier one; null = couldn't be determined). Hotspots from before Helium's April 2023 move to Solana show their migration date, not their original deployment. Sorted by entityKey. Dates, first/latest and monthly counts cover only this page (aggregateScope: page); use offset/limit and pagination.nextOffset for the rest. Up to 200 Hotspots per page; dates are cached server-side once resolved, so a first lookup of a large fleet is the slow one.","title":"Get wallet Hotspot onboard dates","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58). Optional when the dashboard already shows a wallet — defaults to that one."},"offset":{"type":"integer","minimum":0,"default":0,"description":"Start at this offset; use pagination.nextOffset for the next page."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":200,"description":"Maximum Hotspots on this page."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-wallet-iot-status","kind":"answer","impl":"imperative","description":"Per-Hotspot IoT connectivity and 30-day delivered LoRaWAN messages for a wallet's IoT Hotspots. Connectivity is a per-UTC-day verdict (active = connected to the Helium Packet Router on the latest reported day), not online-now. Health combines the two: inactiveTraffic (not connected, but had messages in the window — check these first), activeQuiet (connected, no messages in 30 days), inactiveQuiet, activeTraffic. Page membership follows entityKey before health filtering, so pages hold still when the dashboard's scan finishes; rows run most actionable first within a page. To triage, pass health to list matching rows within each page. Pagination always counts all IoT Hotspots, including nonmatches: follow pagination.nextOffset even when hotspots is empty. Use offset/limit to retrieve all pages. Uses the dashboard's finished scan when that wallet is on screen (whole-fleet counts, same as the UI); otherwise looks up at most 200 IoT Hotspots per page. aggregateScope identifies whether counts/health/traffic cover the fleet (dashboard) or only this page (own scan). For one Hotspot's daily messages per OUI (operator), use get-iot-hotspot-traffic.","title":"Get wallet IoT connectivity and traffic","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58). Optional when the dashboard already shows a wallet — defaults to that one."},"health":{"type":"string","enum":["inactiveTraffic","activeQuiet","inactiveQuiet","activeTraffic"],"description":"List only rows in this health state within each entityKey page. Pagination still counts every IoT Hotspot; continue with nextOffset even when no rows match. counts and health cover the whole fleet with dashboard data, or the scanned page otherwise."},"offset":{"type":"integer","minimum":0,"default":0,"description":"Start at this offset; use pagination.nextOffset for the next page."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":200,"description":"Maximum Hotspots on this page."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-iot-hotspot-traffic","kind":"answer","impl":"imperative","description":"One IoT Hotspot's delivered LoRaWAN messages per day and per OUI (the routing ID of a LoRaWAN Network Server operator) over the 30-day window, with operator names from Helium's well-known OUI list. One Hotspot per call — triage a wallet with get-wallet-iot-status first. `daily[].byOui` maps OUI id → messages that UTC day; `quietNetworkWide: true` means that OUI delivered nowhere on the network in the last 7 days (an operator-side drop, not this Hotspot's); `recentShare` is the last 7 days' daily average ÷ the 30-day daily average (null when it can't be stated honestly).","title":"Get one IoT Hotspot's traffic by operator","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"entityKey":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":20,"maxLength":500,"description":"The IoT Hotspot's entity key (its Helium public key, base58) — the entityKey from get-wallet-iot-status or get-wallet-fleet."}},"required":["entityKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-wallet-mobile-activity","kind":"answer","impl":"imperative","description":"Recent Mobile network activity for a wallet's Mobile Hotspots: data-transfer HNT per UTC day for the last 7 days published (with that day's HNT price and the rewarded bytes it paid for), users served on the latest usage day, ban status, and for WiFi indoor/outdoor Hotspots the heartbeats and rejected heartbeats in a 60-minute window (location trust, distance from the asserted location, reported positions) and the latest speedtest average in a 24-hour window. A window ends now while its data is fresh, otherwise at its last successful check (windows gives each end); null means unknown, never 0. Issues, most serious first: banned (latest ban record is a ban), then WiFi health signals that don't change data-transfer HNT: noHeartbeat (none in the heartbeat window), lowTrust (latest location trust below 1), lowSpeedtest (latest speedtest multiplier below 1), rejectedHeartbeats (any in the window). counts, rewards and usage cover every Mobile Hotspot (a count is null while its data isn't in). hotspots is paged: membership follows entityKey, so pages hold still between calls, and rows run most actionable first within a page; to triage across the fleet, pass issue (counts say how many have each). Use offset/limit and pagination.nextOffset (default 50, max 200); with issue set, the matching set follows live data and can change between calls. When the wallet is on screen, reads the dashboard's own data with no extra downloads (waiting up to 45 s for its first check), unless that tab is hidden and last checked over 5 minutes ago. Otherwise runs one check itself (up to 60 s, then returns what it has), reading Helium's public Mobile network data files whole: roughly 25 MB for a fleet of data-only Hotspots and 55 MB with WiFi Hotspots when this browser hasn't read them recently, and little once it has, since the files serve every wallet and share the dashboard's cache. Mobile Hotspots with ecc_compact keys (CBRS radios) aren't covered. For IoT Hotspots use get-wallet-iot-status.","title":"Get wallet Mobile activity","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58). Optional when the dashboard already shows a wallet — defaults to that one."},"offset":{"type":"integer","minimum":0,"default":0,"description":"Start at this offset; use pagination.nextOffset for the next page."},"issue":{"type":"string","enum":["banned","noHeartbeat","lowTrust","lowSpeedtest","rejectedHeartbeats"],"description":"List only Mobile Hotspots with this issue. counts still cover every Mobile Hotspot."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"Maximum Hotspots on this page; rows run most actionable first within it."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"get-wallet-transactions","kind":"answer","impl":"imperative","description":"Categorized recent transactions for a wallet (rewards claims, transfers, Hotspot ops). Pass `before` (a transaction signature from a previous page) to paginate.","title":"Get wallet transactions","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","minLength":32,"maxLength":44,"description":"Solana wallet address (base58). Optional when the dashboard already shows a wallet — defaults to that one."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20,"description":"Max transactions to return."},"before":{"type":"string","minLength":32,"maxLength":120,"description":"Paginate: only transactions before this signature."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/wallet-dashboard","pages":["/wallet-dashboard"]},{"name":"list-ouis","kind":"answer","impl":"imperative","description":"Catalog of every OUI (organization) on the Helium IoT network: OUI number, owner, payer, escrow account, and delegate keys.","title":"List all OUIs","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/oui-notifier/","pages":["/oui-notifier/"]},{"name":"get-oui-balance","kind":"answer","impl":"imperative","description":"Data Credit escrow balance, burn rates (1-day and 30-day), and estimated days remaining for an OUI. Also shows the lookup (with its balance chart) in the page UI.","title":"Get an OUI's escrow balance","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"oui":{"type":"integer","minimum":0,"description":"The OUI number."}},"required":["oui"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/oui-notifier/","pages":["/oui-notifier/"]},{"name":"prefill-alert-subscription","kind":"transact","impl":"imperative","description":"Fill in the low-escrow alert form (OUI, email, optional label and webhook URL) for the user to review and submit. Does not subscribe by itself — the user must click Subscribe, and email verification follows. Alerts fire at 14, 7, and 1 days of escrow remaining.","title":"Prefill a low-escrow alert subscription","inputSchema":{"type":"object","properties":{"oui":{"type":"integer","minimum":0,"description":"The OUI number."},"email":{"type":"string","pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","maxLength":254,"description":"Email address to notify."},"label":{"type":"string","maxLength":100,"description":"Optional label for this subscription."},"webhook_url":{"type":"string","pattern":"^https://","maxLength":500,"description":"Optional HTTPS webhook to call alongside the email."}},"required":["oui","email"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/oui-notifier/","pages":["/oui-notifier/"]},{"name":"get-dc-mint-quote","kind":"answer","impl":"imperative","description":"Convert between HNT, Data Credits, and USD at the on-chain oracle price the DC mint actually pays (conservative ema − 2×conf, not the headline spot). Pass exactly one of hnt_amount, dc_amount, or usd_amount; returns all three plus the price used. 1 DC is always $0.00001 (100,000 DC per USD); the HNT side floats.","title":"Quote HNT ↔ Data Credits","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hnt_amount":{"type":"number","exclusiveMinimum":0,"description":"Amount of HNT to burn."},"dc_amount":{"type":"number","exclusiveMinimum":0,"description":"Amount of Data Credits wanted."},"usd_amount":{"type":"number","exclusiveMinimum":0,"description":"USD value of Data Credits wanted."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dc-mint","pages":["/dc-mint"]},{"name":"resolve-oui","kind":"answer","impl":"imperative","description":"Resolve a Data Credit delegation target — an OUI number or a payer key — to its escrow account, payer, and current escrow DC balance. Use before delegating DC to an OUI.","title":"Resolve an OUI or payer key","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"target":{"type":"string","minLength":1,"maxLength":120,"description":"An OUI number (e.g. \"12\") or a payer key (base58)."}},"required":["target"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dc-mint","pages":["/dc-mint"]},{"name":"get-iot-onboard-fees","kind":"answer","impl":"imperative","description":"Current on-chain fees for onboarding a Helium IoT Hotspot, in Data Credits: full (PoC-eligible) vs data-only onboard fees and the location assert fee. Cached ~6h server-side.","title":"Get IoT onboarding fees","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/iot-onboard","pages":["/iot-onboard"]},{"name":"get-mobile-onboard-fees","kind":"answer","impl":"imperative","description":"Current on-chain fees for onboarding a WiFi network as a Helium Mobile data-only Hotspot, in Data Credits: onboard fee plus location assert fee. Cached ~6h server-side.","title":"Get Mobile onboarding fees","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/mobile-onboard","pages":["/mobile-onboard"]},{"name":"open-mobile-onboard-tab","kind":"act","impl":"imperative","description":"Switch the Mobile WiFi Onboarding page between its tabs: 'onboard' (the wizard), 'manage' (already-onboarded networks), or 'guide' (per-vendor router setup instructions).","title":"Open a Mobile Onboarding tab","inputSchema":{"type":"object","properties":{"tab":{"type":"string","enum":["onboard","manage","guide"],"description":"Tab to show."}},"required":["tab"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/mobile-onboard","pages":["/mobile-onboard"]}],"category":"Finance & Crypto","apiSurface":"spec","toolCount":20}}