Kapitel 14: Qualitätssicherung – Der Server-Inspector & das Quality-Scoring
Einen einfachen MCP-Server zu schreiben ist schnell erledigt. Einen robusten, spezifikationskonformen und KI-optimierten MCP-Server zu bauen, ist jedoch eine echte Ingenieursaufgabe. In diesem Kapitel lernen wir, wie wir mit dem Open-Source-Werkzeug mcp-tester die Qualität unserer Server-Implementierung objektiv messen, Spezifikationsänderungen frühzeitig erkennen und systematisch optimieren.
1. Warum ist Qualität bei MCP so erfolgskritisch?
Ein Large Language Model besitzt keinen menschlichen gesunden Menschenverstand: Es verlässt sich zu 100 % auf die Metadaten und Schemata, die der MCP-Server beim Handshake und Aufruf bereitstellt. Unvollständige oder veraltete Server-Antworten führen direkt zu Fehlverhalten:
- Fehlende Tool-Beschreibungen: Das Modell kann nicht entscheiden, welches Werkzeug für eine Aufgabe das richtige ist, und beginnt zu raten oder zu halluzinieren.
- Fehlende Output-Schemata: Wenn ein Tool unstrukturierten Text statt validiertem JSON liefert (siehe Kapitel 9), muss das Modell die Rohdaten selbst parsen – was Rechenzeit kostet und fehleranfällig ist.
- Fehlende Prompts & Richtlinien: Das Modell kennt keine Anwendungsregeln oder Systemkontexte für die Werkzeuge (siehe Kapitel 6).
2. Der `mcp-tester`: Das Diagnosewerkzeug für Entwickler
Um diese Lücke zu schließen, haben wir den mcp-tester entwickelt. Er agiert als spezialisierter, protokollstrenger MCP-Client, der Ihren Server auf Herz und Nieren prüft:

