Shop Analytics MCP Server
Shop Analytics MCP Server
Ein schreibgeschützter MCP-Server über stdio, der es einem KI-Agenten ermöglicht, analytische Fragen zur SQLite-Datenbank eines Online-Shops (customers, products, orders, order_items) zu beantworten — ohne sie jemals verändern zu können.
Siehe SPEC.md für die vollständige Begründung des Designs (Entscheidungsprotokoll, Schema, Sicherheitsmodell, Teststrategie).
Anforderungen
Node.js >= 24.10.0 (erforderlich für
setAuthorizervonnode:sqlite, das von der unten beschriebenen Schreibschutz-Garantie verwendet wird). Prüfe das mitnode --version.Keine weiteren Laufzeitabhängigkeiten über das hinaus, was
npm ciinstalliert.
Related MCP server: db-mcp
Installieren → Konfigurieren → Ausführen → Verbinden
npm ci
npm run build
SHOP_DB_PATH=./shop.db npm startshop.dbist in diesem Repository einsatzbereit enthalten. Falls du die Datenbank einmal deterministisch aus dem Schema neu erzeugen musst, führenpm run seedaus (siehe Datenbank unten).SHOP_DB_PATHist optional; standardmäßig wirdshop.dbim aktuellen Arbeitsverzeichnis verwendet. Im Quellcode ist kein absoluter Pfad hartkodiert.Der Server spricht MCP ausschließlich über stdio — es gibt keinen HTTP-Server und nichts anderes zu starten.
Einen KI-Agenten verbinden
Konfigurationsbeispiele für zwei Clients findest du in config/:
config/claude-code.mcp.json— in die.mcp.jsoneines Projekts kopieren oderclaude mcp add-jsonmit demshop-analytics-Eintrag ausführen. Trage zuerst die absoluten Pfade fürargs/envein.config/codex.mcp.toml— die Tabelle[mcp_servers.shop-analytics]in~/.codex/config.tomlkopieren (oder in ein projektspezifisches.codex/config.toml) oder den Befehlcodex mcp addaus dem Datei-Kopfkommentar verwenden.
Um den Server manuell ohne einen bestimmten Agenten auszuprobieren, verwende den tool-agnostischen MCP Inspector:
SHOP_DB_PATH=$(pwd)/shop.db npx @modelcontextprotocol/inspector node dist/src/index.jsTools
Der Server stellt genau 8 spezialisierte, schreibgeschützte Tools bereit — kein Tool akzeptiert oder führt beliebiges SQL aus. Jede erfolgreiche Antwort hat die Form { "data": [...], "meta": {...} }; jeder Fehler ist eine einfache, sichere, für Menschen lesbare Nachricht (kein SQL, keine Dateipfade oder Stack-Traces), gekennzeichnet mit isError: true.
Tool | Antworten | Wichtige Parameter |
| „Zeig mir alle Tabellen und was sie enthalten." | (keine) |
| "Wie viele Kunden kommen aus Deutschland?" |
|
| "Welches Land hat die meisten Kunden?" |
|
| "Wer hat am meisten ausgegeben?" |
|
| "Was sind die 5 meistverkauften Produkte?" |
|
| "Was sind die 3 umsatzstärksten Kategorien?" |
|
| "Wie viel Umsatz haben wir in 2025 erzielt?" |
|
| "Welcher Kunde hat die meisten Bestellungen aufgegeben?" |
|
from/to sind YYYY-MM-DD und definieren ein halboffenes UTC-Intervall [from, to); from muss strikt früher als to sein. Alle Finanz- und Zählkennzahlen schließen Bestellungen mit Status cancelled aus. Die vollständigen Verträge der einzelnen Tools (exakte Antwortstrukturen, Rangfolgeregeln) findest du in SPEC.md §4.
Sicherheit
Drei unabhängige, mehrstufig ineinsgreifende Schutzschichten garantieren, dass die Datenbank nie verändert wird, selbst bei einem feindseligen Prompt wie "Alle stornierten Bestellungen löschen":
Die SQLite-Verbindung wird mit
readOnly: truegeöffnet.Direkt nach dem Öffnen wird
PRAGMA query_only = ONgesetzt.Ein SQLite-
authorizerverweigert ausdrücklich jede Schreib-/DDL-Aktion (INSERT,UPDATE,DELETE,DROP,ALTER,CREATE,ATTACH,DETACH, Transaktionen, ...).
Darüber hinaus akzeptiert kein Tool rohes SQL, Tabellennnamen oder Spaltennamen — jede Abfrage ist ein festes Prepared Statement und jede Eingabe wird mit zod validisiert und als gebundener Parameter übergeben, niemals per String-Interpolation.
Datenbank
shop.db wird aus database/schema.sql von einem deterministischen Seed-Skript erzeugt — eine neue Ausführung erzeugt jedes Mal byte-identische Daten (fester PRNG-Seed, keine Abhängigkeit von der echten Uhrzeit):
npm run seed # builds, then (re)writes ./shop.db from schema.sql + the seed scriptDas Seed-Skript stellt bei der Generierung außerdem sicher, dass der Datensatz keine mehrdeutigen Ranglisten enthält (z. B. ein einzelnes Top-Land, einen einzelnen Top-Ausgeber) und einen von null verschiedenen Umsatz für 2025 aufweist — siehe SPEC.md §3.
Entwicklung
npm run build # tsc + copy database/schema.sql into dist/
npm run test:unit # business logic, in isolation, against fixture databases
npm run test:integration # spawns the built server over stdio via the MCP SDK client
npm test # bothDieses Projekt wurde mit TDD entwickelt: Für jedes Modul wurde zuerst ein fehlschlagender Test geschrieben, dann die Implementierung, Tool für Tool. Die Integrationssuite deckt alle 8 Akzeptanzszenarien Ende-zu-Ende ab, dazu Eingaben mit SQL-Injection-Optik, ungültige Parameterkombinationen und verifiziert, dass der SHA-256-Hash der Datenbankdatei nach jedem Lauf unverändert bleibt.
Projektstruktur
database/ schema.sql + the deterministic seed generator
src/
db.ts read-only SQLite connection (see Safety above)
errors.ts error taxonomy, safe error formatting
validation.ts zod schemas shared across tools (dates, limits, periods)
period.ts half-open period SQL clause builder
tools/ one module per tool: pure query function + types
server.ts registers all 8 tools on the MCP server
index.ts stdio entrypoint
test/
unit/ one file per module/tool, fixture-based
integration/ spawns dist/src/index.js over stdio via the MCP SDK client
config/ example client configuration (Claude Code, Codex CLI)Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables secure analytics on an SQLite database of an online store via six specialized tools covering schema, customer metrics, product sales, category revenue, period revenue, and order leaders.6
- AlicenseAqualityBmaintenanceEnables AI agents to safely interact with a SQLite shop database through schema discovery, read-only SQL queries, and pre-built analytics reports like top customers, top products, and revenue summaries.692MIT
- AlicenseAqualityBmaintenanceA read-only MCP server that lets AI agents run safe, specialized analytics over an internet shop's SQLite database, covering customers, products, orders, and revenue. It exposes no generic SQL or write tools, so agents can answer questions without modifying data.8MIT
Related MCP Connectors
Explore, query, and inspect SQLite databases with ease. List tables, preview results, and view det…
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bogdaamn/database-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server