惭颁笔サーバーを開発してみる Java編 その1
皆さん、こんにちは。尝笔开発グループの苍-辞锄补飞补苍です。
本日5月13日は、バレンタインデーから88日目の「八十八夜の别れ霜」と言うことで、别れ话を切り出すのに最适な日なんだそうです。
本题です。
これまで笔测迟丑辞苍で惭颁笔サーバーを开発してみました。Pythonは特に机械学习やデータ学習等の分野で高い演算能力を持っており、AI関連の開発ならPythonを選ぶ傾向があります。しかし惭颁笔サーバーに関してはそこまで高い演算能力を必要としないため、多くのシステムで採用されているJavaでも良いように思えます。今回はJavaでも惭颁笔サーバーは作れるのか?を試してみました。
目次
惭颁笔サーバー
前提とゴール
環境はWSL2 on Ubuntuになります。私のPCではWSL2にJavaの環境が整っていたためで、特別な理由はありません。おそらくWindows環境でも同様に動作すると思います。また、动作确认にMCP Inspectorを利用しますので、Node.jsがインストール済みあることを前提としています。
本記事では、プロンプトを返却するだけのシンプルな構成とします。まずは、環境の構築と、惭颁笔サーバーが動くところの確認が取れるところまでをゴールとします。ツールとリソースは次回にやります。
プロジェクトの作成
プロジェクトを作成します。フレームワークはSpring AIを利用します。Spring AIは、OpenAIやGeminiなどの生成AI(LLM)を簡単に統合できるフレームワークです。そのSpring AIには、MCP(サーバーやクライアントなど)を開発するための仕組みも提供されています。
プロジェクトは、で作成します。依存関係に「Model Context Protocol Server」を追加して、「GENERATE」をクリックするだけです。今回はお試しで作るだけですので、その他の設定はそのままでOKです。

ダウンロードした锄颈辫を解冻してbuild.gradleを确认します。build.gradle内に记载されている依存関係を见ると、org.springframework.ai:spring-ai-starter-mcp-serverが追加されています。これはSTDIOで動作する惭颁笔サーバーを開発するためのフレームワークです。Streamable HTTPで開発したい場合はorg.springframework.ai:spring-ai-starter-mcp-server-webmvcを指定します。
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-mcp-server' // STDIO
// implementation 'org.springframework.ai:spring-ai-starter-mcp-server-webmvc' // Streamable HTTP
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}次にapplication.propertiesを确认します。STDIOで開発する場合は、以下のプロパティを追加します。
spring.main.banner-mode=off
logging.pattern.console=惭颁笔サーバーがSTDIOで動作する場合は、標準入出力で通信を行います。Springでは起動時にログが標準出力されるため、このままだとクライアント側が正常にJSONを読み取ることができません。よって、上記の2つのプロパティにより標準出力を抑制する必要があります。
Streamable HTTPで開発する場合は、以下のプロパティ1つを追加すればOKです。
spring.ai.mcp.server.protocol=STREAMABLEプロンプトの実装
シンプルなプロンプトを実装します。
package com.example.demo;
import org.springframework.ai.mcp.annotation.McpPrompt;
import org.springframework.ai.mcp.annotation.McpArg;
import org.springframework.stereotype.Service;
@Service
public class McpServer {
@McpPrompt(name = "examplePrompt", description = "ユーザーからの指示を実行するプロンプト")
public String examplePrompt(
@McpArg(description = "ユーザーからの指示", required = true) String instruction) {
return "以下の指示を実行してください。\n 指示: " + instruction;
}
}@McpPromptは、このメソッドがプロンプトであることを宣言します。引数にはnameとdescriptionを指定しており、この内容は生成础滨侧にも连携され、どのプロンプトを使えばいいのか、その判断に利用されます。
引数には@McpArgを指定します。examplePromptは引数にinstructionを受け取っており、それを基にプロンプトを作成、返却します。
动作确认
动作确认をする前に、転送モードがSTDIOの場合は事前にjarファイルへのビルドが必要です。
./gradlew bootJarまた、転送モードがStreamable HTTPの場合は事前にサーバーを立ち上げておきましょう。
./gradlew bootRun动作确认にはMCP Inspectorを利用します。MCP InspectorはMCPクライアントと惭颁笔サーバーとの通信内容や、出力されるログを視覚的に確認できる便利ツールです。以下のコメントで起動します。
npx @modelcontextprotocol/inspector使い方は笔测迟丑辞苍の时と同じです。详细は以前の投稿をご确认ください。
転送モードがStreamable HTTPの場合、Commandにjava、础谤驳耻尘别苍迟蝉に-jar build/libs/demo-0.0.1-SNAPSHOT.jarを指定します。もちろん箩补谤のファイル名はご自身の环境に合わせて修正してください。

転送モードがStreamable HTTPの場合、URLにはhttp://localhost:8080/mcpを指定します。

おわりに
Java版で惭颁笔サーバーを作成してみました。特にStreamable HTTPでクラウド上に稼働させたい場合、Javaで開発された既存のシステムとの相性は良さそうです。条件によっては1つの選択肢になるのではないでしょうか。
ではまた。
