Overview

Your data, working for your team and your AI — from one box.

System utilization

loading…

Recent questions from Claude & clients

loading…

Recent data refreshes

loading…

Sheets

Tables you keep by hand — promotions, events, costs. Your team can ask about them in Claude.

loading…

Sources

Connect databases and files, edit them inline, and preview their tables.

All sources

  • No sources yet — add your first database or file.

Add source

Datasets

Shape your sources into clean, refreshable data — and control the schedules that keep everything current.

Build a persistent dataset from one or more sources — your SQL creates the tables and views, published as a new queryable source with a guide, refreshed on a schedule and updated with no downtime.

Datasets

loading…

Add / edit dataset

Incremental refresh (advanced)

Refresh only a trailing time-window instead of a full rebuild (for growing time-series tables). The schedule above then runs incrementally; set a separate full-rebuild schedule for periodic compaction. JSON array — each entry: {"table","time_column","sql","window_minutes","retain_days"} where sql is a SELECT containing the {{since}} cutoff token.

Enumerate many per-entity tables in a source and UNION them into one table (e.g. ~5,600 <id>_temp_ip tables → one temperature), injecting the entity id from the table name and NULL-filling schema variance. Each entry: {"source_id","pattern","strip_suffix","entity_column","target","columns":[{"name","type"}],"time_column"?,"window_minutes"?,"retain_days"?,"changed_only"?}.

Recent builds

Select a dataset to see its build history.

A snapshot pulls source tables into an embedded engine, runs a read-only SQL transform, and writes a Parquet copy registered as a new queryable source — “save this query as a refreshable table.”

All snapshots

  • No snapshots yet — define one on the right.

Add / edit snapshot

Recent runs

Select a snapshot to see its run history.

Schedules

Every snapshot appears here with its cron schedule, state, and next run. Edits take effect immediately — no restart. Dataset schedules are set on each dataset in the Datasets tab. All times are UTC.

loading…

Agents

What your AI can do with this box — the tools you give it, and the capabilities Claude proposes for your review.

Author named, read-only, parameterized tools your AI agents (Claude, on-device models) can call directly — “is machine X’s temperature normal?” instead of free-form SQL. The box runs your SQL with the agent’s parameters safely bound, and returns the rows plus your interpretation note.

All tools

  • No tools yet — define one on the right.

Add / edit tool

Try result

Save a tool, then “Try it” to run it with sample parameters.

Curation drafts proposed by Claude over an admin Authoring link — datasets, agent tools, and source guides. Review each, edit if needed, then approve to apply it (or reject). Nothing goes live until you approve.

Pending proposals

loading…

Proposal

Select a proposal to review it.

Build progress

After approving a dataset, its build progress shows here.

Connectors

The access links people use from Claude, Excel, and other clients — who has one, what it can reach, and what it’s doing.

Connectors by person

Each connector belongs to one person and is either Business (only sources you’ve shared with business) or Full (every source, for engineers). Create one below the person’s name and hand them the link — for Claude, they paste it as a custom connector.

loading…

Invite in bulk

Paste email addresses, one per line — each person is created with one connector to hand out. Set a role per line with email, role (e.g. anna@acme.com, partner); otherwise the default below applies.

Recent questions & queries

The actual SQL each connector ran (newest first) — what an agent issued on the person’s behalf. The natural-language prompt is never sent to this box; this is the executed query. capped means the result hit the row limit.

loading…

Recent MCP calls

Every connector request labeled by its protocol method — initialize, tools/list, tools/call:<tool>, stream. An automation that handshakes on a timer but never reads data shows repeated initialize/tools/list and no tools/call:query — connection noise, not data access.

loading…

Recent connector activity

Every time a connector is used from Claude (MCP) or Excel/REST — newest first.

loading…

Invalid token attempts

Uses of an invalid or revoked connector token, with the client IP — newest first. Repeated hits from one IP are worth a look. (Failed dashboard sign-ins are on the People page.)

loading…

Requests by person

MCP + REST requests attributed to each connector’s owner, alongside the rows pulled in the last 7 days — the data-volume signal. A person flagged heavy has pulled an unusually large number of rows recently (possible bulk extraction). Cross-check with the Activity tab. All times UTC.

loading…

Requests by time of day (UTC)

