How it works
From question to answer in seconds
Every step is designed around one principle: your data never leaves your infrastructure, and you stay in control at every stage.
You connect your database
The connection form asks for your database host, port, username, password, and database name. Standard fields — the same thing you'd put in any DB client.
You select which tables to expose
After connecting, you activate the specific tables you want the AI to be able to query. Ottoch reads the schema (column names and types) of those tables only.
You bring your AI key
Ottoch does not have a built-in AI model. You supply an API key for the provider of your choice. Your key goes on your server and is used directly from there.
Get a key at platform.openai.com, console.anthropic.com, or aistudio.google.com.
You ask a question
Type your question in the chat interface — just like you'd ask a colleague. Ottoch builds a structured prompt containing your schema and sends it to your AI provider.
We validate the SQL
The AI returns a SQL query. Before it ever touches your database, Ottoch parses it and verifies it is a pure SELECT statement. This check runs in code — it does not rely on the AI getting it right.
You get a plain English answer
The validated SQL runs on your database. The result rows are passed back to the AI with the original question. The model translates the data into a plain English sentence and shows you the SQL and execution time alongside it.
FROM returns r JOIN products p ON r.product_id = p.id
WHERE r.created_at >= '2024-10-01' AND r.created_at < '2025-01-01'
GROUP BY p.name ORDER BY return_count DESC LIMIT 10;
Trust
What we never do
The security model only works if the boundaries are real. Here are the hard limits.
Ottoch only reads schema metadata (table and column names). It never scans, exports, or indexes your actual row data.
Query results are shown to you and discarded. They are not written to Ottoch's database, not sent to any third party, not logged.
The SQL validation layer rejects any non-SELECT statement before execution. INSERT, UPDATE, DELETE, DROP — all rejected in code, not by AI judgment.
Ottoch is self-hosted. There are no analytics, no telemetry, no license check servers. The only outbound calls are to your chosen AI provider.
API keys are encrypted with a server-side secret before being written to the database. They cannot be read back in plaintext by anyone — including us.
The AI only receives schema for tables you explicitly activated. Inactive tables are never included in prompts and never queried.