Skip to content

MoneyPeel reports MCP server

com.moneypeel/reportsmoneypeel.comstreamable-httpv1.4.4Scanned

Revenue intelligence and growth research for SaaS and AI products.

6 tools: 1 change things and 5 only read.

Tools: 0 delete, 0 irreversible, 1 write, 5 read.
  • Reads private data · 0
  • Reads text others write · 1
  • Can send data out · 0
  • 1 finding

Tools listed without sign-in. Remote posture

With Anlyon

1 tool here changes things. Govern it.

  • Anlyon lists the tools and adopts none.
  • Each tool you adopt gets approvals and receipts.
  • Your agent never holds the key.
Govern this server →

A tool your agent calls directly is not routed through Anlyon and is not governed by it. anlyon.dev only lists and labels, and these labels are the same either way.

What the MoneyPeel reports MCP server can do

The MoneyPeel reports MCP server is published by moneypeel.com, a domain the MCP Registry verified. It has 6 tools. It can create or change data (1 tool: get_report), but cannot delete data. 5 tools only read.

1 tool brings in text other people can write (list_reports).

The fixed checks matched 1 finding (annotation-conflict). Each one comes with the text it matched.

Its remote endpoint lists its tools without sign-in, and its tools changed 3 times since anlyon.dev first saw them.

Last scanned Nov 12, 2026, version 1.4.4.

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

6 tools

Changes things 1Claude Code: ask
  • get_reportRead one published report as Markdown: positioning, marketing, growth plays, social, timeline and takeaways.1 finding

    Why it is in this group

    • The name "get_report" says "get": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

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

      Matched text

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

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 5Show 5 read-only tools
  • compare_companiesCompare 2-5 companies side by side on MRR, the 30-day amount, business model, economic basis, pricing, acquisition channels, target customer and positioning.No findings

    Why it is in this group

    • The name "compare_companies" says "compare": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_usageRemaining reads for the connected account: plan, period, monthly and daily allowance, and the UTC reset time.No findings

    Why it is in this group

    • The name "get_usage" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_reportsBrowse the public library, highest revenue first.Reads text others writeNo findings

    Why it is in this group

    • The name "list_reports" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "browse": it reads web pages, which anyone can write.
    Description, as the server wrote it
    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. A cursor is bound to the full request, including `limit`: keep the same sort, filters and page size when you page, or the server answers invalid_cursor rather than silently reusing it.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_growth_signalsRank revenue or MRR moves over an explicit window.No findings

    Why it is in this group

    • The name "search_growth_signals" says "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_reportsSearch public revenue reports by keyword and/or structured filters.No findings

    Why it is in this group

    • The name "search_reports" says "search": a word for reading.
    Description, as the server wrote it
    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 is bound to the full request — query, filters, sort and `limit` — so keep all of them identical when you page, or it is rejected with invalid_cursor rather than silently reused.

    Annotations the server declares

    • 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.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or outbound.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write1
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Tools listed without sign-in

Looked at Nov 11, 2026, 09:19 UTC, unchanged since Nov 11, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
200
tools/list served without credentials
yes
Tools that change things, listed without credentials
1
Protocol version
2025-06-18
WWW-Authenticate on 401
not observed
resource_metadata in WWW-Authenticate
not observed
RFC 9728 protected resource metadata
https://moneypeel.com/.well-known/oauth-protected-resource/mcp
Authorization servers
https://moneypeel.com
Legacy HTTP+SSE transport
no
Dynamic client registration
yes
Client ID metadata documents
no
  • WarnThe whole server

    The endpoint served tools/list without credentials, and the list has 1 tool that changes things (1 write). Whether a call also works without credentials was not tested: tools are never called.

    Matched text

    https://moneypeel.com/mcp: tools/list returned 6 tools to an anonymous client, including get_report (write)

    What this check looks for

Findings

Matches of fixed checks, with the text they matched.

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

    Matched text

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

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

  1. Tools3 changed.~3 changedView diff
  2. Tools1 changed.~1 changedView diff
  3. Tools3 changed.~3 changedView diff

Install

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

claude mcp add --transport http reports https://moneypeel.com/mcp
claude mcp add --transport http reports https://moneypeel.com/mcp

Run in a terminal.

Claude Code permissions

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

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__reports__search_reports",
      "mcp__reports__list_reports",
      "mcp__reports__get_usage",
      "mcp__reports__search_growth_signals",
      "mcp__reports__compare_companies"
    ],
    "ask": [
      "mcp__reports__get_report"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as reports. Review it before you use it.

Capability tags behind 1 rule
  • mcp__reports__list_reports untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/com.moneypeel/reports/verify?hash=7b641f6a74c791a75ea1f035419a030f152201ba701c5501b589641b4a86afea" | jq -e '.changed == false'

Pinned hash 7b641f6a74c7, from Nov 12, 2026, 08:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/com.moneypeel/reports/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for com.moneypeel/reports
[![anlyon.dev](https://anlyon.dev/badge/com.moneypeel/reports.svg)](https://anlyon.dev/servers/com.moneypeel/reports)

Source: MCP Registry · repository. Synced Nov 12, 2026, 08:18 UTC.

MoneyPeel reports MCP server: questions and answers

Answered from the scan above, not from the publisher's description.

Is the MoneyPeel reports MCP server safe?

No scan can promise that. What its definitions show: 6 tools, 1 of which can change, send or delete something, and 1 finding from fixed checks. Allow the reads, ask before each change, and deny the deletes; the permissions block on this page does that.

Can the MoneyPeel reports MCP server delete data?

No tool is classed as destructive: going by their definitions, none of them deletes, cancels or revokes anything.

Can the MoneyPeel reports MCP server do things that cannot be undone?

No tool is classed as irreversible: none of them sends, pays, publishes or merges, going by their definitions.

What tools does the MoneyPeel reports MCP server have?

6 tools: 1 write, 5 read. get_report, search_reports, list_reports, get_usage, search_growth_signals and compare_companies.

Does the MoneyPeel reports MCP server need sign-in or OAuth?

Its remote endpoint listed its tools to an anonymous client, without sign-in.

Does the MoneyPeel reports MCP server send data to outside services?

None of its tools sends, posts or publishes, or takes a recipient, channel or URL.

Has the MoneyPeel reports MCP server changed its tools?

Yes, 3 times since anlyon.dev started tracking it, most recently on Nov 12, 2026. Every change is on this page and in its Atom feed.