BI for the agentic era.

Business users answer their own questions from dashboards and metrics your data team defines as YAML and reviews in pull requests. It runs against your own warehouse, and agents query the same definitions over MCP.

We’ll email you once, when Cloud opens.

agent · sqldash mcp --all
> how did revenue do by region last month?
query_metric name payments/revenue · dimensions [region] start -30d · compare previous_period
us$1,284,900+14%
eu$612,4000%
apac$338,150+9%
US up 14%, EU flat, APAC up 9%.
> which channel drove signups this week?
query_metric name growth/signups · dimensions [channel] start -7d · compare previous_period
organic4,182+22%
paid1,905-3%
referral774+4%
Organic carried it, up 22% on last week.
> is our error rate up today?
query_metric name ops/error_rate · grain hour start today
13:000.42%
14:001.24%
15:000.33%
It spiked at 14:00 and has been normal since.
The Revenue overview dashboard in sqldash: revenue, orders, average order value and customer tiles, a revenue trajectory, revenue by category and channel, a product table, and an orders-by-weekday chart
# commerce/revenue.yaml
title: Revenue overview

filters:
  - {name: dates, type: daterange}
  - {name: region, type: select}
  - {name: channel, type: select}

tiles:
  - metric: revenue
    compare: previous_period
  # added from + Explore
  - title: Orders by weekday
    query: orders_by_weekday
    chart: bar
AI Studio

Point. Ask. Make it yours.

Pin a request onto the tile it belongs to and send it to your coding agent. Claude Code, Codex, or your own headless entrypoint, running locally as you. The dashboard updates while you keep chatting.

Governance

Defined as code.

Dashboards, metrics, agents, even the theme. An agent can draft any of them and none of it can quietly change what revenue means, because the edit arrives as a pull request. sqldash lint runs in CI and your coworker approves it.

Your warehouse

Your credentials stay where they are.

Passwords and tokens come from environment variables, or from a named profile each teammate keeps on their own machine, the way AWS profiles work. The YAML you commit holds a reference, never a secret.

One flat mapping per source, with the same keys for every engine. Snowflake, BigQuery, Databricks, Redshift, Athena, Postgres, MySQL, SQL Server, Trino, ClickHouse, DuckDB, and SQLite all configure the same way, and anything else connects with a URL.

source:
  type: snowflake
  account: acme-prod
  warehouse: WH
  database: ANALYTICS
  schema: PUBLIC
  username: ${env:SNOWFLAKE_USER}
  authentication: externalbrowser
source:
  type: bigquery
  project: acme-analytics
  schema: warehouse
source:
  type: databricks
  host: dbc-1234.cloud.databricks.com
  http_path: /sql/1.0/warehouses/abc123
  catalog: main
  schema: analytics
  token: ${env:DATABRICKS_TOKEN}
source:
  type: postgres
  host: db.internal
  port: 5432
  database: analytics
  schema: public
  username: ${env:PGUSER}
  password: ${env:PGPASSWORD}
# every .csv and .parquet next to the dashboard,
# as a view named after the file. Nothing to connect.
source: {type: duckdb, attach_files: true}
# whatever SQLAlchemy can reach, Oracle included
source:
  url: oracle+oracledb://analyst:${env:ORACLE_PASSWORD}@db.internal:1521/?service_name=ANALYTICS

Nothing to deploy

sqldash serve runs on your laptop. No cluster to run, no build step, and no account to create.

Everyone connects as themselves

Credentials come from ${env:VAR} or a per-user profile file, so your warehouse stays the permission model.

Share without giving access

sqldash snapshot renders static pages anyone can open, with no credentials in the serving path.

All source options → Connect a warehouse → Snapshots →

Agents as code

Your metrics. Your agent. In your repo.

An agent's instructions, data tools, and evals live in agents.yaml, next to the metrics it reads. Register the repos it should see and sqldash mcp serves those and nothing else.

