MCP Server erstellen: Mit Python vom lokalen Tool zum Teamdienst

MCP Server mit Python erstellen, in Inspector testen und an Claude Code oder Cursor anbinden. Dazu HTTP-Authentifizierung, Hosting und klare Zugriffsrechte.

Veröffentlicht am

MCP Server erstellen: Mit Python vom lokalen Tool zum Teamdienst

Wer einen MCP Server erstellen möchte, kann Claude Code oder Cursor den Bestellstatus direkt aus Unternehmensdaten abfragen lassen, ohne einen Datensatz in den Chat zu kopieren. Dafür zunächst ein Tool mit reinem Lesezugriff bauen, seine Funktion im Inspector prüfen und anschließend zwischen einem lokalen Prozess und einem authentifizierten HTTP-Dienst für das Team wählen.

Ein sinnvoller erster Server hat eine klar begrenzte Aufgabe: Er nimmt eine Bestell-ID entgegen und liefert den Status zurück. Damit beginnt diese Anleitung. Ein allgemeines Datenbank-Tool würde dem Modell zu viele Entscheidungen überlassen und ihm mehr Zugriff geben, als dieser Ablauf erfordert.

Die Anleitung folgt dem aktuellen offiziellen Server-Tutorial. Mit Stand vom 7. Oktober 2026 verwendet die Dokumentation die MCP-Spezifikation 2026-07-28 und das offizielle Python SDK mit seiner MCPServer-API. Diese Bibliothek übernimmt die MCP-Nachrichten. Das Beispiel legt die Version auf SDK 2.3.0 fest, damit Imports aus älteren Tutorials nicht unbemerkt zu einer anderen Installation führen.

Welche Funktionen stellt ein MCP-Server bereit?

Ein MCP-Server ist eine kontrollierte Anlaufstelle zwischen einer KI-Anwendung und den eigenen Systemen. Die Anwendung kann verfügbare Funktionen erfragen, eine Anfrage stellen und ein Ergebnis empfangen. Was diese Anlaufstelle leisten darf, bestimmt der Servercode.

MCP, das Model Context Protocol, gibt diesem Austausch ein gemeinsames Format. Der Host ist die verwendete Anwendung, etwa Claude Code oder Cursor. Ihr Client übernimmt die Kommunikation mit dem Server über das Protokoll. Das sind Rollen innerhalb des Systems; es müssen dafür keine drei zusätzlichen Anwendungen installiert werden.

FunktionEinfach erklärtBeispiel für einen Bestellprozess
ToolsFunktionen, die der Client mit festgelegten Argumenten aufrufen kannlookup_order(order_id) liefert den Status einer Bestellung
RessourcenLesbarer Kontext mit einer URI als Adresse für diese InformationEin Dokument mit Rückgabebedingungen, das der Client lesen kann
PromptsWiederverwendbare Nachrichtenvorlagen, die der Host zur Auswahl anbieten kannEine Vorlage für die Antwort auf eine verspätete Lieferung

Ein Tool kann auf Lesezugriffe beschränkt sein. Die Bezeichnung als Ressource ersetzt keine Zugriffsprüfung. Ein Prompt enthält Anweisungen, erteilt aber keine Berechtigung. Welche Funktionen Clients unterstützen und wie sie diese darstellen, unterscheidet sich. Deshalb die tatsächlich angebotenen Funktionen prüfen. Das sind die drei Grundbausteine eines Servers; der folgende Server benötigt lediglich ein Tool.

Eine architektonisch gestaltete MCP-Anlaufstelle mit getrennten Bereichen für Tools, Ressourcen und Prompts, die mit einem Client verbunden sind
Ein Server kann drei Arten von Funktionen bereitstellen. Diese erste Umsetzung bietet nur das Tool zur Bestellabfrage an.

Vor dem Bau lohnt sich die Prüfung, ob ein gepflegter Konnektor die Aufgabe bereits abdeckt. Unser Überblick über die besten MCP-Server für 2026 bietet dafür einen Einstieg. Ein eigener Server lohnt sich, wenn interne Daten, Berechtigungsregeln oder Abläufe von diesen Konnektoren abweichen.

MCP Server erstellen: Bestellstatus mit Python abfragen

Das offizielle SDK übernimmt das Protokoll, sodass sich der eigene Code auf die Abfrage konzentrieren kann. Benötigt werden Python 3.10 oder neuer, uv, die Python-Projektverwaltung aus dem offiziellen Tutorial, sowie Node.js für den Inspector. Der aktuelle Inspector setzt Node 22.19.0 oder neuer voraus.

Die folgenden Befehle im Terminal der Reihe nach ausführen:

  1. uv init orders-mcp
  2. cd orders-mcp
  3. uv venv
  4. uv add "mcp[cli]==2.3.0"

In diesem Ordner die Datei orders.py anlegen und den vollständigen Servercode einfügen. Die Datensätze sind fiktive Übungsdaten. Sie enthalten keine Kundennamen, Zahlungsdetails oder API-Zugangsdaten.

