clariBI

AI business intelligence: sign up, ingest data, run analyses, generate reports from any MCP client.

Should I use this

Quality & Safety

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~9,000Tokens (tool definitions)
~3.4 KBTypical response size
Significant attention impact (7.03% 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": {
    "mcp-server": {
      "url": "https://claribi.com/mcp/v1/"
    }
  }
}

Remote endpoints

https://claribi.com/mcp/v1/streamable-http
https://claribi.com/mcp/v1/ssesse

What it can do

Tool inventory

Tools (26)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢check_integration_status(handoff_id)

Poll an OAuth handoff initiated by request_oauth_integration_url. Returns the current status (pending, connected, failed, expired) and, when connected, the data_source_id you can pass to run_analysis.

Input Schema

{
  "type": "object",
  "properties": {
    "handoff_id": {
      "type": "string",
      "format": "uuid",
      "description": "The id returned by request_oauth_integration_url."
    }
  },
  "required": [
    "handoff_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "handoff_id": {
      "type": "string",
      "format": "uuid"
    },
    "provider": {
      "type": "string"
    },
    "integration_type": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "description": "One of pending, connected, failed, expired."
    },
    "created_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "completed_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "data_source_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "The created data source, present once status is \"connected\"."
    },
    "connection_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "error": {
      "type": [
        "string",
        "null"
      ],
      "description": "Failure reason when status is \"failed\"."
    }
  },
  "required": [
    "handoff_id",
    "provider",
    "integration_type",
    "status"
  ]
}
🟢check_pricing(tier)

List clariBI subscription tiers with prices, AI credits, data source limits, user limits, and headline features. No authentication required.

Input Schema

{
  "type": "object",
  "properties": {
    "tier": {
      "type": "string",
      "description": "Optional. Return only this tier (free, trial, lite, starter, professional, enterprise)."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "currency": {
      "type": "string",
      "description": "ISO currency code, always \"USD\"."
    },
    "tiers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "Display name of the tier."
          },
          "price_monthly_usd": {
            "type": "number"
          },
          "price_yearly_usd": {
            "type": "number"
          },
          "ai_credits": {
            "type": "integer"
          },
          "data_sources": {
            "type": "integer"
          },
          "max_users": {
            "type": "integer"
          },
          "storage_gb": {
            "type": "number"
          },
          "duration_days": {
            "type": "integer",
            "description": "Trial length in days; 0 for paid tiers."
          },
          "headline_features": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "name",
          "price_monthly_usd",
          "price_yearly_usd"
        ]
      }
    },
    "billing_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "currency",
    "tiers",
    "billing_url"
  ]
}
🟡create_checkout_session(tier, billing_period)

Create a Stripe Checkout URL the user can open in a browser to upgrade their clariBI subscription. Payment cannot happen inside the LLM; this tool returns a URL.

Input Schema

{
  "type": "object",
  "properties": {
    "tier": {
      "type": "string",
      "enum": [
        "starter",
        "professional",
        "enterprise"
      ],
      "description": "Target subscription tier."
    },
    "billing_period": {
      "type": "string",
      "enum": [
        "monthly",
        "yearly"
      ],
      "default": "monthly",
      "description": "Billing cadence for the checkout. Defaults to monthly."
    }
  },
  "required": [
    "tier"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "checkout_url": {
      "type": "string",
      "format": "uri",
      "description": "Stripe Checkout URL. Open in a browser to complete payment."
    },
    "session_id": {
      "type": "string",
      "description": "Stripe Checkout Session id."
    },
    "tier": {
      "type": "string"
    },
    "billing_period": {
      "type": "string",
      "description": "monthly or yearly."
    }
  },
  "required": [
    "checkout_url",
    "session_id",
    "tier",
    "billing_period"
  ]
}
🟡create_forecast(name, description, source_type, source_id, metric_path, ...)

