MariaDB MCP Server
Allows read-only querying of a MariaDB database, providing tools for executing SELECT queries, exploring schema, and listing tables and databases.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MariaDB MCP Serverlist all tables in the database"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MariaDB MCP Server mit streamable HTTP für Open-WebUI
Ein read-only MCP Server, der als Schnittstelle zwischen einer MariaDB Datenbank und Open-WebUI dient. Der Server erlaubt ausschließlich lesende Abfragen und blockiert alle Schreiboperationen wie INSERT, UPDATE, DELETE, CREATE, ALTER, DROP usw.
Hinweis: Der Server verwendet
mysql-connector-python, der vollständig mit MariaDB kompatibel ist und keine externen Systembibliotheken benötigt.
🚀 Schnellstart
Mit Docker (empfohlen)
# Klone das Repository
git clone https://github.com/AndiAtom/mariadb-mcp-strhttp.git
cd mariadb-mcp-strhttp
# Starte mit Docker Compose (enthält MariaDB + MCP Server)
docker-compose up -d
# Der Server ist jetzt unter http://localhost:8000 verfügbarOhne Docker
# Installiere Abhängigkeiten
pip install -r requirements.txt
# Starte den Server
./start_server.sh
# Oder direkt mit Python
python -m src.serverRelated MCP server: tusk-mcp
📋 Konfiguration
Umgebungsvariablen
Variable | Beschreibung | Standardwert |
| MariaDB Hostname |
|
| MariaDB Port |
|
| MariaDB Benutzername |
|
| MariaDB Passwort |
|
| Standard-Datenbank |
|
| Server Host |
|
| Server Port |
|
| Log-Level |
|
Konfigurationsdatei
Erstelle oder bearbeite config.json:
{
"server": {
"host": "0.0.0.0",
"port": 8000,
"log_level": "info"
},
"database": {
"host": "localhost",
"port": 3306,
"user": "mcpuser",
"password": "securepassword",
"database": "mydatabase"
}
}🔒 Sicherheitsfeatures
Blockierte Befehle
Der Server blockiert alle Schreiboperationen, einschließlich:
DDL (Data Definition Language)
CREATE- Tabellen, Datenbanken, Indizes erstellenALTER- Objekte ändernDROP- Objekte löschenTRUNCATE- Tabellen leerenRENAME- Objekte umbenennen
DML (Data Manipulation Language)
INSERT- Daten einfügenUPDATE- Daten aktualisierenDELETE- Daten löschenREPLACE- Daten ersetzenLOAD- Daten ladenMERGE- Daten zusammenführen
DCL (Data Control Language)
GRANT- Berechtigungen erteilenREVOKE- Berechtigungen entziehenDENY- Berechtigungen verweigern
Transaktionssteuerung
COMMIT- Transaktionen bestätigenROLLBACK- Transaktionen zurücksetzenSAVEPOINT- Speicherpunkte erstellenRELEASE- Speicherpunkte freigeben
Administrative Befehle
SHUTDOWN- Server herunterfahrenKILL- Verbindungen beendenPURGE- Logs bereinigenRESET- ZurücksetzenFLUSH- Caches leerenSET PASSWORD- Passwort ändernSET GLOBAL- Globale Variablen setzenSET SESSION- Sitzungsvariablen setzen
Replikation
CHANGE MASTER- Master ändernSTART SLAVE- Slave startenSTOP SLAVE- Slave stoppen
Erlaubte Befehle
Nur folgende Befehle sind erlaubt:
Datenabfragen
SELECT- Daten abfragenWITH/CTE- Common Table Expressions
Metadaten-Abfragen
SHOW- Informationen anzeigen (TABLES, DATABASES, COLUMNS, INDEX, etc.)DESCRIBE/DESC- Tabellenstruktur anzeigenEXPLAIN- Ausführungsplan anzeigenANALYZE- Ausführungsplan analysieren
Informationsschema
INFORMATION_SCHEMA- Metadaten abfragen
Transaktionssteuerung (nur lesend)
START TRANSACTION READ ONLY- Read-Only Transaktion startenBEGIN READ ONLY- Read-Only Transaktion beginnenSET TRANSACTION READ ONLY- Transaktion als read-only setzen
Sonstige
USE- Datenbank auswählenHELP- Hilfe anzeigen
🎯 API Endpunkte
Haupt-Endpunkte
Methode | Endpunkt | Beschreibung |
GET |
| Server-Informationen |
GET |
| Health-Check |
POST |
| SQL-Abfrage ausführen |
GET |
| SQL-Abfrage validieren |
POST |
| SQL-Abfrage validieren |
GET |
| SQL-Abfrage mit Streaming |
Datenbank-Endpunkte
Methode | Endpunkt | Beschreibung |
GET |
| Alle Tabellen auflisten |
GET |
| Tabellen einer Datenbank auflisten |
GET |
| Alle Datenbanken auflisten |
GET |
| Schema einer Tabelle abrufen |
GET |
| Spalten einer Tabelle abrufen |
Hilfs-Endpunkte
Methode | Endpunkt | Beschreibung |
GET |
| Beispiele für erlaubte Abfragen |
📊 API Beispiele
Einfache Abfrage
curl -X POST http://localhost:8000/query \
-H "Content-Type: application/json" \
-d '{"query": "SELECT * FROM customers LIMIT 10"}'Antwort:
{
"success": true,
"results": [
{"id": 1, "name": "Max Mustermann", "email": "max@example.com"},
{"id": 2, "name": "Anna Schmidt", "email": "anna@example.com"}
],
"columns": ["id", "name", "email"],
"row_count": 2,
"query": "SELECT * FROM customers LIMIT 10"
}Streaming Abfrage
curl http://localhost:8000/query/stream?query=SELECT%20*%20FROM%20large_tableAntwort (Server-Sent Events):
data: {"type": "metadata", "columns": ["id", "name"], "query": "SELECT * FROM large_table"}
data: {"type": "row", "data": {"id": 1, "name": "Row 1"}}
data: {"type": "row", "data": {"id": 2, "name": "Row 2"}}
data: {"type": "complete", "total_rows": 1000}Abfrage validieren
curl -X POST http://localhost:8000/query/validate \
-H "Content-Type: application/json" \
-d '{"query": "INSERT INTO users VALUES (1, \"test\")"}'Antwort:
{
"valid": false,
"error": "Abfrage enthält Schreiboperationen. Nur lesende Abfragen sind erlaubt.",
"blocked_keywords": ["INSERT"]
}Tabellen auflisten
curl http://localhost:8000/tablesAntwort:
{
"tables": ["customers", "orders", "products"],
"count": 3
}Schema einer Tabelle abrufen
curl http://localhost:8000/schema/customers🔧 Open-WebUI Integration
MCP Server Konfiguration
Füge in Open-WebUI einen neuen MCP Server hinzu:
{
"name": "MariaDB MCP Server",
"url": "http://localhost:8000",
"type": "http",
"readOnly": true,
"capabilities": {
"query": true,
"stream": true,
"validate": true
}
}Beispiel-Abfragen für Open-WebUI
Daten abfragen:
SELECT * FROM customers WHERE status = 'active'Tabellenstruktur anzeigen:
DESCRIBE customersAusführungsplan analysieren:
EXPLAIN SELECT * FROM orders WHERE customer_id = 1Datenbanken auflisten:
SHOW DATABASESTabellen auflisten:
SHOW TABLESRead-Only Transaktion:
START TRANSACTION READ ONLY; SELECT * FROM accounts; -- Jede Schreiboperation würde hier fehlschlagen
🧪 Testen
Automatisierte Tests
# Installiere Test-Abhängigkeiten
pip install pytest httpx
# Führe Tests aus
pytest tests/Manuelles Testen
Verbindung testen:
curl http://localhost:8000/healthErlaubte Abfrage testen:
curl -X POST http://localhost:8000/query \ -d '{"query": "SELECT 1"}'Blockierte Abfrage testen:
curl -X POST http://localhost:8000/query \ -d '{"query": "INSERT INTO test VALUES (1)"}'→ Sollte Fehler 403 zurückgeben
📦 Abhängigkeiten
Der Server verwendet folgende Python-Pakete:
fastapi - Web-Framework für die API
uvicorn - ASGI-Server
mysql-connector-python - MariaDB/MySQL Connector (vollständig kompatibel mit MariaDB)
sse-starlette - Server-Sent Events Unterstützung
pydantic - Datenvalidierung
python-multipart - Formular-Daten Unterstützung
Hinweis: Wir verwenden
mysql-connector-pythonstattmariadb, da dieser Connector keine externen Systembibliotheken benötigt und damit Docker-freundlicher ist. Er ist vollständig kompatibel mit MariaDB.
🚧 Fehlerbehebung
Häufige Probleme
Verbindungsfehler zur Datenbank:
Prüfe Host, Port, Benutzername und Passwort
Stelle sicher, dass der MariaDB Server läuft
Prüfe die Firewall-Einstellungen
Teste die Verbindung manuell:
mysql -h hostname -u user -p
Blockierte Abfragen:
Der Server blockiert alle Schreiboperationen
Verwende nur SELECT, SHOW, DESCRIBE, EXPLAIN usw.
Prüfe die Validierung mit
/query/validate
Port bereits belegt:
Ändere den Port in der Konfiguration
Oder beende den bestehenden Prozess
Docker-Probleme:
Stelle sicher, Docker ist installiert und läuft
Prüfe die Logs mit
docker-compose logsFühre einen Clean-Build durch:
docker-compose build --no-cache
📚 MariaDB & MySQL Dokumentation
Für eine vollständige Liste der SQL-Befehle:
🔄 Versionshistorie
v1.0.0 (2024-07-28): Erste stabile Version
Read-only SQL-Validierung
Streaming-Unterstützung
Vollständige API-Dokumentation
Docker-Unterstützung
Wechsel zu mysql-connector-python für bessere Docker-Kompatibilität
🤝 Mitwirken
Fork das Repository
Erstelle einen Feature-Branch (
git checkout -b feature/AmazingFeature)Commit deine Änderungen (
git commit -m 'Add some AmazingFeature')Push zum Branch (
git push origin feature/AmazingFeature)Öffne einen Pull Request
📄 Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert - siehe LICENSE für Details.
📞 Kontakt
GitHub: AndiAtom/mariadb-mcp-strhttp
Issues: GitHub Issues
Hinweis: Dieser Server ist ausschließlich für lesende Abfragen konzipiert. Alle Versuche, Schreiboperationen auszuführen, werden blockiert und führen zu einem Fehler.
Technischer Hinweis: Der Server verwendet mysql-connector-python, der vollständig mit MariaDB kompatibel ist und keine externen C-Bibliotheken benötigt, was die Docker-Installation deutlich vereinfacht.
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.
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/AndiAtom/mariadb-mcp-strhttp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server