# MRR Ledger

> Sourced, dated revenue data on real AI-agent businesses: leaderboard, profiles, growth, lessons.

- name: com.mrrledger/mrrledger
- version: 1.7.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 85/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.mrrledger%2Fmrrledger
- tools: https://api.protogrid.dev/v1/servers/com.mrrledger%2Fmrrledger/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "mrrledger": {
      "type": "http",
      "url": "https://mrrledger.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-2d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 16 of 16 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 14 of 16 tools declare all four hints; missing: export_dataset (destructiveHint); buy_api_pass (destructiveHint)
- pass `tools.token_cost`: about 3,704 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 1 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 16, about 3,704 tokens to load them all
- tool set hash: 0805e6c8e75bc1da762bd52c439cf4f1
- tools last changed: 2026-10-20T15:11:24.688Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.mrrledger/mrrledger.svg)](https://protogrid.dev/servers/com.mrrledger/mrrledger)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `watch_revenue` changed (title, description)
  - before: Get a signed webhook POST whenever a watched business gets a new or revised revenue figure on MRR Ledger. x402 (USDC on Base): $1 per business per 30 days (at most $5), or $5 for all businesses. Included with Builder and Team API keys (send the key as X-API-Key on the MCP request). Call without payment for a free preview (the latest real revenue changes for those businesses) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload). Returns watch_id and a secret shown once; verify MRL-Signature = HMAC-SHA256(secret, t + "." + body).
  - after: Get a signed webhook POST whenever a watched business gets a new or revised revenue figure on MRR Ledger. x402 (USDC on Base): $1 per business per 30 days (at most $5), or $5 for all businesses. Included with Builder and Team API keys (send the key as X-API-Key on the MCP request). Call without payment for a free preview (the latest real revenue changes for those businesses) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload). Returns watch_id and a secret shown once; verify MRL-Signature = HMAC-SHA256(secret, t + "." + body). Example: {"slugs":["cursor"],"webhook_url":"https://example.com/hook"} -> free preview + terms for $1; the paid retry returns the watch.
- 2026-10-20 `buy_api_pass` changed (title, description)
  - before: Buy an expiring MRR Ledger API key with x402 (USDC on Base). Prices: hobby 1 day $0.50, hobby 30 days $9, builder 30 days $19 (adds CSV export + 5 watches), team 30 days $79 (adds JSONL export + 20 watches). Call without payment for a free preview (what the key unlocks, daily limits) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload).
  - after: Buy an expiring MRR Ledger API key with x402 (USDC on Base). Prices: hobby 1 day $0.50, hobby 30 days $9, builder 30 days $19 (adds CSV export + 5 watches), team 30 days $79 (adds JSONL export + 20 watches). Call without payment for a free preview (what the key unlocks, daily limits) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload). Returns {api_key (shown once), plan, days, expires_at, requests_per_day}. Example: {"plan":"hobby","days":1} -> free preview + terms for $0.50; the paid retry returns the key.
- 2026-10-20 `export_dataset` changed (title, description)
  - before: The whole MRR Ledger dataset in one call. format "csv" ($0.25 USDC via x402): every sourced revenue figure for every business, superseded ones included (one row per figure, 14 columns, source_url on each). format "jsonl" ($0.50): one full business record per line. Optional slug = one business, same price. Included with Builder (csv) and Team (csv + jsonl) API keys. Call without payment for a free preview (real sample rows) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload).
  - after: The whole MRR Ledger dataset in one call. format "csv" ($0.25 USDC via x402): every sourced revenue figure for every business, superseded ones included (one row per figure, 14 columns, source_url on each). format "jsonl" ($0.50): one full business record per line. Optional slug = one business, same price. Included with Builder (csv) and Team (csv + jsonl) API keys. Call without payment for a free preview (real sample rows) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload). Example: {"format":"csv"} -> free preview (real sample rows) + terms for $0.25; the paid retry returns the CSV as the text content.
