Einfach MCP
Ein TypeScript-Framework zum Erstellen von MCP -Servern, die Clientsitzungen verarbeiten können.
[!NOTIZ]
Eine Python-Implementierung finden Sie unter sova .
Merkmale
- Einfache Definition von Werkzeug, Ressource und Eingabeaufforderung
- Authentifizierung
- Sitzungen
- Bildinhalt
- Audioinhalte
- Protokollierung
- Fehlerbehandlung
- SSE
- CORS (standardmäßig aktiviert)
- Fortschrittsbenachrichtigungen
- Typisierte Serverereignisse
- Schnelle automatische Vervollständigung von Argumenten
- Probenahme
- Automatisierte SSE-Pings
- Wurzeln
- CLI zum Testen und Debuggen
Installation
Schnellstart
[!NOTIZ]
Es gibt viele Beispiele für den Einsatz von Sova in der Praxis. Beispiele finden Sie im Showcase .
Das war's! Sie haben einen funktionierenden MCP-Server.
Sie können den Server im Terminal mit folgendem testen:
SSE
Server-Sent Events (SSE) bieten Servern einen Mechanismus, um Echtzeit-Updates über eine HTTPS-Verbindung an Clients zu senden. Im Kontext von MCP wird SSE hauptsächlich verwendet, um die Remote-MCP-Kommunikation zu ermöglichen. Dadurch kann auf ein auf einem Remote-Rechner gehostetes MCP zugegriffen werden und Updates über das Netzwerk weitergeleitet werden.
Sie können den Server auch mit SSE-Unterstützung betreiben:
Dadurch wird der Server gestartet und wartet auf SSE-Verbindungen unter http://localhost:8080/sse
.
Anschließend können Sie SSEClientTransport
verwenden, um eine Verbindung zum Server herzustellen:
Kernkonzepte
Werkzeuge
Tools in MCP ermöglichen es Servern, ausführbare Funktionen verfügbar zu machen, die von Clients aufgerufen und von LLMs zum Ausführen von Aktionen verwendet werden können.
Sova verwendet die Standardschemaspezifikation zur Definition von Werkzeugparametern. Dies ermöglicht Ihnen die Verwendung Ihrer bevorzugten Schemavalidierungsbibliothek (z. B. Zod, ArkType oder Valibot), sofern diese die Spezifikation implementiert.
Zod-Beispiel:
ArkType-Beispiel:
Valibot-Beispiel:
Valibot erfordert die Peer-Abhängigkeit @valibot/to-json-schema.
Zurückgeben einer Zeichenfolge
execute
kann eine Zeichenfolge zurückgeben:
Letzteres ist gleichbedeutend mit:
Zurückgeben einer Liste
Wenn Sie eine Liste von Nachrichten zurückgeben möchten, können Sie ein Objekt mit einer content
zurückgeben:
Zurückgeben eines Bildes
Verwenden Sie imageContent
, um ein Inhaltsobjekt für ein Bild zu erstellen:
Die Funktion imageContent
akzeptiert die folgenden Optionen:
url
: Die URL des Bildes.path
: Der Pfad zur Bilddatei.buffer
: Die Bilddaten als Puffer.
Es darf nur eine der Optionen url
, path
oder buffer
angegeben werden.
Das obige Beispiel ist gleichbedeutend mit:
Rückgabe eines Audios
Verwenden Sie audioContent
, um ein Inhaltsobjekt für ein Audio zu erstellen:
Die Funktion audioContent
akzeptiert die folgenden Optionen:
url
: Die URL des Audios.path
: Der Pfad zur Audiodatei.buffer
: Die Audiodaten als Puffer.
Es darf nur eine der Optionen url
, path
oder buffer
angegeben werden.
Das obige Beispiel ist gleichbedeutend mit:
Rückgabekombinationstyp
Auf diese Weise können Sie verschiedene Typen kombinieren und an die KI zurücksenden
Protokollierung
Tools können mithilfe des log
im Kontextobjekt Nachrichten an den Client protokollieren:
Das log
verfügt über die folgenden Methoden:
debug(message: string, data?: SerializableValue)
error(message: string, data?: SerializableValue)
info(message: string, data?: SerializableValue)
warn(message: string, data?: SerializableValue)
Fehler
Die Fehler, die dem Benutzer angezeigt werden sollen, sollten als UserError
-Instanzen ausgegeben werden:
Fortschritt
Tools können den Fortschritt melden, indem sie reportProgress
im Kontextobjekt aufrufen:
Werkzeuganmerkungen
Ab der MCP-Spezifikation (26.03.2025) können Tools Anmerkungen enthalten, die durch Hinzufügen von Metadaten zum Verhalten eines Tools einen umfassenderen Kontext und mehr Kontrolle bieten:
Die verfügbaren Anmerkungen sind:
Anmerkung | Typ | Standard | Beschreibung |
---|---|---|---|
title | Schnur | - | Ein für Menschen lesbarer Titel für das Tool, nützlich für die UI-Anzeige |
readOnlyHint | Boolescher Wert | false | Wenn „true“, bedeutet dies, dass das Tool seine Umgebung nicht ändert. |
destructiveHint | Boolescher Wert | true | Wenn „true“, kann das Tool destruktive Updates durchführen (nur sinnvoll, wenn readOnlyHint „false“ ist). |
idempotentHint | Boolescher Wert | false | Wenn „true“, hat das wiederholte Aufrufen des Tools mit denselben Argumenten keine zusätzlichen Auswirkungen (nur sinnvoll, wenn readOnlyHint “ „false“ ist). |
openWorldHint | Boolescher Wert | true | Wenn dies zutrifft, kann das Tool mit einer „offenen Welt“ externer Entitäten interagieren. |
Diese Anmerkungen helfen Kunden und LLMs dabei, besser zu verstehen, wie die Tools zu verwenden sind und was sie bei deren Aufruf erwartet.
Ressourcen
Ressourcen stellen alle Arten von Daten dar, die ein MCP-Server Clients zur Verfügung stellen möchte. Dies kann Folgendes umfassen:
- Dateiinhalt
- Screenshots und Bilder
- Und mehr
Jede Ressource wird durch eine eindeutige URI identifiziert und kann entweder Text oder Binärdaten enthalten.
[!NOTIZ]
load
kann mehrere Ressourcen zurückgeben. Dies kann beispielsweise verwendet werden, um beim Lesen eines Verzeichnisses eine Liste der Dateien innerhalb des Verzeichnisses zurückzugeben.
Sie können in load
auch binäre Inhalte zurückgeben:
Ressourcenvorlagen
Sie können auch Ressourcenvorlagen definieren:
Automatische Vervollständigung von Ressourcenvorlagenargumenten
Stellen Sie complete
Funktionen für Ressourcenvorlagenargumente bereit, um die automatische Vervollständigung zu ermöglichen:
Eingabeaufforderungen
Mithilfe von Eingabeaufforderungen können Server wiederverwendbare Eingabeaufforderungsvorlagen und Workflows definieren, die Clients Benutzern und LLMs problemlos bereitstellen können. Sie bieten eine leistungsstarke Möglichkeit, gängige LLM-Interaktionen zu standardisieren und gemeinsam zu nutzen.
Schnelle automatische Vervollständigung von Argumenten
Eingabeaufforderungen können eine automatische Vervollständigung ihrer Argumente bereitstellen:
Schnelle automatische Vervollständigung von Argumenten mithilfe von enum
Wenn Sie ein enum
Array für ein Argument angeben, stellt der Server automatisch Vervollständigungen für das Argument bereit.
Authentifizierung
Sova ermöglicht Ihnen die authenticate
von Clients mithilfe einer benutzerdefinierten Funktion:
Jetzt können Sie in Ihren Tools auf die authentifizierten Sitzungsdaten zugreifen:
Anweisungen geben
Mit der Option instructions
können Sie dem Server Anweisungen geben:
Sitzungen
Das session
ist eine Instanz von sovaSession
und beschreibt aktive Clientsitzungen.
Wir weisen jeder Clientverbindung eine neue Serverinstanz zu, um eine 1:1-Kommunikation zwischen Client und Server zu ermöglichen.
Typisierte Serverereignisse
Sie können mit der Methode on
auf vom Server ausgegebene Ereignisse warten:
sovaSession
sovaSession
stellt eine Client-Sitzung dar und bietet Methoden zur Interaktion mit dem Client.
Beispiele zum Abrufen einer sovaSession
Instanz finden Sie unter „Sitzungen“ .
requestSampling
requestSampling
erstellt eine Sampling -Anforderung und gibt die Antwort zurück.
clientCapabilities
Die Eigenschaft clientCapabilities
enthält die Clientfunktionen.
loggingLevel
Die Eigenschaft loggingLevel
beschreibt die vom Client festgelegte Protokollierungsebene.
roots
Die roots
-Eigenschaft enthält die vom Client festgelegten Roots.
server
Die server
enthält eine Instanz des MCP-Servers, der mit der Sitzung verknüpft ist.
Typisierte Sitzungsereignisse
Sie können mit der Methode on
auf von der Sitzung ausgegebene Ereignisse warten:
Ausführen Ihres Servers
Testen mit mcp-cli
Der schnellste Weg zum Testen und Debuggen Ihres Servers ist mit sova dev
:
Dadurch wird Ihr Server mit mcp-cli
ausgeführt, um Ihren MCP-Server im Terminal zu testen und zu debuggen.
Prüfen mit MCP Inspector
Eine andere Möglichkeit besteht darin, den offiziellen MCP Inspector
zu verwenden, um Ihren Server mit einer Web-Benutzeroberfläche zu überprüfen:
Häufig gestellte Fragen
Wie verwende ich es mit Claude Desktop?
Folgen Sie der Anleitung https://modelcontextprotocol.io/quickstart/user und fügen Sie die folgende Konfiguration hinzu:
Danksagung
- sova ist von der Python-Implementierung von Jonathan Lowin inspiriert.
- Teile der Codebasis wurden von LiteMCP übernommen.
- Teile der Codebasis wurden aus dem Model Context-Protokoll (SSE) übernommen.
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Ein TypeScript-Framework zum Erstellen von MCP-Servern mit Funktionen für Clientsitzungen, Authentifizierung, Bild-/Audioinhalte und typisierte Serverereignisse.
Related MCP Servers
- AsecurityAlicenseAqualityA TypeScript-based server that allows calling other MCP clients from your own MCP client, facilitating task delegation and context window offloading for enhanced multi-agent interactions.Last updated -314JavaScriptMIT License
- AsecurityFlicenseAqualityA TypeScript-based MCP server designed for experimentation and integration with Calude Desktop and Cursor IDE, offering a modular playground for extending server capabilities.Last updated -21,1334JavaScript
- -securityFlicense-qualityA TypeScript framework for building Model Context Protocol (MCP) servers with automatic discovery and loading of tools, resources, and prompts.Last updated -67TypeScript
- -securityFlicense-qualityA simple TypeScript library for creating Model Context Protocol (MCP) servers with features like type safety, parameter validation, and a minimal code API.Last updated -1TypeScriptMIT License