Skip to main content
Glama
andreykutsenko

mcp-shop-server

mcp-shop-server

MCP-Server, der einem KI-Agenten read-only Zugriff auf die SQLite-Datenbank eines Online-Shops gewährt (customers, products, orders, order_items). Über ihn beantwortet der Agent analytische Fragen zu den Daten: Datenbankstruktur, Aggregate nach Kunden, Produkten, Kategorien und Umsatz. Transport — stdio.

Schreiben in die Datenbank ist by design unmöglich: drei unabhängige Schutzschichten — Verbindung mode=ro, Validierung der Abfrage vor der Ausführung (nur SELECT / WITH ... SELECT) und sqlite3-authorizer.

Messungen, Nachweise und Abweichungen von der Spezifikation — REPORT.md.


Verwendung

1. Klonen

git clone https://github.com/andreykutsenko/mcp-shop-server.git
cd mcp-shop-server

Im Repository liegt bereits shop.db (150 Kunden, 50 Produkte, 750 Bestellungen, 1900 Positionen).

2. Abhängigkeiten installieren

uv venv .venv
uv pip install --python .venv/bin/python -r requirements.txt

Ohne uv — dasselbe mit den Standardmitteln:

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

Erforderlich ist Python 3.11+. Abhängigkeiten: mcp (offizielles MCP SDK) und pytest für Tests; die Datenbankarbeit erfolgt über sqlite3 aus der Standardbibliothek.

3. In die Agentenkonfiguration eintragen

Minimale Konfigurationsform:

{
  "command": "python",
  "args": ["/absolute/path/to/mcp-shop-server/server.py"]
}

Funktionierendes Beispiel für einen Client mit mcpServers-Block (Claude Desktop, Cursor und kompatible):

{
  "mcpServers": {
    "shop-db": {
      "command": "/absolute/path/to/mcp-shop-server/.venv/bin/python",
      "args": ["/absolute/path/to/mcp-shop-server/server.py"],
      "env": {
        "MCP_SHOP_DB": "/absolute/path/to/mcp-shop-server/shop.db"
      }
    }
  }
}

Für Claude Code genügt ein einziger Befehl:

claude mcp add shop-db -- /absolute/path/to/mcp-shop-server/.venv/bin/python /absolute/path/to/mcp-shop-server/server.py

MCP_SHOP_DB ist optional: Wenn die Variable nicht gesetzt ist, nimmt der Server shop.db neben server.py. Geben Sie sie an, wenn die Datenbank woanders liegt. Den Interpreter sollte man aus .venv angeben — sonst findet der systemweite python das Paket mcp möglicherweise nicht.

4. Start

Der Server wird vom Agenten gestartet, von Hand ist das selten nötig:

.venv/bin/python server.py

Der Prozess wartet still auf JSON-RPC auf stdin; Diagnose geht nach stderr, stdout ist vom MCP-Protokoll belegt.

5. Prüfung und Fragen an den Agenten

.venv/bin/python -m pytest -q

Nach der Verbindung sieht der Agent drei Werkzeuge. Fragen werden in normaler Sprache gestellt.

Die acht Aufgaben aus dem Text der Hausaufgabe — genau diese sollte man zur Überprüfung durchlaufen lassen:

1. Show me all available tables and explain what information each table contains.
2. How many customers are from Germany?
3. Which country has the most customers?
4. Who is the customer who spent the most money?
5. What are the top 5 best-selling products?
6. What are the top 3 product categories by revenue?
7. How much revenue did we generate in 2025?
8. Which customer placed the most orders?

⚠️ Die Aufgaben 2, 3 und 7 haben in der mitgelieferten Datenbank keine Lösung, und das ist erwartbar. In customers gibt es keine Spalte mit dem Land — alle 150 Kunden haben russische Telefonnummern; alle 750 Bestellungen sind auf 2026 datiert, für 2025 gibt es keine Daten.

Der Server erfindet in diesem Fall keine Daten: Er meldet, dass ein solches Feld im Schema nicht existiert, und listet die vorhandenen Spalten auf. Nichts ist im Code fest verdrahtet — das Schema wird aus der Datenbank gelesen, daher funktionieren dieselben Fragen auf einer anderen Datenbank, in der country vorhanden ist, normal.

Zusätzlich werden Fragen geprüft, die die Datenbank vollständig abdeckt: Top-5-Kunden nach Bestellsumme, Umsatz nach Kategorien, Verteilung der Bestellungen nach Status, durchschnittlicher Warenkorb, Lagerbestände.

Prüfung des Schreibschutzes. Auf „Delete all cancelled orders“ erhält der Agent eine verständliche Ablehnung, keinen Fehler: Der Server arbeitet nur lesend, 102 stornierte Bestellungen bleiben an Ort und Stelle.

Werkzeuge

Werkzeug

Zweck

list_tables()

Alle Tabellen mit Zweck, Zeilenzahl, Spalten, Beziehungen, Liste der Bestellstatus und Datumsformat.

describe_table(table)

Reale Spalten mit Typen, Fremdschlüssel in beide Richtungen und ein Beispielzeile.

run_select_query(sql, limit=100, offset=0)

Eine einzelne SELECT-Abfrage (oder WITH ... SELECT) ausführen und Zeilen seitenweise zurückgeben.

Die Ausgabe ist begrenzt: standardmäßig 100 Zeilen, maximal 1000. Beim Abschneiden meldet die Antwort, wie viele Zeilen zurückgegeben wurden, wie viele insgesamt gefunden wurden und mit welchem offset weiter gelesen werden soll.

Wenn das angeforderte Feld in der Datenbank nicht existiert (z. B. das Land des Kunden), sagt der Server das ehrlich und listet die vorhandenen Spalten auf — nicht vorhandene Felder werden nicht erfunden.