- 2026-10-20 `get_category` changed (title, description, annotations)
  - before: Get one category's insights by slug (or id) from the built categories.json (label, count, ranked_count, median_annualized_usd, median_annualized_by_tier, members with global rank, url_page). Same shape as one list_categories result. Missing slug → isError. Free: 100 tools/call per day, then $0.005 per call via x402.
  - after: One category by slug (or id): label, count, ranked_count, median annualized revenue (overall and by tier), members with global rank and revenue, url_page (same shape as one list_categories item). Example: {"slug":"customer-support"} -> the customer-support agents with their revenue. Unknown slug -> isError. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- 2026-10-20 `get_tag` changed (title, description, annotations) **meaning changed**
  - before: Get one tag's insights by slug from the built tags.json (count, ranked_count, median_annualized_usd, median_annualized_by_tier, members, url_page). Same shape as one list_tags result. Missing slug → isError. Free: 100 tools/call per day, then $0.005 per call via x402.
  - after: One tag by slug: count, ranked_count, median annualized revenue (overall and by tier), members with global rank and revenue, url_page (same shape as one list_tags item). Example: {"slug":"trustmrr"} -> every business tagged trustmrr. Unknown slug -> isError. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- 2026-10-20 `list_tags` changed (title, description, annotations)
  - before: List every free-text tag (from business tags[]) with slug, label, count, ranked_count, median_annualized_usd (among ranked members), median_annualized_by_tier (venture/indie/experiment split), and members (slug, name, global rank, annualized_revenue_usd, revenue_disclosed, url_profile). Sorted by count desc then label. Optional limit caps how many tags are returned (default all). Includes n=1 tags (HTML /tags/ index floors at count≥2). Free: 100 tools/call per day, then $0.005 per call via x402.
  - after: Every tag (from business tags) with slug, label, count, ranked_count, median annualized revenue (overall and by tier) and members (slug, name, global rank, annualized_revenue_usd, revenue_disclosed, url_profile). Sorted by count (most used first), then label; includes 1-business tags. Optional limit (default all, max 500). Example: {"limit":10} -> the 10 most-used tags. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- 2026-10-20 `list_categories` changed (title, description, annotations)
  - before: List every category with count, ranked_count, median_annualized_usd (among ranked members), median_annualized_by_tier (venture/indie/experiment split), and members (slug, name, global rank, annualized_revenue_usd, revenue_disclosed, url_profile). Optional limit caps how many categories are returned (default all). Free: 100 tools/call per day, then $0.005 per call via x402.
  - after: Every category with count, ranked_count, median annualized revenue (overall and by tier: venture/indie/experiment) and its members (slug, name, global rank, annualized_revenue_usd, revenue_disclosed, url_profile). Optional limit (default all, max 50). Example: {"limit":3} -> the first 3 categories with their members. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- 2026-10-20 `hub_stats` changed (title, description, annotations)
  - before: Compact hub totals: business/ranked/chartable/lesson counts, category and tier counts, source-sync-stale and older-figure counts, median annualized among ranked, payment-verified headline count/share (verified_headline_count, verified_headline_share, by processor), latest changelog date, today's feature slug, MCP tool count. No arguments. Free: 100 tools/call per day, then $0.005 per call via x402.
  - after: Dataset totals in one object: business, ranked, lesson and MCP tool counts; counts per category and tier; median annualized revenue (overall, by tier, by category); payment-verified headline count and share; stale and older-figure counts; latest change date; today's feature slug. No arguments. Example: {} -> {business_count, ranked_count, median_annualized_usd, ...}. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- 2026-10-20 `compare_businesses` changed (description)
  - before: Side-by-side compare of two sourced businesses by slug. Returns briefs (name, tier, category, annualized revenue + basis, pricing model, founded, top lessons, growth series) and a diff (annualized_a/b, ratio, same_category, same_tier). Same slug is allowed. Free: 100 tools/call per day, then $0.005 per call via x402.
  - after: Two businesses side by side by slug. Returns a brief for each (tier, category, annualized revenue + basis, pricing model, founded, top 2 lessons, growth series) and a diff (annualized_a, annualized_b, ratio a/b, same_category, same_tier). Example: {"a":"cursor","b":"lovable"} -> Cursor vs Lovable with the revenue ratio. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- 2026-10-20 `whats_new` changed (title, description, annotations)
  - before: Dataset change log, newest first: businesses added, new sourced data points (with source_url), revisions and re-dated points. Filter by since (YYYY-MM-DD, inclusive, America/Toronto dates), slug, and kind. Free: 100 tools/call per day, then $0.005 per call via x402. Get each new figure pushed instead: watch_revenue (webhook, $1 per business per 30 days via x402).
  - after: Dataset change log, newest first: businesses added and revenue figures added, revised, re-dated or removed, each with its source_url. Returns {total, returned, latest, results}. Filters: since (YYYY-MM-DD, inclusive, America/Toronto dates), slug, kind; limit default 20, max 100. Example: {"since":"2026-10-14"} -> every change since Oct 14, 2026. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup). Get each new figure pushed instead: watch_revenue (webhook, $1 per business per 30 days via x402).