Bind a forecast to a metric in your workspace. Stores the configuration, sets up the schedule, and resolves the source binding immediately so a bad source_id or metric_path errors out before any credits are spent. Run the forecast with run_forecast.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "description": {
      "type": "string",
      "maxLength": 5000
    },
    "source_type": {
      "type": "string",
      "enum": [
        "report",
        "dashboard",
        "goal",
        "data_source"
      ],
      "description": "Which clariBI artifact the metric lives on. Most callers should start with data_source for raw connector metrics or goal to forecast a tracked KPI."
    },
    "source_id": {
      "type": "string",
      "description": "UUID of the report, dashboard, goal, or data source."
    },
    "metric_path": {
      "type": "string",
      "description": "Dot-path to the numeric column. For data_source: the metric key (e.g. \"revenue\"). For goal: \"value\" or \"percentage\". For report: the path inside the insights JSON. For dashboard: \"widget_id:metric_name\"."
    },
    "granularity": {
      "type": "string",
      "enum": [
        "hourly",
        "daily",
        "weekly",
        "monthly",
        "quarterly",
        "annual"
      ],
      "default": "daily",
      "description": "Bucket size for the time series. Hourly requires an hourly data source; the engine refuses to fabricate hourly buckets from daily data."
    },
    "horizon_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 168,
      "default": 30,
      "description": "How many BUCKETS ahead to project. The per-granularity cap applies: hourly 168, daily 90, weekly 52, monthly 24, quarterly 8, annual 5. The field name is \"_days\" for backwards compatibility — it counts buckets of the chosen granularity."
    },
    "include_correlations": {
      "type": "boolean",
      "default": true
    },
    "include_anomalies": {
      "type": "boolean",
      "default": true
    },
    "include_changepoints": {
      "type": "boolean",
      "default": true
    },
    "narration_enabled": {
      "type": "boolean",
      "default": true,
      "description": "When true, every completed run gets an AI-generated narrative attached (summary, highlights, risks, recommendations, methodology). Costs 1-2 extra AI credits per run."
    },
    "aggregation": {
      "type": "string",
      "enum": [
        "auto",
        "sum",
        "mean",
        "last",
        "max"
      ],
      "default": "auto",
      "description": "How multiple raw points falling into the same bucket are combined. Auto picks sum for additive metrics, mean otherwise. Use Mean for rates (CTR, conversion, latency)."
    },
    "transform": {
      "type": "string",
      "enum": [
        "auto",
        "none",
        "log"
      ],
      "default": "auto",
      "description": "Series transform applied before fitting. Log helps revenue/traffic series with growing variance. Auto detects when log is beneficial; none forces raw scale."
    },
    "non_negative": {
      "type": "boolean",
      "description": "When true, point + lower band clamped at zero. Omit to let the engine heuristic decide (via non_negative_auto=true)."
    },
    "non_negative_auto": {
      "type": "boolean",
      "default": true,
      "description": "When true (default), the backend heuristic owns non_negative and re-evaluates per run based on the metric path. Set false alongside non_negative to lock the choice."
    },
    "method_override": {
      "type": "string",
      "maxLength": 40,
      "description": "Force a specific forecasting method instead of auto-selecting via walk-forward CV. Valid names: naive, seasonal_naive, moving_average, drift, linear_trend, ar_p, holt_winters, holt_winters_multiplicative, holt_winters_damped, theta, gradient_boost, ensemble_top3. Empty = auto."
    },
    "schedule_frequency": {
      "type": "string",
      "enum": [
        "daily",
        "weekly",
        "monthly",
        "manual"
      ],
      "default": "monthly",
      "description": "How often the forecast re-runs. Manual schedules only run when called explicitly via run_forecast."
    },
    "schedule_day_of_week": {
      "type": "integer",
      "minimum": 0,
      "maximum": 6
    },
    "schedule_day_of_month": {
      "type": "integer",
      "minimum": 1,
      "maximum": 31
    }
  },
  "required": [
    "name",
    "source_type",
    "source_id",
    "metric_path"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "metric_label": {
      "type": "string"
    },
    "horizon_days": {
      "type": "integer"
    },
    "granularity": {
      "type": "string"
    },
    "schedule_frequency": {
      "type": "string"
    },
    "next_run_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "web_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "id",
    "name",
    "horizon_days",
    "web_url"
  ]
}
🟢generate_report(template_id, data_source_ids, question)

Generate a written report from a report template and your data sources, in the background. Uses AI credits. Returns a job id: poll get_analysis_status until it completes; the result names the new report, which get_report returns.

Input Schema

{
  "type": "object",
  "properties": {
    "template_id": {
      "type": "string",
      "minLength": 2,
      "description": "ID or slug of a report template (see the template list in the web app)."
    },
    "data_source_ids": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid"
      },
      "maxItems": 5,
      "description": "Data sources to report on, most important first (from list_data_sources). Omit to use every active source in the organization, up to 5."
    },
    "question": {
      "type": "string",
      "maxLength": 2000,
      "description": "Optional focus for the report, e.g. \"paid acquisition in Q3\"."
    }
  },
  "required": [
    "template_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "description": "\"queued\" once generation has started."
    },
    "web_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "job_id",
    "status"
  ]
}
🟢get_analysis_status(job_id)