loading…

People

Who can sign in to this dashboard, who holds connector access, and how you reach them.

Add a person

Two kinds of people: Dashboard users sign in here and need a password — an Admin runs the box, an Editor only maintains Sheets (for non-technical staff who keep a promotions or events calendar; they never see your databases). Connector users (Partner / Finance) never sign in — they only use a connector link from Claude or Excel, so no password is needed. Create and manage everyone’s connectors on the Connectors page.

No sign-in — connector only

Dashboard users

Sign in to this dashboard — Admin (everything) or Editor (Sheets only). Changing someone’s role or resetting their password never touches their connector links; revoke those on the Connectors page.

loading…

Connector users

Connector access only — no sign-in. Partner / Finance. Their links live on the Connectors page.

loading…

Failed sign-ins

Rejected dashboard sign-ins, with the client IP — newest first. Repeated hits from one IP are worth a look. (Invalid connector-token attempts are on the Connectors → Activity tab; brute-force SSH against the server itself is blocked at the OS layer by fail2ban.)

loading…

Email people

Send a branded message (e.g. a welcome to executives) from this box — one email per recipient, so they never see each other.

Plain text — a blank line starts a new paragraph. It’s wrapped in the IOT Data Flow design when sent.

Help & how it fits together

What each section does, and the one simple flow behind all of them.

The big picture — five steps

Connect → Shape → Expose → Share → Govern. You connect your data, optionally reshape it, expose it to AI, share access with people, and operate it safely. That’s the whole product.

1. Connect your databases & files → Sources
2. Shape them into clean data (optional) → Datasets (datasets & snapshots, with their schedules)
3. Expose to AI — every source is queryable over the REST API and by Claude (MCP); add callable actions and review Claude’s own curation drafts under Agents
4. Share access — hand out scoped links and watch what they do → Connectors
5. Govern the humans — accounts, roles, sign-in security, outreach → People

Flow: Sources → Datasets → Agents → Connectors → People — the sidebar reads top to bottom as the product story.

⛁ Sources connect

Connect to your data: PostgreSQL/MySQL/MariaDB, DuckDB, Parquet files, or uploaded PDFs. Every source is read-only and instantly queryable by SQL, the REST API, and Claude. For a database with thousands of tables, set “Tables to expose” so only the ones you choose are advertised. Each source carries an MCP guide — the plain-language notes that tell agents which table answers which question.

Think of it as: the doorways to your raw data.

⚗ Datasets shape

Two ways to reshape data, side by side. Datasets build a persistent analytical store from one or more sources — your SQL creates tables and views, refreshed incrementally with no downtime (advanced, DuckDB-enabled boxes). Snapshots are lighter: a read-only transform written to a Parquet copy — “save this query as a refreshable table.” Every schedule that keeps them fresh is controlled right here. All times UTC.

Think of it as: the workshop, with its own timetable.

⚒ Agents expose

Tools are named, read-only, parameterized actions your AI agents call directly — e.g. “is machine X’s temperature normal?” — instead of writing SQL. Parameter values are safely bound (never injected); results come back with your interpretation note. Proposals is where drafts authored by Claude over an Authoring link wait for your review — nothing goes live until you approve.

Think of it as: the buttons you give the AI — and its suggestion box.

⛓ Connectors share

The access links people paste into Claude, Excel, or scripts. Each belongs to one person and is scoped: Business (only sources you’ve shared) or Full (everything). Create them one at a time or in bulk, email links, and watch Activity (queries, MCP calls, invalid-token attempts) and Usage (volume per person, heavy-extraction flag).

Think of it as: who gets in, how much they see, and what they did.

⚙ People govern

The humans behind the access: dashboard users (Admin, or Editor for Sheets-only staff) who sign in here, connector users (Partner / Finance) who only hold links, failed sign-in monitoring, and branded email outreach from the box.

Think of it as: the directory, the locks, and the mail room.

How agents see your data

Claude connects over MCP using a connector link. It automatically reads each source’s guide, lists tables, runs read-only SQL, and calls your Tools — all bounded by the connector’s scope. The same capabilities are on the REST API for scripts, Excel, and on-device models.

Curated views + guides answer “read a number”; Tools answer “make a judgment.”

Account

Your own sign-in.

Your password