Skip to main content
Glama

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

list_tables

Übersicht aller Tabellen: Zeilenanzahl, Spalten, Beschreibung, Beziehungen zwischen Tabellen. Sinnvoller erster Aufruf.

describe_table(table_name)

Vollständiges Schema einer Tabelle: Spaltentypen, Primär-/Fremdschlüssel, 3 Beispielzeilen.

query(sql, limit=50, offset=0)

Führt ein einzelnes Read-only SELECT (oder WITH ... SELECT) aus. Unterstützt JOIN und Aggregation. Ergebnisse werden paginiert: maximal 500 Zeilen pro Aufruf, mit truncated / next_offset.

Sicherheit

Die Datenbank kann über diesen Server nicht verändert werden. Drei unabhängige Schutzebenen:

  1. Abfragevalidierung – alles, was kein einzelnes SELECT/WITH ist (INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, PRAGMA, ATTACH, mehrere Anweisungen hintereinander, ein in einem Kommentar verstecktes Schreiben), wird mit einer klaren Meldung abgelehnt, noch bevor es ausgeführt wird.

  2. Read-only-Verbindung – Die Datei wird über einen SQLite-URI mit mode=ro geöffnet.

  3. PRAGMA query_only = ON fü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 sync

Oder mit pip:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Konfiguration

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.db

seed_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.db

Start

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.py

Claude 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 list_tables

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 >── products
  • customers (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 pytest

36 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       # опциональный запуск в контейнере
Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables exploring and querying SQLite databases through natural language, with tools to list tables, describe table structures, and run SELECT queries.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    6
    92
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only exploration and analysis of an included SQLite shop database through tools for listing tables, describing schemas, and running SQL queries.
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to safely explore and query a SQLite database in read-only mode, allowing them to inspect schema and run analytical SQL queries without risking data modification.
    3

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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