MCP Python SDKによるMCPサーバの構築

はじめに

 前回は、OpenAIが公開したAgents SDKを用いてお天気エージェントを作成した。今回は、MCPを実現するためのPython SDKを用いてお天気サーバを作成し、Claude Desktopからそのサーバに問い合わせる仕組みを作る(Claude DesktopとはClaudeのデスクトップアプリである)。

MCPとは

 MCP(Model Context Protocol)は、大規模言語モデル(LLM)から外部ツールを呼び出すためのインタフェース仕様である。このMCPは、2024年にAnthropic(Claudeを開発している企業)が最初に提唱した。その後、多くのLLMベンダーが賛同し、2025年にはOpenAIとGoogleもMCPへの参加を表明し、標準化の流れが加速することになった。つまり、MCPに従うインタフェースを持つサーバ(MCPサーバ)を一度作れば、さまざまなLLMと接続できるようになるということである。今回は、簡単なお天気サーバをMCPサーバとして作成し、実際にClaude Desktopから呼び出してみる。

準備

 pyenvとpoetryを用いてPythonの実行環境を作成した。使用したPythonのバージョンは3.12.0、その他に必要なライブラリのインストール手順は以下のとおりである。

最初の命令で、MCPとMCP CLIをインストールしている。MCP CLIはMCPサーバの開発を効率化するツールであるが、今回のお天気サーバの開発には使用しなかった。

アーキテクチャ

 今回作成するお天気サービスのアーキテクチャを以下に示す。

天気予報の情報取得には、OpenWeather APIを使う。OpenWeatherは、世界中の都市や地域の天気情報と気象データを提供するAPIサービスである(前回のブログでも使用した)。上図のようにローカル上にMCPサーバを作り、これをClaude Desktopと接続する。また、実行環境はWindows11である。

お天気サーバの実装

 Pythonコードは以下の通り。

プログラムの構成は以下の通りである。
*APIアクセス関数
 fetch_weather(): 現在の天気情報を取得する非同期関数
 fetch_forecast(): 3日間(デフォルト)の天気予報を取得する非同期関数
*データ整形関数
 format_weather_data(): 現在の天気データを読みやすいテキスト形式に変換
 format_forecast_data(): 予報データを日付ごとに集計し、平均温度や代表的な天気状態を表示
*MCPツール化(外部に公開されるAPI)
 get_weather(): 指定した都市の現在の天気を取得して返す関数
 get_forecast(): 指定した都市の天気予報を取得して返す関数

Claude Desktopとの接続

 Claude Desktopを起動し、左上3本線のマークをクリック、ファイル > 設定を選択する(下図参照)。

開いた窓の「開発者」を選び、「構成を編集」をクリックする(下図参照)。

すると、Windowsのフォルダが開く。このフォルダ内に「claude_desktop_config.json」ファイルを作成し、以下を記載する。

4行目はpythonコマンドまでの絶対パス、6行目はpythonで実行するファイルまでの絶対パスである。9行目はOpenWeather APIを使うためのアクセスキーである。このあと、Claude Desktopを終了し再起動する。アプリ右上の×印をクリックしてもバックグラウンドで動き続けているので、タスクバーからたどって終了させる(下図参照)。

再起動後、先と同じ設定を開くと以下のようにJSONファイルの内容が反映されていることが分かる(下図参照)。

これは、Claude Desktopが起動するたびに、記載されたPythonスクリプトが実行されMCPサーバが起動状態になることを意味する。Claude DesktopのUIの方に戻ると以下のようにトンカチマークが追加されているはずである(下図参照)。

このトンカチマークをクリックすると2つのツールが提供されていることが表示される(下図参照)。

これらはいずれもソースコードの中に書いた関数名である。1つは天気予報を得る関数、もう一つは現在の天気を得る関数である。以上でClaude Desktopとの接続は完了である。

お天気サーバの呼び出し

 Claude Deskto内で「明日の大阪の天気を教えてください」と打つと、お天気サーバを使ってよいか許可を求める窓が開く。

許可をクリックすると以下のように、今回作成したお天気サーバと遣り取りした結果が表示される(下図参照)。

まとめ

 前回のブログでは、OpenWeatherという外部サービスをAIが直接利用するエージェントの作り方を紹介した。今回は、MCPサーバを介して外部サービスを利用するAIの作り方を見た。この2つは競合する手法ではなく、それぞれを補完するものである。例えば、「Excelを開いて合計値を出す」のような単発の作業ならMCPで十分であるが、「CVSを読み込んで分析、グラフ化、PowerPointに自動貼り付け」のような複雑な作業にはエージェントが良い。もっと言えば、エージェントが各作業を実現するために、MCPサーバを利用するというパターンも考えられるだろう。これからのAIエンジニアは、AIの中身でなく、それをツールとして使いこなす技量が問われそうである。

Kumada Seiya

Kumada Seiya

仕事であろうとなかろうと勉強し続ける、その結果”中身”を知ったエンジニアになれる

最近の記事

  • 関連記事
  • おすすめ記事
  • 特集記事

アーカイブ

カテゴリー

PAGE TOP