Python
import json

from mcp.server import MCPServer

mcp = MCPServer("orders")

# Fictional training data. No customer records or credentials.
ORDERS = {
    "A100": {"status": "shipped", "carrier": "Demo Courier"},
    "A101": {"status": "packing", "carrier": "not assigned"},
}


@mcp.tool()
def lookup_order(order_id: str) -> str:
    """Look up a fictional order by ID, such as A100. Read-only.

    Args:
        order_id: Exact order ID, for example A100 or A101.
    """
    key = order_id.strip().upper()
    order = ORDERS.get(key)
    if order is None:
        return json.dumps({"found": False, "order_id": key})
    return json.dumps({"found": True, "order_id": key, **order})


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

Der Code verwendet das im Tutorial dokumentierte Muster aus MCPServer, @mcp.tool() und mcp.run(transport="stdio"). An die Stelle der Wetter-Tools tritt die Bestellabfrage. Die Typannotation für Zeichenketten teilt dem SDK mit, dass order_id ein Pflichtfeld mit Textinhalt ist. Der Docstring erklärt dem Client, wann das Tool nützlich ist. Das SDK erzeugt die Tool-Definition und verarbeitet die Protokollnachrichten.

Mit uv run orders.py starten. Dass der Prozess ohne Ausgabe auf Eingaben wartet, ist zu erwarten. stdio, also Standardeingabe und Standardausgabe, bildet den Kanal, über den der Client mit diesem Prozess kommuniziert. Diesen manuellen Lauf beenden, bevor ein Client seine eigene Instanz startet.

Anwendungsprotokolle dürfen nicht auf die Standardausgabe gelangen. Dafür eignet sich Pythons Modul logging, das standardmäßig auf die Standardfehlerausgabe schreibt. Ein versehentliches print() kann den Protokolldatenstrom beschädigen. Diese Vorgabe ist eine dokumentierte Einschränkung von stdio und keine bloße Formatierungsfrage für Protokolle.

Beim Ersetzen des Dictionarys durch eine Datenbank bleibt die Schnittstelle ebenso eng begrenzt. Dazu gehören eine parametrisierte Abfrage, ein Datenbankkonto mit Lesezugriff ausschließlich auf die benötigten Felder und eine Berechtigungsprüfung für den jeweiligen Aufrufer, bevor ein Datensatz zurückgegeben wird. Für diese Aufgabe niemals beliebige SQL-Anweisungen vom Modell entgegennehmen.

Wie lässt sich der Server mit MCP Inspector testen?

Zuerst prüfen, ob das Tool funktioniert, und erst danach ein Modell damit arbeiten lassen. Im Projektordner uv run mcp dev orders.py ausführen. Dieser Entwicklungsbefehl des SDK startet MCP Inspector. Die vom Befehl ausgegebene Browser-URL öffnen und den Server verbinden, falls die Verbindung noch nicht steht.

Unter Tools die Funktion lookup_order auswählen. Das Formular sollte das Pflichtfeld order_id anzeigen. Beim Aufruf mit A100 sollte das Ergebnis found: true, status: shipped und carrier: Demo Courier enthalten. A101 liefert packing. Für DOES-NOT-EXIST sollte die Antwort found: false enthalten.

Zusätzlich eine Anfrage ohne order_id ausprobieren. Sie sollte an der Eingabevalidierung scheitern, statt eine Abfrage auszuführen. Die Ansichten Protocol und Console im Inspector helfen dabei, eine fehlerhafte Anfrage von einem Fehler im Serverprozess zu unterscheiden.

Für eine wiederholbare Prüfung im Terminal dient npx @modelcontextprotocol/inspector --cli uv run orders.py --method tools/list. Das Tool lässt sich mit npx @modelcontextprotocol/inspector --cli uv run orders.py --method tools/call --tool-name lookup_order --tool-arg order_id=A100 aufrufen. Beide Befehle verwenden die dokumentierte Inspector-CLI.

Das Erfolgskriterium ist konkret: ein auffindbares Tool, der erwartete Status für eine bekannte Bestellung und eine ausdrückliche Antwort für einen fehlenden Datensatz. Ein plausibler Absatz aus einem Modell belegt nicht, dass die Abfrage tatsächlich ausgeführt wurde.

Den gleichen Server mit Claude Code und Cursor verbinden

Jeder lokale Client startet seinen eigenen Serverprozess. Der Inspector muss dabei nicht weiterlaufen. Absolute Pfade verhindern, dass der Start davon abhängt, welchen Ordner der Client gerade geöffnet hat.

Claude Code: Den Befehl claude mcp add --transport stdio --scope local orders -- /ABSOLUTE/PATH/orders-mcp/.venv/bin/python /ABSOLUTE/PATH/orders-mcp/orders.py ausführen. Unter Windows lautet der Interpreterpfad .venv\Scripts\python.exe. Das entspricht der Syntax für lokale Server in Claude Code, einschließlich des Trennzeichens -- vor dem Startbefehl.

