fastdata
v0.3.2
Published
Data self-service for everyone: ask your database questions in plain language. A Claude agent reads your knowledge base, writes read-only SQL, runs it through your own connector (Postgres, MySQL, SQLite, any MCP SQL server), and answers in Markdown.
Downloads
996
Maintainers
Readme
fastdata
Data self-service: chat with your database in plain language. Ask a question; a Claude agent reads your knowledge base (glossary, metrics, table notes, verified examples), writes the SQL, runs it read-only through a connector you control, and answers in Markdown: the result, a short analysis, its assumptions and the exact query.
No connector? fastdata writes the SQL, you run it wherever you like, paste the results back, and it analyzes them.
$ fastdata ask "Which 3 countries brought the most revenue last year?"
· Reading INDEX.md
· Reading metrics/revenue.md
▶ Running: Revenue by country for calendar 2025
In 2025, **Italy** brought in the most revenue at **€17,558**, followed by Turkey (€13,626) …Documentation: fastdata.run
Installation
macOS and Linux:
curl -fsSL https://fastdata.run/install.sh | shThe script installs into ~/.fastdata without sudo. It uses your Node when it is 22.13 or newer,
otherwise it downloads Node 24 there, and adds ~/.fastdata/bin to your PATH. Rerun it to update;
rm -rf ~/.fastdata uninstalls.
With npm (any OS, Node 22.13+):
npm install -g fastdataBoth install the fastdata command and the short aliases fdata and fada. Check with
fastdata --version.
fastdata uses Claude: a logged-in Claude Code on the machine works as is, otherwise set
ANTHROPIC_API_KEY (Amazon Bedrock and Google Vertex AI work too).
Quickstart
fastdata init demo --demo # sample SQLite database + knowledge base
cd demo
fastdata # web chat at http://localhost:8000fastdata ask "Who are our top 5 customers by revenue?" > answer.mdNo API key needed if Claude Code is logged in on the machine: fastdata doctor shows which
credentials it uses.
Everyday use
fastdata ask --loop # several questions in one conversation (/new, /exit)
fastdata ask "And last month?" # in a terminal, offers to continue a recent conversation
fastdata ask --new "..." # always start fresh
# manual mode (no connector): run the printed SQL yourself, then
fastdata ask --continue --results results.csv
fastdata run --file report.sql --format csv > report.csv # your own SQL; Claude fixes it if it fails
fastdata doctor # check credentials, knowledge base and connector
fastdata doctor --query "SELECT * FROM orders LIMIT 10" # run a read-only query through the connectorFollow-ups in the same conversation reuse what the agent already read, so they need far fewer steps than a new question.
Your own database
fastdata init # asks: learn your database now? [Y/n], then the URL
# or, step by step:
fastdata learn --url postgres://readonly_user:pass@host:5432/db
fastdata ask "How many active customers do we have?"fastdata learn reads the schema (tables, columns, keys, comments, row counts, common values of
status-like columns) and has Claude draft knowledge/: one file per table plus INDEX.md, a
glossary and the personal-data rules. The URL goes to .env (gitignored), never into
fastdata.yaml. It accepts postgres://, mysql://, sqlserver:// or a SQLite file; existing
files are kept unless you pass --force.
Review the drafts, then add what only people know: metric definitions in metrics/,
verified queries in examples/, default filters in rules.md. Opening Claude Code in the folder
works well for this: the generated AGENTS.md tells it how. Any MCP server with a "run SQL"
tool works as a connector (Connectors).
Documentation
Full docs at fastdata.run:
| | |
| --- | --- |
| Getting started | Install, run the demo, set up your own database |
| Using fastdata | Web chat, fastdata ask, manual mode, HTTP API |
| Knowledge base | Describe your data so answers are right |
| Connectors | Postgres, SQLite, any MCP SQL server, HTTP endpoints |
| Configuration | Every fastdata.yaml option, secrets, credentials |
| Security model | What fastdata can and cannot do with your data |
| Troubleshooting | Error messages and how to fix them |
Try it on a realistic setup: Ringly, a 15-table SaaS voice-call database on Postgres.
How it works
- Knowledge as code: plain Markdown and YAML in git. The agent searches it like a developer greps a repo; no vector database.
- Your credentials stay with your connector: fastdata sends SQL and gets rows back. Any MCP server with a "run SQL" tool works, and fastdata ships read-only Postgres and SQLite executors.
- Read-only, enforced in code: every query passes a read-only guard, the built-in executors use read-only transactions, and you connect with a read-only role.
- Small results by default: a query fetches at most 100 rows (
limits.max_rows; the built-in executors stop in the database), and at most 50 of them reach Claude (limits.preview_rows). The UI table and CSV download get all fetched rows.
Development
See Architecture (the repo's AGENTS.md) for the architecture, conventions and commands. Background on the Custom GPT prototype this grew out of: docs/concept.md.