Check the status of a previously-dispatched run_analysis job. Returns the analysis result if completed.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "format": "uuid",
      "description": "job_id returned by a prior run_analysis call."
    }
  },
  "required": [
    "job_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "format": "uuid"
    },
    "status": {
      "type": "string"
    },
    "current_step": {
      "type": "string"
    },
    "progress": {
      "type": "number",
      "description": "Completion fraction or percentage reported by the job."
    },
    "result": {
      "type": "object",
      "description": "Analysis envelope. Present when status is \"completed\"."
    },
    "error": {
      "type": "string",
      "description": "Failure reason. Present when status is \"failed\"."
    }
  },
  "required": [
    "job_id",
    "status",
    "current_step",
    "progress"
  ]
}
🟢get_billing_status

Get the organization's billing status — tier, renewal date, and upgrade options.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "subscription_tier": {
      "type": "string"
    },
    "subscription_status": {
      "type": "string"
    },
    "price_monthly_usd": {
      "type": "number"
    },
    "price_yearly_usd": {
      "type": "number"
    },
    "trial_ends_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "billing_url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "subscription_tier",
    "subscription_status",
    "price_monthly_usd",
    "price_yearly_usd",
    "billing_url"
  ]
}
🟢get_dashboard(dashboard_id)

Fetch one dashboard by ID. Includes widget definitions, the most recent refresh data, and the web URL.

Input Schema

{
  "type": "object",
  "properties": {
    "dashboard_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of the dashboard to fetch."
    }
  },
  "required": [
    "dashboard_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "description": "Dashboard lifecycle status."
    },
    "created_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "updated_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "last_refresh": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "web_url": {
      "type": "string",
      "format": "uri"
    },
    "is_public": {
      "type": "boolean"
    },
    "description": {
      "type": "string"
    },
    "configuration": {
      "type": "object",
      "description": "Dashboard layout and widget configuration."
    },
    "analysis_metadata": {
      "type": "object",
      "description": "AnalysisEngine envelope captured when the dashboard was created."
    }
  },
  "required": [
    "id",
    "name",
    "status",
    "web_url",
    "is_public"
  ]
}
🟢get_data_source_schema(data_source_id)

Fetch the column schema for a data source. Useful before asking run_analysis about specific columns. The schema is derived from the preprocessing metadata clariBI extracted when the source was last synced. Poll this after upload_data_source / ingest_url_data_source until the returned status flips to "active" — that means preprocessing has finished and run_analysis will see the data.

Input Schema

{
  "type": "object",
  "properties": {
    "data_source_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of the data source to fetch the schema for."
    }
  },
  "required": [
    "data_source_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "source_type": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "schema": {
      "type": "object",
      "description": "Schema-shaped fields the preprocessing pipeline wrote into the source metadata (columns, column_types, sample_rows, row_count, ...). Empty until preprocessing has run or for source types with no column inventory."
    },
    "last_sync_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  },
  "required": [
    "id",
    "name",
    "source_type",
    "status",
    "schema"
  ]
}
🟢get_forecast(forecast_id)

Fetch one forecast configuration by ID.

Input Schema

{
  "type": "object",
  "properties": {
    "forecast_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of the forecast to fetch."
    }
  },
  "required": [
    "forecast_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "source_type": {
      "type": "string",
      "description": "One of: report, dashboard, goal, data_source."
    },
    "source_id": {
      "type": "string"
    },
    "metric_path": {
      "type": "string"
    },
    "metric_label": {
      "type": "string"
    },
    "granularity": {
      "type": "string",
      "description": "One of: hourly, daily, weekly, monthly, quarterly, annual."
    },
    "horizon_days": {
      "type": "integer"
    },
    "is_active": {
      "type": "boolean"
    },
    "created_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "web_url": {
      "type": "string",
      "format": "uri"
    },
    "schedule_frequency": {
      "type": [
        "string",
        "null"
      ],
      "description": "daily, weekly, monthly, or manual."
    },
    "next_run_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "latest_run_status": {
      "type": [
        "string",
        "null"
      ],
      "description": "pending, running, completed, failed, refunded."
    },
    "latest_run_id": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid"
    },
    "narration_enabled": {
      "type": "boolean"
    },
    "aggregation": {
      "type": "string",
      "description": "auto / sum / mean / last / max"
    },
    "transform": {
      "type": "string",
      "description": "auto / none / log"
    },
    "non_negative": {
      "type": "boolean"
    },
    "non_negative_auto": {
      "type": "boolean"
    },
    "method_override": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "include_correlations": {
      "type": "boolean"
    },
    "include_anomalies": {
      "type": "boolean"
    },
    "include_changepoints": {
      "type": "boolean"
    },
    "updated_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  },
  "required": [
    "id",
    "name",
    "source_type",
    "metric_path",
    "horizon_days",
    "web_url"
  ]
}
🟢get_forecast_run(forecast_id, run_id)

