Skip to content

Latest commit

 

History

History
315 lines (224 loc) · 7.17 KB

File metadata and controls

315 lines (224 loc) · 7.17 KB

Übungsaufgaben zum MCP Tutorial

Diese Aufgaben helfen Studierenden, das Model Context Protocol Schritt für Schritt zu verstehen.

Voraussetzungen

  • Python 3.10 oder höher
  • Grundkenntnisse in Python (async/await)
  • MCP SDK installiert (pip install -r requirements.txt)

Teil 1: Erste Schritte

Aufgabe 1.1: Projekt einrichten und testen

  1. Virtuelle Umgebung erstellen und aktivieren
  2. Abhängigkeiten installieren
  3. Client ausführen und Ausgabe verstehen

Fragen:

  • Was passiert, wenn der Client gestartet wird?
  • Wie kommunizieren Client und Server?
  • Welches Protokoll wird verwendet (stdio, HTTP, etc.)?

Aufgabe 1.2: Code-Verständnis

Lesen Sie src/server/simple_server.py und beantworten Sie:

  1. Wie viele Tools bietet der Server an?
  2. Welche Parameter benötigt das calculate-Tool?
  3. Was ist der Unterschied zwischen einem Tool und einer Resource?
  4. Welche Rolle spielt der Decorator @app.list_tools()?

Teil 2: Server erweitern

Aufgabe 2.1: Subtraction Tool hinzufügen

Erweitern Sie das calculate-Tool um die Operation "subtract" (Subtraktion).

Schritte:

  1. Fügen Sie "subtract" zum enum in inputSchema hinzu
  2. Implementieren Sie die Subtraktionslogik in call_tool()
  3. Testen Sie mit dem Client

Testfälle:

  • 10 - 5 = 5
  • 100 - 150 = -50

Aufgabe 2.2: Neues Tool "power"

Erstellen Sie ein komplett neues Tool namens power, das eine Zahl potenziert.

Spezifikation:

  • Name: power
  • Parameter: base (number), exponent (number)
  • Rückgabe: base^exponent

Beispiele:

  • 2^3 = 8
  • 5^2 = 25
  • 10^0 = 1

Hinweis: Verwenden Sie base ** exponent in Python.

Aufgabe 2.3: String-Tool erstellen

Erstellen Sie ein Tool text_transform mit folgenden Operationen:

  • uppercase: Text in Großbuchstaben
  • lowercase: Text in Kleinbuchstaben
  • reverse: Text umkehren
  • length: Länge des Texts zurückgeben

Parameter:

  • operation: string (enum)
  • text: string

Testen Sie mit:

await session.call_tool("text_transform", {
    "operation": "reverse",
    "text": "Hallo MCP"
})
# Erwartetes Ergebnis: "PCM ollaH"

Teil 3: Resources

Aufgabe 3.1: Neue Resource erstellen

Erstellen Sie eine Resource info://version, die folgende Informationen zurückgibt:

  • Server-Name
  • Version
  • Unterstützte Protokolle

Format:

Server: simple-example-server
Version: 1.0.0
Protokoll: MCP v1.0

Aufgabe 3.2: Dynamische Resource

Erstellen Sie eine Resource time://current, die die aktuelle Zeit zurückgibt.

Hinweis: Verwenden Sie from datetime import datetime

Beispiel-Output:

Aktuelle Zeit: 2025-12-16 14:30:45

Aufgabe 3.3: Resource mit Parametern

Erstellen Sie eine Resource math://table/{number}, die eine Multiplikationstabelle generiert.

Beispiel: math://table/5 gibt zurück:

5 × 1 = 5
5 × 2 = 10
5 × 3 = 15
...
5 × 10 = 50

Hinweis: Extrahieren Sie die Zahl aus der URI mit uri.split('/').


Teil 4: Prompts

Aufgabe 4.1: Parametrisierter Prompt

Erstellen Sie einen Prompt greet_user, der einen Namen als Argument akzeptiert.

Signatur:

@app.get_prompt()
async def get_prompt(name: str, arguments: dict[str, str] | None = None):
    if name == "greet_user":
        user_name = arguments.get("name", "Gast")
        # ...

Ausgabe:

Hallo Alice! Willkommen beim MCP-Tutorial.

