Skip to main content

Bittensor Chain Tools

Minerva can read the Bittensor chain directly. Four tools cover the questions people ask most often: which subnets exist and what they earn, how one subnet is configured, who is in a subnet's metagraph, and what an address holds.

ToolAnswers
bittensor_subnetsEvery subnet with its economics: alpha price, market cap, reserves, emission, registration cost, neuron count.
bittensor_subnetOne subnet in depth: identity, owner, epoch timing, reserves, validator counts, registration status, and all hyperparameters.
bittensor_metagraphOne row per neuron in a subnet: keys, stake, incentive, dividends, trust, consensus, emission, validator permit, axon.
bittensor_accountAn SS58 address: free balance, stakes held as a coldkey, and registrations held as a hotkey.

The tools belong to the bittensor toolset. They are part of the core tools, so they are on by default in the CLI, the TUI, the desktop app, Telegram, Discord, Slack, cron jobs, the API server and ACP editors. The webhook toolset leaves them out.

Read-only by design​

  • The tools only read public chain data. They never sign or submit extrinsics, and they never open a wallet or touch key files.
  • The model can choose only a named network (finney, test or archive). A custom subtensor endpoint can be set only in config.yaml, so a prompt cannot point Minerva at an arbitrary socket.
  • Subnet names, descriptions and identities are free text that subnet owners write on chain. Minerva wraps the output of bittensor_subnets, bittensor_subnet and bittensor_metagraph in untrusted-data markers, the same way it wraps web pages, and tells the model to treat that text as data rather than instructions.
  • Anything that signs goes through btcli, which Minerva gates separately: signing always asks you, and key-material commands never run. See Bittensor wallets and btcli.

Example prompts​

  • "Which subnets pay the most emission right now?" (bittensor_subnets sorted by emission)
  • "Show me the validators on subnet 5." (bittensor_metagraph with netuid: 5 and validators_only: true)
  • "What is my coldkey 5F… staked in, and what is it worth in TAO?" (bittensor_account)
  • "How much does it cost to register a miner on subnet 1, and when is the next epoch?" (bittensor_subnet)
  • "Which subnets have the highest market cap on testnet?" (bittensor_subnets with network: test and sort_by: market_cap)

What the tools return​

Every successful result is JSON with "success": true and the network it queried. A failure returns {"error": "..."}, plus the network when the query got that far.

bittensor_subnets​

ParameterDefaultNotes
netuidsallOnly these subnets.
sort_bynetuidnetuid, price, market_cap, emission, registration_cost or volume. Every order except netuid is descending.
limit50Rows to return, at most 256.
networkconfigfinney, test or archive.

The result carries block, subnet_count (subnets matched before limit), subnet_creation_cost_tao, sort_by, truncated (true when more subnets matched than limit) and subnets. Each subnet row has netuid, name, symbol, owner_coldkey, owner_hotkey, price_tao, market_cap_tao, tao_in, alpha_in, alpha_out, emission_tao_per_block, volume_alpha, tempo, blocks_since_last_step, registration_cost_tao, neurons, max_neurons and registered_at_block.

market_cap_tao is price_tao × (alpha_in + alpha_out).

bittensor_subnet​

Takes a required netuid (0 to 65535) and an optional network. The result carries block, a subnet object and a hyperparameters object.

subnet has netuid, name, symbol, identity, owner_coldkey, owner_hotkey, registered_at_block, tempo, blocks_since_last_step, blocks_until_next_epoch, price_tao, moving_price_tao, tao_in, alpha_in, alpha_out, emission_tao_per_block, neurons, max_neurons, active_neurons, validator_permits, max_validators, registration_allowed, registration_cost_tao, immunity_period_blocks and commit_reveal_weights_enabled.

hyperparameters is the subnet's hyperparameter set as the SDK reports it, in chain units.

bittensor_metagraph​

ParameterDefaultNotes
netuidrequiredSubnet id.
sort_byincentiveuid, stake, incentive, dividends, emission, trust or consensus. Every order except uid is descending. stake sorts by total_stake_alpha.
validators_onlyfalseOnly neurons that hold a validator permit.
hotkeysallOnly these hotkey addresses.
limit50Rows to return, at most 256.
networkconfigfinney, test or archive.