Fetch one run of a forecast by ID, or pass run_id="latest" for the most recent run. Returns the full forecast envelope: target series + 30-day projection, correlated drivers (with lag and bootstrap stability), anomalies, structural changes, and credit accounting.

Input Schema

{
  "type": "object",
  "properties": {
    "forecast_id": {
      "type": "string",
      "format": "uuid"
    },
    "run_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of the run. Pass 'latest' to fetch the most recent run for the forecast."
    }
  },
  "required": [
    "forecast_id",
    "run_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "forecast_id": {
      "type": "string",
      "format": "uuid"
    },
    "status": {
      "type": "string"
    },
    "trigger": {
      "type": "string"
    },
    "credits_consumed": {
      "type": "integer"
    },
    "credits_refunded": {
      "type": "integer"
    },
    "duration_ms": {
      "type": "integer"
    },
    "created_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "completed_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "error_message": {
      "type": "string"
    },
    "result": {
      "type": "object",
      "description": "Forecast envelope. Contains keys: target, correlations, anomalies, changepoints, meta, and (when narration ran) narration. `target` carries lower/upper plus calibrated lower_50/upper_50, lower_80/upper_80, lower_95/upper_95 bands, the winning method, exogenous_driver when a leading-indicator was used, ensemble_components when the ensemble method won, transform applied, and non_negative flag. See docs/MCP_SERVER.md for the shape."
    },
    "narration": {
      "type": [
        "object",
        "null"
      ],
      "description": "Peer of result.narration for convenience. Null when the run pre-dates narration OR was gated out (insufficient credits, org disabled, etc.)."
    }
  },
  "required": [
    "id",
    "forecast_id",
    "status"
  ]
}
🟢get_forecast_trust(forecast_id)

Returns per-past-run accuracy for a forecast. Each row compares a prior run's projection against the actuals that have materialized since. Use this to see whether your forecasts have been getting MORE or LESS accurate over time, or to spot when a backtest sMAPE was systematically optimistic vs. realised performance.

Input Schema

{
  "type": "object",
  "properties": {
    "forecast_id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "forecast_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "runs": {
      "type": "array",
      "description": "Per-past-run accuracy ordered oldest-first. Each row compares one prior run's forecast against actuals that have since materialized.",
      "items": {
        "type": "object",
        "properties": {
          "run_id": {
            "type": "string",
            "format": "uuid"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "method": {
            "type": [
              "string",
              "null"
            ]
          },
          "horizon": {
            "type": "integer"
          },
          "observed_count": {
            "type": "integer",
            "description": "How many of the forecast points now have an actual observation to compare against."
          },
          "smape_actual": {
            "type": "number",
            "description": "sMAPE between the run's forecast and what actually happened. Lower is better; [0, 200]."
          },
          "smape_backtest": {
            "type": "number",
            "description": "The run's own backtest sMAPE at the time it was generated. Compare against actual to spot drift over time."
          }
        }
      }
    }
  },
  "required": [
    "runs"
  ]
}
🟢get_report(report_id)

Fetch one generated report by ID.

Input Schema

{
  "type": "object",
  "properties": {
    "report_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of the report to fetch."
    }
  },
  "required": [
    "report_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "title": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "output_format": {
      "type": "string"
    },
    "created_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "completed_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "web_url": {
      "type": "string",
      "format": "uri"
    },
    "download_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "Present only once status is \"completed\"."
    },
    "description": {
      "type": "string"
    },
    "insights": {
      "type": "object",
      "description": "Narrative insight blocks, when generated."
    },
    "data_quality_metrics": {
      "type": "object",
      "description": "Per-source data-quality stats captured at generation time."
    },
    "report_period_start": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "report_period_end": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "output_file_path": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "title",
    "status",
    "web_url"
  ]
}
🟢get_usage

