Diese Aufgaben helfen Studierenden, das Model Context Protocol Schritt für Schritt zu verstehen.
- Python 3.10 oder höher
- Grundkenntnisse in Python (async/await)
- MCP SDK installiert (
pip install -r requirements.txt)
- Virtuelle Umgebung erstellen und aktivieren
- Abhängigkeiten installieren
- 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.)?
Lesen Sie src/server/simple_server.py und beantworten Sie:
- Wie viele Tools bietet der Server an?
- Welche Parameter benötigt das
calculate-Tool? - Was ist der Unterschied zwischen einem Tool und einer Resource?
- Welche Rolle spielt der Decorator
@app.list_tools()?
Erweitern Sie das calculate-Tool um die Operation "subtract" (Subtraktion).
Schritte:
- Fügen Sie "subtract" zum
enumininputSchemahinzu - Implementieren Sie die Subtraktionslogik in
call_tool() - Testen Sie mit dem Client
Testfälle:
- 10 - 5 = 5
- 100 - 150 = -50
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.
Erstellen Sie ein Tool text_transform mit folgenden Operationen:
uppercase: Text in Großbuchstabenlowercase: Text in Kleinbuchstabenreverse: Text umkehrenlength: 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"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
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
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('/').
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.
Erstellen Sie einen Prompt calculator_help, der:
- Alle verfügbaren Rechenoperationen auflistet
- Beispiele für jeden Typ gibt
- 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?
Erweitern Sie src/client/simple_client.py um robuste Fehlerbehandlung:
- Fangen Sie
ValueErrorbei ungültigen Tool-Parametern ab - Behandeln Sie Verbindungsfehler
- 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", {})Vervollständigen Sie examples/custom_client.py:
- Fügen Sie ein Menü hinzu
- Lesen Sie Benutzereingaben
- Rufen Sie entsprechende Tools auf
- Zeigen Sie Ergebnisse formatiert an
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 anzeigenErweitern 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.
Implementieren Sie Input-Validierung:
- Überprüfen Sie, ob Zahlen im gültigen Bereich sind (-1000 bis 1000)
- Werfen Sie aussagekräftige Fehler bei ungültigen Eingaben
- Dokumentieren Sie Validierungsregeln im Tool-Schema
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.
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.
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