Das Model Context Protocol (MCP) entwickelte sich in nur achtzehn Monaten von einem "Nebenthema von Anthropic" zu einem Branchenstandard. Stand März 2026 verzeichnen MCP-SDKs monatlich 97 Millionen Downloads. Jedes ernstzunehmende Agenten-Framework – darunter Claude, Cursor, OpenAI Agents SDK und Microsoft Agent Framework – unterstützt MCP nativ. Für Python-Backend-Entwickler ist MCP derzeit das wichtigste Thema zum Lernen.
Dieser Beitrag erklärt praktisch, wie man einen produktionsreifen MCP-Server mit FastMCP, dem Python-Framework, das die Entwicklung vereinfacht, bereitstellt.
Was ist MCP? MCP ist ein Protokoll, um Tools, Ressourcen und Prompts standardisiert an einen KI-Agenten zu exponieren. Statt dass jedes Agenten-Framework eigene Adapterformate erfindet, schreibt man einmal einen Server, der in jeden MCP-kompatiblen Client integriert werden kann. Man kann es sich wie "USB-C für Agenten" vorstellen.
Ein minimaler Server exponiert: Tools – Funktionen, die der Agent aufrufen kann (z. B. search_customers, get_order_status) Ressourcen – URIs, die der Agent lesen kann (z. B. crm://contacts/123) Prompts – parametrisierte Prompt-Vorlagen
Starter: Ein FastMCP-Server in 40 Zeilen
server.py
from fastmcp import FastMCP
from pydantic import BaseModel
import httpx
mcp = FastMCP("internal-crm")
class Customer(BaseModel):id: str name: str tier: str mrr: float
@mcp.tool()
async def search_customers(query: str, tier: str | None = None) -> list[Customer]:"""Suche im CRM nach Kunden anhand von Name oder E-Mail. Optional nach Tier filtern.""" async with httpx.AsyncClient() as client: r = await client.get( " params={"q": query, "tier": tier}, ) return [Customer(**row) for row in r.json()]
@mcp.tool()
async def get_customer_notes(customer_id: str) -> str:"""Hole die neuesten Notizen des Account-Managers für einen Kunden.""" async with httpx.AsyncClient() as client: r = await client.get(f") return r.text
@mcp.resource("crm://customer/{customer_id}")
async def customer_resource(customer_id: str) -> str:"""Nur-lesbares Kundenprofil.""" async with httpx.AsyncClient() as client: r = await client.get(f") return r.text
if __name__ == "__main__": mcp.run(transport="streamable-http", host="0.0.0.0", port=8000)
Das ist ein vollständiger, produktionsnaher MCP-Server. Typensichere Eingaben und Ausgaben über Pydantic. Docstrings werden zu Tool-Beschreibungen, die der Agent liest. Ressourcen erhalten URIs, die der Agent in seinen Kontext einbetten kann.
Der Transport-Wechsel: stdio → Streamable HTTP Jedes MCP-Tutorial aus 2024 nutzte stdio-Transport – der Server läuft als Subprozess, der Agent leitet JSON-RPC über stdin/stdout weiter. Das ist für Desktop-Tools wie Claude Desktop in Ordnung. Für die Produktion ist das die falsche Lösung. Streamable HTTP (finalisiert in der Spezifikation 2025) behebt dies: Server laufen als langlebige HTTP-Dienste, nicht als Subprozesse pro Aufruf Skalieren horizontal hinter einem Load Balancer Über Teams und Apps hinweg nutzbar Einmal bereitstellen, über URL entdecken In FastMCP ist der Wechsel eine Zeile: transport="streamable-http".
Authentifizierung: OAuth 2.1 auf einfache Weise Die MCP-Spezifikation 2025 führte OAuth 2.1 als Standard-Authentifizierungsmechanismus ein. Man sollte nichts Eigenes entwickeln. FastMCP enthält OAuth-Middleware, die sich in bestehende Identitätsanbieter (Auth0, Okta, Cognito, Clerk etc.) integriert: from fastmcp.auth import OAuth2Middleware
mcp.add_middleware(OAuth2Middleware( issuer=" audience="mcp-internal-crm", required_scope="crm:read", ))
Der Agent übernimmt den Autorisierungsprozess. Der Server beschränkt sich darauf, die Scopes für jedes Tool durchzusetzen.
Bereitstellung auf AWS ohne unnötige Kosten Zwei Muster haben sich für produktionsreife MCP-Server bewährt:
Muster A – Gering frequentierte interne Tools: Lambda + API Gateway Nutzt mangum oder den ASGI-Adapter von FastMCP, um innerhalb von Lambda zu laufen Cold Starts ~300-500 ms (akzeptabel für menschengesteuerte Agenteninteraktionen) Kosten: nahezu null bei Inaktivität
Muster B – Hochfrequentierte gemeinsame Server: ECS Fargate hinter ALB Ein Dienst pro logischem Server Automatische Skalierung nach CPU/RAM Kombiniert mit ElastiCache für zustandsbehaftete Sitzungskontinuität Kosten: vorhersehbar, ~30 USD/Monat für einen kleinen, immer aktiven Dienst
KI-Zusammenfassung
Learn to build production-grade MCP servers in Python with FastMCP, Streamable HTTP, OAuth 2.1, and AWS deployment. Includes 40-line starter code and cost optimization strategies.