Get the organization's current AI credit usage, data source count, user count, and rate-limit headroom.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "subscription_tier": {
      "type": "string"
    },
    "subscription_status": {
      "type": "string"
    },
    "ai_credits_used": {
      "type": "integer"
    },
    "ai_credits_limit": {
      "type": "integer"
    },
    "ai_credits_remaining": {
      "type": "integer"
    },
    "data_sources_used": {
      "type": "integer"
    },
    "data_sources_limit": {
      "type": "integer"
    },
    "storage_gb_limit": {
      "type": "number"
    },
    "max_users": {
      "type": "integer"
    },
    "trial_ends_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  },
  "required": [
    "subscription_tier",
    "subscription_status",
    "ai_credits_used",
    "ai_credits_limit",
    "ai_credits_remaining"
  ]
}
🟡ingest_url_data_source(name, url, format, description, wait_seconds)

Create a new data source by fetching a public URL on the server side. Handles CSV, TSV, JSON, Excel, TXT, and PDF. Private networks (RFC 1918, loopback, cloud metadata) are blocked. Returns the data_source_id once preprocessing has started. Use this for files larger than the 25 MB inline upload cap.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Display name for the new data source."
    },
    "url": {
      "type": "string",
      "description": "Public http(s) URL of the file to ingest. The server fetches it once at call time; the URL is not re-fetched on subsequent analyses. Private networks (RFC 1918, loopback, link-local, cloud metadata) are blocked."
    },
    "format": {
      "type": "string",
      "enum": [
        "csv",
        "tsv",
        "json",
        "xlsx",
        "xls",
        "txt",
        "pdf"
      ],
      "description": "Optional format hint. If omitted, the server infers it from the Content-Type header and URL extension."
    },
    "description": {
      "type": "string",
      "maxLength": 1000,
      "description": "Optional human note stored on the data source."
    },
    "wait_seconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 60,
      "default": 0,
      "description": "Seconds to block waiting for preprocessing before returning. 0 returns immediately."
    }
  },
  "required": [
    "name",
    "url"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data_source_id": {
      "type": "string",
      "format": "uuid"
    },
    "raw_data_id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "description": "Detected file format (csv, json, xlsx, ...)."
    },
    "status": {
      "type": "string",
      "description": "Preprocessing status. Poll get_data_source_schema until \"active\"."
    },
    "bytes_fetched": {
      "type": "integer"
    },
    "web_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri"
    }
  },
  "required": [
    "data_source_id",
    "raw_data_id",
    "name",
    "format",
    "status",
    "bytes_fetched"
  ]
}
🟢list_dashboards(limit, offset, search)

List dashboards in your clariBI organization. Returns id, name, status, last refresh, and a URL you can open in a browser.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Page size (1–100)."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "description": "Row offset for pagination."
    },
    "search": {
      "type": "string",
      "description": "Optional substring match against dashboard name."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "total": {
      "type": "integer",
      "description": "Total dashboards matching the query."
    },
    "offset": {
      "type": "integer"
    },
    "limit": {
      "type": "integer"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "Dashboard lifecycle status."
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "last_refresh": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "web_url": {
            "type": "string",
            "format": "uri"
          },
          "is_public": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "status",
          "web_url",
          "is_public"
        ]
      }
    }
  },
  "required": [
    "total",
    "offset",
    "limit",
    "items"
  ]
}
🟢list_data_sources(limit, offset, source_type)

List the data sources connected to your clariBI organization. Returns id, name, source_type, status, last sync time, and the number of rows (when known).

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 50,
      "description": "Page size (1-100)."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "description": "Row offset for pagination."
    },
    "source_type": {
      "type": "string",
      "description": "Filter by source_type (csv, postgresql, google_ads, meta_ads, jira, mcp, …)."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "total": {
      "type": "integer",
      "description": "Total data sources matching the query."
    },
    "offset": {
      "type": "integer"
    },
    "limit": {
      "type": "integer"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "source_type": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "Sync/preprocessing status."
          },
          "last_sync_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "row_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Row count when preprocessing recorded one, else null."
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "name",
          "source_type",
          "status"
        ]
      }
    }
  },
  "required": [
    "total",
    "offset",
    "limit",
    "items"
  ]
}
🟢list_forecasts(limit, offset, is_active)

