mcp-data-server
mcp-data-server
Beispielprojekt, das produktive Web-Scraping- / Automatisierungsmuster demonstriert.
Ein MCP-Server, der Claude (oder einem anderen MCP-Client) schreibgeschützten Zugriff auf eine Geschäftsdatenbank gewährt — mit den Sicherheitsvorkehrungen, die erforderlich sind, um eine KI mit echten Unternehmensdaten zu verbinden: schreibgeschützte Verbindung, Tabellen-Whitelist, Maskierung personenbezogener Daten, Zeilenbegrenzungen, Abfrage-Timeout und ein vollständiges Audit-Log.
Fragen Sie "Welche Länder bestellen am meisten, und wie viel haben uns Rückerstattungen im letzten Quartal gekostet?" in Claude Desktop und erhalten Sie die Antwort aus der tatsächlichen Datenbank — ohne dass das Modell die Möglichkeit hat, eine Tabelle zu schreiben, zu löschen, anzuhängen oder zu lesen, die ihm nicht gewährt wurde.
Warum es das gibt
Das Hindernis bei den meisten Projekten zur „KI mit unseren Daten verbinden“ ist nicht die Verkabelung, sondern die erste Frage des Datenbank-Eigentümers: Was hindert sie daran, etwas zu lesen oder zu beschädigen, das sie nicht sollte? Dieser Server beantwortet diese Frage in Code.
Related MCP server: Database Assistant MCP Server
Vier unabhängige Barrieren
# | Barriere | Was sie verhindert |
1 | Verbindung geöffnet | jegliches Schreiben, selbst wenn jede darüberliegende Prüfung umgangen wird |
2 | Anweisungsanalyse | mehrere Anweisungen, alles, was nicht |
3 | Keyword-Blockliste |
|
4 | Whitelist + Maskierung + Begrenzungen | nicht gewährte Tabellen, PII-Spalten, überdimensionierte Ergebnisse, ausufernde Abfragen |
Jede ausgeführte Anweisung wird mit ihrer Zeilenanzahl und Dauer an das Audit-Log angehängt, sodass der Datenbank-Eigentümer genau sehen kann, wonach das Modell gefragt hat.
2026-08-18T11:22:41 6 rows in 1ms SELECT country, COUNT(*) FROM customers GROUP BY 1 LIMIT 201
2026-08-18T11:22:44 error: rejected DELETE FROM customersVerfügbare Tools
Tool | Zweck |
| lesbare Tabellen + Zeilenanzahlen |
| Spalten, Typen, welche maskiert sind, 3 Beispielzeilen |
| ein schreibgeschütztes |
| Teilstringsuche ohne SQL zu schreiben |
| Nullwerte, eindeutige Anzahl, Min/Max, Top-5-Werte |
Zusätzlich eine schema://tables-Ressource, sodass ein Client das gesamte Schema laden kann, ohne einen Tool-Aufruf zu verbrauchen.
Schnellstart
git clone https://github.com/dkautomation23/mcp-data-server.git
cd mcp-data-server
python -m venv .venv && . .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python -m mcp_data_server.seed # creates demo.db
cp .env.example .env # then point DATABASE_PATH at your file
python -m mcp_data_server # serves over stdioPython 3.10+. Die Demo-Datenbank enthält customers, orders, order_items und eine bewusst sensible Tabelle internal_notes, die unten verwendet wird, um die Zugriffsblockade durch die Whitelist zu zeigen.
Mit Claude Desktop verbinden
Zu claude_desktop_config.json hinzufügen (vollständiges Beispiel in examples/claude_desktop_config.json):
{
"mcpServers": {
"business-data": {
"command": "python",
"args": ["-m", "mcp_data_server"],
"cwd": "C:/path/to/mcp-data-server",
"env": {
"DATABASE_PATH": "C:/path/to/your.db",
"ALLOWED_TABLES": "customers,orders,order_items",
"MASKED_COLUMNS": "customers.email,customers.phone"
}
}
}
}Mit Claude Code verbinden
claude mcp add business-data -- python -m mcp_data_serverWie eine Sitzung aussieht
Tatsächliche Ausgabe des laufenden Servers (siehe examples/demo_session.md für das vollständige Protokoll):
// run_sql("SELECT status, COUNT(*) n, ROUND(SUM(total_eur)) revenue FROM orders GROUP BY 1 ORDER BY 3 DESC")
{
"sql": "SELECT status, COUNT(*) n, ROUND(SUM(total_eur)) revenue FROM orders GROUP BY 1 ORDER BY 3 DESC LIMIT 201",
"columns": ["status", "n", "revenue"],
"rows": [["paid", 92, 149914.0], ["pending", 39, 64596.0], ["refunded", 31, 45911.0]],
"row_count": 3, "truncated": false, "elapsed_ms": 0
}
// run_sql("DELETE FROM customers")
{ "error": "only SELECT (or WITH ... SELECT) statements are allowed" }
// run_sql("SELECT * FROM internal_notes")
{ "error": "table 'internal_notes' is not in the allowlist (allowed: customers, orders, order_items)" }
// run_sql("SELECT id, name, email FROM customers LIMIT 2")
{ "rows": [[1, "Customer 001", "***"], [2, "Customer 002", "***"]] }Konfiguration
Variable | Standard | Zweck |
|
| SQLite-Datei, die bereitgestellt wird (immer schreibgeschützt geöffnet) |
| alle | Komma-getrennte Whitelist; alles andere ist unsichtbar |
| – |
|
|
| harte Obergrenze pro Aufruf; Ergebnisse darüber werden als |
|
| eine längere Abfrage wird abgebrochen |
|
| Nur-Anhängen-Protokoll jeder Anweisung; leer deaktiviert es |
Tests
pytest -q............................... [100%]
31 passed in 1.77sDrei Ebenen: die SQL-Sicherheitsvorkehrungen (Injection, zweite Anweisungen, Kommentar-Schmuggel, verbotene Tabellen), die Datenbankebene gegen eine echte, vorbefüllte Datei (einschließlich eines Schreibversuchs, den SQLite selbst ablehnt), und sieben Tests, die den Server über das tatsächliche MCP-Protokoll steuern — denselben Handshake, list_tools und call_tool-Ablauf, den ein Desktop-Client durchführt.
Anpassung an den Stack eines Kunden
Postgres / MySQL: Ersetzen Sie die Verbindung in
db.pydurch einen gepoolten Treiber und eineSET TRANSACTION READ ONLY-Sitzung; die Validierungsebene bleibt unverändert.Geschäftsspezifische Tools: Fügen Sie eine Funktion mit
@mcp.tool()inserver.pyhinzu — ein gut benanntestop_customers(period)ist besser, als das Modell SQL schreiben zu lassen.HTTP-Transport anstelle von stdio:
mcp.run(transport="streamable-http"), dann hinter Ihrer eigenen Authentifizierung platzieren.
Lizenz
MIT — siehe LICENSE.
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 Servers
- Alicense-qualityAmaintenanceProvides a read-only PostgreSQL SQL surface for LLM agents via MCP, with defense-in-depth security layers for safe database queries.3MIT
- FlicenseAqualityCmaintenanceEnables read-only exploration and querying of PostgreSQL or MySQL databases via MCP, with schema discovery, safe SQL validation, natural language to SQL conversion, and CSV export.111
- Alicense-qualityBmaintenanceEnables governed, agent-agnostic data exploration by allowing users to ask natural language questions through MCP-compatible agents, executing safe, permission-scoped queries against data sources and returning interactive charts.48Apache 2.0
- Flicense-qualityCmaintenanceEnables read-only access to company data across PostgreSQL, MongoDB Atlas, and flat files through MCP tools, allowing AI assistants to query and retrieve information via natural language.
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
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/dkautomation23/mcp-data-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server