Mit claude mcp get orders die Verbindung prüfen. In einer Claude Code-Sitzung /mcp öffnen und dann folgenden Prompt verwenden: “Use lookup_order to check A100. Report only the returned status and carrier.” Anschließend den Tool-Aufruf und seine Argumente prüfen.

Cursor: Im Projekt die Datei .cursor/mcp.json anlegen. Darin dieses JSON einfügen und beide absoluten Pfade ersetzen: {"mcpServers":{"orders":{"type":"stdio","command":"/ABSOLUTE/PATH/orders-mcp/.venv/bin/python","args":["/ABSOLUTE/PATH/orders-mcp/orders.py"]}}}.

Customize öffnen, den Server aktivieren und in Agent dieselbe Frage stellen. Den Aufruf gemäß den eigenen Freigabeeinstellungen prüfen. Dateipfad, Startfelder und Bedienelemente folgen der MCP-Konfiguration von Cursor. Bei einem Verbindungsfehler zuerst den Pfad zur ausführbaren Datei und die Standardfehlerausgabe des Servers prüfen, bevor das Tool geändert wird.

Lokal mit stdio oder als HTTP-Dienst betreiben?

Für einen persönlichen Arbeitsablauf bleibt der Server lokal. Remote-HTTP eignet sich, wenn mehrere Personen oder gehostete Clients einen gemeinsam verwalteten Dienst benötigen.

EntscheidungLokales stdioRemote Streamable HTTP
AusführungsortEin Prozess, den der Client auf seinem Rechner startetEin Webdienst an einem HTTPS-Endpunkt
Wie der Client ihn findetEin Befehl mit ArgumentenEine URL wie https://orders.example.com/mcp
ZugriffsgrenzeBetriebssystemberechtigungen, Prozessumgebung und Zugangsdaten für nachgelagerte SystemeGeprüfte Identität des Aufrufers, Scopes und Berechtigungen je Datensatz
AktualisierungJede installierte Kopie aktualisierenEinen Dienst bereitstellen
Geeigneter EinstiegEin Entwickler prüft einen klar begrenzten AblaufGemeinsamer Zugriff mit zentralem Betrieb

Ein Remote-Dienst benötigt außerdem Netzwerkzugriff auf die Unternehmensdaten. Ein veröffentlichter Endpunkt macht eine private Datenbank weder erreichbar noch ihre Berechtigungen automatisch korrekt.

Das HTTP-Protokoll 2026-07-28 verwendet in sich abgeschlossene Anfragen. Das aktuelle Python SDK kann auch ältere Clients bedienen. Deren Sitzungen können beim Einsatz mehrerer Replikate eine feste Zuordnung zur selben Instanz erfordern. Vor der Skalierung die dokumentierten Einstellungen für ältere Clients bewusst festlegen; nicht voraussetzen, dass jeder verbundene Client die neueste Protokollversion unterstützt.

Zwei architektonisch gestaltete Wege vergleichen einen lokalen stdio-Prozess auf einem Rechner mit Remote-HTTP-Zugriff über eine Authentifizierungsschranke
Die Bereitstellung legt die Zugriffsgrenze fest: ein lokaler Prozess für einen individuellen Ablauf oder ein authentifizierter HTTP-Dienst für die gemeinsame Nutzung.

Die Bestellabfrage mit Authentifizierung über HTTP bereitstellen

HTTP-Zugriff mit Tokens absichern, die für diesen Dienst ausgestellt werden. OAuth 2.1 ist das Autorisierungsframework der MCP-Spezifikation: Ein Identitätsanbieter meldet den Nutzer an und stellt ein Token aus, das der MCP-Server anschließend prüft. Ein Scope bezeichnet eine benannte Berechtigung, etwa orders:read. Die Audience legt fest, welcher Dienst das Token akzeptieren darf.

Das SDK liefert die Einbindung als Ressourcenserver, aber kein Anmeldesystem für das Unternehmen. Für dieses Beispiel muss der Identitätsanbieter OAuth-Discovery, die Registrierung der gewählten Clients, PKCE für die Nutzeranmeldung und einen Endpunkt zur Token-Introspektion bereitstellen. PKCE belegt, dass die Anwendung, die eine Anmeldung abschließt, auch diejenige ist, die sie begonnen hat. Bei der Introspektion wird der Aussteller gefragt, ob ein Token aktiv ist und welche Berechtigungen es enthält.