List metric forecasts in your clariBI organization. Each row covers one metric: its source binding, horizon, schedule, and the latest run status. Use get_forecast_run to fetch the full forecast result.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Page size (1-100)."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "description": "Row offset for pagination."
    },
    "is_active": {
      "type": "boolean",
      "description": "Filter by active forecasts. Omit to include both active and paused."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "total": {
      "type": "integer"
    },
    "offset": {
      "type": "integer"
    },
    "limit": {
      "type": "integer"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "source_type": {
            "type": "string",
            "description": "One of: report, dashboard, goal, data_source."
          },
          "source_id": {
            "type": "string"
          },
          "metric_path": {
            "type": "string"
          },
          "metric_label": {
            "type": "string"
          },
          "granularity": {
            "type": "string",
            "description": "One of: hourly, daily, weekly, monthly, quarterly, annual."
          },
          "horizon_days": {
            "type": "integer"
          },
          "is_active": {
            "type": "boolean"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "web_url": {
            "type": "string",
            "format": "uri"
          },
          "schedule_frequency": {
            "type": [
              "string",
              "null"
            ],
            "description": "daily, weekly, monthly, or manual."
          },
          "next_run_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "latest_run_status": {
            "type": [
              "string",
              "null"
            ],
            "description": "pending, running, completed, failed, refunded."
          },
          "latest_run_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "narration_enabled": {
            "type": "boolean"
          },
          "aggregation": {
            "type": "string",
            "description": "auto / sum / mean / last / max"
          },
          "transform": {
            "type": "string",
            "description": "auto / none / log"
          },
          "non_negative": {
            "type": "boolean"
          },
          "non_negative_auto": {
            "type": "boolean"
          },
          "method_override": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "source_type",
          "metric_path",
          "horizon_days",
          "web_url"
        ]
      }
    }
  },
  "required": [
    "total",
    "offset",
    "limit",
    "items"
  ]
}
🟢list_reports(limit, offset, status)

List generated reports in your clariBI organization. Returns id, title, status, output format, and download URL.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Page size (1-100)."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "description": "Row offset for pagination."
    },
    "status": {
      "type": "string",
      "description": "Filter by status (pending, generating, completed, failed, cancelled)."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "total": {
      "type": "integer",
      "description": "Total reports matching the query."
    },
    "offset": {
      "type": "integer"
    },
    "limit": {
      "type": "integer"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "output_format": {
            "type": "string"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "completed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "web_url": {
            "type": "string",
            "format": "uri"
          },
          "download_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Present only once status is \"completed\"."
          }
        },
        "required": [
          "id",
          "title",
          "status",
          "web_url"
        ]
      }
    }
  },
  "required": [
    "total",
    "offset",
    "limit",
    "items"
  ]
}
⚪regenerate_forecast_narrative(forecast_id, run_id)

Re-run ONLY the AI narration step against an existing completed forecast run. Costs 1-2 AI credits (no engine work). Returns the new narration; the old one is overwritten in the run record. Refuses when the run is not yet complete or when narration_enabled=false on the forecast.

Input Schema

{
  "type": "object",
  "properties": {
    "forecast_id": {
      "type": "string",
      "format": "uuid"
    },
    "run_id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID of a COMPLETED run. Use get_forecast_run with run_id='latest' first if you want the most recent."
    }
  },
  "required": [
    "forecast_id",
    "run_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "narration": {
      "type": "object",
      "description": "Narration payload (summary, highlights, risks, recommendations, methodology_note, credits_consumed, model_used, generated_at, fallback_reason). fallback_reason is null on success; one of 'insufficient_credits', 'llm_failed', 'disabled', 'org_disabled' when narration was skipped."
    }
  },
  "required": [
    "narration"
  ]
}
⚪register_account(email, organization_name, first_name, last_name, accept_terms)

Begin clariBI account signup. Validates the email + organization name, emails a 6-digit verification code, and returns a pending_id. Call verify_email(pending_id, code) within 10 minutes to finish signup and receive an API key.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email",
      "description": "Work email for the new account."
    },
    "organization_name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Display name for the organization workspace."
    },
    "first_name": {
      "type": "string",
      "maxLength": 100,
      "description": "User's first name (optional)."
    },
    "last_name": {
      "type": "string",
      "maxLength": 100,
      "description": "User's last name (optional)."
    },
    "accept_terms": {
      "type": "boolean",
      "description": "Must be true. By passing true the user agrees to https://claribi.com/terms and https://claribi.com/privacy."
    }
  },
  "required": [
    "email",
    "organization_name",
    "accept_terms"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "pending_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "Pass to verify_email. Null when no new registration was created."
    },
    "email": {
      "type": "string"
    },
    "expires_in_seconds": {
      "type": "integer"
    },
    "next_step": {
      "type": "string",
      "description": "Next tool to call: \"verify_email\" for a fresh signup, else \"check_inbox\"."
    }
  },
  "required": [
    "pending_id",
    "next_step",
    "expires_in_seconds"
  ]
}
🟢request_oauth_integration_url(provider, integration_type)

