Skip to main content
Glama

bitcoin-signals

Sovereign Bitcoin reserves

get_sovereign_reserves
Read-onlyIdempotent

Nation-state Bitcoin holdings, ranked largest first. Returns { as_of, btc_price_usd, count, sovereigns[], disclaimer }; each row carries country_name, country_code, holdings_btc, status, tier (1 = largest holders), framework, sources[], its own as_of, and source_quality (primary = confirmed against the state's own publication; secondary = reported, not confirmed at source — derived from that row's sources[]). Filter by country name or ISO code, or by tier. Example: {"country": "US"} or {"tier": 1} — call with {} for the full ranking. Information, not financial advice.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tierNoHolding tier; 1 = largest holders
countryNoCountry name or ISO code

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it details the return structure, explains the source_quality field ('primary = confirmed against the state's own publication; secondary = reported, not confirmed at source'), and includes a disclaimer. This is valuable context that goes beyond the structured 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?

The description is well-structured: purpose, return shape, filtering, example, disclaimer. It is information-dense but each sentence earns its place. It is slightly verbose due to the detailed return field listing, but remains readable and front-loaded with the core purpose.

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?

Without an output schema, the description compensates well by enumerating the return fields (as_of, btc_price_usd, count, sovereigns[], each row's fields) and explaining source_quality semantics. It also covers both filter modes and the full ranking call. It does not explain every field (e.g., 'status' or 'framework'), but overall it gives a complete picture for an AI agent to invoke the tool correctly.

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 input schema already describes both parameters with full coverage (100%), so the baseline is 3. The description goes beyond by providing example payloads ('{"country": "US"}' and '{"tier": 1}') and clarifying that 'tier 1 = largest holders,' which reinforces schema descriptions. It also explains the empty-object call for the full ranking, adding practical usage nuance.

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?

The description clearly states the tool's function: 'Nation-state Bitcoin holdings, ranked largest first.' This is a specific verb ('get' implied) and resource, but it does not explicitly differentiate from sibling tools like get_treasury_holdings, which may cover corporate or treasury holdings. The description is clear and unambiguous but lacks direct sibling differentiation.

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 description provides explicit usage guidance with filter examples: 'Filter by country name or ISO code, or by tier. Example: {"country": "US"} or {"tier": 1} — call with {} for the full ranking.' This gives clear context on how to invoke the tool, though it does not discuss when to prefer this tool over alternatives like get_treasury_holdings. The guidance is strong on 'how' but not on 'when vs. siblings'.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.3/5.0
Disambiguation4/5

Tools target distinct data sources: ETF flows, hiring, network hashrate, sovereign reserves, treasury holdings, and a cross-signal scan. get_daily_brew and scan_signals both summarize signals but differ in format (digest vs. ranked list), creating mild potential for confusion. Overall, descriptions clearly differentiate purposes.

Naming Consistency4/5

Six of seven tools follow a consistent get_<resource> pattern (e.g., get_etf_flows, get_treasury_holdings). scan_signals breaks the pattern with a different verb, and get_daily_brew uses a non-resource name, but the deviation is minor and the naming remains intuitive.

Tool Count5/5

With 7 tools, the set is well-scoped for a Bitcoin signals server. Each tool covers a distinct signal category without excess or redundancy, making the count appropriate for the domain.

Completeness4/5

The tool surface covers a broad range of leading Bitcoin indicators (network, institutional flows, corporate and sovereign holdings, hiring, and a composite scan). Potential minor gaps exist (e.g., sentiment or derivatives data), but the core signal set appears reasonably complete for the stated purpose.