agentic-analytics-engine
Provides tools for querying and analyzing DuckDB databases, enabling table profiling, metric computation, segment and period comparisons, time-series analysis, change decomposition, statistical testing, and guarded read-only SQL against uploaded CSV/Parquet files or built-in warehouses.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agentic-analytics-engineWhy did Q3 margin drop in the demo commerce warehouse?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Agentic Analytics Engine
Ask a question about a built-in warehouse or an uploaded CSV/Parquet file. The engine compiles the question into a typed analytical contract, executes that contract locally over DuckDB, verifies the result, and shows the data and SQL behind every published number.
https://github.com/user-attachments/assets/d1730a84-6861-4254-97d6-ccab0758a5d4
Live demo: agentic-analytics-engine.onrender.com
A model never executes SQL and never calculates a published value. On the upload path a model may propose a typed interpretation of an ambiguous question; local code then validates that proposal against the schema, compiles the SQL, runs it, and re-checks every figure. The multi-task warehouse path may also use models to propose findings and judge semantic support, and deterministic arithmetic, evidence checks and policy gates can still withhold them.
How a question becomes an answer
flowchart LR
Q[Question] --> R{Can local rules resolve it?}
R -->|yes| C[Typed query contract]
R -->|ambiguous| P[Governed AI planner]
P --> V[Local contract validation]
V --> C
R -->|unsafe or unmappable| X[Clear refusal]
C --> D[DuckDB through MCP]
D --> G[Coverage and numeric verification]
G --> O[Answer, table, chart and provenance]The rule resolver returns one of five states: EXACT, AMBIGUOUS,
UNRESOLVED, UNSUPPORTED, UNSAFE. Only AMBIGUOUS can reach a planner,
and only for the four issues a model can plausibly settle from wording:
an unclear column role, competing measure candidates, competing dimension
candidates, and an unbound filter. Everything else refuses with a reason and
makes no provider request.
Period ambiguity is deliberately excluded from that set. A signup date beside annual revenue cannot establish which column is the business clock for the measure, so the engine asks the session owner instead of guessing.
Both paths hold to the same four properties:
Operations, measures, groupings, filters, periods, rankings and result shape are all validated before any SQL is composed.
The engine owns the SQL, the read-only guard, metric definitions, statistics, chart specification and arithmetic checks.
A published claim needs cited cells, numeric support, evidence support and question relevance. A breakdown is described as complete only where coverage was measured.
Reports link each number to its snapshot, cited cells, generated SQL and accepted contract.
Full detail in architecture, the architecture atlas, and limitations.
Related MCP server: mcp-data-lens
Ways to run an analysis
Governed Analysis is the default. It resolves straightforward questions locally at no model cost and consults a planner only for an eligible ambiguity. The route taken is recorded by the server rather than inferred by the UI.
Two audit paths are available where the deployment enables them:
Path | Purpose | What can spend money |
Deterministic Analytics | Inspect the rule-based interpretation | Nothing leaves the server |
AI Analytics | Inspect the cloud-assisted path | One typed planning request for canonical uploads; the warehouse workflow may make several bounded model calls |
Compare planning strategies | Run both planning paths over one dataset | The AI side only |
Comparison does not rank planners. It reports whether the accepted contracts, coverage and outputs agree, and names the differing contract fields where they do not.
Upload analytics
CSV and Parquet only, one file per anonymous capability-based session.
The public deployment applies file, column, row, rate and concurrency limits. Sessions and their DuckDB data expire; they provide isolation rather than user accounts.
Column roles are inferred conservatively. Unsupported questions and incomplete results refuse rather than silently dropping a filter, grouping or period.
A cloud planner receives the question, schema information and allowed aggregate labels, never unaggregated rows. A near-unique text column is withheld from grouping, because group labels can reach the planner.
When the data cannot settle a column's role
Some numeric columns are structurally ambiguous: a value between 18 and 65 could be an ordered quantity such as age or a numeric key such as a store number. The engine marks this as a close call.
For an ambiguous upload field the session owner may confirm quantity or category. That confirmation is scoped to the session, validated server-side, revisioned to reject stale browser tabs, recorded in the planning audit, and pinned when a run starts. It never rewrites a completed run's evidence. Confirming a quantity permits an average but not an automatic total, because additivity is a separate fact the engine still does not know. Rationale in ADR 0007.
Run locally
make bootstrap # create the environment, install Python and npm dependencies
make data # generate the deterministic demo warehouse
make dev # build and serve http://127.0.0.1:8000 in fake-provider mode
make verify # lint, types, both test suites and recordingsDevelopment commands pin AAE_PROVIDER_MODE=fake and need no credential. The
browser suite refuses to run unless the target is a loopback address whose
health endpoint reports provider_mode: fake. It checks the host as well as
the mode, because the deployment also runs in fake mode: provider_mode
selects the ungoverned provider, while the paid path is gated separately on an
enabled flag, a credential and a reachable usage ledger. Deployments are
exercised by the hosted sweep in web/hosted/, which has its own gate.
Cloud development requires explicit intent and can bill a real account:
AAE_CONFIRM_PAID_LOCAL_RUN=1 make dev-cloudStack and boundaries
Concern | Implementation |
Web client | React, TypeScript, Vite and Vega-Lite |
API and live events | FastAPI and SSE |
Analytical workflow | LangGraph, typed state, an MCP client/server boundary |
Calculation | DuckDB, a semantic metric layer, SciPy where a supported test applies |
Safety | AST-based SQL guard, locked read-only DuckDB, bounded uploads, capability sessions |
AI assistance | Typed planning proposals validated locally; a shared usage ledger when cloud mode is on |
Deployment | Docker on Render, with an optional key-value store for usage accounting |
The website speaks MCP in-process, so it makes no network hop for tools.
/mcp is a separately guarded Streamable HTTP transport for external callers,
and it answers 503 when no Host allow-list is configured, which is how the
public deployment runs.
Verification evidence
CI publishes the test count for the exact commit it checks, and reconciles every discovered browser test, declared skip and retry across Chromium, Firefox and WebKit, so no count is frozen here.
The production audit on 6 October 2026 checked f98b890:
all ten CI jobs passed, including Docker and the three browser engines;
the credential-free API acceptance script passed 60 checks;
the hosted browser sweep passed 156 of 156 width, theme and state cells and made no upload, analysis, comparison or provider request;
one separately authorised Compare canary passed 41 checks and cost $0.000158.
On 7 October, a credential-free follow-up ran the same 156-cell browser
matrix against the current deployed commit b5a24b5. It made no upload,
analysis, comparison or provider request.
These are engineering checks. They are not a claim of universal dataset coverage or WCAG conformance. See the production audit, historical release evidence and limitations. The documentation map separates current operating material from historical evidence.
Repository map
src/agentic_analytics/
analytics/ contracts, semantic inference, execution and presentation
api/ FastAPI, SSE, sessions, uploads and admission
graph/ workflow state and orchestration
llm/ fake, local and governed cloud-provider adapters
mcp_layer/ analytical MCP tools, resources and client transport
verification/ arithmetic, claim-shape, evidence and chart safety
warehouse/ DuckDB lifecycle, metrics, SQL guard and session capability
web/ React application, report workspace and browser tests
docs/ ADRs, architecture, evidence, deployment notes and limitsLimits
No causal claims, forecasts, arbitrary joins, or business semantics absent from the data. Schema inference is conservative, and a role confirmation records a user-supplied interpretation rather than a fact derived from values.
The scripted provider validates engine behaviour, not real-model planning quality. Paid live-model checks are documented separately and deliberately few.
A session capability provides isolation, not authentication, and application rate limits are not a provider billing guarantee.
Complete list in limitations. MIT licensed.
This server cannot be deployed
Maintenance
Related MCP Connectors
A statistical analyst in your AI chat: bring data and a question, get a citable, re-runnable report.
Ask questions about a CSV in plain English and get answers, charts and cleaned data back.
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Connect your ads, shop, analytics, social, CRM and finance platforms once, then let Claude, ChatGPT, Cursor or any MCP client read, join and explain your numbers. Public statistics from the World Bank, IMF, Eurostat, OECD, WHO and SEC filings come as context, searchable and chartable from the same tools. Read-only by design, every number carries its source.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables conversational analysis of CSV and Parquet files through natural language, providing statistics, summaries, data type information, and comprehensive multi-step data analysis.-
- AlicenseNot gradedqualityCmaintenanceEnables users to ask questions about their spreadsheets in plain English and receive instant answers using DuckDB-powered analytics, supporting multiple file formats like Excel, CSV, and Parquet.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables LLMs to load tabular data from CSV/Excel/JSON, clean and analyze it, generate charts, and write a report with conclusions.MIT
- AlicenseAqualityCmaintenanceEnables AI agents to discover and execute analytical queries on a DuckDB dataset through typed MCP tools, with guarded read-only SQL support for complex calculations without direct database access.6MIT