Initiate an OAuth handoff to a vendor integration (Google Ads, GA4, Search Console, Sheets, Drive, BigQuery, Meta Ads, Jira, Confluence). Returns an authorization URL the user opens in a browser. After the user clicks Allow, the connection is created and you can poll check_integration_status(handoff_id) to find out when the data is ready.

Input Schema

{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "enum": [
        "google",
        "meta",
        "jira",
        "confluence"
      ],
      "description": "OAuth provider to authorize. Currently supports the native-OAuth catalog: Google (Ads, Analytics 4, Search Console, Sheets, Drive, BigQuery), Meta Ads, and Atlassian Jira / Confluence."
    },
    "integration_type": {
      "type": "string",
      "description": "Per-provider sub-type. Google accepts google_ads, gsheets, ga4, gsc, gdrive, bigquery, gcs, gcp, basic. Meta accepts ads or basic. Jira and Confluence accept basic. Defaults to basic."
    }
  },
  "required": [
    "provider"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "handoff_id": {
      "type": "string",
      "format": "uuid"
    },
    "authorize_url": {
      "type": "string",
      "format": "uri",
      "description": "Open in a browser to grant consent."
    },
    "provider": {
      "type": "string"
    },
    "integration_type": {
      "type": "string"
    },
    "expires_in_seconds": {
      "type": "integer"
    },
    "next_step": {
      "type": "string",
      "description": "Tool to call next, normally \"check_integration_status\"."
    }
  },
  "required": [
    "handoff_id",
    "authorize_url",
    "provider",
    "integration_type",
    "expires_in_seconds",
    "next_step"
  ]
}
🟡run_analysis(question, session_id, wait_seconds)

Run a natural-language analytics question against your connected data sources. Consumes AI credits. Returns either the completed analysis result inline OR a job_id you can poll with get_analysis_status. If list_data_sources returns an empty list, ingest data first with upload_data_source (inline base64), ingest_url_data_source (public URL), or request_oauth_integration_url (Google / Meta / Jira / Confluence).

Input Schema

{
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "minLength": 3,
      "maxLength": 1000,
      "description": "Natural language question to analyze. E.g. \"What was revenue last quarter by region?\"."
    },
    "session_id": {
      "type": "string",
      "description": "Optional existing conversation session UUID."
    },
    "wait_seconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 60,
      "default": 30,
      "description": "How long (seconds) to wait for the job to finish before returning a job_id for polling. 0 = always return immediately."
    }
  },
  "required": [
    "question"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "format": "uuid"
    },
    "status": {
      "type": "string",
      "description": "Job status, e.g. \"completed\", \"running\", \"queued\"."
    },
    "result": {
      "type": "object",
      "description": "Analysis envelope (headline metric, chart data, follow-ups). Present when status is \"completed\"."
    },
    "ai_credits_used": {
      "type": "integer"
    },
    "ai_credits_limit": {
      "type": "integer"
    },
    "poll_url": {
      "type": "string",
      "format": "uri",
      "description": "Present when the job is still running. Poll get_analysis_status instead for structured progress."
    }
  },
  "required": [
    "job_id",
    "status"
  ]
}
🟢run_forecast(forecast_id, wait_seconds)

Run a forecast now. Reserves AI credits up front, dispatches the backtest + projection + correlation pipeline, and returns either the completed result inline (wait_seconds > 0 and the run finishes in time) or a run_id you can poll with get_forecast_run.

Input Schema

{
  "type": "object",
  "properties": {
    "forecast_id": {
      "type": "string",
      "format": "uuid"
    },
    "wait_seconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 60,
      "default": 30,
      "description": "Seconds to wait for the run to finish before returning a poll handle. 0 = return immediately with the run_id."
    }
  },
  "required": [
    "forecast_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "run_id": {
      "type": "string",
      "format": "uuid"
    },
    "status": {
      "type": "string",
      "description": "pending while queued, running mid-execution, completed/failed/refunded when terminal."
    },
    "credits_reserved": {
      "type": "integer"
    },
    "credits_consumed": {
      "type": "integer"
    },
    "credits_refunded": {
      "type": "integer"
    },
    "result": {
      "type": "object",
      "description": "Present when status reaches \"completed\"."
    },
    "poll_tool": {
      "type": "string",
      "description": "Tool to poll if the run is still running (\"get_forecast_run\")."
    }
  },
  "required": [
    "run_id",
    "status"
  ]
}
🟡upload_data_source(name, format, data_base64, description, wait_seconds)

