Ressourcen in MCP-Servern ermöglichen es dir, Daten für Clients bereitzustellen, ähnlich wie GET-Request-Handler in einem typischen HTTP-Server. Sie sind perfekt für Szenarien, in denen du Informationen abrufen musst, anstatt Aktionen auszuführen.
Ressourcen verstehen
Stell dir Ressourcen als schreibgeschützte Endpunkte vor, die jede Art von Daten zurückgeben können - Strings, JSON, Binärdateien usw. Du legst einen 'mime_type' fest, um dem Client einen Hinweis darauf zu geben, welche Art von Daten du zurückgibst.

Ressourcen funktionieren, indem sie Daten über URIs (im Wesentlichen Adressen) bereitstellen. Wenn ein Client Daten benötigt, sendet er eine ReadResourceRequest mit der spezifischen URI, und dein Server antwortet mit den angeforderten Informationen.
Zwei Arten von Ressourcen
Es gibt zwei Hauptarten von Ressourcen, die du erstellen kannst:
- Direkte Ressourcen - Haben statische URIs, die keine Parameter enthalten (wie
docs://documents) - Templated Ressourcen - Enthalten Parameter in ihren URIs (wie
docs://documents/{doc_id})

Bei templated Ressourcen analysiert das Python SDK automatisch Parameter aus der URI und übergibt sie als Keyword-Argumente an deine Funktion. Der Parametername in der URI wird zum Argumentnamen in deiner Funktion.
Ressourcen implementieren
Das Erstellen von Ressourcen ist mit dem @mcp.resource()-Decorator unkompliziert. So implementierst du beide Typen:
@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())
@mcp.resource(
"docs://documents/{doc_id}",
mime_type="text/plain"
)
def fetch_doc(doc_id: str) -> str:
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]Das MCP Python SDK serialisiert automatisch alles, was du zurückgibst. Du musst Daten nicht manuell in JSON-Strings umwandeln - gib einfach die passende Python-Datenstruktur zurück.
Deine Ressourcen testen
Du kannst Ressourcen mit dem MCP Inspector-Tool testen. Starte deinen Server mit uv run mcp dev mcp_server.py und navigiere zur Weboberfläche.

Der Inspector trennt direkte Ressourcen von templated Ressourcen. Direkte Ressourcen erscheinen im Hauptbereich "Resources", während templated Ressourcen unter "Resource Templates" angezeigt werden. Du kannst auf jede Ressource klicken, um sie zu testen und die genaue Antwortstruktur zu sehen, die dein Server zurückgibt.
Praktische Anwendungsfälle
Ressourcen sind ideal für:
- Bereitstellung von Autocomplete-Daten (wie Dokumentenlisten)
- Abrufen von Dateiinhalten oder Datenbankeinträgen
- Bereitstellung von Konfigurationsdaten
- Bereitstellung beliebiger schreibgeschützter Informationen, die dein Client benötigt
Der entscheidende Vorteil ist, dass Ressourcen es Clients ermöglichen, proaktiv Daten abzurufen, ohne auf Tools oder komplexe Interaktionen angewiesen zu sein. Das macht sie perfekt für Funktionen wie Dokumentenerwähnungen, bei denen du Inhalte basierend auf Benutzerverweisen automatisch in Prompts einfügen möchtest.