- Open-Source-Repository: github.com/hmsoft0815/mlc_mcptester
(Git Clone:git@github.com:hmsoft0815/mlc_mcptester.git) - Produktseite & Dokumentation: mlcgo.eu/products/mlc-tester
- Technologie: Entwickelt in Go, optimiert für lokale Ausführung (Stdio) und Netzwerk-Server (Streamable HTTP / SSE).
3. Die entscheidenden Vorteile des `mcp-tester`
Warum reicht es nicht aus, den Server einfach mit Claude Desktop oder Cursor auszuprobieren? Der mcp-tester bietet entscheidende architektonische Vorteile:
A. Frühzeitige Erkennung von Spezifikationsänderungen (Spec Drift Detection)
Das Model Context Protocol entwickelt sich dynamisch weiter:
- Neue Transport-Standards (Streamable HTTP statt reiner SSE-Endpunkte),
- Neue Spezifikationserweiterungen (z. B. Tasks nach SEP-2663 oder Skills over MCP nach SEP-2640),
- Strengere Anforderungen an Handshake-Capabilities und Metadaten (wie Icons oder Annotation-Hints).
Wenn sich die offizielle Spezifikation weiterentwickelt oder Ihr SDK im Hintergrund veraltet, verhält sich ein Standard-LLM-Client oft unvorhersehbar: Er schlägt plötzlich stillschweigend fehl oder ignoriert Werkzeuge. Der mcp-tester validiert das Drahtprotokoll direkt gegen die Spezifikation. Veraltete JSON-RPC-Strukturen, fehlerhafte Header oder ungültige Schemata werden sofort als Warnung oder Fehler markiert – lange bevor Ihre Nutzer im echten Chat darauf stoßen.
B. Das Punktesystem (Quality Score 0–100) als Optimierungs-Roadmap
Ein einfaches „Pass/Fail“ hilft Entwicklern kaum weiter. Ein Server kann formal lauffähig sein und dennoch für KIs ungeeignet sein. Der inspect-Befehl des Testers vergibt daher einen Quality Score von 0 bis 100 Punkten und liefert eine klare, priorisierte To-Do-Liste:
./bin/mcp-tester inspect --profile my-serverDas Bewertungsschema im Detail:
- Fehlende Prompts (-20 Punkte):
Ein professioneller Server sollte mindestens einen System-Prompt bereitstellen, der dem LLM erklärt, wie die angebotenen Werkzeuge sinnvoll orchestriert werden. - Fehlende Tool-Beschreibungen (-5 Punkte pro Tool):
Jedes Werkzeug ohne aussagekräftige Erklärung wird rigoros abgestraft, da es die Hauptursache für Modell-Fehlentscheidungen ist. - Fehlende Output-Schemata (-2 Punkte pro Tool):
Strukturierte JSON-Rückgabewerte erleichtern dem Modell die Weiterverarbeitung enorm. - Visuelle Metadaten (Icons):
Prüfung, ob referenzierte Icon-URIs valide und erreichbar sind.
Erreicht Ihr Server beispielsweise 73/100 Punkte, listet der Inspector exakt auf:
„-20 Pkt: Keine Prompts registriert; -5 Pkt: Tool 'export_db' besitzt keine Beschreibung; -2 Pkt: Tool 'query' liefert kein structured output schema.“
Damit erhalten Sie sofort konkrete Hebel zur Optimierung.
C. Black-Box-Integrationstest vs. Unit-Test
Ein Go- oder Python-Unit-Test prüft lediglich die interne Funktion (z. B. handleAdd(1, 2) == 3).
Der mcp-tester prüft hingegen das tatsächliche Systemverhalten von außen:
- Funktioniert der Handshake über Stdio-Pipes oder Streamable HTTP?
- Werden JSON-Typen korrekt serialisiert?
- Werden Timeouts und Cancellation-Signale sauber verarbeitet?
4. Validierung visueller Metadaten (Icons)
Seit den Spezifikationsrevisionen für Rich-Clients können Tools, Ressourcen und Prompts mit Icons ausgestattet werden. Der Tester bietet spezialisierte Flags, um sicherzustellen, dass keine fehlerhaften URLs ausgeliefert werden:
# Prüft Erreichbarkeit aller Icon-URIs im Server
./bin/mcp-tester list --check-icons --profile my-server
# Lädt alle Icons in einen lokalen Ordner herunter (zur manuellen Sichtprüfung)
./bin/mcp-tester list --download-icons "./icons_export" --profile my-server5. Checkliste für den „Perfekten Server“ (100/100 Score)
Um im mcp-tester inspect die volle Punktzahl zu erreichen, sollte Ihre Implementierung folgende Kriterien erfüllen:
- Handshake & Version: Der Server meldet eine aktuelle Protokoll-Version und verhandelt Capabilities sauber aus.
- Tool-Beschreibungen: Jedes Werkzeug enthält eine präzise Erklärung mit Einsatzszenarien und Trigger-Begriffen.
- Vollständige Typisierung: Input-Argumente und Output-Daten sind über standardkonforme JSON-Schemata typisiert.
- Prompts hinterlegt: Mindestens ein Prompt definiert den Systemkontext oder standardisierte Workflows für das Modell.
- Icon-Integrität: Alle deklarierten Icon-Links sind erreichbar und valide formatiert.
6. Die perfekte Kombination: Unit-Tests & MCP-Tester
In der Praxis empfiehlt sich eine zweistufige Teststrategie:
┌────────────────────────────────────────────────────────┐
│ Unit-Tests │
│ Prüft interne Fachlogik & Edge Cases in Millisek. │
└───────────────────────────┬────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ mcp-tester inspect │
│ Prüft Protokoll-Konformität, Schemata & Score │
└───────────────────────────┬────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ mcp-tester test (CI/CD Skripte) │
│ Automatische Regressionstests vor jedem Deployment │
└────────────────────────────────────────────────────────┘Beispiel: Unit-Test für einen Go-Tool-Handler
func TestHandleAdd(t *testing.T) {
ctx := context.Background()
args := map[string]any{"a": 10.0, "b": 20.0}
result, structured, err := handleAdd(ctx, nil, args)
if err != nil {
t.Fatalf("Unerwarteter Fehler: %v", err)
}
if structured.(map[string]any)["sum"] != 30.0 {
t.Errorf("Unerwartetes Ergebnis: %v", structured)
}
}Faustregel: Nutzen Sie Unit-Tests für die interne Rechenlogik und den mcp-tester für die Protokoll-Konformität, Schemavalidierung und Interaktionsqualität.
Fazit
Qualitätssicherung bei MCP bedeutet, Reibungsverluste zwischen Server und KI systematisch zu eliminieren. Durch den Einsatz des mcp-tester (github.com/hmsoft0815/mlc_mcptester) erkennen Sie Protokoll-Abweichungen frühzeitig und erhalten über den Quality Score eine glasklare Anleitung, um Ihren Server auf das Niveau führender Produktionssysteme zu heben.
← Kapitel 13: Das Artifact-Pattern | Inhaltsverzeichnis | Nächstes Kapitel: Automatisierung & CI/CD →
Copyright Michael Lechner – 2026-09-27 (Aktualisiert für MCP Quality Scoring, Spec Drift Detection & GitHub Open Source)