Einen eigenen Server bauen

Sieben Schritte von leerem Ordner zu einem MCP-Server, der in Claude Desktop läuft. Code-Beispiele in Python (FastMCP-SDK) und TypeScript — wähle deine Sprache.

Faustregel zur Sprach-Wahl: Python ist mit FastMCP am schnellsten zum Prototyp. TypeScript lohnt sich, wenn der Server sowieso schon in einer JS-Codebase lebt oder du Streaming-Tools mit komplexen Response-Typen brauchst.

Schritt 1 / 7

1. Projekt anlegen + SDK installieren
Beide SDKs sind offiziell vom MCP-Team. Python nutzt FastMCP-Pattern (Decorators), TS nutzt eine Builder-API.
# pyproject.toml + venv anlegen
uv init mein-server && cd mein-server
uv add mcp

Was du in jedem Schritt geprüft haben solltest

  • Schritt 3: Tool taucht im Inspector unter „Tools" auf, mit korrektem Schema.
  • Schritt 5: Inspector verbindet sich, du siehst initialize erfolgreich im Logs-Panel.
  • Schritt 6: Tool-Call gibt das erwartete Ergebnis zurück — sonst meist ein Schema-Mismatch oder ein Print-auf-stdout- Bug.
  • Schritt 7: Claude Desktop neugestartet, in der Chat-UI siehst du das 🔌-Icon mit deinem Server-Namen.
Warum eigentlich?Warum FastMCP statt der Low-Level-API?
Beide SDKs haben zwei Schichten: eine Low-Level-API, die JSON-RPC direkt rein/raus pumpt, und eine High-Level-Convenience (FastMCP in Python, McpServer in TS). Die Low-Level-API ist für Spezialfälle — z.B. wenn du ein eigenes Routing brauchst oder mehrere Server in einem Prozess hostest. Für 95% aller Server reicht die High-Level-API.
Häufiger DenkfehlerDas Tool kommt nicht durch — Checkliste
Wenn Claude Desktop dein Tool nicht zeigt, geh diese Liste durch:
  • Pfad absolut? Relative Pfade in der Config funktionieren nicht — Claude Desktop hat ein anderes Working- Directory.
  • Logging auf stderr? Print/console.log gehen standardmäßig auf stdout und crashen die Verbindung.
  • Permissions? Auf macOS muss die Executable ausgeführt werden dürfen. Auf Windows aufpassen mit Path-Quoting.
  • Server gecrasht beim Start? Lass den Inspector laufen und schau dir die stderr-Logs an.
Tiefer reinCapabilities und initialize
Vor dem ersten Tool-Call macht jedes Client/Server-Paar einen Handshake: initialize-Request mit Protokoll-Version und capabilities-Object. Der Server antwortet mit seinen Capabilities (z.B. tools, resources, prompts, sampling). Erst dann darf der Client weitere Methoden rufen. Das FastMCP-SDK regelt das automatisch — du merkst es nur, wenn du die Low-Level-API benutzt.