Dieser Adapter erwartet Introspektion über HTTPS mit HTTP-Basic-Authentifizierung des Clients und eine Antwort mit active, aud, exp, client_id und scope. Den Aussteller so konfigurieren, dass aud die exakte öffentliche URL dieses Endpunkts enthält und der Scope orders:read vergeben wird. Verwendet der Anbieter eine andere Authentifizierungsmethode für die Introspektion, muss die Anfrage entsprechend seiner Dokumentation angepasst werden. Stellt er stattdessen JWTs, also signierte Tokens, bereit, müssen Signatur, Aussteller, Ablaufzeit und Audience über dieselbe Schnittstelle TokenVerifier geprüft werden.

Mit uv add uvicorn das Paket uvicorn hinzufügen und neben orders.py die Datei remote.py anlegen. Der Code folgt dem offiziellen Introspektionsbeispiel des SDK und seinen dokumentierten HTTP- und Authentifizierungsschnittstellen. Er verwendet die bereits getestete Bestellabfrage weiter.

Python
import os
import time
from urllib.parse import urlsplit

import httpx2
from pydantic import AnyHttpUrl

from mcp.server import MCPServer
from mcp.server.auth.provider import AccessToken, TokenVerifier
from mcp.server.auth.settings import AuthSettings
from mcp.server.transport_security import TransportSecuritySettings
from orders import lookup_order as local_lookup

RESOURCE = os.environ["MCP_RESOURCE_URL"]
ISSUER = os.environ["MCP_ISSUER_URL"]
INTROSPECT = os.environ["MCP_INTROSPECTION_URL"]
if any(urlsplit(url).scheme != "https" for url in (RESOURCE, ISSUER, INTROSPECT)):
    raise ValueError("Public auth and resource URLs must use HTTPS")


class OrderTokenVerifier(TokenVerifier):
    async def verify_token(self, token: str) -> AccessToken | None:
        try:
            async with httpx2.AsyncClient(timeout=5.0) as client:
                response = await client.post(
                    INTROSPECT,
                    data={"token": token},
                    auth=(os.environ["MCP_INTROSPECTION_CLIENT_ID"],
                          os.environ["MCP_INTROSPECTION_CLIENT_SECRET"]),
                )
                response.raise_for_status()
                data = response.json()
            audiences = data.get("aud", [])
            if isinstance(audiences, str):
                audiences = [audiences]
            expiry = data.get("exp")
            if (data.get("active") is not True or RESOURCE not in audiences
                    or not isinstance(expiry, int) or expiry <= time.time()):
                return None
            if data.get("iss", ISSUER) != ISSUER:
                return None
            return AccessToken(
                token=token, client_id=data["client_id"],
                scopes=data.get("scope", "").split(), expires_at=expiry,
                resource=RESOURCE, subject=data.get("sub"),
            )
        except Exception:
            return None


mcp = MCPServer(
    "orders",
    token_verifier=OrderTokenVerifier(),
    auth=AuthSettings(
        issuer_url=AnyHttpUrl(ISSUER),
        resource_server_url=AnyHttpUrl(RESOURCE),
        required_scopes=["orders:read"], validate_token_resource=True,
    ),
)


@mcp.tool()
def lookup_order(order_id: str) -> str:
    """Look up a fictional order by ID, such as A100. Read-only."""
    return local_lookup(order_id)


hostname = urlsplit(RESOURCE).hostname
security = TransportSecuritySettings(
    allowed_hosts=[hostname, f"{hostname}:*"],
    allowed_origins=[os.environ["MCP_ALLOWED_ORIGIN"]],
)
app = mcp.streamable_http_app(transport_security=security)

Die folgenden Werte in den Umgebungsvariablen der Bereitstellung oder im Secret Store hinterlegen:

VariableBenötigter Wert
MCP_RESOURCE_URLDer exakte öffentliche Endpunkt, zum Beispiel https://orders.example.com/mcp
MCP_ISSUER_URLDie Aussteller-URL des Identitätsanbieters, passend zu dessen Metadaten
MCP_INTROSPECTION_URLSein dokumentierter HTTPS-Endpunkt zur Token-Introspektion
MCP_INTROSPECTION_CLIENT_IDDer vertrauliche Client, der Tokens introspektieren darf
MCP_INTROSPECTION_CLIENT_SECRETDas Secret dieses Clients
MCP_ALLOWED_ORIGINEine exakt festgelegte, erlaubte Browser-Origin, etwa die Origin der internen Anwendung

Die Liste erlaubter Hosts wird ausdrücklich gesetzt, weil das SDK standardmäßig sonst localhost akzeptiert und einen öffentlichen Hostnamen mit 421 Misdirected Request zurückweist. Browser-Origins werden separat geprüft; nur die tatsächlich genutzten Origins freigeben. Die zurückgegebene App enthält bereits den Lebenszyklus für Start und Herunterfahren. Diese Details folgen der Dokumentation zur SDK-Bereitstellung und zur ASGI-App. ASGI ist die Schnittstelle, über die Python-Webserver diese Anwendung ausführen.

