MCPResilience
🛡️ MCPResilience
Ein belastbarer, spezifikationskonformer MCP-Server basierend auf dem offiziellen SDK v2
Sprich MCP, wie dein Client es spricht. MCPResilience erkennt automatisch die Legacy- und modernen Protokoll-Ären bei der allerersten Anfrage – und übersteht den Unterschied.
🔌 Client-Modi
MCPResilience erkennt automatisch, welche Protokoll-Ära ein verbindender Client spricht – keine Konfiguration erforderlich:
⚡ Moderne zustandslose Clients – Clients, deren erste Anfrage die
_meta-Hülle (io.modelcontextprotocol/protocolVersion+clientInfo) trägt, überspringen den Handshake vollständig.tools/callkann ihre allererste Nachricht sein.🤝 Legacy-Handshake-Clients – Clients ohne diese Hülle werden durch den traditionellen
initialize-Ablauf geführt, wobei-32600 Invalid request parametersfür alles erzwungen wird, was vor Abschluss voninitializegesendet wird.
Siehe Protokollunterstützung für die vollständige Aufschlüsselung beider Ären.
Related MCP server: mcp-uni
🧠 Was das ist
MCPResilience existiert, weil der Austausch eines handgeschriebenen MCP-Servers durch das offizielle SDK kein Drop-in-Wechsel ist – das Drahtformat ändert sich auf eine Weise, die naive Migrationen bricht. Dieses Projekt geht das in zwei Phasen an:
SDK-Migration – Ersetzen eines handgeschriebenen MCP-Serverkerns durch das offizielle MCP SDK v2, das auf die
2026-07-28-Spezifikation abzielt, um einen zustandslosen Kern und typsichere Pydantic-Serialisierung zu erhalten.Kompatibilitäts-Härtung – Sicherstellen, dass die Migration nicht stillschweigend die Unterstützung für Clients verliert, die noch den Legacy-Handshake verwenden, keine Daten durch Lücken im Upstream-Schema verliert oder die experimentelle Tasks-Erweiterung mitten im Betrieb bricht.
Beide Phasen sind unten ehrlich dokumentiert, einschließlich des einen Upstream-SDK-Bugs, der dabei aufgetaucht ist.
📊 Wichtige Ergebnisse
Alle Kompatibilitätstests der Phase 5 und Benchmarks der Phase 6 bestehen Ende-zu-Ende auf dem offiziellen MCP SDK v2 – mit vollständiger Unterstützung für beide Protokoll-Ären und die experimentelle Tasks-Erweiterung, plus einem identifizierten und gepatchten Upstream-SDK-Bug (siehe Bekannte SDK-Eigenheit).
Tasks-Erweiterung: Was sich unter der SDK-Migration geändert hat
Aspekt | Legacy-Verhalten | SDK-v2-Verhalten |
Deklarieren der Aufgabenunterstützung | Boolesches |
|
Position des Aufgaben-Handles |
| Verschoben in die Metadaten-Hülle: |
Endzustand für Erfolg |
|
|
Zustellung des Aufgabeninhalts | Über | Nur über den |
Erneutes Abbrechen einer abgeschlossenen Aufgabe |
| Idempotent – gibt |
🏗️ So funktioniert es
Incoming connection
│
▼
First request received
│
▼
Does it carry the _meta envelope?
(protocolVersion + clientInfo)
│
┌────┴────┐
Yes No
│ │
▼ ▼
Modern Era Legacy Era
(stateless) (handshake required)
│ │
▼ ▼
tools/call initialize → any request
runs (initialize enforced,
immediately notifications/initialized
not blocked)
│ │
└─────┬─────┘
▼
Era locked for the
life of the connection📡 Protokollunterstützung
Zustandslose Ära (2026-07-28)
Unter der modernen Spezifikation ist der traditionelle initialize → notifications/initialized-Handshake veraltet. Der Server führt eine serve_dual_era_loop aus:
Wenn die erste Anfrage die
_meta-Hülle mitio.modelcontextprotocol/protocolVersionundio.modelcontextprotocol/clientInfoenthält, verriegelt sich der Server in die moderne zustandslose Ära.Clients können
tools/callals allererste Anfrage senden – keininitialize-Aufruf erforderlich.
Legacy-Ära
Wenn die erste Anfrage die moderne _meta-Hülle vermissen lässt, verriegelt sich der Server in die Legacy-Ära:
Jede Anfrage, die vor
initializegesendet wird (z. B.tools/call), wird mit-32600 Invalid request parametersabgelehnt.Sobald
initializebeantwortet wurde, wartet der Server nicht aufnotifications/initialized, bevor er weitere Anfragen verarbeitet.
Behandlung von Versionskonflikten
Moderne Anfragen, die eine nicht unterstützte Protokollversion in der _meta-Hülle angeben, werden sauber mit -32022 Unsupported protocol version abgelehnt – die Verbindung selbst bleibt erhalten, anstatt abgebrochen zu werden.
🧩 Tasks-Erweiterung im Detail
Die experimentelle Tasks-Erweiterung hat bei der Migration die größten Änderungen im Drahtformat durchgemacht (siehe die Vergleichstabelle in Wichtige Ergebnisse). Zwei Verhaltensweisen sind besonders erwähnenswert:
tasks/getist jetzt nur noch Metadaten. Der Aufgabeninhalt wird ausschließlich über dentools/call-Antwortstream geliefert; das Pollen vontasks/getgibt nur Statusfelder wiestatusMessageundcreatedAtzurück – niemals die Nutzlast selbst.Der Abbruch ist von Natur aus idempotent. Das erneute Abbrechen einer bereits
completed- odercancelled-Aufgabe gibt ein erfolgreichesCancelTaskResultzurück, anstatt einen Fehler zu liefern, anders als der-32602des Legacy-Servers bei wiederholtem Abbruch.
Bekannte SDK-Eigenheit
SDK-Issue #2156 – execution-Feld wird aus tools/list entfernt. Das aktuelle Pydantic-Schema für v2026_07_28.Tool definiert das experimentelle execution-Feld nicht, daher entfernt serialize_server_result es stillschweigend aus tools/list-Antworten.
Workaround: Ein gezielter Monkeypatch auf mcp_types.methods.serialize_server_result fängt die validierte Ausgabe ab und stellt das execution-Wörterbuch aus den ursprünglichen Handler-Daten wieder her. Dies ist eine Übergangslösung – entfernen Sie sie, sobald das Upstream-Schema das Feld nativ enthält.
🔧 Technische Hinweise (die nicht trivialen Teile)
Die Ära-Erkennung erfolgt genau einmal, bei der ersten Anfrage. Es gibt keinen Upgrade-Pfad mitten in der Verbindung – ein Client, der ohne die
_meta-Hülle öffnet, bleibt für die Lebensdauer dieser Verbindung in der Legacy-Ära, selbst wenn er später modern geformte Anfragen sendet.Der Aufgaben-Handle hat sich nicht nur verschoben, sein Vertrag hat sich geändert. Die Verlagerung von
taskHandlevon der obersten Ebeneresultzuresult._metahat auch dasresult-Objekt auf oberster Ebene freigegeben, um es ausschließlich für die unmittelbare Inhaltsausgabe und dasisError-Flag zu reservieren – eine sauberere Trennung, als es die Legacy-Form erlaubte.Der Monkeypatch ist bewusst eng begrenzt. Er fängt nur
serialize_server_resultab, um ein fehlendes Feld wiederherzustellen, anstatt das SDK-Schema komplett zu forken oder zu umhüllen – so bleibt der Patch leicht zu entfernen, sobald Upstream einen Fix liefert.
🛠️ Technologie-Stack
Protokoll: JSON-RPC 2.0 über das Model Context Protocol, Spezifikation
2026-07-28SDK: Offizielles MCP SDK v2 – Pydantic-basierte Schema-Validierung und -Serialisierung
Serverkern: Python, zustandslose Erst-Anfrage-Verarbeitung (
serve_dual_era_loop)Tests: Kompatibilitätssuite der Phase 5 + Benchmark-Lauf der Phase 6
🚀 Erste Schritte
git clone https://github.com/HoorShumail/MCPResilience.git
cd MCPResilience
pip install -r requirements.txtPassen Sie die obigen Befehle an Ihr tatsächliches Paketlayout und Ihren Einstiegspunkt an.
Führen Sie die Kompatibilitätssuite und die Benchmarks aus mit:
pytest⚠️ Ehrliche Einschränkungen
Die Tasks-Erweiterung ist upstream noch experimentell. Sie ist in der Kern-MCP-Spezifikation nicht finalisiert, daher könnte sich ihr Drahtformat in einer zukünftigen SDK-Version erneut ändern – dieser Server folgt der aktuellen experimentellen Implementierung des SDK, nicht einem stabilen Ziel.
Der Fix für das
execution-Feld ist ein Monkeypatch, keine dauerhafte Lösung. Er patchtserialize_server_resultzur Laufzeit, anstatt das zugrunde liegende Schema zu beheben – er muss entfernt werden, sobald SDK-Issue #2156 einen Upstream-Fix liefert.Die Ära-Erkennung erfolgt nur bei der ersten Anfrage. Ein Client, der zu Verbindungsbeginn in die Legacy-Ära gesperrt ist, hat keinen Weg, mitten in der Verbindung auf die zustandslose Ära zu „upgraden", selbst wenn seine späteren Anfragen modern aussehen.
🙏 Danksagungen
Offizielles MCP SDK v2 – Maintainer des Model Context Protocol
Model Context Protocol Spezifikation (
2026-07-28)
🧑💻 Autor
Hoor Shumail KI | Maschinelles Lernen | Agentische KI | Multi-Agenten-Systeme | Karriere-Intelligenz
📜 Lizenz
Dieses Projekt wird für Bildungs-, Forschungs- und Portfoliozwecke entwickelt.
Es basiert auf dem offiziellen Model Context Protocol SDK – beachten Sie die eigene Lizenz dieses SDK und die Model Context Protocol Spezifikation für die Bedingungen, die diese Komponenten regeln.
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
- -licenseNot gradedqualityNot gradedmaintenanceA dual-protocol MCP server that supports both modern Streamable HTTP and legacy HTTP+SSE protocols, providing backward compatibility for clients while offering advanced features like session resumability.
- AlicenseNot gradedqualityCmaintenanceA universal MCP server that acts as a unified gateway for dynamically connecting and managing multiple MCP servers via a single HTTP endpoint.106MIT
- AlicenseNot gradedqualityDmaintenanceEnables access to Apollo's tools and services through a standardized MCP interface, compatible with MCP-compliant clients.1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that enables agents to dynamically switch between multiple AI models (OpenAI, Anthropic, Google, etc.) with unified protocol-driven configuration and capability discovery.Apache 2.0
Related MCP Connectors
Manage feature requests, votes, roadmaps, and changelogs from any MCP client.
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
Official remote MCP server for Archivist AI TTRPG campaign memory: characters, sessions, and more.
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/HoorShumail/MCPResilience'
If you have feedback or need assistance with the MCP directory API, please join our Discord server