The result carries block, netuid, name, neurons (the subnet's neuron count), matched (rows left after filtering), sort_by, truncated and rows. Each row has uid, hotkey, coldkey, active, validator_permit, alpha_stake, root_stake_weight, total_stake_alpha, emission_alpha, incentive, dividends, trust, consensus, pruning_score, registered_at_block, last_update_block, blocks_since_update and axon.

emission_alpha is per epoch. axon is the served host:port, or null when the neuron serves no axon. root_stake_weight is the neuron's root TAO stake already multiplied by the chain's root weight (0.18), which is how root stake counts on the subnet.

bittensor_account​

Takes a required SS58 address and an optional network. One address can be a coldkey, a hotkey, or both, so the result answers both ways:

  • free_balance_tao: the address's free TAO balance.
  • as_coldkey.stakes: one entry per hotkey and subnet the address stakes to, with hotkey, netuid, stake_alpha, value_tao, locked_alpha, emission_alpha and hotkey_registered. as_coldkey.total_stake_value_tao sums value_tao.
  • as_hotkey.registered_netuids: the subnets where the address is registered as a hotkey. as_hotkey.registrations gives the uid and stake_alpha for each, up to 32 subnets (registrations_truncated says when there are more). as_hotkey.delegate_take is the hotkey's delegate take, or null when it is registered nowhere.

value_tao is stake_alpha multiplied by the subnet's current price. It is a spot value: unstaking a large position would return less because of slippage.

Units​

FieldUnit
*_tao, tao_inTAO
*_alpha, alpha_in, alpha_out, alpha_stakeAlpha of that subnet
price_tao, moving_price_taoTAO per alpha
incentive, dividends, trust, consensus, pruning_scoreNormalized scores from 0 to 1
block, registered_at_block, last_update_blockBlock number
blocks_since_last_step, blocks_until_next_epoch, blocks_since_update, immunity_period_blocks, tempoBlocks
emission_tao_per_blockTAO per block

Amounts are plain floats rounded to 9 decimal places, which is rao precision. Scores are rounded to 6 decimal places.

Networks and configuration​

# ~/.minerva/config.yaml
bittensor:
# finney (mainnet) | test | archive | a ws:// or wss:// subtensor endpoint
network: finney
# Deadline for one query, in seconds (minimum 5)
timeout_seconds: 45
  • network is used when the model does not pass a network argument. Use finney for mainnet, test for testnet, or archive for a mainnet archive node. To query your own node, set a ws:// or wss:// endpoint here, for example ws://127.0.0.1:9944. Any other value makes the tools return an error.
  • timeout_seconds limits each query. When a query runs past it, the tool returns an error and drops that network's connection, and the next call reconnects.

Minerva keeps one connection per network open for the life of the process, so only the first query on a network pays the connection handshake.

Change a setting with minerva config set, for example minerva config set bittensor.network test.

First use: installing the SDK​

The tools use the official bittensor Python SDK, which is not part of the base install. The first Bittensor call installs it into Minerva's own environment from PyPI, using exact pinned versions (bittensor==10.5.0, plus aiohttp, starlette and numpy). This is the same allowlisted lazy install that other optional backends use. That first call takes longer than later ones while the install runs.

To block runtime installs, set:

security:
allow_lazy_installs: false

With installs blocked and the SDK not installed, Minerva hides the Bittensor tools from the model. To use them in that setup, install the pinned packages into Minerva's environment yourself. The bittensor extra in pyproject.toml lists the same pins.

Turning the tools off​

The toolset appears as τ Bittensor in minerva tools, where you can switch it off for any platform. To remove it everywhere at once, add it to agent.disabled_toolsets:

agent:
disabled_toolsets:
- bittensor

If you saved a tool selection in minerva tools before this toolset existed, Minerva turns it on once when you upgrade. If you then switch it off, it stays off.

Deeper research: the Bittensor MCP service​

The tools above read the chain. For research across sources, connect Minerva to the Bittensor MCP service: chain history, subnet GitHub repositories, the Bittensor Discord history, Hugging Face models and compute prices, with stored evidence and cases you can build on. Every account gets its own private research worker.

  1. Create an account and start the Free plan from Plans or /account/mcp (no payment details).
  2. Sign this computer in: minerva login.
  3. Connect in one step from MCP servers → Bittensor MCP → Connect in the dashboard or the desktop app, or run minerva account connect-mcp. A personal token is created for this device and stored in your profile's secret storage; it is never shown.
  4. Start a new session. Ask, for example, "What has the Subnet 13 Discord said about validator updates this month?"

Each device has its own token; revoke any of them at /account/mcp. Other MCP clients can use a token created on that page with the server URL shown there.

Ask about people, subnets and kings​

With Bittensor MCP connected, ask the way you would ask a colleague. Use names: Minerva connects Discord usernames, on-chain identities and dashboard names to the keys behind them.

  • "Who is deepminer?" — the person's coldkey, every hotkey they run on every subnet with its rank and incentive, whether they hold a king spot, and the names they are known by.
  • "These five submissions on SN60, are they one person?" — Minerva groups hotkeys by coldkey and shows what else that coldkey mines and how it ranks there.
  • "Who owns subnet 64, and who speaks for it on Discord?"
  • "Who is the king on SN11, and who did they dethrone?"
  • "What did the top miners on SN9 submit?" — submissions miners committed on chain, and subnet leaderboards wherever a subnet publishes one.
  • "What changed for my miners this week?" — rank and incentive per subnet, keys added or lost.

Answers lead with names and give keys as supporting detail. When a link between a name and a key is not certain, Minerva says so and why. It also warns you about known scam accounts and lookalike names before you act on anything.

Your research worker​

Every account has its own isolated research worker: its own saved evidence, cases and dashboard sign-ins, never shared with another account. It starts when you make your first research call and stops after 20 minutes without one, keeping everything it saved. Because workers run only while they are used, the service is not limited to a fixed number of customers.

  • The first call after a pause starts your worker and takes a few extra seconds. Minerva starts it as soon as you connect or open a session, so usually it is ready before you ask.
  • Calls after that go straight to your running worker.
  • At very busy moments the service may answer "Research capacity is busy". Ask again after the few seconds it suggests; nothing is lost.

Troubleshooting​

  • "Sign in to your Minerva account first" — run minerva login, then connect again.
  • "Connection not authorized" — start the Free plan at /account/mcp, or ask your manager for access.
  • A tool says a source has no data, or rejects an argument — that is the tool's answer, not a connection problem. The server stays connected.
  • Research tools are missing in a session — start a new session after connecting; tools load when a session starts. minerva mcp list shows whether bittensor_research is configured.