Heim > Backend-Entwicklung > Python-Tutorial > Erstellen eines Model Context Protocol Servers mit Jina.ai und FastMCP in Python

Erstellen eines Model Context Protocol Servers mit Jina.ai und FastMCP in Python

Linda Hamilton
Freigeben: 2025-01-05 07:25:39
Original
262 Leute haben es durchsucht

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.

Das Model Context Protocol

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.

Was

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.

Warum brauchen wir MCP?

Die aktuelle Landschaft der LLM-Entwicklung steht vor mehreren Hürden:

  1. 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.

  2. Kontextmanagement: LLMs benötigen Zugriff auf verschiedene Datenquellen und Tools, aber die sichere und effiziente Verwaltung dieses Zugriffs war eine Herausforderung.

  3. 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:

  • Eine standardisierte Möglichkeit, Tools und Daten LLMs zur Verfügung zu stellen
  • Eine sichere Client-Server-Architektur
  • Eine konsistente Schnittstelle unabhängig vom zugrunde liegenden LLM

Wie funktioniert MCP?

MCP folgt einer Client-Server-Architektur mit drei Hauptkomponenten:

  1. MCP-Server: Ein Dienst, der Folgendes verfügbar macht:

    • Tools (Funktionen, die LLMs aufrufen können)
    • Ressourcen (Datenquellen)
    • Eingabeaufforderungen (Vorlagenanweisungen)
    • Kontext (dynamische Informationen)
  2. 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.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

Und natürlich das LLM...

Der Arbeitsablauf ist unkompliziert:

  1. Ein MCP-Server registriert seine Fähigkeiten (Tools, Ressourcen usw.)
  2. Ein Client stellt eine Verbindung zum Server her
  3. Das LLM kann diese Fähigkeiten dann über eine standardisierte Schnittstelle nutzen

Transportprotokoll

  • Mehrere Transportmechanismen
    • SSE (vom Server gesendete Ereignisse)
      • Kommunikation über HTTP bidirektional, Serverprozess ist vom Client isoliert
    • Stdio (Standard-Eingabe/Ausgabe)
      • Kommuniziert über Standard-Eingabe-/Ausgabe-Pipes, der Serverprozess ist im Wesentlichen ein untergeordneter Prozess des Clients

Sicherheit

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.

SDKs

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.

Erste Schritte mit FastMCP

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python jlowin / fastmcp

Der schnelle, pythonische Weg, Model Context Protocol-Server zu erstellen?

FastMCP ?

Der schnelle, pythonische Weg, MCP-Server zu erstellen.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python Building a Model Context Protocol Server using Jina.ai and FastMCP in Python Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Vollbildmodus aufrufen Vollbildmodus verlassen

Das ist es! Geben Sie Claude Zugriff auf den Server, indem Sie Folgendes ausführen:

fastmcp install demo.py
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Vollbildmodus aufrufen Vollbildmodus verlassen

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.

Hauptmerkmale:

  • Schnell: High-Level-Schnittstelle bedeutet weniger Code und schnellere Entwicklung
  • Einfach
Auf GitHub ansehen

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.

Voraussetzungen

  • UV

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?

  • Claude Desktop App

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.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python ASRagab / mcp-jinaai-reader

Model Context Protocol (MCP)-Server für die Jina.ai Reader API

MCP-Server für die Jina.ai Reader API

Vollständige Komplettlösung hier:

https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8


Auf GitHub ansehen


Projekt-Setup

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch werden ein Ordner namens mcp-jinaai-reader und eine .python-version zusammen mit einer pyproject.toml erstellt.

fastmcp install demo.py
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

Fügen Sie ein src-Verzeichnis hinzu und installieren Sie die eine Abhängigkeit, die wir benötigen

cd mcp-jinaai-reader
uv venv 
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

Erstellen Sie im src-Verzeichnis eine server.py-Datei ... und wir sollten in der Lage sein, an den Code zu gelangen.

Servercode

uv add fastmcp
Nach dem Login kopieren
Nach dem Login kopieren

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_*************
Nach dem Login kopieren

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
Nach dem Login kopieren

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.

Unser erstes Werkzeug

# Initialize the MCP server
mcp = FastMCP("search", dependencies=["uvicorn"])
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Zweites Werkzeug

fastmcp install demo.py
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Und das ist es...

Testen und Debuggen

uv init mcp-jinaai-reader --python 3.11
Nach dem Login kopieren
Nach dem Login kopieren

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 
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

Der Inspektor

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

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.

Installieren des Servers

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
Nach dem Login kopieren
Nach dem Login kopieren

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.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

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.

Läuft es

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).

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

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:

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

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:

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

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.

Schlussbemerkungen

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage