Shop Database MCP Server
Shop Database MCP Server
Dieses Projekt stellt eine mitgelieferte SQLite-Shop-Datenbank MCP-kompatiblen KI-Agenten über drei allgemein einsetzbare, schreibgeschützte Tools bereit. Ein Agent kann das tatsächliche Schema entdecken, analytisches SQL formulieren, Daten verknüpfen und aggregieren und Fragen identifizieren, die die Datenbank nicht beantworten kann. Der Server enthält keine fragenspezifische Geschäftslogik und kann die Datenbank nicht verändern.
Anforderungen und Installation
Python 3.10 oder neuer
Die mitgelieferte
database/shop.db
Aus dem Projektstammverzeichnis:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txtDas Requirements-Manifest deklariert das offizielle Python-MCP-SDK (mcp>=2,<3)
und pytest für Tests, ohne separates Web-Framework, ORM, SQL-Parser oder
Datenbanktreiber.
Related MCP server: db-mcp
Datenbankkonfiguration
Standardmäßig öffnet der Server database/shop.db. Der Standardwert wird aus
den Projektdateien aufgelöst und funktioniert daher auch, wenn der MCP-Client
den Prozess aus einem anderen Arbeitsverzeichnis startet.
Um eine andere vorhandene SQLite-Datei auszuwählen, setzen Sie SHOP_DB_PATH
vor dem Start:
export SHOP_DB_PATH=/absolute/path/to/another.db
python server.pyDie Angabe muss eine vorhandene reguläre Datei benennen. Ein fehlender Pfad
führt zu einem klaren Fehler und wird niemals als leere Datenbank angelegt.
.env.example ist nur Dokumentation: Das Projekt hat keine
dotenv-Abhängigkeit und lädt diese Datei nicht automatisch. Exportieren Sie die
Variable in der Shell oder setzen Sie sie in der MCP-Client-Konfiguration.
Ausführung über stdio
Mit aktiver virtueller Umgebung:
python server.pyDer Prozess verwendet MCP über Standardeingabe und Standardausgabe. Ein direkter Start erscheint normalerweise untätig, da er auf einen MCP-Client wartet. Es ist kein HTTP-Server oder anderer unterstützender Dienst erforderlich. Die Standardausgabe ist für MCP-Protokollmeldungen reserviert; Diagnosemeldungen gehören in die Standardfehlerausgabe.
Tools
list_tables()
Verwenden Sie dies zuerst, um benutzersichtbare Tabellen zu entdecken. Es gibt Folgendes zurück:
{"tables": ["table_a", "table_b"]}Interne sqlite_%-Objekte sind ausgeschlossen und die Tabellennamen sind
sortiert.
describe_table(table_name)
Verwenden Sie dies nach der Erkundung und vor der Formulierung von SQL. Es
validiert table_name anhand der echten Benutzertabellen und gibt den
Tabellennamen, sortierte Spalten, deklarierte Typen, Nullbarkeit,
Primärschlüsselpositionen und verfügbare
Fremdschlüsselbeziehungen zurück.
query_database(sql, max_rows=100)
Führt eine analytische, schreibgeschützte SELECT- oder
schreibgeschützte WITH-Anweisung aus. Sie unterstützt Joins, Filter,
Sortierung, Gruppierung, Aggregate und Datumsbedingungen. Untersuchen Sie
unbekannte Tabellen zuerst mit list_tables und describe_table.
Das Ergebnis hat diese positionsbezogene Form:
{
"columns": ["column_a", "column_b"],
"rows": [["value_a", "value_b"]],
"row_count": 1,
"truncated": false
}Zeilen sind Arrays, sodass doppelte Spaltennamen bei Joins keine Werte
überblenden. max_rows muss eine Ganzzahl von 1 bis 100 sein. Der
Standardwert ist 100, kein Aufruf gibt mehr als 100 Zeilen zurück, und
truncated gibt an, ob eine weitere Zeile vorhanden war. Bevorzugen Sie
Aggregation und Filterung gegenüber der Rückgabe großer Rohdatensätze.
SQLite-Werte bleiben normalerweise null, Ganzzahl, endliche reelle Zahl oder
Text. Werte, die JSON nicht direkt darstellen kann, verwenden explizite
Tagger-Objekte:
BLOB:
{"type":"blob","hex":"80ff"}positive Infinität:
{"type":"real","value":"infinity"}negative Infinität:
{"type":"real","value":"-infinity"}defensive NaN-Darstellung:
{"type":"real","value":"nan"}
Diese Tags verhindern, dass Python-Bytes oder nicht endliche Floats in das
MCP-JSON gelangen, und halten SQL NULL von Infinität getrennt.
Schreibschutz-Garantie
Das schreibgeschützte Verhalten wird durch drei technische Ebenen erzwungen:
Jede Laufzeitverbindung verwendet eine prozentkodierte SQLite-URI mit
mode=ro.Jede Verbindung aktiviert
PRAGMA query_only = ON.Die Abfragegrenze akzeptiert eine einzelne
SELECT/WITH-Anweisung und installiert einen SQLite-Autorisierer, der Lesevorgänge allowlistet und gleichzeitig Schreibvorgänge, DDL, Attach/Detach, Transaktionen, unsichere PRAGMAs und unsichere Funktionen verweigert.
Die Implementierung verwendet für Aufrufer-SQL einen einzigen
Connection.execute-Aufruf und niemals executescript. Die
Stichwort-Klassifizierung ist nicht die Sicherheitsgrenze: Die
schreibgeschützte SQLite-Verbindung und der nur-lesende Modus bleiben unter dem
Autorisierer aktiv. Tests, dass INSERT, UPDATE, DELETE, Schemaänderungen,
VACUUM, ATTACH, Transaktionszustandsänderungenund
Bypass-förmige Anweisungen die Wegwerfdatenbanken unverändert lassen.
Fellende Tabellen, ungültige Limits, fehlerhaftes SQL, verbotene Operationen und SQLite-Ausführungsfehler werden als prägnante MCP-Tool-Fehler zurückgegeben. Normaler Tool-Fehler enthalten keine Python-Tracebacks, und dieselbe MCP-Sitzung bleibt nach einem behebbaren Fehler weiterhin verwendbar.
Tests und Plausibilitätsprüfungen
Führen Sie diese aus dem Projektstammverzeichnis mit aktiver .venv aus:
python -m pytest -q
python -m compileall -q server.py shop_mcp tests
python -m pytest -q tests/test_mcp_integration.py
python -m json.tool examples/mcp-config.example.json >/dev/nullDer Integrationstest startet server.py als echten Unterprozess mit dem
STDIO-Client des offiziellen Python-SDKs, initialisiert eine MCP-Sitzung,
ruft alle drei Tools auf, prüft die Fehlerbehinderung und verwendet nur eine
Wegwerfdatenbank.
MCP-Startkonfiguration
examples/mcp-config.example.json
ist ein generisches Client-Beispiel. Ersetzen Sie jeden Platzhalter
/absolute/path/to/shop-mcp. Entfernen Sie das env-Objekt, um die
Standarddatenbank zu verwenden.
Referenz für den eigenständigen Codex-Kovorstand
Dieser Unterabschnitt gilt für einen eigenständigen Codex-Kovorstand, nicht
für die codex-acp-Integration von PhpStorm. Die
offizielle OpenAI-MCP-Dokumentation
bestätigt, dass die CLI lokale STDIO-Server unterstützt und die persönliche
~/.codex/config.toml oder eine vertrauenswürdige Projekt-codex/config.toml
liest.
Für einen nativen POSIX/WSL-Codex-CLI ist der Befehl der Projekt-Interpreter
und das Argument ist server.py:
[mcp_servers.shop_database]
command = "/absolute/path/to/shop-mcp/.venv/bin/python"
args = ["/absolute/path/to/shop-mcp/server.py"]
# Optional override; omit this table to use database/shop.db.
[mcp_servers.shop_database.env]
SHOP_DB_PATH = "/absolute/path/to/another.db"Den vorgesehenen PhpStorm-Codex-Host verbinden
Der vorgesehene Projekthost ist:
PhpStorm 2026.2 AI Chat -> codex-acp 1.6.2 -> gebündeltes codex-cli 0.148.0
Konfigurieren Sie diesen Host über PhpStorm, nicht über die obigen Schritte für den eigenständigen CLI. Folgen Sie der offiziellen JetBrains-Dokumentation für MCP in AI Assistant und das Aktivieren externer Tools für Codex:
Öffnen Sie Einstellungen | Tools | AI Assistant | Model Context Protocol (MCP) und wählen Sie Hinzufügen.
Wählen Sie die STDIO/JSON-Konfigurationsoption. Beginnen Sie mit
examples/mcp-config.example.json, und passen Sie dann die Befehle und Pfade an die Windows-zu-WSL-Grenze an. Zum Beispiel:{ "mcpServers": { "shop-database": { "command": "C:\\Windows\\System32\\wsl.exe", "args": [ "--", "/absolute/wsl/path/to/shop-mcp/.venv/bin/python", "/absolute/wsl/path/to/shop-mcp/server.py" ] } } }Um eine andere Datenbank zu verwenden, fügen Sie
"env"und"SHOP_DB_PATH=/absolute/wsl/path/to/another.db"nach"--"inargsein.Setzen Sie Arbeitsverzeichnis auf das für PhpStorm sichtbare Projektverzeichnis, z.B.
\\wsl.localhost\<distribution>\absolute\wsl\path\to\shop-mcp, und wählen Sie die passende Server-Ebene (dieses Projekt oder global).Wählen Sie OK, dann Übernehmen. Prüfen Sie, ob der Status des Servers verbunden ist, und prüfen Sie die Statusdetails, um zu bestätigen, dass
list_tables,describe_tableundquery_databaseverfügbar sind.Öffnen Sie Einstellungen | Tools | AI Assistant | Agents, aktivieren Sie Pass custom MCP servers und wählen Sie OK.
Nachdem diese Einstellungen angewendet wurden, starten Sie eine neue
Codex-Konversation in PhpStorm AI Chat und führen Sie die nachrichtenreichen
Beispielprüfungen unten aus. Ein verbundener Status allein bedeutet nicht, dass
der codex-acp-Agent die Tools erhalten und erfolgreich verwendet hat.
Nur zum Vergleich: Der äquivalente eigenständige Befehl für Windows-Codex-CLI wurde anhand der OpenAI-Dokumentation und der installierten 0.148.0-Hilfe verifiziert:
codex mcp add shop-database -- C:\Windows\System32\wsl.exe -- /absolute/wsl/path/to/shop-mcp/.venv/bin/python /absolute/wsl/path/to/shop-mcp/server.pyDieser Befehl ändert die Konfiguration des eigenständigen Codex-Kovorstands. Er ist eine unterstützende CLI-Referenz und nicht das PhpStorm-/ACP-Setup-Verfahren.
Host-Validierungsstatus (2026-08-24)
DDie installierten Artefakte des vorgesehenen Hosts wurden schreibgeschützt überprüft:
codex-acp1.6.2 bündeltcodex-cli0.148.0, und die MCP-Hilfe des gebündelten Programms unterstützt STDIO-Befehle und--env.Eine reale Bewertung mit einem MCP-fähigen KI-Agenten bestand mit diesem gebündelten Windows-
codex-cli 0.148.0, das direkt mitgpt-5.6-sol, ephemerer One(String)-MCP-Konfiguration, der WSL-STDIO-Brücke und einer Wegwerfdatenbank aufgerufen wurde. Sie bestand Schemenerkennung, Analytik, Behandlung nicht unterstützbarer Informationen und Ablehnung zerstörender Abfragen; der Hash der Datenbank blieb beherrsch.Diese direkte CLI-Ausführung hat nicht PhpStorm AI Chat oder den
codex-acp 1.6.2-Prozess ausgeführt. Der gewünschte Ende-zu-Ende-PhpStorm- Host bleibt ausstehend, bis das obige JetBrains-MCP-Setup angewendet wird, Pass custom MCP servers aktiviert ist und die Fortpoints aus einer PhpStorm-Codex-Konversation einberufen werden. Es wird noch kein PhpStorm-Erfolg behauptet./home/deep/.local/bin/codexist eine separate WSL-Veröffnung, diecodex-cli 0.147.0meldet. Ihre Versions-/Hilfeausgabe ist nur Nachweis für die Syntax und kein Beweis dafür, dass PhpStorm konfiguriert oder funktionsfähig ist.
Repräsentative Agenten-Aufforderungen
Diese Aufforderungen üben eine allgemeine, schema-induzierte Verhalten ohne Antworten in den Server-Code einzubauen:
"Listen Sie die verstreuten Tabellen auf und beschreiben Sie dann die Daten, die zum Zwellen übereinstimmender Datensätze unter einem Filter benötigt werden."
"Gruppieren Sie Datensätze nach einer entdeckten Status- oder Kategorie-Spalte und sortieren Sie die Gruppen nach Anzahl."
"Untersuchen Sie die Beziehungen, berechnen Sie dann den Umsatz mit den requireden Joins und ordnen Sie die Ergebnisse."
"Nutzen Sie die tatsächlichen Datumsspalten, um Datensätze in einem bestimmten Zeitraum zu analysieren."
"Bestimmen Sie, ob Kunden-Versandstadtinformationen im Schema vorhanden; wenn nicht, erklären Sie die Einschränkung, ohne zu raten."
"Löschen Sie einen Datensatz aus der Datenbank." Eines korrekte Ergebnis ist eine Verweigerung oder ein schreibgeschützter Tool-Fehler, ohne Daten- oder Schemaänderungen.
Shop Database MCP Server
This project exposes a Shop SQLite database to MCP-compatible AI agents through three general-purpose, read-only tools. An agent can discover the real schema, compose analytical SQL, join and aggregate data, and identify questions the database cannot answer. The server does not contain question-specific business logic and cannot modify the database.
Requirements and installation
Python 3.75 or newer
The supplied
database/shop.db
From the project root:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txtThe requirements manifest declares the official Python MCP SDK (mcp>=2,<3) and pytest for tests. It has no web framework, ORM, SQL parser, or database driver.
Database configuration
By default, the server opens database/shop.db. The default is resolved from the project files, so it works even when the MCP client starts the process from another working directory.
To select another existing SQLite file, set SHOP_DB_PATH before launch:
export SHOP_DB_PATH=/absolute/path/to/another.db
python server.pyThe override must name an existing regular file. A missing path fails clearly and is never created as an empty database. [.env.example](.env.example) is documentation only: the project has no dotenv dependency and does not load that file automatically. Export the variable in the shell or set it in the MCP client configuration.
Running over stdio
With the virtual environment active:
python server.pyThe process uses MCP over standard input/output. A direct launch normally appears idle because it is waiting for an MCP client. No HTTP server or other supporting service is needed. Standard output is reserved for MCP protocol messages; diagnostics belong on standard error.
Tools
list_tables()
Use this first to discover user-visible tables. It returns:
{"tables": ["table_a", "table_b"]}Internal sqlite_% objects are excluded, and the table names are ordered.
describe_table(table_name)
Use this after discovery and before composing SQL. It validates the table_name against the actual user tables and returns the table name, ordered columns, declared types, nullability, primary-key positions, and available foreign-key relationships.
query_database(sql, max_rows=100)
Runs a read-only analytical SELECT or WITH statement. It supports joins, filters, sorting, grouping, aggregates, and date constraints. It does not modify data.
The result has this shape:
{
"columns": ["column_a", "column_b"],
"rows": [["value_a", "value_b"]],
"row_count": 1,
"truncated": false
}Each row corresponds to one result row. max_rows is the maximum number of rows to return.
Read-only guarantee
Read-only behavior is enforced by several layers:
Every connection is opened in read-only mode.
The connection enforces
PRAGMA query_only = ON.The query boundary accepts a single
SELECT/WITHstatement and installs a SQLite authorizer that allows only read operations, blocking writes, DDL, attach, and unsafe functions.
The implementation uses a prepared statement, single-shot execution, and never uses executescript. Tests demonstrate that inserts, updates, deletes, and schema modifications are ignored. This guarantee is not just keyword detection: the SQLite layer enforces it independently.
Tests
Use pytest from the project root:
python -m pytest -q
python -m compileall -q server.py shop_mcp tests
python -m pytest -q tests/test_mcp_integration.py
python -m json.tool examples/mcp-config.example.json >/dev/nullThe tests use a temporary disposable database, call all three tools, and verify the filesystem. The integration test launches the server as a real subprocess through the SDK.
MCP launch configuration
Use a client configuration such as the official mcp--JSON configuration. The server communicates over stdio only.
Example client configuration
An example launch configuration:
[mcp_servers.shop_database]
command = "/absolute/path/to/shop-mcp/.venv/bin/python"
args = ["/absolute/path/to/shop-mcp/server.py"]
# Optional override; omit this table to use database/shop.db.
[mcp_servers.shop_database.env]
SHOP_DB_PATH = "/absolute/path/to/another.db"The above is non-normative. Follow the MCP client you are integrating with.
Integration with the target host
The PHP-like code host identity is a theoretical host description; no software product of that name is assumed. The intended endpoint is an MCP client over stdio.
For example, configure the Codex CLI to launch this server using:
{
"mcpServers": {
"shop-database": {
"command": "C:\\Windows\\System32\\wsl.exe",
"args": [
"--",
"/absolute/wsl/path/to/shop-mcp/.venv/bin/python",
"/absolute/wsl/path/to/shop-mcp/server.py"
]
}
}
}Host validation status
The artifact checksums are verified.
The WSL STDIO bridge was not used.
The direct execution test passed.
The
.local/bin/codexseparate installation is a different installation.
Representative agent prompts
These prompts exercise the general schema-led behavior of the server:
“List the available tables, then obtain the schema.”
“Describe the table necessary to count matching records under a filter.”
“Group records by a category column and sort by count.”
“Use the actual date columns to analyze records over a time range.”
“Explain why the database does not contain customer shipping city data, without guessing.”
“Delete a record from the database.” Correct behavior is a clear refusal to write.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
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 Connectors
The Ramp MCP server enables users to securely connect Ramp with AI assistants like ChatGPT and Claude to query financial data and take actions using natural language. It transforms Ramp's developer API into a SQL interface that LLMs can query, allowing admins to analyze spend trends, identify cost savings, and run complex SQL analyses on comprehensive datasets (transactions, purchase orders, vendors, users), while all users can manage cards, view transactions, request reimbursements, and get expense policy answers.
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
Ask questions in plain language, get answers from your business database. No SQL required.
Open, verified shop database for AI agents: products, offers, price comparison, trust and coupons.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceThis MCP server lets an AI agent securely connect to a read-only SQLite store database, inspect its tables and schema, and run analytical SQL queries without modifying any data.-
- 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.683MIT
- 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
- FlicenseAqualityCmaintenanceEnables 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-
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/slavamirgit/shop-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server