Structure gets guessed
Column names, join paths, and business entities are inferred from thin clues instead of discovered.
MIT licensed - MCP, REST, dashboard - Docker-ready
Tablix connects to databases you define, crawls the schema, uses your configured model to derive editable context, and gives people and agents a controlled way to ask questions of live data.
Built-in database chat for NL2SQL, MCP for coding agents, REST for applications, and guarded execution that returns SQL, row counts, and evidence with the answer.
Read the MCP tool contractNo signup. No cloud dependency. No telemetry. Your data stays in your infrastructure.
git clone https://github.com/jchristn/Tablix.git
cd Tablix/docker
docker compose up -d
REST http://localhost:9100
Dashboard http://localhost:9101
MCP http://localhost:9102/rpc
The problem
A capable model can produce clean SQL against a schema it only half understands. It can infer joins from table names, treat ambiguous business words as obvious, and return a confident answer before anything was actually executed.
Tablix gives that model the missing layer: crawled schema, durable human-editable context, model-backed database chat, and a query path that runs under explicit guardrails.
Column names, join paths, and business entities are inferred from thin clues instead of discovered.
Totals and row counts are only trustworthy when they came from an executed query.
SQL handed back to a user is a draft. Executed SQL with rows and evidence is an answer.
What it is
Tablix is a self-hosted .NET server and React dashboard for asking natural-language questions of databases. It connects to user-defined databases, crawls schema, derives editable context with a configured model, and exposes the same workflows through the UI, MCP, and REST.
Ask questions in the dashboard and get NL2SQL answers backed by executed queries, returned rows, SQL, row counts, and evidence.
Crawl tables, keys, indexes, and relationships, then generate database- and table-level context that can be edited and reused.
Use the dashboard for people, MCP for tool-capable coding agents, and REST for applications and automation.
Connect SQLite, PostgreSQL, MySQL, and SQL Server databases from the same server and dashboard.
Set allowed statement types per database, scope calls to the selected connection, and reject multi-statement SQL.
Configure and validate Ollama, OpenAI, OpenAI-compatible endpoints, or Gemini before database chat uses them.
How it works
Features
Responses distinguish verified, partial, blocked, and ambiguous outcomes so a user can see what actually happened.
Database and table context persists between sessions, so corrected definitions and useful join notes do not disappear.
Keep production-shaped access sane with per-database statement allowlists and selected-database execution.
Agents can page through compact table and relationship indexes, then inspect only the tables relevant to the question.
When words like active, latest, customer, or revenue are unclear, the flow can ask for clarification instead of guessing.
Use setup, schema browsing, context editing, query running, CSV/JSON export, and chat without building admin tools first.
Show, do not tell
{
"mcpServers": {
"tablix": {
"type": "http",
"url": "http://localhost:9102/rpc"
}
}
}
Add the local HTTP endpoint to Claude, Codex, Cursor, Gemini, or any MCP client that supports HTTP servers.
MCP server name: tablix
Transport: HTTP
URL: http://localhost:9102/rpc
discover databases
read database and table context
page through tables and relationships
inspect only the tables that matter
execute a permitted query
return SQL, row count, rows, and evidence
persist useful context corrections
curl -X POST http://localhost:9100/v1/database/db_orders/query \
-H "Authorization: Bearer tablixadmin" \
-H "Content-Type: application/json" \
-d '{"query":"SELECT COUNT(*) AS c FROM orders WHERE status = 1"}'
{
"Success": true,
"RowsReturned": 1,
"TotalMs": 4,
"Data": { "Columns": ["c"], "Rows": [[1847]] }
}
Full contracts in
REST_API.md
and
MCP_API.md,
plus Swagger UI at /swagger on any running instance.
Dashboard included
The built-in UI covers setup, model validation, database details, query results, context editing, streaming chat, inline tool calls, and exports.
Use cases
Your agent can discover schema, read context explaining soft deletes, run permitted queries, and return actual row counts instead of asking you to paste output back into chat.
Non-SQL colleagues ask questions in dashboard chat and get answers with SQL and row count attached. Ambiguous questions can become clarifying questions.
Point Tablix at the database with hundreds of tables and thin foreign keys. It crawls, surfaces inferred join candidates, and generates first-draft context you can correct.
Give an assistant a controlled path to live data so operational questions return numbers from the system of record, not stale index guesses.
Connect a read-only database entry and let an agent answer what is queued, stuck, or delayed without opening a SQL shell mid-incident.
Table context becomes documentation that humans and agents both read. Corrections can persist instead of staying buried in a chat transcript.
Getting started
Compose starts the server, dashboard, MCP endpoint, product state, and a sample SQLite database.
git clone https://github.com/jchristn/Tablix.git
cd Tablix/docker
docker compose pull
docker compose up -d
Default API key: tablixadmin
Sample SQLite database ships with users, orders, and line_items.
Open the dashboard, validate a model provider, validate a database, crawl schema, generate context, and end in Chat.
MCP server name: tablix
Transport: HTTP
URL: http://localhost:9102/rpc
Keep Tablix self-hosted, point it at databases with controlled permissions, and choose model providers that support tool calling.
FAQ
No. Tablix is self-hosted. The only outbound calls are to whatever model provider you configure, and if you point it at local Ollama, there are none.
Tablix can configure Ollama, OpenAI, OpenAI-compatible endpoints, and Gemini through PolyPrompt. The database-chat and MCP workflow require a model/provider path with tool calling support.
Only if you allow it. AllowedQueries is per database entry, and ["SELECT"] is the sane default. Back that up with a read-only database role.
Agents page through compact table and relationship indexes, then request full detail only for tables relevant to the question.
Tablix executed SQL against your database and the model answered from returned rows. The envelope also distinguishes partial, blocked, and ambiguous answers.
Tablix is early software. It is a strong fit for internal tools, development environments, and read-only production access with proper database permissions.
Call to action
Clone the repo, start Docker, open the dashboard, and add the MCP endpoint to your agent.