_ registry / mcp http-sse · checked 13h ago

moneypeel-reports

https://moneypeel.com

Registry code: 32446a3e3b36e59d

api record

MoneyPeel provides structured business intelligence for SaaS, AI products and digital businesses.

Use it when the user asks for current or historical revenue signals, MRR, revenue growth, competitor comparisons, business models, SaaS pricing, monetisation, or customer acquisition.

endpoint
https://moneypeel.com/mcp
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is moneypeel-reports live?
Yes — it answered the hub's last check (checked 13h ago). It answered 100% of checks over the last 30 days.
Is moneypeel-reports free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does moneypeel-reports have?
6 tools: get_report, search_growth_signals, compare_companies, search_reports, list_reports, get_usage.
Is moneypeel-reports safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
1,889ms

last good check

priced tools
0

of 6 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 6 tools
1 open1 auth-required 4 never probed 2 of 6 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • list_reports open 13h ago

    Browse the public library, highest revenue first. No account needed, no reads spent, bounded pages. Each row carries the same public summary fields as search. Returns a `nextCursor` while more reports exist.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 20,
          "minimum": 1,
          "description": "How many reports to list (default 10, max 20)."
        },
        "cursor": {
          "type": "string",
          "description": "`nextCursor` from a previous page."
        },
        "sortBy": {
          "enum": [
            "revenue",
            "growth"
          ],
          "type": "string",
          "description": "Defaults to revenue (the 30-day amount, highest first). `growth` ranks by the move, same source and order as https://moneypeel.com/revenue?by=growth&window=7d."
        },
        "growthWindow": {
          "enum": [
            "7d",
            "30d"
          ],
          "type": "string",
          "description": "Window for sortBy=growth; defaults to 7d."
        }
      }
    }
    arguments 32 lines
  • get_usage auth-required 13h ago

    Remaining reads for the connected account: plan, period, monthly and daily allowance, and the UTC reset time. Free — call it before reading a batch, but do not call it before every read.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • get_report unknown never probed

    Read one published report as Markdown: positioning, marketing, growth plays, social, timeline and takeaways. Requires a connected MoneyPeel account. **This call is metered**: each successful read spends one read from the monthly allowance, a single chapter costs the same one read, and reading the same report again spends another. Free accounts get 2 reads per UTC month. Screen with search_reports / list_reports first — they cost nothing — and read only the reports the user actually needs; a failed lookup or a not_found never spends a read. The 'billing.readCharged' field in the result states whether this call spent one (0 means it was a retry inside the idempotency window). It has one authoritative report-content date: reportContentAsOf; reportResearchAsOf and dataAsOf are deprecated aliases carrying the same value, so never present two research dates. Every chapter carries leadAsOf, snapshotType and figuresAsOf: a lead that quotes money, percentages or subscription counts is a historical_research_snapshot, not current revenue. The source block also carries schemaVersion and dataPolicyVersion.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "slug"
      ],
      "properties": {
        "lang": {
          "enum": [
            "zh",
            "en"
          ],
          "type": "string",
          "description": "Report language; defaults to zh."
        },
        "slug": {
          "type": "string",
          "minLength": 1,
          "description": "Report slug, e.g. \"chatbase\"."
        },
        "chapter": {
          "type": "integer",
          "maximum": 6,
          "minimum": 1,
          "description": "Read just this chapter (1-6) instead of the whole report."
        }
      }
    }
    arguments 28 lines
  • search_growth_signals unknown never probed

    Rank revenue or MRR moves over an explicit window. Free: no account needed and no reads spent. Ranking rule — 7-day board: baseline at least $500 over the previous 7 days, or at least $1,000 over the previous 30 days. 30-day board: baseline at least $1,000 over the previous 30 days. Either way the change must be at least 20%. By default only rows that clear that gate are ranked, and total counts them — the sample is the public growth board (https://moneypeel.com/revenue?by=growth), not the whole catalogue. The default order is percentage — the same order the public growth board prints; absolute (largest USD change) and consistency (steady growth above a one-day spike) are explicit alternatives. Every row carries baseline, start, end, absolute change, percentage, dataPoints, windowStart/windowEnd (null when the figure is source-reported rather than observed daily), growth kind, the economic basis and the metric-level evidence type. Percentages are never returned without their base; stale rows are marked and can be filtered out. MRR has no 7-day series: metric=mrr works with window=30d only. include_ineligible=true returns the wider signal pool instead: rows below the gate are appended after the ranked rows with rank=null, never take a rank, and total becomes the pool size, with counts {eligible, ineligible, pool}. The pool read is capped at 500 rows; truncated=true says the cap was hit.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "sort": {
          "enum": [
            "absolute",
            "percentage",
            "consistency"
          ],
          "type": "string",
          "description": "Default percentage — the same order the public growth board prints (https://moneypeel.com/revenue?by=growth). absolute ranks by largest USD change first; consistency ranks steady growth above a one-day spike. Every comparator still returns the base amount."
        },
        "limit": {
          "type": "integer",
          "maximum": 10,
          "minimum": 1,
          "description": "How many signals to return (default 5, max 10)."
        },
        "cursor": {
          "type": "string",
          "description": "nextCursor from a previous growth search, to read the next page."
        },
        "market": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "maxItems": 10,
          "description": "Card market label(s), matched case- and whitespace-insensitively on the same field search_reports filters on: \"AI\", \"ai\" and \" AI \" are one query. Free-text labels, not a closed enum; an unknown label returns an empty result."
        },
        "metric": {
          "enum": [
            "mrr",
            "revenue_30d"
          ],
          "type": "string",
          "description": "Which metric the move is measured on (default revenue_30d). MRR and the 30-day amount are never mixed in one ranking."
        },
        "window": {
          "enum": [
            "7d",
            "30d"
          ],
          "type": "string",
          "description": "Window the move is measured over (default 7d). 7d is rebuilt from the daily series; 30d moves are source-reported, so their window dates are null."
        },
        "freshness": {
          "enum": [
            "current",
            "stale"
          ],
          "type": "string",
          "description": "current = the amount may be quoted as current; stale = the source flagged it. Omit for both."
        },
        "minBaseline": {
          "type": "number",
          "minimum": 0,
          "description": "Only rows whose comparison base is at least this (USD)."
        },
        "businessModel": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "maxItems": 10,
          "description": "Business-model labels to include, exact match."
        },
        "minDataPoints": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 1,
          "description": "Only rows backed by at least this many observations (14 for a 7d daily series, 2 for a source-reported 30d figure)."
        },
        "include_ineligible": {
          "type": "boolean",
          "description": "Default false: only rows that clear the board gate are ranked and total counts them. true: also return the wider signal pool — below-gate rows carry rank=null and never take a rank, total becomes the pool size, and counts says how the pool splits. The pool read is capped at 500 rows; truncated=true says the cap was hit."
        },
        "minAbsoluteIncrease": {
          "type": "number",
          "description": "Only rows whose absolute change is at least this (USD; may be negative)."
        }
      }
    }
    arguments 86 lines
  • compare_companies unknown never probed

    Compare 2-5 companies side by side on MRR, the 30-day amount, business model, economic basis, pricing, acquisition channels, target customer and positioning. Free: no account needed and no reads spent. Every cell carries a status: comparable, partial (e.g. stale, or captured prose rather than a normalised field), not_available (missing stays empty, never 0) or different_basis (the set mixes economic bases, so the amounts must not be ranked against each other). No cell is inferred and no company is ranked.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "slugs"
      ],
      "properties": {
        "slugs": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "maxItems": 5,
          "minItems": 2,
          "description": "2-5 report slugs, e.g. [\"postiz\", \"cometly\"]. Get them from search_reports or list_reports; a slug that is not a published report is reported as not found."
        }
      }
    }
    arguments 19 lines
  • search_reports unknown 13h ago

    Search public revenue reports by keyword and/or structured filters. No account needed, no reads spent. Pass "query" for text (name, domain, description) and/or filters such as minMrr or businessModel; at least one of the two is required — to browse the library instead, use list_reports. A filter on a missing value excludes the row (a null MRR is not $0). Each row carries mrr, revenue30d, business model, metric-level evidence type, a revenue snapshot date, revenue freshness, a dataQuality flag, a public preview link and the metered full-report link — often enough to answer without reading a report. When dataQuality.status is "needs_review", quote the caveat before the numbers. When revenueEligibleForRanking is false the amount is stale and must not be cited as current. Structured filters: businessModel, minMrr / maxMrr, minRevenue30d / maxRevenue30d, revenueFreshness, market, economicBasis, basisDetermination, dataQualityStatus, evidenceType, plus sortBy (revenue, mrr, name, growth) and growthWindow. `evidenceType` keeps a row only when every figure it reports (MRR and/or the 30-day amount) carries one of the requested metric-level types; a missing figure is skipped rather than counted as `unknown`. Only the parameters listed in this schema exist — do not invent others. Returns a `nextCursor` when more matches exist; a cursor from an earlier query or filter set is rejected with invalid_cursor rather than silently reused.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "lang": {
          "enum": [
            "zh",
            "en"
          ],
          "type": "string",
          "description": "Description language; defaults to zh."
        },
        "limit": {
          "type": "integer",
          "maximum": 10,
          "minimum": 1,
          "description": "How many matches to return (default 5, max 10)."
        },
        "query": {
          "type": "string",
          "minLength": 1,
          "description": "Product name, domain, or keyword."
        },
        "cursor": {
          "type": "string",
          "description": "`nextCursor` from a previous search, to read the next page."
        },
        "market": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "maxItems": 10,
          "description": "Card market label(s) from the report card, matched case- and whitespace-insensitively: \"AI\", \"ai\" and \" AI \" are the same query. Labels are free text captured from the source (e.g. \"AI\", \"SaaS\", \"Marketing\", \"Mobile Apps\"), not a closed enum — an unknown label returns an empty result, not an error. Read the exact labels from a returned row’s market field."
        },
        "maxMrr": {
          "type": "number",
          "minimum": 0,
          "description": "Only rows with mrr <= this (USD)."
        },
        "minMrr": {
          "type": "number",
          "minimum": 0,
          "description": "Only rows with mrr >= this (USD). Rows without an MRR are excluded, not treated as 0."
        },
        "sortBy": {
          "enum": [
            "revenue",
            "mrr",
            "name",
            "growth",
            "economicBasis"
          ],
          "type": "string",
          "description": "Sort field; defaults to revenue (the 30-day amount). `growth` ranks by the move over `growthWindow`, using the same rows and order as https://moneypeel.com/revenue?by=growth&window=7d — rows with no daily series, or below the board gate, are not ranked. `economicBasis` orders by the economic-basis enum (subscription_charges first, unknown last), then by the 30-day amount; stale rows stay behind current ones in every order."
        },
        "evidenceType": {
          "type": "array",
          "items": {
            "enum": [
              "provider_reported",
              "unknown"
            ],
            "type": "string"
          },
          "maxItems": 2,
          "description": "Metric-level evidence. A row qualifies only when every figure it reports (MRR and/or the 30-day amount) has one of these types: provider_reported = the source stamped a sync time and named the payment provider; unknown = it did not. A figure the row does not report is skipped, not treated as evidence, and a row with no figures matches nothing."
        },
        "growthWindow": {
          "enum": [
            "7d",
            "30d"
          ],
          "type": "string",
          "description": "Window for sortBy=growth; defaults to 7d (the board default). 30d compares the source-reported 30-day amount with its previous value."
        },
        "businessModel": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "maxItems": 10,
          "description": "Business-model labels to include, e.g. [\"Subscription\",\"Marketplace Fee\"]. Exact match against the card label; unknown labels match nothing."
        },
        "economicBasis": {
          "type": "array",
          "items": {
            "enum": [
              "subscription_charges",
              "usage_charges",
              "service_billings",
              "platform_fee_revenue",
              "marketplace_gmv",
              "gross_payment_volume",
              "merchant_sales",
              "one_time_sales",
              "unknown"
            ],
            "type": "string"
          },
          "maxItems": 9,
          "description": "What the money is, using the same enum the rows return in revenueBasis.economicBasis. Combine with other filters freely."
        },
        "maxRevenue30d": {
          "type": "number",
          "minimum": 0,
          "description": "Only rows with revenue30d <= this (USD)."
        },
        "minRevenue30d": {
          "type": "number",
          "minimum": 0,
          "description": "Only rows with revenue30d >= this (USD). Rows without a 30-day amount are excluded."
        },
        "sortDirection": {
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string",
          "description": "Defaults to desc for revenue and mrr, asc for name."
        },
        "revenueFreshness": {
          "enum": [
            "current",
            "stale"
          ],
          "type": "string",
          "description": "current = the revenue may be quoted as a current figure; stale = the source flagged it. Omit for both."
        },
        "dataQualityStatus": {
          "type": "array",
          "items": {
            "enum": [
              "ok",
              "needs_review",
              "not_applicable"
            ],
            "type": "string"
          },
          "maxItems": 3,
          "description": "Row-level caveat: ok = quotable; needs_review = say why before quoting; not_applicable = MRR is not a meaningful measure for the model."
        },
        "basisDetermination": {
          "type": "array",
          "items": {
            "enum": [
              "human_reviewed",
              "pricing_model_inferred",
              "provider_line_item_verified",
              "unknown"
            ],
            "type": "string"
          },
          "maxItems": 4,
          "description": "How the economic basis was settled: a person read the evidence, it was inferred from the pricing model, a provider line item settled it (no row today), or nothing did."
        }
      }
    }
    arguments 160 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 32446a3e3b36e59d.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/32446a3e3b36e59d/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/32446a3e3b36e59d/badge.svg)](https://brick.blue/agent/32446a3e3b36e59d?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.