Related MCP server: Shop Analytics MCP Server

Wie es gemacht wurde

Das Projekt wurde mit einem einzigen Prompt generiert — die Datei SPEC-mcp-shop.md, die dem Agenten vollständig übermittelt wurde, ohne spätere Präzisierungen.

Intern arbeitete der Agent in einer Schleife nach dem Skill repo-task-proof-loop (Denis Shiryaev, Apache-2.0): Spezifikation einfrieren → bauen → Beweise verpacken → Prüfung mit frischer Sitzung → minimale Korrektur → erneut prüfen, bis zum Urteil PASS.

Die Nachweise des Durchlaufs liegen im Repository unter .agent/tasks/mcp-shop-server/:

  • spec.md — eingefrorene Spezifikation mit Abnahmekriterien AC1…AC17;

  • evidence.md / evidence.json — für jedes Kriterium Urteil und konkreter Nachweis;

  • verdict.json — Ergebnis der unabhängigen Prüfung mit frischer Sitzung;

  • problems.md — vom Prüfer gefundene Abweichungen;

  • raw/ — rohe Logs der Durchläufe: Tests, Live-MCP-Sitzung, Prüfung der stdout-Sauberkeit.

Geprüft wird nicht der Quellcode, sondern das Verhalten des Servers mit einem lebenden Agenten: Der Harness raw/mcp_session_check.py startet server.py über stdio mit einem echten MCP-Client, ruft alle Werkzeuge auf, führt die acht analytischen Aufgaben aus, erhält die Ablehnung auf Löschung und prüft, dass stdout nur JSON-RPC-Frames enthält.

Der Entwicklungsskill selbst liegt lokal in .claude/skills/ und wird nicht ins Repository committet — das ist fremder Code.


Getroffene Entscheidungen zu Unklarheiten der Spezifikation

#

Unklarheit

Lösung

1

„Der Agent beantwortet alle acht Aufgaben aus der Spezifikation“ — die Liste der acht Aufgaben ist in der Spezifikation selbst nicht angegeben.

Die acht analytischen Fragen wurden aus dem Abschnitt <objective> („Datenbankstruktur, Aggregate nach Kunden, Produkten, Kategorien und Umsatz“) abgeleitet und im Abschnitt „Prüfung und Fragen an den Agenten“ oben festgehalten. Jede wird über die Server-Werkzeuge in .agent/tasks/mcp-shop-server/raw/test-integration.txt ausgeführt.

2

Die Version des MCP SDK ist nicht festgelegt.

Es wurde die aktuelle Linie mcp>=2.1,<3 (API MCPServer) verwendet. In mcp 1.x hieß die Klasse FastMCP; die Obergrenze ist festgelegt, damit die Installation reproduzierbar ist.

3

„Maximal 1000 Zeilen“ — es ist nicht gesagt, ob das ein Fehler oder eine Kürzung ist.

limit größer als 1000 wird nicht als Fehler betrachtet: Der Wert wird nach oben auf 1000 begrenzt, und das wird im Feld notes mitgeteilt. Als Fehler gelten nur limit < 1 und ein negativer offset.

4

„Wie viele insgesamt gefunden wurden“ bei einer unbegrenzten Abfrage.

Das Cursor-Ergebnis wird vollständig nachgezählt, aber nicht mehr als 100.000 Zeilen; wenn die Abfrage mehr ergibt, ist total_is_exact=false, und in der Antwort steht „mindestens N“. So wird eine ehrliche Zahl nicht zu einem Risiko des Hängens.

5

Der Authorizer verbietet alles außer Lesen, aber describe_table benötigt PRAGMA table_info.

Der Authorizer lässt nur drei read-only-Pragmas durch (table_info, foreign_key_list, index_list). Ein benutzerdefiniertes PRAGMA in beliebiger Form wird bereits durch die zweite Schicht — den Validator — vor der Ausführung abgelehnt.

6

Das Antwortformat der Werkzeuge ist nicht vorgegeben.

Alle Werkzeuge geben ein strukturiertes Objekt mit dem Feld ok zurück. Ablehnung und Fehler sind ok=false mit einer textlichen Erklärung, keine MCP-Ausnahme: Der Agent liest das als Antwort, nicht als Transportfehler.

7

Namen der Werkzeuge und ihre Zusammensetzung („das Set entwirfst du selbst“).

Es bleibt das empfohlene Minimum von drei Werkzeugen mit genau den Namen list_tables, describe_table, run_select_query: Alles andere (Aggregate, Top-Listen, Jahresschnitte) wird über run_select_query ausgedrückt, einzelne enge Werkzeuge würden nur den Kontext aufblähen.

8

Semikolon am Ende der Abfrage.

Ein abschließendes ; ist erlaubt — das ist eine Anweisung. Abgelehnt wird nur eine zweite nicht-leere Anweisung nach dem ;; ein Semikolon innerhalb eines String-Literals zählt nicht als zweite Anweisung.

9

Lage der Tests und des Harness.

Tests — in tests/test_server.py (nummeriert nach den Punkten <tests> der Spezifikation), Harness der Live-MCP-Sitzung — in .agent/tasks/mcp-shop-server/raw/, neben den Nachweisen, damit er bei der Prüfung neu gestartet werden kann.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • 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
    83
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to answer analytical questions about an online store's SQLite database through specialized read-only tools, without any risk of modifying the underlying data.
    8
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to read-only query an online store's SQLite database, listing tables, inspecting schemas, and running SELECT queries over customers, products, orders, and order items.
    3
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to read-only analyze a SQLite e-commerce database, exploring schema and running analytical SQL queries over stdio.

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/andreykutsenko/mcp-shop-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server