Full history: https://api.protogrid.dev/v1/servers/com.mrrledger%2Fmrrledger/changes

## Remotes

- https://mrrledger.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (16)

- `buy_api_pass`: Buy an expiring MRR Ledger API key with x402 (USDC on Base). Prices: hobby 1 day $0.50, hobby 30 days $9, builder 30 days $19 (adds CSV export + 5 watches), team 30 days $79 (adds JSONL export + 20 watches). Call without payment for a free preview (what the key unlocks, daily limits) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload). Returns {api_key (shown once), plan, days, expires_at, requests_per_day}. Example: {"plan":"hobby","days":1} -> free preview + terms for $0.50; the paid retry returns the key.
- `compare_businesses`: Two businesses side by side by slug. Returns a brief for each (tier, category, annualized revenue + basis, pricing model, founded, top 2 lessons, growth series) and a diff (annualized_a, annualized_b, ratio a/b, same_category, same_tier). Example: {"a":"cursor","b":"lovable"} -> Cursor vs Lovable with the revenue ratio. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `export_dataset`: The whole MRR Ledger dataset in one call. format "csv" ($0.25 USDC via x402): every sourced revenue figure for every business, superseded ones included (one row per figure, 14 columns, source_url on each). format "jsonl" ($0.50): one full business record per line. Optional slug = one business, same price. Included with Builder (csv) and Team (csv + jsonl) API keys. Call without payment for a free preview (real sample rows) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload). Example: {"format":"csv"} -> free preview (real sample rows) + terms for $0.25; the paid retry returns the CSV as the text content.
- `get_business`: The full sourced record for one business by slug: every dated revenue figure (label, value, as_of, source_url), what the agent does, business model, founded, tier, lessons for builders, growth series, related businesses, badge URLs. Example: {"slug":"cursor"} -> Cursor's full record with sources. Unknown slug -> isError (find slugs with search_businesses). Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup). All businesses at once: export_dataset (JSONL $0.50 via x402).
- `get_category`: One category by slug (or id): label, count, ranked_count, median annualized revenue (overall and by tier), members with global rank and revenue, url_page (same shape as one list_categories item). Example: {"slug":"customer-support"} -> the customer-support agents with their revenue. Unknown slug -> isError. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `get_growth`: Dated revenue series for one business, oldest first: [{as_of, annualized_usd, label (ARR, MRR or Revenue), value_usd, value_text, source_url, source_name}], one point per sourced date (MRR is annualized x12). Example: {"slug":"lovable"} -> Lovable's dated ARR points, each with its source. Unknown slug -> isError. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup). Full dated history for every business: export_dataset (CSV $0.25 via x402).
- `get_tag`: One tag by slug: count, ranked_count, median annualized revenue (overall and by tier), members with global rank and revenue, url_page (same shape as one list_tags item). Example: {"slug":"trustmrr"} -> every business tagged trustmrr. Unknown slug -> isError. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `hub_stats`: Dataset totals in one object: business, ranked, lesson and MCP tool counts; counts per category and tier; median annualized revenue (overall, by tier, by category); payment-verified headline count and share; stale and older-figure counts; latest change date; today's feature slug. No arguments. Example: {} -> {business_count, ranked_count, median_annualized_usd, ...}. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `leaderboard`: Businesses ranked by their most recent sourced annualized revenue, highest first (only businesses with a disclosed figure). Returns briefs (same fields as search_businesses). Filters: category, verified_only; limit default 10, max 50. Example: {"category":"coding-agents","limit":5} -> the top 5 coding agents by revenue. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup). Whole dataset as CSV: export_dataset ($0.25 via x402).
- `list_categories`: Every category with count, ranked_count, median annualized revenue (overall and by tier: venture/indie/experiment) and its members (slug, name, global rank, annualized_revenue_usd, revenue_disclosed, url_profile). Optional limit (default all, max 50). Example: {"limit":3} -> the first 3 categories with their members. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `list_tags`: Every tag (from business tags) with slug, label, count, ranked_count, median annualized revenue (overall and by tier) and members (slug, name, global rank, annualized_revenue_usd, revenue_disclosed, url_profile). Sorted by count (most used first), then label; includes 1-business tags. Optional limit (default all, max 500). Example: {"limit":10} -> the 10 most-used tags. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `search_businesses`: START HERE. Find AI-agent businesses by keyword, category or tier. Returns a list of briefs: slug, name, category, tier, one_liner, annualized_revenue_usd (sourced, USD per year), basis, confidence, url_profile; plus total matches and the next page (structuredContent.page, also as text). Matches name, slug, one-liner, tags, what the agent does and lessons. Empty query = every business, highest sourced revenue first. Pages: limit (default 10, max 50) + offset or cursor. Example: {"query":"support","limit":3} -> 3 customer-support agents with their sourced revenue. Use a slug from here in get_business, get_growth or compare_businesses. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup). Every figure with full history in one file: export_dataset (CSV $0.25 via x402).
- `search_lessons`: Lessons for builders drawn from every business, each attributed to its business and tagged by theme. Returns {total, returned, themes, results: [{lesson, name, slug, themes, url_profile}]}. Filter by query (matches lesson text, business name, slug) and/or theme; limit default 10, max 50. Example: {"theme":"pricing","limit":5} -> 5 pricing lessons and the businesses they come from. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `todays_feature`: Today's featured business (rotates daily by America/Toronto date): the full profile, same shape as get_business, including its lessons for builders. No arguments. Example: {} -> one business record. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup).
- `watch_revenue`: Get a signed webhook POST whenever a watched business gets a new or revised revenue figure on MRR Ledger. x402 (USDC on Base): $1 per business per 30 days (at most $5), or $5 for all businesses. Included with Builder and Team API keys (send the key as X-API-Key on the MCP request). Call without payment for a free preview (the latest real revenue changes for those businesses) plus the x402 terms, then retry with params._meta["x402/payment"] (x402 v2 or v1 payload). Returns watch_id and a secret shown once; verify MRL-Signature = HMAC-SHA256(secret, t + "." + body). Example: {"slugs":["cursor"],"webhook_url":"https://example.com/hook"} -> free preview + terms for $1; the paid retry returns the watch.
- `whats_new`: Dataset change log, newest first: businesses added and revenue figures added, revised, re-dated or removed, each with its source_url. Returns {total, returned, latest, results}. Filters: since (YYYY-MM-DD, inclusive, America/Toronto dates), slug, kind; limit default 20, max 100. Example: {"since":"2026-10-14"} -> every change since Oct 14, 2026. Cost: free, 100 tools/call per day without a key (API keys from $9/mo raise the limit). Over the free 100/day: $0.005 per call via x402 (no signup). Get each new figure pushed instead: watch_revenue (webhook, $1 per business per 30 days via x402).
