In diesem Beitrag besprechen wir das Model Context Protocol, warum es wichtig sein könnte, und gehen durch den Aufbau eines MCP-Servers, der uns hilft, mit Jina.ai zu kommunizieren und in Claude Websuch- und Faktenprüfungsfunktionen hinzufügen zu können Desktop mit Python und FastMCP.
Anthropic wurde letztes Jahr rund um Thanksgiving angekündigt. Obwohl es einige Aufmerksamkeit erregte, reicht die Anerkennung möglicherweise nicht aus, wenn man bedenkt, dass es ein entscheidender Schritt bei der Entwicklung der nächsten Ebene des KI-Software-Stacks sein könnte.
Das Model Context Protocol (MCP) ist ein standardisiertes Kommunikationsprotokoll, das speziell für große Sprachmodelle (LLMs) entwickelt wurde.
Betrachten Sie es als das „HTTP der KI“ – so wie HTTP standardisiert hat, wie Webbrowser mit Webservern kommunizieren, standardisiert MCP, wie LLM-Anwendungen mit Tools und Datenquellen kommunizieren.
Die aktuelle Landschaft der LLM-Entwicklung steht vor mehreren Hürden:
Komplexität der Werkzeugintegration: Jeder LLM-Dienst (wie OpenAI, Anthropic usw.) hat seine eigene Art, Werkzeugaufrufe und Funktionsaufrufe zu implementieren, was die Erstellung tragbarer Werkzeuge komplex macht.
Kontextmanagement: LLMs benötigen Zugriff auf verschiedene Datenquellen und Tools, aber die sichere und effiziente Verwaltung dieses Zugriffs war eine Herausforderung.
Standardisierung: Ohne ein Standardprotokoll müssen Entwickler die Integrationsschichten für jede LLM-Plattform, die sie unterstützen möchten, neu erstellen.
MCP löst diese Herausforderungen durch Folgendes:
MCP folgt einer Client-Server-Architektur mit drei Hauptkomponenten:
MCP-Server: Ein Dienst, der Folgendes verfügbar macht:
MCP-Client: Die Anwendung stellt eine Verbindung zu MCP-Servern her und verwaltet die Kommunikation zwischen dem LLM und den Servern. Der Client-Support befindet sich noch in einem frühen Stadium. Bisher gibt es nur eine Handvoll Tools, die einen Teil der Protokollspezifikation implementieren, und einige Funktionen, die noch von keinem Client unterstützt werden.
Und natürlich das LLM...
Der Arbeitsablauf ist unkompliziert:
Die Sicherheitslage ist differenzierter. Da sich Server, die den stdio-Transport nutzen, in der Regel am selben Ort wie der Client befinden, sind API-Schlüssel daher nicht unbedingt dem Internet zugänglich. Meiner Meinung nach scheinen sie eher beiläufig herumgereicht zu werden.
Diese Schlüssel mussten beim Serverstart in den Client geladen werden, damit sie an den untergeordneten Prozess übergeben werden konnten, und sie erschienen sogar in den Protokollen der Desktop-App, was ... besorgniserregend war.
Die weit verbreitete Verwendung von API-Schlüsseln ist ein umfassenderes Problem, das Dienste, Plattformen und Tools der Generation AI betrifft. Unternehmen wie Okta und Auth0 arbeiten an einer Lösung zur Verwaltung und Autorisierung von Gen AIs, ohne auf Schlüssel angewiesen zu sein.
Anthropic unterstützt offiziell Low-Level-SDKs für TypeScript, Python und Kotlin. Einige der Boilerplate-Wrapper, die kürzlich erstellt wurden, decken bereits einen Teil des Boilerplates ab und verfügen über andere nette Funktionen, wie z. B. eine CLI zum Debuggen, Überprüfen und Installieren von Servern auf dem Client, um die Entwicklung von MCP-Servern zu vereinfachen.
Der schnelle, pythonische Weg, MCP-Server zu erstellen.
Model Context Protocol (MCP)-Server sind eine neue, standardisierte Möglichkeit, Ihren LLMs Kontext und Tools bereitzustellen, und FastMCP macht den Aufbau von MCP-Servern einfach und intuitiv. Erstellen Sie Tools, stellen Sie Ressourcen bereit und definieren Sie Eingabeaufforderungen mit sauberem Python-Code:
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
Das ist es! Geben Sie Claude Zugriff auf den Server, indem Sie Folgendes ausführen:
fastmcp install demo.py
FastMCP kümmert sich um alle komplexen Protokolldetails und die Serververwaltung, sodass Sie sich auf die Entwicklung großartiger Tools konzentrieren können. Es ist auf hohem Niveau und pythonisch konzipiert – in den meisten Fällen ist das Dekorieren einer Funktion alles, was Sie brauchen.
FastMCP ist ein solches Framework. Wir werden nun untersuchen, wie man ein nahezu praktisches Tool zum Lesen von Websites, zum Beantworten von Suchanfragen im Internet und zum Überprüfen von Informationen erstellt. Wir werden Jina.ai verwenden.
Es handelt sich um einen sehr raffinierten Dienst, der eine „Search Foundation-Plattform“ bereitstellt, die „Einbettungen, Reranker und kleine Sprachmodelle“ kombiniert, um Unternehmen beim Aufbau von Gen AI und multimodalen Sucherlebnissen zu unterstützen.
Sie müssen UV installiert haben. Dies ist die empfohlene Methode zum Erstellen und Verwalten von Python-Projekten. Es ist Teil einer relativ neuen, aber spannenden Python-Toolchain namens astral.sh. Ich empfehle Ihnen, es sich anzusehen.
Ziel ist es, eine zentrale Anlaufstelle für die Verwaltung von Projekten, Abhängigkeiten, virtuellen Umgebungen, Versionen, Linting und die Ausführung von Python-Skripten und -Modulen zu sein. Es ist in Rust geschrieben. Machen Sie mit diesen Informationen, was Sie wollen?
Sie müssen außerdem die Claude Desktop App installieren. Für unsere Zwecke dient die Claude Desktop App als MCP-Client und ist ein wichtiger Ziel-Client für Anthropic.
Vollständige Komplettlösung hier:
https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8
Mit uv können Sie ein Projekt initialisieren mit:
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
Dadurch werden ein Ordner namens mcp-jinaai-reader und eine .python-version zusammen mit einer pyproject.toml erstellt.
fastmcp install demo.py
Dadurch wird eine virtuelle Umgebung erstellt, die der von uns gewählten Python-Version entspricht.
Nachdem die Umgebung erstellt wurde, werden Anweisungen zur Aktivierung für die Sitzung angezeigt.
uv init mcp-jinaai-reader --python 3.11
Fügen Sie ein src-Verzeichnis hinzu und installieren Sie die eine Abhängigkeit, die wir benötigen
cd mcp-jinaai-reader uv venv
Erstellen Sie eine .env-Datei im Projektstammverzeichnis und fügen Sie Ihren JINAAI_API_KEY zur Datei hinzu. Sie können eines kostenlos erhalten, indem Sie sich bei Jina anmelden. Im Allgemeinen werden alle API-Schlüssel oder andere Umgebungsvariablen, die Ihr Server zum Ausführen benötigt, in dieser Datei abgelegt.
source .venv/bin/activate
Erstellen Sie im src-Verzeichnis eine server.py-Datei ... und wir sollten in der Lage sein, an den Code zu gelangen.
uv add fastmcp
Beginnen wir mit den Importen: httpx, wird die Bibliothek sein, die wir hier verwenden, um http-Anfragen zu stellen; Wir benötigen die URLparse-Methode, um festzustellen, ob eine Zeichenfolge möglicherweise eine gültige URL ist.
JINAAI_API_KEY=jina_*************
Dadurch wird der Server initialisiert; Das erste Argument ist der Name des Tools. Ich bin mir nicht 100 % sicher, warum uvicorn hier explizit als Abhängigkeit hinzugefügt werden muss, da es sich um eine transitive Abhängigkeit von FastMCP handelt, aber es scheint erforderlich zu sein.
Dies liegt wahrscheinlich daran, wie die Fastmcp-CLI (mehr dazu in Kürze) den Server installiert. Wenn Sie andere Abhängigkeiten haben, müssen Sie diese hier hinzufügen, damit der Client weiß, dass Sie sie installieren müssen, bevor Sie den Client ausführen. Wir werden gleich sehen, wie das funktioniert.
from fastmcp import FastMCP import httpx from urllib.parse import urlparse import os
Sie können das Muster hier wahrscheinlich erkennen, aber Jina verwendet verschiedene Subdomains, um bestimmte Anfragen weiterzuleiten. Der Suchendpunkt erwartet eine Abfrage, der Leserendpunkt erwartet eine URL und der Erdungsendpunkt kann dem LM eine bestimmte Antwort oder Antwort liefern.
Erdung ist ein viel größeres Thema und wird zusammen mit anderen Techniken wie RAG und Feinabstimmung verwendet, um LLMs dabei zu unterstützen, Halluzinationen zu reduzieren und die Entscheidungsfindung zu verbessern.
# Initialize the MCP server mcp = FastMCP("search", dependencies=["uvicorn"])
Die Annotation @mcp.tool übernimmt einen Großteil der schweren Arbeit. Ähnliche Anmerkungen für Ressourcen und Eingabeaufforderungen gibt es in der Bibliothek. Die Annotation extrahiert die Details der Funktionssignatur und des Rückgabetyps, um ein Eingabe- und Ausgabeschema für den LLM zum Aufrufen des Tools zu erstellen. Es konfiguriert das Tool, damit der Client die Fähigkeiten des Servers versteht. Außerdem werden die Funktionsaufrufe als Handler für das konfigurierte Tool registriert.
Als nächstes werden Sie feststellen, dass die Funktion asynchron ist. Es ist keine Laufzeitkonfiguration erforderlich und auch keine asyncio.run-Sachen. Wenn Sie den Server aus irgendeinem Grund als eigenständigen Dienst ausführen müssen, müssen Sie einiges davon selbst erledigen. Im FastMCP-Repo gibt es ein Beispiel dafür.
Der Funktionskörper ist einigermaßen uninteressant; Es überprüft, ob eine URL empfangen wird, legt die entsprechenden Header fest, ruft den Jina-Endpunkt auf und gibt den Text zurück.
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
fastmcp install demo.py
Und das ist es...
uv init mcp-jinaai-reader --python 3.11
Durch Ausführen des obigen Befehls wird der mcp-Inspektor gestartet. Dabei handelt es sich um ein Tool, das das SDK zum Testen und Debuggen von Serverantworten bereitstellt. Mit dem Flag --with-editable können Sie Änderungen am Server vornehmen, ohne den Inspektor neu starten zu müssen (dringend, DRINGEND empfohlen)
Sie sollten Folgendes sehen:
cd mcp-jinaai-reader uv venv
Standardmäßig wird der Inspektor auf Port 5173 ausgeführt, und der Server (der Code, den Sie gerade geschrieben haben) wird auf Port 3000 ausgeführt. Sie können dies ändern, indem Sie vor dem Aufruf SERVER_PORT und CLIENT_PORT festlegen.
source .venv/bin/activate
Wenn alles gut geht, sollten Sie etwa Folgendes sehen: Auf der linken Seite können Sie die benötigten Umgebungsvariablen hinzufügen, hier ist der JINAAI_API_KEY der einzige.
Wenn Sie in der oberen Menüleiste auf „Extras“ und dann auf „Tools auflisten“ klicken, sollten Sie die von uns erstellten Tools anzeigen. Beachten Sie, dass die Dokumentzeichenfolge als Beschreibung für das Tool dient.
Wenn Sie auf ein bestimmtes Werkzeug klicken, werden die Textfelder angezeigt, in denen Sie die zum Aufrufen des Werkzeugs erforderlichen Parameter eingeben können.
Sobald Sie zufrieden sind, dass alles wie erwartet funktioniert, können Sie jetzt den Server auf dem Claude Desktop App-Client installieren.
uv add fastmcp
Das werde ich tun, ich bin mir sicher, dass es in Zukunft auch andere Kunden unterstützen wird, aber im Moment ist das alles, was Sie tun müssen. Das -f .env übergibt die Env-Variablen an den App-Client.
Was dies unter der Haube bewirkt, ist die Aktualisierung der claude_desktop_config.json und die Bereitstellung der erforderlichen Befehle und Argumente zum Ausführen des Servers. Standardmäßig wird UV verwendet, das in Ihrem PATH verfügbar sein muss.
Wenn Sie jetzt die Claude Desktop-App öffnen, zur Menüleiste gehen und auf Claude > klicken. Klicken Sie dann auf „Einstellungen“ und dann auf „Entwickler“. Dort sollte der Name Ihres Tools angezeigt werden, das Sie bei der Initialisierung des Servers festgelegt haben.
Wenn Sie darauf klicken, sollte die Konfiguration angezeigt werden. Sie erfahren nicht nur, wie es ausgeführt wird, sondern sehen in den erweiterten Optionen auch die festgelegten Umgebungsvariablen.
Sie können diese Konfiguration auch direkt bearbeiten, aber ich würde es hier nicht unbedingt empfehlen.
Wenn alles gut geht, wenn Sie die Desktop-App aufrufen, sollten keine Fehler angezeigt werden (wenn Sie dies tun, sollten Sie in den Einstellungen eine Schaltfläche finden, mit der Sie die Protokolle überprüfen und von dort aus nachforschen können).
Außerdem sollten Sie ein Hammersymbol mit der Anzahl der einzelnen Tools sehen, die Ihnen zur Verfügung stehen (Hinweis: Es sollten wahrscheinlich zwei sein, es sei denn, Sie haben andere MCP-Server installiert)
Anstatt das Tool direkt aufzurufen, chatten Sie wie gewohnt mit der App, und wenn sie auf eine Situation stößt, in der sie zu dem Schluss kommt, dass das Tool hilfreich ist, werden Sie gefragt, ob Sie es verwenden möchten. Hier ist kein zusätzlicher Code oder eine zusätzliche Konfiguration erforderlich.
Ich denke, bei der Entscheidung, ob es angemessen ist, kommt es sowohl auf den Namen des Werkzeugs als auch auf die Beschreibung an. Daher lohnt es sich, eine klare, einfache Beschreibung dessen zu verfassen, was das Werkzeug tut.
Sie erhalten eine Eingabeaufforderung wie die folgende:
Und Sie können einfach damit „chatten“, zugegebenermaßen gibt es bei dem Tool in der geschriebenen Form manchmal Probleme. Gelegentlich entscheidet es, dass es nicht auf das Internet zugreifen kann, manchmal schlägt der Abruf der Ergebnisse fehl, aber manchmal erhalten Sie Folgendes:
Das war eine Art natürlicher Ablauf, bei dem die Seite gelesen, eine Zusammenfassung bereitgestellt und Sie aufgefordert wurden, zu einem bestimmten Artikel zu gehen und diesen zu lesen.
Hoffentlich hat Ihnen das einen Einblick in MCP-Server gegeben. Es gibt viel zu lesen und anzusehen, aber eine weitere Website, die ich empfehlen möchte, ist glama.ai. Sie führen eine ziemlich umfassende Liste verfügbarer MCP-Server zum Herunterladen und Ausprobieren, einschließlich anderer Websuchtools, die zuverlässiger sind als unser Spielzeugbeispiel. Schauen Sie es sich an und vielen Dank, dass Sie mitgemacht haben.
Das obige ist der detaillierte Inhalt vonErstellen eines Model Context Protocol Servers mit Jina.ai und FastMCP in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!