Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,556Letters: 14Defects: 1,331counted 2 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:9f6c1ae916754fb57286c125a5e53fe7eff426dd309c359483f883dfc3fabf6f | sha256sum