以下の内容はhttps://toranoana-lab.hatenablog.com/entry/2025/06/02/100000より取得しました。


Javaのライブラリ「SpringAI」を使ってMCPサーバー作成を試してみた!

こんにちは、虎の穴ラボのH.Hです。
今回は現在開発が進んでいるSpringフレームワークの一部であるMCPサーバーを作成し、その挙動を調査した内容をまとめました。
※2025/5現在開発中のライブラリを使用しているので、今後記述方法が変わる可能性があります。

前半がMCPの説明で、後半が実際のコードや設定方法となっています。
コードなどを確認したい方は「SpringAIのMCPサーバーサンプルについて」からをご確認ください。

SpringAIとは

SpringAIは、Springフレームワークの一部として提供されているライブラリで、生成AI関連の機能を簡単に利用できるようにする仕組みを提供しています。
昨年、バージョン1がリリースされましたが、現在も頻繁にアップデートが行われている活発なプロジェクトです。

詳しくは公式サイトをご参照ください。

spring.io

MCP(Model Context Protocol)とは

2025年に入って注目されているAI関連の用語としてMCPという言葉があります。
この記事を読んでいただいているということで、興味がある方も多いのではないでしょうか?

参考となるとこちらのページになるかと思います。

modelcontextprotocol.io

ページ内でこちらのように書かれています。

MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.

[日本語翻訳]

MCPは、アプリケーションがLLMにコンテキストを提供する方法を標準化するオープンプロトコルだ。MCPはAIアプリケーションのUSB-Cポートのようなものだと考えてほしい。USB-Cがデバイスを様々な周辺機器やアクセサリーに接続するための標準化された方法を提供するように、MCPはAIモデルを様々なデータソースやツールに接続するための標準化された方法を提供します。
USB-Cポートのようなものってどういうこと?

MCPは「USB-Cのようなもの」という説明がよく見られますが、個人的には少しイメージしづらかったため、整理してみました。

エンジニアの方向け

個人的にはFunction Calling を使ったアプリケーションを開発していた経験から、MCPを使ってみた印象は「Function Callingの責務分離」に近いと感じました。
図式すると以下のようになると思います。

OpenAIのFunctionCallingの流れ

MCPの流れ

上記の図のように、これまで一つのアプリケーションの中で処理を分岐させていたことを「呼び出し側」「呼び出される側」の二つに分かれたという認識が一番あっていると思いました。

非エンジニアの方向け

イメージとしては案内する人と対応する人の分業がイメージに近いような気がしています。

これまでは1人または1つのシステムで一括して対応していた業務を、「受付」と「対応者」に分けることで、よりスムーズな処理が可能になるというイメージです。
仮に対応することが増えたとしても、対応する部署や人を決め受付は対応者を把握しておけばよく変更に対応しやすいことがわかると思います。

SpringAIのMCPサーバーサンプルについて

今回は、Spring公式が公開しているサンプルコードを利用しました。

github.com

さらに中にサンプルのソースコードがこちらです。

github.com

元のソースコードはアメリカの地名を入れた時に天気の情報を返してくれるコードになっています。
処理の流れは以下のようになります。(VSCodeにClineを入れて試しました)

サンプルの使用の流れ

1.MCPサーバー用のjarファイルを作成する

1.1 ソースコードをGitHubから取得
git clone https://github.com/spring-projects/spring-ai-examples.git
1.2 IDEでjarファイルを作成する

今回はIntelliJを使用し、Mavenの package コマンドでjarファイルをビルドしました。

ビルドが完了すると以下のように作成されます。

~/spring-ai-examples/model-context-protocol/weather/starter-webflux-server/target/mcp-weather-starter-webflux-server-0.0.1-SNAPSHOT.jar

2.VSCodeにClineを入れる基本設定

2.1 Clineの拡張機能をインストール

拡張機能から「Cline」と調べると見つかると思います。

2.2 使用するAIサービスの設定

拡張機能を開くと上に歯車のマークを押すと設定画面が表示されます。

この画面で使用するAIサービスのAPIのキーなどを設定します。

3.MCPサーバーの設定

3.1 設定画面について

設定画面の上のアイコンの一覧の左から二つ目のアイコンを押すと以下の画面が表示されます。

3.2 Remote Serversを選択

押すと以下の画面が表示されます。

3.3 Edit Configurationを選択し編集して保存

ローカルにあるjarファイルを呼び出すにはEdit Configurationから設定を行います。 設定は以下のように行います、

{
  "mcpServers": {
    "weather-starter-webflux-server": {
      "command": "java",
      "args": [
        "-Dspring.ai.mcp.server.stdio=true",
        "-Dspring.main.web-application-type=none",
        "-Dlogging.pattern.console=",
        "-jar",
        "(jarファイルの場所)/mcp-weather-starter-webflux-server-0.0.1-SNAPSHOT.jar"
      ]
    }
  }
}

設定ファイルの内容からわかるとおりMCPサーバーの呼び出しで特殊なことをしているわけではなく、1で作成したjarファイルをjavaコマンドで実行しています。
設定ファイルを保存すると、裏側で一度アプリケーションが起動していることがログから確認できます。

・ログファイルの設定
application.properties
・プロパティ
logging.file.name=~

サンプルコードの実行

実行1(ニューヨークの警報などを調べる)

実際に動くことを試した結果はこちらです。
別の記事で書いていますが、Clineの応答を日本語に設定しているので回答は日本語になっています。

qiita.com

MCPサーバーが選ばれて必要な情報を整理している部分

MCPサーバーのレスポンス

最終レスポンス

実行2(緯度と経度を調べてAPIから天気を調べる)

緯度と経度を調べる部分

レスポンス

処理の追加方法

サンプルのコードはアメリカ限定の天気の取得なので、たとえば日本の天気などをMCPサーバーは回答することができません。 今回は日本の地名で天気を聞かれたら晴れを固定で返すロジックをサンプルで作成しました。

イメージとしてアプリケーションの処理が3つに分かれる形です。

ロジックの追加

WeatherService.java
---------------------------
@Tool(description = "日本の天気を取得します。")
public String getAlertsInJapan(String state) {
    return state+"の天気は晴れです。";
}
---------------------------

jarファイルの再読み込み

ファイルを変更しただけでは、Cline側は更新を検知できません。そのため、jarファイルを再生成した後、設定を一度更新することで、再読み込みが行われます。 確実に読み込んでもらうために、バージョンを変えたjarファイルなどにすることで読み込み漏れを防ぐことができるかと思います。

実行

実行結果はこちらです。

レスポンスの通り、「東京は晴れです」と返されることを確認しました。
試すと少しアメリカの天気を聞いた時の緯度と経度を求めてという指定に引きずられているような場合もありました。意図した動きにするために新しく入力をしなおすことで修正されました

まとめ

今回JavaのライブラリであるSpringAIを使用してMCPサーバーを作成してみました。
Javaで構築されているため、既存のライブラリを活かした開発が可能です。
今回サーバー側を作成しましたが、クライアント側の実装も可能なようなので調べていきたいと思います。
またMCPに関しては現在も開発が進行中であり、今後も機能追加や仕様変更が想定されるため、引き続き注視していきたいと思います。

採用情報

虎の穴ラボでは一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧ください。
toranoana-lab.co.jp




以上の内容はhttps://toranoana-lab.hatenablog.com/entry/2025/06/02/100000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14