revenuecat-charts-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@revenuecat-charts-mcpShow me my MRR trend for the last 3 months"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@stackcurious/revenuecat-charts-mcp
An MCP server that gives AI agents access to RevenueCat's Charts & Metrics API. Query MRR, churn, trial conversion, revenue, and 17 more subscription metrics — directly from Claude, Cursor, or any MCP client.
RevenueCat's official MCP server has 26 tools for project configuration. This server fills the gap: analytics.
Why
Your AI agent can configure RevenueCat projects via MCP. But it can't check if those changes are working. That's like giving an agent a steering wheel but no dashboard.
This server gives agents eyes on the data.
Related MCP server: Shopify Partner Agent
Tools
Tool | Description |
| Snapshot of MRR, active subs, trials, revenue, new customers, active users |
| Query any of 21 chart types with filters, segments, date ranges |
| Discover available filters, segments, and resolutions for a chart |
| Comprehensive health report: MRR + churn trend + trial conversion + signals |
| Compare any metric across two time periods with deltas and % changes |
Available Charts
actives · actives_movement · actives_new · arr · churn · cohort_explorer · conversion_to_paying · customers_new · customers_active · ltv_per_customer · ltv_per_paying_customer · mrr · mrr_movement · refund_rate · revenue · subscription_retention · subscription_status · trials · trials_movement · trials_new · trial_conversion_rate
Setup
1. Install
npm install -g @stackcurious/revenuecat-charts-mcp2. Configure your MCP client
Claude Code:
claude mcp add revenuecat-charts -- env REVENUECAT_API_KEY=sk_your_key_here npx @stackcurious/revenuecat-charts-mcpClaude Desktop / Cursor / Windsurf — add to your MCP config:
{
"mcpServers": {
"revenuecat-charts": {
"command": "npx",
"args": ["@stackcurious/revenuecat-charts-mcp"],
"env": {
"REVENUECAT_API_KEY": "sk_your_key_here"
}
}
}
}3. Use it
Ask your AI agent:
"Give me a health check on my subscription app"
"Show me my MRR trend for the last 3 months"
"Compare my churn rate this month vs last month"
"What's my trial conversion rate broken down by store?"
Example Output
Health Check
# Subscription Health Report
*Generated 2026-04-03*
## Current Snapshot
**MRR**: $4,555
**Active Subscriptions**: 2,534
**Active Trials**: 77
**Revenue (28d)**: $4,712
**New Customers (28d)**: 1,516
**Active Users (28d)**: 13,702
**ARPU**: $1.80/mo
**Trial Pipeline**: 2.9% of active base in trial
## Churn Trend (Monthly)
**Current**: 6.98%
**Prior month**: 6.67%
**Trend**: increasing
## Health Signals
- Churn between 5-10% — monitor closely
- Trial conversion 25-50% — room to optimize
- Strong acquisition — new customers > 10% of basePeriod Comparison
# MRR — Period Comparison
**Period A**: 2026-02-01 → 2026-02-28
**Period B**: 2026-03-01 → 2026-03-31
**MRR**: $4,561.94 → $4,541.72 (↓ 0.4%)Rate Limiting
The RevenueCat Charts API has a rate limit of ~5 requests/minute. This server includes built-in rate limiting with automatic queuing — you don't need to worry about it.
Requirements
Node.js 18+
A RevenueCat secret API key (
sk_...) with Charts & Metrics permissions
API Key
Get your API key from RevenueCat Dashboard → Project Settings → API Keys. Create a secret key with charts_metrics:overview:read and charts_metrics:charts:read permissions.
Built by
Q — an AI agent orchestration platform. This server was built as part of Q's application for RevenueCat's Agentic AI Advocate role.
License
MIT
Available Tools
5 toolsrc_compare_periodsA
Compare a metric across two time periods. Returns averages, totals, deltas, and percentage changes. Useful for month-over-month or year-over-year analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| chart_name | Yes | The chart/metric to compare | |
| period1_end | Yes | Period A end date (YYYY-MM-DD) | |
| period2_end | Yes | Period B end date (YYYY-MM-DD) | |
| period1_start | Yes | Period A start date (YYYY-MM-DD) | |
| period2_start | Yes | Period B start date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of disclosing behavior. It does state the output types (averages, totals, deltas, percentage changes), which is useful, but it does not mention any limitations, date inclusivity rules, error behavior, or side effects. The description provides some transparency but not rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states the core action and scope; the second sentence adds output details and use cases. Each sentence earns its place and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficiently complete for a simple comparison tool: it clarifies the operation, the output types, and the primary use cases. Although there is no output schema, the description partially compensates by listing return values. It could additionally clarify period relationships or overlap constraints, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter, including the chart_name enum and date formats. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Compare') and resource ('a metric across two time periods'), making the tool's function immediately clear. It also names what the tool returns (averages, totals, deltas, percentage changes), distinguishing it from sibling tools like rc_get_chart and rc_get_overview, which do not focus on period-to-period comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for month-over-month or year-over-year analysis' gives an implied use case but does not explicitly state when to prefer this tool over siblings or when not to use it. No exclusions or clear alternative routing are provided, so an agent must infer the usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_get_chartB
Query time-series chart data from RevenueCat. Available charts: actives, actives_movement, actives_new, arr, churn, cohort_explorer, conversion_to_paying, customers_new, customers_active, ltv_per_customer, ltv_per_paying_customer, mrr, mrr_movement, refund_rate, revenue, subscription_retention, subscription_status, trials, trials_movement, trials_new, trial_conversion_rate. Returns data points with dates and values.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | JSON array of filters, e.g. [{"name":"store","values":["app_store"]}] | |
| segment | No | Dimension to segment by (use rc_get_chart_options to discover available segments) | |
| end_date | No | End date in ISO format (YYYY-MM-DD) | |
| chart_name | Yes | The chart to query | |
| resolution | No | Data resolution: day, week, month, quarter, year | |
| start_date | No | Start date in ISO format (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It honestly characterizes the action as 'Query' and describes the output, but it does not disclose authentication needs, rate limits, default behavior when optional parameters are omitted, or handling of invalid chart/filter/segment combinations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, and the second sentence adds the return shape. The long chart enumeration is justified because it defines the valid chart_name values in one place. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters and no output schea, the description gives a useful high-level summary but stops short of tool-level completeness. It does not specify the exact response structure beyond 'dates and values', nor does it clarify parameter interdependencies, such as which charts require filters, segments, or a date range, or what the default date window is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schea covers 100% of parameters with explicit descriptions, so the baseline is 3. The description adds no extra meaning to filters, segment, resolution, or dates; the chart list merely repeats the existing enum. The useful reference to rc_get_chart_options is already in the schea, not the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'Query time-series chart data from RevenueCat' with a specific verb and resource, enumerates all 21 available charts, and mentions the return shape ('data points with dates and values'). This clearly distinguishes it from siblings like rc_get_overview, rc_compare_periods, and rc_get_chart_options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this tool over alternatives or when not to use it. The only cross-reference, 'use rc_get_chart_options to discover available segments', appears in the schema for segment, not in the description, and addresses parameter discovery rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_get_chart_optionsA
Discover available filters, segments, and resolutions for a specific chart. Use this before querying a chart to understand what parameters are available.
| Name | Required | Description | Default |
|---|---|---|---|
| chart_name | Yes | The chart to get options for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavior burden and does make the non-mutating, discovery nature clear. However, it does not disclose the exact response shape, whether any filtering constraints apply, or possible error conditions, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action and resource front-loaded. The second sentence gives practical sequencing guidance without any filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter discovery tool, the description plus the enum schema gives an agent enough to invoke it correctly. The lack of an output schema is acceptable because the description states what will be learned; it only misses explicit context about how the returned options relate to other tool calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers chart_name fully with an enum of all valid chart values and a description ('The chart to get options for'). The description adds no new parameter-level meaning beyond tying the discovery intent to the chart parameter, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Discover') and names a concrete resource: available filters, segments, and resolutions for a specific chart. It clearly positions the tool as the pre-query discovery step, distinguishing it from sibling tools like rc_get_chart that actually query chart data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this before querying a chart, which is clear, actionable guidance. It does not name an alternative tool or provide when-not-to-use exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_get_overviewA
Get a snapshot of key subscription metrics: MRR, active subscriptions, trials, revenue, new customers, and active users.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Get a snapshot' reasonably implies a read-only, non-mutating operation, and the metric list clarifies what kind of data is returned. However, it does not disclose response structure, time range, or any other behavioral nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that leads with the action and then lists the exact metrics included. Every word is useful, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-annotion, no-output-schema tool, the description gives enough detail about what the overview includes. It could be richer about whether metrics are current values or time-bounded, but the term 'snapshot' partially covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the schema already fully covers the parameter surface. The description needs to add no parameter-level meaning, earning the baseline for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a snapshot of key subscription metrics and explicitly enumerates them (MRR, active subscriptions, trials, revenue, new customers, active users). This gives a specific verb and resource, though it does not explicitly contrast with sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'snapshot' wording implies this is for a high-level overview of current subscription health, but no explicit when-to-use or when-not-to-use guidance is provided. It does not mention alternatives like rc_get_chart or rc_compare_periods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_health_checkA
Generate a comprehensive subscription health report. Pulls MRR, churn, trial conversion, active subscribers, and more. Includes trend analysis and health signals.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It does disclose the read-oriented behavior ('Pulls MRR, churn...') and the analytical nature of the report. However, it does not explicitly state whether any data is modified, provide data-freshness caveats, or describe edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the primary action and report purpose, followed by supporting details. Every sentence adds meaningful information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless report-generation tool with no output schema, the description adequately conveys what the tool returns: key metrics, trend analysis, and health signals. It could be slightly stronger by noting how this report differs from the sibling overview/chart tools, but the core context for invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so the schema provides no parametr semantics. The description adds useful context about the report's contents, which is reasonable for a parameterless tool and meets the baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') and resource ('subscription health report'), and lists concrete metrics such as MRR, churn, trial conversion, and active subscribers. It is clear enough to distinguish from sibling tools, though the word 'comprehensive' is somewhat broad and could apply to rc_get_overview as well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus the sibling tools like rc_get_overview or rc_compare_periods. The description implies a broad reporting use case but does not explicitly name alternatives or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.0- First observed
rc_compare_periods - First observed
rc_get_chart - First observed
rc_get_chart_options - First observed
rc_get_overview - First observed
rc_health_check
TDQS
Scored across 5 tools
Most tools are distinct, but rc_get_overview and rc_health_check overlap significantly: both surface MRR, active subscribers, trials, and revenue. The descriptions help separate a quick snapshot from a comprehensive health report, but an agent could easily pick the wrong one for a simple metrics request.
Tools consistently use the rc_ prefix and snake_case, with clear verbs like get and compare. The pattern is mostly verb_noun, but rc_health_check is a noun phrase rather than verb_noun, and rc_get_chart_options / rc_get_chart are very similar in form, so minor inconsistency exists.
Five tools is well-scoped for a RevenueCat charting/analytics MCP server. Each tool serves a distinct purpose in the workflow: discover options, query charts, get overviews, compare periods, and generate health reports.
The tool surface covers the core charting and analytics needs: listing chart types, querying time-series data, discovering chart parameters, comparing periods, and getting health summaries. A minor gap is the lack of a dedicated tool for metadata like available metrics or chart lists, though this is partially embedded in rc_get_chart and rc_get_chart_options.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Analytics for MCP servers. Find out which of your tools agents get wrong. MCPulse shows you which tools AI agents retry, which come back empty, and which they never call at all. Two lines inside your own server. It never sees your arguments or your results. getmcpulse.com
Analytics your AI agent can actually use. Track, experiment, and optimize via MCP.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Analytics for MCP servers. Query your tool calls, first-call success, retries and schema cost.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceOpen-source MCP server for Claude AI that connects Stripe and Supabase to enable natural language SaaS analytics, including churn analysis, subscription tracking, and revenue insights.-
- AlicenseAqualityFmaintenanceFree, open-source MCP server that connects Claude to the Shopify Partner API. 25 tools for revenue analytics, churn analysis, retention cohorts, merchant health scoring, conversion funnels, revenue forecasting, and growth velocity.2513MIT
- AlicenseAqualityBmaintenanceMCP server that gives AI assistants real-time access to Stripe business metrics like MRR, churn, and revenue forecasts via natural language queries.7MIT
- FlicenseAqualityDmaintenanceMCP server for RevenueCat that lets AI agents query subscriber data, check entitlements, fetch offerings, and manage subscriptions via natural language.6-