Integrations
Provides integration with Express, allowing developers to easily add Model Context Protocol (MCP) capabilities to Express applications with both stateful session management and stateless request handling options.
Express-MCP-Handler
Eine Middleware zur Integration des Model Context Protocol (MCP) mit Express-Anwendungen, die eine nahtlose Kommunikation zwischen LLMs und Tools ermöglicht.
Was ist das Model Context Protocol (MCP)?
Model Context Protocol (MCP) ist ein offenes Protokoll zur Integration großer Sprachmodelle (LLMs) mit externen Datenquellen und Tools. Es ermöglicht KI-Assistenten den Zugriff auf Echtzeitdaten, die Ausführung von Operationen und die Interaktion mit verschiedenen Diensten über eine standardisierte Schnittstelle.
Merkmale
- Stateful Handler : Kann einmalige Anfragen verarbeiten oder langlebige Sitzungen mit Sitzungs-IDs und Server-Sent Events (SSE) aufrechterhalten.
- Stateless Handler : Behandelt jede Anfrage vollständig isoliert für einfache, einmalige Interaktionen.
- SSE-Handler : Verarbeitet Model Context Protocol (MCP) über Server-Sent Events (SSE) mit dedizierten GET- und POST-Endpunkten.
- Typsichere API : Erstellt mit TypeScript für zuverlässige Integration.
- Flexible Konfiguration : Anpassbare Fehlerbehandlung, Sitzungsverwaltung und Lebenszyklus-Hooks.
- Express-Integration : Lässt sich mit Middleware-Muster direkt in Express-Routen einbinden.
Installation
Über npm installieren:
Oder Garn:
Oder pnpm:
Peer-Abhängigkeiten
Dieses Paket erfordert die folgenden Peer-Abhängigkeiten:
express
>= 4.0.0@modelcontextprotocol/sdk
>= 1.10.2zod
>= 3.0.0
Installieren Sie sie, falls Sie dies noch nicht getan haben:
Schnellstart
Hier ist ein einfaches Beispiel für den Einstieg:
Verwendung
Express-mcp-handler bietet drei Handlertypen für unterschiedliche Anwendungsfälle:
Stateful-Modus
Verwenden Sie statefulHandler
, um wiederverwendbare Sitzungen zwischen Client und Server einzurichten. Dies ist ideal, um den Kontext über mehrere Interaktionen hinweg aufrechtzuerhalten:
Der Stateful-Handler:
- Initialisiert eine neue Sitzung bei der ersten Anfrage (ohne
mcp-session-id
Header) - Gibt einen
mcp-session-id
Header zurück, den Clients in nachfolgende Anfragen einschließen müssen - Verwaltet Server-Sent Events (SSE), um Nachrichten vom Server an den Client zu senden
- Bereinigt Sitzungen automatisch, wenn sie geschlossen werden
Zustandsloser Modus
Verwenden Sie statelessHandler
für die einmalige Anforderungsverarbeitung ohne Sitzungsverwaltung, perfekt für serverlose Umgebungen oder einfache Anforderungen:
Jede zustandslose Anfrage:
- Erstellt eine neue Transport- und Serverinstanz
- Gewährleistet vollständige Isolierung ohne Sitzungsverfolgung
- Ist für einfache oder serverlose Umgebungen geeignet
SSE-Modus
Verwenden Sie sseHandlers
, um Model Context Protocol (MCP) über Server-Sent Events (SSE) zu verarbeiten, ideal für Streaming-Antworten in Echtzeit:
SSE-Handler bieten:
- GET /sse : Erstellt den SSE-Stream und gibt einen
mcp-session-id
Header zurück - POST /messages : Sendet MCP-Nachrichten über den SSE-Transport unter Verwendung des Abfrageparameters
mcp-session-id
API-Referenz
StatefulHandler
Parameter | Typ | Beschreibung |
---|---|---|
server | McpServer | Instanz von McpServer zur Handhabung der Protokolllogik |
options.sessionIdGenerator | () => string | Funktion, die eine eindeutige Sitzungs-ID zurückgibt |
options.onSessionInitialized | (sessionId: string) => void | (optional) Rückruf mit der neuen Sitzungs-ID |
options.onSessionClosed | (sessionId: string) => void | (optional) Rückruf, der beim Schließen einer Sitzung aufgerufen wird |
options.onError | (error: Error, sessionId?: string) => void | (optional) Rückruf bei Fehlern |
options.onInvalidSession | (req: express.Request) => void | (optional) Rückruf, der beim Zugriff auf eine ungültige Sitzung aufgerufen wird |
zustandsloser Handler
Parameter | Typ | Beschreibung |
---|---|---|
serverFactory | () => McpServer | Funktion, die für jede Anfrage eine neue Serverinstanz zurückgibt |
options.sessionIdGenerator | () => string | (optional) Generierung der Transportsitzungs-ID überschreiben |
options.onClose | (req: express.Request, res: express.Response) => void | (optional) Rückruf wird ausgelöst, wenn der Anfrage-/Antwortzyklus endet |
options.onError | (error: Error) => void | (optional) Rückruf, der bei Fehlern während der Verarbeitung ausgelöst wird |
sseHandlers
Parameter | Typ | Beschreibung |
---|---|---|
serverFactory | ServerFactory | Factory-Funktion, die für jede SSE-Verbindung einen neuen McpServer zurückgibt |
options.onError | (error: Error, sessionId?: string) => void | (optional) Rückruf wird bei Fehlern aufgerufen, empfängt error und optionale sessionId |
options.onClose | (sessionId: string) => void | (optional) Rückruf, der aufgerufen wird, wenn eine SSE-Sitzung geschlossen wird, empfängt sessionId |
Fehlerbehandlung
Alle Handlertypen unterstützen die benutzerdefinierte Fehlerbehandlung über ihre Optionen:
TypeScript-Unterstützung
Dieses Paket ist in TypeScript geschrieben und bietet Typdefinitionen für alle Exporte. Bei Verwendung von TypeScript profitieren Sie von vollständigem IntelliSense und Typprüfung.
Entwicklung
So tragen Sie zu diesem Projekt bei:
Testabdeckung
Das Projekt verfügt über eine solide Testabdeckung und verspricht, diese aufrechtzuerhalten.
Alle Änderungen werden über unsere CI/CD-Pipeline überprüft, wobei Jest zum Testen und Codecov zum Berichten der Abdeckung verwendet wird.
Kontinuierliche Integration
Dieses Projekt nutzt GitHub Actions für kontinuierliche Integration. Jeder Push zum Hauptzweig und Pull Request führt zu:
- Führen Sie den Lint-Check durch
- Erstellen des Projekts
- Führen Sie Tests mit Abdeckung durch
- Abdeckungsberichte zu Codecov hochladen
Sie können den aktuellen CI-Status im Badge oben in dieser README-Datei oder auf der Registerkarte „Aktionen“ des GitHub-Repositorys anzeigen.
Lizenz
Veröffentlichen auf npm
Melden Sie sich bei npm an, falls Sie dies noch nicht getan haben:
Veröffentlichen Sie das Paket in npm (führt Ihren PrepublishOnly-Build aus):
So erhöhen, markieren und pushen Sie eine neue Version:
Handlertypen im Überblick
Handler | Szenario | Sitzungen | Streaming |
---|---|---|---|
zustandsloser Handler | Einmalige oder serverlose Workloads | NEIN | NEIN |
StatefulHandler | Multiturn-Interaktionen | Ja | Ja |
sseHandlers | SSE-Streaming in Echtzeit | Ja | Ja |
Fehlerbehebung
Fehlender mcp-session-id
Header
Stellen Sie sicher, dass der Client den mcp-session-id
Header einschließt, der bei der ursprünglichen Anforderung zurückgegeben wurde.
Verkehrsanbindung vorzeitig geschlossen
Überprüfen Sie die Netzwerkkonnektivität und stellen Sie sicher, dass der Client SSE-Ereignisse ordnungsgemäß verarbeitet.
Änderungsprotokoll
Alle wesentlichen Änderungen an diesem Projekt sind im CHANGELOG.md dokumentiert.
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Ein Dienstprogramm, das Model Context Protocol (MCP) in Express-Anwendungen integriert und sowohl Optionen für die zustandsbehaftete Sitzungsverwaltung als auch für die zustandslose Anforderungsverarbeitung bietet.
Related MCP Servers
- -securityAlicense-qualityMCP Server simplifies the implementation of the Model Context Protocol by providing a user-friendly API to create custom tools and manage server workflows efficiently.Last updated -43TypeScriptMIT License
- -securityAlicense-qualityMCP Server provides a simpler API to interact with the Model Context Protocol by allowing users to define custom tools and services to streamline workflows and processes.Last updated -132TypeScriptMIT License
- AsecurityAlicenseAqualityA Model Context Protocol (MCP) server that provides tools for managing todo items, including creation, updating, completion, deletion, searching, and summarizing tasks.Last updated -104TypeScriptMIT License
- AsecurityFlicenseAqualityA Model Context Protocol (MCP) server that provides a simple sleep/wait tool, useful for adding delays between operations such as waiting between API calls or testing eventually consistent systems.Last updated -167JavaScript