paymentsbilling service
├─ src/ ├─ .sqldash/ │ ├─ metrics.yaml │ └─ agents.yaml └─ README.md
$ sqldash repo add …/payments.git
growthmarketing analytics
├─ dbt/ ├─ .sqldash/ │ ├─ metrics.yaml │ └─ agents.yaml └─ README.md
$ sqldash repo add …/growth.git
opsplatform & infra
├─ terraform/ ├─ .sqldash/ │ ├─ metrics.yaml │ └─ agents.yaml └─ README.md
$ sqldash repo add …/ops.git
sqldash mcp --all
metrics + agent prompts
payments/finance_analyst growth/signups ops/error_rate
Any MCP client
Claude Codeclaude mcp add
Codexcodex mcp add
Cursor.cursor/mcp.json
Claude Desktopclaude_desktop_config.json
your own agentMCP SDK, stdio
coding agents and chat apps
$ claude mcp add sqldash -- sqldash mcp --all

Agents, tools, and evals →MCP reference →

No lock-in

Bring your existing BI.

Import the LookML and Snowflake semantic views you already have. Export your sqldash metrics back to LookML, a semantic view, or a Cortex Agent at any time, so trying sqldash never locks you in.

Your BI
LookML views
Snowflake semantic view
~/acme/analytics
$ sqldash import lookml views/
Back out
LookML
Snowflake semantic view
Cortex Agent

LookML & Cortex →

Next to dbt Charts

Where revenue gets defined.

dbt Labs released dbt Charts in September 2026, and it shares a lot with sqldash. Both keep dashboards as YAML in git and run SQL against your own warehouse. The difference that matters most is where a number is defined.

dbt Chartscharts/revenue.yml
queries:
  revenue: |
    SELECT
      DATE_TRUNC('month', day) AS month,
      SUM(amount) AS revenue
    FROM {{ ref('orders') }}
    GROUP BY 1charts:
  revenue:
    type: line
    query: revenue
    x: month
    y: revenue

The board carries its own SQL, so every board that shows revenue writes it again. Semantic Layer support is planned.

sqldash.sqldash/revenue.yaml
tiles:
  - metric: revenue
    chart: line
metrics:
  revenue:
    table: orders
    expr: SUM(amount)
    time_dimension:
      name: day
      grain: month

The tile names a metric. Every tile, CLI query, and agent over MCP gets its SQL from this one definition.

Reach for dbt Charts for

  • maps, histograms, and 13 composed shapes on top of 16 chart types
  • PDF, SVG, and PNG renders straight from the CLI
  • a VS Code extension and a playground in the browser
  • boards that read your dbt models through ref()
  • hosted sharing, in public beta on dbtCharts.com

Reach for sqldash for

  • governed metrics that agents query over MCP instead of raw SQL
  • a browser and a coding agent that edit the YAML for you
  • LookML and Snowflake semantic views, imported and exported
  • several repos served as one workspace, with or without dbt
  • a repo that takes pull requests

The full side by side → As of September 2026

Get started

Two minutes to your first dashboard.

Start with the DuckDB demo, no credentials needed. When you're ready, sqldash setup connects your warehouse using a local credential profile.

terminal
$ uv tool install sqldash
Installed 1 executable: sqldash
$ sqldash init --demo
created .sqldash/demo.yaml
created .sqldash/metrics.yaml
created .sqldash/agents.yaml
created .sqldash/data/orders.csv
$ sqldash serve
sqldash serving ~/shop at http://127.0.0.1:8400

Prefer not to install it? uvx sqldash init --demo and uvx sqldash serve run it from uv’s cache, and uv fetches Python 3.11 or newer if you need it.

To let your coding agent in, add it once. In Codex run codex mcp add sqldash -- uvx sqldash mcp ., in Claude Code claude mcp add sqldash -- uvx sqldash mcp ., and see MCP for other clients.

Send us a note

×

Questions, feedback, or a warehouse you want supported. It goes straight to our inbox.