MCP Server

ChurnLens

io.github.kindrat86/churnlens
Business & Operations Finance & Investing Public & reachable MCP 2026-07-28

What this MCP does

Calculates SaaS retention, churn, LTV, CAC payback, revenue concentration, zombie MRR, and an overall business-health score.

analyze_revenue_concentration
Assess customer concentration risk across a book of revenue using the Herfindahl-Hirschman Index (HHI), top-N share and whale detection. Answers the question every acquirer asks first: how much revenue walks out with one logo?
Input schema
{'type': 'object', 'required': ['customer_mrrs'], 'properties': {'top_n': {'type': 'number', 'description': 'How many top customers to aggregate for the top-N share. Default 5.'}, 'customer_mrrs': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Per-customer MRR values. Order does not matter.'}, 'whale_threshold_pct': {'type': 'number', 'description': 'Revenue share above which a customer counts as a whale. Default 25.'}}}
calculate_churn_rate
Calculate net revenue retention (NRR), gross revenue retention (GRR), revenue churn and implied customer lifetime from one period's MRR movements. Also reports the NRR-minus-GRR spread, which reveals how much churn is being masked by expansion revenue.
Input schema
{'type': 'object', 'required': ['starting_mrr'], 'properties': {'churned_mrr': {'type': 'number', 'description': 'MRR lost to full cancellations.'}, 'starting_mrr': {'type': 'number', 'description': 'MRR at the start of the period, in any single currency unit.'}, 'expansion_mrr': {'type': 'number', 'description': 'MRR gained from upgrades and expansion within the existing base. Excludes new customers.'}, 'contraction_mrr': {'type': 'number', 'description': 'MRR lost to downgrades (customer retained).'}}}
calculate_ltv
Calculate gross-margin-adjusted customer lifetime value, the LTV:CAC ratio and CAC payback in months. Omitting gross margin yields lifetime revenue rather than lifetime value — usually a third of the number.
Input schema
{'type': 'object', 'required': ['arpa', 'monthly_churn_rate_pct'], 'properties': {'cac': {'type': 'number', 'description': 'Customer acquisition cost. Optional — supply it to get the ratio and payback.'}, 'arpa': {'type': 'number', 'description': 'Average revenue per account, per month.'}, 'gross_margin_pct': {'type': 'number', 'description': 'Gross margin percentage. Defaults to 100, which gives lifetime revenue.'}, 'monthly_churn_rate_pct': {'type': 'number', 'description': 'Monthly churn, as a percentage.'}}}
detect_zombie_mrr
Identify dormant-but-paying accounts — revenue that still counts in MRR but whose customers have stopped showing up. Zombie revenue is one renewal notice from cancelling and is invisible to standard revenue dashboards.
Input schema
{'type': 'object', 'required': ['accounts'], 'properties': {'accounts': {'type': 'array', 'items': {'type': 'object', 'required': ['mrr', 'days_since_last_activity'], 'properties': {'mrr': {'type': 'number'}, 'customer': {'type': 'string'}, 'days_since_last_activity': {'type': 'number'}}}, 'description': 'One entry per paying account.'}, 'threshold_days': {'type': 'number', 'description': 'Days of inactivity before an account counts as dormant. Default 90.'}}}
get_scoring_bands
Return the scoring thresholds ChurnLens applies to NRR, revenue concentration and the composite health score. These are bands, not measured benchmark data — the sourced benchmark figures are cited at https://churnlens.site/benchmarks.
Input schema
{'type': 'object', 'properties': {'metric': {'enum': ['nrr', 'concentration', 'health'], 'type': 'string', 'description': "Which band set to return: 'nrr', 'concentration', 'health', or omit for all."}}}
score_saas_health
Score a SaaS business 0-100 across five dimensions — retention, growth, concentration, efficiency and durability — and return the composite. Every mapping is published, so the score can be reconstructed by hand.
Input schema
{'type': 'object', 'required': ['monthly_churn_rate_pct', 'nrr_pct', 'top_customer_share_pct', 'ltv_to_cac_ratio', 'annual_plan_share_pct'], 'properties': {'nrr_pct': {'type': 'number', 'description': 'Net revenue retention, as a percentage.'}, 'ltv_to_cac_ratio': {'type': 'number', 'description': 'Lifetime value divided by customer acquisition cost.'}, 'annual_plan_share_pct': {'type': 'number', 'description': 'Share of revenue on annual contracts, as a percentage.'}, 'monthly_churn_rate_pct': {'type': 'number', 'description': 'Monthly revenue churn, as a percentage (5 means 5%).'}, 'top_customer_share_pct': {'type': 'number', 'description': "Largest single customer's share of revenue, as a percentage."}}}
Added
get_scoring_bands
Sept. 17, 2026, 12:42 p.m.
Added
calculate_ltv
Sept. 17, 2026, 12:42 p.m.
Added
score_saas_health
Sept. 17, 2026, 12:42 p.m.
Added
detect_zombie_mrr
Sept. 17, 2026, 12:42 p.m.
Added
analyze_revenue_concentration
Sept. 17, 2026, 12:42 p.m.
Added
calculate_churn_rate
Sept. 17, 2026, 12:42 p.m.