Den Dienst hinter dem HTTPS-Proxy des Hosters mit uv run uvicorn remote:app --host 0.0.0.0 --port 8000 starten. Die öffentliche Ressourcen-URL bleibt HTTPS, auch wenn der Proxy den Prozess über HTTP anspricht. Welche weitergeleiteten Header vertrauenswürdig sind, muss anhand der tatsächlichen Proxy-Grenze dieses Hosters konfiguriert werden.

Vor dem Einsatz echter Datensätze diese Prüfungen über HTTP durchführen:

  • Kein Token, ein abgelaufenes Token oder ein Token für eine andere Audience: Der Zugriff wird verweigert.
  • Gültiges Token ohne orders:read: Der Zugriff wird verweigert.
  • Gültiges Token mit korrekter Audience und passendem Scope: lookup_order liefert den Demo-Status.
  • /.well-known/oauth-protected-resource/mcp: Die Metadaten nennen die korrekte Ressource und den richtigen Aussteller.

Mit npx @modelcontextprotocol/inspector --server-url https://orders.example.com/mcp --transport http den bereitgestellten Endpunkt prüfen und seinen Authentifizierungsablauf durchlaufen. Ein Tool-Test im Arbeitsspeicher umgeht die HTTP-Autorisierung und kann deshalb nicht belegen, dass diese Zugriffsgrenze funktioniert.

Für Claude Code mit claude mcp add --transport http orders-remote https://orders.example.com/mcp eine separate Verbindung hinzufügen und anschließend über /mcp authentifizieren. In Cursor unter mcpServers einen Remote-Eintrag mit "url":"https://orders.example.com/mcp" ergänzen und OAuth abschließen. Für vorab registrierte Clients dokumentiert Cursor auch ein auth-Objekt mit CLIENT_ID und scopes. Die passenden Callback-URLs der Clients beim Aussteller registrieren. Weitere Hinweise geben die Dokumentationen zur Authentifizierung in Claude Code und zur OAuth-Einrichtung für Remote-Server in Cursor.

Damit steht ein kleiner authentifizierter Adapter, aber noch kein vollständiges Produktionssystem. Vor dem Ersetzen des Demo-Dictionarys müssen Berechtigungen für Mandanten und einzelne Datensätze anhand der geprüften Identität durchgesetzt, die Aufrufe mit Audit-Ereignissen erfasst, HTTP-Verbindungen wiederverwendet und Anfragen begrenzt werden. Ein Scope erlaubt den Vorgang; er belegt nicht, dass dem Aufrufer jede Bestellung gehört.

Den Server auf Render oder Cloudflare Workers hosten

Für den Python-Server aus dieser Anleitung würde ich mit Render beginnen. Ein Python-Webdienst übernimmt die bereits gebaute App. Cloudflare Workers ist eine gute Option, wenn dasselbe eng begrenzte Tool mit dem dokumentierten Worker-Handler umgesetzt werden soll.

Die folgenden Herstellerpreise wurden am 7. Oktober 2026 geprüft:

HosterVeröffentlichter EinstiegspreisIm Preis enthaltenEignung für diese Anleitung
Cloudflare Workers FreeKeine Tarifgebühr100,000 Anfragen/Tag, 10 ms CPU-Zeit pro AufrufEin Worker-Prototyp, der innerhalb dieser Grenzen bleibt
Cloudflare Workers PaidMindestens $5/Monat10 Millionen Anfragen/Monat und 30 Millionen CPU-ms/Monat enthaltenGemeinsame Worker-Bereitstellung; zusätzliche Anfragen kosten $0.30/Million und CPU-Zeit $0.02/Million CPU-ms
Kostenpflichtiger Render-Webdienst$7/Monat für 0.5c-512mb-Rechenleistung512 MB RAM; die Gebühr für den Hobby-Workspace beträgt $0 zuzüglich RechenleistungBetrieb dieser Python-ASGI-App

Quellen: Preise von Cloudflare Workers und Preise von Render. Für die Teamfunktionen berechnet Renders Pro-Workspace zusätzlich $25/Monat zuzüglich Rechenleistung. Speicher, Identitätsdienste, Modellnutzung und weitere Zusatzleistungen müssen separat eingeplant werden. Die Angaben betreffen das Hosting, nicht die Kosten eines gesamten KI-Arbeitsablaufs.

Bereitstellung auf Render: orders.py, remote.py und requirements.txt im Repository ablegen. Die Abhängigkeitsdatei benötigt mcp[cli]==2.3.0 und uvicorn, jeweils in einer eigenen Zeile. Einen Python Web Service anlegen, als Build-Befehl pip install -r requirements.txt und als Startbefehl uvicorn remote:app --host 0.0.0.0 --port $PORT verwenden. Die oben aufgeführten Umgebungsvariablen hinzufügen und den zugewiesenen Hostnamen oder die eigene Domain in MCP_RESOURCE_URL eintragen. Das passt Renders dokumentierte Bereitstellung eines Python-Webdienstes an die ASGI-App des SDK an.

