Server definition
- Hash
- sha256:9f6c1ae916754fb57286c125a5e53fe7eff426dd309c359483f883dfc3fabf6f
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": "Moltline Data Desk: paste-your-data analytics. Free: csv_profile, ab_test, correlation, growth_rates. Premium (license): funnel_report, cohort_retention, forecast_trend.",
"tools": [
{
"description": "Run a two-proportion A/B significance test with a plain-language verdict. FREE.\n\nTypical input {\"conversions_a\": 120, \"visitors_a\": 2400,\n\"conversions_b\": 156, \"visitors_b\": 2380} returns {\"rate_a_pct\": 5.0,\n\"rate_b_pct\": 6.55, \"relative_lift_pct\": 31.1, \"z_score\": ...,\n\"p_value\": ..., \"significant_at_95\": true, \"verdict\": \"B beats A —\nstatistically significant\"}.\n\nUse when exactly two variants each have a trial count and a conversion\ncount. Not for continuous outcomes such as revenue per user, and not for\nthree 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"conversions_a": {
"description": "Conversions in variant A; 0 or more, at most\nvisitors_a.",
"minimum": 0,
"type": "integer"
},
"conversions_b": {
"description": "Conversions in variant B; 0 or more, at most\nvisitors_b.",
"minimum": 0,
"type": "integer"
},
"visitors_a": {
"description": "Visitors in variant A; must be at least 1.",
"minimum": 1,
"type": "integer"
},
"visitors_b": {
"description": "Visitors in variant B; must be at least 1.",
"minimum": 1,
"type": "integer"
}
},
"required": [
"conversions_a",
"visitors_a",
"conversions_b",
"visitors_b"
],
"type": "object"
},
"name": "ab_test",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Build a retention table and average curve from raw cohort counts. PREMIUM (license).\n\nTypical input {\"cohorts\": {\"2026-01\": [1000, 400, 300, 250]}} — index 0\nis cohort size, each later index is users still active in that period —\nreturns {\"retention_table_pct\": {\"2026-01\": [100.0, 40.0, 30.0, 25.0]},\n\"avg_curve_pct\": [...], \"reading\": \"...\"}.\n\nUse when each cohort has counts per period since acquisition. Not for a\none-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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cohorts": {
"additionalProperties": true,
"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.",
"type": "object"
}
},
"required": [
"cohorts"
],
"type": "object"
},
"name": "cohort_retention",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Compute the Pearson correlation between two numeric series. FREE.\n\nTypical input {\"x\": [1, 2, 3, 4], \"y\": [2.1, 3.9, 6.2, 8.1]} returns\n{\"pearson_r\": 0.999, \"r_squared\": 0.998, \"interpretation\": \"very strong\npositive correlation\", \"caution\": \"...\"}.\n\nUse when two equal-length numeric series may move together. Reports\nassociation only, never causation. Not for a single series over time\n(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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"x": {
"description": "First numeric series; at least 3 values, same length as y.",
"items": {
"type": "number"
},
"minItems": 3,
"type": "array"
},
"y": {
"description": "Second numeric series; at least 3 values, same length as x.",
"items": {
"type": "number"
},
"minItems": 3,
"type": "array"
}
},
"required": [
"x",
"y"
],
"type": "object"
},
"name": "correlation",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Profile pasted CSV data column by column with data-quality flags. FREE.\n\nReports per-column type, null rate, unique count, numeric stats\n(min/mean/max), and top values. Typical input {\"csv_text\":\n\"name,age\\nAda,36\\nLin,29\"} returns {\"rows\": 2, \"columns\": {\"age\":\n{\"type\": \"numeric\", \"null_pct\": 0.0, \"unique\": 2, \"min\": 29, ...}},\n\"quality_flags\": [\"...\"], \"note\": \"first 2000 rows profiled\"}.\n\nUse as the first look at unfamiliar tabular data. Not for testing a\nhypothesis (ab_test, correlation) and not for time-ordered trends\n(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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"csv_text": {
"description": "Raw CSV content including a header row, pasted as a\nsingle string; the first 2000 data rows are profiled.",
"type": "string"
},
"delimiter": {
"default": ",",
"description": "Field separator, exactly one character, e.g. \",\" or \";\".\nDefault \",\".",
"type": "string"
}
},
"required": [
"csv_text"
],
"type": "object"
},
"name": "csv_profile",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Forecast future periods with a linear trend and honest fit quality. PREMIUM (license).\n\nFor quick planning, not statistical modeling. Typical input {\"values\":\n[100, 120, 138, 161], \"periods_ahead\": 3} returns {\"trend_per_period\":\n20.2, \"r_squared\": 0.998, \"forecast\": [180.9, 201.1, 221.3],\n\"caveat\": \"...\"}.\n\nUse when a series is roughly linear and fit quality matters as much as the\nprojection. Not for seasonal or cyclical data, and not for measuring\ngrowth 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"periods_ahead": {
"default": 3,
"description": "How many future periods to forecast; values outside\n1-12 are clamped. Default 3.",
"type": "integer"
},
"values": {
"description": "Ordered historical series, oldest first; at least 4 values.",
"items": {
"type": "number"
},
"minItems": 4,
"type": "array"
}
},
"required": [
"values"
],
"type": "object"
},
"name": "forecast_trend",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Analyze a conversion funnel and find the biggest drop-off. PREMIUM (license).\n\nTypical input {\"stages\": {\"Visited\": 1000, \"Signed up\": 200, \"Paid\":\n50}} returns {\"steps\": [{\"from\": \"Visited\", \"to\": \"Signed up\",\n\"conversion_pct\": 20.0, \"lost\": 800}, ...], \"overall_conversion_pct\":\n5.0, \"biggest_dropoff\": {...}, \"recommendation\": \"...\"}.\n\nUse when stage counts descend through one funnel. Not for retention over\ntime (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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"stages": {
"additionalProperties": true,
"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}.",
"type": "object"
}
},
"required": [
"stages"
],
"type": "object"
},
"name": "funnel_report",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Compute period-over-period growth and CAGR for a numeric series. FREE.\n\nTypical input {\"values\": [1000, 1100, 1320]} returns\n{\"period_over_period_pct\": [10.0, 20.0], \"total_change_pct\": 32.0,\n\"avg_growth_per_period_pct_cagr\": 14.89}.\n\nUse when one series is already in period order. Not for comparing two\nvariants (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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"values": {
"description": "Ordered numeric series, oldest first, at least 2 values,\ne.g. monthly revenue [1000, 1100, 1320].",
"items": {
"type": "number"
},
"minItems": 2,
"type": "array"
}
},
"required": [
"values"
],
"type": "object"
},
"name": "growth_rates",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:9f6c1ae916754fb57286c125a5e53fe7eff426dd309c359483f883dfc3fabf6f | sha256sum