Nostr Ecosystem Metrics over MCP

Curated, methodology-documented metrics over Nostr ecosystem data - starting with the Zapstore app store - queryable by AI agents over the Model Context Protocol. Free at present, no authentication.

Connect your agent

MCP server URL
https://dev.nostrolo.gy/mcp

Catalog

Three tools. nostrology_query_metric serves the free quantitative metrics, routed by the metric parameter; nostrology_query_reference serves the free reference records (qualitative entity data - catalog entries, publisher profiles, release history), routed by the record parameter; and nostrology_query_nutzaps serves the nutzaps metrics, paid per call in Cashu ecash - its card states the price (pick the Nutzaps pill), and calling it without a token returns the payment terms for free. Every response carries its own envelope: scope, window, freshness, column contract, and the methodology caveats stating what is and is not counted. Pick a domain below; more arrive as their data is exposed.

Domains

zapstore metrics

app_stack_count stacks / current - entities

Counts, per app, the DISTINCT public kind-30267 (zapstore-app-stacks) stacks whose a-tags reference it - the CURRENT state, one row per referenced app; apps in no public stack are absent. This is a snapshot, not a time series: there is no day axis and the counts must NOT be summed across calls.

app_zaps zaps+msats / day, total

Per-app Zapstore zap totals: each row is one app - identified by (publisher_pubkey, app_id) - carrying the COUNT of kind-9735 (zap-receipts) receipts (zap_count) and the SUM of their amounts in MILLI-satoshis (zapped_msats; divide by 1000 for sats) over the requested window. grain=total: one row per app over the whole window; grain=day: one row per (UTC day, app), sparse - (day, app) pairs with zero receipts are omitted.

native_release_count releases / day - sparse

Counts kind-30063 (zapstore-app-releases) release rows in the NATIVE partition per UTC day - releases, not distinct apps: a developer who ships 30 patch versions contributes 30 rows, and one app recurs across many days.

new_native_app_count apps / day - sparse

Counts DISTINCT apps (pubkey, app_d_tag) whose first-ever kind-30063 (zapstore-app-releases) release event falls on that UTC day - apps, not release events.

new_republished_app_count apps / day - sparse

Counts DISTINCT apps (pubkey, app_d_tag) whose first-ever kind-30063 (zapstore-app-releases) release event falls on that UTC day - apps, not release events.

publisher_app_count apps / current - entities

Counts, per publisher key, the DISTINCT Nostr-native apps in the kind-32267 (zapstore-app-catalog) universe - the CURRENT state, one row per publisher with at least one native entry. This is a snapshot, not a time series: no day axis, and counts must NOT be summed across calls.

republished_release_count releases / day - sparse

Counts kind-30063 (zapstore-app-releases) release rows in the REPUBLISHED partition per UTC day - releases, not distinct apps: an app that ships 30 patch versions contributes 30 rows, and one app can appear on many days.

zap_count zaps / day - sparse

Counts kind-9735 (zap-receipts) zap receipts attributed to a Zapstore app per UTC day - receipts, not distinct zappers, recipients or apps: one zapper funding ten apps contributes ten rows, and one app recurs across many days.

zapped_msats msats / day - sparse

Sums the amount of kind-9735 (zap-receipts) zap receipts attributed to a Zapstore app per UTC day, in MILLI-satoshis (msats) - divide by 1000 for sats. Counts amounts, not zaps: for the number of receipts behind these amounts use zapstore.zap_count over the same population.

zapstore reference data