MCP · Lektion 07 · Capstone

Vom Spielzeug zum echten Server

Du kennst jetzt Architektur, Wire, Primitive, Transports, Bau und Anbindung. Diese Lektion verdichtet alles zu einem realistischeren Server — und gibt dir den roten Faden, mit dem du das Ganze im Workshop lehrst.

Dein Gewinn: Ein Server, der alle drei Primitive zeigt (Tool + Resource + Prompt), externe Daten/State kapselt — plus eine erprobte 90-Minuten-Dramaturgie für deinen Puzzle-Workshop.

1. Ein Server mit allen drei Primitiven

Wir erweitern server.py aus Lektion 5 um eine Resource (lesbarer Kontext) und einen Prompt (User-Workflow) — die Decorators entsprechen 1:1 den Primitiven aus Lektion 3:1

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Notes")

_NOTES: dict[str, str] = {}   # simpler State, in echt: DB/API

@mcp.tool()
def add_note(title: str, body: str) -> str:
    """Lege eine Notiz an."""              # MODELL-gesteuert → Tool
    _NOTES[title] = body
    return f"Notiz '{title}' gespeichert."

@mcp.resource("note://{title}")
def read_note(title: str) -> str:
    """Lies eine Notiz."""                 # APP-gesteuert, Lesen → Resource
    return _NOTES.get(title, "nicht gefunden")

@mcp.prompt()
def summarize(title: str) -> str:
    """Vorlage: Notiz zusammenfassen."""   # USER-gesteuert → Prompt
    return f"Fasse die Notiz '{title}' in einem Satz zusammen."

if __name__ == "__main__":
    mcp.run(transport="stdio")

Drei Decorators, drei Capabilities im Handshake, drei Kontroll-Modelle. Wenn deine Teilnehmer das Diagramm im Kopf haben, haben sie MCP verstanden.

2. Der Schritt zu „echt nützlich“ (deine Mission)

Den Sprung von Demo zu Produktion machen drei Dinge — ersetze den Dummy-State durch echte Systeme:

Gute Server-Designregel: Ein Tool = eine klar benannte Absicht. Lieber create_issue und close_issue als ein generisches do_issue_stuff(action). Der Agent wählt nach Namen + Beschreibung.

3. Workshop-Dramaturgie (90 Min, erprobte Reihenfolge)

  1. Der Schmerz (10′): N×M-Integrationsproblem. Frag das Publikum, wie viele Tools × Agents sie kennen. → Motivation für ein Protokoll.
  2. Das Bild (15′): host/client/server + 3 Primitive an der Tafel (L1/L3). Anker: ein laufender Server (forgejo) live zeigen.
  3. Der Wire (10′): Inspector öffnen, tools/list + tools/call live sehen (L2). „Es ist nur JSON-RPC.“
  4. Selber bauen (35′): alle tippen server.py mit, Inspector-Test (L5). Die print()-Falle bewusst vorführen.
  5. Anbinden (15′): claude mcp add, Tool im Chat aufrufen (L6). Der „Wow“-Moment.
  6. Ausblick (5′): Resources/Prompts, Remote/Auth, eigene Ideen der Teilnehmer.

Das Prinzip: Schmerz → Bild → Beweis → eigene Hände → Erfolg. Jede Stufe ist eine Lektion dieses Workspace — du kannst sie als Hand-out verlinken.

4. Die drei Sätze, die hängen bleiben sollen

5. Wisdom — wo es weitergeht

Du bist jetzt über die Grundlagen hinaus. Reale Reibung (Design-Fragen, Edge-Cases, Best Practices) holst du dir am besten aus der Community:

6. Primärquelle

📖 Python SDK README (Resources & Prompts) + die MCP Specification als verbindliche Referenz. Halte die Cheatsheet griffbereit.

Du hast den Bogen durch. Nächste sinnvolle Schritte, je nach Lust: deinen echten Server jetzt zusammen bauen, einen Probe-Durchlauf des Workshops mit mir als kritischem Teilnehmer, oder eine Vertiefung (Sampling, Auth/OAuth, Deploy). Sag einfach, wohin.

1 — Python SDK README: github.com/modelcontextprotocol/python-sdk