Server definition
- Hash
- sha256:9b91308abb29e72c93e80090e1cf499714c4b6c0edb87295191b0f787632b65a
- What it is
- What a remote MCP server returned when asked what it offers: 26 tools
The blob, as servednamed by its sha256
{
"instructions": "clariBI MCP Server: analytics for your business data. Unauthenticated users can call register_account, verify_email, and check_pricing. Authenticated users can list dashboards, run analyses, and generate reports. See https://claribi.com/app/developer-portal for docs.",
"tools": [
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"handoff_id": {
"description": "The id returned by request_oauth_integration_url.",
"format": "uuid",
"type": "string"
}
},
"required": [
"handoff_id"
],
"type": "object"
},
"name": "check_integration_status",
"outputSchema": {
"properties": {
"completed_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"connection_id": {
"type": [
"string",
"null"
]
},
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"data_source_id": {
"description": "The created data source, present once status is \"connected\".",
"type": [
"string",
"null"
]
},
"error": {
"description": "Failure reason when status is \"failed\".",
"type": [
"string",
"null"
]
},
"handoff_id": {
"format": "uuid",
"type": "string"
},
"integration_type": {
"type": "string"
},
"provider": {
"type": "string"
},
"status": {
"description": "One of pending, connected, failed, expired.",
"type": "string"
}
},
"required": [
"handoff_id",
"provider",
"integration_type",
"status"
],
"type": "object"
}
},
{
"description": "List clariBI subscription tiers with prices, AI credits, data source limits, user limits, and headline features. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"tier": {
"description": "Optional. Return only this tier (free, trial, lite, starter, professional, enterprise).",
"type": "string"
}
},
"type": "object"
},
"name": "check_pricing",
"outputSchema": {
"properties": {
"billing_url": {
"format": "uri",
"type": "string"
},
"currency": {
"description": "ISO currency code, always \"USD\".",
"type": "string"
},
"tiers": {
"items": {
"properties": {
"ai_credits": {
"type": "integer"
},
"data_sources": {
"type": "integer"
},
"duration_days": {
"description": "Trial length in days; 0 for paid tiers.",
"type": "integer"
},
"headline_features": {
"items": {
"type": "string"
},
"type": "array"
},
"id": {
"type": "string"
},
"max_users": {
"type": "integer"
},
"name": {
"description": "Display name of the tier.",
"type": "string"
},
"price_monthly_usd": {
"type": "number"
},
"price_yearly_usd": {
"type": "number"
},
"storage_gb": {
"type": "number"
}
},
"required": [
"id",
"name",
"price_monthly_usd",
"price_yearly_usd"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"currency",
"tiers",
"billing_url"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"billing_period": {
"default": "monthly",
"description": "Billing cadence for the checkout. Defaults to monthly.",
"enum": [
"monthly",
"yearly"
],
"type": "string"
},
"tier": {
"description": "Target subscription tier.",
"enum": [
"starter",
"professional",
"enterprise"
],
"type": "string"
}
},
"required": [
"tier"
],
"type": "object"
},
"name": "create_checkout_session",
"outputSchema": {
"properties": {
"billing_period": {
"description": "monthly or yearly.",
"type": "string"
},
"checkout_url": {
"description": "Stripe Checkout URL. Open in a browser to complete payment.",
"format": "uri",
"type": "string"
},
"session_id": {
"description": "Stripe Checkout Session id.",
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"checkout_url",
"session_id",
"tier",
"billing_period"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"aggregation": {
"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).",
"enum": [
"auto",
"sum",
"mean",
"last",
"max"
],
"type": "string"
},
"description": {
"maxLength": 5000,
"type": "string"
},
"granularity": {
"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.",
"enum": [
"hourly",
"daily",
"weekly",
"monthly",
"quarterly",
"annual"
],
"type": "string"
},
"horizon_days": {
"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.",
"maximum": 168,
"minimum": 1,
"type": "integer"
},
"include_anomalies": {
"default": true,
"type": "boolean"
},
"include_changepoints": {
"default": true,
"type": "boolean"
},
"include_correlations": {
"default": true,
"type": "boolean"
},
"method_override": {
"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.",
"maxLength": 40,
"type": "string"
},
"metric_path": {
"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\".",
"type": "string"
},
"name": {
"maxLength": 255,
"minLength": 1,
"type": "string"
},
"narration_enabled": {
"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.",
"type": "boolean"
},
"non_negative": {
"description": "When true, point + lower band clamped at zero. Omit to let the engine heuristic decide (via non_negative_auto=true).",
"type": "boolean"
},
"non_negative_auto": {
"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.",
"type": "boolean"
},
"schedule_day_of_month": {
"maximum": 31,
"minimum": 1,
"type": "integer"
},
"schedule_day_of_week": {
"maximum": 6,
"minimum": 0,
"type": "integer"
},
"schedule_frequency": {
"default": "monthly",
"description": "How often the forecast re-runs. Manual schedules only run when called explicitly via run_forecast.",
"enum": [
"daily",
"weekly",
"monthly",
"manual"
],
"type": "string"
},
"source_id": {
"description": "UUID of the report, dashboard, goal, or data source.",
"type": "string"
},
"source_type": {
"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.",
"enum": [
"report",
"dashboard",
"goal",
"data_source"
],
"type": "string"
},
"transform": {
"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.",
"enum": [
"auto",
"none",
"log"
],
"type": "string"
}
},
"required": [
"name",
"source_type",
"source_id",
"metric_path"
],
"type": "object"
},
"name": "create_forecast",
"outputSchema": {
"properties": {
"granularity": {
"type": "string"
},
"horizon_days": {
"type": "integer"
},
"id": {
"format": "uuid",
"type": "string"
},
"metric_label": {
"type": "string"
},
"name": {
"type": "string"
},
"next_run_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"schedule_frequency": {
"type": "string"
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"name",
"horizon_days",
"web_url"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"data_source_ids": {
"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.",
"items": {
"format": "uuid",
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"question": {
"description": "Optional focus for the report, e.g. \"paid acquisition in Q3\".",
"maxLength": 2000,
"type": "string"
},
"template_id": {
"description": "ID or slug of a report template (see the template list in the web app).",
"minLength": 2,
"type": "string"
}
},
"required": [
"template_id"
],
"type": "object"
},
"name": "generate_report",
"outputSchema": {
"properties": {
"job_id": {
"type": "string"
},
"status": {
"description": "\"queued\" once generation has started.",
"type": "string"
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"job_id",
"status"
],
"type": "object"
}
},
{
"description": "Check the status of a previously-dispatched run_analysis job. Returns the analysis result if completed.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"job_id": {
"description": "job_id returned by a prior run_analysis call.",
"format": "uuid",
"type": "string"
}
},
"required": [
"job_id"
],
"type": "object"
},
"name": "get_analysis_status",
"outputSchema": {
"properties": {
"current_step": {
"type": "string"
},
"error": {
"description": "Failure reason. Present when status is \"failed\".",
"type": "string"
},
"job_id": {
"format": "uuid",
"type": "string"
},
"progress": {
"description": "Completion fraction or percentage reported by the job.",
"type": "number"
},
"result": {
"description": "Analysis envelope. Present when status is \"completed\".",
"type": "object"
},
"status": {
"type": "string"
}
},
"required": [
"job_id",
"status",
"current_step",
"progress"
],
"type": "object"
}
},
{
"description": "Get the organization's billing status — tier, renewal date, and upgrade options.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_billing_status",
"outputSchema": {
"properties": {
"billing_url": {
"format": "uri",
"type": "string"
},
"price_monthly_usd": {
"type": "number"
},
"price_yearly_usd": {
"type": "number"
},
"subscription_status": {
"type": "string"
},
"subscription_tier": {
"type": "string"
},
"trial_ends_at": {
"format": "date-time",
"type": [
"string",
"null"
]
}
},
"required": [
"subscription_tier",
"subscription_status",
"price_monthly_usd",
"price_yearly_usd",
"billing_url"
],
"type": "object"
}
},
{
"description": "Fetch one dashboard by ID. Includes widget definitions, the most recent refresh data, and the web URL.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dashboard_id": {
"description": "UUID of the dashboard to fetch.",
"format": "uuid",
"type": "string"
}
},
"required": [
"dashboard_id"
],
"type": "object"
},
"name": "get_dashboard",
"outputSchema": {
"properties": {
"analysis_metadata": {
"description": "AnalysisEngine envelope captured when the dashboard was created.",
"type": "object"
},
"configuration": {
"description": "Dashboard layout and widget configuration.",
"type": "object"
},
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"id": {
"format": "uuid",
"type": "string"
},
"is_public": {
"type": "boolean"
},
"last_refresh": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"description": "Dashboard lifecycle status.",
"type": "string"
},
"updated_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"name",
"status",
"web_url",
"is_public"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"data_source_id": {
"description": "UUID of the data source to fetch the schema for.",
"format": "uuid",
"type": "string"
}
},
"required": [
"data_source_id"
],
"type": "object"
},
"name": "get_data_source_schema",
"outputSchema": {
"properties": {
"id": {
"format": "uuid",
"type": "string"
},
"last_sync_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"schema": {
"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.",
"type": "object"
},
"source_type": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"id",
"name",
"source_type",
"status",
"schema"
],
"type": "object"
}
},
{
"description": "Fetch one forecast configuration by ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"forecast_id": {
"description": "UUID of the forecast to fetch.",
"format": "uuid",
"type": "string"
}
},
"required": [
"forecast_id"
],
"type": "object"
},
"name": "get_forecast",
"outputSchema": {
"properties": {
"aggregation": {
"description": "auto / sum / mean / last / max",
"type": "string"
},
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"granularity": {
"description": "One of: hourly, daily, weekly, monthly, quarterly, annual.",
"type": "string"
},
"horizon_days": {
"type": "integer"
},
"id": {
"format": "uuid",
"type": "string"
},
"include_anomalies": {
"type": "boolean"
},
"include_changepoints": {
"type": "boolean"
},
"include_correlations": {
"type": "boolean"
},
"is_active": {
"type": "boolean"
},
"latest_run_id": {
"format": "uuid",
"type": [
"string",
"null"
]
},
"latest_run_status": {
"description": "pending, running, completed, failed, refunded.",
"type": [
"string",
"null"
]
},
"method_override": {
"type": "string"
},
"metric_label": {
"type": "string"
},
"metric_path": {
"type": "string"
},
"name": {
"type": "string"
},
"narration_enabled": {
"type": "boolean"
},
"next_run_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"non_negative": {
"type": "boolean"
},
"non_negative_auto": {
"type": "boolean"
},
"schedule_frequency": {
"description": "daily, weekly, monthly, or manual.",
"type": [
"string",
"null"
]
},
"source_id": {
"type": "string"
},
"source_type": {
"description": "One of: report, dashboard, goal, data_source.",
"type": "string"
},
"transform": {
"description": "auto / none / log",
"type": "string"
},
"updated_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"name",
"source_type",
"metric_path",
"horizon_days",
"web_url"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"forecast_id": {
"format": "uuid",
"type": "string"
},
"run_id": {
"description": "UUID of the run. Pass 'latest' to fetch the most recent run for the forecast.",
"format": "uuid",
"type": "string"
}
},
"required": [
"forecast_id",
"run_id"
],
"type": "object"
},
"name": "get_forecast_run",
"outputSchema": {
"properties": {
"completed_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"credits_consumed": {
"type": "integer"
},
"credits_refunded": {
"type": "integer"
},
"duration_ms": {
"type": "integer"
},
"error_message": {
"type": "string"
},
"forecast_id": {
"format": "uuid",
"type": "string"
},
"id": {
"format": "uuid",
"type": "string"
},
"narration": {
"description": "Peer of result.narration for convenience. Null when the run pre-dates narration OR was gated out (insufficient credits, org disabled, etc.).",
"type": [
"object",
"null"
]
},
"result": {
"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.",
"type": "object"
},
"status": {
"type": "string"
},
"trigger": {
"type": "string"
}
},
"required": [
"id",
"forecast_id",
"status"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"forecast_id": {
"format": "uuid",
"type": "string"
}
},
"required": [
"forecast_id"
],
"type": "object"
},
"name": "get_forecast_trust",
"outputSchema": {
"properties": {
"runs": {
"description": "Per-past-run accuracy ordered oldest-first. Each row compares one prior run's forecast against actuals that have since materialized.",
"items": {
"properties": {
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"horizon": {
"type": "integer"
},
"method": {
"type": [
"string",
"null"
]
},
"observed_count": {
"description": "How many of the forecast points now have an actual observation to compare against.",
"type": "integer"
},
"run_id": {
"format": "uuid",
"type": "string"
},
"smape_actual": {
"description": "sMAPE between the run's forecast and what actually happened. Lower is better; [0, 200].",
"type": "number"
},
"smape_backtest": {
"description": "The run's own backtest sMAPE at the time it was generated. Compare against actual to spot drift over time.",
"type": "number"
}
},
"type": "object"
},
"type": "array"
}
},
"required": [
"runs"
],
"type": "object"
}
},
{
"description": "Fetch one generated report by ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"report_id": {
"description": "UUID of the report to fetch.",
"format": "uuid",
"type": "string"
}
},
"required": [
"report_id"
],
"type": "object"
},
"name": "get_report",
"outputSchema": {
"properties": {
"completed_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"data_quality_metrics": {
"description": "Per-source data-quality stats captured at generation time.",
"type": "object"
},
"description": {
"type": "string"
},
"download_url": {
"description": "Present only once status is \"completed\".",
"type": [
"string",
"null"
]
},
"id": {
"format": "uuid",
"type": "string"
},
"insights": {
"description": "Narrative insight blocks, when generated.",
"type": "object"
},
"output_file_path": {
"type": "string"
},
"output_format": {
"type": "string"
},
"report_period_end": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"report_period_start": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"status": {
"type": "string"
},
"title": {
"type": "string"
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"title",
"status",
"web_url"
],
"type": "object"
}
},
{
"description": "Get the organization's current AI credit usage, data source count, user count, and rate-limit headroom.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_usage",
"outputSchema": {
"properties": {
"ai_credits_limit": {
"type": "integer"
},
"ai_credits_remaining": {
"type": "integer"
},
"ai_credits_used": {
"type": "integer"
},
"data_sources_limit": {
"type": "integer"
},
"data_sources_used": {
"type": "integer"
},
"max_users": {
"type": "integer"
},
"storage_gb_limit": {
"type": "number"
},
"subscription_status": {
"type": "string"
},
"subscription_tier": {
"type": "string"
},
"trial_ends_at": {
"format": "date-time",
"type": [
"string",
"null"
]
}
},
"required": [
"subscription_tier",
"subscription_status",
"ai_credits_used",
"ai_credits_limit",
"ai_credits_remaining"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"description": {
"description": "Optional human note stored on the data source.",
"maxLength": 1000,
"type": "string"
},
"format": {
"description": "Optional format hint. If omitted, the server infers it from the Content-Type header and URL extension.",
"enum": [
"csv",
"tsv",
"json",
"xlsx",
"xls",
"txt",
"pdf"
],
"type": "string"
},
"name": {
"description": "Display name for the new data source.",
"maxLength": 200,
"minLength": 2,
"type": "string"
},
"url": {
"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.",
"type": "string"
},
"wait_seconds": {
"default": 0,
"description": "Seconds to block waiting for preprocessing before returning. 0 returns immediately.",
"maximum": 60,
"minimum": 0,
"type": "integer"
}
},
"required": [
"name",
"url"
],
"type": "object"
},
"name": "ingest_url_data_source",
"outputSchema": {
"properties": {
"bytes_fetched": {
"type": "integer"
},
"data_source_id": {
"format": "uuid",
"type": "string"
},
"format": {
"description": "Detected file format (csv, json, xlsx, ...).",
"type": "string"
},
"name": {
"type": "string"
},
"raw_data_id": {
"type": "string"
},
"status": {
"description": "Preprocessing status. Poll get_data_source_schema until \"active\".",
"type": "string"
},
"web_url": {
"format": "uri",
"type": [
"string",
"null"
]
}
},
"required": [
"data_source_id",
"raw_data_id",
"name",
"format",
"status",
"bytes_fetched"
],
"type": "object"
}
},
{
"description": "List dashboards in your clariBI organization. Returns id, name, status, last refresh, and a URL you can open in a browser.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 20,
"description": "Page size (1–100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Row offset for pagination.",
"minimum": 0,
"type": "integer"
},
"search": {
"description": "Optional substring match against dashboard name.",
"type": "string"
}
},
"type": "object"
},
"name": "list_dashboards",
"outputSchema": {
"properties": {
"items": {
"items": {
"properties": {
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"id": {
"format": "uuid",
"type": "string"
},
"is_public": {
"type": "boolean"
},
"last_refresh": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"description": "Dashboard lifecycle status.",
"type": "string"
},
"updated_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"name",
"status",
"web_url",
"is_public"
],
"type": "object"
},
"type": "array"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"total": {
"description": "Total dashboards matching the query.",
"type": "integer"
}
},
"required": [
"total",
"offset",
"limit",
"items"
],
"type": "object"
}
},
{
"description": "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).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 50,
"description": "Page size (1-100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Row offset for pagination.",
"minimum": 0,
"type": "integer"
},
"source_type": {
"description": "Filter by source_type (csv, postgresql, google_ads, meta_ads, jira, mcp, …).",
"type": "string"
}
},
"type": "object"
},
"name": "list_data_sources",
"outputSchema": {
"properties": {
"items": {
"items": {
"properties": {
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"id": {
"format": "uuid",
"type": "string"
},
"last_sync_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"row_count": {
"description": "Row count when preprocessing recorded one, else null.",
"type": [
"integer",
"null"
]
},
"source_type": {
"type": "string"
},
"status": {
"description": "Sync/preprocessing status.",
"type": "string"
}
},
"required": [
"id",
"name",
"source_type",
"status"
],
"type": "object"
},
"type": "array"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"total": {
"description": "Total data sources matching the query.",
"type": "integer"
}
},
"required": [
"total",
"offset",
"limit",
"items"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"is_active": {
"description": "Filter by active forecasts. Omit to include both active and paused.",
"type": "boolean"
},
"limit": {
"default": 20,
"description": "Page size (1-100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Row offset for pagination.",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_forecasts",
"outputSchema": {
"properties": {
"items": {
"items": {
"properties": {
"aggregation": {
"description": "auto / sum / mean / last / max",
"type": "string"
},
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"granularity": {
"description": "One of: hourly, daily, weekly, monthly, quarterly, annual.",
"type": "string"
},
"horizon_days": {
"type": "integer"
},
"id": {
"format": "uuid",
"type": "string"
},
"is_active": {
"type": "boolean"
},
"latest_run_id": {
"format": "uuid",
"type": [
"string",
"null"
]
},
"latest_run_status": {
"description": "pending, running, completed, failed, refunded.",
"type": [
"string",
"null"
]
},
"method_override": {
"type": "string"
},
"metric_label": {
"type": "string"
},
"metric_path": {
"type": "string"
},
"name": {
"type": "string"
},
"narration_enabled": {
"type": "boolean"
},
"next_run_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"non_negative": {
"type": "boolean"
},
"non_negative_auto": {
"type": "boolean"
},
"schedule_frequency": {
"description": "daily, weekly, monthly, or manual.",
"type": [
"string",
"null"
]
},
"source_id": {
"type": "string"
},
"source_type": {
"description": "One of: report, dashboard, goal, data_source.",
"type": "string"
},
"transform": {
"description": "auto / none / log",
"type": "string"
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"name",
"source_type",
"metric_path",
"horizon_days",
"web_url"
],
"type": "object"
},
"type": "array"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"total": {
"type": "integer"
}
},
"required": [
"total",
"offset",
"limit",
"items"
],
"type": "object"
}
},
{
"description": "List generated reports in your clariBI organization. Returns id, title, status, output format, and download URL.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 20,
"description": "Page size (1-100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Row offset for pagination.",
"minimum": 0,
"type": "integer"
},
"status": {
"description": "Filter by status (pending, generating, completed, failed, cancelled).",
"type": "string"
}
},
"type": "object"
},
"name": "list_reports",
"outputSchema": {
"properties": {
"items": {
"items": {
"properties": {
"completed_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"created_at": {
"format": "date-time",
"type": [
"string",
"null"
]
},
"download_url": {
"description": "Present only once status is \"completed\".",
"type": [
"string",
"null"
]
},
"id": {
"format": "uuid",
"type": "string"
},
"output_format": {
"type": "string"
},
"status": {
"type": "string"
},
"title": {
"type": "string"
},
"web_url": {
"format": "uri",
"type": "string"
}
},
"required": [
"id",
"title",
"status",
"web_url"
],
"type": "object"
},
"type": "array"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"total": {
"description": "Total reports matching the query.",
"type": "integer"
}
},
"required": [
"total",
"offset",
"limit",
"items"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"forecast_id": {
"format": "uuid",
"type": "string"
},
"run_id": {
"description": "UUID of a COMPLETED run. Use get_forecast_run with run_id='latest' first if you want the most recent.",
"format": "uuid",
"type": "string"
}
},
"required": [
"forecast_id",
"run_id"
],
"type": "object"
},
"name": "regenerate_forecast_narrative",
"outputSchema": {
"properties": {
"narration": {
"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.",
"type": "object"
}
},
"required": [
"narration"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accept_terms": {
"description": "Must be true. By passing true the user agrees to https://claribi.com/terms and https://claribi.com/privacy.",
"type": "boolean"
},
"email": {
"description": "Work email for the new account.",
"format": "email",
"type": "string"
},
"first_name": {
"description": "User's first name (optional).",
"maxLength": 100,
"type": "string"
},
"last_name": {
"description": "User's last name (optional).",
"maxLength": 100,
"type": "string"
},
"organization_name": {
"description": "Display name for the organization workspace.",
"maxLength": 200,
"minLength": 2,
"type": "string"
}
},
"required": [
"email",
"organization_name",
"accept_terms"
],
"type": "object"
},
"name": "register_account",
"outputSchema": {
"properties": {
"email": {
"type": "string"
},
"expires_in_seconds": {
"type": "integer"
},
"next_step": {
"description": "Next tool to call: \"verify_email\" for a fresh signup, else \"check_inbox\".",
"type": "string"
},
"pending_id": {
"description": "Pass to verify_email. Null when no new registration was created.",
"type": [
"string",
"null"
]
}
},
"required": [
"pending_id",
"next_step",
"expires_in_seconds"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"integration_type": {
"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.",
"type": "string"
},
"provider": {
"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.",
"enum": [
"google",
"meta",
"jira",
"confluence"
],
"type": "string"
}
},
"required": [
"provider"
],
"type": "object"
},
"name": "request_oauth_integration_url",
"outputSchema": {
"properties": {
"authorize_url": {
"description": "Open in a browser to grant consent.",
"format": "uri",
"type": "string"
},
"expires_in_seconds": {
"type": "integer"
},
"handoff_id": {
"format": "uuid",
"type": "string"
},
"integration_type": {
"type": "string"
},
"next_step": {
"description": "Tool to call next, normally \"check_integration_status\".",
"type": "string"
},
"provider": {
"type": "string"
}
},
"required": [
"handoff_id",
"authorize_url",
"provider",
"integration_type",
"expires_in_seconds",
"next_step"
],
"type": "object"
}
},
{
"description": "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).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"question": {
"description": "Natural language question to analyze. E.g. \"What was revenue last quarter by region?\".",
"maxLength": 1000,
"minLength": 3,
"type": "string"
},
"session_id": {
"description": "Optional existing conversation session UUID.",
"type": "string"
},
"wait_seconds": {
"default": 30,
"description": "How long (seconds) to wait for the job to finish before returning a job_id for polling. 0 = always return immediately.",
"maximum": 60,
"minimum": 0,
"type": "integer"
}
},
"required": [
"question"
],
"type": "object"
},
"name": "run_analysis",
"outputSchema": {
"properties": {
"ai_credits_limit": {
"type": "integer"
},
"ai_credits_used": {
"type": "integer"
},
"job_id": {
"format": "uuid",
"type": "string"
},
"poll_url": {
"description": "Present when the job is still running. Poll get_analysis_status instead for structured progress.",
"format": "uri",
"type": "string"
},
"result": {
"description": "Analysis envelope (headline metric, chart data, follow-ups). Present when status is \"completed\".",
"type": "object"
},
"status": {
"description": "Job status, e.g. \"completed\", \"running\", \"queued\".",
"type": "string"
}
},
"required": [
"job_id",
"status"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"forecast_id": {
"format": "uuid",
"type": "string"
},
"wait_seconds": {
"default": 30,
"description": "Seconds to wait for the run to finish before returning a poll handle. 0 = return immediately with the run_id.",
"maximum": 60,
"minimum": 0,
"type": "integer"
}
},
"required": [
"forecast_id"
],
"type": "object"
},
"name": "run_forecast",
"outputSchema": {
"properties": {
"credits_consumed": {
"type": "integer"
},
"credits_refunded": {
"type": "integer"
},
"credits_reserved": {
"type": "integer"
},
"poll_tool": {
"description": "Tool to poll if the run is still running (\"get_forecast_run\").",
"type": "string"
},
"result": {
"description": "Present when status reaches \"completed\".",
"type": "object"
},
"run_id": {
"format": "uuid",
"type": "string"
},
"status": {
"description": "pending while queued, running mid-execution, completed/failed/refunded when terminal.",
"type": "string"
}
},
"required": [
"run_id",
"status"
],
"type": "object"
}
},
{
"description": "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).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"data_base64": {
"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.",
"type": "string"
},
"description": {
"description": "Optional human-readable description. Surfaces in the web app and in get_data_source_schema.",
"maxLength": 1000,
"type": "string"
},
"format": {
"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.",
"enum": [
"csv",
"tsv",
"json",
"xlsx",
"xls",
"txt",
"pdf"
],
"type": "string"
},
"name": {
"description": "Display name for the new data source. Shown in the web app and in subsequent list_data_sources calls.",
"maxLength": 200,
"minLength": 2,
"type": "string"
},
"wait_seconds": {
"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.",
"maximum": 60,
"minimum": 0,
"type": "integer"
}
},
"required": [
"name",
"format",
"data_base64"
],
"type": "object"
},
"name": "upload_data_source",
"outputSchema": {
"properties": {
"bytes_uploaded": {
"type": "integer"
},
"data_source_id": {
"format": "uuid",
"type": "string"
},
"format": {
"description": "Detected file format (csv, json, xlsx, ...).",
"type": "string"
},
"name": {
"type": "string"
},
"raw_data_id": {
"type": "string"
},
"status": {
"description": "Preprocessing status. Poll get_data_source_schema until \"active\".",
"type": "string"
},
"web_url": {
"format": "uri",
"type": [
"string",
"null"
]
}
},
"required": [
"data_source_id",
"raw_data_id",
"name",
"format",
"status",
"bytes_uploaded"
],
"type": "object"
}
},
{
"description": "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).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"code": {
"description": "6-digit verification code from the email.",
"pattern": "^[0-9]{6}$",
"type": "string"
},
"password": {
"description": "A password for the new account. Must be at least 8 characters and pass Django's standard validators.",
"minLength": 8,
"type": "string"
},
"pending_id": {
"description": "The pending_id returned by register_account.",
"format": "uuid",
"type": "string"
}
},
"required": [
"pending_id",
"code",
"password"
],
"type": "object"
},
"name": "verify_email",
"outputSchema": {
"properties": {
"access_token": {
"description": "OAuth bearer token for this conversation.",
"type": "string"
},
"expires_in": {
"description": "Access-token lifetime in seconds.",
"type": "integer"
},
"mcp_api_key": {
"description": "Long-lived API key (claribi_mcp_...) for persistent client config.",
"type": "string"
},
"mcp_api_key_id": {
"format": "uuid",
"type": "string"
},
"next_steps": {
"items": {
"type": "string"
},
"type": "array"
},
"organization_id": {
"type": "string"
},
"scope": {
"description": "Space-separated granted scopes.",
"type": "string"
},
"tier": {
"description": "New organization tier, always \"trial\".",
"type": "string"
},
"token_type": {
"description": "Always \"Bearer\".",
"type": "string"
},
"user_id": {
"type": "string"
}
},
"required": [
"access_token",
"token_type",
"expires_in",
"scope",
"mcp_api_key",
"mcp_api_key_id",
"user_id",
"organization_id",
"tier"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:9b91308abb29e72c93e80090e1cf499714c4b6c0edb87295191b0f787632b65a | sha256sum