Renders kostenloser Dienst eignet sich für eine Demo, wechselt aber nach 15 Minuten ohne Aktivität in den Ruhezustand und benötigt ungefähr eine Minute zum Aufwachen. Für ein interaktives Tool mit gemeinsamem Zugriff würde ich kostenpflichtige Rechenleistung nutzen.

Bereitstellung auf Cloudflare: Die aktuelle Dokumentation des MCP-Handlers und die Anleitung für Remote-Server verwenden. Der aktuelle TypeScript-Ansatz nutzt createMcpHandler aus agents/mcp/server mit @modelcontextprotocol/server. Dort dieselbe Bestellabfrage umsetzen und vor dem Teilen der URL die Authentifizierung einrichten. Der Python-Startbefehl mit uvicorn gilt für einen Python-Host; er ist keine Anleitung zur Bereitstellung eines Workers.

Zugriffsrechte eng begrenzen

Der Server erhält nur den Zugriff, den sein Tool benötigt. Für den Bestellstatus heißt das: Backend-Zugangsdaten mit reinem Lesezugriff, ausgewählte Felder und eine Berechtigungsprüfung je Datensatz. Erstattungen, Stornierungen und Adressänderungen gehören hinter separate Tools mit eigenen Berechtigungen. Die Argumente, die ein Modell auswählt, sind niemals eine Autorisierung.

HTTP-Tokens auf Aussteller, Ablaufzeit, Audience und Scope prüfen. HTTPS verwenden und für Aufrufe nachgelagerter APIs separate Zugangsdaten einsetzen. Die MCP-Sicherheitshinweise verbieten Token-Passthrough: Ein Token, das am MCP-Endpunkt vorgelegt wird, ist nicht automatisch ein Zugangsschlüssel für das Bestellsystem. Bei lokalem stdio den startenden Prozess, seine Umgebung und seinen Dateisystemzugriff einschränken.

Die geprüfte Identität des Aufrufers, den Tool-Namen, einen angemessen geschwärzten Datensatzverweis, das Ergebnis, die Latenz und die Anfrage-ID protokollieren. Tokens und vollständige Kundendatensätze gehören nicht ins Protokoll. Bei stdio auf die Standardfehlerausgabe schreiben, bei HTTP in das Protokollsystem des Hosters. Aus Datensätzen abgerufenen Text als Daten behandeln: Eine Notiz in einer Bestellung darf keine Berechtigung für eine weitere Aktion erteilen.

Ein Gateway vorschalten, wenn mehrere Server oder Teams gemeinsame Identitätsrichtlinien, Ratenbegrenzungen, die Sammlung von Audit-Ereignissen oder den Entzug von Berechtigungen benötigen. Ein Gateway kann diese Kontrollen zentralisieren; jedes Backend braucht trotzdem korrekte Berechtigungen für seine Datensätze. Unser Leitfaden zu MCP-Gateways erläutert diese Entscheidung.

Ein architektonisch gestalteter Sicherheitsablauf führt von der geprüften Identität über Token-Prüfungen zu einer Bestellabfrage mit reinem Lesezugriff und einem Audit-Protokoll
Identität und Scope erlauben die Anfrage. Datensatzberechtigungen begrenzen das Ergebnis. Ein Audit-Ereignis macht den Aufruf nachvollziehbar.

Sechs sinnvolle Anwendungen nach unmittelbarem Nutzen

Diese Abläufe sind mögliche Erweiterungen desselben Musters. Der beste Einstieg liegt dort, wo jemand wiederholt eine klar begrenzte Information abruft und eine korrekte Antwort erkennen kann.

RangMögliche NutzerKonkreter AblaufMöglicher Nutzen
1Ein Supportteam, das Versandfragen beantwortetFreigegebenen Bestellstatus und Versanddienstleister abrufen, dann im vorhandenen Assistenten eine Antwort entwerfenWeniger Wechsel zwischen Posteingang und Bestellsystem
2Ein technischer Mitarbeiter, der Kundenstörungen bearbeitetAktivierte Funktionen und aktuelle Service-Ereignisse eines Kontos anhand der Konto-ID abrufenWeniger Aufwand beim Zusammenstellen des Kontexts vor der Untersuchung
3Ein Kundenbetreuer, der eine Vertragsverlängerung vorbereitetTarif, Verlängerungsdatum und offene Anliegen eines Kunden mit entsprechender Berechtigung abrufenWeniger veraltete Angaben bei der Gesprächsvorbereitung
4Ein Finanzmitarbeiter, der Rechnungsfragen klärtStatus einer freigegebenen Rechnung und den zugehörigen Bestellverweis abfragenSchnellerer Abgleich, ohne Zahlungsbefugnisse zu erteilen
5Ein Entwickler, der Fehler in einer internen Integration suchtEin um sensible Angaben bereinigtes Job-Ergebnis und freigegebene Diagnosefelder anhand der Job-ID abrufenWeniger manuelle Protokollsuche und Weitergabe von Zugangsdaten
6Ein Mitarbeiter, der eine Frage zu internen Richtlinien beantwortetEine freigegebene Richtlinienressource mit Quelle und Aktualisierungsdatum lesenAntworten verweisen auf die tatsächliche Richtlinie statt auf Formulierungen aus dem Gedächtnis