Aufgabe 4.2: Kontext-Prompt

Erstellen Sie einen Prompt calculator_help, der:

  1. Alle verfügbaren Rechenoperationen auflistet
  2. Beispiele für jeden Typ gibt
  3. Eine Frage an den Benutzer stellt

Beispiel-Format:

Dieser Server kann folgende Berechnungen durchführen:
- Addition: 5 + 3 = 8
- Multiplikation: 4 × 6 = 24
- ...

Was möchten Sie berechnen?

Teil 5: Client erweitern

Aufgabe 5.1: Fehlerbehandlung

Erweitern Sie src/client/simple_client.py um robuste Fehlerbehandlung:

  1. Fangen Sie ValueError bei ungültigen Tool-Parametern ab
  2. Behandeln Sie Verbindungsfehler
  3. Geben Sie hilfreiche Fehlermeldungen aus

Testfälle:

# Sollte Fehler abfangen:
await session.call_tool("calculate", {"operation": "divide", "a": 10, "b": 0})
await session.call_tool("unknown_tool", {})

Aufgabe 5.2: Interaktiver Client

Vervollständigen Sie examples/custom_client.py:

  1. Fügen Sie ein Menü hinzu
  2. Lesen Sie Benutzereingaben
  3. Rufen Sie entsprechende Tools auf
  4. Zeigen Sie Ergebnisse formatiert an

Aufgabe 5.3: Batch-Operationen

Erstellen Sie einen Client, der mehrere Operationen hintereinander ausführt:

operations = [
    ("add", 5, 3),
    ("multiply", 4, 7),
    ("subtract", 20, 8)
]

for op, a, b in operations:
    result = await session.call_tool("calculate", {
        "operation": op, "a": a, "b": b
    })
    # Ergebnis anzeigen

Teil 6: Fortgeschrittene Themen

Aufgabe 6.1: Stateful Server

Erweitern Sie den Server um einen Speicher für Berechnungen:

calculation_history = []

@app.call_tool()
async def call_tool(name: str, arguments: Any):
    if name == "calculate":
        result = # ... Berechnung
        calculation_history.append({
            "operation": arguments["operation"],
            "a": arguments["a"],
            "b": arguments["b"],
            "result": result
        })
        return [TextContent(type="text", text=f"...")]

Erstellen Sie ein Tool history, das alle bisherigen Berechnungen zurückgibt.

Aufgabe 6.2: Validierung

Implementieren Sie Input-Validierung:

  1. Überprüfen Sie, ob Zahlen im gültigen Bereich sind (-1000 bis 1000)
  2. Werfen Sie aussagekräftige Fehler bei ungültigen Eingaben
  3. Dokumentieren Sie Validierungsregeln im Tool-Schema

Aufgabe 6.3: Logging

Fügen Sie umfassendes Logging hinzu:

import logging
logger = logging.getLogger(__name__)

@app.call_tool()
async def call_tool(name: str, arguments: Any):
    logger.info(f"Tool aufgerufen: {name} mit {arguments}")
    # ...
    logger.info(f"Tool {name} erfolgreich ausgeführt")

Konfigurieren Sie verschiedene Log-Level und analysieren Sie die Logs.


Teil 7: Integration

Aufgabe 7.1: Claude Desktop Integration

Erstellen Sie eine Konfigurationsdatei für Claude Desktop:

Datei: claude_desktop_config.json

{
  "mcpServers": {
    "simple-calculator": {
      "command": "python3",
      "args": ["/pfad/zu/src/server/simple_server.py"]
    }
  }
}

Testen Sie die Integration mit Claude Desktop.

Aufgabe 7.2: Eigener Use Case

Entwerfen und implementieren Sie einen eigenen MCP Server für einen spezifischen Anwendungsfall:

Ideen:

  • Dateimanagement-Server (lesen, schreiben, suchen)
  • Wetter-Server (API-Integration)
  • Datenbank-Server (SQLite-Abfragen)
  • Text-Analyse-Server (Sentiment, Statistiken)

Anforderungen:

  • Mindestens 3 Tools
  • Mindestens 2 Resources
  • Mindestens 1 Prompt
  • Vollständige Dokumentation
  • Client mit Tests

Zusätzliche Ressourcen