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 anhand eines Beispiels verstehen
Angenommen, du möchtest eine Dokumenterwähnungsfunktion erstellen, bei der Benutzer @dokumentname eingeben können, um auf Dateien zu verweisen. Dies erfordert zwei Operationen:
- Abrufen einer Liste aller verfügbaren Dokumente (für die automatische Vervollständigung)
- Abrufen des Inhalts eines bestimmten Dokuments (wenn es erwähnt wird)

Wenn ein Benutzer @ eingibt, musst du die verfügbaren Dokumente anzeigen. Wenn er eine Nachricht mit einer Erwähnung absendet, fügst du automatisch den Inhalt dieses Dokuments in den Prompt ein, der an Claude gesendet wird.

Wie Ressourcen funktionieren
Ressourcen folgen einem Request-Response-Muster. Dein Client sendet eine ReadResourceRequest mit einer URI, und der MCP-Server antwortet mit den Daten. Die URI fungiert wie eine Adresse für die Ressource, auf die du zugreifen möchtest.

Arten von Ressourcen
Es gibt zwei Arten von Ressourcen:

- Direkte Ressourcen: Statische URIs, die sich nicht ändern, wie
docs://documents - Templated Ressourcen: URIs mit Parametern, wie
docs://documents/{doc_id}
Bei templated Ressourcen analysiert das Python SDK automatisch die Parameter aus der URI und übergibt sie als Keyword-Argumente an deine Funktion.
Ressourcen implementieren
Ressourcen werden mit dem @mcp.resource()-Decorator definiert. So erstellst du beide Arten:
Direkte Ressource (Dokumente auflisten)
@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())Templated Ressource (Dokument abrufen)
@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]MIME-Typen
Ressourcen können jede Art von Daten zurückgeben - Strings, JSON, Binärdaten usw. Der Parameter mime_type gibt Clients einen Hinweis darauf, welche Art von Daten du zurückgibst:
application/json- Strukturierte JSON-Datentext/plain- Reiner Textinhalt- Jeder andere gültige MIME-Typ für verschiedene Datenformate
Das MCP Python SDK serialisiert deine Rückgabewerte automatisch. Du musst sie nicht manuell in JSON-Strings umwandeln.
Ressourcen testen
Du kannst deine Ressourcen mit dem MCP Inspector testen. Starte deinen Server mit:
uv run mcp dev mcp_server.pyVerbinde dich dann im Browser mit dem Inspector. Du siehst:

- Resources: Listet deine direkten/statischen Ressourcen auf
- Resource Templates: Zeigt templated Ressourcen, die Parameter akzeptieren
Klicke auf eine beliebige Ressource, um sie zu testen und die genaue Antwortstruktur zu sehen, die dein Client erhalten wird.

Wichtige Punkte
- Ressourcen stellen Daten bereit, Tools führen Aktionen aus
- Verwende direkte Ressourcen für statische Daten, templated Ressourcen für parametrisierte Abfragen
- MIME-Typen helfen Clients, das Antwortformat zu verstehen
- Das SDK übernimmt die Serialisierung automatisch
- Parameternamen in templated URIs werden zu Funktionsargumenten
Ressourcen bieten eine saubere Möglichkeit, Daten für MCP-Clients verfügbar zu machen, und ermöglichen Funktionen wie Dokumenterwähnungen, Dateibrowsing oder jedes Szenario, in dem du Informationen von deinem Server abrufen musst.