{"name":"com.moltlinestudio/data","slug":"moltlinestudio-data","title":"Moltline Data Desk","description":"Paste-your-data analytics: CSV profiling, A/B tests, correlation, growth. 4 of 7 free.","url":"https://mcp.market/server/moltlinestudio-data","rating":null,"grade":"B","score":77,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-19T15:00:29.000Z","license":"MIT"},"uptime":{"percent":100,"checks":3,"ok":3,"last_checked_at":"2026-09-20T03:21:08.392Z","last_ok_at":"2026-09-20T03:21:08.392Z","latency_ms":128},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/GarphenGate/moltline-mcp","website":"https://moltlinestudio.com/servers.html#data","version":"1.2.0","remotes":[{"type":"streamable-http","url":"https://mcp.moltlinestudio.com/data"}],"packages":[],"tools":[{"name":"ab_test","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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"conversions_a":{"minimum":0,"type":"integer","description":"Conversions in variant A; 0 or more, at most\nvisitors_a."},"visitors_a":{"minimum":1,"type":"integer","description":"Visitors in variant A; must be at least 1."},"conversions_b":{"minimum":0,"type":"integer","description":"Conversions in variant B; 0 or more, at most\nvisitors_b."},"visitors_b":{"minimum":1,"type":"integer","description":"Visitors in variant B; must be at least 1."}},"required":["conversions_a","visitors_a","conversions_b","visitors_b"],"additionalProperties":false}},{"name":"cohort_retention","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cohorts":{"additionalProperties":true,"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."}},"required":["cohorts"],"additionalProperties":false}},{"name":"correlation","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"x":{"items":{"type":"number"},"minItems":3,"type":"array","description":"First numeric series; at least 3 values, same length as y."},"y":{"items":{"type":"number"},"minItems":3,"type":"array","description":"Second numeric series; at least 3 values, same length as x."}},"required":["x","y"],"additionalProperties":false}},{"name":"csv_profile","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":{"default":",","type":"string","description":"Field separator, exactly one character, e.g. \",\" or \";\".\nDefault \",\"."}},"required":["csv_text"],"additionalProperties":false}},{"name":"forecast_trend","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"values":{"items":{"type":"number"},"minItems":4,"type":"array","description":"Ordered historical series, oldest first; at least 4 values."},"periods_ahead":{"default":3,"type":"integer","description":"How many future periods to forecast; values outside\n1-12 are clamped. Default 3."}},"required":["values"],"additionalProperties":false}},{"name":"funnel_report","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"stages":{"additionalProperties":true,"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}."}},"required":["stages"],"additionalProperties":false}},{"name":"growth_rates","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"values":{"items":{"type":"number"},"minItems":2,"type":"array","description":"Ordered numeric series, oldest first, at least 2 values,\ne.g. monthly revenue [1000, 1100, 1320]."}},"required":["values"],"additionalProperties":false}}],"scan":{"score":77,"grade":"B","scanned_at":"2026-09-20T00:23:56.284Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:23:56.283Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 373ms"]},"poisoning":{"score":15,"max":15,"notes":["7 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 1 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":5,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://mcp.moltlinestudio.com/data","reachable":true,"authRequired":false,"latencyMs":373,"serverInfo":{"name":"moltline-data","version":"1.1.0"}}],"packages":[],"repo":{"found":true,"owner":"GarphenGate","repo":"moltline-mcp","archived":false,"pushedAt":"2026-09-19T15:00:29Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/316633241?v=4","ownerCreatedAt":"2026-08-13T15:17:26Z","license":"MIT"},"icon":{"url":"https://moltlinestudio.com/icon-192.png","source":"registry","width":192,"height":192},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-19T15:00:29.000Z","score":23}}}},"grade_history":[],"reviews":[]}