Die Wirtschaftlichkeitsrechnung beginnt beim eigenen Ablauf. Reines Rechenbeispiel: 80 Abfragen pro Tag mit jeweils 2 Minuten Aufwand beanspruchen 160 Minuten. Zeigt eine spätere Messung, dass der angebundene Ablauf pro Abfrage 1 Minute spart, werden täglich 80 Minuten frei. Das ist eine Rechnung, kein Leistungsbenchmark. Korrekte Antworten und Zeitersparnis messen, bevor sich eine Rendite aus den Hostingkosten ableiten lässt.

Zwei Ansätze mit Produktpotenzial

Die aussichtsreichste Möglichkeit ist ein Adapter für Bestellkontext in Supportteams. Ein Team könnte eine eng begrenzte Integration kaufen, die die passenden Versandinformationen in seinem bereits genutzten Assistenten bereitstellt. DataForSEO schätzt 260 Google-Suchanfragen pro Monat in den USA für “customer support automation”, geprüft am 7. Oktober 2026. Das zeigt allgemeines Interesse an der Aufgabe, nicht die Zahl potenzieller MCP-Käufer. Intercom nennt für Fin einen Preis von $0.99 pro Ergebnis. Damit gibt es bereits ein Budget für Supportautomatisierung; dieser kleine Adapter liefert Kontext, statt das Produkt zu ersetzen.

Die kleinste verkaufbare Version könnte ein Bestell-Backend, lookup_order, eine Anmeldung mit begrenzten Berechtigungen, ein Audit-Protokoll und einen Antwortentwurf abdecken, der auf die zurückgegebenen Felder verweist. Ihr Vorteil wäre die genaue Anpassung an Daten und Zugriffsregeln eines Unternehmens. Bestehende Anbieter könnten den passenden Konnektor allerdings bereits haben. Auch Modelllizenzen für das Team, Datenbereinigung und Support verursachen weiterhin Kosten. Diese Lücke zuerst mit einer Supportleitung prüfen, bevor weitere Tools hinzukommen.

Eine Richtlinienabfrage, die Berechtigungen berücksichtigt, ist die zweite Möglichkeit. Ein Betreiber könnte den Zugriff auf die freigegebene Richtliniensammlung eines Unternehmens über Ressourcen oder ein eng begrenztes Such-Tool aufbauen. DataForSEO schätzt 390 monatliche Suchanfragen in den USA für “enterprise search”, geprüft am selben Datum. Das MVP könnte eine Sammlung, Quellenverweise, Aktualitätsprüfungen und eine Filterung anhand der Berechtigungen der angemeldeten Person enthalten. Entscheidend sind dabei Suchqualität und Zugriffskontrolle; einen Ordner mit MCP zugänglich zu machen, lässt sich leicht nachbauen. Die Suchzahl signalisiert Nachfrage nach der übergeordneten Aufgabe, belegt aber keine Zahlungsbereitschaft für diese Umsetzung.

Wo liegen die Grenzen dieses Ansatzes?

MCP standardisiert den Zugriff. Datenqualität, Autorisierung, Zuverlässigkeit des Backends und die Entscheidung darüber, was ein Tool tun darf, bleiben in eigener Verantwortung. Ein Modell kann ein gültiges Ergebnis falsch interpretieren. Auch die unterstützten Funktionen und Freigaberichtlinien können sich zwischen verbundenen Clients unterscheiden.

Dieser Ansatz lohnt sich, wenn eine gemeinsame Tool-Schnittstelle einen messbaren Ablauf verbessert. Für einen festgelegten Batch-Job, bei dem kein Assistent ein Tool auswählen muss, kann ein gewöhnlicher API-Aufruf oder ein Skript die bessere Umsetzung sein.

Der nächste Schritt für Montag: Mit einem Supportmitarbeiter eine wiederkehrende Abfrage auswählen, beide Clients zunächst mit fiktiven Datensätzen verbinden und danach die Datenquelle über ein Konto mit reinem Lesezugriff austauschen. Dabei die Berechtigungen je Datensatz testen. Schreibzugriffe bleiben beim ersten Rollout außen vor. Der Wechsel zu gemeinsam genutztem HTTP folgt, sobald Ablauf und Identitätsprüfung dafür bereit sind.

Wie aufwendig ist es, einen MCP-Server zu erstellen?

Ein kleiner Server mit reinem Lesezugriff lässt sich mit dem offiziellen SDK unkompliziert bauen: Funktion definieren, Eingabe beschreiben und einen Transport wählen. Unternehmensdaten sicher bereitzustellen erfordert mehr Arbeit, weil Berechtigungen durchgesetzt, Zugangsdaten verwaltet und der Dienst betrieben werden müssen.

