mcp-demo-server
MCP Demo – Python-Agent-Tooling von Grund auf
Was ist MCP?
MCP (Model Context Protocol) ist ein standardisiertes Protokoll, das es KI-Anwendungen ermöglicht, externe Tools, Ressourcen und Prompts über eine einheitliche Schnittstelle zu entdecken und zu nutzen.
Anstatt dass jedes KI-Framework eine eigene Integration für jede Datenbank, API, jedes Dateisystem oder jeden internen Dienst erfindet, kann ein MCP-Host eine Verbindung zu einem MCP-Server herstellen und dieselbe Protokolloberfläche nutzen.
Probleme, die MCP löst
Problem | MCP-Lösung |
Anbieterbindung | Integrationen stellen Fähigkeiten über MCP bereit, anstatt sie an einen einzelnen Modellanbieter oder ein Agent-Framework zu binden |
Inkonsistenter Tool-Aufruf | Tools haben maschinenlesbare Schemata und standardisierte Entdeckungs-/Aufrufsemantik |
Keine Kontextpersistenz | MCP trennt Kontext-/Tool-Anbieter vom Modell und ermöglicht langlebige Verbindungen |
Dynamische Datenquellen | Datenbanken, APIs, Dateien und interne Systeme werden als MCP-Ressourcen/-Tools gekapselt, ohne die Implementierung in die Modell-Laufzeit einzubetten |
Über das Netzwerk verwendet MCP JSON-RPC-2.0-Nachrichten über Transporte wie stdio und HTTP-basierte Transporte (SSE/Streamable HTTP). Dieses Repository verwendet stdio: Der Client startet den Server als Unterprozess, sendet Protokollnachrichten über stdin und empfängt Antworten über stdout.
Related MCP server: Weather MCP Server
Architektur
flowchart TD
A[User: "What's the weather in London?"] --> B[AI Agent<br/>OpenAI Responses API]
B --> C[1. Discovers MCP tools]
B --> D[2. Decides whether to call]
B --> E[3. Emits function call]
E --> F[MCP Client<br/>ClientSession + stdio]
F --> G[initialize]
F --> H[tools/list]
F --> I[tools/call]
I --> J[JSON-RPC 2.0<br/>stdin/stdout]
J --> K[MCP Server subprocess]
K --> L[get_current_weather tool]
K --> M[greeting://{name} resource]Warum das offizielle SDK?
Dieses Repository verwendet das offizielle Python-MCP-SDK, anstatt das Protokoll neu zu implementieren. Das SDK bietet:
Protokoll-Lebenszyklus und -Validierung
Transportabstraktion (stdio, HTTP/SSE)
Typisierte Client-/Server-APIs
Der Anwendungscode macht die wichtigen MCP-Konzepte weiterhin explizit: Serverregistrierung, Tool-Schemata, initialize, tools/list, tools/call, Ressourcen-Lesevorgänge und stdio-Prozessverwaltung.
Die stabile v2-API des aktuellen SDKs verwendet
MCPServerfür die Serverkonstruktion undClientSession/stdio_clientfür stdio-Clients.
Projektstruktur
mcp-demo/
├── README.md
├── requirements.txt
├── .env.example
├── pyproject.toml
├── src/
│ ├── mcp_server/
│ │ ├── __init__.py
│ │ ├── server.py # MCP server entry point
│ │ ├── tools.py # Tool implementations
│ │ ├── handlers.py # Request handlers
│ │ └── utils.py # Shared utilities
│ ├── mcp_client/
│ │ ├── __init__.py
│ │ ├── client.py # MCP client wrapper
│ │ ├── agent.py # OpenAI agent integration
│ │ └── runner.py # Demo runner
│ └── shared/
│ ├── __init__.py
│ └── types.py # Shared Pydantic models
├── tests/
│ ├── test_server.py
│ └── test_client.py
├── examples/
│ └── demo.ipynb
└── scripts/
└── run_demo.shAnforderungen
Python 3.10+
OpenAI-API-Schlüssel (für die KI-Agenten-Demo)
Kein Wetter-API-Schlüssel erforderlich – das Wetter-Tool verwendet deterministische Beispieldaten, sodass der MCP-Pfad offline funktioniert.
Schnellstart
1. Virtuelle Umgebung erstellen
python -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\Activate.ps1 # Windows PowerShell2. Abhängigkeiten installieren
python -m pip install --upgrade pip
pip install -r requirements.txt3. OpenAI konfigurieren
cp .env.example .envBearbeiten Sie .env mit Ihren Anmeldedaten:
OPENAI_API_KEY=your_api_key_here
OPENAI_MODEL=gpt-4.1-miniDer Server selbst benötigt keinen OpenAI-Schlüssel.
Demo ausführen
Vom Repository-Stammverzeichnis aus
python src/mcp_client/runner.pyWas der Runner tut:
Schritt | Beschreibung |
1️⃣ | Startet |
2️⃣ | Führt den MCP-Initialisierungs-Handshake durch |
3️⃣ | Ruft |
4️⃣ | Konvertiert entdeckte MCP-Schemata → OpenAI-Funktionstools |
5️⃣ | Fordert das Modell auf, eine Frage in natürlicher Sprache zu beantworten |
6️⃣ | Wenn das Modell |
7️⃣ | Sendet das MCP-Ergebnis zurück an das Modell |
8️⃣ | Gibt die endgültige Antwort aus |
9️⃣ | Fährt den Server sauber herunter |
Alternative: Shell-Wrapper
bash scripts/run_demo.shErwartete Ausgabe
Der genaue Wortlaut variiert je nach Modell, aber der Log-Ablauf sieht so aus:
INFO mcp_client.client: -> MCP initialize
INFO mcp_client.client: <- MCP initialize: server=mcp-demo-server
INFO mcp_client.client: -> MCP tools/list
INFO mcp_client.client: <- MCP tools/list: ["get_current_weather"]
INFO mcp_client.agent: User: What's the weather in London?
INFO mcp_client.agent: OpenAI requested tool: get_current_weather {"city":"London","units":"metric"}
INFO mcp_client.client: -> MCP tools/call name=get_current_weather arguments={"city":"London","units":"metric"}
INFO mcp_server.tools: weather lookup city=London units=metric
INFO mcp_client.client: <- MCP tools/call result={"city":"London","temperature":18.0,...}
INFO mcp_client.agent: Final: London is 18°C and partly cloudy.Die Logs zeigen bewusst MCP-semantische Nachrichten an der Anwendungsgrenze. Das SDK übernimmt die JSON-RPC-Rahmung intern.
MCP-Server eigenständig ausführen
python src/mcp_server/server.pyEin stdio-MCP-Server scheint zu „hängen“ – das ist erwartet. Er wartet auf Protokollnachrichten auf stdin. Ein Host/Client sollte ihn starten und die stdio-Pipes besitzen.
Interaktive Protokollprüfung
pip install "mcp[cli]"
mcp dev src/mcp_server/server.pyDemonstrierte MCP-Methoden
Das offizielle SDK übernimmt den JSON-RPC-Lebenszyklus:
Methode | Richtung | Zweck |
| Client → Server | Handshake & Fähigkeitsaushandlung |
| Client → Server | Verfügbare Tools entdecken |
| Client → Server | Ein Tool aufrufen |
| Client → Server | Verfügbare Ressourcen entdecken |
| Client → Server | Eine Ressource lesen |
Der Client ruft explizit initialize() auf, bevor er Fähigkeiten auflistet oder aufruft. Die Dekoratoren des Servers generieren Tool-/Ressourcen-Schemata aus Python-Typannotationen.
Tool: get_current_weather
get_current_weather(
city: str,
units: Literal["metric", "imperial"] = "metric"
) -> WeatherResponseGibt strukturierte, Pydantic-gestützte Nutzdaten zurück:
{
"city": "London",
"temperature": 18.0,
"units": "metric",
"condition": "partly cloudy",
"humidity_percent": 72
}Unbekannte Städte schlagen mit einem kontrollierten MCP-Tool-Fehler fehl, anstatt den Server zum Absturz zu bringen.
Agenten-Integrationsablauf
Der Agent verwendet einfaches OpenAI-Function-Calling (kein zusätzliches Framework), um die Demo fokussiert zu halten:
flowchart LR
A[MCP Tool Schema] --> B[OpenAI Function Tool]
B --> C[Model Chooses Function]
C --> D[MCP ClientSession.call_tool]
D --> E[MCP Server Executes Tool]
E --> F[Function Call Output]
F --> G[Final Model Answer]Dies ist dasselbe Muster, das Agent-Frameworks umsetzen: MCP-Tools entdecken → Schemata dem Modell bereitstellen → ausgewählte Aufrufe über MCP zurückleiten → Ergebnisse in die nächste Modellrunde einspeisen.
Testen
pytest -qDie Testsuite umfasst:
✅ Tool-Ausführung (metrisches Wetter)
✅ Tool-Ausführung (imperiales Wetter)
✅ Validierungs-/Fehlerverhalten (unbekannte Stadt)
✅ In-Process-MCP-Client-Erkennung und Tool-Aufruf
Tests verwenden nach Möglichkeit den In-Memory-Client des SDKs – das vermeidet Subprozess-Flakiness und übt gleichzeitig die echte MCP-Protokollebene.
Formatierung & Linting
Dieses Projekt verwendet Ruff:
# Check
ruff check .
ruff format --check .
# Format
ruff format .Produktionshinweise
Diese Demo ist bewusst klein, repräsentiert aber mehrere Produktionsaspekte:
Anliegen | Implementierung |
stdout-Disziplin | Server gibt niemals App-Logs auf stdout aus (gehört zu MCP); Logs gehen über |
Typisierte E/A | Pydantic-Modelle validieren Tool-Eingaben/-Ausgaben an der Anwendungsgrenze |
Kontrollierte Fehler | Tool-Ausnahmen → MCP-Fehlerergebnisse (SDK), keine Prozessabstürze |
Subprozess-Lebenszyklus | Der stdio-Kontextmanager des SDKs verwaltet Prozessstart/-herunterfahren |
Umgebung mit minimalen Rechten | Der MCP-stdio-Client übergibt explizit die vom Unterprozess benötigten Umgebungsvariablen |
Dynamische Erkennung | Der Agent codiert das Wetter-Tool-Schema nicht fest, sondern entdeckt es über |
Für echte externe Datenquellen: Ersetzen Sie deterministisches Wetter durch authentifizierte API-/Datenbankaufrufe, fügen Sie Timeouts, Wiederholungen, Ratenbegrenzung, Beobachtbarkeit und Geheimnisverwaltung hinzu.
Protokoll-Mentales Modell
Vereinfachte JSON-RPC-Sequenz:
// Client -> Server
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{...}}
// Server -> Client
{"jsonrpc":"2.0","id":1,"result":{...}}
// Client -> Server
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
// Server -> Client
{"jsonrpc":"2.0","id":2,"result":{"tools":[...]}}
// Client -> Server
{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"get_current_weather","arguments":{"city":"London"}}}
// Server -> Client
{"jsonrpc":"2.0","id":3,"result":{"content":[...],"structuredContent":{...}}}Das genaue Protokollschema wird von der MCP-Spezifikation und dem SDK gepflegt. Das Obige ist für Lehrzwecke bewusst vereinfacht.
Referenzen
Offizielles MCP-Python-SDK: https://py.sdk.modelcontextprotocol.io/
MCP-Spezifikation: https://modelcontextprotocol.io/specification/
OpenAI Function Calling: https://platform.openai.com/docs/guides/function-calling
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI agents to retrieve real-time weather conditions and forecasts via OpenWeatherMap API. Supports interactive weather queries and travel planning through MCP tools, resources, and prompts.2
- AlicenseNot gradedqualityDmaintenanceProvides weather data from OpenWeatherMap API through MCP tools and a REST API with OpenAPI support. Enables LLM agents to retrieve current weather, forecasts, and temperature ranges by city or coordinates.21MIT
- AlicenseNot gradedqualityCmaintenanceWraps the OpenWeatherMap API to provide weather data through MCP, enabling AI agents to query current conditions, forecasts, and other weather information via natural language.10MIT
- AlicenseNot gradedqualityCmaintenanceProvides weather data from WeatherAPI.com through MCP, enabling AI agents to query current conditions and forecasts via natural language.11MIT
Related MCP Connectors
Pocket Agent (aipocketagent.com) MCP server — read tools for personas, apps, and product info.
OpenWeather MCP — wraps the OpenWeatherMap API (openweathermap.org)
NOAA and ECMWF weather forecast MCP for discovery, validation, and GribStream OAuth queries.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mhamzanadeem/mcp-playground'
If you have feedback or need assistance with the MCP directory API, please join our Discord server