Skip to content

MRR Ledger

by mrrledger.com · remote · no sign-in to list tools · v1.7.0 · published by com.mrrledger

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

Changes · 3

17 tools: 3 change things and 14 only read.

Scanned Oct 21, 2026

3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http mrrledger https://mrrledger.com/mcp

Findings

Matches of fixed checks, with the text they matched.

3 warn
  • The server marks "search_businesses" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "search_businesses" says "search": a word for reading.

    What this check looks for
  • The server marks "buy_api_pass" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "return": a word for reading.

    What this check looks for
  • The server marks "watch_revenue" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "return": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Changes things 3Claude Code: ask
  • buy_api_passReturns an expiring MRR Ledger API key {api_key (shown once), plan, days, expires_at, requests_per_day}.1 finding

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "buy_api_pass" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "return": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Returns an expiring MRR Ledger API key {api_key (shown once), plan, days, expires_at, requests_per_day}. Paid via x402 (USDC on Base): hobby 1 day $0.50, hobby 30 days $9, builder 30 days $19 (+ CSV export, 5 watches), team 30 days $79 (+ JSONL export, 20 watches). Unpaid call = free preview + terms; retry with params._meta["x402/payment"]. Example: {"plan":"hobby","days":1} -> free preview + terms for $0.50; the paid retry returns the key.

    Annotations the server declares

    • readOnlyHint: false
    • idempotentHint: false
    • openWorldHint: false
  • search_businessesSTART HERE.1 finding

    Why it is in this group

    • The name "search_businesses" says "search": a word for reading.
    • The description's first verb is "start": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "search_businesses" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "search_businesses" says "search": a word for reading.

      What this check looks for
    Description, as the server wrote it
    START HERE. Returns AI-agent businesses with sourced, dated revenue: briefs (slug, name, category, tier, one_liner, annualized_revenue_usd, basis, confidence, url_profile) + total + next page. Example: {"query":"support","limit":3} -> 3 customer-support agents with their sourced revenue. Empty query = all, highest revenue first; filters category, tier, verified_only; limit max 50, offset/cursor. Next: get_business {"slug"}. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Search businesses (start here)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • watch_revenueReturns a watch_id + secret (shown once): we POST a signed webhook (MRL-Signature = HMAC-SHA256(secret, t + "." + body)) whenever a watched business gets a new or revised revenue f…1 finding

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "watch_revenue" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The description's first verb is "return": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Returns a watch_id + secret (shown once): we POST a signed webhook (MRL-Signature = HMAC-SHA256(secret, t + "." + body)) whenever a watched business gets a new or revised revenue figure. Paid via x402 (USDC on Base): $1 per business per 30 days (max $5), $5 for all; included with Builder/Team keys (X-API-Key). Unpaid call = free preview of the latest real changes + terms; retry with params._meta["x402/payment"]. Example: {"slugs":["cursor"],"webhook_url":"https://example.com/hook"} -> free preview + terms for $1; the paid retry returns the watch.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 14Claude Code: allow
  • benchmark_businessReturns your rank among fresh same-category MRR peers: rank of N, N, basis, verification date, peer caveat + 1 comparable (no growth numbers yet; your MRR is never stored).No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Returns your rank among fresh same-category MRR peers: rank of N, N, basis, verification date, peer caveat + 1 comparable (no growth numbers yet; your MRR is never stored). Example: {"category":"customer-support","mrr":2000} -> your rank among the customer-support MRR peers + 1 comparable. Cost: free (100 calls/day without a key). Full answer (percentile where 10+ peers, 5 sourced comparables): $0.05 via x402 (full: true for the terms), or included with Builder/Team/Pro keys and a $9 Category Report token (report_token).

    Annotations the server declares

    • title: Benchmark your MRR against category peers
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • compare_businessesReturns two businesses side by side (tier, category, annualized revenue + basis, pricing model, founded, top lessons, growth) and a diff with the revenue ratio.No findings

    Why it is in this group

    • The name "compare_businesses" says "compare": a word for reading.
    Description, as the server wrote it
    Returns two businesses side by side (tier, category, annualized revenue + basis, pricing model, founded, top lessons, growth) and a diff with the revenue ratio. Example: {"a":"cursor","b":"lovable"} -> Cursor vs Lovable with the revenue ratio. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Compare two businesses
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • export_datasetReturns the whole dataset in one call: format "csv" ($0.25 USDC via x402; every sourced figure, one row each, with source_url) or "jsonl" ($0.50; one full record per business); opt…No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Returns the whole dataset in one call: format "csv" ($0.25 USDC via x402; every sourced figure, one row each, with source_url) or "jsonl" ($0.50; one full record per business); optional slug = one business, same price. Included with Builder (csv) and Team (csv + jsonl) keys. Unpaid call = free preview of real rows + terms; retry with params._meta["x402/payment"]. Example: {"format":"csv"} -> free preview + terms for $0.25; the paid retry returns the CSV.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_businessReturns one business's full sourced record: every dated revenue figure (label, value, as_of, source_url), what it does, model, tier, lessons, growth series, related businesses.No findings

    Why it is in this group

    • The name "get_business" says "get": a word for reading.
    Description, as the server wrote it
    Returns one business's full sourced record: every dated revenue figure (label, value, as_of, source_url), what it does, model, tier, lessons, growth series, related businesses. Example: {"slug":"cursor"} -> Cursor with every figure and its source. Unknown slug -> isError. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Get one business profile
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_categoryReturns one category: count, median annualized revenue (overall, by tier) and members with rank and revenue.No findings

    Why it is in this group

    • The name "get_category" says "get": a word for reading.
    Description, as the server wrote it
    Returns one category: count, median annualized revenue (overall, by tier) and members with rank and revenue. Example: {"slug":"customer-support"} -> the customer-support agents with their revenue. Unknown slug -> isError. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Get one category
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_growthReturns one business's dated revenue series, oldest first (as_of, annualized_usd, label, value_usd, source_url; MRR x12).No findings

    Why it is in this group

    • The name "get_growth" says "get": a word for reading.
    Description, as the server wrote it
    Returns one business's dated revenue series, oldest first (as_of, annualized_usd, label, value_usd, source_url; MRR x12). Example: {"slug":"lovable"} -> Lovable's dated ARR points with sources. Unknown slug -> isError. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Revenue over time (one business)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_tagReturns one tag: count, median annualized revenue and members with rank and revenue.No findings

    Why it is in this group

    • The name "get_tag" says "get": a word for reading.
    Description, as the server wrote it
    Returns one tag: count, median annualized revenue and members with rank and revenue. Example: {"slug":"trustmrr"} -> every business tagged trustmrr. Unknown slug -> isError. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Get one tag
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • hub_statsReturns dataset totals: business, ranked and lesson counts, counts per category and tier, median annualized revenue, payment-verified share, latest change date.No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Returns dataset totals: business, ranked and lesson counts, counts per category and tier, median annualized revenue, payment-verified share, latest change date. Example: {} -> {business_count, ranked_count, median_annualized_usd, ...}. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Dataset totals and medians
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • leaderboardReturns businesses ranked by latest sourced annualized revenue, highest first (briefs as in search_businesses); filters category, verified_only, limit (max 50).No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Returns businesses ranked by latest sourced annualized revenue, highest first (briefs as in search_businesses); filters category, verified_only, limit (max 50). Example: {"category":"coding-agents","limit":5} -> the top 5 coding agents by revenue. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Revenue leaderboard (ranked)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_categoriesReturns every category with count, median annualized revenue and members (slug, name, rank, revenue).No findings

    Why it is in this group

    • The name "list_categories" says "list": a word for reading.
    Description, as the server wrote it
    Returns every category with count, median annualized revenue and members (slug, name, rank, revenue). Example: {"limit":3} -> the first 3 categories with their members. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: List categories with members
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_tagsReturns every tag with count, median annualized revenue and members, most used first.No findings

    Why it is in this group

    • The name "list_tags" says "list": a word for reading.
    Description, as the server wrote it
    Returns every tag with count, median annualized revenue and members, most used first. Example: {"limit":10} -> the 10 most-used tags. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: List tags with members
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_lessonsReturns builder lessons from every business, each with its business and themes; filter by query and/or theme, limit (max 50).No findings

    Why it is in this group

    • The name "search_lessons" says "search": a word for reading.
    Description, as the server wrote it
    Returns builder lessons from every business, each with its business and themes; filter by query and/or theme, limit (max 50). Example: {"theme":"pricing","limit":5} -> 5 pricing lessons and their businesses. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Search builder lessons
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • todays_featureReturns today's featured business (rotates daily): one full profile, same shape as get_business.No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Returns today's featured business (rotates daily): one full profile, same shape as get_business. Example: {} -> one business record. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: Today's featured business
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • whats_newReturns the change log, newest first: businesses added and figures added, revised, re-dated or removed, each with source_url; filters since (YYYY-MM-DD), slug, kind, limit (max 100…No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Returns the change log, newest first: businesses added and figures added, revised, re-dated or removed, each with source_url; filters since (YYYY-MM-DD), slug, kind, limit (max 100). Example: {"since":"2026-10-14"} -> every change since Oct 14, 2026. Cost: free (100 calls/day without a key). Past 100/day: $0.005 per call via x402 (no signup).

    Annotations the server declares

    • title: What changed in the data
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.7.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http mrrledger https://mrrledger.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__mrrledger__get_business",
      "mcp__mrrledger__leaderboard",
      "mcp__mrrledger__benchmark_business",
      "mcp__mrrledger__compare_businesses",
      "mcp__mrrledger__get_growth",
      "mcp__mrrledger__whats_new",
      "mcp__mrrledger__get_category",
      "mcp__mrrledger__list_categories",
      "mcp__mrrledger__search_lessons",
      "mcp__mrrledger__hub_stats",
      "mcp__mrrledger__todays_feature",
      "mcp__mrrledger__get_tag",
      "mcp__mrrledger__list_tags",
      "mcp__mrrledger__export_dataset"
    ],
    "ask": [
      "mcp__mrrledger__search_businesses",
      "mcp__mrrledger__buy_api_pass",
      "mcp__mrrledger__watch_revenue"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as mrrledger. Review it before you use it.