{"name":"io.github.kindrat86/churnlens","slug":"kindrat86-churnlens","title":"ChurnLens","description":"Buyer-side SaaS due-diligence maths: NRR, GRR, revenue concentration, zombie MRR, LTV:CAC.","url":"https://mcp.market/server/kindrat86-churnlens","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":18,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-08-23T06:25:28.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T06:05:38.409Z","last_ok_at":"2026-11-04T06:05:38.409Z","latency_ms":201},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/kindrat86/churnlens-mcp","website":"https://churnlens.site","version":"1.0.1","remotes":[{"type":"streamable-http","url":"https://churnlens.site/api/mcp"}],"packages":[],"tools":[{"name":"analyze_revenue_concentration","description":"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?","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"customer_mrrs":{"type":"array","items":{"type":"number"},"description":"Per-customer MRR values. Order does not matter."},"top_n":{"type":"number","description":"How many top customers to aggregate for the top-N share. Default 5."},"whale_threshold_pct":{"type":"number","description":"Revenue share above which a customer counts as a whale. Default 25."}},"required":["customer_mrrs"]}},{"name":"calculate_churn_rate","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"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)."},"churned_mrr":{"type":"number","description":"MRR lost to full cancellations."}},"required":["starting_mrr"]}},{"name":"calculate_ltv","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"arpa":{"type":"number","description":"Average revenue per account, per month."},"monthly_churn_rate_pct":{"type":"number","description":"Monthly churn, as a percentage."},"gross_margin_pct":{"type":"number","description":"Gross margin percentage. Defaults to 100, which gives lifetime revenue."},"cac":{"type":"number","description":"Customer acquisition cost. Optional — supply it to get the ratio and payback."}},"required":["arpa","monthly_churn_rate_pct"]}},{"name":"detect_zombie_mrr","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"accounts":{"type":"array","description":"One entry per paying account.","items":{"type":"object","properties":{"customer":{"type":"string"},"mrr":{"type":"number"},"days_since_last_activity":{"type":"number"}},"required":["mrr","days_since_last_activity"]}},"threshold_days":{"type":"number","description":"Days of inactivity before an account counts as dormant. Default 90."}},"required":["accounts"]}},{"name":"get_scoring_bands","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"metric":{"type":"string","description":"Which band set to return: 'nrr', 'concentration', 'health', or omit for all.","enum":["nrr","concentration","health"]}}}},{"name":"score_saas_health","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"monthly_churn_rate_pct":{"type":"number","description":"Monthly revenue churn, as a percentage (5 means 5%)."},"nrr_pct":{"type":"number","description":"Net revenue retention, as a percentage."},"top_customer_share_pct":{"type":"number","description":"Largest single customer's share of revenue, 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."}},"required":["monthly_churn_rate_pct","nrr_pct","top_customer_share_pct","ltv_to_cac_ratio","annual_plan_share_pct"]}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-11-03T19:43:44.203Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-03T19:43:44.106Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 714ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":12,"max":15,"notes":["last push 73 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://churnlens.site/api/mcp","reachable":true,"authRequired":false,"latencyMs":714,"serverInfo":{"name":"churnlens-mcp","version":"2.0.0"}}],"packages":[],"repo":{"found":true,"owner":"kindrat86","repo":"churnlens-mcp","archived":false,"pushedAt":"2026-08-23T06:25:28Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/15490041?v=4","ownerCreatedAt":"2015-10-31T00:22:22Z","license":"MIT"},"icon":{"url":"https://churnlens.site/favicon.png","source":"registry","width":180,"height":180},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-08-23T06:25:28.000Z","score":18}}}},"grade_history":[],"reviews":[]}