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

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