Gibt es einen kostenlosen MCP-Server zum Testen?

Der Server mit fiktiven Bestellungen aus dieser Anleitung kann lokal ohne Hostinggebühr laufen. Mit MCP Inspector lässt er sich ohne Modellabonnement aufrufen. Cloud-Hosting und der später gewählte KI-Client haben eigene Preise.

Was kostet ein MCP-Server?

Ein lokaler Prozess benötigt keinen separaten Hostingtarif. Cloudflare Workers bietet einen kostenlosen Tarif und einen kostenpflichtigen Einstieg ab $5/Monat. Render nennt $7/Monat für die Rechenleistung seines kleinen kostenpflichtigen Webdienstes. Modellnutzung, Identitätsdienste, Speicher und Entwicklungsaufwand sind darin nicht enthalten.

Muss ein MCP-Server installiert werden?

Bei stdio läuft der Server auf dem Rechner des Clients; dort müssen also Code und Laufzeitumgebung verfügbar sein. Bei Remote-HTTP werden ein Endpunkt eingerichtet und die Authentifizierung durchgeführt; der Server läuft beim Hoster. Maßgeblich ist die Bereitstellungsform, die der gewählte Client unterstützt.

Für Teams, die einen MCP-Dienst für Unternehmensdaten entwickeln und betreiben lassen möchten, übernimmt unser Angebot für KI-Produktionssysteme die Integration und ihre Zugriffskontrollen.

Veröffentlicht
Kategorie
Build
n8n-Alternative Gumloop: Preise, KI und Hosting im Vergleich

n8n-Alternative Gumloop: Preise, KI und Hosting im Vergleich

Gumloop als n8n-Alternative: Preise, Credits, Ausführungen und Self-Hosting im Vergleich. Derselbe KI-Workflow zeigt, welches Tool zum Team passt.7. Okt. 2026Build
LangGraph im Vergleich: 8 Frameworks für KI-Agenten 2026

LangGraph im Vergleich: 8 Frameworks für KI-Agenten 2026

LangGraph, CrewAI und sechs weitere Frameworks für KI-Agenten im Vergleich: Zustand, MCP, Freigaben, Wiederaufnahme und Kosten für den Produktivbetrieb.7. Okt. 2026Build
Codex CLI oder Cloud: Umgebung vorbereiten, Aufgaben weiterlaufen lassen

Codex CLI oder Cloud: Umgebung vorbereiten, Aufgaben weiterlaufen lassen

Codex CLI oder Cloud? Wiederverwendbare Umgebungen einrichten, Aufgaben bei ausgeschaltetem Laptop ausführen und Fortschritt vom Smartphone aus steuern.7. Okt. 2026Build
GitHub Copilot Kosten (2026): Welcher Tarif sich wirklich lohnt

GitHub Copilot Kosten (2026): Welcher Tarif sich wirklich lohnt

GitHub Copilot Kosten im Überblick: Tarife, AI Credits und drei Beispielrechnungen. Pro, Pro+, Max und Team-Tarife mit passenden Ausgabenlimits vergleichen.6. Okt. 2026Build
Copilot CLI von GitHub: Installation, erste Aufgaben und Kosten

Copilot CLI von GitHub: Installation, erste Aufgaben und Kosten

GitHub Copilot CLI im Terminal einrichten, Tests reparieren und Pull Requests öffnen. Mit Tarifen, KI-Credits, Modellen, Berechtigungen und MCP.6. Okt. 2026Build
Web Scraper im Vergleich 2026: Acht Tools für unterschiedliche Aufgaben

Web Scraper im Vergleich 2026: Acht Tools für unterschiedliche Aufgaben

Acht Web Scraper im Vergleich: Firecrawl, Browse AI, Bright Data und weitere Tools. Preise, Gratislimits und Zuständigkeiten für wiederkehrende Datenabrufe.6. Okt. 2026Build
Agent Memory: Was KI-Agenten behalten und was es kostet

Agent Memory: Was KI-Agenten behalten und was es kostet

Was KI-Agenten speichern sollten: Kontext, Sitzungen, Langzeitgedächtnis und Skills. Mit Anbietergrenzen, Kostenbeispielen und Lösungen für typische Fehler.5. Okt. 2026Build
Pinecone Pricing 2026: Tarife, Grenzen und Rechenbeispiele

Pinecone Pricing 2026: Tarife, Grenzen und Rechenbeispiele

Pinecone Pricing 2026: Tarife und Kosten für 1M bis 100M Vektoren. Rechenbeispiele zeigen, wie Suchumfang und Nutzung die Monatsrechnung bestimmen.5. Okt. 2026Build
Newsletter

Ein Brief, jeden Sonntag.Funktionierende Systeme, keine heißen Takes.

Wöchentlich. Kein Spam. Jederzeit abbestellbar.