Moltline Data Desk

Paste-your-data analytics: CSV profiling, A/B tests, correlation, growth. 4 of 7 free.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,667Tokens (tool definitions)
~1.2 KBTypical response size
Significant attention impact (2.08% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "data": {
      "url": "https://mcp.moltlinestudio.com/data"
    }
  }
}

Remote endpoints

https://mcp.moltlinestudio.com/datastreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢csv_profile(csv_text, delimiter)

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.

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
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢ab_test(conversions_a, visitors_a, conversions_b, 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.

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
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢correlation(x, y)

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.

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
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢growth_rates(values)

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.

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
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢funnel_report(stages)

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.

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
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢cohort_retention(cohorts)

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.

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
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢forecast_trend(values, periods_ahead)

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.

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
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
verifiedversion not recorded7 tools