User Manual

awaBerry | Testen: mcpclients

Testen Sie den awaBerry MCP-Server mit MCP-Clients — konfigurieren und verbinden Sie einen MCP-kompatiblen Client, um die Tool-Exposition und...

Test: mcpclients

Zusammenfassung

Das Skript `testStartAwaberryMcp.js` nutzt `dotenv` zur Verwaltung von Umgebungsvariablen, insbesondere wird `deviceName` benötigt. Es orchestriert eine Testsequenz über `sendMcpRequest` an einen MCP-Server. Dies umfasst die Initialisierung einer Protokollsitzung, das Auflisten verfügbarer Werkzeuge, den Aufbau einer sicheren Verbindung zu einem angegebenen Gerät (Abrufen von `sessionToken` und `deviceuuid`) und schließlich die Ausführung eines Remote-Terminalbefehls wie `date`, um die betriebliche Integrität zu bestätigen. Jeder Schritt wird validiert, wobei ein Fehler an einer beliebigen Stelle zum Abbruch des Prozesses führt.

Beschreibung

Übersicht

Das Skript testStartAwaberryMcp.js dient als umfassender Integrationstest für einen MCP (Master Control Program)-Server. Es validiert den End-to-End-Kommunikationsfluss, vom anfänglichen Handshake bis zur Ausführung von Befehlen auf einem verbundenen Gerät. Das Skript ist in Node.js geschrieben und verwendet die ES-Modul-Syntax.

Umgebungs-Setup

Das Skript stützt sich auf Umgebungsvariablen, die aus einer .env-Datei geladen werden, die sich zwei Verzeichnisse über dem Speicherort des Skripts befindet (../../.env). Dazu wird die Bibliothek dotenv verwendet. Eine kritische Umgebungsvariable, deviceName, muss vorhanden sein; andernfalls wird das Skript mit einem Fehler beendet. Diese Variable gibt das Zielgerät für die Verbindung an.

import dotenv from 'dotenv';
import path from 'path';
import { fileURLToPath } from 'url';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const envFilePath = path.resolve(__dirname, '../../.env');
const result = dotenv.config({ path: envFilePath });

if (result.error) {
    console.error('❌ [MCP Test] Fehler beim Laden der .env-Datei:', result.error);
    process.exit(1);
}

if (!process.env.deviceName) {
    console.error('\n❌ [MCP Test] Fehlende erforderliche Umgebungsvariable: deviceName');
    process.exit(1);
}

Testablauf

Die asynchrone Funktion testMcpServer kapselt den gesamten Testprozess, der in vier verschiedene Phasen unterteilt ist:

Test 1: Initialisieren

Sendet eine initialize-Anfrage an den MCP-Server mit einer angegebenen Protokollversion, leeren Fähigkeiten und Client-Informationen. Dieser Schritt stellt die grundlegende Kommunikationssitzung her. Ein Fehler bei der Initialisierung führt zum Abbruch des Skripts.

const initResponse = await sendMcpRequest('initialize', {
        protocolVersion: '2024-11-05',
        capabilities: {},
        clientInfo: { name: 'test-client', version: '1.0.0' }
    });

Test 2: Werkzeuge auflisten

Nach erfolgreicher Initialisierung fordert das Skript eine Liste der verfügbaren Werkzeuge vom MCP-Server über den Endpunkt tools/list an. Es wird überprüft, ob die Antwort ein tools-Array enthält. Die Anzahl der gefundenen Werkzeuge wird protokolliert.

const toolsResponse = await sendMcpRequest('tools/list', {});

Test 3: Verbindung zum Gerät herstellen

Dieser entscheidende Schritt ruft das Werkzeug connect_to_device auf dem MCP-Server auf und übergibt den aus den Umgebungsvariablen abgerufenen deviceName. Der MCP-Server fügt automatisch notwendige Anmeldeinformationen ein. Nach erfolgreicher Verbindung extrahiert das Skript sessionToken und deviceuuid aus der Antwort, die für nachfolgende authentifizierte Operationen unerlässlich sind.

const connectResponse = await sendMcpRequest('tools/call', {
        name: 'connect_to_device',
        arguments: { deviceName: process.env.deviceName }
    });
// ... Extraktion von sessionToken und deviceuuid

Test 4: Befehl ausführen

Schließlich nutzt das Skript den erhaltenen sessionToken und deviceuuid, um das Werkzeug execute_terminal_command aufzurufen. Es sendet einen einfachen date-Befehl an das verbundene Gerät. Die Antwort wird analysiert, um auf ein success-Flag zu prüfen, das den Ausführungsstatus des Befehls auf dem Remote-Gerät bestätigt.

const executeResponse = await sendMcpRequest('tools/call', {
        name: 'execute_terminal_command',
        arguments: {
            sessionToken,
            deviceuuid,
            command: 'date'
        }
    });

Fehlerbehandlung

Das Skript integriert eine robuste Fehlerbehandlung in jeder Phase. Wenn ein sendMcpRequest fehlschlägt oder ein unerwartetes Ergebnis liefert, wird eine Fehlermeldung auf der Konsole protokolliert und der Prozess mit einem Statuscode ungleich Null beendet, was auf einen Testfehler hinweist. Ein allgemeiner try-catch-Block behandelt auch unerwartete Ausnahmen während der Ausführung von testMcpServer.