MCP endpoints over key Nostr domains: Zapstore app economy, Marketplaces, Cashu nutzaps, Lightning providers, and more. No API key, no data infrastructure to run. Every response carries the methodology that explains to the agent how to reason through the data.
https://nostrolo.gy/mcp $ claude mcp add --transport http nostrology https://nostrolo.gy/mcp Added nostrology - 3 tools (1 paid), 1 resource, no auth > Which apps do Nostr users actually put in their public app stacks? tool nostrology_query_metric { metric: "app_stack_count" } metric: zapstore.app_stack_count | grain: current | unit: stacks state: current snapshot, no time axis - never summed across calls methodology: distinct kind-30267 (zapstore-app-stacks) lists referencing each app. app_name stack_count Amber 57 Amethyst 46 Zapstore 32 bitchat 25 answer a snapshot, so the agent knows not to trend it.
Every figure traces back to Nostr events we read off the relays ourselves - no third-party index in the chain, and no number without the rule that produced it.
Continuous raw Nostr event acquisition across public relays.
Data engine that scales with the growth of the Nostr network itself.
Each metric states its population, its partition, and what it deliberately excludes.
Same underlying data powering MCP and the charts, so they cannot disagree.
claude mcp add --transport http nostrology https://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://nostrolo.gy/mcp" Edit ~/.hermes config.yaml (or: hermes mcp)
mcp_servers:
nostrology:
url: "https://nostrolo.gy/mcp" MCP support ships with the standard install; /reload-mcp applies config edits.
Edit opencode.json
{
"mcp": {
"nostrology": {
"type": "remote",
"url": "https://nostrolo.gy/mcp",
"enabled": true
}
}
} Settings -> Connectors -> Add custom connector -> URL: https://nostrolo.gy/mcp Edit ~/.cursor/mcp.json (or .cursor/mcp.json per-project)
{
"mcpServers": {
"nostrology": {
"url": "https://nostrolo.gy/mcp"
}
}
} Edit .vscode/mcp.json (or MCP: Add Server)
{
"servers": {
"nostrology": {
"type": "http",
"url": "https://nostrolo.gy/mcp"
}
}
} Edit cline_mcp_settings.json
{
"mcpServers": {
"nostrology": {
"type": "streamableHttp",
"url": "https://nostrolo.gy/mcp"
}
}
} type streamableHttp matters: omitting it falls back to legacy SSE.
Edit mcp_config.json
{
"mcpServers": {
"nostrology": {
"serverUrl": "https://nostrolo.gy/mcp"
}
}
} Edit settings.json (Settings -> AI -> MCP Servers -> Add Remote Server)
{
"context_servers": {
"nostrology": {
"url": "https://nostrolo.gy/mcp"
}
}
} Edit ~/.config/goose/config.yaml
extensions:
nostrology:
type: streamable_http
enabled: true
name: nostrology
uri: https://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://nostrolo.gy/mcp Edit config.yaml
mcpServers:
- name: Nostrology
type: streamable-http
url: https://nostrolo.gy/mcp Streamable HTTP, so native remote-MCP clients take the URL directly.
Bridge the endpoint into a local stdio server with mcp-remote:
npx mcp-remote https://nostrolo.gy/mcp Deliberately small: each tool routes its whole family by one parameter - metric or record - so an agent learns the surface once instead of
memorising a dozen endpoints. Two are free. The third is priced in ecash, and tells you the
price for nothing.
Nine quantitative metrics in three families, all from the same archive.
Three qualitative records - entity data, no measures.
Nutzap activity over kind-9321 (nutzaps) - NIP-61 zaps whose value moves as Cashu ecash inside the event. 21 sats per call, paid in Cashu.
Four published surfaces, each derived from the raw events we keep rather than a third-party index - and each stating on the page how its numbers were counted.
No API key, no signup.
https://nostrolo.gy/mcp