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 URLhttps://dev.nostrolo.gy/mcp claude mcp add --transport http nostrology https://dev.nostrolo.gy/mcp Applies to new sessions. An agent with shell access can run this itself.
Edit ~/.codex/config.toml
[mcp_servers.nostrology]
url = "https://dev.nostrolo.gy/mcp" Edit ~/.hermes config.yaml (or: hermes mcp)
mcp_servers:
nostrology:
url: "https://dev.nostrolo.gy/mcp" MCP support ships with the standard install; /reload-mcp applies config edits.
Edit opencode.json
{
"mcp": {
"nostrology": {
"type": "remote",
"url": "https://dev.nostrolo.gy/mcp",
"enabled": true
}
}
} Settings -> Connectors -> Add custom connector -> URL: https://dev.nostrolo.gy/mcp Edit ~/.cursor/mcp.json (or .cursor/mcp.json per-project)
{
"mcpServers": {
"nostrology": {
"url": "https://dev.nostrolo.gy/mcp"
}
}
} Edit .vscode/mcp.json (or MCP: Add Server)
{
"servers": {
"nostrology": {
"type": "http",
"url": "https://dev.nostrolo.gy/mcp"
}
}
} Edit cline_mcp_settings.json
{
"mcpServers": {
"nostrology": {
"type": "streamableHttp",
"url": "https://dev.nostrolo.gy/mcp"
}
}
} type streamableHttp matters: omitting it falls back to legacy SSE.
Edit mcp_config.json
{
"mcpServers": {
"nostrology": {
"serverUrl": "https://dev.nostrolo.gy/mcp"
}
}
} Edit settings.json (Settings -> AI -> MCP Servers -> Add Remote Server)
{
"context_servers": {
"nostrology": {
"url": "https://dev.nostrolo.gy/mcp"
}
}
} Edit ~/.config/goose/config.yaml
extensions:
nostrology:
type: streamable_http
enabled: true
name: nostrology
uri: https://dev.nostrolo.gy/mcp
timeout: 300 One-off alternative: goose session --with-streamable-http-extension <the endpoint URL above>
gemini mcp add --transport http nostrology https://dev.nostrolo.gy/mcp Edit config.yaml
mcpServers:
- name: Nostrology
type: streamable-http
url: https://dev.nostrolo.gy/mcp Harness has no remote-MCP support?
Bridge the endpoint into a local stdio server with mcp-remote:
npx mcp-remote 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
routstr metrics
Size of the curated Routstr model catalog over time - one row per archived version of the curated key's kind-38423 (routstr-model-catalog) 'routstr-21-models' list, the Models tab's 'Catalog size over time' line. A level, not a flow: values are NOT additive across rows; the last row is the current catalog size.
Cumulative observed Routstr revenue in millisats - the running total of everything included providers have reported earning, the Overview tab's 'Cumulative observed revenue' line; the final row equals the page's all-time revenue headline. A running total, so values are NOT additive across rows.
Per-model Routstr activity over included providers - reported revenue (msats), successful requests and tokens per model identifier, at grain=day one row per (bucket, model), at grain=total one row per model summed over the from/to window (omit both for all time). The data behind the Models tab's 'Daily revenue by model' chart, served for EVERY model rather than the chart's top-6 fold.
Every model served on Routstr with its 30d and all-time reported revenue, requests, tokens and 30d provider count - the Models tab table of dev.nostrolo.gy/routstr, one row per model identifier, ranked by 30d revenue with '(other)' last. A CURRENT-STATE snapshot: no time axis, never sum across calls; for a caller-chosen window use routstr.model_activity.
The Routstr network's daily activity - revenue (msats), successful requests, tokens and active providers per UTC day - exactly the series behind the dev.nostrolo.gy/routstr Overview charts. Counts network activity, not distinct users (Routstr publishes no user-side events).
The Routstr headline figures in ONE row - the four cards at the top of dev.nostrolo.gy/routstr plus the coverage dates and the exclusion ledger counts. A snapshot of the newest refresh, not a time series: no day axis, and nothing here is additive across calls.
Per-provider Routstr activity from the reconstructed ledger - reported revenue (msats), successful requests and tokens per provider, at grain=day one row per (bucket, provider), at grain=total one row per provider summed over the from/to window (omit both for all time). This is the data behind the Providers tab's 'Daily revenue by provider' chart, served for EVERY included provider rather than the chart's top-20 fold.
How the ANNOUNCED Routstr network is shaped - providers by endpoint class (clearnet/onion/both/private-only/none), by announced software version, and by accepted Cashu mint host - the three Network tab breakdowns, one row per (facet, value). Counts announcements, not usage.
Every Routstr provider with its 30d and all-time reported revenue, requests and tokens plus its registry facts (endpoint class, version, curation label, first/last seen) - the Providers tab of dev.nostrolo.gy/routstr, one row per provider pubkey, ranked by all-time revenue. A CURRENT-STATE snapshot: no time axis, never sum across calls; for a caller-chosen window use routstr.provider_activity.
The Routstr network's self-reported request success rate over the trailing 30 days - the Network tab's 'Reliability, as reported' figures, one row. A snapshot, not a series.
routstr reference data
How the curated Routstr model catalog changed - every archived version of the curated key's kind-38423 (routstr-model-catalog) 'routstr-21-models' list, newest first, each with the models it added and removed relative to the version before it. Windowable via from/to over the version time ('what changed this month' = from the month's first day). Takes no entity scope.
Who is NOT counted in the Routstr network aggregates and why - the exclusion ledger shown on dev.nostrolo.gy/routstr: three categories with the number of pubkeys in each and the rule in words. Answer 'why is provider X missing from the totals' with this plus routstr.provider_profile (its excl_reason column). Takes no entity scope.
The current curated Routstr model catalog - the models the official SDK allows, one row each, from the newest archived version of the curated key's kind-38423 (routstr-model-catalog) 'routstr-21-models' list. The Models tab's chip cloud. Takes no entity scope; for the history use routstr.catalog_versions.
The Routstr provider directory - every provider's current announcement facts (name, endpoints, accepted mints, version, endpoint class), its curation status, first/last seen, and whether and why it is excluded from the network aggregates. Omit provider_pubkey for the whole directory (~50 rows), or pass one key for that provider. The qualitative companion of routstr.provider_leaderboard, which carries the numbers.
The Routstr curation timeline - every archived review event, newest first: who labeled which provider what, and when. Omit provider_pubkey for the whole timeline, pass one key for that provider's history; windowable via from/to over the review time. A provider's CURRENT status is its newest curated label, served by routstr.provider_profile.