Paste-your-data analytics: CSV profiling, A/B tests, correlation, growth. 4 of 7 free.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Run a two-proportion A/B significance test with a plain-language verdict. FREE. Typical input {"conversions_a": 120, "visitors_a": 2400, "conversions_b": 156, "visitors_b": 2380} returns {"rate_a_pct": 5.0, "rate_b_pct": 6.55, "relative_lift_pct": 31.1, "z_score": ..., "p_value": ..., "significant_at_95": true, "verdict": "B beats A — statistically significant"}. Use when exactly two variants each have a trial count and a conversion count. Not for continuous outcomes such as revenue per user, and not for three or more variants. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need visitors > 0 and 0 <= conversions <= visitors"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Visitors in variant A; must be at least 1.
Visitors in variant B; must be at least 1.
Conversions in variant A; 0 or more, at most visitors_a.
Conversions in variant B; 0 or more, at most visitors_b.
Run a two-proportion A/B significance test with a plain-language verdict. FREE. Typical input {"conversions_a": 120, "visitors_a": 2400, "conversions_b": 156, "visitors_b": 2380} returns {"rate_a_pct": 5.0, "rate_b_pct": 6.55, "relative_lift_pct": 31.1, "z_score": ..., "p_value": ..., "significant_at_95": true, "verdict": "B beats A — statistically significant"}. Use when exactly two variants each have a trial count and a conversion count. Not for continuous outcomes such as revenue per user, and not for three or more variants. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need visitors > 0 and 0 <= conversions <= visitors"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| visitors_a* | integer | Visitors in variant A; must be at least 1. |
| visitors_b* | integer | Visitors in variant B; must be at least 1. |
| conversions_a* | integer | Conversions in variant A; 0 or more, at most visitors_a. |
| conversions_b* | integer | Conversions in variant B; 0 or more, at most visitors_b. |
{
"type": "object",
"required": [
"conversions_a",
"visitors_a",
"conversions_b",
"visitors_b"
],
"properties": {
"visitors_a": {
"type": "integer",
"minimum": 1,
"description": "Visitors in variant A; must be at least 1."
},
"visitors_b": {
"type": "integer",
"minimum": 1,
"description": "Visitors in variant B; must be at least 1."
},
"conversions_a": {
"type": "integer",
"minimum": 0,
"description": "Conversions in variant A; 0 or more, at most\nvisitors_a."
},
"conversions_b": {
"type": "integer",
"minimum": 0,
"description": "Conversions in variant B; 0 or more, at most\nvisitors_b."
}
},
"additionalProperties": false
}Build a retention table and average curve from raw cohort counts. PREMIUM (license). Typical input {"cohorts": {"2026-01": [1000, 400, 300, 250]}} — index 0 is cohort size, each later index is users still active in that period — returns {"retention_table_pct": {"2026-01": [100.0, 40.0, 30.0, 25.0]}, "avg_curve_pct": [...], "reading": "..."}. Use when each cohort has counts per period since acquisition. Not for a one-pass funnel (funnel_report). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "cohort '<value>' must map to a list of numbers,"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| cohorts* | object | Mapping of cohort label to a list of counts, where counts[0] is the cohort size and counts[n] is users active in period n, e.g. {"2026-01": [1000, 400, 300]}. The first 24 cohorts are used. |
{
"type": "object",
"required": [
"cohorts"
],
"properties": {
"cohorts": {
"type": "object",
"description": "Mapping of cohort label to a list of counts, where\ncounts[0] is the cohort size and counts[n] is users active in\nperiod n, e.g. {\"2026-01\": [1000, 400, 300]}. The first 24\ncohorts are used.",
"additionalProperties": true
}
},
"additionalProperties": false
}Compute the Pearson correlation between two numeric series. FREE. Typical input {"x": [1, 2, 3, 4], "y": [2.1, 3.9, 6.2, 8.1]} returns {"pearson_r": 0.999, "r_squared": 0.998, "interpretation": "very strong positive correlation", "caution": "..."}. Use when two equal-length numeric series may move together. Reports association only, never causation. Not for a single series over time (growth_rates). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need two equal-length series of 3+ values"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| x* | array | First numeric series; at least 3 values, same length as y. |
| y* | array | Second numeric series; at least 3 values, same length as x. |
{
"type": "object",
"required": [
"x",
"y"
],
"properties": {
"x": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 3,
"description": "First numeric series; at least 3 values, same length as y."
},
"y": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 3,
"description": "Second numeric series; at least 3 values, same length as x."
}
},
"additionalProperties": false
}Profile pasted CSV data column by column with data-quality flags. FREE. Reports per-column type, null rate, unique count, numeric stats (min/mean/max), and top values. Typical input {"csv_text": "name,age\nAda,36\nLin,29"} returns {"rows": 2, "columns": {"age": {"type": "numeric", "null_pct": 0.0, "unique": 2, "min": 29, ...}}, "quality_flags": ["..."], "note": "first 2000 rows profiled"}. Use as the first look at unfamiliar tabular data. Not for testing a hypothesis (ab_test, correlation) and not for time-ordered trends (growth_rates, forecast_trend). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "delimiter must be a single character, e.g. ',' or ';'"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| csv_text* | string | Raw CSV content including a header row, pasted as a single string; the first 2000 data rows are profiled. |
| delimiter | string | Field separator, exactly one character, e.g. "," or ";". Default ",". |
{
"type": "object",
"required": [
"csv_text"
],
"properties": {
"csv_text": {
"type": "string",
"description": "Raw CSV content including a header row, pasted as a\nsingle string; the first 2000 data rows are profiled."
},
"delimiter": {
"type": "string",
"default": ",",
"description": "Field separator, exactly one character, e.g. \",\" or \";\".\nDefault \",\"."
}
},
"additionalProperties": false
}Forecast future periods with a linear trend and honest fit quality. PREMIUM (license). For quick planning, not statistical modeling. Typical input {"values": [100, 120, 138, 161], "periods_ahead": 3} returns {"trend_per_period": 20.2, "r_squared": 0.998, "forecast": [180.9, 201.1, 221.3], "caveat": "..."}. Use when a series is roughly linear and fit quality matters as much as the projection. Not for seasonal or cyclical data, and not for measuring growth already observed (growth_rates). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need at least 4 historical values"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| values* | array | Ordered historical series, oldest first; at least 4 values. |
| periods_ahead | integer | How many future periods to forecast; values outside 1-12 are clamped. Default 3. |
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 4,
"description": "Ordered historical series, oldest first; at least 4 values."
},
"periods_ahead": {
"type": "integer",
"default": 3,
"description": "How many future periods to forecast; values outside\n1-12 are clamped. Default 3."
}
},
"additionalProperties": false
}Analyze a conversion funnel and find the biggest drop-off. PREMIUM (license). Typical input {"stages": {"Visited": 1000, "Signed up": 200, "Paid": 50}} returns {"steps": [{"from": "Visited", "to": "Signed up", "conversion_pct": 20.0, "lost": 800}, ...], "overall_conversion_pct": 5.0, "biggest_dropoff": {...}, "recommendation": "..."}. Use when stage counts descend through one funnel. Not for retention over time (cohort_retention) and not for two-variant comparisons (ab_test). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need at least 2 stages"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| stages* | object | Ordered mapping of stage name to count, top of funnel first; at least 2 stages with non-negative numeric values, e.g. {"Visited": 1000, "Signed up": 200}. |
{
"type": "object",
"required": [
"stages"
],
"properties": {
"stages": {
"type": "object",
"description": "Ordered mapping of stage name to count, top of funnel\nfirst; at least 2 stages with non-negative numeric values,\ne.g. {\"Visited\": 1000, \"Signed up\": 200}.",
"additionalProperties": true
}
},
"additionalProperties": false
}Compute period-over-period growth and CAGR for a numeric series. FREE. Typical input {"values": [1000, 1100, 1320]} returns {"period_over_period_pct": [10.0, 20.0], "total_change_pct": 32.0, "avg_growth_per_period_pct_cagr": 14.89}. Use when one series is already in period order. Not for comparing two variants (ab_test) and not for projecting future periods (forecast_trend). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need at least 2 values"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| values* | array | Ordered numeric series, oldest first, at least 2 values, e.g. monthly revenue [1000, 1100, 1320]. |
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2,
"description": "Ordered numeric series, oldest first, at least 2 values,\ne.g. monthly revenue [1000, 1100, 1320]."
}
},
"additionalProperties": false
}