Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

RevenueScope: revenue-first analytics for your EC site

REMOTE · MCP.REVENUESCOPE.JP · SCANNED AUG 3

Ask AI about your EC site's revenue by channel, RPS/AOV/CVR, search & AI traffic, budget split.

+10 this week 75 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security94
Transport & Reachability100
Schema Quality & AI Usability56
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4281 tokens (~428/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · mcp.revenuescope.jp

# add to Claude Code
claude mcp add --transport http toshihiroshishido-revenuescope-mcp https://mcp.revenuescope.jp/api/mcp
# ~/.codex/config.toml
[mcp_servers.toshihiroshishido-revenuescope-mcp]
url = "https://mcp.revenuescope.jp/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "toshihiroshishido-revenuescope-mcp": {
      "type": "remote",
      "url": "https://mcp.revenuescope.jp/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add toshihiroshishido-revenuescope-mcp --url https://mcp.revenuescope.jp/api/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  toshihiroshishido-revenuescope-mcp:
    url: "https://mcp.revenuescope.jp/api/mcp"
// mcp.json
{
  "mcpServers": {
    "toshihiroshishido-revenuescope-mcp": {
      "type": "http",
      "url": "https://mcp.revenuescope.jp/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1
    • Tool “get_page_trend” changed its title: Page search trend over time cosmetic
    • Tool “get_priority_insights” changed its title: Top priority insights cosmetic
    • Tool “get_summary” changed its title: Site KPI summary cosmetic
    • Tool “list_sites” changed its title: List available sites cosmetic
    • Tool “suggest_budget_allocation” changed its title: Suggest budget allocation cosmetic
    • Tool “get_ai_traffic” changed its title: AI assistant traffic cosmetic
    • Tool “get_breakdown” changed its title: Revenue breakdown by dimension cosmetic
    • Tool “get_competitor_keywords” changed its title: Competitor keywords (external SEO snapshot) cosmetic
    • Tool “get_content_actions” changed its title: Content actions (classify pages + playbook) cosmetic
    • Tool “get_keyword_performance” changed its title: Search keyword performance cosmetic

    10 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.

  • 1 Aug 26 +7
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 31 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 64

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://mcp.revenuescope.jp/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.revenuescope.jp CN=YR1,O=Let's Encrypt,C=US 18 Jul 2026 16 Oct 2026 RSA 2048 SHA256-RSA 54b0d70b68db391f604f77cf2136818afc5
SANs: mcp.revenuescope.jp
CN=YR1,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA a20253f15f2691c05dc1ce13b9bcca4e
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f
DNSSEC insecure

Validation of mcp.revenuescope.jp. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
jp. present 33631 8 Verified
revenuescope.jp. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer realm="https://mcp.revenuescope.jp", resource_metadata="https://mcp.revenuescope.jp/.well-known/oauth-protected-resource"

Bearer realm="https://mcp.revenuescope.jp", resource_metadata="https://mcp.revenuescope.jp/.well-known/oauth-protected-resource"
Header Value
strict-transport-security max-age=63072000

Protected resource metadata

Document https://mcp.revenuescope.jp/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://mcp.revenuescope.jp/api/mcp
Authorisation server https://mcp.revenuescope.jp
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.revenuescope.jp/api/mcp Verified 200
http (plaintext) http://mcp.revenuescope.jp/api/mcp HTTPS enforced 308 https://mcp.revenuescope.jp/api/mcp
MCP tools — 10 exposed · ~4,281 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
get_ai_traffic ~287

Return AI-assistant (ChatGPT/Claude/Perplexity/Gemini/Copilot) traffic for the given period. mode='referred' (default) lists landing pages that received clicked AI traffic — per page × AI source: sessions, bounce rate (%, always computed; judge reliability via the sessions count), summed revenue, and last citation date (default limit 100); a view GA4/GSC cannot produce (GSC is Google-search only; GA4 lacks an AI-source breakdown). mode='gaps' returns where the site leaves AI value on the table as a ranked action list: (1) missed_citation_pages — content articles with real audience but ~0 AI traffic (push for AI citation / GEO), ranked by engagement-weighted reach; (2) under_monetized_ai_pages — pages WITH AI traffic engaging below the site's own AI norm (improve landing/CTA), ranked by AI arrivals lost below benchmark (default limit 10/list); methodology fixed in code. site_id is OPTIONAL when OAuth-authenticated. Default period is the last 30 days; pass period='today'/'7d'/'90d' or a raw day count (1-365). Scope is clicked citations only.

NameTypeReqDescription
limitinteger
modestring
period
site_idstring
NameTypeReqDescription
ai_sourcesarray
assumptionsarray
basisstringyes
criteriaobject
limitationsarray
missed_citation_pagesarray
modestringyes
notesarray
periodobjectyes
rowsarray
site_benchmark_engaged_ratenumber
site_idstringyes
total_ai_sessionsnumber
under_monetized_ai_pagesarray

No examples provided.

get_breakdown ~643

Consolidated breakdown tool. Pick `dimension`: 'channel' returns per-channel sessions/revenue/RPS plus engagement (visitors, avg dwell seconds, bounce rate) and bot_excluded_count (bot sessions removed from human metrics; a channel with sessions=0 but bot_excluded_count>0 is bot-only traffic, kept so it is not mistaken for 'no traffic') and — when ad spend is connected (Path B) — spend/ROAS/saturation; plus an 'Unattributed' row (is_unattributed=true) for purchase revenue not tied to any channel, with a revenue_breakdown summary (total_event_jpy/attributed_jpy/unattributed_jpy); pass attribution_model ('last_touch' default / 'first_touch' / 'linear' / 'time_decay') to switch how purchase revenue is attributed across channels — same models as the dashboard's attribution selector; only revenue_jpy/rps_jpy change (sessions/engagement/bot/spend/ROAS are model-independent), so compare models to see e.g. how much an awareness channel gains under first_touch vs last_touch. pass filter.channel (e.g. 'google','meta','organic_search') to drill into that channel's campaigns (utm_campaign) with RPS/AOV/CVR. 'page' returns per-page pageviews/unique visitors/avg time/bounce ranked by pageviews (limit default 20, max 200; query strings stripped, bots excluded; each row also carries GSC Google-search impressions/clicks/ctr/avg_position merged by normalized path — null when the page has no GSC row, and a DIFFERENT denominator from pageviews, see notes). 'session_attribute' returns the device / time-of-day (4h JST) / day-of-week (ISO) / new-vs-returning (with AOV) / country (top-15 by sessions + 'Other', ISO2 code, share_pct; from first-party session geo, 'Unknown' when IP unresolved) breakdowns in one call. site_id is OPTIONAL when OAuth-authenticated. Default period is the last 30 days; pass period='today'/'7d'/'90d' or a raw day count (1-365). `filter` only applies to dimension='channel'; `limit` only applies to dimension='page'. Pass optional country (ISO2, e.g. 'JP') and/or dev…

NameTypeReqDescription
attribution_modelstring
countrystring
devicestring
dimensionstringyes
filterobject
limitinteger
period
site_idstring
NameTypeReqDescription
assumptionsarray
attribution_modelstring
basisstring
dimensionstringyes
filterobject
limitationsarray
notesarray
pathstring
periodobjectyes
revenue_breakdownobject
rows
session_attributesobject
site_idstringyes
total_pagesnumber
total_pageviewsnumber
truncated

No examples provided.

get_competitor_keywords ~429

Return the latest competitor SEO snapshot for the site (FD-041): which keywords each tracked competitor DOMAIN ranks for on Google (Japan/ja), at what position, with monthly search_volume, cpc and etv (estimated monthly traffic — a visit estimate, not a monetary value), plus how each rank moved vs the previous snapshot. READ-ONLY — this tool never runs a research (that costs money and is triggered separately from the dashboard, the competitor-research Edge Function); it only reads what was already fetched. The response is summary-first (token-aware): each domain carries a constant-size `summary` (total_keywords, total_etv, volume_bands and rank_bands histograms, and vs_previous new/lost/improved/declined/same counts) that always reflects the FULL keyword set, while `keywords` returns only the top rows ranked by `sort` (etv default | volume | rank; default limit 10 per domain, max 100) with a `truncated` block (shown/matching_total/lost_total). rank is a POSITION: smaller is better, so a NEGATIVE rank_delta means the competitor's ranking IMPROVED (change ∈ new/improved/declined/same/unknown). Keywords the competitor ranked for before but lost are disclosed in `lost_keywords` (top 10 by previous etv), never dropped silently. Pass `domain` to focus one competitor, `min_volume` to drop low-volume keywords. When the site has NO completed research yet the response is { researched:false } with a `guidance` string explaining a research must be triggered from the dashboard first — this tool cannot start one. site_id is OPTIONAL when OAuth-authenticated. This is the external competitor lens (third-party SERP data); for YOUR OWN search performance use get_keyword_performance, and for your content playbook use get_content_actions.

NameTypeReqDescription
domainstring
limitinteger
min_volumeinteger
site_idstring
sortstring
NameTypeReqDescription
assumptionsarrayyes
available_domainsarray
basisstringyes
domainsarray
fetched_atstring
guidancestring
keyword_countnumber
language_codestring
limitnumber
limitationsarrayyes
location_codenumber
min_volumenumber|null
research_idstring
researchedbooleanyes
sortstring

No examples provided.

get_content_actions ~943

Return a content 'playbook' for the site: every content page classified into ONE of five action buckets over a weekly-style window comparison (current window vs the immediately preceding window of equal length), ranked by search-opportunity × session gain so you can tell the user which page to GROW next and what to do: within the 'striking' bucket rows are ordered by expected_sessions_gain DESC (the band-CTR headroom that is the actionable lever there), while the other buckets keep real landing revenue DESC (largest revenue at stake first). This surfaces search intent to add sessions (grow the traffic denominator), NOT CVR — a page already winning on sessions/revenue but with zero clicks still shows up. Buckets: 'decaying' (search clicks actually fell, OR the page had real traffic (previous clicks ≥3) and its rank slid ≥2 positions from within the click zone while clicks did NOT grow → refresh/rewrite; a rank slide alone with growing/negligible clicks is NOT decay — search clicks are the primary signal, position only a leading indicator), 'striking' (has striking-distance queries at positions 4-20 with click upside but clicks still low → push those queries up; top 3 listed in striking_queries), 'rising' (clicks grew significantly → produce more of this, strengthen CTA), 'dormant' (has impressions but ~0 clicks and its main query is far below the click zone → big rewrite or consolidate; zero-pageview pure-rank pages surface here), 'stable' (none of the above → watch). Each page also carries current/previous clicks·impressions·avg_position, is_new, landing sessions/engaged/revenue_jpy, AI-referred sessions/revenue/sources, expected_sessions_gain (the window's expected incremental sessions from striking-band queries — a search click is ~1 session, so it is NOT re-converted via CTR; normalize to a monthly figure with the window length), and expected_revenue_gain (expected_sessions_gain × page RPS, returned ONLY when revenue>0 and sessions>=5 — display-only projection,…

NameTypeReqDescription
bucketstring
limitinteger
period
site_idstring
NameTypeReqDescription
assumptionsarrayyes
basisstringyes
bucket_summaryobjectyes
criteriaobjectyes
limitationsarrayyes
pagesarrayyes
periodobjectyes
site_idstringyes
total_pagesnumberyes
truncatedobject
warningstring
windowobjectyes

No examples provided.

get_keyword_performance ~335

Return search-query performance from Google Search Console for the given period. band='all' (default) returns per-query metrics — clicks/impressions/CTR/avg position/top landing page plus an estimated revenue per query (= 検索 organic RPS × clicks, a conservative estimate, 0 until the site has 検索 organic revenue), ranked by clicks (default limit 100). Each row also carries the period-over-period change vs the previous equal-length window: clicks_change (traffic) and est_revenue_change (money), both % deltas (null = the query is NEW, i.e. had no clicks/revenue last period — render as '新規', not 0%). Comparing the two surfaces RS's signature insight — e.g. clicks +74% but est_revenue −21% means traffic grew while money fell, something GA4/GSC cannot show side by side. band='striking' returns the SEO action list: queries 'striking distance' from the top (ranking ~4-20 with real impressions) where improving a few positions yields the biggest click/revenue gain, ranked by estimated revenue opportunity (incremental clicks × search-organic RPS, default limit 10); the methodology is fixed in code. site_id is OPTIONAL when OAuth-authenticated. Default period is the last 30 days; pass period='today'/'7d'/'90d' or a raw day count (1-365). Google-search only.

NameTypeReqDescription
bandstring
limitinteger
period
site_idstring
NameTypeReqDescription
assumptionsarray
bandstringyes
basisstring
criteriaobject
limitationsarray
periodobjectyes
revenue_estimate_basisstring
rowsyes
rps_search_jpynumber
site_idstringyes
warningstring

No examples provided.

get_page_trend ~364

Return how ONE page's Google Search performance changed over time (FD-040) — the time-axis drill-down for a page surfaced by get_breakdown(dimension='page'). Given a `page` (a normalized path like '/news/rps-revenue-per-session-guide' or a full URL — both resolve), returns a `series` of day or week buckets, each with clicks, impressions, and impression-weighted avg_position, plus a `summary` (first/last/best/worst position, position_delta, click & impression totals). avg_position is a RANK: smaller is better, so a NEGATIVE position_delta means the page's ranking IMPROVED over the window (e.g. 12.0 → 9.0 = delta −3.0). Use this to verify whether SEO work on a page paid off (rank rose / clicks grew) or slipped. Buckets where the page never appeared in search are omitted (gaps), so the series can be shorter than the period. `granularity` defaults to 'day' for windows up to ~35 days and 'week' for longer (weekly smooths daily noise); pass it to override. site_id is OPTIONAL when OAuth-authenticated. Default period is the last 30 days; pass period='today'/'7d'/'90d' or a raw day count (1-365). Google-search only; data lags 1-2 days. This is per-page; for the cross-page snapshot use get_breakdown(dimension='page'), and for per-query (keyword) trends use get_keyword_performance.

NameTypeReqDescription
granularitystring
pagestringyes
period
site_idstring
NameTypeReqDescription
assumptionsarrayyes
basisstringyes
granularitystringyes
limitationsarrayyes
pagestringyes
periodobjectyes
seriesarrayyes
site_idstringyes
summaryobjectyes
warningstring

No examples provided.

get_priority_insights ~233

Return the top 3 prioritized, pre-computed DIAGNOSES for the site over the given period — 'what should I act on this week', ranked by revenue impact. Unlike get_site_summary / get_kpi_summary / get_channel_breakdown (which return data), this applies a deterministic rule engine over KPI period-over-period changes, per-channel RPS/ROAS/saturation, and AI-assistant referral growth, and returns ranked findings (revenue-trend swings, high-efficiency channels to scale, over-allocated low-efficiency channels, loss-making/saturated ad channels, revenue concentration risk, emerging AI traffic) — each with a severity (risk/opportunity/watch), the numbers, and a recommended action. The priority judgment is fixed in code (not LLM-generated). site_id is OPTIONAL when OAuth-authenticated. Default period is 30 days; pass period='today'/'7d'/'90d' or a raw day count (1-365). Returns fewer than 3 when fewer rules fire (no padding).

NameTypeReqDescription
period
site_idstring
NameTypeReqDescription
assumptionsarrayyes
basisstringyes
insightsarrayyes
limitationsarrayyes
periodobjectyes
rules_evaluatednumberyes
site_idstringyes

No examples provided.

get_summary ~618

Return the full headline summary for a site and period in ONE call: the 5 KPIs (revenue, sessions, RPS, AOV, CVR) PLUS two engagement KPIs (avg_duration = average dwell time in seconds, bounce_rate = % single-page-exit sessions) each with value AND the period-over-period change vs the previous equal-length window, PLUS a daily revenue/sessions/conversions trend, PLUS ad-spend availability (connected_channels, ad_spend_data_status, ad_spend_channels_in_period) and the Path A/B recommendation. avg_duration/bounce_rate are useful for sites with no revenue yet (engagement view). Pass optional country (ISO2, e.g. 'JP') and/or device ('mobile'/'desktop'/'tablet') to scope the session-derived KPIs and trend to that segment (omit = all); ROAS stays site-wide (ad spend has no country/device dimension). This is what the dashboard's KPI cards + revenue-trend chart show, merged with the site's ad-spend context. Call this first when a user asks 'how is my site doing?'. site_id is OPTIONAL when OAuth-authenticated (server falls back to the primary site). Default period is the last 30 days; pass period='today'/'7d'/'90d' or a raw day count (1-365). change is a percentage for revenue/sessions/RPS/AOV/avg_duration and an absolute percentage-point delta for CVR and bounce_rate. For period='today' the comparison is today-so-far vs the SAME elapsed window yesterday (e.g. midnight→now vs midnight→same-time-yesterday), so 'previous' can read below yesterday's full-day total — that is expected, not a discrepancy. ad_spend_data_status / ad_spend_channels_in_period reflect spend data ACTUALLY present in the period (consistent with get_channel_breakdown); path_recommendation reflects whether the requested period holds any channel with spend>0 (Path B = ad spend connected), the same definition the other tools use. kpis.roas is the SITE-WIDE ROAS (RS-measured revenue ÷ ad spend over channels that have spend — Σrevenue ÷ Σspend, the same definition as the dashboard's overall ROAS and FD-030 A-…

NameTypeReqDescription
countrystring
devicestring
period
site_idstring
NameTypeReqDescription
ad_spend_channels_in_periodarrayyes
ad_spend_data_statusstringyes
ad_spend_rows_in_periodnumberyes
basisstringyes
connected_channelsarrayyes
kpisobjectyes
path_recommendationstringyes
periodobjectyes
previous_periodobjectyes
site_idstringyes
trendarrayyes

No examples provided.

list_sites ~164

List the sites this caller can analyze, in two groups. my_sites = the sites connected to the signed-in account (each with its display name + domain, so you can match phrases like "the production site" or "revenuescope.jp" without the user pasting a UUID); empty when the caller is not signed in. demo_sites = ready-made sample sites for trying RevenueScope before connecting your own — each is a fictional site with sample data, not a real customer. When signed in (OAuth), prefer my_sites and, if site_id is omitted, default analytics tools to the is_primary=true site. When NOT signed in, my_sites is empty: use a demo_sites site_id and tell the user the numbers come from a sample site, not their own.

Input schema present but exposes no named parameters.

NameTypeReqDescription
demo_sitesarrayyes
my_sitesarrayyes
notestringyes

No examples provided.

suggest_budget_allocation ~265

Return a proposed monthly budget split across paid ad channels (Google Ads / Meta / TikTok Ads / Yahoo! Ads / LINE Ads etc.). site_id is OPTIONAL when the request is OAuth-authenticated. Path B (ad spend connected — any channel with spend>0 in the period): weight = ROAS × (1 − saturation) where ROAS is RS-measured revenue ÷ spend (FD-030 A-1, same as the dashboard — NOT platform-reported conversion_value). saturation is not derived yet (W17+), so channels without it are weighted by ROAS alone with no efficiency cap — stated in limitations. Path A (no ad spend): RPS-weighted proportional split with explicit ±20-30% caveats and a connect_incentive_message. Default period for the underlying ROAS/RPS data is 30 days; pass period='today' / '7d' / '90d' or a raw day count (1-365) to override. LLMs should pass `assumptions`, `limitations`, and `connect_incentive_message` through verbatim — they are hardcoded honest axis.

NameTypeReqDescription
monthly_budget_jpynumberyes
period
site_idstring
NameTypeReqDescription
allocationarrayyes
assumptionsarrayyes
connect_incentive_messagestring|nullyes
expected_roas_currentnumber|nullyes
expected_roas_proposednumber|nullyes
expected_roas_uplift_pctnumber|nullyes
limitationsarrayyes
monthly_budget_jpynumberyes
next_actionstringyes
pathstringyes
site_idstringyes
unallocated_jpynumberyes

No examples provided.