Read-only MCP for the SQL database behind an ERP: provably read-only guard, public benchmark.
ERP Report Engine MCP server is a locally run integration for AI assistants that speak the Model Context Protocol. Read-only MCP for the SQL database behind an ERP: provably read-only guard, public benchmark.
One scheduled run executes 9 audited SELECT statements and delivers a self-contained HTML report: four KPIs against an 8-week baseline, findings with named drivers, a data-quality gate, and row counts reconciled against the source. No BI license, no agent installed on the ERP server, and no writes — enforced in four layers (lexical, parse-tree, a side-effecting-function guard, and a read-only session), not promised in prose.
Once ERP Report Engine is connected, these are the calls the assistant has available:
Section — What it answersFindings — "Revenue +6.5% week-over-week — main driver: region 'Ege' (54% of the week's movement, partly offset by Marmara (−14,697))" — driver named, theTrends — 13 full weeks of revenue and on-time %, inline SVG (no external assets)Layer — Enforced bydescribe_model — the canonical semantic layer — each entity's grain, and each column's type + what it means (e.g. actual_ship_date is NULL until shipment, so aweekly_report — the full KPI briefing — findings, data-quality gate, reconciliation, SQL audit trailreconcile — fetched rows vs an independent COUNT(*) per entity, with a trust verdictaging — receivables aging — open balances by days-past-due bucket, overdue %, and the customers who owe the most overdue (aggregates only)check_query — whether a SQL statement would pass the guard — without running itquery — run a read-only SELECT/WITH, capped and audited; rows returned as untrusted dataerp-report-engine on PyPI is all you need. Most clients run it directly, so configuration is a few lines and a restart.
You will need one environment variable: ERP_DB_URL. The server will not start without them, which is usually why the tools fail to appear on a first run. Keep credentials in your client's env block or a secrets manager rather than in a file you might commit.
Among the database access options, the useful question is rarely "what can it do" but "what does it cost you to run" — permissions, credentials, and how much of your context its toolset consumes. ERP Report Engine's toolset — Section, Findings, Trends and 7 more — is a fair guide to whether it matches your workflow. It is maintained by gulmezeren2-byte; worth a glance at recent repository activity before you build anything load-bearing on it.
SyncDev reviews every entry in this directory against the project's own documentation before publishing, and revisits them as servers change.
| Tool | What it does |
|---|---|
| Section | What it answers |
| Findings | *"Revenue +6.5% week-over-week — main driver: region 'Ege' (54% of the week's movement, partly offset by Marmara (−14,697))"* — driver named, the segment pulling the other way named too, action suggested |
| Trends | 13 full weeks of revenue and on-time %, inline SVG (no external assets) |
| Layer | Enforced by |
| describe_model | the canonical **semantic layer** — each entity's grain, and each column's type + what it *means* (e.g. actual_ship_date is NULL until shipment, so a late unshipped order isn't counted against on-time), plus runnable exam |
| weekly_report | the full KPI briefing — findings, data-quality gate, reconciliation, SQL audit trail |
| reconcile | fetched rows vs an independent COUNT(*) per entity, with a trust verdict |
| aging | receivables aging — open balances by days-past-due bucket, overdue %, and the customers who owe the most overdue (aggregates only) |
| check_query | whether a SQL statement would pass the guard — *without running it* |
| query | run a read-only SELECT/WITH, capped and audited; rows returned as **untrusted data** |
{
"mcpServers": {
"erp-report-engine": {
"command": "uvx",
"args": ["erp-report-engine"],
"env": {
"ERP_DB_URL": "your-value"
}
}
}
}Add to claude_desktop_config.json, then restart Claude Desktop.
| Variable | Description | Required |
|---|---|---|
| ERP_DB_URL | Endpoint or connection string the server talks to. | Yes |
Read-only SQL access to Postgres — let your assistant inspect schemas and answer questions from real data.
Manage your whole Supabase project in conversation — database, auth, storage, Edge Functions and branches.
Query, modify and analyse local SQLite databases in conversation — the fastest way to chat with a data file.
Metabase ships its own MCP endpoint — search your BI content, build and run queries, and save questions and dashboards without leaving the chat.
Official MongoDB server covering data, schemas and Atlas management — from find queries to spinning up clusters.
Serverless Postgres with database branching — point your assistant at Neon and let it work on disposable copies.