Spring AIの進化とMCP
Spring AI
近年最も注目を浴びている技術はなんといってもAI関連技術であり、SpringもAI関連のプロジェクトに力を注いでいます。その一つがSpring AIです。2024年5月にはSpring AI 1.0がリリースされ、Microsoft、AWS、Google Cloudといった主要クラウドベンダーや、Redis、Elastic、Oracleなどのデータ企業からブログ記事が公開されるなど、広く支持を集めています。Spring AIについては、Spring Developer AdvocateであるJosh Long氏がkeynoteセッションおよび個別セッション「Bootiful Spring AI」にてライブコーディング形式で紹介しました。
Spring AIはAIモデルとのさまざまな機能連携を提供します。「Bootiful Spring AI」ではSpring AIを活用したAIチャットシステムの実装のデモを通してそれぞれの機能の説明が行われました。具体的には、Spring BootアプリケーションからOpenAIのチャットAPIを呼び出すところから始め、OpenAIとのチャット内容をメモリへ保持する機能、AIの振る舞いや応答形式を事前に設定するシステムプロンプト機能、PGVectorを使ったベクトルデータの生成と検索拡張生成(RAG)、ツール(関数)呼び出し機能のデモが披露されました。
ツール呼び出しについてはkeynoteセッションのデモの中でも紹介されています。Javaメソッドに@Toolアノテーションを付与し、その機能とパラメータを自然言語で記述するだけで、AIはそのメソッドをアクションとして実行できるようになります。デモでは、犬の引き取り日をスケジュールするJavaメソッドをAIアシスタントから呼び出す様子が示されました。
AIのツール呼び出し機能の実装をより効果的なものとするために、MCPへの対応も行われています。MCPは、Anthropic社が開発したプロトコルで、AIアシスタントとシステムを標準入出力またはストリーミングHTTPで接続できます。主要な要素はTools(実行可能なアクション)、Resources(外部システムからのデータ)、Prompts(再利用可能なプロンプトテンプレート)の3つであり、MCPサーバーはMCPクライアントに対してこれらを提供します。 Spring AIチームは非常に早い段階でMCPをサポートし、そのJava実装はMCPの公式のJava SDKとなりました。
MCPサーバーの実装
Dan Vega氏のセッション「Spring into MCP」では、MCPのプロトコルとSpring BootによるMCPサーバー構築について解説されています。まず、Spring Initializrを利用して依存関係に「Model Context Protocol Server」を追加することでMCPサーバー開発の準備が整います。次に、application.propertiesに数行の設定を追加します。デモでは、トランスポート方式を標準入出力に設定し、Springバナーとログを無効化していました。これらの無効化は、LLMクライアントとの標準入出力通信を妨げないために必要です。
後は上述のように@Toolアノテーションを付与したBeanを定義します。デモで実装されたのは2つのツールでした。全セッションを返すツールと、日付別に集計したセッション数を返すツールです。LLMに大量のデータを渡して集計させるよりも、サーバー側で集計済みのデータを返すツールを用意する方が効率的であり、トークン使用量の削減にもつながる、との解説がありました。
さらに、プロンプトテンプレートの実装も行われました。Vega氏は「長いプロンプトを毎回入力させるより、効率的なツール選択を誘導するテンプレートを提供する方が良い」と説明し、実際にテンプレート使用時の方が適切なツールが呼び出されることを実演しました。
その他、keynoteセッションでのMCPのデモでは、サードパーティ製のGoogleカレンダー連携MCPサービスも組み合わせ、Spring製MCPサーバーからの結果に基づいて自動的に予定を登録するなど、MCPの持つエコシステムの利便性が強調されていました。
MCPサーバーのセキュリティ
実装したMCPサーバーをローカル環境で使用するだけであればセキュリティを意識することはないかもしれませんが、外部公開する際には時にMCPクライアントがアクセス可能なリソースに制限をかける必要があるでしょう。本稿執筆時点におけるMCPの最新仕様(2025年6月版)では、認可の機構にOAuth 2を使用しています。
Spring SecurityのOAuth 2関連機能の開発に長く携わっているJoe Grandja氏のセッション「Implementing MCP Authorization Using Spring Security OAuth 2.1 Capabilities」では、MCP仕様に定められたMCPクライアント・サーバー間の認可のフローについて確認した後、Spring Securityを利用してこれを実装したデモが披露されました。
MCPの認可フローの一つの特徴は、認可サーバーに事前にクライアントを登録するのではなく、動的クライアント登録(Dynamic Client Registration)を使用することを推奨している点です。デモでは動的クライアント登録を行うMCPクライアント、MCPクライアント、認可サーバーそれぞれのコードが示されました。
注意すべきは、MCP仕様がまだ十分に成熟しておらず、大きな変更が入る可能性がある点です。講演が行われた2025年8月時点ではMCPクライアントからOAuth2を取り除く提案もあり、デモで披露された内容のSpring SecurityやSpring Authorization Serverへのマージについては慎重な姿勢を採っているそうです。本稿執筆時点(2025年10月)では当該の提案は不採用になっており、それとはまた別の提案が採用されています。いずれにせよMCPの認可についてはこれから仕様が変わっていくことを念頭に置いた上で、講演の内容については現行のスナップショットとして参考にするのがよいでしょう。
その他のAI関連プロジェクト
セッション「Bootiful Spring AI」の中では、Spring AIプロジェクトの創立者であるMark Pollack氏からSpring AI BenchとSpring AI Agentsプロジェクトの紹介も行われました。
Spring AI BenchはAIが実際のソフトウェア開発タスク(バグ修正など)をどの程度こなせるかを評価するためのベンチマークを提供するプロジェクトです。Pollack氏は、既存ベンチマークとして知られるSWE-bench(Software Engineering Benchmark)では実際のSpring開発を想定すると不十分であるため、このプロジェクトが発足したと説明しています。具体的には、Java言語のコードをSWE-benchで評価すると非常に悪いスコアになるが、これは評価に使われるAIエージェントのmini-SWE-agentが単純で非現実的な推論を行うことに原因があるとの指摘がありました。SWE-benchにはテストカバレッジやE2Eテスト、コードレビューなど現実的な開発のワークフローに則した評価が欠けており、Spring AI Benchはそれらの解決を目的としているとのことです。
Spring AI Agentsは既存のCLIエージェントをSpringに統合するためのプロジェクトです。Pollack氏はAIエージェントは目標を達成するためのシンプルな機能であるべきとして、Spring AI Agentsを用いた実装はセッション前半で紹介されたChatClientに似たシンプルなものであると説明しました。
実際にSpringプロジェクトのPull Requestに対してSpring AI Agentsを使って分析し、概要、懸念事項、解決策の妥当性などを評価したレポートを出力することができたと話しました。
Spring AI AgentsはSpring AI Benchとの連携も可能であり、将来的にはSpring AIプロジェクトと統合予定とのことです。
Spring開発でAIを活用することを考えている方はSpring AIプロジェクトだけでなく、Spring AI BenchとSpring AI Agentsの動向にも目を向けてはいかがでしょうか。
