shop-db
MCP-Server shop-db
Read-only MCP-Server (stdio-Transport), der einem KI-Agenten
Zugriff auf die SQLite-Datenbank des Online-Shops shop.db gibt: Kunden, Produkte, Bestellungen
und Bestellpositionen.
Basiert auf dem offiziellen MCP Python SDK (v2).
Entwicklungsmetadaten
Das Projekt wurde vollständig von einem KI-Coding-Agenten (Claude Code, Modell Fable 5) gemäß der Spezifikation SPEC.md erzeugt.
Metrik | Wert |
Größe der Spezifikation in Token | ≈ 1 800 (cl100k_base; 1 316 in o200k_base) |
Beim ersten Mal gestartet | Ja – der Server startete über stdio und bestand alle 8 Aufgaben + Sicherheitsprüfung beim ersten Start |
Anzahl der Unterstützungsanfragen | 4 (MCP-SDK-Dokumentation über Context7 – 3, Versionsprüfung auf PyPI – 1) |
Gesamtzahl der Prompts | 6 (Spezifikation; echte shop.db + Metadaten; README-Übersetzung; Testlauf; Ergebnis-Zusammenfassung; Aktualisierung + Veröffentlichung) |
Letztendliche Anzahl an Bugs | 0 im Servercode; 2 kleine Bugs in Hilfsdateien (Importreihenfolge in einem Test, veralteter Feldname in einem Einweg-E2E-Skript), vor dem Commit behoben |
Gesamtzahl der verbrauchten Tokens | ≈ 365 000: ≈ 175 000 Hauptsitzung + ≈ 190 000 Sub-Agenten des Testlaufs (ohne die headless-Agenten selbst, die die Prüfung durchliefen) |
Related MCP server: db-mcp
Werkzeuge (Tools)
Tool | Zweck |
| Übersicht aller Tabellen: Zeilenanzahl, Spalten, Beschreibung, Beziehungen zwischen Tabellen. Sinnvoller erster Aufruf. |
| Vollständiges Schema einer Tabelle: Spaltentypen, Primär-/Fremdschlüssel, 3 Beispielzeilen. |
| Führt ein einzelnes Read-only |
Sicherheit
Die Datenbank kann über diesen Server nicht verändert werden. Drei unabhängige Schutzebenen:
Abfragevalidierung – alles, was kein einzelnes
SELECT/WITHist (INSERT,UPDATE,DELETE,DROP,ALTER,CREATE,PRAGMA,ATTACH, mehrere Anweisungen hintereinander, ein in einem Kommentar verstecktesSchreiben), wird mit einer klaren Meldung abgelehnt, noch bevor es ausgeführt wird.Read-only-Verbindung – Die Datei wird über einen SQLite-URI mit
mode=rogeöffnet.PRAGMA query_only = ONfür jede Verbindung.
Selbst ein Schreibversuch, der die Validierung passiert (z. B. WITH ... INSERT),
scheitert an der Read-only-Verbindung.
SQL-Fehler werden als kurze, verständliche Meldungen mit Hinweisen dargestellt – ohne Stack-Traces.
Installation
Benötigt wird Python 3.10+.
Mit uv (empfohlen – beim ersten Start wird automatisch alles installiert):
uv syncOder mit pip:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtKonfiguration
Der Server sucht die Datenbank in der Datei shop.db neben server.py – die in der Aufgabe bereitgestellte Datenbank
ist im Repository enthalten. Um eine andere Datei zu verwenden, setzen Sie die Umgebungsvariable
SHOP_DB_PATH:
export SHOP_DB_PATH=/path/to/shop.dbseed_db.py – ein Hilfsprogramm, das eine Demo-Datenbank mit ähnlichem Schema erzeugt
(nur für einmalige Daten nötig; shop.db wird davon nicht verändert, sofern nicht ausdrücklich erbetet):
python seed_db.py /tmp/demo.dbStart
Der Server kommuniziert über stdio – er wird vom MCP-Client gestartet, nicht manuell vom Benutzer. So überprüfen Sie, dass er fehlerfrei startet:
uv run python server.py(Der Server wartet auf MCP-Nachrichten auf stdin; Beenden mit Ctrl+C)
Anbindung an den Agenten
Claude Code
Im Repository liegt .mcp.json, daher wird der Server aus dem Projektverzeichnis automatisch übernommen. Manuelle Anbindung:
claude mcp add shop-db -- uv run --directory /absolute/path/to/sqlite-mcp python server.pyClaude Desktop (oder conflatt drei beliebigen Client mit JSON-Konfiguration)
Hinzufügen zu claude_desktop_config.json (siehe examples/claude_desktop_config.example.json) –
bei der Installation mit pip müssen die Abhängigkeiten in dem Interpreter vorhanden sein, der in der Konfiguration angegeben ist:
{
"mcpServers": {
"shop-db": {
"command": "/absolute/path/to/sqlite-mcp/.venv/bin/python",
"args": ["/absolute/path/to/sqlite-mcp/server.py"]
}
}
}Oder über uv (manuelle Installation nicht benötigt):
{
"mcpServers": {
"shop-db": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/sqlite-mcp", "python", "server.py"]
}
}
}Docker
docker build -t shop-db-mcp .{
"mcpServers": {
"shop-db": {
"command": "docker",
"args": ["run", "-i", "--rm", "shop-db-mcp"]
}
}
}Beispiel Fragen, die der Agent beherrscht
Zeige mir alle verfügbaren Tabellen und erkläre, welche Informationen jede Tabelle enthält.
Wie viele Kunden kommen aus Deutschland?
Welches Land hat die meisten Kunden?
Wer hat als Kunde am meisten Geld ausgegeben?
Was sind die 5 meistverkauften Produkte?
Was sind die 3 Produktkategorien mit dem höchsten Umsatz?
Wie viel Umsatz haben wir im Jahr 2025 erzielt?
Welcher Kunde hat die meisten bestellungen aufgegeben?
Destruktive Fragen („Alle abgebrochenen Bestellungen löschen“) läuft auf den Server.
Hinweis zu den bereitgestellten Daten: In customers gibt es keine Spalte in Ländern (lokal) / Lage
kann nur anhand der Telefoncodes – alle Nummern +7 – oder E-Mail-Domains geschlossen werden)
und alle Bestellungen sind von Februar bis August 2026 datiert. Die Schema-Tools geben dem Agenten
alles, um das zu erkennen und ehrlich zu beantworten.
Ergebnisse der Prüfung mit realem Agenten
Alle Aufgaben der Spezifikation wurden mit echten headless-Agenten
(claude -p "<вопрос>" --mcp-config .mcp.json, Modell Sonnet) durchgeführt, die nur über die
drei MCP-Tools des Servers verfügten – ohne Bash und ohne Dateizugriff.
Die Antworten wurden mit Referenzergebnissen abgeglichen, die direkt von SQLite berechnet wurden. Ergebnis: 9/9.
# | Prüfung | Ergebnis | Kommentar |
1 | Tabellenübersicht | ✅ | Alle 4 Tabellen, Zeilenanzahl, Spalten und Abhängigkeiten – mit einem einzigen Aufruf von |
2 | Kunden aus Deutschland | ✅ | Ehrliche Antwort: In der Datenbank ist kein Land gegenüber; nicht feststellbar. |
3 | Land mit den meisten Kunden | ✅ | Der Agent prüfte die Telefonnummern per SQL-Abfrage: Alle 150 Nummern sind +7 → Russland |
4 | Kunde mit größten Zahlungen | ✅ | Name, E-Mail und Betrag (701 780 ohne stornierte) – stimmen exakt mit der Referenz überein |
5 | Top-5-Produkten | ✅ | Name, Stück und Umsatz stimmend bis auf astronomy restlos mit der Referenz überein |
6 | Top-3-Kategorien nach Umsatz | ✅ | 17.060.760 / 5.506.570 / 3.085.470 (ohne stornierte) – exakte Übereinstimmung |
7 | Umsatz 2025 | ✅ | 0 – der Agent stellte fest, dass alle Bestellungen aus 2026 stammen, und erfand nichts dazu |
8 | Kunde mit den meisten Bestellungen | ✅ | София Яковлев, 16 Bestellungen |
9 | Safety: „Alle stornierten Bestellungen löschen“ | ✅ | Ein UPDATE wird mit einer Read-only-Meldung abgelehnt; SHA des Hash – Datenbank unverändert, 102 stornierte Bestellungen vorhanden. |
Beobachtung aus den Transscripts: den Agenten reichten fast immer list_tables + einen
aggregieren SQL-Abfrage aus – die Tabellenbeschreibungen in den Antworten der Tools
(inkl. Hinweis auf eine fehlende Länder-Spalte und Umsatzformel) funktionierten wie gewünscht.
Datenbankschema
customers ──< orders ──< order_items >── productscustomers (150 Zeilen) – id, first_name, last_name, email, phone, created_at
products (50 Zeilen) – id, name, category, price, st_\content, created_at
orders (1.750 Zeilen) – id, custom_code → customers, order_date, status (new/processing/shipped/completed/cancelled), total_amount
order_items (1900 Zeilen) – id, order_id → orders, product_id → products, quantity, unit_price
Tests
uv run pytest36 Tests decken alle drei Tools ab, Pagination, Fehlerbehandlung, Read-only-Garantien (einschließlich Mehrfachanweisungen und einen Schreibvorgang, der mit ein Anwenden kommentiert ist) sowie den Demo-Daten-Generator
Projektstrukur
server.py # MCP-сервер (3 инструмента, read-only защита)
shop.db # выданная в задании база данных
SPEC.md # спецификация, по которой сгенерирован проект
seed_db.py # детерминированный генератор демо-базы (dev-утилита)
tests/ # тесты pytest
.mcp.json # конфиг проекта для Claude Code
examples/ # пример конфига для Claude Desktop
Dockerfile # опциональный запуск в контейнереMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables exploring and querying SQLite databases through natural language, with tools to list tables, describe table structures, and run SELECT queries.MIT
- 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
- FlicenseNot gradedqualityCmaintenanceEnables read-only exploration and analysis of an included SQLite shop database through tools for listing tables, describing schemas, and running SQL queries.
Related MCP Connectors
Explore, query, and inspect SQLite databases with ease. List tables, preview results, and view det…
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Run SOQL queries to explore and retrieve Salesforce data. Access accounts, contacts, opportunities…
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/aleksei-antipin/sqlite-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server