Create a new data source from an inline base64-encoded file (CSV, TSV, JSON, Excel, TXT, PDF). The file goes through the same validation and preprocessing as a web upload. Returns the data_source_id you can pass to run_analysis as soon as preprocessing completes (poll get_data_source_schema for readiness or pass wait_seconds to block here).

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Display name for the new data source. Shown in the web app and in subsequent list_data_sources calls."
    },
    "format": {
      "type": "string",
      "enum": [
        "csv",
        "tsv",
        "json",
        "xlsx",
        "xls",
        "txt",
        "pdf"
      ],
      "description": "File format. Drives MIME detection and the preprocessing route inside clariBI. csv covers comma-separated; tsv is tab-separated; xlsx is modern Excel; json must be a top-level array of objects or a single object."
    },
    "data_base64": {
      "type": "string",
      "description": "Base64-encoded file contents. Maximum 25 MB encoded (~18 MB raw). For larger payloads, host the file at a public URL and use ingest_url_data_source."
    },
    "description": {
      "type": "string",
      "maxLength": 1000,
      "description": "Optional human-readable description. Surfaces in the web app and in get_data_source_schema."
    },
    "wait_seconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 60,
      "default": 0,
      "description": "How long (seconds) to wait for preprocessing to finish before returning. 0 returns immediately with status=\"preprocessing\"; the caller polls get_data_source_schema or list_data_sources."
    }
  },
  "required": [
    "name",
    "format",
    "data_base64"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data_source_id": {
      "type": "string",
      "format": "uuid"
    },
    "raw_data_id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "description": "Detected file format (csv, json, xlsx, ...)."
    },
    "status": {
      "type": "string",
      "description": "Preprocessing status. Poll get_data_source_schema until \"active\"."
    },
    "bytes_uploaded": {
      "type": "integer"
    },
    "web_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri"
    }
  },
  "required": [
    "data_source_id",
    "raw_data_id",
    "name",
    "format",
    "status",
    "bytes_uploaded"
  ]
}
⚪verify_email(pending_id, code, password)

Complete clariBI signup by submitting the verification code plus a password. Returns an OAuth access_token for immediate use AND a long-lived MCP API key for persistent configuration. The new organization lands on the Trial tier (50 AI credits, 14 days).

Input Schema

{
  "type": "object",
  "properties": {
    "pending_id": {
      "type": "string",
      "format": "uuid",
      "description": "The pending_id returned by register_account."
    },
    "code": {
      "type": "string",
      "pattern": "^[0-9]{6}$",
      "description": "6-digit verification code from the email."
    },
    "password": {
      "type": "string",
      "minLength": 8,
      "description": "A password for the new account. Must be at least 8 characters and pass Django's standard validators."
    }
  },
  "required": [
    "pending_id",
    "code",
    "password"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "access_token": {
      "type": "string",
      "description": "OAuth bearer token for this conversation."
    },
    "token_type": {
      "type": "string",
      "description": "Always \"Bearer\"."
    },
    "expires_in": {
      "type": "integer",
      "description": "Access-token lifetime in seconds."
    },
    "scope": {
      "type": "string",
      "description": "Space-separated granted scopes."
    },
    "mcp_api_key": {
      "type": "string",
      "description": "Long-lived API key (claribi_mcp_...) for persistent client config."
    },
    "mcp_api_key_id": {
      "type": "string",
      "format": "uuid"
    },
    "user_id": {
      "type": "string"
    },
    "organization_id": {
      "type": "string"
    },
    "tier": {
      "type": "string",
      "description": "New organization tier, always \"trial\"."
    },
    "next_steps": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "access_token",
    "token_type",
    "expires_in",
    "scope",
    "mcp_api_key",
    "mcp_api_key_id",
    "user_id",
    "organization_id",
    "tier"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded26 tools
verifiedversion not recorded26 tools
failed observationversion not recorded—
verifiedversion not recorded26 tools
failed observationversion not recorded—
verifiedversion not recorded26 tools
failed observationversion not recorded—
verifiedversion not recorded26 tools
failed observationversion not recorded—
verifiedversion not recorded26 tools