Ein Projekt zum Lernen, wie man eine SQLite-Datenbank mit einem LLM über einen MCP-Server abfragt. Verwendet FastMCP für eine einfache Python-Implementierung.
Das Model Context Protocol (MCP) ist ein offener Standard, der es Large Language Models (LLMs) ermöglicht, mit externen Datenquellen und Tools zu kommunizieren. In diesem Projekt nutzen wir MCP, um einem LLM Zugriff auf eine SQLite-Datenbank zu geben.
Der Anfrager (i.d.R. das Programm, in dem die KI (LLM) läuft) kann
-
eine Übersicht der Werkzeuge eines MCP-Servers anfragen: Der Client fragt den/die Server ab, welche Tools sie zur Verfügung stellen. Die Protocol Message Method dazu ist
tools/list -
Werkzeuge verwenden: Danach kann der Client die Tools nutzen, indem er eine
tools/call-Methode verwendet. -
(Änderungen auflisten lassen)
tools/list_changed
MCP Protokoll-Ablauf (nach https://modelcontextprotocol.io/specification/2025-03-26/server/tools#message-flow)
sequenceDiagram
participant LLM as LLM
participant Client as Client
participant Server as Server
Note over LLM,Server: Discovery
Client->>Server: tools/list
Server-->>Client: List of tools
Note over LLM,Client: Tool Selection
LLM->>LLM: Select tool to use
Note over Client,Server: Invocation
Client->>Server: tools/call
Server-->>Client: Tool result
LLM->>LLM: Process result
Note over Client,Server: Updates
Server-->>Client: tools/list_changed
Client->>Server: tools/list
Server-->>Client: Updated tools
Antworten des Servers werden per JSON RPC als Tool Result übertragen. Das können Text, Audio, Bild oder Embedded sein.
Hier das Beispiel Text nach https://modelcontextprotocol.io/specification/2025-03-26/server/tools#text-content
{
"type": "text",
"text": "Tool result text"
}graph TB
User[👤 Benutzer] -->|Frage in natürlicher Sprache| Claude[🤖 Claude Desktop]
Claude -->|MCP Protokoll| Server[🔧 MCP Server<br/>FastMCP]
Server -->|SQL Query| DB[(📊 schule.db<br/>SQLite)]
DB -->|Ergebnis| Server
Server -->|JSON Daten| Claude
Claude -->|Antwort| User
style Claude fill:#e8e8e8,stroke:#000,stroke-width:3px,color:#000
style Server fill:#c0c0c0,stroke:#000,stroke-width:3px,color:#000
style DB fill:#888,stroke:#000,stroke-width:3px,color:#fff
sequenceDiagram
participant U as 👤 Benutzer
participant C as 🤖 Claude
participant M as 🔧 MCP Server
participant D as 📊 Datenbank
U->>C: "Zeige alle Schüler aus Klasse XY"
C->>C: Analysiere Anfrage
C->>M: Tool-Aufruf: query_database()
Note over C,M: MCP Protokoll (JSON-RPC)
M->>M: Validiere Query (nur SELECT)
M->>D: SELECT * FROM schueler WHERE klasse='XY'
D->>M: Ergebnis-Rows
M->>M: Konvertiere zu JSON
M->>C: JSON Antwort
C->>C: Antwort in Chat-Nachricht umsetzen
C->>U: "Hier sind die Schüler aus XY: ..."
sqlite-mcp/
├── src/
│ └── index.py # Der MCP-Server Code (Python)
├── create_database.py # Script zum Initialisieren der Datenbank
├── requirements.txt # Python Abhängigkeiten
├── pyproject.toml # Python Projekt-Konfiguration
└── schule.db # Die SQLite-Datenbank (wird erstellt)
Die Datenbank schule.db enthält vier Tabellen:
- Enthält Informationen über Schüler (Name, Klasse, Geburtsdatum, Email)
- 10 Beispiel-Schüler aus verschiedenen Klassen
- Informationen über Lehrer (Name, Fach, Raum)
- 5 Lehrer mit verschiedenen Fächern
- Kursinformationen (Name, Lehrer, Raum, Zeitplan)
- 5 verschiedene Kurse
- Noten von Schülern in verschiedenen Kursen
- Verschiedene Arten: Klausuren, mündliche Noten, Hausaufgaben
Öffne PowerShell im Projektordner mit Admin-Rechten und führe aus:
git clone https://github.com/FlowTheTensor/SQLite-mit-MCP.git
cd SQLite-mit-MCPpython -m venv venv
.\venv\Scripts\Activate.ps1pip install -r requirements.txtDas installiert FastMCP und alle benötigten Python-Pakete.
python create_database.pyDu solltest die Meldung sehen: "✓ Datenbank erfolgreich erstellt"
Automatische Konfiguration (empfohlen):
Führe einfach das Konfigurations-Script aus:
python generate_config.pyDas Script zeigt dir die Konfiguration an und speichert sie in claude_desktop_config.json.
Dann:
- Gehe in Claude Desktop unten Links auf dein Nutzersymbol (ggf. Fenster maximieren)
- Dort
Einstellungen - Unter
EntwickleraufConfig bearbeiten - Öffne die Datei
claude_desktop_config.jsonmit einem Texteditor - Kopiere den Inhalt aus der generierten
claude_desktop_config.jsonhinein
Wichtig: Claude Desktop benötigt absolute Pfade - relative Pfade funktionieren nicht!
- Schließe Claude Desktop über den Taskmanager und Starte Claude Desktop neu.
- Nun sollte der MCP-Server in Claude verfügbar sein und auf
runningstehen.
Stelle Claude eine Frage wie:
Welche Schüler gibt es in der Datenbank?
Claude sollte jetzt die Datenbank abfragen können!
- "Zeige alle Schüler"
- "Welche Lehrer gibt es?"
- "Liste alle Kurse auf"
- "Zeige alle Schüler aus Klasse 10a"
- "Welche Noten hat Max Mustermann?"
- "Wer unterrichtet Informatik?"
- "Berechne den Notendurchschnitt von Anna Schmidt"
- "Welche Schüler haben in Mathematik eine 1 vor dem Komma?"
- "Zeige alle Klausurnoten mit Schülernamen und Kursnamen"
Die Datenbank hat 4 Tabellen:
📚 schueler: Schülerinformationen
- id, vorname, nachname, klasse, geburtsdatum, email
👨🏫 lehrer: Lehrerinformationen
- id, vorname, nachname, fach, raum
📖 kurse: Kursinformationen
- id, kursname, lehrer_id, raum, wochentag, uhrzeit
📝 noten: Noten
- id, schueler_id, kurs_id, note, datum, art
Claude antwortet, aber ohne Datenbankzugriff? → Server wurde nicht richtig konfiguriert oder Claude nicht neu gestartet
"ModuleNotFoundError: No module named 'fastmcp'" Fehler?
→ pip install -r requirements.txt ausführen
→ Stelle sicher, dass die venv aktiviert ist oder nutze den venv-Python-Pfad in der Konfiguration
Datenbank leer?
→ python create_database.py ausführen
Python-Befehl nicht gefunden?
→ Versuche py statt python
→ Stelle sicher, dass Python installiert ist
- Du stellst Claude eine Frage
- Claude erkennt, dass es Datenbankinfos braucht
- Claude ruft eines der Tools auf:
list_tables- Welche Tabellen gibt es?describe_table- Wie sieht eine Tabelle aus?query_database- SQL-Abfrage ausführen
- Der MCP-Server führt die Abfrage aus
- Claude bekommt das Ergebnis und antwortet dir
- Stelle 5 verschiedene Fragen an die Datenbank
- Lass dir die Struktur aller Tabellen zeigen
- Frage nach dem besten Schüler in einem Fach
- Lass Claude eine komplexe Abfrage mit mehreren Tabellen erstellen
- Experimentiere mit Aggregationen (Durchschnitt, Anzahl, etc.)
Viel Erfolg! 🚀