ホームページ >バックエンド開発 >Python チュートリアル >Python で Jina.ai と FastMCP を使用してモデル コンテキスト プロトコル サーバーを構築する
この投稿では、モデル コンテキスト プロトコルとその重要性について説明し、Jina.ai と通信し、Claude に Web 検索とファクト チェック機能を追加できるようにするための MCP サーバーの構築について説明します。 Python と FastMCP を使用したデスクトップ。
Anthropic は昨年の感謝祭の頃に発表されました。ある程度の注目を集めましたが、AI ソフトウェア スタックの次の層を開発する上で極めて重要な足がかりとなる可能性があることを考えると、その評価は不十分かもしれません。
モデル コンテキスト プロトコル (MCP) は、大規模言語モデル (LLM) 向けに特別に設計された標準化された通信プロトコルです。
これを「AI の HTTP」と考えてください。HTTP が Web ブラウザと Web サーバーとの通信方法を標準化したのと同じように、MCP は LLM アプリケーションがツールやデータ ソースと通信する方法を標準化します。
LLM 開発の現在の状況は、いくつかのハードルに直面しています。
ツール統合の複雑さ: 各 LLM サービス (OpenAI、Anthropic など) にはツール呼び出しと関数呼び出しを実装する独自の方法があるため、ポータブル ツールの構築が複雑になります。
コンテキスト管理: LLM はさまざまなデータ ソースやツールにアクセスする必要がありますが、このアクセスを安全かつ効率的に管理することは困難でした。
標準化: 標準プロトコルがなければ、開発者はサポートしたい LLM プラットフォームごとに統合レイヤーを再構築する必要があります。
MCP は以下を提供することでこれらの課題を解決します。
MCP は、次の 3 つの主要コンポーネントを備えたクライアント/サーバー アーキテクチャに従います。
MCP サーバー: 以下を公開するサービス:
MCP クライアント: アプリケーションは MCP サーバーに接続し、LLM とサーバー間の通信を管理します。クライアントのサポートは初期段階にあり、これまでのところプロトコル仕様の一部を実装しているツールは少数であり、クライアントがまだサポートしていない機能もいくつかあります。
そしてもちろん、LLM...
ワークフローは簡単です:
治安状況はさらに微妙です。標準入出力トランスポートを使用するサーバーは通常、クライアントと同じ場所に配置されるため、API キーが必ずしもインターネットに公開されるわけではありません。私の意見では、それらはかなりカジュアルに渡されているようです。
これらのキーは、子プロセスに渡すことができるようにサーバーの起動時にクライアントにロードする必要があり、デスクトップ アプリのログにも表示されます。これは懸念事項でした。
API キーの広範な使用は、Gen AI サービス、プラットフォーム、ツールに影響を与える広範な問題です。 Okta や Auth0 などの企業は、キーに依存せずに Gen AI を管理および認証するソリューションに取り組んでいます。
Anthropic は、TypeScript、Python、Kotlin の低レベル SDK を正式にサポートしています。最近作成されたボイラープレート ラッパーの一部は、すでにボイラープレートの一部をカバーしており、MCP サーバーの開発を容易にするためのクライアント上でのサーバーのデバッグ、検査、インストール用の CLI などの優れた機能を備えています。
MCP サーバーを構築するための高速な Python 方法。
モデル コンテキスト プロトコル (MCP) サーバーは、LLM にコンテキストとツールを提供するための新しい標準化された方法であり、FastMCP により MCP サーバーの構築がシンプルかつ直感的になります。ツールを作成し、リソースを公開し、クリーンな Python コードでプロンプトを定義します:
# 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
FastMCP は複雑なプロトコルの詳細とサーバー管理をすべて処理するため、優れたツールの構築に集中できます。これは高レベルで Python っぽく設計されています。ほとんどの場合、必要なのは関数を装飾するだけです。
FastMCP はそのようなフレームワークの 1 つです。ここでは、Web サイトを読み取り、Web を介して検索クエリに応答し、情報を事実確認するためのほぼ実用的なツールを作成する方法を検討します。 Jina.aiを使用します。
これは、「エンベディング、リランカー、小規模言語モデル」を組み合わせた「検索基盤プラットフォーム」を提供し、Gen AI とマルチモーダル検索エクスペリエンスを構築する企業を支援する非常に洗練されたサービスです。
UV をインストールする必要があります。これは、Python プロジェクトを作成および管理するための推奨される方法です。これは、astral.sh と呼ばれる、比較的最近ではあるがエキサイティングな Python ツールチェーンの一部です。ぜひチェックしてみることをお勧めします。
プロジェクト、依存関係、仮想環境、バージョン、lint の管理、Python スクリプトとモジュールの実行をワンストップで行うことを目指しています。 Rustで書かれています。その情報を使って何をしますか?
Claude デスクトップ アプリもインストールする必要があります。私たちの目的では、Claude デスクトップ アプリは MCP クライアントとして機能し、Anthropic の主要なターゲット クライアントです。
完全なチュートリアルはこちら:
https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8
UV を使用すると、次のようにプロジェクトを初期化できます。
# 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
これにより、mcp-jinaai-reader というフォルダーと .python-version が pyproject.toml とともに作成されます。
fastmcp install demo.py
これにより、選択した Python バージョンに対応する仮想環境が作成されます。
環境を作成した後、セッションでそれをアクティブ化する方法についての手順が表示されます。
uv init mcp-jinaai-reader --python 3.11
src ディレクトリを追加し、必要な依存関係を 1 つインストールします
cd mcp-jinaai-reader uv venv
プロジェクトのルートに .env ファイルを作成し、そのファイルに JINAAI_API_KEY を追加します。 Jina にサインアップすると、無料で入手できます。一般に、サーバーの実行に必要な API キーまたはその他の環境変数は、このファイルに入れられます。
source .venv/bin/activate
src ディレクトリに、server.py ファイルを作成します。これでコードに到達できるはずです。
uv add fastmcp
インポートから始めます: httpx は、ここで http リクエストを行うために使用するライブラリです。文字列が有効な URL である可能性があるかどうかを判断するには、urlparse メソッドが必要です。
JINAAI_API_KEY=jina_*************
これによりサーバーが初期化されます。最初の引数はツールの名前です。 uvicorn は FastMCP の推移的な依存関係であるため、ここで依存関係として明示的に追加する必要がある理由は 100% わかりませんが、必須であるようです。
これは、fastmcp cli (これについてはすぐに説明します) によるサーバーのインストール方法が原因である可能性があります。他の依存関係がある場合は、クライアントを実行する前に依存関係をインストールする必要があることをクライアントに認識させるために、ここに追加する必要があります。それがどのように機能するかをすぐに見てみましょう。
from fastmcp import FastMCP import httpx from urllib.parse import urlparse import os
ここでパターンを推測できると思いますが、Jina は特定のリクエストをルーティングするために別のサブドメインを使用します。検索エンドポイントはクエリを予期し、リーダー エンドポイントは URL を予期し、グラウンディング エンドポイントは llm に特定の応答または回答を提供できます。
グラウンディングははるかに大きなテーマであり、LLM が幻覚を減らし、意思決定を改善するのを支援するために、RAG や微調整などの他の技術とともに使用されます。
# Initialize the MCP server mcp = FastMCP("search", dependencies=["uvicorn"])
アノテーション @mcp.tool は多くの面倒な作業を行います。リソースとプロンプトに対する同様の注釈がライブラリに存在します。アノテーションは、関数シグネチャと戻り値の型の詳細を抽出して、llm がツールを呼び出すための入出力スキーマを作成します。クライアントがサーバーの機能を理解できるようにツールを構成します。また、関数呼び出しを、構成されたツールのハンドラーとして登録します。
次に、関数が非同期であることがわかります。ランタイム構成は必要ありません。また、asyncio.run も必要ありません。何らかの理由でサーバーをスタンドアロン サービスとして実行する必要がある場合は、その一部を自分で処理する必要があります。これを行う方法の例が FastMCP リポジトリにあります。
関数本体はかなり面白くありません。 URL を受信しているかどうかを検証し、適切なヘッダーを設定し、Jina エンドポイントを呼び出し、テキストを返します。
# 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
それで終わりです...
uv init mcp-jinaai-reader --python 3.11
上記のコマンドを実行すると、mcp インスペクターが起動します。これは、サーバーの応答をテストおよびデバッグするために SDK が提供するツールです。 --with-editable フラグを使用すると、インスペクターを再起動せずにサーバーに変更を加えることができます (強く、強くお勧めします)
次の内容が表示されます:
cd mcp-jinaai-reader uv venv
デフォルトでは、インスペクターはポート 5173 で実行され、サーバー (先ほど作成したコード) はポート 3000 で実行されます。これは、呼び出す前に SERVER_PORT と CLIENT_PORT を設定することで変更できます。
source .venv/bin/activate
すべてがうまくいけば、次のようなものが表示されます。左側で必要な環境変数を追加できます。ここでは JINAAI_API_KEY が唯一の環境変数です。
上部のメニュー バーで [ツール] をクリックし、[ツールの一覧表示] をクリックすると、作成したツールが表示されます。docstring がツールの説明として機能することに注意してください。
特定のツールをクリックすると、ツールを呼び出すために必要なパラメータを入力するためのテキストボックスが表示されます。
期待どおりに動作していることに満足したら、Claude Desktop App クライアントにサーバーをインストールする準備が整いました。
uv add fastmcp
これは実行されます。将来的には他のクライアントもサポートされると確信していますが、今のところ、やるべきことはこれだけです。 -f .env は、環境変数をアプリクライアントに渡します。
これは内部で claude_desktop_config.json を更新し、サーバーを実行するために必要なコマンドと引数を提供します。デフォルトでは、PATH で使用できる必要がある uv を使用します。
ここで Claude デスクトップ アプリを開き、メニュー バーに移動して [Claude] > をクリックすると、 [設定] をクリックし、[開発者] をクリックすると、サーバーの初期化時に設定したツールの名前が表示されます。
それをクリックすると、設定が表示されるはずです。どのように実行されるかだけでなく、詳細オプションでは設定されている環境変数も確認できます。
この構成を直接編集することもできますが、ここでは必ずしもお勧めしません。
デスクトップ アプリにアクセスしてすべてがうまくいけば、エラーは表示されないはずです (エラーが表示された場合は、[設定] に移動すると、ログをチェックアウトしてそこから調査するためのボタンが表示されるはずです)。
さらに、自由に使える個々のツールの数を示すハンマーのシンボルが表示されます (注: 他の MCP サーバーをインストールしていない限り、ツールはおそらく 2 つであるはずです)
ツールを直接呼び出すのではなく、通常どおりアプリとチャットします。ツールが役立つと判断される状況に遭遇すると、そのツールを使用するかどうかを尋ねます。ここで追加のコードや構成は必要ありません。
それが適切かどうかを判断するには、ツール名と説明の両方に依存すると思います。そのため、ツールが何をするのかについて明確で簡単な説明を作成する価値があります。
次のようなプロンプトが表示されます:
そして、単に「チャット」することもできますが、確かに、書かれたツールでは問題が発生することがあります。場合によっては、インターネットにアクセスできないと判断したり、結果の取得に失敗したりすることがありますが、次のようなメッセージが表示される場合もあります:
これには、ページを読み取って概要を提供し、特定の記事に移動してそれを読むように指示するという、ある意味自然な流れがありました。
MCP サーバーについて少しでも理解していただければ幸いです。読んだり見たりするものはたくさんありますが、私がもう 1 つお勧めするサイトは、glama.ai です。このサイトでは、ダウンロードして試すことができる MCP サーバーのかなり包括的なリストが保管されています。これには、おもちゃの例よりも信頼性の高い他の Web 検索ツールも含まれています。ぜひチェックしてください。フォローしていただきありがとうございます。
以上がPython で Jina.ai と FastMCP を使用してモデル コンテキスト プロトコル サーバーを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。