Skip to main content

KI Chatbots / MCP Server

BILD

Vorteile des MCP Servers

Der TeslaLogger MCP Server verbindet deine lokal gespeicherten Fahrzeugdaten mit KI-Assistenten wie Claude oder anderen MCP-fähigen Anwendungen. Das bringt mehrere praktische Vorteile:

Natürlichsprachliche Auswertung

Statt SQL-Abfragen oder Grafana-Dashboards kannst du einfach in normaler Sprache fragen – z.B. „Wie viel habe ich diese Woche geladen?" oder „Zeig mir meine längsten Fahrten im letzten Monat." Der KI-Assistent übersetzt die Frage automatisch in den passenden Tool-Aufruf.

Datensouveränität – keine Cloud

Alle Daten bleiben lokal auf deinem Raspberry Pi oder Docker-Host. Der MCP Server läuft im eigenen Netzwerk; es werden keine Fahrzeugdaten an externe Server übertragen. Die KI bekommt nur das, was du explizit abfragst.

Offenes Protokoll – viele Clients

MCP (Model Context Protocol) ist ein offener Standard. Neben Claude Desktop funktioniert der TeslaLogger MCP Server mit jedem kompatiblen Client – z.B. VS Code mit Copilot, Cursor, oder eigenen Skripten. Die Konfiguration ist minimal (eine URL, kein API-Key).

Komplexe Analysen ohne Programmierkenntnisse

Zusammenhänge, die in Grafana mehrere Dashboards erfordern würden, lassen sich per Chat auf einmal beantworten: „An welchen Tagen war mein Reifendruck niedrig und wie war gleichzeitig der Verbrauch?" – der Assistent kombiniert get_tpms und get_trips selbstständig.

Erweiterbar für eigene Workflows

Da der Server eine Standard JSON-RPC 2.0 API bietet, lässt er sich auch in Automatisierungen (z.B. n8n, Home Assistant Automations, eigene Skripte) einbinden – nicht nur in Chat-Clients.

Funktionstest

Raspberries verwenden Port 5001 für den MCP Server. Als Test kann man im Browser eingeben:

http://raspberry:5001/

Wenn alles klappt bekommt man als Ausgabe:

{"status":"ok","server":"TeslaLogger MCP Server","port":5001}

Im Docker muss man den Port öffnen:

	ports:
- ${TESLALOGGER_PORT:-5010}:5000
- 5001:5001

Chat-Client einrichten (Claude Desktop)

Als Beispiel mit Claude Desktop.

Claude Desktop runterladen:

https://claude.com/download

  • In den Einstellungen von Claude Desktop zu Entwickler gehen
  • Config bearbeiten
  • mcpServer hinzufügen
  • Wenn auf dem System Node.js nicht installiert ist, dann muss man es nachinstallieren: https://nodejs.org/en/download
  • ganz wichtig: nach dem speichern der Config muss Claude Desktop beendet und neu gestartet werden!
  • Prompt für einen Funktionstest: "Wie viele Fahrzeuge habe ich im Teslalogger"
{
"mcpServers": {
"TeslaLogger": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://raspberry:5001/mcp",
"--allow-http"
]
}
},
"preferences": {
"coworkScheduledTasksEnabled": false,
"ccdScheduledTasksEnabled": false,
"coworkWebSearchEnabled": true,
"epitaxyPrefs": {
"starred-local-code-sessions": [],
"starred-cowork-spaces": [],
"starred-session-groups": [],
"dframe-local-slice": {
"pinnedOrder": [],
"customGroupAssignments": {},
"customGroupOrder": {}
}
},
"sidebarMode": "chat"
}
}

Beispiel config für VS-Code mcp.json

{
"servers": {
"TeslaLogger mcp server": {
"url": "http://raspberry:5001/mcp",
"type": "http"
}
},
"inputs": []
}

Test ob der MCP Server funktioniert:

curl -X POST http://raspberry:5001/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"tools/list"
}'

Als Ausgabe kommen die Befehle, die der MCP Server kann:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "get_vehicles",
"description": "Retrieve all vehicles from TeslaLogger. Returns ID, display name, VIN, model and status.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
},
{
"name": "get_trips",
"description": "Retrieve trips for a vehicle. Returns start/destination, distance, consumption, duration and temperatures. Use 'from'/'to' for a specific date range, or 'days' to look back from now.",
...

Verfügbare Tools

get_vehicles

Liefert alle Fahrzeuge.

Parameter: keine


get_trips

Liefert Fahrten im Zeitraum.

Parameter:

  • car_id (required)
  • from (optional, yyyy-MM-dd oder yyyy-MM-dd HH:mm:ss)
  • to (optional, yyyy-MM-dd oder yyyy-MM-dd HH:mm:ss)
  • days (optional, Default 7; wird ignoriert, wenn from gesetzt ist)

get_charges

Liefert Ladevorgänge im Zeitraum.

Parameter:

  • car_id (required)
  • from (optional)
  • to (optional)
  • days (optional)

get_errors

Liefert Alerts/Fehler aus alerts/alert_names, gefiltert auf startedAt.

Parameter:

  • car_id (required)
  • from (optional)
  • to (optional)
  • days (optional)

get_degradation

Liefert Degradation-relevante Ladepunkte (max range, odometer).

Parameter:

  • car_id (required)
  • from (optional)
  • to (optional)
  • days (optional)

get_firmware

Liefert Firmware-Historie aus car_version.

Parameter:

  • car_id (required)
  • from (optional)
  • to (optional)
  • days (optional)

get_tpms

Liefert TPMS-Werte aus Tabelle TPMS, stündlich aggregiert.

Parameter:

  • car_id (required)
  • from (optional)
  • to (optional)
  • days (optional)

Rückgabe-Felder:

  • hour
  • tpms_fl
  • tpms_fr
  • tpms_rl
  • tpms_rr

Zeitfilter-Logik

Alle Tools mit Zeitfilter nutzen dieselbe Logik:

  1. Wenn from/to gesetzt sind, wird dieser Bereich verwendet.
  2. Wenn from nicht gesetzt ist, wird days genutzt (now - days bis now).
  3. Wenn to fehlt, ist to = now.

Logging

Alle MCP Requests werden mit Methode, ID und Parametern geloggt.

Beispiel-Logeintrag:

MCP Request: method=tools/call id=123 params={...}

Beispiel-Request (tools/list)

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}

Beispiel-Request (tools/call)

{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_charges",
"arguments": {
"car_id": 1,
"from": "2025-01-01 00:00:00",
"to": "2025-01-31 23:59:59"
}
}
}