Das Erstellen eines MCP-Servers wird viel einfacher, wenn du das offizielle Python-SDK verwendest. Anstatt komplexe JSON-Schemas von Hand zu schreiben, kannst du Tools mit Decorators definieren und das SDK die Schwerstarbeit übernehmen lassen.

In diesem Beispiel erstellen wir einen Dokumentenverwaltungsserver mit zwei Kern-Tools: eines zum Lesen von Dokumenten und ein weiteres zum Aktualisieren. Alle Dokumente existieren im Speicher als einfaches Dictionary, bei dem die Schlüssel Dokument-IDs und die Werte der Inhalt sind.
Einrichten des MCP-Servers
Das Python-MCP-SDK macht die Servererstellung unkompliziert. Du kannst einen Server mit nur einer Zeile initialisieren:
from mcp.server.fastmcp import FastMCP
from pydantic import Field
mcp = FastMCP("DocumentMCP", log_level="ERROR")Dies erstellt einen voll funktionsfähigen MCP-Server, der Tool-Definitionen, Client-Verbindungen und Nachrichten-Routing verarbeiten kann.
Tool-Definition mit Decorators

Der Decorator-Ansatz des SDK macht das manuelle Schreiben von JSON-Schemas überflüssig. So definierst du ein einfaches Tool:
@mcp.tool(
name="add_ints",
description="Add two integers together",
)
def tool_fn(
a=Field(description="First number to add"),
b=Field(description="Second number to add"),
) -> int:
return a + bIm Hintergrund generiert MCP das vollständige Tool-Schema, das Claude verstehen muss, um zu wissen, wann und wie dein Tool zu verwenden ist.
Aufbau des Dokumenten-Lesetools
Das erste Tool liest Dokumentinhalte anhand der ID. Es nimmt eine Dokumentkennung entgegen und gibt den entsprechenden Inhalt aus unserem speicherinternen Dictionary zurück:
@mcp.tool(
name="read_doc_contents",
description="Read the contents of a document and return it as a string."
)
def read_document(
doc_id: str = Field(description="Id of the document to read")
):
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]Die Funktion enthält eine grundlegende Fehlerbehandlung, um Anfragen für nicht existierende Dokumente abzufangen. Wenn Claude dieses Tool mit einer gültigen Dokument-ID aufruft, erhält es den vollständigen Dokumentinhalt als String.
Erstellen des Dokumenten-Editor-Tools
Das zweite Tool führt einfache Suchen-und-Ersetzen-Operationen an Dokumenten durch. Es benötigt drei Parameter: die Dokument-ID, den zu suchenden Text und den Ersatztext:
@mcp.tool(
name="edit_document",
description="Edit a document by replacing a string in the documents content with a new string."
)
def edit_document(
doc_id: str = Field(description="Id of the document that will be edited"),
old_str: str = Field(description="The text to replace. Must match exactly, including white space."),
new_str: str = Field(description="The new text to insert in place of the old text.")
):
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
docs[doc_id] = docs[doc_id].replace(old_str, new_str)Diese Implementierung verwendet Pythons integrierte String-Replace-Methode, die exakte Übereinstimmungen einschließlich Leerzeichen erfordert. Das Tool ändert das Dokument direkt in unserem Dictionary.
Wichtige Vorteile des SDK-Ansatzes
- Kein manuelles Schreiben von JSON-Schemas erforderlich
- Typ-Hinweise ermöglichen automatische Parametervalidierung
- Feldbeschreibungen helfen Claude, die Tool-Nutzung zu verstehen
- Fehlerbehandlung integriert sich natürlich mit Python-Exceptions
- Tool-Registrierung erfolgt automatisch durch Decorators
Das MCP-Python-SDK verwandelt die Tool-Erstellung von einer komplexen Schema-Schreibübung in unkomplizierte Python-Funktionsdefinitionen. Deine Tools werden wartbarer und leichter zu testen, während Claude alle Metadaten erhält, die es braucht, um sie effektiv zu nutzen.